From: ceriel Date: Fri, 15 Apr 1988 14:43:19 +0000 (+0000) Subject: make to use varargs.h X-Git-Tag: release-5-5~3431 X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=ecaea97a9994e4e249363ea585168c49403d7e2a;p=ack.git make to use varargs.h --- diff --git a/lang/cem/libcc/stdio/doprnt.c b/lang/cem/libcc/stdio/doprnt.c index 1f530372a..1b72b5093 100644 --- a/lang/cem/libcc/stdio/doprnt.c +++ b/lang/cem/libcc/stdio/doprnt.c @@ -1,36 +1,20 @@ /* $Header$ */ #include +#include #ifndef NOFLOAT extern char *_pfloat(); extern char *_pscien(); #endif -static int *nextarg ; - -static geta(p,size) int *p; int size; { - /* get 'size' words from arglist */ - - if ( (int *)&p - &size >0 ) { - p += size; - while ( size-- ) { - *--p = *nextarg--; - } - } else { - while ( size-- ) { - *p++ = *nextarg++ ; - } - } -} - # define wsize(par) ( (sizeof par) / sizeof (int) ) -static char *gnum(f,ip) register char *f; int *ip; { +static char *gnum(f,ip,app) register char *f; int *ip; va_list *app; { register int i,c; if (*f == '*') { - geta(ip,wsize(i)) ; + *ip = va_arg((*app), int); f++; } else { i = 0; @@ -78,8 +62,8 @@ static char *l_compute(l1,d,s) long l1; char *s; { } #endif -_doprnt(fmt,args,stream) - register char *fmt; int *args ; FILE *stream; +_doprnt(fmt,ap,stream) + register char *fmt; va_list ap ; FILE *stream; { register char *s; #ifndef NOLONG @@ -97,7 +81,6 @@ _doprnt(fmt,args,stream) int i,c,rjust,width,ndigit,ndfnd,zfill; char *oldfmt,*s1,buf[1025]; - nextarg = args; while (c = *fmt++) { if (c != '%') { #ifdef CPM @@ -120,11 +103,11 @@ _doprnt(fmt,args,stream) fmt++; zfill = '0'; } - fmt = gnum(fmt,&width); + fmt = gnum(fmt,&width,&ap); ndigit = 0; ndfnd = 0; if (*fmt == '.') { fmt++; oldfmt = fmt; - fmt = gnum(fmt,&ndigit); + fmt = gnum(fmt,&ndigit,&ap); ndfnd = (fmt != oldfmt); } s = s1 = buf; @@ -141,7 +124,9 @@ _doprnt(fmt,args,stream) putc(c,stream); continue; case 's': - geta(&s1,wsize(s1)) ; + s1 = va_arg(ap, char *); + if (s1 == 0) + s1 = "(null)"; s = s1; do { if (*s == 0) @@ -154,13 +139,13 @@ _doprnt(fmt,args,stream) case 'u': getu: if ( !lflag ) { - geta(&inte,wsize(inte)) ; + inte = va_arg(ap, int); goto i_unsignd ; } #ifndef NOLONG case 'U': getlu: - geta( &l,wsize(l)) ; + l = va_arg(ap, long); goto l_unsignd ; case 'B': j = 2 ; @@ -173,7 +158,7 @@ _doprnt(fmt,args,stream) goto getlu ; case 'D': l_signed: - geta(&l,wsize(l)) ; + l = va_arg(ap, long); if (l < 0) { *s++ = '-'; l = -l; @@ -195,7 +180,7 @@ _doprnt(fmt,args,stream) goto getu ; case 'd': if ( lflag ) goto l_signed; ; - geta(&inte,wsize(inte)) ; + inte = va_arg(ap, int); if ( inte<0 ) { *s++ = '-'; inte= -inte ; @@ -208,7 +193,7 @@ _doprnt(fmt,args,stream) s = i_compute(inte,j,s); break; case 'c': - geta ( &uint, wsize(uint)) ; + uint = va_arg(ap, unsigned int); for ( i= sizeof uint -1 ; i>=0 ; i-- ) { if ( *s = uint%256 ) s++; uint/= 256 ; @@ -217,18 +202,18 @@ _doprnt(fmt,args,stream) #ifndef NOFLOAT case 'e': if (ndigit >= sizeof(buf)) ndigit = sizeof(buf) - 1; - geta(&dbl,wsize(dbl)) ; + dbl = va_arg(ap, double); s = _pscien(dbl,s,ndigit,ndfnd); break; case 'f': if (ndigit >= sizeof(buf)) ndigit = sizeof(buf) - 1; - geta(&dbl,wsize(dbl)) ; + dbl = va_arg(ap, double); s = _pfloat(dbl,s,ndigit,ndfnd); break; #endif case 'r': - geta(&nextarg,wsize(nextarg)) ; - geta(&oldfmt,wsize(fmt)) ; + ap = va_arg(ap, char *); + fmt = va_arg(ap, char *); fmt=oldfmt; continue; } diff --git a/lang/cem/libcc/stdio/doscan.c b/lang/cem/libcc/stdio/doscan.c index 141bfc9b0..9d9cd92c0 100644 --- a/lang/cem/libcc/stdio/doscan.c +++ b/lang/cem/libcc/stdio/doscan.c @@ -1,6 +1,7 @@ /* $Header$ */ #include #include +#include union ptr_union { char *chr_p; @@ -19,10 +20,10 @@ static char Xtable[128]; * the routine that does the job */ -_doscanf (iop, format, argp) +_doscanf (iop, format, ap) register FILE *iop; char *format; /* the format control string */ -union ptr_union *argp; /* our argument list */ +va_list ap; { int done = 0; /* number of items done */ int base; /* conversion base */ @@ -139,28 +140,32 @@ union ptr_union *argp; /* our argument list */ if (sign) val = -val; if (longflag) - *(argp++)->ulong_p = (unsigned long) val; + *va_arg(ap, unsigned long *) = (unsigned long) val; else if (shortflag) - *(argp++)->ushort_p = (unsigned short) val; + *va_arg(ap, unsigned short *) = (unsigned short) val; else - *(argp++)->uint_p = (unsigned) val; + *va_arg(ap, unsigned *) = (unsigned) val; } - if (done_some) + if (done_some) { if (do_assign) ++done; + } else goto all_done; break; case 'c': if (!widflag) width = 1; - while (width-- && ic >= 0) { + { register char *p; + if (do_assign) + p = va_arg(ap, char *); + while (width-- && ic >= 0) { if (do_assign) - *(argp)->chr_p++ = (char) ic; + *p++ = (char) ic; ic = getc(iop); done_some = 1; + } } if (do_assign) { - argp++; /* done with this one */ if (done_some) ++done; } @@ -168,16 +173,22 @@ union ptr_union *argp; /* our argument list */ case 's': if (!widflag) width = 0xffff; - while (width-- && !isspace (ic) && ic > 0) { + { register char *p; + if (do_assign) + p = va_arg(ap, char *); + while (width-- && !isspace (ic) && ic > 0) { if (do_assign) - *(argp)->chr_p++ = (char) ic; + *p++ = (char) ic; ic = getc(iop); done_some = 1; + } + if (do_assign) /* terminate the string */ + *p = '\0'; + } + if (done_some) { + if (do_assign) + ++done; } - if (do_assign) /* terminate the string */ - *(argp++)->chr_p = '\0'; - if (done_some) - ++done; else goto all_done; break; @@ -200,17 +211,23 @@ union ptr_union *argp; /* our argument list */ if (!*format) goto quit; - while (width-- && !isspace (ic) && ic > 0 && + { register char *p; + if (do_assign) + p = va_arg(ap, char *); + while (width-- && !isspace (ic) && ic > 0 && (Xtable[ic] ^ reverse)) { if (do_assign) - *(argp)->chr_p++ = (char) ic; + *p++ = (char) ic; ic = getc(iop); done_some = 1; + } + if (do_assign) /* terminate the string */ + *p = '\0'; + } + if (done_some) { + if (do_assign) + ++done; } - if (do_assign) /* terminate the string */ - *(argp++)->chr_p = '\0'; - if (done_some && do_assign) - ++done; else goto all_done; break; @@ -262,9 +279,9 @@ union ptr_union *argp; /* our argument list */ if (do_assign) { done++; if (longflag) - *(argp++)->double_p = atof(buffer); + *va_arg(ap, double *) = atof(buffer); else - *(argp++)->float_p = atof(buffer); + *va_arg(ap, float *) = atof(buffer); } } break; diff --git a/lang/cem/libcc/stdio/fprintf.c b/lang/cem/libcc/stdio/fprintf.c index 14997d734..ff580501f 100644 --- a/lang/cem/libcc/stdio/fprintf.c +++ b/lang/cem/libcc/stdio/fprintf.c @@ -1,12 +1,19 @@ /* $Header$ */ #include +#include -fprintf (file, fmt, args) -FILE *file; -char *fmt; -int args; +fprintf(va_alist) +va_dcl { - _doprnt (fmt, &args, file); + FILE *file; + char *fmt; + va_list ap; + + va_start(ap); + file = va_arg(ap, FILE *); + fmt = va_arg(ap, char *); + _doprnt (fmt, ap, file); if ( io_testflag(file,IO_PERPRINTF) ) fflush(file); + va_end(ap); } diff --git a/lang/cem/libcc/stdio/fscanf.c b/lang/cem/libcc/stdio/fscanf.c index 231221bdc..9813c901d 100644 --- a/lang/cem/libcc/stdio/fscanf.c +++ b/lang/cem/libcc/stdio/fscanf.c @@ -1,11 +1,20 @@ /* $Header$ */ #include +#include -int fscanf (fp, format, args) -FILE *fp; -char *format; -unsigned args; +int fscanf(va_alist) +va_dcl { - return _doscanf (fp, format, &args); + FILE *fp; + char *format; + va_list ap; + int retval; + + va_start(ap); + fp = va_arg(ap, FILE *); + format = va_arg(ap, char *); + retval = _doscanf (fp, format, ap); + va_end(ap); + return retval; } diff --git a/lang/cem/libcc/stdio/printf.c b/lang/cem/libcc/stdio/printf.c index a2b73ed5f..9d8239ea2 100644 --- a/lang/cem/libcc/stdio/printf.c +++ b/lang/cem/libcc/stdio/printf.c @@ -1,11 +1,17 @@ /* $Header$ */ #include +#include -printf (fmt, args) -char *fmt; -int args; +printf(va_alist) +va_dcl { - _doprnt (fmt, &args, stdout); + char *fmt; + va_list ap; + + va_start(ap); + fmt = va_arg(ap, char *); + _doprnt (fmt, ap, stdout); if ( io_testflag(stdout,IO_PERPRINTF) ) fflush(stdout); + va_end(list); } diff --git a/lang/cem/libcc/stdio/scanf.c b/lang/cem/libcc/stdio/scanf.c index 07491570e..88aedbea1 100644 --- a/lang/cem/libcc/stdio/scanf.c +++ b/lang/cem/libcc/stdio/scanf.c @@ -1,11 +1,19 @@ /* $Header$ */ #include +#include -int scanf (format, args) -char *format; -unsigned args; +int scanf(va_alist) +va_dcl { - return _doscanf (stdin, format, &args); + char *format; + va_list ap; + int retval; + + va_start(ap); + format = va_arg(ap, char *); + retval = _doscanf (stdin, format, ap); + va_end(ap); + return retval; } diff --git a/lang/cem/libcc/stdio/sprintf.c b/lang/cem/libcc/stdio/sprintf.c index 3c7ca4f43..53ed3c4dd 100644 --- a/lang/cem/libcc/stdio/sprintf.c +++ b/lang/cem/libcc/stdio/sprintf.c @@ -1,20 +1,26 @@ /* $Header$ */ #include +#include -char *sprintf(buf,format,args) -char *buf, *format; -int args; +char *sprintf(va_alist) +va_dcl { + char *buf, *format; FILE _tempfile; + va_list ap; - _tempfile._fd = -1; - _tempfile._flags = IO_WRITEMODE + IO_UNBUFF; - _tempfile._buf = (unsigned char *) buf; - _tempfile._ptr = (unsigned char *) buf; - _tempfile._count = 32767; + va_start(ap); + buf = va_arg(ap, char *); + format = va_arg(ap, char *); + _tempfile._fd = -1; + _tempfile._flags = IO_WRITEMODE + IO_UNBUFF; + _tempfile._buf = (unsigned char *) buf; + _tempfile._ptr = (unsigned char *) buf; + _tempfile._count = 32767; - _doprnt(format, &args, &_tempfile); + _doprnt(format, ap, &_tempfile); putc('\0',&_tempfile); + va_end(ap); return buf; } diff --git a/lang/cem/libcc/stdio/sscanf.c b/lang/cem/libcc/stdio/sscanf.c index 295605691..7dff0f61f 100644 --- a/lang/cem/libcc/stdio/sscanf.c +++ b/lang/cem/libcc/stdio/sscanf.c @@ -1,18 +1,26 @@ /* $Header$ */ #include +#include -int sscanf (string, format, args) -char *string; /* source of data */ -char *format; /* control string */ -unsigned args; /* our args */ +int sscanf(va_alist) +va_dcl { + char *string; /* source of data */ + char *format; /* control string */ FILE _tempfile; + va_list ap; + int retval; - _tempfile._fd = -1; - _tempfile._flags = IO_READMODE + IO_UNBUFF; - _tempfile._buf = (unsigned char *) string; - _tempfile._ptr = (unsigned char *) string; - _tempfile._count = 32767; + va_start(ap); + string = va_arg(ap, char *); + format = va_arg(ap, char *); + _tempfile._fd = -1; + _tempfile._flags = IO_READMODE + IO_UNBUFF; + _tempfile._buf = (unsigned char *) string; + _tempfile._ptr = (unsigned char *) string; + _tempfile._count = 32767; - return _doscanf (&_tempfile, format, &args); + retval = _doscanf (&_tempfile, format, ap); + va_end(ap); + return retval; }