1: # include "stdio.h"
2: # define SAME 0
3: #define FGCT 10 /* number of files for out-of-date index */
4: #define FGSIZE 150 /* total chars in filenames from OOD index */
5: int keepold 1; /* keep old things for fgrep search */
6: char fgspace[FGSIZE];
7: char *fgp fgspace;
8: char *fgnames[FGCT];
9: char **fgnamp fgnames;
10:
11: findline(in, out, outlen, indexdate)
12: long indexdate;
13: char *in, *out;
14: {
15: static char name[100] "";
16: register char *p;
17: char **ftp;
18: extern long gdate();
19: static FILE *fa NULL;
20: long lp, llen;
21: int len;
22: register k;
23: char savc;
24:
25: if (in[0]==0)
26: return(0);
27: for(p=in; *p && *p != ':' && *p != ';'; p++)
28: ;
29: if (savc = *p) *p++=0;
30: else p=in;
31: k = sscanf(p, "%ld,%ld", &lp, &llen);
32: if (k<2)
33: {
34: lp = 0;
35: llen=outlen;
36: }
37: if (strcmp (name, in) != 0)
38: {
39: if (fa != NULL)
40: fa = freopen(in, "r", fa);
41: else
42: fa = fopen(in, "r");
43: if (fa == NULL)
44: return(0);
45: /* err("Can't open %s", in); */
46: strcpy(name, in);
47: if (gdate(fa) > indexdate && indexdate != 0)
48: {
49: if (keepold)
50: {
51: for(ftp=fgnames; ftp<fgnamp; ftp++)
52: if (strcmp(*ftp, name)==SAME)
53: return(0);
54: if ((fgnamp==fgnames+FGCT-1) ||
55: (fgp+strlen(name)+1 >= &fgspace[FGSIZE])) {
56: fprintf(stderr,
57: "Too many out-of-date files\n");
58: return(0);
59: }
60: strcpy (*fgnamp++ = fgp, name);
61: return(0);
62: }
63: fprintf(stderr, "Warning: index predates file '%s'\n", name);
64: }
65: }
66: if (savc)
67: *(p-1) = savc;
68: if (fa != NULL)
69: {
70: fseek (fa, lp, 0);
71: if (llen >= outlen) {
72: fprintf(stderr,"Reference too long, truncated:\n");
73: len = outlen-1;
74: } else
75: len = llen;
76: len = fread (out, 1, len, fa);
77: out[len] = 0;
78: if (len != llen) {
79: out[len-1] = '\n';
80: fprintf(stderr,"%s\n",out);
81: }
82: return(len);
83: } else {
84: return(0);
85: }
86: }
Defined functions
Defined variables
fgnamp
defined in line
9; used 6 times
fgp
defined in line
7; used 9 times
Defined macros
FGCT
defined in line
3; used 2 times
FGSIZE
defined in line
4; used 2 times
SAME
defined in line
2; used 1 times