Subversion Repositories Kolibri OS

Rev

Rev 8687 | Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. #include <stdio.h>
  2. #include <stdarg.h>
  3.  
  4. int virtual_getc_str(void *sp, const void *obj)
  5. // get next chat from string obj, save point is ptr to string char ptr
  6. {
  7.     int ch;
  8.     const char *s = (const char *)obj;
  9.     const char**spc= (const char**)sp;
  10.     if (!s || !spc) return EOF;  // error
  11.  
  12.     if (!*spc) *spc = s;    // first call, init savepoint
  13.  
  14.     if (!**spc) return EOF;  // EOS
  15.  
  16.     ch = **spc; (*spc)++ ;
  17.  
  18.     return ch;
  19. }
  20.  
  21. void virtual_ungetc_str(void *sp, int c, const void *obj)
  22. // if can, one step back savepoint in s
  23. {
  24.     const char *s = (const char *)obj;
  25.     const char**spc= (const char**)sp;
  26.  
  27.     if (s && spc && *spc > s) (*spc)--;
  28. }
  29.  
  30. int vsscanf ( const char * s, const char * format, va_list arg )
  31. {
  32.     return format_scan(s, format, arg, &virtual_getc_str, &virtual_ungetc_str);
  33. };
  34.  
  35. int sscanf ( const char * s, const char * format, ...)
  36. {
  37.    va_list      arg;
  38.    int  n;
  39.    va_start(arg, format);
  40.  
  41.    n = vsscanf(s, format, arg);
  42.  
  43.    va_end(arg);
  44.    return n;
  45. }
  46.  
  47.