home *** CD-ROM | disk | FTP | other *** search
- #include <string.h>
- /*
- ** $Id: strtoknst.c,v 1.1 1991/03/13 22:11:06 robert Exp $
- **
- ** This is a clone of strtok that takes another argument
- ** a char pointer (assumed unchanged between calls!)
- ** that allows nested use)
- **
- ** I hereby release this function into the public domain.
- ** Robert Osborne, 1990.
- */
- char *
- strtoknst(s1, s2, ptr)
- char *s1;
- char *s2;
- char **ptr;
- {
- register char *first, *second, *third;
- if( s1 ) {
- *ptr = s1;
- }
- if( !*ptr ) return (char *) 0;
- first = *ptr + strspn(*ptr, s2);
- if( *first == '\0' ) return (char *)0;
- second = first + strcspn(first, s2);
- if( *second == '\0' ) {
- *ptr = (char *) 0;
- }
- else {
- *ptr = second + strspn(second, s2);
- if( **ptr == '\0' ) {
- *ptr = (char *) 0;
- }
- *second = '\0';
- }
- return first;
- }
- #ifdef TESTING
-
- main()
- {
- char *tmp, *tmp2;
- char *str, *str2;
-
- printf("test 1\n");
- for(str = strtoknst(" aaaa\t bbbb cccc\tdddd ", "\t ", &tmp);
- str;
- str = strtoknst((char *) 0, "\t ", &tmp) )
- {
- printf("\"%s\"\n", str);
- }
- printf("test 2\n");
- for(str = strtoknst("aaaa\t bbbb cccc\tdddd ", "\t ", &tmp);
- str;
- str = strtoknst((char *) 0, "\t ", &tmp) )
- {
- printf("\"%s\"\n", str);
- }
- printf("test 3\n");
- for(str = strtoknst(" aaaa\t bbbb cccc\tdddd", "\t ", &tmp);
- str;
- str = strtoknst((char *) 0, "\t ", &tmp) )
- {
- printf("\"%s\"\n", str);
- }
- printf("test 4\n");
- for(str = strtoknst(" aaaa\t bbbb \t\t \tcccc\tdddd", "\t ", &tmp);
- str;
- str = strtoknst((char *) 0, "\t ", &tmp) )
- {
- printf("\"%s\"\n", str);
- for(str2 = strtoknst(" AAAA\t BBBB \t\t \tCCCC\tDDDD", "\t ", &tmp2);
- str2;
- str2 = strtoknst((char *) 0, "\t ", &tmp2) )
- {
- printf("\"%s\"\n", str2);
- }
- }
- }
- #endif
-