. . UNDELETE COMMAND PROCESS . . . (C) Copyright 1972-1978 John Walker . . This software is in the public domain . AXR$ DEFUNCT$ FANG . PURE CODE . UNDELETE* R$DIT . ENTER EDITING MODE LMJ X6,GELT SET UP BSP FROM ELEMENT PARAMETER J BSPERR BSP ERROR OPENING FILE LX X9,CDBPC,X8 GET FIRST PARAMETER ADDRESS LX X9,PBLINK,X9 LINK TO SECOND (FILE) LX X9,PBLINK,X9 LINK TO OPTIONAL NUMBER PARAMETER TNZ X9 IS SEQUENCE NUMBER SPECIFIED ? J UNDSCAN NO. SCAN FOR LAST DELETED SELECTION . LA A1,PBVAL,X9 LOAD SEQUENCE NUMBER SUPPLIED SA A1,A9 SAVE SEQUENCE NUMBER LA A0,A14 GET FILE TABLE INDEX ADDRESS etnl . LOOK UP ELEMENT IN TOC J NONSUCH NO SUCH ELEMENT AS USER REQUESTED LX,U X9,,A0 SAVE ELEMENT ITEM ADDRESS TN EIFLG,A0 IS ELEMENT DELETED ? J NOTDEL NO. GIVE ERROR MESSAGE . DOUND BGET EIL ALLOCATE A BUFFER FOR ELEMENT ITEM LR,U R1,EIL LOAD LENGTH OF ELEMENT ITEM LX,U X10,,A0 SAVE ADDRESS OF FIND ITEM COPY BUFFER LXI,U A0,1 LOAD INCREMENT TO COPY BUFFER LXI,U X9,1 GET INCREMENT ON FIND ITEM BT A0,,*X9 COPY FOUND ITEM TO COPY BUFFER LA A0,A14 LOAD FTI ADDRESS LA A1,X10 GET DELETE PACKET ADDRESS SZ EIFLG,X10 CLEAR FLAGS IN DELETE ITEM PACKET etid . DELETE ANY EXISTING ELEMENT NOP 0 ...IGNORING ERRORS IN THE PROCESS BRELP X10 RELEASE ELEMENT DELETE PACKET LA A1,A9 LOAD SEQUENCE NUMBER OF ITEM LA A0,A14 LOAD FTI ADDRESS etnl . GET BACK ORIGINAL DELETED ELEMENT J BSPERR BSP ERROR. LX,U X9,,A0 RESTORE ADDRESS OF ELEMENT FIND ITEM LA A0,EIFLG,X9 LOAD FLAG BITS FOR ELEMENT AND,U A0,03777 REMOVE DELETION FLAG SA A1,EIFLG,X9 RESTORE FLAG BITS LA A0,A14 LOAD FTI ADDRESS ptewt . REWRITE UNDELETED ELEMENT TABLE ENTRY J BSPERR BSP ERROR. GIVE MESSAGE AND TERMINATE LA A0,A14 RELOAD FTI ADDRESS wpfet . REWRITE ELEMENT TABLE TO FILE J BSPERR BSP ERROR. PRINT MESSAGE LA A0,A14 LOAD FTI ADDRESS wfti . REWRITE FTI TO FILE J BSPERR BSP ERROR. ERROR OFF TOP,U A8,OPTION('T') LIST OPERATION ? J UNDFIN NO. THEN THIS IS THE END LMJ X6,EDENA EDIT ELEMENT NAME E$MSG UNDLM EDIT UNDELETE MESSAGE E$DECV A9 EDIT SEQUENCE NUMBER E$MSGR . COPY REST OF MESSAGE FISPND LA A0,CDBPC,X8 GET PARAMETER CHAIN HEAD LA A0,ELFDT,A0 GET FDT ADDRESS LMJ X11,FIST APPEND FILE AND STATEMENT J UNDFN1 FINISH UP . UNDFIN R$DITX . TERMINATE THE EDITOR UNDFN1 LMJ A1,EBUFRL RELEASE BUFFERS COMPLETE . RETURN TO COMPLETE PROCESS . . SCAN FOR LAST DELETED ELEMENT SELECTED BY COMMAND . UNDSCAN LA,U A10 CLEAR SEQUENCE COUNTER LA,U A9 CLEAR SEQUENCE FIND SAVE UNDSCL AA,U A10,1 INCREMENT SEQUENCE COUNTER LA A1,A10 LOAD SEQUENCE LA A0,A14 LOAD FTI ADDRESS etnl . RETRIEVE ELEMENT ENTRY J UNDFE END OF TABLE. LOOK FOR SELECTION TN EIFLG,A0 IS ELEMENT DELETED ? J UNDSCL NO. DON'T CONSIDER IT LX,U X6,,A0 SAVE ELEMENT ENTRY ADDRESS LX X5,A12 LOAD SELECTION CRITERIA LMJ X11,SELECT SEE IF ELEMENT IS CHOSEN J UNDSCL NOT SELECTED. TRY NEXT ONE SA A10,A9 SAVE SEQUENCE NUMBER OF SELECTED ELEMENT J UNDSCL KEEP ON LOOKING . UNDFE TE,U A0,014 IS IT END OF TABLE STATUS ? J BSPERR NO. MORE SERIOUS BSP ERROR TNZ A9 WAS ANY ELEMENT SELECTED ? J NOELS YES. DO UNDELETION LA A0,A14 LOAD FTI ADDRESS LA A1,A9 LOAD SEQUENCE NUMBER OF ELEMENT etnl . GET SELECTED ELEMENT ITEM BACK J BSPERR AIN'T NO WAY WE CAN GET HERE LX,U X9,,A0 SAVE ELEMENT ITEM POINTER J DOUND GO AND UNDELETE IT . NOELS E$MSG UNDLR1 EDIT NO ELEMENT SELECTED MESSAGE J FISPND APPEND FILE AND STATEMENT . NOTDEL LMJ X6,EDENA EDIT ELEMENT NAME E$MSG UNDLR2 APPEND MESSAGE TEXT J JOINN EDIT SEQUENCE, FILE, STATEMENT . NONSUCH E$MSG UNDLR3 EDIT 'NO SUCH ELEMENT' MESSAGE JOINN E$DECV A9 EDIT SEQUENCE NUMBER E$MSGR . COPY REST OF MESSAGE J FISPND APPEND FILE AND STATEMENT . PURE DATA . UNDLM ' (ELEMENT !) UNDELETED FROM !' UNDLR1 'NO ELEMENT SELECTED FOR UNDELETION FROM !' UNDLR2 ' (ELEMENT !) IS NOT DELETED IN !' UNDLR3 'THERE IS NO ELEMENT ! IN !' END