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 >
Wrap
C/C++ Source or Header
|
1997-11-16
|
1KB
|
75 lines
#include "enlightenment.h"
int isafter(int p, char *s1, char *s2)
{
int i,j;
int len,len2;
int match;
len=strlen(s1);
len2=strlen(s2);
match=0;
for(i=p;i<len;i++)
{
if (s1[i]==s2[0])
{
match=1;
for (j=0;j<len2;j++)
{
if ((i+j)>=len) return -1;
if (s1[i+j]!=s2[j]) match=0;
}
}
if (match) return i+len2;
}
return -1;
}
int matchregexp(char *rx, char *s)
{
int i,l,m; /* j,k */
int len, lenr;
int match;
char rx2[1024];
if (!s) return 0;
if (!rx) return 0;
len=strlen(s);
l=0;
lenr=0;
match=1;
if (rx[0]!='*')
{
m=0;
while ((rx[l]!='*')&&(rx[l]))
rx2[m++]=rx[l++];
rx2[m]=0;
lenr=strlen(rx2);
if (lenr>len) return 0;
for (i=0;i<lenr;i++)
{
if (s[i]!=rx[i]) return 0;
}
}
if ((!rx[l])&&(s[lenr])) return 0;
for (i=lenr;i<len;i++)
{
if (rx[l]) l++;
if (rx[l])
{
m=0;
while ((rx[l]!='*')&&(rx[l]))
rx2[m++]=rx[l++];
rx2[m]=0;
i=isafter(i,s,rx2);
if (i<0) return 0;
}
else
return match;
}
return match;
}