Initial import

git-svn-id: http://moon:8086/svn/software/trunk/libsrc/omf51@1 b431acfa-c32f-4a4a-93f1-934dc6c82436
This commit is contained in:
2014-07-19 07:44:42 +00:00
commit 3297d1bb7e
23 changed files with 2610 additions and 0 deletions
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
Executable
BIN
View File
Binary file not shown.
Executable
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
Executable
+640
View File
@@ -0,0 +1,640 @@
/***************************************************************************/
/* omf51.c */
/***************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <memory.h>
#include "omf51.h"
#include "omf51const.h"
#include <types.h>
#include <ihexparse.h>
/***************************************************************************/
/* Helper Functions
/***************************************************************************/
void MHDRInit(struct _sMHDR *pObj)
{
pObj->chkSum = 0;
pObj->reserved = 0;
pObj->len = 0;
pObj->name[0] = 0;
pObj->nameLen = 0;
pObj->trnID = 0;
}
void MENDInit(struct _sMEND *pObj)
{
pObj->chkSum = 0;
pObj->len = 0;
pObj->name[0] = 0;
pObj->nameLen = 0;
pObj->regMSK = 0;
pObj->res16 = 0;
pObj->res8 = 0;
}
void SEGDEFInit(struct _sSEGDEF *pObj)
{
pObj->relTYP = 0;
pObj->res8 = 0;
pObj->segBASE = 0;
pObj->segID = 0;
pObj->segINFO = 0;
pObj->segSIZE = 0;
pObj->nameLen = 0;
pObj->name[0] = 0;
}
void SEGInit(struct _sSEG *pObj)
{
DBYTE i;
pObj->segDef = (SEGDEF*)malloc(MAX_SEGDEF*sizeof(SEGDEF));
for(i=0; i < MAX_SEGDEF; i++)
SEGDEFInit(&pObj->segDef[i]);
pObj->chkSum = 0;
pObj->numSegDef = 0;
pObj->len = 0;
}
void PUBDEFInit(struct _sPUBDEF *pObj)
{
pObj->name[0] = 0;
pObj->nameLen = 0;
pObj->offset = 0;
pObj->res8 = 0;
pObj->segID = 0;
pObj->symINFO = 0;
}
void PUBInit(struct _sPUB *pObj)
{
DBYTE i;
pObj->pubDef = (PUBDEF*)malloc(MAX_PUBDEF*sizeof(PUBDEF));
for(i=0; i < MAX_PUBDEF; i++)
PUBDEFInit(&pObj->pubDef[i]);
pObj->chkSum = 0;
pObj->len = 0;
pObj->numPubDef = 0;
}
void EXTDEFInit(struct _sEXTDEF *pObj)
{
pObj->extID = 0;
pObj->idBlk = 0;
pObj->name[0] = 0;
pObj->nameLen = 0;
pObj->res8 = 0;
pObj->symINFO = 0;
}
void EXTInit(struct _sEXT *pObj)
{
DBYTE i;
pObj->extDef = (EXTDEF*)malloc(MAX_EXTDEF*sizeof(EXTDEF));
for(i=0; i < MAX_EXTDEF; i++)
EXTDEFInit(&pObj->extDef[i]);
pObj->chkSum = 0;
pObj->len = 0;
pObj->numExtDef = 0;
}
void SCDInit(struct _sSCD *pObj)
{
pObj->blkTYP = 0;
pObj->chkSum = 0;
pObj->len = 0;
pObj->name[0] = 0;
pObj->nameLen = 0;
}
void DBGINFOInit(struct _sDBGINFO *pObj)
{
pObj->lineNumber = 0;
pObj->name[0] = 0;
pObj->nameLen = 0;
pObj->offset = 0;
pObj->res8 = 0;
pObj->segID = 0;
pObj->segINFO = 0;
pObj->symINFO = 0;
}
void DBGInit(struct _sDBG *pObj)
{
DBYTE i;
pObj->dbgInfo = (DBGINFO*)malloc(MAX_DBGINFO*sizeof(DBGINFO));
for(i=0; i < MAX_DBGINFO; i++)
DBGINFOInit(&pObj->dbgInfo[i]);
pObj->chkSum = 0;
pObj->defTYP = 0;
pObj->len = 0;
pObj->numDbgInfo = 0;
}
void CNTInit(struct _sCNT *pObj)
{
pObj->chkSum = 0;
pObj->len = 0;
pObj->offset = 0;
pObj->pData = NULL;
pObj->segID = 0;
pObj->size = 0;
}
void FIXDEFInit(struct _sFIXDEF *pObj)
{
pObj->refLoc = 0;
pObj->refTYP = 0;
pObj->operand.ID = 0;
pObj->operand.IDBlk = 0;
pObj->operand.offset = 0;
}
void FIXInit(struct _sFIX *pObj)
{
DBYTE i;
pObj->fixDef = (FIXDEF*)malloc(MAX_FIXDEF*sizeof(FIXDEF));
for(i=0; i < MAX_FIXDEF; i++)
FIXDEFInit(&pObj->fixDef[i]);
pObj->chkSum = 0;
pObj->len = 0;
pObj->numFixDef = 0;
}
void ModuleInit(struct _sMODULE *pObj)
{
DBYTE i;
pObj->numCnt = 0;
pObj->numDbg = 0;
pObj->numFix = 0;
pObj->pName = NULL;
for (i=0; i < MAX_DBG; i++)
pObj->ppDbg[i] = NULL;
for (i=0; i < MAX_CNT; i++)
pObj->ppCnt[i] = NULL;
for (i=0; i < MAX_FIX; i++)
pObj->ppFix[i] = NULL;
}
/***************************************************************************/
/* Exported Functions
/***************************************************************************/
void OmfInit(struct _sOBJECT *pObj)
{
DBYTE i;
pObj->mhdr = (MHDR*)malloc(MAX_MHDR*sizeof(MHDR));
for (i=0; i < MAX_MHDR; i++)
MHDRInit(&pObj->mhdr[i]);
pObj->mend = (MEND*)malloc(MAX_MEND*sizeof(MEND));
for (i=0; i < MAX_MEND; i++)
MENDInit(&pObj->mend[i]);
pObj->seg = (SEG*)malloc(MAX_SEG*sizeof(SEG));
for (i=0; i < MAX_SEG; i++)
SEGInit(&pObj->seg[i]);
pObj->pub = (PUB*)malloc(MAX_PUB*sizeof(PUB));
for (i=0; i < MAX_PUB; i++)
PUBInit(&pObj->pub[i]);
pObj->ext = (EXT*)malloc(MAX_EXT*sizeof(EXT));
for (i=0; i < MAX_EXT; i++)
EXTInit(&pObj->ext[i]);
pObj->scd = (SCD*)malloc(MAX_SCD*sizeof(SCD));
for (i=0; i < MAX_SCD; i++)
SCDInit(&pObj->scd[i]);
pObj->dbg = (DBG*)malloc(MAX_DBG*sizeof(DBG));
for (i=0; i < MAX_DBG; i++)
DBGInit(&pObj->dbg[i]);
pObj->cnt = (CNT*)malloc(MAX_CNT*sizeof(CNT));
for (i=0; i < MAX_CNT; i++)
CNTInit(&pObj->cnt[i]);
pObj->fix = (FIX*)malloc(MAX_FIX*sizeof(FIX));
for (i=0; i < MAX_FIX; i++)
FIXInit(&pObj->fix[i]);
pObj->module = (MODULE*)malloc(MAX_MODULES*sizeof(MODULE));
for (i=0; i < MAX_MODULES; i++)
ModuleInit(&pObj->module[i]);
pObj->numUnknown = 0;
pObj->numMHDR = 0;
pObj->numCNT = 0;
pObj->numDBG = 0;
pObj->numEXT = 0;
pObj->numFIX = 0;
pObj->numLDIC = 0;
pObj->numLHDR = 0;
pObj->numLML = 0;
pObj->numLMN = 0;
pObj->numMEND = 0;
pObj->numPUB = 0;
pObj->numSCD = 0;
pObj->numSEG = 0;
pObj->numModules = 0;
pObj->numUnimplemented = 0;
pObj->allocType = OBJECT_IS_ABS;
}
int OmfOpen(struct _sOBJECT *pObj, char *pName)
{
strcpy((char*)pObj->fileName, (char*)pName);
pObj->pFile = fopen(pName, "rb");
if (pObj->pFile == NULL)
return -1;
return 0;
}
void OmfClose(struct _sOBJECT *pObj)
{
fclose(pObj->pFile);
}
void OmfRead(struct _sOBJECT *pObj)
{
BYTE recType, recChkSum, modFinished;
DBYTE recCnt,recLen, i;
MHDR *pMHDR;
MEND *pMEND;
SEG *pSEG;
SEGDEF *pSEGDEF;
PUB *pPUB;
PUBDEF *pPUBDEF;
EXT *pEXT;
EXTDEF *pEXTDEF;
SCD *pSCD, *pCpyScd;
DBG *pDBG, *pCpyDbg;
DBGINFO *pDBGINFO;
CNT *pCNT, *pCpyCnt;
FIX *pFIX, *pCpyFix;
FIXDEF *pFIXDEF;
MODULE *pMod;
recCnt=0;
modFinished=0;
pCpyDbg = pObj->dbg;
pCpyCnt = pObj->cnt;
pCpyFix = pObj->fix;
pCpyScd = pObj->scd;
while(!feof(pObj->pFile))
{
if (fread(&recType, sizeof(BYTE), 1, pObj->pFile)==0)
break;
if (fread(&recLen, sizeof(DBYTE), 1, pObj->pFile)==0)
break;
pMod = &pObj->module[pObj->numModules];
switch(recType)
{
case REC_TYPE_MHDR: /* Module Header Record */
pMHDR = &pObj->mhdr[pObj->numMHDR];
pMHDR->len = recLen;
fread(&pMHDR->nameLen, sizeof(BYTE), 1, pObj->pFile);
fread(pMHDR->name, sizeof(BYTE), (size_t)pMHDR->nameLen, pObj->pFile);
pMHDR->name[pMHDR->nameLen] = 0;
fread(&pMHDR->trnID, sizeof(BYTE), 1, pObj->pFile);
fread(&pMHDR->reserved, sizeof(BYTE), 1, pObj->pFile);
fread(&pMHDR->chkSum, sizeof(BYTE), 1, pObj->pFile);
pObj->numMHDR++;
break;
case REC_TYPE_MEND: /* Module End Record */
pMEND = &pObj->mend[pObj->numMEND];
pMEND->len = recLen;
fread(&pMEND->nameLen, sizeof(BYTE), 1, pObj->pFile);
fread(pMEND->name, sizeof(BYTE), (size_t)pMEND->nameLen, pObj->pFile);
pMEND->name[pMEND->nameLen] = 0;
fread(&pMEND->res16, sizeof(DBYTE), 1, pObj->pFile);
fread(&pMEND->regMSK, sizeof(BYTE), 1, pObj->pFile);
fread(&pMEND->res8, sizeof(BYTE), 1, pObj->pFile);
fread(&pMEND->chkSum, sizeof(BYTE), 1, pObj->pFile);
pObj->numMEND++;
/* Update Modules (Sorting) */
pMod->pName = pCpyScd->name;
for (i=0; i < pMod->numCnt; i++)
pMod->ppCnt[i] = pCpyCnt++;
for (i=0; i < pMod->numDbg; i++)
pMod->ppDbg[i] = pCpyDbg++;
for (i=0; i < pMod->numFix; i++)
pMod->ppFix[i] = pCpyFix++;
pObj->numModules++;
modFinished = 0;
break;
case REC_TYPE_CNT: /* Content Record */
pCNT = &pObj->cnt[pObj->numCNT];
pCNT->len = recLen;
fread(&pCNT->segID, sizeof(BYTE), 1, pObj->pFile);
fread(&pCNT->offset, sizeof(DBYTE), 1, pObj->pFile);
if (pCNT->segID > 0)
{
pSEGDEF = &pObj->seg[0].segDef[pCNT->segID-1];
pCNT->size = pSEGDEF->segSIZE;
}
pCNT->size = pCNT->len-4;
pCNT->pData = (BYTE*)malloc(pCNT->size*sizeof(BYTE));
fread(pCNT->pData, sizeof(BYTE), (size_t)pCNT->size, pObj->pFile);
fread(&pCNT->chkSum, sizeof(BYTE), 1, pObj->pFile);
pObj->numCNT++;
pMod->numCnt++;
break;
case REC_TYPE_FIX: /* Fixup Record */
pFIX = &pObj->fix[pObj->numFIX];
pFIX->len = recLen;
recLen -= 1;
while (recLen)
{
pFIXDEF = &pFIX->fixDef[pFIX->numFixDef];
fread(&pFIXDEF->refLoc, sizeof(DBYTE), 1, pObj->pFile);
fread(&pFIXDEF->refTYP, sizeof(BYTE), 1, pObj->pFile);
fread(&pFIXDEF->operand.IDBlk, sizeof(BYTE), 1, pObj->pFile);
fread(&pFIXDEF->operand.ID, sizeof(BYTE), 1, pObj->pFile);
fread(&pFIXDEF->operand.offset, sizeof(DBYTE), 1, pObj->pFile);
recLen -= (DBYTE)7;
pFIX->numFixDef++;
}
fread(&pFIX->chkSum, sizeof(BYTE), 1, pObj->pFile);
pObj->numFIX++;
pMod->numFix++;
break;
case REC_TYPE_SEG: /* Segment Definition Record */
pSEG = &pObj->seg[pObj->numSEG];
pSEG->len = recLen;
recLen -= 1;
while (recLen)
{
pSEGDEF = &pSEG->segDef[pSEG->numSegDef];
fread(&pSEGDEF->segID, sizeof(BYTE), 1, pObj->pFile);
fread(&pSEGDEF->segINFO, sizeof(BYTE), 1, pObj->pFile);
fread(&pSEGDEF->relTYP, sizeof(BYTE), 1, pObj->pFile);
fread(&pSEGDEF->res8, sizeof(BYTE), 1, pObj->pFile);
fread(&pSEGDEF->segBASE, sizeof(DBYTE), 1, pObj->pFile);
fread(&pSEGDEF->segSIZE, sizeof(DBYTE), 1, pObj->pFile);
fread(&pSEGDEF->nameLen, sizeof(BYTE), 1, pObj->pFile);
if (pSEGDEF->nameLen > 0)
fread(&pSEGDEF->name, sizeof(BYTE), (size_t)pSEGDEF->nameLen, pObj->pFile);
pSEGDEF->name[pSEGDEF->nameLen] = 0;
recLen -= (DBYTE)(pSEGDEF->nameLen + 9);
pSEG->numSegDef++;
}
fread(&pSEG->chkSum, sizeof(BYTE), 1, pObj->pFile);
pObj->numSEG++;
pObj->allocType = OBJECT_IS_REL;
break;
case REC_TYPE_SCD: /* Scope Definition Record */
pSCD = &pObj->scd[pObj->numSCD];
pSCD->len = recLen;
fread(&pSCD->blkTYP, sizeof(BYTE), 1, pObj->pFile);
fread(&pSCD->nameLen, sizeof(BYTE), 1, pObj->pFile);
if (pSCD->nameLen > 0)
fread(pSCD->name, sizeof(BYTE), pSCD->nameLen, pObj->pFile);
pSCD->name[pSCD->nameLen] = 0;
fread(&pSCD->chkSum, sizeof(BYTE), 1, pObj->pFile);
pObj->numSCD++;
if (pSCD->blkTYP == SCD_BLKTYP_MOD_BLOCK)
{
if (modFinished == 1)
{
/* Update Modules (Sorting) */
pMod->pName = pCpyScd->name;
for (i=0; i < pMod->numCnt; i++)
pMod->ppCnt[i] = pCpyCnt++;
for (i=0; i < pMod->numDbg; i++)
pMod->ppDbg[i] = pCpyDbg++;
for (i=0; i < pMod->numFix; i++)
pMod->ppFix[i] = pCpyFix++;
pObj->numModules++;
modFinished = 0;
pCpyScd++;
pCpyScd++;
}
}
else
{
if(pSCD->blkTYP == SCD_BLKTYP_MOD_END)
{
modFinished = 1;
}
}
break;
case REC_TYPE_DBG: /* Debug Item Record */
pDBG = &pObj->dbg[pObj->numDBG];
pDBG->len = recLen;
fread(&pDBG->defTYP, sizeof(BYTE), 1, pObj->pFile);
recLen -= 2;
switch(pDBG->defTYP)
{
case DBG_DEFTYP_LOCAL:
case DBG_DEFTYP_PUBLIC:
while (recLen)
{
pDBGINFO = &pDBG->dbgInfo[pDBG->numDbgInfo];
fread(&pDBGINFO->segID, sizeof(BYTE), 1, pObj->pFile);
fread(&pDBGINFO->symINFO, sizeof(BYTE), 1, pObj->pFile);
fread(&pDBGINFO->offset, sizeof(DBYTE), 1, pObj->pFile);
fread(&pDBGINFO->res8, sizeof(BYTE), 1, pObj->pFile);
fread(&pDBGINFO->nameLen, sizeof(BYTE), 1, pObj->pFile);
if (pDBGINFO->nameLen > 0)
fread(&pDBGINFO->name, sizeof(BYTE), (size_t)pDBGINFO->nameLen, pObj->pFile);
pDBGINFO->name[pDBGINFO->nameLen] = 0;
recLen -= (DBYTE)(pDBGINFO->nameLen + 6);
pDBG->numDbgInfo++;
}
break;
case DBG_DEFTYP_SEGMENT:
while (recLen)
{
pDBGINFO = &pDBG->dbgInfo[pDBG->numDbgInfo];
fread(&pDBGINFO->segID, sizeof(BYTE), 1, pObj->pFile);
fread(&pDBGINFO->segINFO, sizeof(BYTE), 1, pObj->pFile);
fread(&pDBGINFO->offset, sizeof(DBYTE), 1, pObj->pFile);
fread(&pDBGINFO->res8, sizeof(BYTE), 1, pObj->pFile);
fread(&pDBGINFO->nameLen, sizeof(BYTE), 1, pObj->pFile);
if (pDBGINFO->nameLen > 0)
fread(&pDBGINFO->name, sizeof(BYTE), (size_t)pDBGINFO->nameLen, pObj->pFile);
pDBGINFO->name[pDBGINFO->nameLen] = 0;
recLen -= (DBYTE)(pDBGINFO->nameLen + 6);
pDBG->numDbgInfo++;
}
break;
case DBG_DEFTYP_LINE:
while (recLen)
{
pDBGINFO = &pDBG->dbgInfo[pDBG->numDbgInfo];
fread(&pDBGINFO->segID, sizeof(BYTE), 1, pObj->pFile);
fread(&pDBGINFO->offset, sizeof(DBYTE), 1, pObj->pFile);
fread(&pDBGINFO->lineNumber, sizeof(DBYTE), 1, pObj->pFile);
recLen -= (DBYTE)5;
pDBG->numDbgInfo++;
}
break;
}
fread(&pDBG->chkSum, sizeof(BYTE), 1, pObj->pFile);
pObj->numDBG++;
pMod->numDbg++;
break;
case REC_TYPE_PUB: /* Public Definition Record */
pPUB = &pObj->pub[pObj->numPUB];
pPUB->len = recLen;
recLen -= 1;
while (recLen)
{
pPUBDEF = &pPUB->pubDef[pPUB->numPubDef];
fread(&pPUBDEF->segID, sizeof(BYTE), 1, pObj->pFile);
fread(&pPUBDEF->symINFO, sizeof(BYTE), 1, pObj->pFile);
fread(&pPUBDEF->offset, sizeof(DBYTE), 1, pObj->pFile);
fread(&pPUBDEF->res8, sizeof(BYTE), 1, pObj->pFile);
fread(&pPUBDEF->nameLen, sizeof(BYTE), 1, pObj->pFile);
if (pPUBDEF->nameLen > 0)
fread(&pPUBDEF->name, sizeof(BYTE), (size_t)pPUBDEF->nameLen, pObj->pFile);
pPUBDEF->name[pPUBDEF->nameLen] = 0;
recLen -= (DBYTE)(pPUBDEF->nameLen + 6);
pPUB->numPubDef++;
}
fread(&pPUB->chkSum, sizeof(BYTE), 1, pObj->pFile);
pObj->numPUB++;
break;
case REC_TYPE_EXT: /* External Definition Record */
pEXT = &pObj->ext[pObj->numEXT];
pEXT->len = recLen;
recLen -= 1;
while (recLen)
{
pEXTDEF = &pEXT->extDef[pEXT->numExtDef];
fread(&pEXTDEF->idBlk, sizeof(BYTE), 1, pObj->pFile);
fread(&pEXTDEF->extID, sizeof(BYTE), 1, pObj->pFile);
fread(&pEXTDEF->symINFO, sizeof(BYTE), 1, pObj->pFile);
fread(&pEXTDEF->res8, sizeof(BYTE), 1, pObj->pFile);
fread(&pEXTDEF->nameLen, sizeof(BYTE), 1, pObj->pFile);
if (pEXTDEF->nameLen > 0)
fread(&pEXTDEF->name, sizeof(BYTE), (size_t)pEXTDEF->nameLen, pObj->pFile);
pEXTDEF->name[pEXTDEF->nameLen] = 0;
recLen -= (DBYTE)(pEXTDEF->nameLen + 5);
pEXT->numExtDef++;
}
fread(&pEXT->chkSum, sizeof(BYTE), 1, pObj->pFile);
pObj->numEXT++;
break;
case REC_TYPE_LML: /* LIB ModLocs Record */
fseek(pObj->pFile, (long)recLen-1, SEEK_CUR);
fread(&recChkSum, sizeof(BYTE), 1, pObj->pFile);
pObj->numLML++;
pObj->numUnimplemented++;
break;
case REC_TYPE_LMN: /* LIB ModName Record */
fseek(pObj->pFile, (long)recLen-1, SEEK_CUR);
fread(&recChkSum, sizeof(BYTE), 1, pObj->pFile);
pObj->numLMN++;
pObj->numUnimplemented++;
break;
case REC_TYPE_LDIC: /* LIB DICTNRY Record */
fseek(pObj->pFile, (long)recLen-1, SEEK_CUR);
fread(&recChkSum, sizeof(BYTE), 1, pObj->pFile);
pObj->numLDIC++;
pObj->numUnimplemented++;
break;
case REC_TYPE_LHDR: /* LIB Header Record */
fseek(pObj->pFile, (long)recLen-1, SEEK_CUR);
fread(&recChkSum, sizeof(BYTE), 1, pObj->pFile);
pObj->numLHDR++;
pObj->numUnimplemented++;
break;
default:
fseek(pObj->pFile, (long)recLen, SEEK_CUR);
pObj->numUnknown++;
break;
}
recCnt++;
}
}
void Omf2Hex(struct _sOBJECT *pObj)
{
char name[255];
DBYTE i, size, len;
BYTE *pData;
CNT *pCnt;
HEXREC hex;
sprintf(name, "%s.hex",pObj->mhdr[0].name);
HexCreate(&hex, name);
for (i=0; i < pObj->numCNT; i++)
{
pCnt = &pObj->cnt[i];
pData = pCnt->pData;
size = pCnt->size;
hex.dataStart = pCnt->offset;
while(size)
{
len = size;
if (len > HEXREC_MAXLEN)
len = HEXREC_MAXLEN;
memcpy(hex.recData, pData, len);
hex.length = (BYTE)len;
hex.type = 0;
HexWriteRecord(&hex);
hex.dataStart += len;
pData += len;
size -= len;
}
}
HexClose(&hex);
}
/***************************************************************************/
/* Ende
/***************************************************************************/
Executable
+112
View File
@@ -0,0 +1,112 @@
# Microsoft Developer Studio Project File - Name="omf51" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** NICHT BEARBEITEN **
# TARGTYPE "Win32 (x86) Static Library" 0x0104
CFG=omf51 - Win32 Debug
!MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit NMAKE
!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den Befehl
!MESSAGE
!MESSAGE NMAKE /f "omf51.mak".
!MESSAGE
!MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben
!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel:
!MESSAGE
!MESSAGE NMAKE /f "omf51.mak" CFG="omf51 - Win32 Debug"
!MESSAGE
!MESSAGE Für die Konfiguration stehen zur Auswahl:
!MESSAGE
!MESSAGE "omf51 - Win32 Release" (basierend auf "Win32 (x86) Static Library")
!MESSAGE "omf51 - Win32 Debug" (basierend auf "Win32 (x86) Static Library")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "omf51 - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
# ADD BASE RSC /l 0x407 /d "NDEBUG"
# ADD RSC /l 0x407 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo /out:"../../lib/Release\omf51.lib"
!ELSEIF "$(CFG)" == "omf51 - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
# ADD BASE RSC /l 0x407 /d "_DEBUG"
# ADD RSC /l 0x407 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo /out:"../../lib/Debug\omf51.lib"
!ENDIF
# Begin Target
# Name "omf51 - Win32 Release"
# Name "omf51 - Win32 Debug"
# Begin Group "Quellcodedateien"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\omf51.c
# End Source File
# Begin Source File
SOURCE=.\omf51const.c
# End Source File
# Begin Source File
SOURCE=.\omf51print.c
# End Source File
# End Group
# Begin Group "Header-Dateien"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE=.\omf51const.h
# End Source File
# Begin Source File
SOURCE=.\omf51print.h
# End Source File
# End Group
# End Target
# End Project
Executable
+29
View File
@@ -0,0 +1,29 @@
Microsoft Developer Studio Workspace File, Format Version 6.00
# WARNUNG: DIESE ARBEITSBEREICHSDATEI DARF NICHT BEARBEITET ODER GELÖSCHT WERDEN!
###############################################################################
Project: "omf51"=.\omf51.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Global:
Package=<5>
{{{
}}}
Package=<3>
{{{
}}}
###############################################################################
Executable
+217
View File
@@ -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 */
Executable
BIN
View File
Binary file not shown.
Executable
BIN
View File
Binary file not shown.
Executable
+31
View File
@@ -0,0 +1,31 @@
<html>
<body>
<pre>
<h1>Erstellungsprotokoll</h1>
<h3>
--------------------Konfiguration: omf51 - Win32 Release--------------------
</h3>
<h3>Befehlszeilen</h3>
Erstellen der temporären Datei "D:\WIN98\TEMP\RSPE2E0.TMP" mit Inhalten
[
/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /Fp"Release/omf51.pch" /YX /Fo"Release/" /Fd"Release/" /FD /c
"E:\home\Develop\80x86\libsrc\omf51\omf51const.c"
"E:\home\Develop\80x86\libsrc\omf51\omf51.c"
"E:\home\Develop\80x86\libsrc\omf51\omf51print.c"
]
Creating command line "cl.exe @D:\WIN98\TEMP\RSPE2E0.TMP"
Erstellen der Befehlzeile "link.exe -lib /nologo /out:"../../lib/Release\omf51.lib" .\Release\omf51const.obj .\Release\omf51.obj .\Release\omf51print.obj "
<h3>Ausgabefenster</h3>
Kompilierung läuft...
omf51const.c
omf51.c
omf51print.c
Bibliothek wird erstellt...
<h3>Ergebnisse</h3>
omf51.lib - 0 Fehler, 0 Warnung(en)
</pre>
</body>
</html>
Executable
+1074
View File
File diff suppressed because it is too large Load Diff
Executable
+20
View File
@@ -0,0 +1,20 @@
/***************************************************************************/
/* omf51const.h */
/***************************************************************************/
#ifndef OMF51CONST_H
#define OMF51CONST_H
/***************************************************************************/
/* Constants
/***************************************************************************/
extern const char *recTypeTitle[256];
extern const char *segTypeName[8];
extern const char *symTypeName[8];
extern const char *relTypeName[256];
extern const char *blkTypeName[256];
extern const char *dbgDefTypeName[256];
/***************************************************************************/
/* Ende
/***************************************************************************/
#endif /* OMF51CONST_H */
Executable
+443
View File
@@ -0,0 +1,443 @@
/***************************************************************************/
/* omf51print.c */
/***************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include "omf51.h"
#include "omf51const.h"
#include "omf51print.h"
/***************************************************************************/
/* Constants
/***************************************************************************/
/***************************************************************************/
/* Helper Functions
/***************************************************************************/
BYTE SegmentGetSegType(BYTE segInfo)
{
return (segInfo & 0x07);
}
BYTE SegmentGetSegReg(BYTE segInfo)
{
return (segInfo & 0x18) >> 3;
}
BYTE SegmentIsEmpty(BYTE segInfo)
{
return (segInfo & 0x80) >> 7;
}
BYTE SegmentIsOVL(BYTE segInfo)
{
return (segInfo & 0x20) >> 5;
}
BYTE SymbolIsIND(BYTE symInfo)
{
return (symInfo & 0x80) >> 7;
}
BYTE SymbolIsVAR(BYTE symInfo)
{
return (symInfo & 0x40) >> 6;
}
BYTE SymbolIsRBF(BYTE symInfo)
{
return (symInfo & 0x20) >> 5;
}
BYTE SymbolGetSymReg(BYTE symInfo)
{
return (symInfo & 0x18) >> 3;
}
BYTE SegmentGetSymType(BYTE symInfo)
{
return (symInfo & 0x07);
}
/***************************************************************************/
/* Exported Functions
/***************************************************************************/
void MHDRPrint(struct _sMHDR *pObj, FILE *pFile)
{
fprintf(pFile, "Module name : %s\n",pObj->name);
fprintf(pFile, "Software used : ");
switch(pObj->trnID)
{
case 0xFD:
fprintf(pFile, "ASM51 ");
break;
case 0xFE:
fprintf(pFile, "PL/M-51 ");
break;
case 0xFF:
fprintf(pFile, "RL51 ");
break;
default:
fprintf(pFile, "Unknown ");
break;
}
fprintf(pFile, "(0x%2.2X)\n",pObj->trnID);
fprintf(pFile, "\n");
}
void SEGDEFPrint(struct _sSEGDEF *pObj, FILE *pFile)
{
fprintf(pFile, "Segment name : %s\n", pObj->name);
fprintf(pFile, "Segment ID : 0x%2.2X", pObj->segID);
if (pObj->segID == 0)
fprintf(pFile, " (Absolut)\n");
else
fprintf(pFile, "\n");
fprintf(pFile, "Relocation Type : %s (0x%2.2X)\n", relTypeName[pObj->relTYP], pObj->relTYP);
fprintf(pFile, "Empty : ");
if (SegmentIsEmpty(pObj->segINFO) == 1)
fprintf(pFile, "Yes\n");
else
fprintf(pFile, "No\n");
fprintf(pFile, "Overlayable : ");
if (SegmentIsOVL(pObj->segINFO) == 1)
fprintf(pFile, "Yes\n");
else
fprintf(pFile, "No\n");
fprintf(pFile, "Register bank : %x\n",SegmentGetSegReg(pObj->segINFO));
fprintf(pFile, "Segment Type : %s\n",segTypeName[SegmentGetSegType(pObj->segINFO)]);
fprintf(pFile, "Segment base : 0x%4.4X\n", pObj->segBASE);
fprintf(pFile, "Segment size : 0x%4.4X\n", pObj->segSIZE);
fprintf(pFile, "\n");
}
void SEGPrint(struct _sSEG *pObj, FILE *pFile)
{
DBYTE i;
for (i=0; i < pObj->numSegDef; i++)
SEGDEFPrint(&pObj->segDef[i], pFile);
}
void PUBDEFPrint(struct _sPUBDEF *pObj, FILE *pFile)
{
fprintf(pFile, "Public name : %s\n", pObj->name);
fprintf(pFile, "Segment ID : 0x%2.2X", pObj->segID);
if (pObj->segID == 0)
fprintf(pFile, " (Absolut)\n");
else
fprintf(pFile, "\n");
fprintf(pFile, "Indirect Call : ");
if (SymbolIsIND(pObj->symINFO) == 1)
fprintf(pFile, "Yes\n");
else
fprintf(pFile, "No\n");
fprintf(pFile, "Variable : ");
if (SymbolIsVAR(pObj->symINFO) == 1)
fprintf(pFile, "Yes\n");
else
fprintf(pFile, "No\n");
fprintf(pFile, "Reg. Banks used : ");
if (SymbolIsRBF(pObj->symINFO) == 1)
fprintf(pFile, "at least one bank\n");
else
fprintf(pFile, "all\n");
fprintf(pFile, "Register bank : %x\n",SymbolGetSymReg(pObj->symINFO));
fprintf(pFile, "Usage Type : %s\n",symTypeName[SegmentGetSymType(pObj->symINFO)]);
fprintf(pFile, "Symbol Offset : 0x%4.4X\n", pObj->offset);
fprintf(pFile, "\n");
}
void PUBPrint(struct _sPUB *pObj, FILE *pFile)
{
DBYTE i;
for (i=0; i < pObj->numPubDef; i++)
PUBDEFPrint(&pObj->pubDef[i], pFile);
}
void EXTDEFPrint(struct _sEXTDEF *pObj, FILE *pFile)
{
fprintf(pFile, "External name : %s\n", pObj->name);
fprintf(pFile, "ID BLK : 0x%2.2X\n", pObj->idBlk);
fprintf(pFile, "EXT ID : 0x%2.2X\n", pObj->extID);
fprintf(pFile, "Indirect Call : ");
if (SymbolIsIND(pObj->symINFO) == 1)
fprintf(pFile, "Yes\n");
else
fprintf(pFile, "No\n");
fprintf(pFile, "Variable : ");
if (SymbolIsVAR(pObj->symINFO) == 1)
fprintf(pFile, "Yes\n");
else
fprintf(pFile, "No\n");
fprintf(pFile, "Reg. Banks used : ");
if (SymbolIsRBF(pObj->symINFO) == 1)
fprintf(pFile, "at least one bank\n");
else
fprintf(pFile, "all\n");
fprintf(pFile, "Register bank : %x\n",SymbolGetSymReg(pObj->symINFO));
fprintf(pFile, "Usage Type : %s\n",symTypeName[SegmentGetSymType(pObj->symINFO)]);
fprintf(pFile, "\n");
}
void EXTPrint(struct _sEXT *pObj, FILE *pFile)
{
DBYTE i;
for (i=0; i < pObj->numExtDef; i++)
EXTDEFPrint(&pObj->extDef[i], pFile);
}
void SCDPrint(struct _sSCD *pObj, FILE *pFile)
{
fprintf(pFile, "Block name : %s\n",pObj->name);
fprintf(pFile, "BLK TYP : %s (0x%2.2X)\n",blkTypeName[pObj->blkTYP], pObj->blkTYP);
fprintf(pFile, "\n");
}
void DBGINFOPrint(struct _sDBGINFO *pObj, FILE *pFile, BYTE defType)
{
switch(defType)
{
case DBG_DEFTYP_LOCAL:
case DBG_DEFTYP_PUBLIC:
fprintf(pFile, "Symbol name : %s\n", pObj->name);
fprintf(pFile, "Segment ID : 0x%2.2X", pObj->segID);
if (pObj->segID == 0)
fprintf(pFile, " (Absolut)\n");
else
fprintf(pFile, "\n");
fprintf(pFile, "Indirect Call : ");
if (SymbolIsIND(pObj->symINFO) == 1)
fprintf(pFile, "Yes\n");
else
fprintf(pFile, "No\n");
fprintf(pFile, "Variable : ");
if (SymbolIsVAR(pObj->symINFO) == 1)
fprintf(pFile, "Yes\n");
else
fprintf(pFile, "No\n");
fprintf(pFile, "Reg. Banks used : ");
if (SymbolIsRBF(pObj->symINFO) == 1)
fprintf(pFile, "at least one bank\n");
else
fprintf(pFile, "all\n");
fprintf(pFile, "Register bank : %x\n",SymbolGetSymReg(pObj->symINFO));
fprintf(pFile, "Usage Type : %s\n",symTypeName[SegmentGetSymType(pObj->symINFO)]);
fprintf(pFile, "Symbol Offset : 0x%4.4X\n", pObj->offset);
break;
case DBG_DEFTYP_SEGMENT:
fprintf(pFile, "Symbol name : %s\n", pObj->name);
fprintf(pFile, "Segment ID : 0x%2.2X", pObj->segID);
if (pObj->segID == 0)
fprintf(pFile, " (Absolut)\n");
else
fprintf(pFile, "\n");
fprintf(pFile, "Empty : ");
if (SegmentIsEmpty(pObj->segINFO) == 1)
fprintf(pFile, "Yes\n");
else
fprintf(pFile, "No\n");
fprintf(pFile, "Overlayable : ");
if (SegmentIsOVL(pObj->segINFO) == 1)
fprintf(pFile, "Yes\n");
else
fprintf(pFile, "No\n");
fprintf(pFile, "Register bank : %x\n",SegmentGetSegReg(pObj->segINFO));
fprintf(pFile, "Segment Type : %s\n",segTypeName[SegmentGetSegType(pObj->segINFO)]);
break;
case DBG_DEFTYP_LINE:
fprintf(pFile, "Segment ID : 0x%2.2X", pObj->segID);
if (pObj->segID == 0)
fprintf(pFile, " (Absolut)\n");
else
fprintf(pFile, "\n");
fprintf(pFile, "Symbol Offset : 0x%4.4X\n", pObj->offset);
fprintf(pFile, "Line number : 0x%4.4X\n", pObj->lineNumber);
break;
}
fprintf(pFile, "\n");
}
void DBGPrint(struct _sDBG *pObj, FILE *pFile)
{
DBYTE i;
fprintf(pFile, "* DEF TYP : %s (0x%2.2X)\n",dbgDefTypeName[pObj->defTYP], pObj->defTYP);
for (i=0; i < pObj->numDbgInfo; i++)
DBGINFOPrint(&pObj->dbgInfo[i], pFile, pObj->defTYP);
}
void CNTPrint(struct _sCNT *pObj, FILE *pFile)
{
fprintf(pFile, "Segment ID : 0x%2.2X", pObj->segID);
if (pObj->segID == 0)
fprintf(pFile, " (Absolut)\n");
else
fprintf(pFile, "\n");
fprintf(pFile, "Symbol Offset : 0x%4.4X\n", pObj->offset);
fprintf(pFile, "Data Size : 0x%4.4X\n", pObj->size);
}
void ModulePrint(struct _sMODULE *pObj, FILE *pFile)
{
DBYTE i;
fprintf(pFile, "Module name : %s\n", pObj->pName);
i = 0;
while (pObj->ppCnt[i])
{
fprintf(pFile, "******************************************************************\n");
fprintf(pFile, "* Content [%2.2X]\n",i);
fprintf(pFile, "******************************************************************\n");
CNTPrint(pObj->ppCnt[i++], pFile);
}
}
void OmfPrint(struct _sOBJECT *pObj)
{
char name[255];
BYTE segID;
DBYTE i;
FILE *pFile;
SEGDEF *pSegDef;
if (pObj->allocType == OBJECT_IS_ABS)
sprintf(name, "%s_abs.omf",pObj->mhdr[0].name);
else
sprintf(name, "%s_rel.omf",pObj->mhdr[0].name);
pFile = fopen(name,"wa");
if (pObj->allocType == OBJECT_IS_ABS)
fprintf(pFile,"%s (Absolut OMF)\n",pObj->fileName);
else
fprintf(pFile,"%s (Relocatible OMF)\n",pObj->fileName);
for (i=0; i < pObj->numMHDR; i++)
{
fprintf(pFile, "******************************************************************\n");
fprintf(pFile, "* Module Header [%2.2X]\n",i);
fprintf(pFile, "******************************************************************\n");
MHDRPrint(&pObj->mhdr[i], pFile);
}
for (i=0; i < pObj->numSEG; i++)
{
fprintf(pFile, "******************************************************************\n");
fprintf(pFile, "* Segment Definition [%2.2X]\n",i);
fprintf(pFile, "******************************************************************\n");
SEGPrint(&pObj->seg[i], pFile);
}
for (i=0; i < pObj->numPUB; i++)
{
fprintf(pFile, "******************************************************************\n");
fprintf(pFile, "* Public Definition [%2.2X]\n",i);
fprintf(pFile, "******************************************************************\n");
PUBPrint(&pObj->pub[i], pFile);
}
for (i=0; i < pObj->numEXT; i++)
{
fprintf(pFile, "******************************************************************\n");
fprintf(pFile, "* External Definition [%2.2X]\n",i);
fprintf(pFile, "******************************************************************\n");
EXTPrint(&pObj->ext[i], pFile);
}
for (i=0; i < pObj->numSCD; i++)
{
fprintf(pFile, "******************************************************************\n");
fprintf(pFile, "* Scope Definition [%2.2X]\n",i);
fprintf(pFile, "******************************************************************\n");
SCDPrint(&pObj->scd[i], pFile);
}
for (i=0; i < pObj->numDBG; i++)
{
fprintf(pFile, "******************************************************************\n");
fprintf(pFile, "* Debug Item [%2.2X]\n",i);
fprintf(pFile, "******************************************************************\n");
DBGPrint(&pObj->dbg[i], pFile);
}
for (i=0; i < pObj->numCNT; i++)
{
segID = pObj->cnt[i].segID;
if (segID == 0)
pSegDef = NULL;
else
pSegDef = &pObj->seg[0].segDef[segID-1];
fprintf(pFile, "******************************************************************\n");
fprintf(pFile, "* Content [%2.2X]\n",i);
fprintf(pFile, "******************************************************************\n");
CNTPrint(&pObj->cnt[i], pFile);
if (pSegDef==NULL)
{
fprintf(pFile, "\n");
}
else
{
fprintf(pFile, "------------------------------------------------------------------\n");
fprintf(pFile, " Segment Definition:\n");
fprintf(pFile, "------------------------------------------------------------------\n");
SEGDEFPrint(pSegDef, pFile);
}
}
fprintf(pFile, "******************************************************************\n");
fprintf(pFile, "* Module Information\n");
fprintf(pFile, "******************************************************************\n\n");
for (i=0; i < pObj->numModules; i++)
{
ModulePrint(&pObj->module[i], pFile);
fprintf(pFile, "\n");
}
fprintf(pFile, "\n");
fclose(pFile);
}
/***************************************************************************/
/* Ende
/***************************************************************************/
Executable
+44
View File
@@ -0,0 +1,44 @@
/***************************************************************************/
/* omf51print.h */
/***************************************************************************/
#ifndef OMF51PRINT_H
#define OMF51PRINT_H
/***************************************************************************/
/* Constants
/***************************************************************************/
/***************************************************************************/
/* Helper Functions
/***************************************************************************/
BYTE SegmentGetSegType(BYTE segInfo);
BYTE SegmentGetSegReg(BYTE segInfo);
BYTE SegmentIsEmpty(BYTE segInfo);
BYTE SegmentIsOVL(BYTE segInfo);
BYTE SymbolIsIND(BYTE symInfo);
BYTE SymbolIsVAR(BYTE symInfo);
BYTE SymbolIsRBF(BYTE symInfo);
BYTE SymbolGetSymReg(BYTE symInfo);
BYTE SegmentGetSymType(BYTE symInfo);
/***************************************************************************/
/* Exported Functions
/***************************************************************************/
void MHDRPrint(struct _sMHDR *pObj, FILE *pFile);
void SEGDEFPrint(struct _sSEGDEF *pObj, FILE *pFile);
void SEGPrint(struct _sSEG *pObj, FILE *pFile);
void PUBDEFPrint(struct _sPUBDEF *pObj, FILE *pFile);
void PUBPrint(struct _sPUB *pObj, FILE *pFile);
void EXTDEFPrint(struct _sEXTDEF *pObj, FILE *pFile);
void EXTPrint(struct _sEXT *pObj, FILE *pFile);
void SCDPrint(struct _sSCD *pObj, FILE *pFile);
void DBGINFOPrint(struct _sDBGINFO *pObj, FILE *pFile, BYTE defType);
void DBGPrint(struct _sDBG *pObj, FILE *pFile);
void CNTPrint(struct _sCNT *pObj, FILE *pFile);
void OmfPrint(struct _sOBJECT *pObj);
/***************************************************************************/
/* Ende
/***************************************************************************/
#endif /* OMF51PRINT_H */