display_options:print_buffer: align ASCII print
authorAndreas Bießmann <andreas.devel@googlemail.com>
Thu, 7 Feb 2013 04:58:19 +0000 (04:58 +0000)
committerTom Rini <trini@ti.com>
Mon, 11 Mar 2013 21:00:28 +0000 (17:00 -0400)
This patch adds whitespace to the printed hex numbers to have an aligned ASCII
printout at the end of the line.

This changes for example the md output from:

---8<---
OMAP3 Tricorder # md.l $loadaddr 5
8200000030200109 20a4028c 90010000 08a00000    .. 0... ........
8200001001010000    ....
--->8---

to

---8<---
OMAP3 Tricorder # md.l $loadaddr 5
8200000030200109 20a4028c 90010000 08a00000    .. 0... ........
8200001001010000                               ....
--->8---

The cost of this is about 72 byte .text increase (tested with at91 build).

Signed-off-by: Andreas Bießmann <andreas.devel@googlemail.com>
lib/display_options.c

index 0339970..e6d684b 100644 (file)
@@ -115,14 +115,15 @@ int print_buffer(ulong addr, const void *data, uint width, uint count,
                linelen = DEFAULT_LINE_LENGTH_BYTES / width;
 
        while (count) {
                linelen = DEFAULT_LINE_LENGTH_BYTES / width;
 
        while (count) {
+               uint thislinelen = linelen;
                printf("%08lx:", addr);
 
                /* check for overflow condition */
                printf("%08lx:", addr);
 
                /* check for overflow condition */
-               if (count < linelen)
-                       linelen = count;
+               if (count < thislinelen)
+                       thislinelen = count;
 
                /* Copy from memory into linebuf and print hex values */
 
                /* Copy from memory into linebuf and print hex values */
-               for (i = 0; i < linelen; i++) {
+               for (i = 0; i < thislinelen; i++) {
                        uint32_t x;
                        if (width == 4)
                                x = lb.ui[i] = *(volatile uint32_t *)data;
                        uint32_t x;
                        if (width == 4)
                                x = lb.ui[i] = *(volatile uint32_t *)data;
@@ -134,8 +135,15 @@ int print_buffer(ulong addr, const void *data, uint width, uint count,
                        data += width;
                }
 
                        data += width;
                }
 
+               while (thislinelen < linelen) {
+                       /* fill line with whitespace for nice ASCII print */
+                       for (i=0; i<width*2+1; i++)
+                               puts(" ");
+                       linelen--;
+               }
+
                /* Print data in ASCII characters */
                /* Print data in ASCII characters */
-               for (i = 0; i < linelen * width; i++) {
+               for (i = 0; i < thislinelen * width; i++) {
                        if (!isprint(lb.uc[i]) || lb.uc[i] >= 0x80)
                                lb.uc[i] = '.';
                }
                        if (!isprint(lb.uc[i]) || lb.uc[i] >= 0x80)
                                lb.uc[i] = '.';
                }
@@ -143,8 +151,8 @@ int print_buffer(ulong addr, const void *data, uint width, uint count,
                printf("    %s\n", lb.uc);
 
                /* update references */
                printf("    %s\n", lb.uc);
 
                /* update references */
-               addr += linelen * width;
-               count -= linelen;
+               addr += thislinelen * width;
+               count -= thislinelen;
 
                if (ctrlc())
                        return -1;
 
                if (ctrlc())
                        return -1;