.
. PREPARE COMMAND PROCESS
.
.
. (C) Copyright 1972-1978 John Walker
.
. This software is in the public domain
.
AXR$
DEFUNCT$
FANG
.
PRBSZ EQU 40*28 PREAMBLE BUFFER SIZE
EPTSZ EQU 3000 ENTRY POINT TABLE SIZE
.
PURE CODE
.
PREPARE* LA,U A15 CLEAR BUFFER POINTERS
LA,U A11 FOR ALL BUFFERS
LX X9,CDBPC,X8 GET ELEMENT POINTER
LA A1,ELFDT,X9 GET FDT ADDRESS
LMJ A2,IOGET BUILD AN I/O FCT
LX,U X10,,A0 SAVE FCT ADDRESS IN X10
LMJ X6,GELT1 READ IN FILE TABLE INDEX, ELT TABLE
J PRBSP ERROR FROM BSP
LA,U A10 CLEAR ELEMENT SEQUENCE
LA A0,A14 GET FCT ADDRESS
SZ 21,A0 MARK NO ENTRY POINT TABLE
BGET EPTSZ ALLOCATE AN ENTRY POINT BUFFER
SA A0,A15 REMEMBER LOCATION
DSL A0,18 MOVE TO H1 OF A1
LXM,U A1,EPTSZ LOAD UP LENGTH
LA A0,A14 GET FCT POINTER
rpfept . READ IN ENTRY POINT TABLE
J PRBSP ERROR FROM BSP
BGET PRBSZ ALLOCATE A PREAMBLE I/O BUFFER
SA A0,A11 REMEMBER BUFFER LOCATION
SA,H2 A0,IOACW,X10 PUT BUFFER IN ACCESS WORD
LA,U A0,R$ LOAD READ FUNCTION
SA A0,IOFUNC,X10 STORE OUT FUNCTION
.
. SCAN ELEMENTS FOR SELECTED RELOCATABLES
.
PISCAN AA,U A10,1 INCREMENT SEQUENCE NUMBER
SA,H1 A10,IOBB+2,X10 PUT SEQUENCE IN ADD PACKET
SZ IOBB+3,X10 CLEAR LAST WORD
LA A1,A10 LOAD ELEMENT SEQUENCE
LA A0,A14 LOAD FTI POINTER
etnl . LOOKUP ELEMENT
J PITE ERROR. PROBABLY END OF ELEMENT TABLE
TP EIFLG,A0 DELETED ELEMENT ?
J PISCAN YES. DELETED ELEMENTS NEED NOT APPLY
LA A1,EITYP,A0 LOAD ELEMENT TYPE
LX,U X5,,X9 LOAD ELEMENT CLASS ADDRESS
LX,U X6,,A0 SAVE FIND ITEM ADDRESS
TNE,U A1,TY$REL IS IT RELOCATABLE ?
LMJ X11,SELECT YES. IT IS SELECTED ?
J PISCAN NO. GET ANOTHER ELEMENT
.
. SET UP PREAMBLE OF THIS ELEMENT
.
LA A9,EIPREL,X6 LOAD PREAMBLE LENGTH
JZ A9,PISCAN PUNT IF NO PREAMBLE
DSL A6,72 CLEAR FIRST ADDRESS, LAST ADDRESS + 1
LA A0,EIPREA,X6 LOAD PREAMBLE FILE ADDRESS
SA A0,IODRAD,X10 STORE INTO I/O PACKET
LMJ X11,PIREAD READ IN PREAMBLE (OR PART)
LX,H2 X2,IOACW,X10 GET BUFFER POINTER
LR,H2 R4,2,X2 GET NUMBER OF ENTRIES IN E.P. TABLE
LX,H1 X2,2,X2 LOAD RELATIVE OFFSET OF FIRST
LXI,U X2,1 PUT INCREMENT IN X2
J PIPROE PROCESS ENTRIES
.
. ENTER AN ENTRY POINT IN THE TABLE
.
PIPROS LMJ X7,PILOAD LOAD AN ENTRY POINT
SA A0,IOBB,X10 STORE IT OUT
LMJ X7,PILOAD LOAD ANOTHER ENTRY
SA A0,IOBB+1,X10 STORE LAST WORD OF NAME
LA,U A1,IOBB,X10 LOAD ADD PACKET ADDRESS
LA A0,A14 GET TABLE ADDRESS
eptia . ADD ITEM TO ENTRY POINT TABLE
J PRBSP ERROR FROM BSP
AX,U X2,2 POINT TO NEXT ENTRY
PIPROE JGD R4,PIPROS LOOP FOR ALL ENTRIES
J PISCAN PROCESS NEXT ELEMENT
.
. END PROCESSING: REWRITE TABLES
.
PITE TE,U A0,014 END OF TABLE STATUS ?
J PRBSP NO. SOME OTHER BSP ERROR
LA A0,A14 LOAD FTI ADDRESS
SZ,H1 9,A0 MARK NO ELEMENT TABLE IN CORE...
SZ,H2 10,A0 ...EVEN THOUGH THERE REALLY IS ONE...
SZ,H2 11,A0 ...SO WE DON'T HAVE TO WRITE IT OUT
wpfept . WRITE UPDATED ENTRY POINT TABLE
J PRBSP BSP ERROR
LA A0,A14 RELOAD FTI ADDRESS
wfti . REWRITE FILE TABLE INDEX
J PRBSP BSP ERROR AT 11'TH HOUR
.
. COMPLETION. RELEASE BUFFERS AND BE OFF
.
praway brelp x10 release the I/O FCT
JZ A15,PA1 CHECK A15 BUFFER ALLOCATION
BRELP A15 ALLOCATED. RELEASE IT
PA1 JZ A11,PA2 A11 BUFFER ALLOCATED ?
BRELP A11 YES. RELEASE IT ALSO
PA2 LMJ A1,EBUFRL RELEASE REST OF BUFFERS
COMPLETE . COMPLETE THIS COMMAND
.
. ERROR ROUTINES
.
PIOER LMJ X11,IOSEDT EDIT I/O STATUS
ZAP . ERROR THE COMMAND
J PRAWAY RELEASE BUFFERS
.
prbsp la a2,a14 load BSP FCT addres
LMJ X11,BSPERP EDIT BSP ERROR MESSAGE
ZAP . ERROR THE COMMAND
J PRAWAY END THE COMMAND
.
. I/O PAGING ROUTINES
.
PILOAD LA,U A0,,X2 GET ADDRESS WE ARE TO LOAD
TG A0,A7 WITHIN BUFFER ?
LMJ X11,PIREAD NO. READ MORE PREAMBLE
LA,U A0,,*X2 GET RELATIVE WORD INDEX
ANA A0,A6 MAKE RELATIVE TO BUFFER START
AA,H2 A0,IOACW,X10 ADD START ADDRESS IN CORE
LA A0,,A0 LOAD THE REQUESTED WORD
J 0,X7 RETURN
.
.
PIREAD LA,U A0,PRBSZ/28 LOAD BLOCK SIZE
TG A0,A9 IS PREAMBLE ACTUALLY SHORTER ?
LA A0,A9 YES. READ IN ONLY REQUIRED LENGTH
ANA,U A9,,A0 SUBTRACT LENGTH BEING READ IN
MSI,U A0,28 CHANGE LENGTH TO WORDS
LA A6,A7 'THE LAST WILL COME FIRST'...
AA A7,A0 ...'AND THE FIRST WILL COME LAST'
SA,H1 A0,IOACW,X10 SET LENGTH IN ACCESS WORD
IOW$ IOPKT,X10 READ IN THE PREAMBLE
TZ IOSTATUS,X10 NORMAL COMPLETION ?
J PIOER OOPS!! ERROR READING PREAMBLE
LA A0,IODRAD,X10 LOAD DRUM ADDRESS
AA,U A0,PRBSZ/28 ADD LENGTH IN CASE WE NEED IT AGAIN
SA A0,IODRAD,X10 STORE NEW ADDRESS
J 0,X11 RETURN
.
END