.TITLE MT07.. TABLE MANIPULATION ROUTINES. .IDENT /MT07../ ; ; AUTHOR :- J.S.CLIFTON. ; DATE :- 21ST OCTOBER 81 ; ; T$NEXT:: ; EXIT CONDITIONS ; R0 -> ACCESS ADDRESS IF STATUS = SUCCESS ; ; CALL T$SETUP ;CHECK NS TABLE SET UP. IFERROR RETURN ;EXIT IF ERROR. MOV R1,-(SP) ;SAVE R1 MOV TPRESENT,R1 ;GET PRESENT SORT POINTER CMP R1,TLAST ;CHECK IF VALID BPL 10$ ;EXIT ERROR IF NOT. CMP (R1)+,(R1)+ ;INCREMENT TO NEXT. MOV R1,TPRESENT ;RESTORE PRESENT POINTER TO NEXT. MOV 2(R1),R0 ;MOVE ADDRESS OF NEXT STRING TO R0. MOV R0,R1 ;SET NPRESENT. CMP -(R1),-(R1) MOV R1,NPRESENT MOV (SP)+,R1 ;UNSAVE THE REGISTER. MOV -4(R0),CD.KEY ;REMEMBER THE KEY. MOV R0,CD.SRC ;REMEMBER THE STRING ADDRESS. EXITSUCCESS ;EXIT ; 10$: MOV (SP)+,R1 ;UNSAVE THE POINTER. EXITERROR ;EXIT. ; ; ; T$PREVIOUS:: ; EXIT CONDITIONS ; R0 -> ACCESS ADDRESS IF STATUS = SUCCESS. ; CALL T$SETUP ;CHECK NS TABLE SET UP. IFERROR RETURN ;EXIT IF ERROR. MOV R1,-(SP) ;SAVE R1. MOV TPRESENT,R1 ;GET PRESENT SORT POINTER. CMP R1,TFIRST ;CHECK IF VALID. BLOS 10$ ;BRANCH IF NOT CMP -(R1),-(R1) ;DECREMENT TO PREVIOUS. MOV R1,TPRESENT ;RESTOR NEW PRESENT POINTER. MOV 2(R1),R0 ;PUT STRING ADDRESS IN R0. MOV R0,R1 ;NOW SET NPRESENT. CMP -(R1),-(R1) MOV R1,NPRESENT MOV (SP)+,R1 ;UNSAVE R1 MOV -4(R0),CD.KEY ;REMEMBER THE KEY. MOV R0,CD.SRC ;REMEMBER THE STRING ADDRESS. EXITSUCCESS ;EXIT SUCCESS ; 10$: MOV (SP)+,R1 ;UNSAVE R1. EXITERROR ;EXIT WITH ERROR. ; .END