.TITLE MT04.. TABLE MANIPULATION ROUTINES. .IDENT /MT04../ ; ; AUTHOR :- J.S.CLIFTON. ; DATE :- 20TH OCTOBER 81. ; ; T$SEEK:: ;SEEK TABLE STRING USING BINARY CHOP. ; ; ENTRY CONDITIONS. ; R1 = TABLE MARKER ; ; EXIT CONDITIONS. ; R0 -> ACCESS ADDRESS IF STATUS = SUCCESS ; CALL T$SETUP ;IS NODE TABLE VALID. IFERROR RETURN ;EXIT IF NOT. ; SAVE R2,R3,R4 ;SAVE THE REGISTERS. ; MOV TFIRST,R2 ;R4 POINTS TO TOP OF STRING. SUB #4,R2 ;R3 POINTS TO MIDDLE OF STRING. MOV TLAST,R4 ;R2 POINTS TO BOTTOM OF STRING. ADD #4,R4 ; 10$: MOV R4,R3 ;SET R3 TO MIDDLE OF SECTION. SUB R2,R3 ASR R3 BIC #3,R3 ; TST R3 ;IF R3 = 0 THEN MARKER NOT THERE. BLE 40$ ; SO EXIT WITH ERROR. ; ADD R2,R3 ;ADD BACK BASE ADDRESS. CMP R1,(R3) ;IF EQUAL THEN ITEM FOUND. BEQ 30$ ;SO BRANCH. BLT 20$ ;ITEM LESS THAN. ; MOV R3,R2 ;IF GREATER THEN RESET. BR 10$ ;RE-LOOP. ; 20$: MOV R3,R4 ;IF LESS THEN RESET. BR 10$ ; 30$: MOV R3,TPRESENT ;REMEMBER PRESENT POSITION. TST (R3)+ ;MARKER FOUND SO INCREMENT R3 TO ADDRESS. MOV (R3),R0 ;SET ADDRESS INTO R0. MOV R0,R3 ;NOW SET NPRESENT MARKER. CMP -(R3),-(R3) MOV R3,NPRESENT MOV -4(R0),CD.KEY ;SAVE THE KEY. MOV R0,CD.SRC ;REMEMBER THE ADDRESS. SETSUCCESS 50$ ;EXIT. ; 40$: SETERROR ;ITEM NOT FOUND. 50$: UNSAVE R2,R3,R4 ;UNSAVE THE REGISTERS. RETURN ; .END