windows-nt/Source/XPSP1/NT/sdktools/mep/browser/mbrmake/dcodesbr.c
2020-09-26 16:20:57 +08:00

149 lines
3.2 KiB
C

//
//
// 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");
}