[U-Boot] [PATCH] display_options:print_buffer: align ASCII print

Andreas Bießmann andreas.devel at googlemail.com
Thu Feb 7 15:58:19 CET 2013


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
82000000: 30200109 20a4028c 90010000 08a00000    .. 0... ........
82000010: 01010000    ....
--->8---

to

---8<---
OMAP3 Tricorder # md.l $loadaddr 5
82000000: 30200109 20a4028c 90010000 08a00000    .. 0... ........
82000010: 01010000                               ....
--->8---

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

Signed-off-by: Andreas Bießmann <andreas.devel at googlemail.com>
---
 lib/display_options.c |   20 ++++++++++++++------
 1 file changed, 14 insertions(+), 6 deletions(-)

diff --git a/lib/display_options.c b/lib/display_options.c
index 694d2f2..d03933a 100644
--- a/lib/display_options.c
+++ b/lib/display_options.c
@@ -114,14 +114,15 @@ int print_buffer (ulong addr, void* data, uint width, uint count, uint linelen)
 		linelen = DEFAULT_LINE_LENGTH_BYTES / width;
 
 	while (count) {
+		uint thislinelen = linelen;
 		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 */
-		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;
@@ -133,8 +134,15 @@ int print_buffer (ulong addr, void* data, uint width, uint count, uint linelen)
 			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 */
-		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] = '.';
 		}
@@ -142,8 +150,8 @@ int print_buffer (ulong addr, void* data, uint width, uint count, uint linelen)
 		printf("    %s\n", lb.uc);
 
 		/* update references */
-		addr += linelen * width;
-		count -= linelen;
+		addr += thislinelen * width;
+		count -= thislinelen;
 
 		if (ctrlc())
 			return -1;
-- 
1.7.10.4



More information about the U-Boot mailing list