home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <stdarg.h>
- #include "lib.h"
-
- typedef int (*gettype)(void *);
- typedef int (*ungettype)(int, void *);
-
- static int sgetc __PROTO((unsigned char **s));
- static int sungetc __PROTO((int c, unsigned char **s));
-
- static int sgetc(s)
- unsigned char **s;
- {
- register unsigned char c;
-
- c = *(*s)++;
- return((c == '\0') ? EOF : c);
- }
-
- static int sungetc(c, s)
- int c;
- unsigned char **s;
- {
- if(c == EOF)
- c = '\0';
- return(*--(*s) = c);
- }
-
- #ifdef __STDC__
- int sscanf(const char *buf, const char *fmt, ...)
- {
- int retval;
- va_list args;
-
- va_start (args, fmt);
- retval = _scanf(&buf, (gettype) sgetc, (ungettype) sungetc,
- (unsigned char *) fmt, args);
- va_end (args);
- return retval;
- }
- #else
- int
- sscanf(buf, fmt, arg)
- const char *buf, *fmt;
- int arg;
- {
- return(_scanf(&buf, sgetc, sungetc, fmt, &arg));
- }
- #endif /* __STDC__ */
-
- #ifdef __STDC__
- int vsscanf(const char *buf, const char *fmt, va_list arg)
- #else
- int
- vsscanf(buf, fmt, arg)
- const char *buf, *fmt;
- char *arg;
- #endif /* __STDC__ */
- {
- return(_scanf(&buf, (gettype) sgetc, (ungettype) sungetc,
- (unsigned char *) fmt, arg));
- }
-