.
. 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