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