home *** CD-ROM | disk | FTP | other *** search
/ back2roots/padua / padua.7z / padua / uucp / uupoll068.lha / misc / uupoll067.lha / src / tokenize.c < prev   
Encoding:
C/C++ Source or Header  |  1992-07-16  |  911 b   |  50 lines

  1.  
  2. #include <stdio.h>
  3. #include <string.h>
  4.  
  5. #include "defines.h"
  6. #include "proto.h"
  7.  
  8. static int pads(char *cpBuf, int wBuf, char *cpPad)
  9. {
  10.     char *cp = cpBuf;
  11.     while( cp < cpBuf+wBuf && isanyof(*cp, cpPad) )
  12.         ++cp;
  13.     return cp - cpBuf;
  14. }
  15.  
  16. static int notpads(char *cpBuf, int wBuf, char *cpPad)
  17. {
  18.     char *cp = cpBuf;
  19.     while( cp < cpBuf+wBuf && !isanyof(*cp, cpPad) )
  20.         ++cp;
  21.     return cp - cpBuf;
  22. }
  23.  
  24. static char *cpaToken[256];
  25. static char caTokens[1024];
  26.  
  27. int tokenize(char ***cpppToken, char *cpBuf, int wBuf, char *cpPad)
  28. {
  29.     char *cpi = cpBuf;
  30.     char *cpo = caTokens;
  31.     int pcnt = 0;
  32.     int n;
  33.  
  34.     cpaToken[pcnt] = NULL;
  35.     for ( ; cpi < cpBuf+wBuf-1; ) {
  36.         if ((n = pads(cpi, (cpBuf+wBuf)-cpi, cpPad)) == 0) {
  37.             n = notpads(cpi, (cpBuf+wBuf)-cpi, cpPad);
  38.             cpaToken[pcnt++] = cpo;
  39.             cpaToken[pcnt] = NULL;
  40.             memcpy(cpo, cpi, n);
  41.             cpo += n;
  42.             *cpo++ = NUL;
  43.         }
  44.         cpi += n;
  45.     }
  46.     *cpppToken = cpaToken;
  47.     return pcnt;
  48. }
  49.  
  50.