/* $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;
}
#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
int i,c,rjust,width,ndigit,ndfnd,zfill;
char *oldfmt,*s1,buf[1025];
- nextarg = args;
while (c = *fmt++) {
if (c != '%') {
#ifdef CPM
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;
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)
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 ;
goto getlu ;
case 'D':
l_signed:
- geta(&l,wsize(l)) ;
+ l = va_arg(ap, long);
if (l < 0) {
*s++ = '-';
l = -l;
goto getu ;
case 'd':
if ( lflag ) goto l_signed; ;
- geta(&inte,wsize(inte)) ;
+ inte = va_arg(ap, int);
if ( inte<0 ) {
*s++ = '-';
inte= -inte ;
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 ;
#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;
}
/* $Header$ */
#include <stdio.h>
#include <ctype.h>
+#include <varargs.h>
union ptr_union {
char *chr_p;
* 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 */
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;
}
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;
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;
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;
/* $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);
}
/* $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;
}
/* $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);
}
/* $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;
}
/* $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;
}
/* $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;
}