|
|
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.