X-Git-Url: https://pd.if.org/git/?p=pdclib;a=blobdiff_plain;f=functions%2Fstdio%2Ffscanf.c;h=2be1758375c1abb015c50de9360586c555da7b85;hp=11708417d1c472b560161a91171a391fd51b581a;hb=0a5395faab237ba9008352b0f4bee9659bbd3d5f;hpb=34893ecc2200dc7017c36a54cb6c5f4c2378b5ec diff --git a/functions/stdio/fscanf.c b/functions/stdio/fscanf.c index 1170841..2be1758 100644 --- a/functions/stdio/fscanf.c +++ b/functions/stdio/fscanf.c @@ -6,3 +6,80 @@ // ---------------------------------------------------------------------------- int fscanf( FILE * restrict stream, const char * restrict format, ... ) { /* TODO */ }; + +/* PDPC code - unreviewed +{ + va_list arg; + int ret; + + va_start(arg, format); + ret = vvscanf(format, arg, stream, NULL); + va_end(arg); + return (ret); +} + +static int vvscanf(const char *format, va_list arg, FILE *fp, const char *s) +{ + int ch; + int fin = 0; + int cnt = 0; + char *cptr; + int *iptr; + + inch(); + while (!fin) + { + if (*format == '\0') + { + fin = 1; + } + else if (*format == '%') + { + format++; + if (*format == '%') + { + if (ch != '%') return (cnt); + inch(); + } + else if (*format == 's') + { + cptr = va_arg(arg, char *); + *cptr++ = (char)ch; + inch(); + while ((ch >= 0) && (!isspace(ch))) + { + *cptr++ = (char)ch; + inch(); + } + *cptr = '\0'; + if (ch < 0) + { + fin = 1; + } + } + else if (*format == 'd') + { + iptr = va_arg(arg, int *); + if (!isdigit(ch)) return (cnt); + *iptr = ch - '0'; + inch(); + while ((ch >= 0) && (isdigit(ch))) + { + *iptr = *iptr * 10 + (ch - '0'); + inch(); + } + if (ch < 0) + { + fin = 1; + } + } + } + else + { + if (ch != *format) return (cnt); + inch(); + } + } + return (cnt); +} +*/