home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 January / Chip_2001-01_cd1.bin / tema / mysql / mysql-3.23.28g-win-source.exe / regex / reginit.c < prev    next >
C/C++ Source or Header  |  2000-08-31  |  2KB  |  72 lines

  1. /* Init cclasses array from ctypes */
  2.  
  3. #include <global.h>
  4. #include <m_ctype.h>
  5. #include <m_string.h>
  6. #include "cclass.h"
  7.  
  8. static bool regex_inited=0;
  9.  
  10. void regex_init()
  11. {
  12.   char buff[CCLASS_LAST][256];
  13.   int  count[CCLASS_LAST];
  14.   uint i;
  15.  
  16.   if (!regex_inited)
  17.   {
  18.     regex_inited=1;
  19.     bzero((gptr) &count,sizeof(count));
  20.  
  21.     for (i=1 ; i<= 255; i++)
  22.     {
  23.       if (isalnum(i))
  24.     buff[CCLASS_ALNUM][count[CCLASS_ALNUM]++]=(char) i;
  25.       if (isalpha(i))
  26.     buff[CCLASS_ALPHA][count[CCLASS_ALPHA]++]=(char) i;
  27.       if (iscntrl(i))
  28.     buff[CCLASS_CNTRL][count[CCLASS_CNTRL]++]=(char) i;
  29.       if (isdigit(i))
  30.     buff[CCLASS_DIGIT][count[CCLASS_DIGIT]++]=(char) i;
  31.       if (isgraph(i))
  32.     buff[CCLASS_GRAPH][count[CCLASS_GRAPH]++]=(char) i;
  33.       if (islower(i))
  34.     buff[CCLASS_LOWER][count[CCLASS_LOWER]++]=(char) i;
  35.       if (isprint(i))
  36.     buff[CCLASS_PRINT][count[CCLASS_PRINT]++]=(char) i;
  37.       if (ispunct(i))
  38.     buff[CCLASS_PUNCT][count[CCLASS_PUNCT]++]=(char) i;
  39.       if (isspace(i))
  40.     buff[CCLASS_SPACE][count[CCLASS_SPACE]++]=(char) i;
  41.       if (isupper(i))
  42.     buff[CCLASS_UPPER][count[CCLASS_UPPER]++]=(char) i;
  43.       if (isxdigit(i))
  44.     buff[CCLASS_XDIGIT][count[CCLASS_XDIGIT]++]=(char) i;
  45.     }
  46.     buff[CCLASS_BLANK][0]=' ';
  47.     buff[CCLASS_BLANK][1]='\t';
  48.     count[CCLASS_BLANK]=2;
  49.     for (i=0; i < CCLASS_LAST ; i++)
  50.     {
  51.       char *tmp=(char*) malloc(count[i]+1);
  52.       memcpy(tmp,buff[i],count[i]*sizeof(char));
  53.       tmp[count[i]]=0;
  54.       cclasses[i].chars=tmp;
  55.     }
  56.   }
  57.   return;
  58. }
  59.  
  60. void regex_end()
  61. {
  62.   if (regex_inited)
  63.   {
  64.     int i;
  65.     for (i=0; i < CCLASS_LAST ; i++)
  66.       free(cclasses[i].chars);
  67.     regex_inited=0;
  68.   }
  69. }
  70.  
  71.  
  72.