X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=mware%2Fformatwr.c;h=8a2e57e1af027e61a51639bd8e1bca650dcbd548;hb=888d1c49ed7cea0f272f520a74be35a32032bd6e;hp=ed52ea291a9a8698fce5ac81a87293a99bd151fc;hpb=0f244fe7278884ce743f51a3215d299b2f1008b8;p=bertos.git diff --git a/mware/formatwr.c b/mware/formatwr.c index ed52ea29..8a2e57e1 100755 --- a/mware/formatwr.c +++ b/mware/formatwr.c @@ -53,6 +53,21 @@ /*#* *#* $Log$ + *#* Revision 1.17 2005/11/04 17:43:27 bernie + *#* Fix for LP64 architectures; Add some more tests. + *#* + *#* Revision 1.16 2005/07/19 07:25:46 bernie + *#* Use appconfig.h instead of cfg/config.h. + *#* + *#* 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. *#* @@ -70,10 +85,10 @@ *#*/ #include "formatwr.h" -#include "pgm.h" -//#include /* progmem macros */ -#include /* CONFIG_ macros */ -#include /* ASSERT */ +#include +#include +#include /* ASSERT */ +#include /* CONFIG_ macros */ #ifndef CONFIG_PRINTF_N_FORMATTER /*! Disable the arcane %n formatter. */ @@ -400,7 +415,7 @@ PGM_FUNC(_formatted_write)(const char * PGM_ATTR format, flags.progmem = false; #endif ptr = buf_pointer = &buf[0]; - hex = "0123456789ABCDEF"; + hex = HEX_tab; /* check for leading '-', '+', ' ','#' or '0' flags */ for (;;) @@ -572,7 +587,7 @@ NEXT_FLAG: precision++; #endif case 'x': - hex = "0123456789abcdef"; + hex = hex_tab; case 'u': case 'p': case 'X': @@ -580,15 +595,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 : @@ -599,32 +614,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 */ @@ -738,7 +739,7 @@ FLOATING_CONVERSION: default: /* Undefined conversion! */ ptr = buf_pointer = bad_conversion; - ptr += strlen(bad_conversion); + ptr += sizeof(bad_conversion) - 1; break; }