.
. RENAME COMMAND PROCESS
.
.
. (C) Copyright 1972-1978 John Walker
.
. This software is in the public domain
.
AXR$
DEFUNCT$
FANG
.
OTL EQU R11 ORIGINAL ELEMENT TABLE LENGTH
OSEQ EQU R12 ORIGINAL MAX SEQUENCE NUMBER
ELTB4 EQU R13 SEQUENCE NUMBER OF PREVIOUS ELEMENT
PROMOTE EQU R14 SEQUENCE NUMBER OF NEXT ELEMENT
.
RENAMP* LX X9,CDBPC,X8 LOAD LINK TO FIRST PARAMETER
LNA,U A7 ACCEPT ONLY NONDELETED, USE FULL ET LENG
LMJ X11,FILESCAN PREPARE TABLE OF CONTENTS LIST
J BSPER BSP ERROR. TERMINATE
JZ A8,RENAMT GIVE MESSAGE IF NO ELEMENTS SELECTED
LX X9,PBLINK,X9 LINK TO FILE FOR FIRST PARAMETER
LX X9,PBLINK,X9 LINK TO SECOND ELEMENT PARAMETER
.
. THIS CODE TAKES A SELECTED ITEM FROM THE FILESCAN QUEUE, LOOKS IT
. UP BY NAME IN THE ELEMENT TABLE, THEN REHOOKS THE LINKS IN THE
. ELEMENT TABLE SO THAT THE ELEMENT UNDER ITS OLD NAME IS REMOVED.
. THEN, THE ELEMENT TABLE NEXT SEQUENCE NUMBER AND LENGTH ARE
. FUDGED SO THAT THE ELEMENT WILL BE INSERTED AT ITS OLD SPOT, AND
. THE REGULAR INSERT ROUTINE WILL BE CALLED TO REATTACH IT AT THE
. PROPER PLACE IN THE ELEMENT TABLE.
.
RNMNEXT REMOVE CDELTQ,X8 REMOVE NEXT ELEMENT FROM FILESCAN QUEUE
TNE,U A1,CDELTQ,X8 END OF ELEMENT LIST ?
J RENDONE YES. DONE PROCESSING
ANA,U A1,EIFQ BACK UP TO BUFFER START
LX,U X6,,A1 LOAD POINTER REGISTER FOR THE DURATION
LA A10,EISEQ,X6 LOAD SEQUENCE NUMBER OF THIS ELEMENT
LA A0,A14 LOAD FTI ADDRESS
LX,H2 X1,FTIET+1,A0 LOAD POINTER TO ELEMENT TABLE START
LR,H2 OSEQ,139,X1 LOAD ORIGINAL NEXT SEQUENCE NUMBER
LR,H1 OTL,FTIET+1,A0 LOAD ORIGINAL TABLE LENGTH
SZ EIPLNK,A1 CLEAR POINTER LINK
SZ EITLNK,A1 CLEAR TYPE LINK
SZ EIVLNK,A1 CLEAR VERSION LINK
etis . LOOK UP BY NAME, RECORDING FIND PATH
J BSPER BSP ERROR.
SA A2,ELTB4 SAVE SEQUENCE NUMBER OF PREVIOUS ELT
LXI,U A0,1 LOAD INCREMENT ON FIND POINTER
LA A1,X6 LOAD POINTER TO OUR FIND BUFFER
LXI,U A1,1 LOAD INCREMENT FOR IT
LR,U R1,EIL LOAD ITEM LENGTH
BT A1,,*A0 COPY ELEMENT TO FIND BUFFER
LA A1,EIVLNK,X6 LOAD VERSION LINK OF FOUND ELEMENT
JZ A1,RHNVL SKIP IF NEXT ELT NOT CHAINED TO VER LNK
.
. THERE IS A CHAIN OFF THE VERSION LINK. PROMOTE THE NEXT IN THE
. VERSION CHAIN TO REPLACE THE CURRENT ELEMENT.
.
SA A1,PROMOTE MARK NEXT ELEMENT AS ONE TO PROMOTE
LA A0,A14 RELOAD FTI ADDRESS
etnl . READ IN NEXT ELEMENT ITEM
J BSPER BSP ERROR. ALL IS WELL
LA A2,EIPLNK,X6 LOAD POINTER LINK OF ITEM TO BE RENAMED
SA A2,EIPLNK,A0 ATTACH POINTER CHAIN TO NEXT ITEM
LA A2,EITLNK,X6 LOAD TYPE CHAIN ON ELT TO BE RENAMED
SA A2,EITLNK,A0 ATTACH TYPE CHAIN TO VERSION LINK ELT
J RHWRT GO WRITE OUT THE PROMOTED ITEM
.
. NO VERSION LINK. CHECK IF CHAINED VIA TYPE LINK
.
RHNVL LA A1,EITLNK,X6 LOAD TYPE LINK FROM THIS ELEMENT
JZ A1,RHNTL SKIP IF NO TYPE CHAIN TO THIS ELEMENT
SA A1,PROMOTE SET THIS ELEMENT AS ONE TO PROMOTE
LA A0,A14 LOAD FTI ADDRESS
etnl . READ IN THE ELEMENT TABLE ITEM
J BSPER BSP ERROR. ALL OK
LA A2,EIPLNK,X6 LOAD POINTER LINK OFF RENAMED ITEM
SA A2,EIPLNK,A0 ATTACH POINTER CHAIN TO NEXT ITEM
RHWRT LA A0,A14 LOAD FTI ADDRESS
ptewt . CORRECT NEXT ITEM IN PROGRAM FILE
J BSPER BSP ERROR. ASSUME OK
J RHFIXL GO UPDATE PREVIOUS ELEMENT / POINTER
.
. NO TYPE LINK. SUCCEEDING CHAIN MUST BE OFF POINTER LINK
.
RHNTL LA A0,EIPLNK,X6 LOAD POINTER LINK OF RENAMED ELEMENT
SA A0,PROMOTE SET AS ELEMENT TO BE PROMOTED
.
. WHEN WE GET HERE, WE KNOW WHICH ELEMENT, IF ANY, NEEDS TO BE
. PROMOTED TO REPLACE THE ELEMENT TO BE RENAMED, AND WE HAVE CHANGED
. ITS LINKS TO POINT TO ANY CHAINS ATTACHED TO THE ELEMENT BEING
. REMOVED. NOW WE FIND THE ELEMENT OR POINTER LINK WHICH LED US
. TO THIS ELEMENT, AND REPLACE THE FORWARD LINK WHICH LED US HERE
. WITH A POINTER TO THE ELEMENT BEING PROMOTED.
.
RHFIXL TNZ ELTB4 ANY ELEMENT BEFORE THIS ONE ?
J RHFIXPT NO. MUST FIX POINTER TABLE LINK
LA A1,ELTB4 LOAD SEQUENCE NUMBER OF PREVIOUS ELEMENT
LXI,U A1 CLEAR PATH FROM PREVIOUS LINK
LA A0,A14 LOAD FTI ADDRESS
etnl . READ IN ELEMENT TABLE ENTRY FOR PREVIOUS
J BSPER BSP ERROR. FILE IS MESSED UP
LA A2,ELTB4 LOAD STATUS RETURNED BY ETIS
SSL A2,18 SHIFT DOWN REASON FOR FIND
EX RHLINK,A2 ATTACH PROMOTED ELEMENT TO LINK OF PREV
LA A0,A14 LOAD FTI ADDRESS
ptewt . REWRITE PREVIOUS ELEMENT TABLE ENTRY
J BSPER BSP ERROR. FILE MESSED UP
J RHPTOK DONE. GO CHANGE ELEMENT NAME
.
. THIS ELEMENT WAS CHAINED RIGHT OFF THE POINTER TABLE.
. WE WILL SEARCH THE POINTER TABLE (H1 THEN H2) FOR AN ENTRY WITH
. THE SEQUENCE NUMBER OF THE ELEMENT WE ARE RENAMING. WHEN
. WE FIND IT, WE REPLACE THAT POINTER TABLE ENTRY WITH THE
. SEQUENCE NUMBER OF THE ELEMENT WE HAVE PROMOTED. (THIS MAY BE ZERO).
.
RHFIXPT LA A1,PROMOTE LOAD SEQUENCE NUMBER OF PROMOTED ELT
LR,U R1,139 LOAD POINTER TABLE LENGTH
LXI,U X11,1 LOAD INCREMENT FOR SEARCH
LXM,U X11,,X1 GET POINTER TO POINTER TABLE START
SE,H1 A10,,*X11 LOOK FOR POINTER IN H1 OF TABLE
J RHTRYH2 NOT FOUND. LOOK IN H2 POINTERS
ANX,U X11,1 BACK UP POINTER TO FIND ADDRESS
SA,H1 A1,,X11 UPDATE POINTER TABLE TO PROMOTED ELT
J RHPTOK ALL LINKS OK. CHANGE ELEMENT NAME
.
RHTRYH2 LR,U R1,139 RELOAD POINTER TABLE LENGTH
LXM,U X11,,X1 POINT BACK TO TABLE START
SE,H2 A10,,*X11 LOOK FOR POINTER TO ELT IN H2
IERR . OOPS! ELEMENT NOT POINTED TO IN
. POINTER TABLE, BUT ETIS SAID THAT'S
. HOW THE ELEMENT WAS FOUND.
ANX,U X11,1 BACK UP TO FIND ADDRESS
SA,H2 A1,,X11 UPDATE POINTER TABLE TO PROMOTED ITEM
.
. ALL ELEMENT TABLE LINKS HAVE NOW BEEN UPDATED TO REMOVE THE
. ELEMENT TO BE RENAMED FROM THE ELEMENT TABLE. WE WILL NOW CHANGE
. THE ELEMENT NAME, APPLYING THE STANDARD FANG RENAMING RULES, AND
. REATTACH THE ELEMENT TO THE ELEMENT TABLE. BEFORE WE REATTACH
. IT HOWEVER, WE FUDGE THE LENGTH AND NEXT ITEM POINTERS OF THE
. ELEMENT TABLE SO THAT ETIA WILL ENTER THE ELEMENT WITH THE SAME
. SEQUENCE NUMBER IT HAD ORIGINALLY. THIS IS ESSENTIAL, BECAUSE
. OTHERWISE A PACK WOULD MASH THE FILE, AS IT ASSUMES THAT ELEMENT
. TABLE ENTRIES AND TEXT OCCUR IN THE SAME ORDER.
.
rhptok la a0,x6 load element find item address
la a1,x9 load the rename specification
lmj x11,rename apply the transformation to name
bgetl eil allocate a copy of the element item
sa a0,a6 save its address for later reference
aa a0,(1,0) get increment to copy element item
la a1,(1,0) get increment bit
aa,u a1,,x6 get pointer to input element item
lr,u r1,eil load length to copy
bt a0,,*a1 copy the item to our new buffer
la a0,a14 load the BSP FCT address
la a1,a6 load out element item copy
etis . look for an element with same name
j rhptnd none. no duplicate in file
la a0,a14 duplicate. reload FCT address
la a1,a6 get the found item
etid . delete the element from the file
j bsper no bsp error should occur
rhptnd brelr a6 release the copy element item
LA A1,A10 LOAD SEQUENCE NUMBER OF RENAMED ELEMENT
ANA,U A1,1 BACK UP BY ONE
SA,H2 A1,139,X1 SET ELEMENT TABLE READY TO ADD THIS ONE
MSI,U A1,EIL COMPUTE NEXT ADDRESS FOR INSERT IN TBL
AA,U A1,140 ADD POINTER TABLE LENGTH
LA A0,A14 LOAD FTI ADDRESS
SA,H1 A1,FTIET+1,A0 SET ELEMENT TABLE LENGTH SO AS TO
. REINSERT ELEMENT AT SAME PLACE.
SZ EIPLNK,X6 SET POINTER LINK ZERO
SZ EIVLNK,X6 SET VERSION LINK ZERO
SZ EITLNK,X6 CLEAR TYPE LINK TO ZERO
LA A0,A14 LOAD FTI ADDRESS
LA A1,X6 LOAD FIND ITEM ADDRESS
etia . ADD ITEM TO ELEMENT TABLE
J BSPER BSP ERROR. GET OUT
BRELR X6 RELEASE ELEMENT FIND ITEM
LA A0,A14 GET FTI ADDRESS BACK
SR,H2 OSEQ,139,X1 RESTORE MAX SEQUENCE NUMBER
SR,H1 OTL,FTIET+1,A0 REPLACE ELEMENT TABLE LENGTH IN FTI
J RNMNEXT GO RENAME THE NEXT ELEMENT
.
. CLOSEOUT PROCESSING. WRITE TABLES BACK AND TERMINATE.
.
RENDONE LA A0,A14 LOAD FTI ADDRESS
wpfet . REWRITE ELEMENT TABLE
J BSPER BSP ERROR.
LA A0,A14 LOAD FTI ADDRESS
wfti . REWRITE FILE TABLE INDEX
J BSPER BSP ERROR.
BRELA . RELEASE ALL BUFFERS ALLOCATED ON THE WAY
COMPLETE . COMPLETE THE COMMAND
.
RENAMT BRELA . RELEASE ALL ALLOCATED BUFFERS
R$DIT . ENTER EDITING MODE
E$MSG RENAMM EDIT NONE SELECTED MESSAGE
LA A0,ELFDT,X9 LOAD FDT FOR INPUT FILE
LMJ X11,FIST APPEND FILE AND STATEMENT
COMPLETE . TERMINATE THE COMMAND
.
. BSP ERROR PROCESSING.
.
bsper la a2,a14 load BSP FCT address
LMJ X11,BSPERP PRINT BSP ERROR MESSAGE
ZAP . ERROR THE COMMAND
BRELA . RELEASE ALL BUFFERS
COMPLETE . COMPLETE THE COMMAND
.
. THIS TABLE IS EXECUTED TO ATTACH THE NEXT (PROMOTED) ELEMENT TO
. THE APPROPRIATE LINK OF THE PREVIOUS ELEMENT. WHICH LINK TO ATTACH
. THE ELEMENT TO IS RETURNED BY BSP AS THE PATH USED TO FIND THIS
. ELEMENT. THIS CODE (WHICH IS INCORRECTLY DOCUMENTED IN UP4144,
. REV3) TELLS WHICH LINK WAS USED TO ARRIVE AT THE FOUND ELEMENT.
.
RHLINK EQU $-1 0 IS DIRECT VIA POINTER TABLE
SR PROMOTE,EIPLNK,A0 1 IS POINTER LINK FROM ELEMENT
SR PROMOTE,EITLNK,A0 2 IS TYPE LINK FROM ELEMENT
SR PROMOTE,EIVLNK,A0 3 IS VERSION LINK FROM ELEMENT
.
PURE DATA
.
RENAMM 'NO ELEMENTS SELECTED FOR RENAMING FROM !'
END