From 8a967a41d08a3a15776b6776bb33993b1fe0f184 Mon Sep 17 00:00:00 2001 From: John Hodge Date: Tue, 6 Apr 2010 23:08:10 +0800 Subject: [PATCH] Improved padding code in Debug_Fmt - Also separated 's' and the general string printing --- Kernel/debug.c | 17 ++++++++++++++--- Kernel/lib.c | 45 ++++++++++++++++++++++++++++++--------------- 2 files changed, 44 insertions(+), 18 deletions(-) diff --git a/Kernel/debug.c b/Kernel/debug.c index 12adc22a..4b3aeb77 100644 --- a/Kernel/debug.c +++ b/Kernel/debug.c @@ -90,6 +90,7 @@ void Debug_Fmt(const char *format, va_list *args) char *p = NULL; int isLongLong = 0; Uint64 arg; + int bPadLeft = 0; while((c = *format++) != 0) { @@ -119,6 +120,12 @@ void Debug_Fmt(const char *format, va_list *args) // Get Argument arg = va_arg(*args, Uint); + // - Padding Side Flag + if(c == '+') { + bPadLeft = 1; + c = *format++; + } + // Padding if(c == '0') { pad = '0'; @@ -175,6 +182,11 @@ void Debug_Fmt(const char *format, va_list *args) itoa(p, arg, 2, minSize, pad); goto printString; + printString: + if(!p) p = "(null)"; + while(*p) Debug_Putchar(*p++); + break; + case 'B': //Boolean if(arg) Debug_Puts("True"); else Debug_Puts("False"); @@ -184,10 +196,9 @@ void Debug_Fmt(const char *format, va_list *args) p = (char*)(Uint)arg; if(!p) p = "(null)"; len = strlen(p); - while(len++ < minSize) Debug_Putchar(pad); - printString: - if(!p) p = "(null)"; + if( !bPadLeft ) while(len++ < minSize) Debug_Putchar(pad); while(*p) Debug_Putchar(*p++); + if( bPadLeft ) while(len++ < minSize) Debug_Putchar(pad); break; // Single Character / Array diff --git a/Kernel/lib.c b/Kernel/lib.c index 85486599..cfbae0f0 100644 --- a/Kernel/lib.c +++ b/Kernel/lib.c @@ -74,9 +74,16 @@ static Uint giRandomState = RANDOM_SEED; int atoi(const char *string) { int ret = 0; + int bNeg = 0; + + //Log("atoi: (string='%s')", string); // Clear non-numeric characters - while( !('0' <= *string && *string <= '9') ) string++; + while( !('0' <= *string && *string <= '9') && *string != '-' ) string++; + if( *string == '-' ) { + bNeg = 1; + while( !('0' <= *string && *string <= '9') ) string++; + } if(*string == '0') { @@ -85,32 +92,34 @@ int atoi(const char *string) { // Hex string ++; - for( ;; ) { - ret *= 16; - if('0' <= *string && *string <= '9') + for( ;; string ++ ) + { + if('0' <= *string && *string <= '9') { + ret *= 16; ret += *string - '0'; - else if('A' <= *string && *string <= 'F') + } + else if('A' <= *string && *string <= 'F') { + ret *= 16; ret += *string - 'A' + 10; - else if('a' <= *string && *string <= 'f') + } + else if('a' <= *string && *string <= 'f') { + ret *= 16; ret += *string - 'a' + 10; + } else break; - string ++; } } - else + else // Octal { - for( ;; ) + for( ; '0' <= *string && *string <= '7'; string ++ ) { ret *= 8; - if('0' <= *string && *string <= '7') - ret += *string - '0'; - else - break; + ret += *string - '0'; } } } - else + else // Decimal { for( ; '0' <= *string && *string <= '9'; string++) { @@ -118,6 +127,11 @@ int atoi(const char *string) ret += *string - '0'; } } + + if(bNeg) ret = -ret; + + //Log("atoi: RETURN %i", ret); + return ret; } @@ -173,6 +187,8 @@ int vsnprintf(char *__s, size_t __maxlen, const char *__format, va_list args) int isLongLong = 0; Uint64 val; size_t pos = 0; + // Flags + // int bPadLeft = 0; //Log("vsnprintf: (__s=%p, __maxlen=%i, __format='%s', ...)", __s, __maxlen, __format); @@ -199,7 +215,6 @@ int vsnprintf(char *__s, size_t __maxlen, const char *__format, va_list args) // Get Argument val = va_arg(args, Uint); //Log("val = %x", val); - // - Padding if(c == '0') { -- 2.20.1