/***************************************************************************/ /* omf51.h */ /***************************************************************************/ #include #include /***************************************************************************/ #ifndef OMF51_H #define OMF51_H #define BYTE unsigned char #define DBYTE unsigned short #define REC_TYPE_MHDR 0x02 /* Module Header Record */ #define REC_TYPE_MEND 0x04 /* Module End Record */ #define REC_TYPE_CNT 0x06 /* Content Record */ #define REC_TYPE_FIX 0x08 /* Fixup Record */ #define REC_TYPE_SEG 0x0E /* Segment Definition Record */ #define REC_TYPE_SCD 0x10 /* Scope Definition Record */ #define REC_TYPE_DBG 0x12 /* Debug Item Record */ #define REC_TYPE_PUB 0x16 /* Public Definition Record */ #define REC_TYPE_EXT 0x18 /* External Definition Record */ #define REC_TYPE_LML 0x26 /* LIB ModLocs Record */ #define REC_TYPE_LMN 0x28 /* LIB ModName Record */ #define REC_TYPE_LDIC 0x2A /* LIB DICTNRY Record */ #define REC_TYPE_LHDR 0x2C /* LIB Header Record */ #define MAX_MHDR 8 #define MAX_MEND 8 #define MAX_SEG 255 #define MAX_SEGDEF 255 #define MAX_PUB 255 #define MAX_PUBDEF 255 #define MAX_EXT 255 #define MAX_EXTDEF 255 #define MAX_SCD 255 #define MAX_DBG 255 #define MAX_DBGINFO 255 #define MAX_CNT 255 #define MAX_FIX 255 #define MAX_FIXDEF 255 #define MAX_MODULES 255 #define DBG_DEFTYP_LOCAL 0x00 #define DBG_DEFTYP_PUBLIC 0x01 #define DBG_DEFTYP_SEGMENT 0x02 #define DBG_DEFTYP_LINE 0x03 #define SCD_BLKTYP_MOD_BLOCK 0x00 #define SCD_BLKTYP_DO_BLOCK 0x01 #define SCD_BLKTYP_PROC_BLOCK 0x02 #define SCD_BLKTYP_MOD_END 0x03 #define SCD_BLKTYP_DO_END 0x04 #define SCD_BLKTYP_PROC_END 0x05 #define OBJECT_IS_REL 0 #define OBJECT_IS_ABS 1 /***************************************************************************/ /* Module Header Record */ typedef struct _sMHDR { char name[41]; BYTE trnID, nameLen, reserved, chkSum; DBYTE len; } MHDR; /* Module End Record */ typedef struct _sMEND { char name[41]; BYTE regMSK, nameLen, res8, chkSum; DBYTE len, res16; } MEND; typedef struct _sSEGDEF { BYTE name[41], nameLen, segID, segINFO, relTYP, res8; DBYTE segBASE, segSIZE; } SEGDEF; /* Segment Definition Record */ typedef struct _sSEG { BYTE chkSum; DBYTE numSegDef, len; // SEGDEF segDef[MAX_SEGDEF]; SEGDEF *segDef; } SEG; typedef struct _sPUBDEF { BYTE name[41], nameLen, segID, symINFO, res8; DBYTE offset; } PUBDEF; typedef struct _sPUB { BYTE chkSum; DBYTE numPubDef, len; // PUBDEF pubDef[MAX_PUBDEF]; PUBDEF *pubDef; } PUB; typedef struct _sEXTDEF { BYTE name[41], nameLen, idBlk, extID, symINFO, res8; } EXTDEF; typedef struct _sEXT { BYTE chkSum; DBYTE numExtDef, len; // EXTDEF extDef[MAX_EXTDEF]; EXTDEF *extDef; } EXT; typedef struct _sSCD { char name[41]; BYTE blkTYP, chkSum, nameLen; DBYTE len; } SCD; typedef struct _sDBGINFO { BYTE name[41], nameLen, segID, segINFO, symINFO, res8; DBYTE offset, lineNumber; } DBGINFO; typedef struct _sDBG { BYTE chkSum, defTYP; DBYTE numDbgInfo, len; // DBGINFO dbgInfo[MAX_DBGINFO]; DBGINFO *dbgInfo; } DBG; typedef struct _sCNT { BYTE chkSum, segID, *pData; DBYTE len, offset, size; } CNT; typedef struct _sOP { BYTE IDBlk, ID; DBYTE offset; } OP; typedef struct _sFIXDEF { BYTE refTYP; DBYTE refLoc; OP operand; } FIXDEF; typedef struct _sFIX { BYTE chkSum; DBYTE len, numFixDef; // FIXDEF fixDef[MAX_FIXDEF]; FIXDEF *fixDef; } FIX; typedef struct _sMODULE { char *pName; DBYTE numDbg, numCnt, numFix; DBG *ppDbg[MAX_DBG]; CNT *ppCnt[MAX_CNT]; FIX *ppFix[MAX_FIX]; } MODULE; typedef struct _sOBJECT { char *fileName[1024]; DBYTE numUnknown, numMHDR, numMEND, numCNT, numFIX, numSEG, numSCD; DBYTE numDBG, numPUB, numEXT, numLML, numLMN, numLDIC, numLHDR; DBYTE numModules; FILE *pFile; MHDR *mhdr; MEND *mend; SEG *seg; PUB *pub; EXT *ext; SCD *scd; DBG *dbg; CNT *cnt; FIX *fix; DBYTE numUnimplemented; MODULE *module; BYTE allocType; } OBJECT; /***************************************************************************/ void OmfInit(struct _sOBJECT *pObj); int OmfOpen(struct _sOBJECT *pObj, char *pName); void OmfClose(struct _sOBJECT *pObj); void OmfRead(struct _sOBJECT *pObj); void OmfPrint(struct _sOBJECT *pObj); void Omf2Hex(struct _sOBJECT *pObj); /***************************************************************************/ #endif /* OMF51_H */