X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=functions%2F_PDCLIB%2Fprint.c;h=124496c4cc1e1b43a943a2dc399df7dd1c49ad5a;hb=10f020f1a39804bbef8cd1cf35ef7c9a8e75c7d6;hp=46c00d9eeb60e2ea88e392d12423eeb7bff49fe6;hpb=6cabdb3035b1841c80d799bef8012b421b4c159a;p=pdclib.old diff --git a/functions/_PDCLIB/print.c b/functions/_PDCLIB/print.c index 46c00d9..124496c 100644 --- a/functions/_PDCLIB/print.c +++ b/functions/_PDCLIB/print.c @@ -12,6 +12,8 @@ #include #include +#ifndef REGTEST + /* Using an integer's bits as flags for both the conversion flags and length modifiers. */ @@ -42,9 +44,8 @@ i - pointer to number of characters already delivered in this call n - pointer to maximum number of characters to be delivered in this call s - the buffer into which the character shall be delivered - TODO: ref. fputs() for a better way to buffer handling */ -#define DELIVER( x ) \ +#define PUT( x ) \ do { \ int character = x; \ if ( status->i < status->n ) { \ @@ -105,7 +106,7 @@ static void intformat( intmax_t value, struct _PDCLIB_status_t * status ) { for ( size_t i = 0; i < status->width - characters; ++i ) { - DELIVER( ' ' ); + PUT( ' ' ); ++(status->current); } } @@ -114,7 +115,7 @@ static void intformat( intmax_t value, struct _PDCLIB_status_t * status ) preidx = 0; while ( preface[ preidx ] != '\0' ) { - DELIVER( preface[ preidx++ ] ); + PUT( preface[ preidx++ ] ); ++(status->current); } if ( ( ! ( status->flags & E_minus ) ) && ( status->flags & E_zero ) ) @@ -124,14 +125,14 @@ static void intformat( intmax_t value, struct _PDCLIB_status_t * status ) */ while ( status->current < status->width ) { - DELIVER( '0' ); + PUT( '0' ); ++(status->current); } } /* Do the precision padding if necessary. */ for ( size_t i = 0; i < prec_pads; ++i ) { - DELIVER( '0' ); + PUT( '0' ); } } } @@ -176,12 +177,12 @@ static void int2base( intmax_t value, struct _PDCLIB_status_t * status ) if ( status->flags & E_lower ) { /* Lowercase letters. Same array used for strto...(). */ - DELIVER( _PDCLIB_digits[ digit ] ); + PUT( _PDCLIB_digits[ digit ] ); } else { /* Uppercase letters. Array only used here, only 0-F. */ - DELIVER( _PDCLIB_Xdigits[ digit ] ); + PUT( _PDCLIB_Xdigits[ digit ] ); } } } @@ -193,7 +194,7 @@ const char * _PDCLIB_print( const char * spec, struct _PDCLIB_status_t * status if ( *(++spec) == '%' ) { /* %% -> print single '%' */ - DELIVER( *spec ); + PUT( *spec ); return ++spec; } /* Initializing status structure */ @@ -382,7 +383,7 @@ const char * _PDCLIB_print( const char * spec, struct _PDCLIB_status_t * status break; case 'c': /* TODO: Flags, wide chars. */ - DELIVER( va_arg( status->arg, int ) ); + PUT( va_arg( status->arg, int ) ); return ++spec; case 's': /* TODO: Flags, wide chars. */ @@ -390,7 +391,7 @@ const char * _PDCLIB_print( const char * spec, struct _PDCLIB_status_t * status char * s = va_arg( status->arg, char * ); while ( *s != '\0' ) { - DELIVER( *(s++) ); + PUT( *(s++) ); } return ++spec; } @@ -457,11 +458,11 @@ const char * _PDCLIB_print( const char * spec, struct _PDCLIB_status_t * status } if ( status->flags & E_lower ) { - DELIVER( _PDCLIB_digits[ digit ] ); + PUT( _PDCLIB_digits[ digit ] ); } else { - DELIVER( _PDCLIB_Xdigits[ digit ] ); + PUT( _PDCLIB_Xdigits[ digit ] ); } } else @@ -495,7 +496,7 @@ const char * _PDCLIB_print( const char * spec, struct _PDCLIB_status_t * status { while ( status->current < status->width ) { - DELIVER( ' ' ); + PUT( ' ' ); ++(status->current); } } @@ -507,12 +508,15 @@ const char * _PDCLIB_print( const char * spec, struct _PDCLIB_status_t * status return ++spec; } +#endif + #ifdef TEST -#include <_PDCLIB_test.h> +#define _PDCLIB_FILEID "_PDCLIB/print.c" +#define _PDCLIB_STRINGIO -#include -#include +#include <_PDCLIB_test.h> +#ifndef REGTEST static int testprintf( char * buffer, const char * format, ... ) { /* Members: base, flags, n, i, current, s, width, prec, stream, arg */ @@ -536,16 +540,16 @@ static int testprintf( char * buffer, const char * format, ... ) va_end( status.arg ); return status.i; } +#endif #define TEST_CONVERSION_ONLY -#define TESTCASE_SPRINTF( x ) if ( strcmp( target, x ) == 0 ) {} \ - else { TEST_RESULTS += 1; printf( "FAILED: " __FILE__ ", line %d - \"%s\" != %s\n", __LINE__, target, #x ); } - int main( void ) { +#ifndef REGTEST char target[100]; -#include "printf_testcases.incl" +#include "printf_testcases.h" +#endif return TEST_RESULTS; }