/*** binfmt.h - Format services definitions * * Copyright (c) 1995,1996 Microsoft Corporation * Author: Michael Tsang (MikeTs) * Created 11/06/95 * * MODIFICATION HISTORY */ #ifndef _BITFMT_H #define _BITFMT_H #ifndef ENTER #define ENTER(n,p) #endif #ifndef EXIT #define EXIT(n,p) #endif #ifndef TRACENAME #define TRACENAME(s) #endif #include #ifdef USE_CRUNTIME #include #include #define PRINTF printf #define FPRINTF fprintf #define SPRINTF sprintf #define STRCPY strcpy #define STRCPYN strncpy #define STRCAT strcat #define STRLEN strlen #else #ifdef WINAPP #define SPRINTF wsprintf #define STRCPY lstrcpy #define STRCPYN lstrcpyn #define STRCAT lstrcat #define STRLEN lstrlen #else //assume VxD #define SPRINTF _Sprintf #define STRCPY(s1,s2) _lstrcpyn(s1,s2,(DWORD)(-1)) #define STRCPYN(s1,s2,n) _lstrcpyn(s1,s2,(n)+1) #define STRCAT(s1,s2) _lstrcpyn((s1)+_lstrlen(s1),s2,(DWORD)(-1)) #define STRLEN _lstrlen #endif #endif // // Error Codes // #define FERR_NONE 0 #define FERR_INVALID_FORMAT -1 #define FERR_INVALID_UNITSIZE -2 // // String Constants // #define SZ_SEP_SPACE " " #define SZ_SEP_TAB "\t" #define SZ_SEP_COMMA "," #define SZ_SEP_SEMICOLON ";" #define SZ_SEP_COLON ":" #define SZ_FMT_DEC "%d" #define SZ_FMT_HEX "%x" #define SZ_FMT_HEX_BYTE "%02x" #define SZ_FMT_HEX_WORD "%04x" #define SZ_FMT_HEX_DWORD "%08lx" #define SZ_FMT_WORDOFFSET SZ_FMT_HEX_WORD SZ_SEP_COLON #define SZ_FMT_DWORDOFFSET SZ_FMT_HEX_DWORD SZ_SEP_COLON // // bFmtType Values // #define FMT_NUMBER 0 #define FMT_ENUM 1 #define FMT_BITS 2 #define FMT_STRING 3 // // bUnitSize Values // #define UNIT_BYTE sizeof(BYTE) #define UNIT_WORD sizeof(WORD) #define UNIT_DWORD sizeof(DWORD) // // dwfFormat Flags // #define FMTF_NO_EOL 0x80000000 #define FMTF_NO_INC_OFFSET 0x40000000 #define FMTF_NO_SEP 0x20000000 #define FMTF_NO_PRINT_DATA 0x10000000 #define FMTF_PRINT_OFFSET 0x08000000 #define FMTF_NO_RAW_DATA 0x04000000 #define FMTF_STR_ASCIIZ 0x00000001 #define FMTF_FIRST_FIELD (FMTF_NO_EOL | FMTF_NO_INC_OFFSET | \ FMTF_NO_PRINT_DATA) #define FMTF_MIDDLE_FIELD (FMTF_NO_EOL | FMTF_NO_INC_OFFSET | \ FMTF_NO_PRINT_DATA) #define FMTF_LAST_FIELD FMTF_NO_PRINT_DATA // // Structure and Type Definitions // typedef VOID (*LPFN)(FILE *, BYTE *, DWORD); typedef struct fmthdr_s { BYTE bFmtType; //Format type: see FMT_* BYTE bUnitSize; //Data unit size: see UNIT_* BYTE bUnitCnt; //Data unit count for a format record DWORD dwfFormat; //Format flags: see FMTF_* int iRepeatCnt; //Repeat count for this format record char *pszOffsetFmt; //Offset format char *pszFieldSep; //Field separator between bUnitCnt of data char *pszLabel; //LHS label } FMTHDR, *PFMTHDR; typedef struct fmt_s { char *pszLabel; PFMTHDR pfmtType; LPFN lpfn; } FMT, *PFMT; typedef struct fmtnum_s { FMTHDR hdr; DWORD dwMask; BYTE bShiftCnt; char *pszNumFmt; } FMTNUM, *PFMTNUM; typedef struct fmtenum_s { FMTHDR hdr; DWORD dwMask; BYTE bShiftCnt; DWORD dwStartEnum; DWORD dwEndEnum; char **ppszEnumNames; char *pszOutOfRange; } FMTENUM, *PFMTENUM; typedef struct fmtbits_s { FMTHDR hdr; DWORD dwMask; char **ppszOnNames; char **ppszOffNames; } FMTBITS, *PFMTBITS; typedef struct fmtstr_s { FMTHDR hdr; } FMTSTR, *PFMTSTR; typedef struct fmtchar_s { FMTHDR hdr; } FMTCHAR, *PFMTCHAR; // // API Prototypes // #ifdef FPRINTF int BinFPrintf(FILE *pfile, char *pszBuffer, PFMT pfmt, BYTE *pb, DWORD *pdwOffset, char *pszOffsetFormat); #endif int BinSprintf(char *pszBuffer, PFMTHDR pfmt, BYTE *pb, DWORD *pdwOffset); #endif //ifndef _BINFMT_H