Annotation of researchv10no/cmd/gre/efile.c, revision 1.1.1.1

1.1       root        1: #include       "re.h"
                      2: #include       <string.h>
                      3: #include       <stdio.h>
                      4: 
                      5: etofile(e, fp)
                      6:        Expr *e;
                      7:        FILE *fp;
                      8: {
                      9:        Expr ee;
                     10:        char res[256];
                     11: 
                     12:        if(e == 0){
                     13:                e = &ee;
                     14:                e->type = Null;
                     15:        }
                     16:        putw(e->type, fp);
                     17:        putw(e->lit, fp);
                     18:        switch(e->type)
                     19:        {
                     20:        case Null:
                     21:        case Literal:
                     22:        case Dot:
                     23:        case Carat:
                     24:        case Dollar:
                     25:        case Backref:
                     26:                break;
                     27:        case Compcharclass:
                     28:        case Charclass:
                     29:                putw((int)e->l, fp);
                     30:                fwrite((char *)e->r, (int)e->l, 1, fp);
                     31:                break;
                     32:        case Cat:
                     33:        case Alternate:
                     34:                etofile(e->l, fp);
                     35:                etofile(e->r, fp);
                     36:                break;
                     37:        case Star:
                     38:        case Plus:
                     39:        case Quest:
                     40:        case Group:
                     41:        case EOP:
                     42:                etofile(e->l, fp);
                     43:                break;
                     44:        }
                     45: }
                     46: 
                     47: Expr *
                     48: filetoe(fp)
                     49:        FILE *fp;
                     50: {
                     51:        Expr *ee, *er, *el;
                     52:        int t, l;
                     53:        char res[256];
                     54: 
                     55:        t = getw(fp);
                     56:        if((t == EOF) && feof(fp))
                     57:                return(0);
                     58:        l = getw(fp);
                     59:        switch(t)
                     60:        {
                     61:        case Null:
                     62:                return(0);
                     63:        case Literal:
                     64:        case Dot:
                     65:        case Carat:
                     66:        case Dollar:
                     67:        case Backref:
                     68:                return(eg_newexpr(t, l, (Expr *)0, (Expr *)0));
                     69:        case Compcharclass:
                     70:        case Charclass:
                     71:                ee = eg_newexpr(t, l, (Expr *)0, (Expr *)0);
                     72:                l = getw(fp);
                     73:                ee->r = (Expr *)egmalloc(l, "filetoe copy");
                     74:                ee->l = (Expr *)l;
                     75:                fread((char *)ee->r, l, 1, fp);
                     76:                return(ee);
                     77:        case Cat:
                     78:        case Alternate:
                     79:                el = filetoe(fp);
                     80:                er = filetoe(fp);
                     81:                return(eg_newexpr(t, l, el, er));
                     82:        case Star:
                     83:        case Plus:
                     84:        case Quest:
                     85:        case Group:
                     86:        case EOP:
                     87:                el = filetoe(fp);
                     88:                return(eg_newexpr(t, l, el, (Expr *)0));
                     89:        default:
                     90:                SPR res, "<reading expr undef type %d lit=%d>", t, l);
                     91:                re_error(res);
                     92:                return((Expr *)0);
                     93:        }
                     94: }
                     95: 
                     96: #ifdef MAIN
                     97: #include       <tmpnam.h>
                     98: 
                     99: main(argc, argv)
                    100:        char **argv;
                    101: {
                    102:        Expr *re;
                    103:        re_re *r;
                    104:        char *pat;
                    105:        FILE *tmp;
                    106:        char *tmpn;
                    107:        extern char *tmpnam();
                    108:        char e1[4096], e2[4096];
                    109:        unsigned char map[256];
                    110:        int n;
                    111: 
                    112:        if(argc != 2){
                    113:                fprintf(stderr, "Usage: efile pattern\n");
                    114:                exit(1);
                    115:        }
                    116:        pat = argv[1];
                    117:        for(n = 0; n < 256; n++)
                    118:                map[n] = n;
                    119:        r = re_recomp(pat, pat+strlen(pat), map);
                    120:        if(r == 0)
                    121:                exit(1);
                    122:        re = r->root;
                    123:        tmpn = tmpnam((char *)0);
                    124:        if((tmp = fopen(tmpn, "w+r")) == NULL){
                    125:                perror(tmpn);
                    126:                exit(1);
                    127:        }
                    128:        eg_epr(re, e1, 0);
                    129:        etofile(re, tmp);
                    130:        rewind(tmp);
                    131:        re = filetoe(tmp);
                    132:        eg_epr(re, e2, 0);
                    133:        if(strcmp(e1, e2))
                    134:                printf("MISMATCH!!\nbefore:\n%s\nafter:\n%s\n", e1, e2);
                    135:        else
                    136:                printf("ok\n");
                    137:        re_refree(r);
                    138:        exit(0);
                    139: }
                    140: #endif

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.