home *** CD-ROM | disk | FTP | other *** search
/ Dream 52 / Amiga_Dream_52.iso / Linux / Enlightenment / enl_BETA-0.13.src.tar.gz / enl_BETA-0.13.src.tar / enl-0.13 / regexp.c < prev    next >
C/C++ Source or Header  |  1997-11-16  |  1KB  |  75 lines

  1. #include "enlightenment.h"
  2.  
  3. int isafter(int p, char *s1, char *s2)
  4. {
  5.    int i,j;
  6.    int len,len2;
  7.    int match;
  8.    
  9.    len=strlen(s1);
  10.    len2=strlen(s2);
  11.    
  12.    match=0;
  13.    for(i=p;i<len;i++)
  14.      {
  15.     if (s1[i]==s2[0])
  16.       {
  17.          match=1;
  18.          for (j=0;j<len2;j++)
  19.            {
  20.           if ((i+j)>=len) return -1;
  21.           if (s1[i+j]!=s2[j]) match=0;
  22.            }
  23.       }
  24.     if (match) return i+len2;
  25.      }
  26.    return -1;
  27. }
  28.  
  29. int matchregexp(char *rx, char *s)
  30. {
  31.    int i,l,m; /* j,k */
  32.    int len, lenr;
  33.    int match;
  34.    char rx2[1024];
  35.    
  36.    if (!s) return 0;
  37.    if (!rx) return 0;
  38.    
  39.    len=strlen(s);
  40.    l=0;
  41.    lenr=0;
  42.    match=1;
  43.    
  44.    if (rx[0]!='*')
  45.      {
  46.     m=0;
  47.     while ((rx[l]!='*')&&(rx[l]))
  48.       rx2[m++]=rx[l++];
  49.     rx2[m]=0;
  50.     lenr=strlen(rx2);
  51.     if (lenr>len) return 0;
  52.     for (i=0;i<lenr;i++)
  53.       {
  54.          if (s[i]!=rx[i]) return 0;
  55.       }
  56.      }
  57.    if ((!rx[l])&&(s[lenr])) return 0;
  58.    for (i=lenr;i<len;i++)
  59.      {
  60.     if (rx[l]) l++;
  61.     if (rx[l])
  62.       {
  63.          m=0;
  64.          while ((rx[l]!='*')&&(rx[l]))
  65.            rx2[m++]=rx[l++];
  66.          rx2[m]=0;
  67.          i=isafter(i,s,rx2);
  68.          if (i<0) return 0;
  69.       }
  70.     else
  71.       return match;
  72.      }
  73.    return match;
  74. }
  75.