|
|
1.1 root 1: #include <libc.h>
2:
3: static char is_sep[256] = {
4: 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5: 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
6: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
7: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12: };
13: static char is_field[256] = {
14: 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
15: 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
16: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
17: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
18: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
19: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
20: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
21: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
22: };
23: static char last_sep[256];
24:
25: char *
26: setfields(arg)
27: char *arg;
28: {
29: register unsigned char *s;
30: register i;
31:
32: for(i = 1, s = (unsigned char *)last_sep; i < 256; i++)
33: if(is_sep[i])
34: *s++ = i;
35: *s = 0;
36: memset(is_sep, 0, sizeof is_sep);
37: memset(is_field, 1, sizeof is_field);
38: for(s = (unsigned char *)arg; *s;){
39: is_sep[*s] = 1;
40: is_field[*s++] = 0;
41: }
42: is_field[0] = 0;
43: return(last_sep);
44: }
45:
46: getfields(ss, sp, nptrs)
47: char *ss;
48: char **sp;
49: {
50: register unsigned char *s = (unsigned char *)ss;
51: register unsigned char **p = (unsigned char **)sp;
52: register unsigned c;
53:
54: for(;;){
55: if(--nptrs < 0) break;
56: *p++ = s;
57: while(is_field[c = *s++])
58: ;
59: if(c == 0) break;
60: s[-1] = 0;
61: }
62: if(nptrs > 0)
63: *p = 0;
64: else if(--s >= (unsigned char *)ss)
65: *s = c;
66: return(p - (unsigned char **)sp);
67: }
68:
69: getmfields(ss, sp, nptrs)
70: char *ss;
71: char **sp;
72: {
73: register unsigned char *s = (unsigned char *)ss;
74: register unsigned char **p = (unsigned char **)sp;
75: register unsigned c;
76: register unsigned d;
77:
78: if(nptrs <= 0)
79: return(0);
80: goto flushdelim;
81: for(;;){
82: *p++ = s;
83: if(--nptrs == 0) break;
84: while(is_field[c = *s++])
85: ;
86: /*
87: * s is now pointing 1 past the delimiter of the last field
88: * c is the delimiter
89: */
90: if(c == 0) break;
91: s[-1] = 0;
92: flushdelim:
93: while(is_sep[c = *s++])
94: ;
95: /*
96: * s is now pointing 1 past the beginning of the next field
97: * c is the first letter of the field
98: */
99: if(c == 0) break;
100: s--;
101: /*
102: * s is now pointing to the beginning of the next field
103: * c is the first letter of the field
104: */
105: }
106: if(nptrs > 0)
107: *p = 0;
108: return(p - (unsigned char **)sp);
109: }
110:
111: #ifdef MAIN
112: #include <fio.h>
113:
114: main()
115: {
116: char *fields[256];
117: char *s;
118: int n, i;
119: char buf[1024];
120:
121: print("go:\n");
122: while(s = Frdline(0)){
123: strcpy(buf, s);
124: Fprint(1, "getf:");
125: n = getfields(s, fields, 4);
126: for(i = 0; i < n; i++)
127: Fprint(1, " >%s<", fields[i]);
128: Fputc(1, '\n');
129: Fprint(1, "getmf:");
130: n = getmfields(buf, fields, 4);
131: for(i = 0; i < n; i++)
132: Fprint(1, " >%s<", fields[i]);
133: Fputc(1, '\n');
134: Fflush(1);
135: }
136: exit(0);
137: }
138: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.