changeset 2560:ac2e60f4bfc3

Improve block description output.
author Matti Hamalainen <ccr@tnsp.org>
date Sun, 27 Feb 2022 17:58:20 +0200
parents 32c2375fda16
children 56510bd4c66b
files tools/objlink.c
diffstat 1 files changed, 46 insertions(+), 44 deletions(-) [+]
line wrap: on
line diff
--- 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);
     }
 }