57e4efe9 |
1 | static int my_isblank(char c) |
2 | { |
3 | return c == '\t' || c == ' ' || c == '\r' || c == '\n'; |
4 | } |
5 | |
6 | static int my_issep(char c) |
7 | { |
8 | return c == '(' || c == ')' || c == '[' || c == ']' |
9 | || c == '<' || c == '>' || c == ','; |
10 | } |
11 | |
12 | static char *sskip(char *s) |
13 | { |
14 | while (my_isblank(*s)) |
15 | s++; |
16 | |
17 | return s; |
18 | } |
19 | |
20 | static char *next_word(char *w, size_t wsize, char *s) |
21 | { |
22 | size_t i; |
23 | |
24 | s = sskip(s); |
25 | |
26 | for (i = 0; i < wsize - 1; i++) { |
27 | if (*s == 0 || my_isblank(s[i])) |
28 | break; |
29 | w[i] = s[i]; |
30 | } |
31 | w[i] = 0; |
32 | |
33 | if (*s != 0 && !my_isblank(s[i])) |
34 | printf("warning: '%s' truncated\n", w); |
35 | |
36 | return s + i; |
37 | } |
38 | |
39 | static inline char *next_idt(char *w, size_t wsize, char *s) |
40 | { |
41 | size_t i; |
42 | |
43 | s = sskip(s); |
44 | |
45 | for (i = 0; i < wsize - 1; i++) { |
46 | if (*s == 0 || my_isblank(s[i]) || my_issep(s[i])) |
47 | break; |
48 | w[i] = s[i]; |
49 | } |
50 | w[i] = 0; |
51 | |
52 | if (*s != 0 && !my_isblank(s[i]) && !my_issep(s[i])) |
53 | printf("warning: '%s' truncated\n", w); |
54 | |
55 | return s + i; |
56 | } |