Trailing-Edge
-
PDP-10 Archives
-
decuslib20-03
-
decus/20-0078/libsim/lookup.sim
There is 1 other file named lookup.sim in the archive. Click here to see a list.
OPTIONS(/E/C/-A/-Q/-I/-D);
! Procedure LOOKUP will perform a binary search for T in the
! text array TA within the interval [LOW,HIGH]. The text
! array contents must be sorted in ASCENDING order! (I.e.
! TA[J] < TA[J+1]. Use procedure SORTTA for sorting if
! necessary.) If the text is found in TA the matching index I
! will be returned (for which TA[I] = T) and LOOKUP will
! return TRUE. If the text is NOT found LOOKUP will return
! FALSE and I will be either in the range [LOW,HIGH-1] in case
! TA[I] > T > TA[I+1] or else I = HIGH if T > TA[HIGH] or I
! = LOW-1 IF T < TA[LOW]. Author: Mats Ohlin, FOA 1, S-104 50
! STOCKHOLM 80, SWEDEN.
;
BOOLEAN PROCEDURE lookup(t,ta,low,high,i); NAME i; TEXT t;
TEXT ARRAY ta; INTEGER low,high,i;
IF low <= high THEN
BEGIN INTEGER j;
OPTIONS(/A); COMMENT START ARRAY BOUNDS CHECKING;
IF
ta[low] < t AND t < ta[high]
THEN
BEGIN ;
OPTIONS(/-A); COMMENT NO ARRAY BOUNDS CHECKING;
FOR j:= (low+high)//2 WHILE high > low + 1 DO
IF ta[j] > t THEN high:= j ELSE
IF ta[j] < t THEN low:= j ELSE
BEGIN lookup:= TRUE; GO TO out END
END inside range ELSE
IF ta[low] = t THEN
BEGIN lookup:= TRUE; j:= low END ELSE
IF ta[high] = t THEN
BEGIN lookup:= TRUE; j:= high END ELSE
IF ta[low] > t THEN j:= low - 1 ELSE
IF ta[high] < t THEN j:= high;
out: i:= j
END of lookup;