.TITLE MT06.. TABLE MANIPULATION ROUTINES. .IDENT /MT06../ ; ; AUTHOR :- J.S.CLIFTON ; DATE :- 21ST OCTOBER 81 ; ; T$DELETE:: ; ENTRY CONDITIONS ; R1 = MARKER WORD (STRING SORT KEY). ; ; EXIT CONDITIONS ; STATUS - SUCCESS OR ERROR ; CALL T$SEEK ;LOCATE THE NODE IFERROR RETURN ;IF ERROR THEN RETURN. T$2DEL:: TST -2(R0) ;IS NODE PROTECTED. BLE 10$ ;JUMP IF YES. BIS #100000,-4(R0) ;MARK NODE FOR DELETION ADD -2(R0),NLOST ;REMEMBER LOST NODES. ADD #6,NLOST CALL T$DKEY ;NOW DELETE THE SORT KEY. IFERROR RETURN EXITSUCCESS ; 10$: EXITERROR ; ; ; .PAGE ; T$DKEY:: ; ENTRY CONDITIONS ; NON (DELETED ITEM KNOWN IN TPRESENT FROM PREVIOUS CALL.) ; ; EXIT CONDITIONS ; STATUS - SUCCESS OR ERROR ; SAVE R1,R2,R3 ;SAVE THE REGISTERS. ; MOV TLAST,R1 ;HOW MANY WORDS TO SHIFT IN STRING. SUB TPRESENT,R1 ASR R1 ;DIVIDE BY 2 FOR WORD COUNT. MOV TPRESENT,R2 ;GET THE DELETION STRING ADDRESS. TST R1 ;IF ITS THE LAST ENTRY BLE 20$ ;THEN RESET POINTERS. ; MOV R2,R3 CMP (R3)+,(R3)+ ;INCREMENT R3 BY 4. 10$: MOV (R3)+,(R2)+ ;LOOP TO SHIFT THE WORDS IN STRING. SOB R1,10$ ; BR 30$ 20$: MOV TFIRST,TPRESENT ;LAST ITEM DELETED SO RESET TPRESENT. ; 30$: MOV TLAST,R1 ;NOW CLEAR THE LAST 2 WORDS. CLR (R1)+ CLR (R1)+ ; SUB #4,TLAST ;DECREMENT THE LAST ENTRY MARKER. MOV TADDRESS,R3 ;NOW DECREMENT THE LENGTH. SUB #4,(R3) ; CMP TFIRST,TLAST ;HAS LAST ENTRY BEEN DELETED. BLOS 40$ ;BRANCH IF IT HASN'T. ; CLR TPRESENT MOV TADDRESS,R3 BR 50$ ; 40$: MOV TPRESENT,R3 ;GET THE PRESENT ADDRESS. MOV 2(R3),R3 ; 50$: CMP -(R3),-(R3) MOV R3,NPRESENT ; UNSAVE R1,R2,R3 ;UNSAVE THE REGISTERS. EXITSUCCESS ; .END