|
|
1.1 root 1: int
2: search(a, nn, es, fc, arg, j1, j2)
3: char *a, *arg, **j1, **j2;
4: unsigned nn;
5: int es;
6: int (*fc)();
7: {
8: int c;
9: char *lp, *ap;
10: unsigned n;
11:
12: n = nn;
13: lp = a;
14: ap = a + n*es;
15: loop:
16: if(n == 0){
17: *j1 = lp;
18: *j2 = ap;
19: return(-1);
20: }
21: n = ap - lp;
22: n = es * (n/(2*es));
23: if((c=(*fc)(arg,lp+n)) == 0){
24: lp = lp + n;
25: ap = lp + es;
26: goto gotit;
27: }
28: if(c<0){
29: ap = lp + n;
30: goto loop;
31: }
32: if(c>0){
33: lp = lp + n;
34: goto loop;
35: }
36: gotit:
37: while(1){
38: if(lp==a) break;
39: if((*fc)(arg,lp-es) ==0){
40: lp = lp - es;
41: }
42: else
43: break;
44: }
45: while(1){
46: if(ap==a+nn*es) break;
47: if((*fc)(arg,ap) == 0){
48: ap = ap + es;
49: }
50: else
51: break;
52: }
53: *j1 = lp;
54: *j2 = ap;
55: return(1);
56: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.