1: #ifndef lint
2: static char *sccsid = "@(#)mkey2.c 4.1 (Berkeley) 5/6/83";
3: #endif
4:
5: #include <stdio.h>
6: #include <ctype.h>
7: #define MAXLINE 500
8:
9: static int eof = 0;
10: static long lp, lim;
11: static int alph, used, prevc;
12: static char *p, key[20];
13:
14: dofile(f, name)
15: FILE *f;
16: char *name;
17: {
18: /* read file f & spit out keys & ptrs */
19:
20: char line[MAXLINE], *s;
21: extern int minlen, keycount, labels;
22: int c;
23: long grec();
24: extern int wholefile;
25: extern char *iglist;
26: alph=used=prevc=eof=0;
27:
28: lp=0;
29: if (wholefile==0)
30: while (lim = grec(line,f))
31: {
32: # if D1
33: fprintf(stderr, "line: /%s",line);
34: # endif
35: used=alph=0;
36: p = key;
37: for(s=line; (c= *s) && (used<keycount); s++)
38: chkey(c, name);
39: lp += lim;
40: if (used) putchar('\n');
41: }
42: else
43: {
44: p=key;
45: used=alph=0;
46: while ( (c=getc(f)) != EOF && used<keycount)
47: chkey (c, name);
48: if (used) putchar('\n');
49: }
50: fclose(f);
51: }
52:
53: outkey( ky, lead, trail)
54: char *ky;
55: {
56: int n;
57: n = strlen(ky);
58: if (n<minlen) return (0);
59: if (n<3)
60: {
61: if (trail == '.') return(0);
62: if (mindex(".%,!#$%&'();+:*", lead)!=0) return(0);
63: }
64: if (isdigit(ky[0]))
65: if (ky[0] != '1' || ky[1] != '9' || n!= 4) return(0);
66: if (common(ky))
67: return(0);
68: return(1);
69: }
70:
71: long
72: grec (s, f)
73: char *s;
74: FILE *f;
75: {
76: char tm[200];
77: int curtype = 0;
78: long len = 0L, tlen = 0L;
79: extern int wholefile;
80: if (eof) return(0);
81: *s = 0;
82: while (fgets(tm, 200, f))
83: {
84: tlen += strlen(tm);
85: if (tm[0] == '%' || tm[0] == '.')
86: curtype = tm[1];
87: if (tlen < MAXLINE && mindex(iglist,curtype)==0)
88: strcat(s, tm);
89: len = tlen;
90: if (wholefile==0 && tm[0] == '\n')
91: return(len);
92: if (wholefile>0 && len >= MAXLINE)
93: {
94: fseek (f, 0L, 2);
95: return(ftell(f));
96: }
97: }
98: eof=1;
99: return(s[0] ? len : 0L);
100: }
101:
102: char *
103: trimnl(ln)
104: char *ln;
105: {
106: register char *p = ln;
107: while (*p) p++;
108: p--;
109: if (*p == '\n') *p=0;
110: return(ln);
111: }
112:
113: chkey (c, name)
114: {
115: if (isalpha(c) || isdigit(c))
116: {
117: if (alph++ < 6)
118: *p++ = c;
119: }
120: else
121: {
122: *p = 0;
123: for(p=key; *p; p++)
124: *p |= 040;
125: if (outkey(p=key,prevc,c))
126: {
127: if (used==0)
128: {
129: if (labels)
130: {
131: if (wholefile==0)
132: printf("%s:%ld,%ld\t", name, lp, lim);
133: else
134: printf("%s\t", name);
135: }
136: }
137: else
138: putchar(' ');
139: fputs(key, stdout);
140: used++;
141: }
142: prevc=c;
143: alph=0;
144: }
145: }
Defined functions
grec
defined in line
71; used 2 times
Defined variables
alph
defined in line
11; used 5 times
eof
defined in line
9; used 3 times
key
defined in line
12; used 5 times
lim
defined in line
10; used 3 times
lp
defined in line
10; used 3 times
p
defined in line
12; used 15 times
prevc
defined in line
11; used 3 times
sccsid
defined in line
2;
never used
used
defined in line
11; used 9 times
Defined macros