|
|
1.1 root 1: # include "stdio.h"
2: # include "assert.h"
3: # include "ctype.h"
4:
5: static long lp, lim;
6: static int alph, prevc;
7: static char *p, key[20];
8: extern char *iglist, *svc();
9: void addkey(), searchkey();
10: void (*what)();
11: # define NK 300
12: struct keyst {
13: char *keytxt;
14: int keywt;
15: int keyocc;
16: } keys[NK];
17: struct keyst *keyp;
18:
19: resetkey()
20: {
21: keyp=keys;
22: }
23:
24: dofile (name)
25: char *name;
26: {
27:
28: # define MAXLINE 500
29: struct keyst *ks;
30: int c;
31: FILE *f;
32: f = fopen(name, "r");
33: if (f==NULL) return;
34: alph=lp=prevc=0;
35: p=key;
36: while ( (c=getc(f)) != EOF )
37: chkey (c);
38: fclose(f);
39: }
40:
41: outkey( ky, lead, trail)
42: char *ky;
43: {
44: int n;
45: n = strlen(ky);
46: if (n<2) return(0);
47: if (n<3)
48: {
49: if (trail == '.') return(0);
50: if (strchr(".%,!#$%&'();+:*", lead)) return(0);
51: }
52: if (isdigit(ky[0]))
53: if (ky[0] != '1' || ky[1] != '9' || n!= 4) return(0);
54: if (common(ky))
55: return(0);
56: return(1);
57: }
58: chkey (c)
59: {
60: if ((isalpha(c) || isdigit(c)) && prevc != '\\')
61: {
62: if (alph++ < 6)
63: *p++ = c;
64: }
65: else
66: {
67: *p = 0;
68: for(p=key; *p; p++)
69: *p |= 040;
70: if (outkey(p=key,prevc,c))
71: (*what)(key);
72: prevc=c;
73: alph=0;
74: }
75: }
76: void
77: addkey(key)
78: char *key;
79: {
80: struct keyst *ks;
81: for(ks=keys; ks<keyp; ks++)
82: if (strcmp(ks->keytxt, key)==0)
83: break;
84: if (ks<keyp)
85: ks->keywt++;
86: else
87: {
88: keyp->keytxt = svc(key);
89: keyp->keywt=1;
90: assert(++keyp-keys <NK);
91: }
92: }
93: void
94: searchkey(s)
95: char *s;
96: {
97: struct keyst *ks;
98: for(ks=keys; ks<keyp; ks++)
99: {
100: if (strcmp(ks->keytxt, s)==0)
101: break;
102: }
103: if (ks<keyp)
104: ks->keyocc++;
105: }
106: zerokey()
107: {
108: struct keyst *ks;
109: for(ks=keys; ks<keyp; ks++)
110: ks->keyocc=0;
111: }
112: scorekey()
113: {
114: struct keyst *ks;
115: int sc=0;
116: for(ks=keys; ks<keyp; ks++)
117: sc += min(ks->keyocc, ks->keywt);
118: return(sc);
119: }
120: min(a,b)
121: {
122: return(a<b ? a : b);
123: }
124: mkkey(s)
125: char *s;
126: {
127: int i, na; char *sa[20];
128: na = getargs(s, sa);
129: for(i=0; i<na; i++)
130: {
131: if (isdigit(sa[i][0]))
132: keyp->keywt = atoi(sa[i]);
133: else
134: {
135: if (strlen(sa[i]) > 6)
136: sa[i][6]=0;
137: keyp->keytxt = svc(sa[i]);
138: keyp->keywt = 1;
139: keyp++;
140: }
141: }
142: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.