home *** CD-ROM | disk | FTP | other *** search
/ back2roots/padua / padua.7z / padua / uucp / uupoll068.lha / source / tok.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-08-03  |  1.0 KB  |  57 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, int maxtok)
  28. {
  29.     char *cpi = cpBuf;
  30.     char *cpo = caTokens;
  31.     int pcnt = 0;
  32.     int n;
  33.     int left;
  34.  
  35.     for (cpaToken[0] = NULL;ácpi < cpBuf+wBuf-1; ) {
  36.         left = (cpBuf+wBuf)-cpi;
  37.         if ((n = pads(cpi, left, cpPad)) == 0) {
  38.             n = notpads(cpi, left, cpPad);
  39.             cpaToken[pcnt++] = cpo;
  40.             cpaToken[pcnt] = NULL;
  41.             if ((maxtok > 0) && (pcnt >= maxtok)) {
  42.                 memcpy(cpo, cpi, left);
  43.                 cpo += left;
  44.                 *cpo++ = NUL;
  45.                 break;
  46.             }
  47.             memcpy(cpo, cpi, n);
  48.             cpo += n;
  49.             *cpo++ = NUL;
  50.         }
  51.         cpi += n;
  52.     }
  53.     *cpppToken = cpaToken;
  54.     return pcnt;
  55. }
  56.  
  57.