6 char patfile[128], header[Hdrsize+2];
9 char* canon(Biobuf*, char*, char*, int*);
10 int matcher(char *, Pattern*, char*, Resub*);
11 int matchaction(Patterns*, char*);
16 fprint(2, "missing or bad arguments to qer\n");
27 fprint(2, "malloc error");
34 Realloc(void *p, ulong n)
38 fprint(2, "realloc error");
51 for(i = 0; patterns[i].action; i++){
52 for(p = patterns[i].regexps; p; p = p->next){
53 print("%s <REGEXP>\n", patterns[i].action);
56 for(s = p->alt; s; s = s->next)
57 print("\t%s\n", s->string);
59 p = patterns[i].strings;
63 for(j = 0; j < Nhash; j++){
64 for(s = p->spat[j]; s; s = s->next){
65 print("%s %s\n", patterns[i].action, s->string);
68 for(q = s->alt; q; q = q->next)
69 print("\t%s\n", q->string);
76 main(int argc, char *argv[])
78 int i, fd, n, aflag, vflag;
79 char body[Bodysize+2], *raw, *ret;
82 sprint(patfile, "%s/patterns", UPASLIB);
96 strcpy(patfile,ARGF());
100 bp = Bopen(patfile, OREAD);
107 fd = open(*argv, OREAD);
109 fprint(2, "can't open %s\n", *argv);
112 Binit(&bin, fd, OREAD);
114 Binit(&bin, 0, OREAD);
120 raw = canon(&bin, header+1, body+1, &n);
129 fprint(2, "\t**** Header ****\n\n");
130 write(2, header+1, strlen(header+1));
133 fprint(2, "\t**** Body ****\n\n");
135 write(2, body+1, strlen(body+1));
139 for(i = 0; patterns[i].action; i++){
140 if(matchaction(&patterns[i], header+1))
141 ret = patterns[i].action;
144 if(matchaction(&patterns[i], body+1))
145 ret = patterns[i].action;
152 canon(Biobuf *bp, char *header, char *body, int *n)
163 raw = readmsg(bp, &hsize, n);
165 base64 = convert(raw, raw+hsize, header, Hdrsize, 0);
168 raw = readmsg(bp, 0, n);
172 conv64(raw+hsize, raw+*n, body, Bodysize);
174 convert(raw+hsize, raw+*n, body, Bodysize, 1);
180 matchaction(Patterns *pp, char *message)
187 if(message == 0 || *message == 0)
194 for(cp = message; matcher(name, p, cp, m); cp = m[0].e.ep)
197 for(p = pp->regexps; p; p = p->next)
198 for(cp = message; matcher(name, p, cp, m); cp = m[0].e.ep)
204 matcher(char *action, Pattern *p, char *message, Resub *m)
206 if(matchpat(p, message, m)){
207 if(p->action != Lineoff)
208 xprint(1, action, m);