.TITLE MT03.A NODE MANIPULATION ROUTINES .IDENT /MT03.A/ ; ; A - T$CLOSE ROUTINE ADDED. ; ; T$INIT:: ;SET UP TABLE INTERNAL DATA AREAS ; ; ENTRY CONDITIONS ; R0 -> ADDRESS OF TABLE ; ; EXIT CONDITIONS ; SUCCESS OR ERROR FLAG ONLY ; CALL R$ADDRESS ;VALIDATE ADDRESS IFERROR 40$ ;J IF ADDRESS INVALID CMP NBLKADD,R0 ;IS THIS LABEL ALREADY INITIALISED. BEQ 35$ ;EXIT IF IT IS. - SUCCESSFULLY. SAVE R1,R2,R3 TST NBLKADD ;IS NODE BLOCK SET UP BEQ 20$ ;J IF NOT MOV #17.,R3 ;RESTORE NODE DATA TO PREVIOUS BLOCK MOV NBLKADD,R2 ;HOLD ADDRESS OF OUTPUT DATA AREA MOV #NBLKADD+2,R1 ;HOLD ADDRESS OF CONTROL AREA 10$: MOV (R1)+,(R2)+ ;COPY CONTROL DATA BACK TO NODE SOB R3,10$ ;LOOP SEVENTEEN TIMES 20$: MOV #17.,R3 ;COPY IN NEW NODE DATA BLOCK MOV R0,NBLKADD ;HOLD ADDRESS OF NEW NODE TABLE MOV #NBLKADD+2,R1 ;HOLD ADDRESS OF CONTROL AREA MOV R0,R2 ;HOLD ADDRESS OF NEW NODE TABLE 30$: MOV (R2)+,(R1)+ ;COPY NEW NODE DATA INTO CONTROL AREA SOB R3,30$ ;COPY ALL WORDS UNSAVE R1,R2,R3 TST TADDRESS ;TEST THE SORT STRING ADDRESS. BNE 35$ ;EXIT IF SET UP CALL T$SORT ;SET UP SORT STRING. IFERROR RETURN 35$: SETSUCCESS ;INDICATE JOB SUCCESFULL 40$: RETURN ;EXIT ; ; ; T$CLOSE:: ;CLEAR OUT THE TABLE. ; ; ENTRY CONDITIONS ; ; TABLE INITIALISED. ; ; EXIT CONDITIONS ; ; ALL ENTRIES DELETED FROM TABLE - CLOSED. ; CALL R$SAVE ;SAVE THE REGISTERS. ; MOV NFREEB,R5 ;SET R5 TO TOTAL NUMBER OF FREE BYTES. ADD NUSEDB,R5 ADD NLOST,R5 ; MOV NBLKADD,R4 ;SET R4 TO FIRST NODE ADDRESS ADD #34.,R4 ; MOV R4,NFIRST ;INITIALISE THE TABLE POINTERS. MOV R4,NPRESENT CLR NNEXT MOV R4,NLASTADD MOV R5,NFREEB CLR NUSEDB CLR NLOST CLR NNODE CLR TFIRST CLR TLAST CLR TPRESENT CLR TADDRESS ; CLR (R4)+ CLR (R4)+ CLR (R4) ; CALL R$UNSAVE CALL T$SORT ;RECREATE THE SORT STRING. ; RETURN ; .END ; ; ;