fix leading zero support in printf_fast
authorpjs <pjs@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Wed, 9 Mar 2005 20:41:09 +0000 (20:41 +0000)
committerpjs <pjs@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Wed, 9 Mar 2005 20:41:09 +0000 (20:41 +0000)
git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@3691 4a8a32a2-be11-0410-ad9d-d568d2c75423

ChangeLog
device/lib/printf_fast.c

index 807437e41d863a3ac97111f72af0ee53a12ce0bf..5b95f8b3576214964c9c4c38602845bef2bdaa5a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2005-03-09 Paul Stoffregen <paul AT pjrc.com>
+
+       * device/lib/printf_fast.c: fix leading zero format, eg "%02d"
+
 2005-05-09 Raphael Neider <rneider AT web.de>
 
        * src/SDCCopt.c (killDeadCode): fixed bug #1156016
index 1db100827710ce1ff0e0bf9473662a03f1aae361..4382d643a81ac63445ad71479cf70716fb688428 100644 (file)
@@ -93,6 +93,7 @@ static bit long_flag, short_flag, print_zero_flag, negative_flag;
 
 #ifdef FIELD_WIDTH
 static bit field_width_flag;
+static bit leading_zero_flag;
 static data unsigned char field_width;
 #endif
 
@@ -161,6 +162,7 @@ printf_format:
        clr     _negative_flag
 #ifdef FIELD_WIDTH
        clr     _field_width_flag
+       clr     _leading_zero_flag
        mov     r1, #_field_width
        mov     @r1, #0
 #endif
@@ -181,6 +183,10 @@ printf_format_loop:
        jnc     printf_nondigit2
 #ifdef FIELD_WIDTH
 printf_digit:
+       jnz     printf_digit_2
+       cjne    a, _field_width, printf_digit_2
+       setb    _leading_zero_flag
+printf_digit_2:
        setb    _field_width_flag
        mov     r2, a
        mov     a, @r1
@@ -286,6 +292,7 @@ printf_string:
 
 #ifdef FIELD_WIDTH
        jnb     _field_width_flag, printf_str_loop
+       clr     _leading_zero_flag      // never leading zeros for strings
        push    dpl
        push    dph
 printf_str_fw_loop:
@@ -1409,6 +1416,10 @@ printf_i2bcd_add_skip:
 printf_space_loop:
        //mov   a, #' '
        mov     a, #32
+       jnb     _leading_zero_flag, printf_space_output
+       //mov   a, #'0'
+       mov     a, #48
+printf_space_output:
        lcall   printf_putchar
        dec     _field_width
 printf_space: