|
|
researchv10 Norman
#include "re.h"
#include <string.h>
#include <stdio.h>
etofile(e, fp)
Expr *e;
FILE *fp;
{
Expr ee;
char res[256];
if(e == 0){
e = ⅇ
e->type = Null;
}
putw(e->type, fp);
putw(e->lit, fp);
switch(e->type)
{
case Null:
case Literal:
case Dot:
case Carat:
case Dollar:
case Backref:
break;
case Compcharclass:
case Charclass:
putw((int)e->l, fp);
fwrite((char *)e->r, (int)e->l, 1, fp);
break;
case Cat:
case Alternate:
etofile(e->l, fp);
etofile(e->r, fp);
break;
case Star:
case Plus:
case Quest:
case Group:
case EOP:
etofile(e->l, fp);
break;
}
}
Expr *
filetoe(fp)
FILE *fp;
{
Expr *ee, *er, *el;
int t, l;
char res[256];
t = getw(fp);
if((t == EOF) && feof(fp))
return(0);
l = getw(fp);
switch(t)
{
case Null:
return(0);
case Literal:
case Dot:
case Carat:
case Dollar:
case Backref:
return(eg_newexpr(t, l, (Expr *)0, (Expr *)0));
case Compcharclass:
case Charclass:
ee = eg_newexpr(t, l, (Expr *)0, (Expr *)0);
l = getw(fp);
ee->r = (Expr *)egmalloc(l, "filetoe copy");
ee->l = (Expr *)l;
fread((char *)ee->r, l, 1, fp);
return(ee);
case Cat:
case Alternate:
el = filetoe(fp);
er = filetoe(fp);
return(eg_newexpr(t, l, el, er));
case Star:
case Plus:
case Quest:
case Group:
case EOP:
el = filetoe(fp);
return(eg_newexpr(t, l, el, (Expr *)0));
default:
SPR res, "<reading expr undef type %d lit=%d>", t, l);
re_error(res);
return((Expr *)0);
}
}
#ifdef MAIN
#include <tmpnam.h>
main(argc, argv)
char **argv;
{
Expr *re;
re_re *r;
char *pat;
FILE *tmp;
char *tmpn;
extern char *tmpnam();
char e1[4096], e2[4096];
unsigned char map[256];
int n;
if(argc != 2){
fprintf(stderr, "Usage: efile pattern\n");
exit(1);
}
pat = argv[1];
for(n = 0; n < 256; n++)
map[n] = n;
r = re_recomp(pat, pat+strlen(pat), map);
if(r == 0)
exit(1);
re = r->root;
tmpn = tmpnam((char *)0);
if((tmp = fopen(tmpn, "w+r")) == NULL){
perror(tmpn);
exit(1);
}
eg_epr(re, e1, 0);
etofile(re, tmp);
rewind(tmp);
re = filetoe(tmp);
eg_epr(re, e2, 0);
if(strcmp(e1, e2))
printf("MISMATCH!!\nbefore:\n%s\nafter:\n%s\n", e1, e2);
else
printf("ok\n");
re_refree(r);
exit(0);
}
#endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.