xref: /inferno-os/lib9/getfields.c (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
1 #include	"lib9.h"
2 int
getfields(char * str,char ** args,int max,int mflag,char * set)3 getfields(char *str, char **args, int max, int mflag, char *set)
4 {
5 	Rune r;
6 	int nr, intok, narg;
7 
8 	if(max <= 0)
9 		return 0;
10 
11 	narg = 0;
12 	args[narg] = str;
13 	if(!mflag)
14 		narg++;
15 	intok = 0;
16 	for(;; str += nr) {
17 		nr = chartorune(&r, str);
18 		if(r == 0)
19 			break;
20 		if(utfrune(set, r)) {
21 			if(narg >= max)
22 				break;
23 			*str = 0;
24 			intok = 0;
25 			args[narg] = str + nr;
26 			if(!mflag)
27 				narg++;
28 		} else {
29 			if(!intok && mflag)
30 				narg++;
31 			intok = 1;
32 		}
33 	}
34 	return narg;
35 }
36