home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume26 / mytinfo / part01 / strtok.c < prev    next >
C/C++ Source or Header  |  1992-12-26  |  1KB  |  110 lines

  1. /*
  2.  * strtok.c
  3.  *
  4.  * By Ross Ridge
  5.  * Public Domain
  6.  * 92/06/04 11:40:12
  7.  *
  8.  */
  9.  
  10. #ifdef TEST
  11.  
  12. #ifndef LIBTEST
  13. #define USE_MYSTRTOK
  14. #endif
  15. #include <stdio.h>
  16.  
  17. #else
  18.  
  19. #include "defs.h"
  20.  
  21. #endif
  22.  
  23. #ifdef USE_MYSTRTOK
  24.  
  25. #ifdef USE_SCCS_IDS
  26. static const char SCCSid[] = "@(#) mytinfo strtok.c 3.3 92/06/04 public domain, By Ross Ridge";
  27. #endif
  28.  
  29. static char *
  30. strtok(s1, s2)
  31. char *s1, *s2; {
  32.     static char *pos = NULL;
  33.     register char *s, *d;
  34.     char *start;
  35.  
  36.     if (s1 == NULL) {
  37.         s = pos;
  38.         if (s == NULL)
  39.             return NULL;
  40.     } else {
  41.         s = s1;
  42.         while(*s != '\0') {
  43.             d = s2;
  44.             while(*d != *s) {
  45.                 if (*d == '\0')
  46.                     goto first; /* Oh, no! A goto! */
  47.                 d++;
  48.             }
  49.             s++;
  50.         }
  51.         pos = NULL;
  52.         return NULL;
  53.     }
  54.  
  55. first:
  56.     start = s;
  57.     while(*s != '\0') {
  58.         d = s2;
  59.         while(*d != '\0') {
  60.             if (*s == *d) {
  61.                 *s++ = '\0';
  62.                 while(*s != '\0') {
  63.                     d = s2;
  64.                     while(*s != *d) {
  65.                         if (*d == '\0') {
  66.                             pos = s;
  67.                             return start;
  68.                         }
  69.                         d++;
  70.                     }
  71.                     s++;
  72.                 }
  73.                 pos = NULL;
  74.                 return start;
  75.             }
  76.             d++;
  77.         }
  78.         s++;
  79.     }
  80.     pos = NULL;
  81.     return start;
  82. }
  83.  
  84. #endif
  85.  
  86. #ifdef TEST
  87. int main(argc, argv)
  88. int argc;
  89. char **argv; {
  90.     char *s;
  91.     char s1[100];
  92.     char *s2;
  93.  
  94.     if (argc > 1)
  95.         s2 = argv[1];
  96.     else
  97.         s2 = " ";
  98.  
  99.     while (gets(s1) != NULL) {
  100.         s = strtok(s1, s2);
  101.         while(s != NULL) {
  102.             printf("'%s'\n", s);
  103.             s = strtok(NULL, s2);
  104.         }
  105.     }
  106.  
  107.     return 0;
  108. }
  109. #endif
  110.