# include "stdio.h" # include "ctype.h" grepcall (in, out, arg) char *in, *out, *arg; { char line[200], *s, argig[100], *cv[50]; char *inp, inb[500]; extern char gfile[]; FILE *qf, *gf; int c, oldc 0, alph 0, nv 0; int sv0, sv1; strcpy (argig, arg); strcat(argig, ".ig"); strcpy (inp=inb, in); if (gfile[0]==0) sprintf(gfile, "/tmp/rj%dg", getpid()); # if D1 fprintf(stderr, "in grepcall, gfile %s in %o out %o\n", gfile,in,out); # endif for(cv[nv++] = "fgrep"; c = *inp; inp++) { if (c== ' ') c = *inp = 0; else if (isupper(c)) *inp = tolower(c); alph = (c==0) ? 0 : alph+1; if (alph == 1) cv[nv++] = inp; if (alph > 6) *inp = 0; oldc=c; } # if D1 fprintf(stderr, "%d args set up\n", nv); # endif { sv0 = dup(0); close(0); if (open (argig, 0) != 0) err("Can't read fgrep index %s", argig); sv1 = dup(1); close(1); if (creat(gfile, 0666) != 1) err("Can't write fgrep output %s", gfile); fgrep(nv, cv); # if D1 fprintf(stderr, "fgrep returned, output is..\n"); # endif close (0); dup(sv0); close(sv0); close (1); dup(sv1); close(sv1); } # if D1 fprintf(stderr, "back from fgrep\n"); # endif gf = fopen(gfile, "r"); if (gf==NULL) err("can't read fgrep output %s", gfile); while (fgets(line, 100, gf) == line) { line[100]=0; # if D1 fprintf(stderr, "read line as //%s//\n",line); # endif for(s=line; *s && (*s != '\t'); s++); if (*s == '\t') { *s++ = '\n'; *s++ = 0; } if (line[0]) strcat(out, line); # if D1 fprintf(stderr, "out now /%s/\n",out); # endif while (*s) s++; # if D1 fprintf(stderr, "line %o s %o s-1 %o\n",line,s,s[-1]); # endif if (s[-1]!= '\n') while (!feof(gf) && getc(gf)!= '\n') ; } fclose(gf); # if D1 fprintf(stderr, "back from reading %, out %s\n",out); # else unlink (gfile); # endif return(0); } clfgrep() { if (gfile[0]) unlink(gfile); }