Initial import
git-svn-id: http://moon:8086/svn/software/trunk/libsrc/omf51@1 b431acfa-c32f-4a4a-93f1-934dc6c82436
This commit is contained in:
@@ -0,0 +1,217 @@
|
||||
/***************************************************************************/
|
||||
/* omf51.h */
|
||||
/***************************************************************************/
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
/***************************************************************************/
|
||||
#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 */
|
||||
Reference in New Issue
Block a user