|
|
//
//
// DCODESBR.C - dumps a human readable version of the current .sbr file
// record from the r_... variables
//
//
#include "sbrfdef.h"
#include "mbrmake.h"
char * near prectab[] = { "HEADER", // SBR_REC_HEADER
"MODULE", // SBR_REC_MODULE
"LINDEF", // SBR_REC_LINDEF
"SYMDEF", // SBR_REC_SYMDEF
"SYMREFUSE", // SBR_REC_SYMREFUSE
"SYMREFSET", // SBR_REC_SYMREFSET
"MACROBEG", // SBR_REC_MACROBEG
"MACROEND", // SBR_REC_MACROEND
"BLKBEG", // SBR_REC_BLKBEG
"BLKEND", // SBR_REC_BLDEND
"MODEND", // SBR_REC_MODEND
"OWNER" // SBR_REC_OWNER
};
char * near plangtab[] = { "UNDEF", // SBR_L_UNDEF
"BASIC", // SBR_L_BASIC
"C", // SBR_L_C
"FORTRAN", // SBR_L_FORTRAN
"MASM", // SBR_L_MASM
"PASCAL", // SBR_L_PASCAL
"COBOL" // SBR_L_COBOL
};
char * near ptyptab[] = { "UNDEF", // SBR_TYP_UNKNOWN
"FUNCTION", // SBR_TYP_FUNCTION
"LABEL", // SBR_TYP_LABEL
"PARAMETER", // SBR_TYP_PARAMETER
"VARIABLE", // SBR_TYP_VARIABLE
"CONSTANT", // SBR_TYP_CONSTANT
"MACRO", // SBR_TYP_MACRO
"TYPEDEF", // SBR_TYP_TYPEDEF
"STRUCNAM", // SBR_TYP_STRUCNAM
"ENUMNAM", // SBR_TYP_ENUMNAM
"ENUMMEM", // SBR_TYP_ENUMMEM
"UNIONNAM", // SBR_TYP_UNIONNAM
"SEGMENT", // SBR_TYP_SEGMENT
"GROUP", // SBR_TYP_GROUP
"PROGRAM" // SBR_TYP_PROGRAM
};
char * near patrtab[] = { "LOCAL", // SBR_ATR_LOCAL
"STATIC", // SBR_ATR_STATIC
"SHARED", // SBR_ATR_SHARED
"NEAR", // SBR_ATR_NEAR
"COMMON", // SBR_ATR_COMMON
"DECL_ONLY", // SBR_ATR_DECL_ONLY
"PUBLIC", // SBR_ATR_PUBLIC
"NAMED", // SBR_ATR_NAMED
"MODULE", // SBR_ATR_MODULE
"?", "?" // reserved for expansion
};
VOID DecodeSBR () { int i; static indent;
switch(r_rectyp) { case SBR_REC_MACROEND: case SBR_REC_BLKEND: case SBR_REC_MODEND: indent--; break;
case SBR_REC_HEADER: case SBR_REC_MODULE: case SBR_REC_LINDEF: case SBR_REC_SYMDEF: case SBR_REC_SYMREFUSE: case SBR_REC_SYMREFSET: case SBR_REC_MACROBEG: case SBR_REC_BLKBEG: case SBR_REC_OWNER: break;
default: fprintf(streamOut, "invalid record type %0xh", r_rectyp); SBRCorrupt(""); return; }
for (i = indent; i; i--) fprintf (streamOut, " ");
fprintf (streamOut, "%s: (", prectab[r_rectyp]);
switch(r_rectyp) {
case SBR_REC_HEADER: fprintf (streamOut, "%1d:%1d (%s) %1d)", r_majv, r_minv, plangtab[r_lang], r_fcol); fprintf (streamOut, " in %s", r_cwd); break;
case SBR_REC_MODULE: fprintf (streamOut, "%s", r_bname); indent++; break;
case SBR_REC_LINDEF: fprintf (streamOut, "%d", r_lineno); break;
case SBR_REC_SYMDEF: { WORD attr, type;
type = (r_attrib & SBR_TYPMASK) >> SBR_TYPSHIFT; attr = (r_attrib & SBR_ATRMASK) >> SBR_ATRSHIFT;
fprintf (streamOut, "%s", ptyptab[type]);
for (i = 0 ; i < SBR_ATRBITS; i++) if (attr & (1 << i)) fprintf (streamOut, "|%s", patrtab[i]);
fprintf (streamOut, " o:%d %s", r_ordinal, r_bname); } break;
case SBR_REC_SYMREFUSE: case SBR_REC_SYMREFSET: case SBR_REC_OWNER: fprintf (streamOut, "o:%d", r_ordinal); break;
case SBR_REC_MACROBEG: case SBR_REC_BLKBEG: indent++; break; } fprintf (streamOut, ")\n"); }
|