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