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