1 /* 2 * Copyright 2005 Sun Microsystems, Inc. All rights reserved. 3 * Use is subject to license terms. 4 */ 5 6 /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ 7 /* All Rights Reserved */ 8 9 /* 10 * Copyright (c) 1980 Regents of the University of California. 11 * All rights reserved. The Berkeley software License Agreement 12 * specifies the terms and conditions for redistribution. 13 */ 14 15 #pragma ident "%Z%%M% %I% %E% SMI" 16 17 18 #include <stdio.h> 19 #include <ctype.h> 20 21 extern char gfile[]; 22 23 void 24 grepcall(char *in, char *out, char *arg) 25 { 26 char line[200], *s, argig[100], *cv[50]; 27 char *inp, inb[500]; 28 FILE *qf, *gf; 29 int c, oldc = 0, alph = 0, nv = 0; 30 int sv0, sv1; 31 strcpy(argig, arg); 32 strcat(argig, ".ig"); 33 strcpy(inp = inb, in); 34 if (gfile[0] == 0) 35 sprintf(gfile, "/tmp/rj%dg", getpid()); 36 #if D1 37 fprintf(stderr, "in grepcall, gfile %s in %o out %o\n", 38 gfile, in, out); 39 #endif 40 for (cv[nv++] = "fgrep"; c = *inp; inp++) { 41 if (c == ' ') 42 c = *inp = 0; 43 else if (isupper(c)) 44 *inp = tolower(c); 45 alph = (c == 0) ? 0 : alph+1; 46 if (alph == 1) 47 cv[nv++] = inp; 48 if (alph > 6) 49 *inp = 0; 50 oldc = c; 51 } 52 #if D1 53 fprintf(stderr, "%d args set up\n", nv); 54 #endif 55 { 56 sv0 = dup(0); 57 close(0); 58 if (open(argig, 0) != 0) 59 err("Can't read fgrep index %s", argig); 60 sv1 = dup(1); 61 close(1); 62 if (creat(gfile, 0666) != 1) 63 err("Can't write fgrep output %s", gfile); 64 fgrep(nv, cv); 65 #if D1 66 fprintf(stderr, "fgrep returned, output is..\n"); 67 #endif 68 close(0); 69 dup(sv0); 70 close(sv0); 71 close(1); 72 dup(sv1); 73 close(sv1); 74 } 75 76 #if D1 77 fprintf(stderr, "back from fgrep\n"); 78 #endif 79 gf = fopen(gfile, "r"); 80 if (gf == NULL) 81 err("can't read fgrep output %s", gfile); 82 while (fgets(line, 100, gf) == line) { 83 line[100] = 0; 84 #if D1 85 fprintf(stderr, "read line as //%s//\n", line); 86 #endif 87 for (s = line; *s && (*s != '\t'); s++) 88 ; 89 if (*s == '\t') { 90 *s++ = '\n'; 91 *s++ = 0; 92 } 93 if (line[0]) 94 strcat(out, line); 95 #if D1 96 fprintf(stderr, "out now /%s/\n", out); 97 #endif 98 while (*s) s++; 99 #if D1 100 fprintf(stderr, "line %o s %o s-1 %o\n", line, s, s[-1]); 101 #endif 102 if (s[-1] != '\n') 103 while (!feof(gf) && getc(gf) != '\n') 104 ; 105 } 106 fclose(gf); 107 #if D1 108 fprintf(stderr, "back from reading %, out %s\n", out); 109 #else 110 unlink(gfile); 111 #endif 112 } 113 114 void 115 clfgrep(void) 116 { 117 if (gfile[0]) 118 unlink(gfile); 119 }