X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=functions%2F_PDCLIB%2Fprint.c;h=0ac327220234d628f76893252f703b673bbea137;hb=f408c1fd633015089d2a0fc6bc31c9f61eeae0a9;hp=d47a48d977f18e78e76dbc2c3712100f6ecfec8b;hpb=66c9a724d570ec507c640f6708fe48c4b8ca8b80;p=pdclib diff --git a/functions/_PDCLIB/print.c b/functions/_PDCLIB/print.c index d47a48d..0ac3272 100644 --- a/functions/_PDCLIB/print.c +++ b/functions/_PDCLIB/print.c @@ -15,6 +15,7 @@ /* Using an integer's bits as flags for both the conversion flags and length modifiers. */ +/* FIXME: one too many flags to work on a 16-bit machine */ #define E_minus 1<<0 #define E_plus 1<<1 #define E_alt 1<<2 @@ -126,7 +127,7 @@ static void int2base( intmax_t value, struct _PDCLIB_status_t * status ) size_t characters = preidx + ( ( status->this > status->prec ) ? status->this : status->prec ); if ( status->width > characters ) { - for ( int i = 0; i < status->width - characters; ++i ) + for ( size_t i = 0; i < status->width - characters; ++i ) { DELIVER( ' ' ); /* @@ -172,7 +173,7 @@ static void int2base( intmax_t value, struct _PDCLIB_status_t * status ) } } /* Do the precision padding if necessary. */ - for ( int i = 0; i < prec_pads; ++i ) + for ( size_t i = 0; i < prec_pads; ++i ) { DELIVER( '0' ); } @@ -255,12 +256,26 @@ const char * _PDCLIB_print( const char * spec, struct _PDCLIB_status_t * status if ( *spec == '*' ) { /* Retrieve width value from argument stack */ +#if 1 + int width = va_arg( status->arg, int ); + if ( width < 0 ) + { + status->flags |= E_minus; + status->width = width * -1; /* FIXME: Should be abs( width ) */ + } + else + { + status->width = width; + } +#else + /* FIXME: Old version - with unsigned status->width, condition <0 is never true */ if ( ( status->width = va_arg( status->arg, int ) ) < 0 ) { /* Negative value is '-' flag plus absolute value */ status->flags |= E_minus; status->width *= -1; } +#endif ++spec; } else