TITLE SQUOZE TABLE HANDLER FOR MUDDLE RELOCATABLE .INSRT MUDDLE > .GLOBAL SQUPNT,ATOSQ,SQUTOA ; POINTER TO TABLE FILLED IN BY INITM SQUPNT: 0 ; GIVEN LOCN OF SUBR RET SQUO NAME ARG AND VAL IN E ATOSQ: PUSH P,B PUSH P,A MOVE A,SQUPNT ; GET TABLE POINTER MOVE B,[2,,2] CAMN E,1(A) JRST ATOSQ1 ADD A,B JUMPL A,.-3 POPABJ: POP P,B POP P,A POPJ P, ATOSQ1: MOVE E,(A) AOS -2(P) JRST POPABJ ; BINARY SEARCH FOR SQUOZE SYMBOL ARG IN E SQUTOA: PUSH P,A PUSH P,B PUSH P,C MOVE A,SQUPNT ; POINTER TO TABLE HLRE B,SQUPNT MOVNS B HRLI B,(B) ; B IS CURRENT OFFSET UP: ASH B,-1 ; HALVE TABLE AND B,[-2,,-2] ; FORCE DIVIS BY 2 MOVE C,A ; COPY POINTER JUMPLE B,LSTHLV ; CANT GET SMALLER ADD C,B CAMLE E,(C) ; SKIP IF EITHER FOUND OR IN TOP MOVE A,C ; POINT TO SECOND HALF CAMN E,(C) ; SKIP IF NOT FOUND JRST WON CAML E,(C) ; SKIP IF IN TOP HALF JRST UP HLLZS C ; FIX UP OINTER SUB A,C JRST UP WON: MOVE E,1(C) ; RET VAL IN E AOS -3(P) ; SKIP RET WON1: POP P,C POP P,B POP P,A POPJ P, LSTHLV: CAMN E,(C) ; LINEAR SERCH REST JRST WON ADD C,[2,,2] JUMPL C,.-3 JRST WON1 ; ALL GONE, LOSE END