forsyth20121205-174063a80cc13 years agoHistory
58 lines · 890 B · C
RawDownload
#include "lib9.h" static char qsep[] = " \t\r\n"; static char*qtoken(char *s){	int quoting;	char *t; 	quoting = 0;	t = s;	/* s is output string, t is input string */	while(*t!='\0' && (quoting || utfrune(qsep, *t)==nil)){		if(*t != '\''){			*s++ = *t++;			continue;		}		/* *t is a quote */		if(!quoting){			quoting = 1;			t++;			continue;		}		/* quoting and we're on a quote */		if(t[1] != '\''){			/* end of quoted section; absorb closing quote */			t++;			quoting = 0;			continue;		}		/* doubled quote; fold one quote into two */		t++;		*s++ = *t++;	}	if(*s != '\0'){		*s = '\0';		if(t == s)			t++;	}	return t;} inttokenize(char *s, char **args, int maxargs){	int nargs; 	for(nargs=0; nargs<maxargs; nargs++){		while(*s!='\0' && utfrune(qsep, *s)!=nil)			s++;		if(*s == '\0')			break;		args[nargs] = s;		s = qtoken(s);	} 	return nargs;}