/* strtok.c:	3 very useful string-handling functions.
 *		You don't need this file if you are using Lattice C.
 *		Manx C does not provide them.
 *
 * Written by Daniel Barrett.  100% PUBLIC DOMAIN. */


#include "decl.h"
#define STRING_END	'\0'

/* Return the next string "token" in "buf".  Tokens are substrings
 * separated by any characters in "separators". */

char *strtok(buf, separators)
char *buf, *separators;
{
	register char *token, *end;	/* Start and end of token. */
	extern char *strpbrk();
	static char *fromLastTime;

	if (token = buf ? buf : fromLastTime) {
		token += strspn(token, separators);	/* Find token! */
		if (*token == STRING_END)
			return(NULL);
		fromLastTime = ((end = strpbrk(token,separators))
				? &end[1]
				: NULL);
		*end = STRING_END;			/* Cut it short! */
	}
	return(token);
}

	
/* Return a pointer to the first occurance in "str" of any character
 * in "charset". */

char *strpbrk(str, charset)
register char *str, *charset;
{
	extern char *index();

	while (*str && (!index(charset, *str)))
		str++;
	return(*str ? str : NULL);
}

	
/* Return the number of characters from "charset" that are at the BEGINNING
 * of string "str".
*/

int strspn(str, charset)
register char *str, *charset;
{
	register char *s;
	s = str;
	while (index(charset, *s))
		s++;
	return(s - str);
}

