home *** CD-ROM | disk | FTP | other *** search
/ ftp.uv.es / 2014.11.ftp.uv.es.tar / ftp.uv.es / pub / unix / elm-2.4-pl20.tar.Z / elm-2.4-pl20.tar / lib / qstrings.c < prev    next >
C/C++ Source or Header  |  1992-10-03  |  3KB  |  117 lines

  1.  
  2. static char rcsid[] = "@(#)$Id: qstrings.c,v 5.1 1992/10/03 22:41:36 syd Exp $";
  3.  
  4. /*******************************************************************************
  5.  *  The Elm Mail System  -  $Revision: 5.1 $   $State: Exp $
  6.  *
  7.  *             Copyright (c) 1988-1992 USENET Community Trust
  8.  *             Copyright (c) 1986,1987 Dave Taylor
  9.  *******************************************************************************
  10.  * Bug reports, patches, comments, suggestions should be sent to:
  11.  *
  12.  *    Syd Weinstein, Elm Coordinator
  13.  *    elm@DSI.COM            dsinc!elm
  14.  *
  15.  *******************************************************************************
  16.  * $Log: qstrings.c,v $
  17.  * Revision 5.1  1992/10/03  22:41:36  syd
  18.  * Initial checkin as of 2.4 Release at PL0
  19.  *
  20.  *
  21.  ******************************************************************************/
  22.  
  23. /** This file contains equivalent routines to the string routines, but
  24.      modifed to handle quoted strings.
  25.  
  26. **/
  27.  
  28. #include "headers.h"
  29. #include <ctype.h>
  30.  
  31. #ifdef BSD
  32. #undef tolower
  33. #undef toupper
  34. #endif
  35.  
  36. char *qstrpbrk(source, keys)
  37. char *source, *keys;
  38. {
  39.     /** Returns a pointer to the first character of source that is any
  40.         of the specified keys, or NULL if none of the keys are present
  41.         in the source string. 
  42.     **/
  43.  
  44.     register char *s, *k;
  45.     register int len;
  46.  
  47.     s = source;
  48.     while (*s != '\0') {
  49.       len = len_next_part(s);
  50.       if (len == 1) {
  51.         for (k = keys; *k; k++)
  52.           if (*k == *s)
  53.         return(s);
  54.       }
  55.       s += len;
  56.     }
  57.     
  58.     return(NULL);
  59. }
  60.  
  61. int
  62. qstrspn(source, keys)
  63. char *source, *keys;
  64. {
  65.     /** This function returns the length of the substring of
  66.         'source' (starting at zero) that consists ENTIRELY of
  67.         characters from 'keys'.  This is used to skip over a
  68.         defined set of characters with parsing, usually. 
  69.     **/
  70.  
  71.     register int loc = 0, key_index = 0, len;
  72.  
  73.     while (source[loc] != '\0') {
  74.       key_index = 0;
  75.       len = len_next_part(&source[loc]);
  76.       if (len > 1)
  77.         return(loc);
  78.  
  79.       while (keys[key_index] != source[loc])
  80.         if (keys[key_index++] == '\0')
  81.           return(loc);
  82.       loc++;
  83.     }
  84.  
  85.     return(loc);
  86. }
  87.  
  88. int
  89. qstrcspn(source, keys)
  90. char *source, *keys;
  91. {
  92.     /** This function returns the length of the substring of
  93.         'source' (starting at zero) that consists entirely of
  94.         characters NOT from 'keys'.  This is used to skip to a
  95.         defined set of characters with parsing, usually. 
  96.         NOTE that this is the opposite of strspn() above
  97.     **/
  98.  
  99.     register int loc = 0, key_index = 0, len;
  100.  
  101.     while (source[loc] != '\0') {
  102.       key_index = 0;
  103.       len = len_next_part(&source[loc]);
  104.       if (len > 1) {
  105.         loc += len;
  106.         continue;
  107.       }
  108.  
  109.       while (keys[key_index] != '\0')
  110.         if (keys[key_index++] == source[loc])
  111.           return(loc);
  112.       loc++;
  113.     }
  114.  
  115.     return(loc);
  116. }
  117.