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