1*9a747e4fSDavid du Colombier #include <plan9.h>
2*9a747e4fSDavid du Colombier
3*9a747e4fSDavid du Colombier int
getfields(char * str,char ** args,int max,int mflag,char * set)4*9a747e4fSDavid du Colombier getfields(char *str, char **args, int max, int mflag, char *set)
5*9a747e4fSDavid du Colombier {
6*9a747e4fSDavid du Colombier Rune r;
7*9a747e4fSDavid du Colombier int nr, intok, narg;
8*9a747e4fSDavid du Colombier
9*9a747e4fSDavid du Colombier if(max <= 0)
10*9a747e4fSDavid du Colombier return 0;
11*9a747e4fSDavid du Colombier
12*9a747e4fSDavid du Colombier narg = 0;
13*9a747e4fSDavid du Colombier args[narg] = str;
14*9a747e4fSDavid du Colombier if(!mflag)
15*9a747e4fSDavid du Colombier narg++;
16*9a747e4fSDavid du Colombier intok = 0;
17*9a747e4fSDavid du Colombier for(;; str += nr) {
18*9a747e4fSDavid du Colombier nr = chartorune(&r, str);
19*9a747e4fSDavid du Colombier if(r == 0)
20*9a747e4fSDavid du Colombier break;
21*9a747e4fSDavid du Colombier if(utfrune(set, r)) {
22*9a747e4fSDavid du Colombier if(narg >= max)
23*9a747e4fSDavid du Colombier break;
24*9a747e4fSDavid du Colombier *str = 0;
25*9a747e4fSDavid du Colombier intok = 0;
26*9a747e4fSDavid du Colombier args[narg] = str + nr;
27*9a747e4fSDavid du Colombier if(!mflag)
28*9a747e4fSDavid du Colombier narg++;
29*9a747e4fSDavid du Colombier } else {
30*9a747e4fSDavid du Colombier if(!intok && mflag)
31*9a747e4fSDavid du Colombier narg++;
32*9a747e4fSDavid du Colombier intok = 1;
33*9a747e4fSDavid du Colombier }
34*9a747e4fSDavid du Colombier }
35*9a747e4fSDavid du Colombier return narg;
36*9a747e4fSDavid du Colombier }
37*9a747e4fSDavid du Colombier
38*9a747e4fSDavid du Colombier int
tokenize(char * str,char ** args,int max)39*9a747e4fSDavid du Colombier tokenize(char *str, char **args, int max)
40*9a747e4fSDavid du Colombier {
41*9a747e4fSDavid du Colombier return getfields(str, args, max, 1, " \t\n\r");
42*9a747e4fSDavid du Colombier }
43