home *** CD-ROM | disk | FTP | other *** search
- # 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);
- }
-