make to use varargs.h
authorceriel <none@none>
Fri, 15 Apr 1988 14:43:19 +0000 (14:43 +0000)
committerceriel <none@none>
Fri, 15 Apr 1988 14:43:19 +0000 (14:43 +0000)
lang/cem/libcc/stdio/doprnt.c
lang/cem/libcc/stdio/doscan.c
lang/cem/libcc/stdio/fprintf.c
lang/cem/libcc/stdio/fscanf.c
lang/cem/libcc/stdio/printf.c
lang/cem/libcc/stdio/scanf.c
lang/cem/libcc/stdio/sprintf.c
lang/cem/libcc/stdio/sscanf.c

index 1f53037..1b72b50 100644 (file)
@@ -1,36 +1,20 @@
 /* $Header$ */
 #include <stdio.h>
+#include <varargs.h>
 
 #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;
                }
index 141bfc9..9d9cd92 100644 (file)
@@ -1,6 +1,7 @@
 /* $Header$ */
 #include <stdio.h>
 #include <ctype.h>
+#include <varargs.h>
 
 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;
index 14997d7..ff58050 100644 (file)
@@ -1,12 +1,19 @@
 /* $Header$ */
 #include <stdio.h>
+#include <varargs.h>
 
-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);
 }
index 231221b..9813c90 100644 (file)
@@ -1,11 +1,20 @@
 /* $Header$ */
 #include <stdio.h>
+#include <varargs.h>
 
-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;
 }
 
index a2b73ed..9d8239e 100644 (file)
@@ -1,11 +1,17 @@
 /* $Header$ */
 #include <stdio.h>
+#include <varargs.h>
 
-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);
 }
index 0749157..88aedbe 100644 (file)
@@ -1,11 +1,19 @@
 /* $Header$ */
 #include <stdio.h>
+#include <varargs.h>
 
-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;
 }
 
 
index 3c7ca4f..53ed3c4 100644 (file)
@@ -1,20 +1,26 @@
 /* $Header$ */
 #include <stdio.h>
+#include <varargs.h>
 
-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;
 }
index 2956056..7dff0f6 100644 (file)
@@ -1,18 +1,26 @@
 /* $Header$ */
 #include <stdio.h>
+#include <varargs.h>
 
-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;
 }