# HG changeset patch # User Matti Hamalainen # Date 1645977500 -7200 # Node ID ac2e60f4bfc35a7970dbfe40b5cd710c0f492c2e # Parent 32c2375fda16a9075e4a170928a04cd05771a109 Improve block description output. diff -r 32c2375fda16 -r ac2e60f4bfc3 tools/objlink.c --- a/tools/objlink.c Sun Feb 27 17:57:58 2022 +0200 +++ b/tools/objlink.c Sun Feb 27 17:58:20 2022 +0200 @@ -743,71 +743,73 @@ /* Print out an ASCII presentation of memory map */ -void memPrintLine(FILE *f) +#define BOX_WIDTH 60 +#define TO_STR1(x) #x +#define TO_STR(x) TO_STR1(x) + +void memPrintLine(FILE *fh) { - fprintf(f, - " +----------------------------------------------------+\n"); + fputs(" +", fh); + for (int i = 0; i < BOX_WIDTH + 2; i++) + fputc('-', fh); + fputs("+\n", fh); } -void memPrintEmpty(FILE *f, int n) +void memPrintEmpty(FILE *fh, const int n) { for (int i = 0; i < n; i++) - fprintf(f, - " | |\n"); + { + fputs(" | ", fh); + for (int i = 0; i < BOX_WIDTH; i++) + fputc(' ', fh); + fputs(" |\n", fh); + } } -void dmDescribeMemory(FILE *f) +void memPrintBox(FILE *fh, const int bsize, const int bstart, const int bend, const char *bdesc) { - DMMemBlock *prev = NULL; + int bksize = bsize / (1024 * 2); + if (bksize > 1) memPrintEmpty(fh, bksize); + fprintf(fh, "$%.4x - $%.4x | %-" TO_STR(BOX_WIDTH) "s |\n", bstart, bend, bdesc); + if (bksize > 1) memPrintEmpty(fh, bksize); + memPrintLine(fh); +} - memPrintLine(f); +void dmDescribeMemory(FILE *fh) +{ + DMMemBlock *bprev = NULL; + + memPrintLine(fh); for (int i = 0; i < nmemBlocks; i++) { - DMMemBlock *curr = &memBlocks[i]; - char desc[512], *s; - int siz, kz; + DMMemBlock *bcurr = &memBlocks[i]; + char bdesc[128]; + const char *btype; + int bsize; // Check for empty, unreserved areas - if (prev != NULL) - siz = (curr->start - 1) - (prev->end + 1) + 1; - else - siz = 0; - - if (prev != NULL && siz > 1) + if (bprev != NULL && (bsize = (bcurr->start - 1) - (bprev->end + 1) + 1) > 1) { - kz = siz / (1024 * 2); - - if (kz > 1) memPrintEmpty(f, kz); - - snprintf(desc, sizeof(desc), "EMPTY (%d)", siz); - fprintf(f, "$%.4x - $%.4x | %-50s |\n", prev->end + 1, curr->start - 1, desc); - - if (kz > 1) memPrintEmpty(f, kz); - memPrintLine(f); + snprintf(bdesc, sizeof(bdesc), "EMPTY (%d)", bsize); + memPrintBox(fh, bsize, bprev->end + 1, bcurr->start - 1, bdesc); } - prev = curr; + bprev = bcurr; // Print current block - switch (curr->type) + switch (bcurr->type) { - case MTYPE_NONE: s = "N/A (NC)"; break; - case MTYPE_ROM: s = "ROM"; break; - case MTYPE_WT: s = "WT"; break; - case MTYPE_IO: s = "I/O"; break; - case MTYPE_RES: s = "RSVD"; break; - default: s = "????"; break; + case MTYPE_NONE: btype = "N/A (NC)"; break; + case MTYPE_ROM: btype = "ROM"; break; + case MTYPE_WT: btype = "WT"; break; + case MTYPE_IO: btype = "I/O"; break; + case MTYPE_RES: btype = "RSVD"; break; + default: btype = "????"; break; } - siz = curr->end - curr->start + 1; - kz = siz / (1024 * 2); - - if (kz > 1) memPrintEmpty(f, kz); - snprintf(desc, sizeof(desc), "%.40s (%s, %d)", curr->name, s, siz); - fprintf(f, "$%.4x - $%.4x | %-50s |\n", curr->start, curr->end, desc); - if (kz > 1) memPrintEmpty(f, kz); - memPrintLine(f); - + bsize = bcurr->end - bcurr->start + 1; + snprintf(bdesc, sizeof(bdesc), "%.40s (%s, %d)", bcurr->name, btype, bsize); + memPrintBox(fh, bsize, bcurr->start, bcurr->end, bdesc); } }