BSD 4_4 release
[unix-history] / usr / src / sys / tahoe / stand / vdformat / online / strtok.c
#ifndef lint
static char sccsid[] = "@(#)strtok.c 1.1 (Berkeley/CCI) 7/5/86";
#endif
/* @(#)strtok.c 1.2 */
/* 3.0 SID # 1.2 */
/*LINTLIBRARY*/
/*
* uses strpbrk and strspn to break string into tokens on
* sequentially subsequent calls. returns NULL when no
* non-separator characters remain.
* `subsequent' calls are calls with first argument NULL.
*/
#define NULL (char*)0
extern int strspn();
extern char *strpbrk();
char *
strtok(string, sepset)
char *string, *sepset;
{
register char *p, *q, *r;
static char *savept;
/*first or subsequent call*/
p = (string == NULL)? savept: string;
if(p == 0) /* return if no tokens remaining */
return(NULL);
q = p + strspn(p, sepset); /* skip leading separators */
if(*q == '\0') /* return if no tokens remaining */
return(NULL);
if((r = strpbrk(q, sepset)) == NULL) /* move past token */
savept = 0; /* indicate this is last token */
else {
*r = '\0';
savept = ++r;
}
return(q);
}