Rev 8687 | Rev 8793 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
8687 | turbocat | 1 | #include |
8718 | turbocat | 2 | #include |
8687 | turbocat | 3 | |
8718 | turbocat | 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 |
||
8687 | turbocat | 6 | { |
8718 | turbocat | 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; |
||
8687 | turbocat | 38 | int n; |
39 | va_start(arg, format); |
||
8718 | turbocat | 40 | |
8687 | turbocat | 41 | n = vsscanf(s, format, arg); |
8718 | turbocat | 42 | |
8687 | turbocat | 43 | va_end(arg); |
44 | return n; |
||
45 | } |
||
46 |