ref: b6c749ffbd30138de7beef13fb9265372a461a96
dir: /src/link/mapfile.c/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "asmotor.h"
#include "main.h"
#include "mylink.h"
#include "assign.h"
FILE *mf = NULL;
FILE *sf = NULL;
SLONG currentbank = 0;
SLONG sfbank;
void SetMapfileName(char *name)
{
if (mf = fopen(name, "wt"))
return;
else
fatalerror("Unable to open mapfile for writing");
}
void SetSymfileName(char *name)
{
if (sf = fopen(name, "wt")) {
fprintf(sf, ";File generated by xLink v" LINK_VERSION "\n\n");
return;
} else
fatalerror("Unable to open symfile for writing");
}
void CloseMapfile(void)
{
if (mf) {
fclose(mf);
mf = NULL;
}
if (sf) {
fclose(sf);
sf = NULL;
}
}
void MapfileInitBank(SLONG bank)
{
if (mf) {
currentbank = bank;
if (bank == 0)
fprintf(mf, "Bank #0 (HOME):\n");
else if (bank <= 255)
fprintf(mf, "Bank #%d:\n", bank);
else if (bank == BANK_BSS)
fprintf(mf, "BSS:\n");
else if (bank == BANK_HRAM)
fprintf(mf, "HRAM:\n");
else if (bank == BANK_VRAM)
fprintf(mf, "VRAM:\n");
}
if (sf) {
sfbank = (bank >= 1 && bank <= 255) ? bank : 0;
}
}
void MapfileWriteSection(struct sSection *pSect)
{
if (mf || sf) {
SLONG i;
fprintf(mf, " SECTION: $%04X-$%04X ($%04X bytes)\n",
pSect->nOrg, pSect->nOrg + pSect->nByteSize - 1,
pSect->nByteSize);
for (i = 0; i < pSect->nNumberOfSymbols; i += 1) {
struct sSymbol *pSym;
pSym = pSect->tSymbols[i];
if ((pSym->pSection == pSect)
&& (pSym->Type != SYM_IMPORT)) {
if (mf) {
fprintf(mf, " $%04X = %s\n",
pSym->nOffset + pSect->nOrg,
pSym->pzName);
}
if (sf) {
fprintf(sf, "%02X:%04X %s\n", sfbank,
pSym->nOffset + pSect->nOrg,
pSym->pzName);
}
}
}
}
}
void MapfileCloseBank(SLONG slack)
{
if (mf) {
if (slack == MaxAvail[currentbank])
fprintf(mf, " EMPTY\n\n");
else
fprintf(mf, " SLACK: $%04X bytes\n\n", slack);
}
}