44 lines
956 B
C
44 lines
956 B
C
#if !defined(lint) && defined(SCCSIDS)
|
|
static char sccsid[] = "@(#)strtok.c 1.1 94/10/31 SMI"; /* from S5R2 1.2 */
|
|
#endif
|
|
|
|
/*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);
|
|
}
|