X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=mware%2Fformatwr.c;h=6353e1f1347cdda23dd1e08389896b5d1c0dc130;hb=45add65abd59bd79f528501c85f3e5891a9c2c29;hp=1e4ae0c9c44311c1dd689ff889c8fe742222bc23;hpb=af9c555446161016fdd76c1cdff96ce76bb6cba2;p=bertos.git diff --git a/mware/formatwr.c b/mware/formatwr.c old mode 100755 new mode 100644 index 1e4ae0c9..6353e1f1 --- a/mware/formatwr.c +++ b/mware/formatwr.c @@ -1,8 +1,33 @@ -/*! +/** * \file * * * \version $Id$ @@ -51,46 +76,20 @@ * width and precision arguments. */ -/*#* - *#* $Log$ - *#* Revision 1.15 2005/04/11 19:10:28 bernie - *#* Include top-level headers from cfg/ subdir. - *#* - *#* Revision 1.14 2005/03/01 23:26:22 bernie - *#* Use shared hextab. - *#* - *#* Revision 1.13 2005/02/18 12:33:25 bernie - *#* Avoid strlen(). - *#* - *#* Revision 1.12 2005/02/16 20:28:03 bernie - *#* Add %S formatter. - *#* - *#* Revision 1.11 2005/02/16 16:51:29 bernie - *#* Simplify float code. - *#* - *#* Revision 1.10 2004/10/26 09:01:35 bernie - *#* Fix spacing. - *#* - *#* Revision 1.9 2004/09/14 21:06:23 bernie - *#* Spelling fix. - *#* - *#* Revision 1.8 2004/08/25 14:12:09 rasky - *#* Aggiornato il comment block dei log RCS - *#*/ #include "formatwr.h" #include #include -#include /* CONFIG_ macros */ #include /* ASSERT */ +#include /* CONFIG_ macros */ #ifndef CONFIG_PRINTF_N_FORMATTER - /*! Disable the arcane %n formatter. */ + /** Disable the arcane %n formatter. */ #define CONFIG_PRINTF_N_FORMATTER 0 #endif #ifndef CONFIG_PRINTF_OCTAL_FORMATTER - /*! Disable the %o formatter. */ + /** Disable the %o formatter. */ #define CONFIG_PRINTF_OCTAL_FORMATTER 0 #endif @@ -314,7 +313,7 @@ CLEAN_UP: #endif /* CONFIG_PRINTF > PRINTF_NOFLOAT */ -/*! +/** * This routine forms the core and entry of the formatter. * * The conversion performed conforms to the ANSI specification for "printf". @@ -489,11 +488,12 @@ NEXT_FLAG: flags.l_L_modifier = false; flags.h_modifier = false; - /* Optional 'l','L' r 'h' modifier? */ + /* Optional 'l','L','z' or 'h' modifier? */ switch (PGM_READ_CHAR(format)) { case 'l': case 'L': + case 'z': flags.l_L_modifier = true; format++; break; @@ -589,15 +589,15 @@ NEXT_FLAG: #if defined(__AVR__) || defined(__I196__) /* 16bit pointers */ ulong = (unsigned long)(unsigned short)va_arg(ap, char *); #else /* 32bit pointers */ - ulong = (unsigned long)va_arg(ap, char *); + ulong = (unsigned long)va_arg(ap, char *); #endif /* 32bit pointers */ - else if (sizeof(short) == sizeof(int)) - ulong = flags.l_L_modifier ? - va_arg(ap, unsigned long) : (unsigned long)va_arg(ap, unsigned int); + else if (flags.l_L_modifier) + ulong = va_arg(ap, unsigned long); + else if (flags.h_modifier) + ulong = (unsigned long)(unsigned short)va_arg(ap, unsigned int); else - ulong = flags.h_modifier ? - (unsigned long)(unsigned short) va_arg(ap, int) - : (unsigned long)va_arg(ap, int); + ulong = va_arg(ap, unsigned int); + flags.div_factor = #if CONFIG_PRINTF_OCTAL_FORMATTER (format_flag == 'o') ? DIV_OCT : @@ -608,32 +608,18 @@ NEXT_FLAG: case 'd': case 'i': - if (sizeof(short) == sizeof(long)) - { - if ( (long)(ulong = va_arg(ap, unsigned long)) < 0) - { - flags.plus_space_flag = PSF_MINUS; - ulong = (unsigned long)(-((signed long)ulong)); - } - } - else if (sizeof(short) == sizeof(int)) - { - if ( (long)(ulong = flags.l_L_modifier ? - va_arg(ap,unsigned long) : (unsigned long)va_arg(ap,int)) < 0) - { - flags.plus_space_flag = PSF_MINUS; - ulong = (unsigned long)(-((signed long)ulong)); - } - } + if (flags.l_L_modifier) + ulong = (unsigned long)(long)va_arg(ap, long); else + ulong = (unsigned long)(long)va_arg(ap, int); + + /* Extract sign */ + if ((signed long)ulong < 0) { - if ( (signed long)(ulong = (unsigned long) (flags.h_modifier ? - (short) va_arg(ap, int) : va_arg(ap,int))) < 0) - { - flags.plus_space_flag = PSF_MINUS; - ulong = (unsigned long)(-((signed long)ulong)); - } + flags.plus_space_flag = PSF_MINUS; + ulong = (unsigned long)(-((signed long)ulong)); } + flags.div_factor = DIV_DEC; /* Now convert to digits */ @@ -825,7 +811,7 @@ FLOATING_CONVERSION: #else /* PRINTF_REDUCED starts here */ #if CONFIG_PRINTF > PRINTF_NOMODIFIERS - char l_modifier, h_modifier; + bool l_modifier, h_modifier; unsigned long u_val, div_val; #else unsigned int u_val, div_val; @@ -851,16 +837,16 @@ FLOATING_CONVERSION: /*=================================*/ /* Optional 'l' or 'h' modifiers ? */ /*=================================*/ - l_modifier = h_modifier = 0; + l_modifier = h_modifier = false; switch (PGM_READ_CHAR(format)) { case 'l': - l_modifier = 1; + l_modifier = true; format++; break; case 'h': - h_modifier = 1; + h_modifier = true; format++; break; }