. . TRANSFER COMMAND PROCESS . . ELEMENT TRANSFER OPERATIONS: . . FILE => FILE . FILE => TAPE . TAPE => FILE . TAPE => TAPE . . SDF TRANSFER OPERATIONS ARE INITIALLY SET UP HERE, THEN . COMPLETED IN THE ELEMENT TRANSFERSDF. . . . (C) Copyright 1972-1978 John Walker . . This software is in the public domain . AXR$ DEFUNCT$ FANG PROCROUTINES . SK EQU R9 FLAG: SKIP THIS ELEMENT E1 EQU R10 ELEMENT CLASS 1 E2 EQU R11 ELEMENT CLASS 2 F1 EQU R12 FDT,FCT FOR FIRST FILE F2 EQU R13 FDT,FCT FOR SECOND FILE CT EQU R14 USER-SUPPLIED COUNT CE EQU R14 CURRENT ELEMENT ITEM (OVERLAYS CT) . BLURB EQU 8 NUMBER OF SDF BLOCKS IN FILE BUFFER FFBL EQU 224 BLOCK LENGTH FOR FILE TO FILE . COPLEN EQU 224*BLURB LENGTH OF FILE BUFFER . PURE CODE . TRANSFER* LX X9,CDBPC,X8 LOAD FIRST PARAMETER ADDRESS SX X9,E1 SAVE FIRST ELEMENT ADDRESS LX X9,PBLINK,X9 LINK TO FILE FOR FIRST PARAMETER LMJ X5,FILBLD BUILD I/O FCT FOR FILE SA A10,F1 SAVE FCT AND FDT ADDRESSES LX X9,PBLINK,X9 LINK TO SECOND ELEMENT SX X9,E2 SAVE SECOND ELEMENT ADDRESS LX X9,PBLINK,X9 LINK TO SECOND FILE LMJ X5,FILBLD BUILD I/O FCT FOR SECOND FILE SA A10,F2 SAVE FDT AND FCT ADDRESSES LA A0,F1 LOAD FIRST FILE FCT TZ IOWAD,A0 WORD ADDRESSABLE INPUT ? J TRWADX LA A0,F2 GET FCT FOR SECOND FILE TZ IOWAD,A0 WORD ADDRESSABLE OUTPUT FILE ? J TRWADX YES. PRINT ERROR MESSAGE LX X9,PBLINK,X9 LINK TO COUNT PARAMETER LR,U CT,0377777 LOAD ASSUMED INFINITY COUNT TZ X9 IS COUNT OMITTED ? LR CT,PBVAL,X9 NO. LOAD USER'S COUNT LA A15,CDOPTS,X8 LOAD OPTIONS ON COMMAND TOP,U A15,OPTION('T') PRINT FLYING TOC HEADER ? J TRNOHP NO. SKIP THIS R$DIT . ENTER EDITING MODE E$CHAR '[' EDIT A LEFT BRACKET LX X5,CDIMG,X8 LOAD IMAGE BUFFER ADDRESS LMJ X6,ESNV EDIT STATEMENT NUMBER E$SKIP -1 BACK UP OVER PERIOD E$CHAR ']' EDIT CLOSING BRACKET E$SKIP 2 SKIP TWO SPACES LX X5,F1 GET FIRST FILE FCT LX X5,IOFDT,X5 FIND FDT LMJ X6,EFILE EDIT FILE NAME E$FD3 (' => ') EDIT THE ARROW LX X5,F2 GET THE SECOND FCT LX X5,IOFDT,X5 POINT TO SECOND FDT LMJ X6,EFILE EDIT OUTPUT FILE NAME R$PRTX 1 PRINT THE LINE TRNOHP TEP A15,(OPTION('F')) SDF COPY ? J TRANSFERSDF ENTER SDF TRANSFER PROCESSING ROUTINE . . ELEMENT FILE / PROGRAM FILE TRANSFER SETUP . LX X10,F1 GET FIRST FILE FCT ADDRESS TZ IOMASS,X10 IS FIRST FILE MASS STORAGE ? J FILSORC YES. SET UP BSP FOR ELT TABLE SCAN . . INPUT IS TAPE. FIRE UP TAPE INPUT . LA,U A0,'E' GET COUNTING ELEMENTS MODE SA A0,IOOPT,X10 SET MODE FOR INPUT FCT LA,U A0,224 GET SDF BLOCK LENGTH SA A0,IOBLEN,X10 SET TO READ 224 WORD BLOCKS SR CT,IOCOUNT,X10 TELL HOW MANY ELEMENTS TO READ LMJ A2,INPUT CREATE A READER LX X9,F2 GET FCT ADDRESS FOR SECOND FILE TZ IOMASS,X9 IS SECOND MASS STORAGE ? J TFXFR NO. TAPE TO FILE TRANSFER J TTXFR YES. TAPE TO TAPE TRANSFER . . FILBLD LA A10,PBVAL,X9 GET FDT ADDRESS LA A1,A10 LOAD FDT ADDRESS FOR IOGET LSSL A10,18 MOVE FDT ADDRESS TO H1 LMJ A2,IOGET SET UP I/O FCT FOR FILE AA,U A10,,A0 SAVE FCT ADDRESS J 0,X5 RETURN . . TRWADX LA A0,IOFDT,A0 GET FDT ADDRESS SA A0,CE SAVE FROM THE RAVAGES OF RDIT$ R$DIT . SET UP EDITOR E$MSG WADTRN EDIT WAD ERROR MESSAGE LA A0,CE LOAD FDT ADDRESS LMJ X11,FIST APPEND FILE AND STATEMENT BRELP F1 RELEASE FCT FOR INPUT BRELP F2 RELEASE OUTPUT FCT ZAP . ERROR THE COMMAND COMPLETE . COMPLETE THIS COMMAND /. . . CONTROL FOR FILE SOURCE OPERATIONS . FILSORC . LX X9,F2 GET POINTER FOR SECOND FILE LA,U A0,'M' LOAD COPY MARKS OPTION TZ IOMASS,X9 OUTPUT MASS STORAGE ? LA,U A0,'D' YES. COPY ADDRESSES SA A0,IOOPT,X9 SET UP OUTPUT I/O MODES LMJ A2,IOGNF ALLOCATE AN I/O FCT TO DRIVE OUTPUT LX,U X10,,A0 SAVE ADDRESS OF OUTPUT SOURCE LMJ A2,OUTPUT CREATE A WRITER LA A1,F1 LOAD FIRST FILE'S FCT ADDRESS LMJ X11,IZOPN OPEN THE FILE FOR IOZOOM LX X7,F1 LOAD FIRST FDT, FCT LXM,U X7,,A2 REPLACE THE FCT SX X7,F1 UPDATE F1 LX X9,E1 GET FIRST ELEMENT ENTRY LA,U A11 CLEAR THE MAPPING LIST HEAD LA,U A7 DON'T ACCEPT ANY DELETED ELEMENTS LMJ X11,FILESCAN PREPARE LIST OF ELEMENTS TO BE MOVED J bsperi BSP ERROR. LMJ X11,ELTREL RELEASE INPUT ELEMENT TABLE SA A8,A10 SAVE SELECT COUNT LA A8,CDOPTS,X8 LOAD COMMAND OPTIONS TEP A8,(OPTION('A')) ALPHABETIC TRANSFER DESIRED ? LMJ X11,FILESORT YES. SORT SELECT BUFFERS LX X9,F2 RESTORE X9 TO OUTPUT FCT TNZ IOMASS,X9 IS OUTPUT FILE MASS STORAGE ? J FLNE NO. SETUP COMPLETE FOR TAPE SZ SK CLEAR PROCS COPIED FLAGS BGETL FTIL ALLOCATE A FILE TABLE INDEX LA,U A12,,A0 SAVE OUTPUT FTI IN A12 DL A1,IOFN,X9 LOAD INTERNAL FILE NAME FOR FILE DS A1,FTIFN,A0 PUT INTERNAL NAME IN FTI rfti . READ OUTPUT FILE FTI J bspero BSP ERROR. LA A0,A12 LOAD OUTPUT FTI ADDRESS LA,U A0,FTIET,A0 LOAD ELEMENT TABLE INDEX START LMJ X11,PFTLEN COMPUTE TABLE SIZE MSI,U A10,EIL COMPUTE SPACE NEEDED FOR SELECTED ELTS AA A0,A10 COMPUTE TABLE SIZE TO AVOID PAGING TG,U A0,BUFELTT+1 TOO LARGE FOR CONFIGURED MAX ? LA,U A0,BUFELTT YES. USE USER'S SPECIFIED MAX SIZE SA A0,A10 SAVE BUFFER SIZE ALLOCATED BGETL . ALLOCATE OUTPUT ELEMENT TABLE BUFFER LA a1,e2 load output element specification LXI,U A1,,A0 SAVE IN H1 OF E2 SA a1,e2 so save it in E2 LXM A1,A10 LOAD LENGTH OF ELEMENT TABLE BUFFER LA A0,A12 GET FTI ADDRESS rpfet . READ IN ELEMENT TABLE J bspero BSP ERROR. LA A0,A12 GET FTI ADDRESS BACK LA A7,FTIWL,A0 LOAD WRITE ADDRESS LMJ X11,IOBOPN OPEN BUFFERED OUTPUT . RETURN HERE TO SELECT NEXT ELEMENT FOR PROCESSING . FLNE REMOVE CDELTQ,X8 REMOVE NEXT ELEMENT SELECT ITEM TNE,U A1,CDELTQ,X8 END OF SELECTED ELEMENT CHAIN ? J FILESDONE YES. END OF FILE SOURCE TRANSFER ANA,U A1,EIFQ BACK UP TO ELEMENT SELECT ITEM LX,U X6,,A1 LOAD POINTER TO SELECT ITEM SX X6,CE SAVE FOR OTHER PEOPLE LA A8,CDOPTS,X8 LOAD COMMAND OPTIONS TOP,U A8,OPTION('T') TOC ELEMENTS TRANSFERRED ? J FLNOT NO. DON'T EDIT TOC LX X9,CE LOAD CURRENT ELEMENT POINTER LA,U A10 CLEAR SEQUENCE TO INDICATE TRANSFER R$DIT . TURN ON THE EDITOR LMJ X5,TOCLE EDIT AND PRINT THE TOC LINE R$DITX . TERMINATE THE EDITOR FLNOT LA A0,CE LOAD CURRENT ELEMENT ITEM LA A10,EISEQ,A0 LOAD SEQUENCE NUMBER OF ELEMENT LA A1,E2 LOAD RENAME SPECIFICATION LMJ X11,RENAME RENAME ELEMENT IF SPECIFIED LX X9,F2 LOAD POINTER TO SECOND FILE TZ IOMASS,X9 IS OUTPUT MASS STORAGE ? J FFXFR YES. DO FILE-TO-FILE COPY J FTXFR NO. FILE TO TAPE TRANSFER . . CLOSE OUT PROCESSING FOR FILE SOURCE TRANSFER . FILESDONE LX X9,F2 GET SECOND FILE FCT TNZ IOMASS,X9 IS OUTPUT MASS STORAGE ? J FTNE2 NO. SKIP FILE OUTPUT CLOSEOUT LX,U X9,,X10 GET DRIVER FCT ADDRESS LMJ X11,IOBCLO CLOSE BUFFERED OUTPUT LA A0,A12 GET OUTPUT FTI ADDRESS wpfet . REWRITE ELEMENT TABLE J bspero BSP ERROR. LA A0,E2 LOAD BUFFER POINTER WORD SSL A0,18 SHIFT DOWN ELEMENT TABLE BUFFER BRELR A0 RELEASE ELEMENT TABLE BUFFER TNZ SK ANY PROCS COPIED ? J FFNOPRK NO. SKIP ENTRY UPDATING LA,U A7,TY$ASMP LOAD ASM PROC TYPE (LOWEST) . . THIS CODE COPIES THE PROC TABLE ENTRIES FOR THE . PROC ELEMENTS COPIED BY THIS FILE TO FILE TRANSFER. . IT LOOKS THROUGH THE PROC TYPES SPECIFIED AS COPIED . BY 'SK', AND IF IT FINDS THE SEQUENCE OF A PROC IN . THE MAPPING TABLE, IT UPDATES THE SEQUENCE AND ADDRESS . FROM THE MAPPING TABLE AND MAKES THE ENTRY IN THE . OUTPUT FILE. . FFZANG LA A0,SK LOAD PROC SELECTION BITS LX X1,A7 LOAD TYPE OF PROC THIS TIME THROUGH SSL A0,,X1 MOVE SELECTION BIT TO LOW-ORDER JNB A0,FFPRTYN ANY PROCS OF THIS TYPE COPIED ? LA A0,A7 LOAD CURRENT ELEMENT TYPE ANA,U A0,TY$ASMP UNBASE TYPE NUMBER MSI,U A0,3 COMPUTE OFFSET TO FILE INDEX TABLE AA,U A0,FTIAPT ADD START OF ASM PROC TABLE INDEX SA A0,X2 STORE TABLE OFFSET FOR LATER USE AA A0,A14 ADD OFFSET FOR INPUT FILE FTI LMJ X11,PFTLEN COMPUTE BUFFER SIZE FOR INPUT FILE TG,U A0,BUFPRCT+1 BIGGER THAN CONFIGURED MAX ? LA,U A0,BUFPRCT YES. FORCE SIZE TO MAXIMUM SA A0,A10 SAVE TABLE SIZE FOR LATER BGETL . ALLOCATE THE INPUT PROC TABLE SA A0,R4 SAVE ADDRESS DSL A0,18 PUT ADDRESS IN H1 OF A1 LXM A1,A10 LOAD BUFFER LENGTH IN A1 LA A0,A14 LOAD INPUT FTI ADDRESS pircall RPFxPT,x1 READ IN INPUT PROC TABLE J bsperi BSP ERROR. LA A0,A12 LOAD OUTPUT FTI ADDRESS AA,U A0,,X2 ADD OFFSET TO PROC TABLE BEING PROCESSED LMJ X11,PFTLEN COMPUTE TABLE SIZE FOR OUTPUT FILE ANA,U A0,140 SUBTRACT POINTER TABLE LENGTH AA A0,A10 ADD SIZE FOR INPUT FILE TG,U A0,BUFPRCT+1 LARGER THEN CONFIGURED MAX SIZE ? LA,U A0,BUFPRCT YES. FORCE SIZE TO MAXIMUM SA A0,A1 SAVE SIZE IN A1 BGETL . ALLOCATE THE OUTPUT PROC TABLE LXI,U A1,,A0 LOAD ADDRESS INTO A1 LXI A0,R4 GET R4 WITH BOTH ADDRESSES SA A0,R4 SAVE FOR RELEASE LA A0,A12 LOAD OUTPUT FTI ADDRESS pircall RPFxPT,x1 read output file PROC table J bspero BSP ERROR. LA,U A6 CLEAR SEQUENCE TO LEAF THROUGH TABLE . ffnpd LA A0,A14 LOAD INPUT FTI ADDRESS LA A1,A6 LOAD CURRENT SEQUENCE NUMBER pircall xPTNL,x1 get next PROC from input file J FFPRTEN PROBABLY END OF TABLE . . NOW SEE IF WE COPIED THE ELEMENT THIS BELONGS TO . LA A1,A11 GET MAPPING TABLE START ON DEBUG TNZ A1 MAPPING TABLE CREATED ? IERR . NO. CAN'T EVER HAPPEN (CHUCKLE) OFF DEBUG FFLCK LA,H1 A2,2,A0 LOAD SEQUENCE NUMBER TNE A2,EMISN,A1 DOES IT MATCH THIS ENTRY ? J FFENPR YES. GO COPY TO OUTPUT FILE LA A1,EMLNK,A1 LINK TO NEXT MAPPING ENTRY JNZ A1,FFLCK CONTINUE IF NOT THE END J FFNPL NOT SELECTED. CHECK NEXT PROC ENTRY . FFENPR LA A2,EMOSN,A1 LOAD OUTPUT SEQUENCE NUMBER SA,H1 A2,2,A0 PUT SEQUENCE NUMBER IN ENTRY LA A2,EMOTA,A1 LOAD OUTPUT FILE ADDRESS ANA A2,EMITA,A1 SUBTRACT INPUT ADRESS MSI,U A2,28 CONVERT OFFSET TO WORDS AA A2,3,A0 REBIAS THE FILE ADDRESS SA A2,3,A0 UPDATE FILE ADDRESS IN ENTRY LA,U A1,,A0 LOAD ENTRY ADDRESS LA A0,A12 LOAD OUTPUT FTI ADDRESS pircall xPTIA,x1 add PROC to output file J bspero BSP ERROR. FFNPL AA,U A6,1 BUMP SEQUENCE NUMBER J FFNPD LOOK AT NEXT PROC IN TABLE . FFPRTEN TE,U A0,014 END OF TABLE STATUS ? J bsperi BSP ERROR. LA A0,A12 LOAD FTI ADDRESS pircall WPFxPT,x1 write table back to fileD J bspero BSP ERROR. LA A0,R4 LOAD ONE BUFFER ADDRESS BRELR A0 RELEASE IT LA A0,R4 LOAD BUFFER POINTER SSL A0,18 SHIFT DOWN OTHER BUFFER ADDRESS BRELR A0 RELEASE IT FFPRTYN AA,U A7,1 INCREMENT TYPE OF PROC TLE,U A7,TY$REL ALL PROC TYPES CHECKED ? J FFZANG PROCESS NEXT PROC TYPE FFNOPRK LA A0,A12 RELOAD FTI ADDRESS wfti . WRITE BACK FILE INDEX J bspero BSP ERROR. FTNE2 . BRELP X7 RELEASE INPUT FCT BGET IBDATA ALLOCATE A BUFFER FOR OUTPUT CLOSE LA,U A1,STERM LOAD UP TERMINATE STATUS LX X9,F2 GET OUTPUT FCT ADDRESS TNZ IOMASS,X9 IS OUTPUT FILE TAPE ? LA,U A1,1 YES. LOAD STATUS TO WRITE EOF MARK SA A1,IBSTAT,A0 SET BUFFER STATUS TO EOF SZ IBLAST,A0 SET THIS BUFFER NOT LAST TZ IOMASS,X9 IS OUTPUT FILE TAPE ? SNONZ IBLAST,A0 MARK THIS BUFFER AS LAST SZ IBLEN,A0 CLEAR LENGTH TO ZERO LA,U A1,,A0 GET BUFFER ADDRESS IN A1 PUT IOBB,X10 TRANSMIT BUFFER TO OUTPUT TZ IOMASS,X9 TAPE OUTPUT ? J FTNE3 NO. ALL DONE WITH OUTPUT CLOSEOUT BGET IBDATA ALLOCATE A DATA ITEM BUFFER LA,U A1,1 LOAD EOF STATUS SA A1,IBSTAT,A0 PUT STATUS IN ITEM SZ IBLEN,A0 CLEAR LENGTH OF DATA IN ITEM SNONZ IBLAST,A0 MARK THIS AS THE LAST BUFFER LA,U A1,,A0 LOAD ADDRESS OF DATA ITEM PUT IOBB,X10 PUT ON DRIVER FCT FOR OUTPUT TO PROCESS FTNE3 P IOBB+QL,X9 WAIT FOR OUTPUT TO TERMINATE TZ IOMASS,X9 IS OUTPUT TAPE ? J FXMRK YES. LEAVE MARK AT END LA,U A0,MB$ LOAD MOVE BACKWARD FUNCTION SA A0,IOFUNC,X9 PUT FUNCTION IN PACKET IOW$ IOPKT,X9 BACK UP OVER THE MARK LA A1,IOSTATUS,A0 LOAD THE I/O STATUS TE,U A1,1 END OF FILE MARK ? J FTMRKR NO. ERROR BACKING OVER MARK LA A0,CDOPTS,X8 LOAD COMMAND OPTIONS TEP,U A0,OPTION('M') ENF OF FILE DESIRED AT END ? J FXMRK YES. LEAVE ONE MARK AT END IOW$ IOPKT,X9 NO. BACK UP OVER SECOND MARK LA A1,IOSTATUS,A0 LOAD STATUS FOR MOVE BACKWARDS TNE,U A1,1 END OF FILE STATUS ? J FXMRK YES. MOVE COMPLETED OK FTMRKR LMJ X11,IOSEDT ERROR. EDIT I/O ERROR MESSAGE ZAP . ERROR THE COMMAND AND ITS FILES FXMRK . FFNOPKRL BRELP X9 RELEASE OUTPUT FCT BRELP X10 RELEASE OUTPUT DRIVE FCT BRELA . RELEASE ALL BUFFERS COMPLETE . TERMINATE THIS COMMAND /. . . FILE TO FILE TRANSFER . FFXFR LA A0,CE LOAD CURRENT ELEMENT LA A1,EITYP,A0 LOOK AT ITS TYPE TG,U A1,TY$SYM+1 IS IT SYMBOLIC ? TG,U A1,TY$REL OR RELOCATABLE OR ABSOLUTE ? J FFNPT YES. IT'S NOT A PROC BGETL EML ALLOCATE AN ELEMENT MAPPING BUFFER SA A11,EMLNK,A0 ATTACH CHAIN TO BUFFER LA,U A11,,A0 GET NEW BUFFER AS LIST HEAD SA A10,EMISN,A0 SET INPUT SEQUENCE NUMBER SA A1,EMTYP,A0 SAVE ELEMENT TYPE LA A1,CE RELOAD ELEMENT POINTER LA A2,EITXTA,A1 GET OLD TEXT START ADDRESS SA A2,EMITA,A0 STORE OLD TEXT ADDRESS IN MAP PACKET LA A1,A12 GET POINTER TO OUTPUT FTI LA A2,FTIWL,A1 LOAD NEXT WRITE ADDRESS SA A2,EMOTA,A0 PUT OUTPUT FILE ADDRESS IN MAP BUFFER LA A1,EMTYP,A0 LOAD ELEMENT TYPE LA,U A2,1 LOAD UP A BIT LSSL A2,,A1 SHIFT TO MASK INTO SK OR A2,SK UPDATE MASK OF PROC TYPES COPIED SA A3,SK PUT BACK PROC TYPES MASK . . COPY TEXT AND PREAMBLE (IF ANY) . FFNPT LR,U R5 CLEAR PREAMBLE / TEXT FLAG LA A0,CE GET CURRENT ELEMENT LA A1,EITXTA,A0 LOAD INPUT ADDRESS SA A1,IODRAD,X7 SET FIRST READ ADDRESS LA,U A1,R$ LOAD UP READ FUNCTION SA A1,IOFUNC,X7 SET I/O FUNCTION TO READ LA A5,EITXTL,A0 LOAD LENGTH OF TEXT FFZL1 MSI,U A5,28 CONVERT LENGTH TO WORDS FFZL JZ A5,FFTEXM QUIT IF ALL COPIED LA,U A0,FFBL GET ASSUMED BUFFER LENGTH TG A0,A5 MORE THAN LEFT IN ELEMENT ? LA A0,A5 RIGHT. ONLY READ REMAINING LENGTH SA,H1 A0,IOACW,X7 SET UP ACW LENGTH ANA A5,A0 UPDATE WORDS REMAINING AA,U A0,IBDATA GET LENGTH OF DATA BUFFER BGET . ALLOCATE A DATA BUFFER SA A0,R4 SAVE BUFFER LOCATION AU,U A0,IBDATA COMPUTE DATA AREA START SA,H2 A1,IOACW,X7 PUT ADDRESS IN ACCESS WORD LA,U A0,IOPKT,X7 LOAD PACKET ADDRESS LMJ X11,IOZOOM READ IN BUFFER TZ IOSTATUS,X7 NORMAL COMPLETION ? J FFXB1 EDIT MESSAGE FOR STATUS LA A0,IODRAD,X7 LOAD DRUM ADDRESS AA,U A0,FFBL/28 BUMP DRUM ADDRESS FOR NEXT TIME SA A0,IODRAD,X7 PUT BACK DRUM ADDRESS LA A1,R4 RELOAD BUFFER ADDRESS LA,H1 A0,IOACW,X7 LOAD ACCESS LENGTH SA A0,IBLEN,A1 SET LENGTH OF BUFFER LX,U X9,,X10 GET DRIVE BUFFER ADDRESS LMJ X11,IOBLOK TRANSFER BUFFER TO OUTPUT FILE J FFZL PROCESS REST OF DATA . . END OF TEXT . FFTEXM TZ R5 END OF TEXT OR PEAMBLE ? J FFPREM END OF PREAMBLE. THAT'S ALL FOLKS LA A1,CE LOAD CURRENT ELEMENT POINTER LA A0,EITYP,A1 LOAD ELEMENT TYPE TE,U A0,TY$REL RELOCATABLE ? J FFPREM NO. NO PREAMBLE TO COPY LA A0,EIPREA,A1 GET PREAMBLE ADDRESS SA A0,IODRAD,X7 SET UP READ ADDRESS LA A5,EIPREL,A1 LOAD PREAMBLE LENGTH LR,U R5,1 SET PROCESSING PREAMBLE FLAG J FFZL1 ENTER PROCESSING LOOP . . END OF ELEMENT PROCESSING . FFPREM LA A1,CE LOAD CURRENT ELEMENT LA A0,A12 LOAD OUTPUT FTI ADDRESS LA A2,FTIWL,A0 GET NEXT WRITE ADDRESS SA A2,EITXTA,A1 SET TEXT START ADDRESS IN ELEMENT ITEM AA A2,EITXTL,A1 ADD LENGTH OF TEXT LA A3,EITYP,A1 GET ELEMENT TYPE TE,U A3,TY$REL RELOCATABLE ? J FFEINP NO. NO PREAMBLE SA A2,EIPREA,A1 SET PREAMBLE START ADDRESS AA A2,EIPREL,A1 ADD PREAMBLE LENGTH TO RUNNING ADDRESS FFEINP SA A2,FTIWL,A0 UPDATE WRITE LOCATION etia . ADD ELEMENT TO ELEMENT TABLE J FFXB2 EDIT MESSAGE FOR BSP ERROR LA A0,CE GET ELEMENT ENTRY ADDRESS LA A0,EITYP,A0 LOAD ELEMENT TYPE TG,U A0,TY$SYM+1 SYMBOLIC ? TG,U A0,TY$REL RELOCATABLE OR ABSOLUTE ? J FFREI RELEASE SELECT ITEM AND GET NEXT LA A0,A11 GET CURRENT MAPPING BUFFER SA A1,EMOSN,A0 PUT OUTPUT SEQUENCE IN MAP TABLE ENTRY FFREI BRELR CE RELEASE CURRENT ELEMENT BUFFER J FLNE PROCESS NEXT ELEMENT /. . . FILE TO TAPE TRANSFER . . FTXFR LMJ X5,BELAB BUILD ELEMENT LABEL PUT IOBB,X10 WRITE A LABEL BLOCK LX X6,CE RELOAD CURRENT ELEMENT POINTER LA A9,EITXTL,X6 LOAD TEXT LENGTH . . CHECK IF RELOCATABLE PREAMBLE IS CONTIGUOUS TO THE . END OF THE TEXT. IF SO, WE COPY AS ONE LUMP, . WHICH DOUBLES THE SPEED OF RELOCATABLE TRANSFERS. . LA A0,EITYP,X6 LOAD ELEMENT TYPE TE,U A0,TY$REL RELOCATABLE ? J FTNROP NO. IT DOESN'T HAVE A PREAMBLE LA A0,A9 LOAD THE TEXT START ADDRESS AA A0,EITXTA,X6 ADD TEXT LENGTH TE A0,EIPREA,X6 IS PREAMBLE CONTIGUOUS ? J FTNROP NO. CAN'T OPTIMISE AA A9,EIPREL,X6 INCORPORATE PREAMBLE WITH TEXT FTNROP MSI,U A9,28 COMPUTE LENGTH IN WORDS LA A0,EITXTA,X6 LOAD TEXT STARTING ADDRESS SA A0,IODRAD,X7 SET UP READ ADDRESS LA,U A0,R$ LOAD READ FUNCTION SA A0,IOFUNC,X7 PUT FUNCTION IN PACKET JZ A9,FTNOTX SKIP IF NO TEXT PRESENT . . ENTER HERE TO PROCESS A MASS STORAGE BLOCK . FTNBR LA,U A0,224 LOAD ASSUMED READ LENGTH TG A0,A9 MORE THAN LEFT TO READ IN ? LA A0,A9 YES. READ ONLY REQUIRED LENGTH SA,H1 A0,IOACW,X7 SET LENGTH IN ACW ANA A9,A0 UPDATE LENGTH REMAINING BGET IBDATA+224 ALLOCATE A BLOCK BUFFER LA,U A1,224 GET BLOCK LENGTH SA A1,IBLEN,A0 SET LENGTH SZ IBSTAT,A0 SET STATUS NORMAL SZ IBLAST,A0 SET NOT LAST BUFFER SA A0,R2 SAVE ADDRESS OVER CALL LA,U A0,IBDATA,A0 LOAD DATA AREA START sa,h2 a0,ioacw,x7 set buffer address in access word LA,U A0,IOPKT,X7 LOAD PACKET ADDRESS LMJ X11,IOZOOM READ IN DATA LA A0,IOXFER,X7 LOAD WORDS MOVED DSL A0,36 MOVE TO A0, A1 DI,U A0,28 DIVIDE BY SECTOR LENGTH AA A0,IODRAD,X7 INCREMENT FILE ADDRESS SA A0,IODRAD,X7 UPDATE IT IN PACKET LA A1,R2 RESTORE BUFFER ADDRESS TZ IOSTATUS,X7 NORMAL COMPLETION ? J FTXB1 NO. PRINT ERROR MESSAGE JZ A9,FLETX LAST BLOCK ? PUT IOBB,X10 TRANSMIT BLOCK J FTNBR PROCESS NEXT BLOCK . . FLETX LX X6,CE LOAD CURRENT ELEMENT LA A4,EITYP,X6 LOAD TYPE TNE,U A4,TY$REL RELOCATABLE ? J RELPRW YES. GO WRITE OUT PREAMBLE FTNOPR PUT IOBB,X10 WRITE FINAL BLOCK TO TAPE TG,U A4,TY$SYM+1 IS IT A PROC ? TG,U A4,TY$REL (TY$SYM < TYPE < TY$REL) J FTREI RELEASE ITEM AND GET NEXT ELEMENT . . IT'S A PROC. SCAN THE PROCEDURE NAME TABLE FOR . PROCS BELONGING TO THIS ELEMENT AND WRITE A 'PHONEY' . ELEMENT CONSISTING OF THE PROCEDURE ENTRIES FOR THIS . ELEMENT. . SA A4,R5 SAVE ELEMENT TYPE LA A0,R5 LOAD ELEMENT TYPE MSI,U A0,3 MULTIPLY BY FILE INDEX LENGTH AA,XU FTIAPT-3*TY$ASMP COMPUTE OFFSET TO FTI AA A0,A14 ADD INPUT FTI START ADDRESS LMJ X11,PFTLEN COMPUTE LENGTH OF TABLE TG,U A0,BUFPRCT+1 MUST WE FORCE PAGING TO RESTRICT CORE ? LA,U A0,BUFPRCT YES. USE MAXIMUM CONFIGURED SIZE SA A0,A1 SAVE THE SIZE IN A1 BGETL . ALLOCATE A PROC TABLE BUFFER SX,H2 A0,IOACW,X7 SAVE BUFFER ADDRESS LXI,U A1,,A0 GET ADDRESS IN H1 OF A0 LX X5,R5 LOAD ELEMENT TYPE INDEX LA A0,A14 LOAD FCT ADDRESS pircall RPFxPT,x5 READ IN THE PROC TABLE J FTXB2 ERROR FROM BSP LA,U A6 CLEAR SEQUENCE FOR PROC SEARCH LA,U A9 CLEAR FIRST TIME FLAG LA A0,CE GET ELEMENT ITEM LA A7,EITXTA,A0 LOAD TEXT ADDRESS MSI,U A7,28 COMPUTE TEXT START IN WORDS BGET IBDATA+224 ALLOCATE AN OUTPUT BUFFER SA A0,R6 SAVE THE BUFFER ADDRESS LR,U R7,224 LOAD WORDS LEFT IN BUFFER LX,U X1,IBDATA,A0 SET POINTER TO BUFFER START LXI,U X1,1 PUT INCREMENT IN POINTER . . PROC LOOKUP LOOP . FTPRCL AA,U A6,1 INCREMENT PROC SEQUENCE NUMBER LA A1,A6 LOAD SEQUENCE NUMBER LA A0,A14 LOAD FCT ADDRESS LX X5,R5 LOAD ELEMENT TYPE pircall xPTNL,x5 fetch next proc from file J FTPRE BSP ERROR WHILE IN PROC LOOKUP LA,H1 A1,2,A0 LOAD SEQUENCE OF PROC TLE A10,A1 PAST ENTRIES FOR THIS ELEMENT ? J FTPREX YES. WIND UP PROC SAVING TE A10,A1 IS ENTRY FROM THIS ELEMENT ? J FTPRCL NO. LOOK AT NEXT ONE LA A1,3,A0 GET WORD ADDRESS INTO FILE ANA A1,A7 MAKE RELATIVE TO ELEMENT START SA A1,3,A0 REPLACE ADDRESS IN ENTRY SA A0,R8 SAVE ADDRESS OF ENTRY LXI,U A0,1 GET INCREMENT LR,U R1,4 LOAD LENGTH OF ENTRY BT X1,,*A0 MOVE ITEM TO BUFFER LA A3,R7 LOAD WORDS LEFT IN BUFFER ANA,U A3,4 SUBTRACT THIS ENTRY SA A3,R7 SAVE WORDS LEFT TNZ A3 BUFFER FULL ? LMJ X2,WPRBL YES. WRITE IT OUT LA A0,R8 LOAD ENTRY START LA,H1 A0,3,A0 LOAD BITS TOP,U A0,0200000 EXTRA LONG COBOL PROC ? . ** CHECK COBOL TYPE ** J FTNCOB NO. SKIP THIS STUFF LA A0,R8 LOAD ADDRESS OF ENTRY LXI,U A0,1 SET UP INCREMENT AA,U A0,4 POINT TO EXTENSION LR,U R1,4 LOAD LENGTH TO MOVE BT X1,,*A0 MOVE ENTRY TO BUFFER LA A0,R7 LOAD WORDS LEFT ANA,U A0,4 DECREMENT FOR THIS ENTRY SA A0,R7 STORE BACK LENGTH TNZ A0 IS BUFFER EMPTY ? LMJ X2,WPRBL YES. GO WRITE IT OUT FTNCOB JNZ A9,WPRNFT SKIP IF NOT FIRST TIME AA,U A9,1 SET NOT FIRST TIME LMJ X5,BELAB WRITE ELEMENT LABEL LA A0,('PHONEY') LOAD 'PHONEY' SENTINEL SA A0,IBDATA+1,A1 MARK THIS AS A PHONEY ELEMENT PUT IOBB,X10 WRITE PHONEY LABEL ON TAPE WPRNFT J FTPRCL PROCESS NEXT PROC ENTRY . . PROC BLOCK OUTPUT . WPRBL LA A1,R6 LOAD BUFFER ADDRESS SZ IBLAST,A1 CLEAR LAST BLOCK SZ IBSTAT,A1 CLEAR STATUS OF READ LR,U R7,224 RESET WORDS LEFT IN BUFFER SR R7,IBLEN,A1 SET BUFFER LENGTH PUT IOBB,X10 SUBMIT TO OUTPUT BGET IBDATA+224 ALLOCATE A NEW BUFFER SA A0,R6 SAVE NEW BUFFER ADDRESS LXM,U X1,IBDATA,A0 SET POINTER TO BUFFER START J 0,X2 RETURN . . PROC OUTPUT CLOSE OUT . FTPRE TE,U A0,014 END OF TABLE STATUS ? J FTXB3 NO. ERROR FROM BSP FTPREX JZ A9,DISBU IGNORE IF NO ENTRIES FOUND LA A0,(077*/30+' ') LOAD END SENTINEL SA A0,,*X1 PUT IN BUFFER LA A1,R6 LOAD BUFFER ADDRESS SZ IBSTAT,A1 CLEAR BUFFER STATUS SZ IBLAST,A1 CLEAR LAST BUFFER LA,U A0,224 LOAD BUFFER LENGTH SA A0,IBLEN,A1 SET LENGTH OF BUFFER PUT IOBB,X10 TRANSMIT BUFFER TO OUTPUT FTPE1 BRELR IOACW,X7,H2 RELEASE PROC BUFFER J FTREI RELEASE ITEM, GET NEXT ELEMENT . DISBU BRELP R6 RELEASE THE BUFFER J FTPE1 PROCESS NEXT ELEMENT . . RELOCATABLE PREAMBLE OUTPUT . RELPRW LX X6,CE LOAD CURRENT ELEMENT LA A9,EIPREL,X6 LOAD PREAMBLE LENGTH MSI,U A9,28 CONVERT TO WORDS JZ A9,FTNOPR SKIP THIS STUFF IF NO PREAMBLE LA A0,EITXTA,X6 LOAD TEXT ADDRESS AA A0,EITXTL,X6 ADD LENGTH OF TEXT TNE A0,EIPREA,X6 WAS CONTIGUOUS PREAMBLE OPTIMISED ? J FTNOPR YES. DON'T WRITE IT NOW LA A0,EIPREA,X6 LOAD PREAMBLE ADDRESS SA A0,IODRAD,X7 SET UP DRUM ADDRESS FOR READ . . FILL LAST TEXT BUFFER WITH PREAMBLE DATA . LA A2,IOXFER,X7 LOAD TRANSFER COUNT INTO LAST BUFFER DSL A2,36 MOVE INTO A2, A3 DI,U A2,224 COMPUTE NUMBER OF BUFFERS PRESENT JZ A3,TTRNF SKIP FILL IF LAST BUFFER FULL ALREADY LA,U A2,224 LOAD LENGTH OF FULL BUFFER ANA A2,A3 SUBTRACT NUMBER IN LAST BUFFER TG A2,A9 MORE THAN PREAMBLE LENGTH ? LA A2,A9 SO BE IT. READ WHOLE SHEBANG SA,H1 A2,IOACW,X7 SET LENGTH IN INPUT ACW AA,U A3,IBDATA,A1 COMPUTE START ADDRESS IN BUFFER SA,H2 A3,IOACW,X7 SET READ ADDRESS IN FCT SA A1,R2 SAVE BUFFER ADDRESS LA,U A0,IOPKT,X7 LOAD PACKET ADDRESS LMJ X11,IOZOOM READ IN DATA LA A1,R2 RELOAD BUFFER ADDRESS TZ IOSTATUS,X7 NORMAL COMPLETION ? J FTXB1 NO. PRINT ERROR MESSAGE PUT IOBB,X10 WRITE FINAL TEXT / FIRST PRE BLOCK LA A0,IOXFER,X7 LOAD WORDS TRANSFERRED ANA A9,A0 SUBTRACT FROM LENGTH TO MOVE DSL A0,36 SHIFT OVER DI,U A0,28 DIVIDE BY SECTOR LENGTH ON DEBUG TZ A1 EVEN SECTOR MULTIPLE ? IERR . NO. SCREW UP OFF DEBUG AA A0,IODRAD,X7 INCREMENT CURRENT FILE ADDRESS SA A0,IODRAD,X7 STORE BACK NEW FILE ADDRESS LX X6,CE GET CURRENT ELEMENT ENTRY SZ EITYP,X6 CHANGE TYPE NOT TO COME BACK HERE JNZ A9,FTNBR GO COPY PREAMBLE IF ANY EXISTS FTREI BRELR CE RELEASE CURRENT SELECT ITEM J FLNE GET NEXT ELEMENT OFF TAPE . TTRNF PUT IOBB,X10 WRITE OUT THE BUFFER LX X6,CE LOAD CURRENT ELEMENT SZ EITYP,X6 CLEAR TYPE SO AS NOT TO RETURN J FTNBR PROCESS REST OF IT . . SET UP PREAMBLE FOR ELEMENT WITH NO TEXT . FTNOTX LX X6,CE GET CURRENT ELEMENT LA A4,EITYP,X6 LOAD TYPE OF ELEMENT TE,U A4,TY$REL RELOCATABLE ? J FTREI NO. THIS IS THE END, GET NEXT ELEMENT LA A9,EIPREL,X6 LOAD PREAMBLE LENGTH MSI,U A9,28 CONVERT LENGTH TO WORDS LA A0,EIPREA,X6 LOAD PREAMBLE ADDRESS SA A0,IODRAD,X7 PUT INTO READ PACKET SZ EITYP,X6 CLEAR ELEMENT TYPE J FTNBR COPY OUT PREAMBLE . . BUILD ELEMENT LABEL . BELAB BGET IBDATA+28 ALLOCATE A DATA BUFFER DL A1,('**EF**@@@@@@') LOAD THE SENTINEL DS A1,IBDATA,A0 PUT SENTINEL IN BUFFER SZ IBSTAT,A0 CLEAR BUFFER STATUS SZ IBLAST,A0 CLEAR LAST BUFFER FLAG LA,U A1,28 LOAD LENGTH SA A1,IBLEN,A0 PUT LENGTH IN BUFFER LA,U A1,,A0 SAVE BUFFER ADDRESS FOR PUT LXI,U A0,1 SET INCREMENT IN A0 LA A2,CE GET ELEMENT ITEM ADDRESS AA,U A0,2+IBDATA POINT PAST SENTINEL LXI,U A2,1 GET INCREMENT FOR A2 LR,U R1,EIL LOAD ITEM LENGTH BT A0,,*A2 MOVE ELEMENT ITEM TO LABEL LR,U R1,28-EIL-2 LOAD LENGTH LEFT IN LABEL LA,U A2,('>FANG<') INDICATE FANG WROTE IT BT A0,,*A2 MOVE TO BUFFER J 0,X5 RETURN /. . . TAPE TO FILE TRANSFER . TFXFR LA,U A0,'D' LOAD DUPLICATE ADDRESSES MODE SA A0,IOOPT,X9 SET I/O OPTION LMJ A2,IOGNF BUILD FCT TO DRIVE OUTPUT LX,U X10,,A0 SAVE DRIVE FCT ADDRESS LMJ A2,OUTPUT CREATE A WRITER LX X9,E2 GET SECOND ELEMENT CLASS SPECIFICATION LMJ X6,GELT1 READ IN FILE TABLE INDEX, ELT TABLE J TFBX1 ERROR FROM BSP LX,U X9,,X10 SAVE DRIVE FCT ADDRESS LX X10,F1 GET INPUT FCT SZ SK CLEAR SKIPPING FLAG SZ CE CLEAR CURRENT ELEMENT LA A0,A14 LOAD FTI ADDRESS LA A7,FTIWL,A0 LOAD NEXT WRITE ADDRESS LMJ X11,IOBOPN OPEN BLOCKED OUTPUT . . PROCESS A BLOCK . TFGET GET IOBB,X10 GET A BLOCK FROM INPUT TAPE TZ IBLAST,A1 LAST BLOCK ? J TFNTR YES. ENTER LAST ELEMENT TZ IBSTAT,A1 CHECK STATUS J TFEOF NON-ZERO. MUST BE EOF LA A0,IBLEN,A1 LOAD BLOCK LENGTH TE,U A0,28 LENGTH OF A LABEL BLOCK ? J TFPUT NO. GO PUT IT OUT . . WE HAVE READ A BLOCK NOT PART OF THIS ELEMENT. . ENTER ELEMENT IF ONE IS BEING COPIED . TFNTR TNZ CE IS THERE A CURRENT ELEMENT ? J TFPNB NO. DON'T ENTER ANYTHING SA A1,R5 SAVE BLOCK ADDRESS LA A1,CE GET LABEL FOR THIS ELEMENT LA A0,A14 LOAD BSP FCT ADDRESS AA,U A1,IBDATA+2 POINT TO ELEMENT ITEM IN LABEL LA A11,EITXTA,A1 SAVE TEXT START FOR PROC ENTRY etia . ADD ELEMENT TO ELEMENT TABLE J TFBX2 BSP ERROR HERE. RELEASE ALL BUFFERS sa a1,r8 save sequence number of new element LA A0,CE GET BLOCK ADDRESS LA A2,EITYP+IBDATA+2,A0 GET TYPE OF ELEMENT BRELP A0 RELEASE LABEL BLOCK SZ CE MARK NO LABEL BLOCK ALLOCATED LA A1,R5 RELOAD BLOCK ADDRESS TG,U A2,TY$SYM+1 SYMBOLIC ? TG,U A2,TY$REL OR RELOCATABLE OR ABSOLUTE ? J TFPNB YES. ANALYSE NEW LABEL BLOCK . . WE JUST ENTERED A PROC ELEMENT. SEE IF THIS NEW ELEMENT . IS A 'PHONEY' ELEMENT CONTAINING PROCEDURE NAME ENTRIES . FOR THE PRECEDING ELEMENT. IF SO, READ IN THE BLOCKS . OF ENTRY POINTS AND INSERT THEM IN THE APPROPRIATE PROC . NAME TABLE. . LA A3,R5 LOAD LABEL BLOCK ADDRESS TZ IBLAST,A3 LAST BLOCK ? J TFPNB YES. SKIP PROC SETUP DL A4,IBDATA,A3 LOAD SENTINEL FROM BLOCK DTE A4,('**EF**PHONEY') IS IT A PHONEY ELEMENT ? J TFPNB NO. MUST BE START OF ANOTHER ELEMENT SA A2,R6 SAVE ELEMENT TYPE SA A1,CE SAVE SEQUENCE NUMBER OF NEW ELEMENT BRELP R5 RELEASE PHONEY LABEL BLOCK BGETL BUFPRCT ALLOCATE A PROCEDURE TABLE BUFFER SA A0,R5 SAVE THE BUFFER ADDRESS DSL A0,18 MOVE BUFFER ADDRESS TO A1 LXM,U A1,BUFPRCT LOAD LENGTH OF THE BUFFER LA A0,A14 LOAD FCT ADDRESS LX X11,R6 GET TYPE OF ELEMENT pircall RPFxPT,x11 READ IN THE PROC TABLE J TFBX3 ERROR FROM BSP READING TABLE MSI,U A11,28 CONVERT ELEMENT START ADDRESS TO WORDS LX,U X6 CLEAR RUNNING BUFFER POINTER LA,U A6 SET NO SPANNED ITEM PENDING . TFPRGET GET IOBB,X10 GET A BUFFER FROM TAPE SA A1,R7 SAVE BUFFER ADDRESS TNZ IBSTAT,A1 NORMAL STATUS ? TZ IBLAST,A1 LAST BLOCK ? J TFPRGF PREMATURE EOF PROCESSING PROCS LA A0,IBLEN,A1 LOAD BLOCK LENGTH TE,U A0,224 MAKE SURE BLOCK IS RIGHT LENGTH J TFPRGF NO. ERROR IN THIS BLOCK TN A6 DID AN ITEM SPAN THE LAST BLOCK J TFNOSP NO. SKIP SPANNED ITEM CODE LX X6,X3 RELOAD LAST BLOCK POINTER . . THIS CODE HANDLES THE SPANNED ITEM CASE THAT CAN . RESULT SINCE COBOL PROC ENTRIES CAN BE EITHER FOUR . OR EIGHT WORDS IN LENGTH. IF THE LAST ITEM IN . A BUFFER IS AN EIGHT WORD ITEM AND IT SPANS THE . END OF THE BUFFER, WE SAVE THE LAST BUFFER (AT TFSPSU . BELOW). AFTER READING THE NEXT BLOCK WE COME HERE, . WHERE THE TWO HALVES ARE CONCATENATED ON THE OLD BUFFER . AND THE ENTRY IS MADE. . DL A2,IBDATA+220,X6 LOAD LAST TWO WORDS OF LAST DS A2,IBDATA,X6 MOVE TO BLOCK START DL A2,IBDATA+222,X6 GET END OF LAST DS A2,IBDATA+2,X6 MOVE TO START OF LAST DL A2,IBDATA,A1 GET WORDS 4,5 OF ITEM DS A2,IBDATA+4,X6 PUT IN ITEM DL A2,IBDATA+2,A1 GET LAST 2 WORDS DS A2,IBDATA+6,X6 FINISH UP ITEM LA,U A1,IBDATA,X6 GET ITEM START ADDRESS LA A0,3,A1 LOAD FILE ADDRESS (REL) AA A0,A11 MAKE RELATIVE TO FILE START SA A0,3,A1 PUT BACK IN ITEM sr,h1 r8,2,a1 put link to governing element in item LA A0,A14 LOAD FILE TABLE ITEM ADDRESS LX X11,R6 LOAD ELEMENT TYPE pircall xPTIA,x11 add PROC to table J TFSPNR ERROR IN SPANNED ITEM HANDLER BRELP X6 RELEASE LAST BUFFER LX X6,R7 LOAD CURRENT BUFFER ADDRESS LX,U X6,IBDATA+4,X6 LOAD FIRST ITEM START LA,U A6,224-4 LOAD WORDS LEFT IN BUFFER J TFPENL ENTER NORMAL HANDLER . TFNOSP LX,U X6,IBDATA,A1 GET START ITEM ADDRESS LA,U A6,224 LOAD BLOCK LENGTH . . MAKE ENTRIES FOR PROCS . TFPENL LR,U R4,4 LOAD ASSUMED LENGTH OF ITEM LA,S1 A2,,X6 LOAD FIRST CHARACTER OF PROC NAME JE A2,077,TFPRCE STOP IF END SENTINEL LA A0,R6 LOAD TYPE OF THIS ELEMENT TE,U A0,TY$COBP IS IT A COBOL PROC ? J TFNCOB NO. DON'T CHECK EXTENSION FLAG LA,H1 A0,3,X6 GET FLAG BITS TEP,U A0,0200000 IS THIS ITEM 8 WORDS ? LR,U R4,8 YES. LOAD LENGTH TFNCOB ANA A6,R4 SUBTRACT ITEM LENGTH FROM WORDS LEFT JN A6,TFSPSU SPANNED ITEM (COBOL ONLY) ? LA A0,A14 GET FILE TABLE INDEX ADDRESS LA,U A1,,X6 GET ADDRESS OF CURRENT ITEM LA A2,3,A1 LOAD ADDRESS RELATIVE TO ELEMENT AA A2,A11 MAKE RELATIVE TO FILE START SA A2,3,A1 UPDATE FILE ADDRESS sr,h1 r8,2,a1 put link to governing element in item LX X11,R6 LOAD ELEMENT TYPE pircall xPTIA,x11 add proc to table J TFBX4 ERROR FROM BSP IN PROC ENTRY AX X6,R4 INCREMENT POINTER BY ENTRY LENGTH JNZ A6,TFPENL PROCESS NEXT ENTRIES IF ANY BRELP R7 RELEASE CURRENT BUFFER J TFPRGET GET NEXT BLOCK . . SPANNED ITEM SET-UP . TFSPSU LX X3,R7 GET BUFFER START J TFPRGET PROCESS SPANNED ITEM . . CLOSE OUT. REWRITE TABLE TO DRUM . TFPRCE BRELP R7 RELEASE CURRENT BUFFER LA A0,A14 GET FCT ADDRESS FOR BSP lx x11,r6 load type of element pircall WPFxPT,x11 write PROC table back to file J TFBX3 ERROR FROM BSP IN PROC LAND BRELR R5 RELEASE BSP PROC TABLE BUFFER SZ CE SET NO CURRENT ELEMENT J TFGET PROCESS NEXT BLOCK . . . PROCESS LABEL BLOCK . TFPNB TZ IBLAST,A1 LAST BUFFER ? J TFLAS YES. CLOSE OUT PROCESSING DL A2,IBDATA,A1 LOAD SENTINEL FROM BUFFER DTE A2,('**EF**@@@@@@') LABEL SENTINEL ? J TFLABR NO. ERROR IN LABEL SA A1,CE SAVE CURRENT ELEMENT LABEL LX,U X6,IBDATA+2,A1 LOAD ELEMENT ITEM PORTION LX X5,E1 GET SELECTION CRITERIA LMJ X11,SELECT SEE IF THIS ELEMENT IS CHOSEN ? J TFSKP NOT CHOSEN. SKIP IT sz sk mark not to skip element text LA A8,CDOPTS,X8 LOAD COMMAND OPTIONS TOP,U A8,OPTION('T') TOC ELEMENTS TRANSFERRED ? J TFNOTC NO. SKIP TOC EDITING SX X9,R4 SAVE FCT POINTER LX X9,CE GET CURRENT ELEMENT TABLE ITEM AX,U X9,IBDATA+2 POINT TO ITS START IN BLOCK LA,U A10 INDICATE TRANSFER TOC EDITING R$DIT . SET UP EDITOR LMJ X5,TOCLE EDIT TOC LINE R$DITX . TERMINATE THE EDITOR LX X9,R4 RESTORE FCT ADDRESS TFNOTC LA A0,CE LOAD CURRENT ELEMENT LABEL AA,U A0,IBDATA+2 POINT TO ELEMENT ITEM LA A1,E2 LOAD RENAME SPECIFICATION SA A7,A8 SAVE A7 FROM RENAME LMJ X11,RENAME RENAME ELEMENT IF DESIRED LA A1,CE LOAD CURRENT ELEMENT LA A7,A8 RESTORE CURRENT ADDRESS AA,U A1,IBDATA+2 POINT TO ITEM PACKET SA A7,A11 SAVE RUNNING FILE ADDRESS SA A7,EITXTA,A1 STORE TEXT ADDRESS AA A7,EITXTL,A1 ADD LENGTH OF TEXT LA A0,EITYP,A1 LOAD ELEMENT TYPE TE,U A0,TY$REL RELOCATABLE ? J TFNRL NO. DON'T ADD PREAMBLE LENGTH SA A7,EIPREA,A1 STORE PREAMBLE START ADDRESS AA A7,EIPREL,A1 ADD PREAMBLE LENGTH TO ADDRESS TFNRL LA A9,A7 LOAD NEXT WRITE ADDRESS ANA A9,A11 SUBTRACT START ADDRESS J TFGET GO PROCESS INPUT BLOCKS . . SKIP AN ELEMENT . TFSKP BRELP CE RELEASE THE LABEL SNONZ SK SET SKIPPING THIS ELEMENT SZ CE SET NO CURRENT ELEMENT J TFGET PROCESS BLOCKS . . POSSIBLE LABEL ERROR . TFLABR TZ SK SKIPPING BLOCKS ? J TFPUT YES. PROBABLY A PHONEY LABEL SA A1,CE SAVE BLOCK BUFFER ADDRESS P PRINTER LOCK THE PRINTER SX X9,R4 SAVE FCT ADDRESS SX X10,R5 SAVE DRIVE BUFFER ADDRESS R$DIT . TURN ON THE EDITOR E$MSG TFLABRM EDIT THE LABEL ERROR MESSAGE LA A0,F1 GET FIRST FILE POINTERS SSL A0,18 SHIFT DOWN FDT ADDRESS LMJ X11,FIST APPEND FILE AND STATEMENT LMJ A2,IOGNF ALLOCATE A NON-I/O FCT SA A0,X10 SAVE FCT ADDRESS IN X10 BGET QL ALLOCATE A COMPLETION QUEUE LX,U X9,,A0 LOAD COMPLETION QUEUE ADDRESS INITQ . INITIALISE THE COMPLETION QUEUE LA A1,CE GET ERRONEOUS BLOCK ADDRESS SNONZ IBLAST,A1 MARK AS LAST BLOCK TO DUMP PUT IOBB,X10 PUT ON DRIVE FCT LR CE,CDOPTS,X8 LOAD COMMAND OPTIONS SZ CDOPTS,X8 CLEAR THEM FOR DUMPER LMJ A2,PRINT FIRE UP THE DUMP PRINTER P 0,X9 WAIT FOR DUMP BRELP X9 RELEASE COMPLETION QUEUE BRELP X10 RELEASE DRIVE FCT V PRINTER UNLOCK THE PRINTER SR CE,CDOPTS,X8 SAVE THE COMMAND OPTIONS LX X9,R4 RESTORE FCT ADDRESS LX X10,R5 ...AND DRIVE BUFFER J TFBX1A ENTER ERROR PROCESSING TFPUT TZ SK SKIPPING BLOCKS ? J TFIGN YES. IGNORE THIS ONE SA A11,IBMSAD,A1 STORE START AADRESS FOR THIS BLOCK . ** SCAN MODE FOR ZERO LIMIT BLOCKK ** LA,U A0,224/28 GET NUMBER OF SECTORS IN A BLOCK TG A0,A9 MORE THAN IS LEFT OF ELEMENT ? LA A0,A9 YES. WRITE OUT REST OF IT ANA A9,A0 SUBTRACT AMOUNT WRITTEN FROM AMOUNT LEFT AA A11,A0 ADD TO RUNNING MASS STORAGE ADDRESS MSI,U A0,28 CONVERT LENGTH TO WORDS SA A0,IBLEN,A1 STORE LENGTH IN BUFFER LMJ X11,IOBLOK BLOCK AND OUTPUT J TFGET PROCESS NEXT BUFFER FROM INPUT . . IGNORE SKIPPED BLOCKS . TFIGN BRELP A1 RELEASE THE BLOCK BUFFER J TFGET GET NEXT BLOCK . . HANDLE ABNORMAL STATUS BLOCK READ (NOT LAST) . TFEOF LA A0,IBSTAT,A1 LOAD STATUS RETURNED FROM READ TE,U A0,1 IS IT END OF FILE ? J TFPUT NO. LET READ MESSAGE SERVE AS WARNING E . ** CHECK THE AFC HERE, THOUGH ** BRELP A1 RELEASE THE BLOCK BUFFER J TFGET GET NEXT BLOCK BUFFER . . CLOSE OUT PROCESSING. WRITE BACK TABLES . TFLAS BRELP A1 RELEASE FINAL BLOCK BUFFER LA A0,A14 GET FCT ADDRESS wpfet . WRITE BACK UPDATED ELEMENT TABLE J TFBX5 BSP ERROR LA A0,A14 GET BSP FCT ADDRESS SA A7,FTIWL,A0 UPDATE NEXT WRITE ADDRESS wfti . REWRITE FILE TABLE INDEX J TFBX5 PROCESS BSP ERROR LMJ A1,EBUFRL RELEASE BSP BUFFERS BRELP X10 RELEASE THE INPUT FCT LMJ X11,IOBCLO CLOSE BLOCKED OUTPUT BGET IBDATA ALLOCATE A TERMINATION BLOCK SZ IBLEN,A0 CLEAR LENGTH LA,U A1,STERM LOAD TERMINATE STATUS SA A1,IBSTAT,A0 SET STATUS AS EOF SNONZ IBLAST,A0 MARK THIS LAST BUFFER LA,U A1,,A0 LOAD BUFFER ADDRESS PUT IOBB,X9 PUT BUFFER ON OUTPUT BBUF LA A1,F2 GET SECOND FILE FCT ADDRESS P IOBB+QL,A1 WAIT FOR OUTPUT TERMINATION BRELP A1 RELEASE OUTPUT FCT BRELP X9 RELEASE DRIVE BUFFER BRELA . RELEASE ALL ALLOCATED BUFFERS COMPLETE . DONE WITH THIS COMMAND /. . . TAPE TO TAPE TRANSFER . TTXFR LA,U A0,'M' LOAD COPY MARKS OPTION SA A0,IOOPT,X9 SET AS OUTPUT OPTION LA A8,CDOPTS,X8 LOAD COMMAND OPTIONS LMJ A2,IOGNF GET A FAKE FCT LX,U X10,,A0 USE IT TO DRIVE OUTPUT LMJ A2,OUTPUT CREATE A WRITER LX,U X9,,X10 GET ADDRESS OF OUTPUT DRIVE LX X10,F1 GET INPUT FCT ADDRESS SZ SK CLEAR SKIPPING ELEMENT FLAG . TTGET GET IOBB,X10 GET A BLOCK FROM INPUT TZ IBLAST,A1 IS IT THE LAST BLOCK ? J TTLAS YES. MAKE SURE IT'S AN EOF TZ IBSTAT,A1 NORMAL COMPLETION ON BLOCK ? J TTEOF NO. MAKE SURE IT'S AN EOF LA A0,IBLEN,A1 LOAD BLOCK LENGTH TE,U A0,28 DOES IT LOOK LIKE A LABEL ? J TTPUT NO. WRITE IT OUT DL A2,IBDATA,A1 LOAD THE SENTINEL . ** CHECK IT MORE ** DTE A2,('**EF**@@@@@@') REAL ELEMENT START ? J TTPUT NO. MUST BE A DUMMY SZ SK CLEAR SKIPPING BLOCKS SA A1,R5 SAVE BLOCK ADDRESS LX,U X6,IBDATA+2,A1 LOAD THE ELEMENT ITEM ADDRESS LX X5,E1 GET THE SELECTION CRITERIA LMJ X11,SELECT SEE IF IT IS SELECTED SNONZ SK NO. SET UP TO SKIP THE BLOCK TNZ SK IS THIS ELEMENT SELECTED ? TOP,U A8,OPTION('T') YES. PRINT TOC ? J TTNOTC NO. SKIP IT SX X9,R4 SAVE FCT ADDRESS LA,U A10 CLEAR SEQUENCE FOR TRANSFER TOC LX X9,R5 LOAD CURRENT HEADER BLOCK ADDRESS AX,U X9,IBDATA+2 POINT TO ELEMENT TABLE ITEM R$DIT . ENTER EDITING MODE LMJ X5,TOCLE EDIT THE TOC LINE R$DITX . TERMINATE EDITING MODE LX X9,R4 RESTORE FCT ADDRESS TTNOTC LA A0,R5 SELECTED. GET ITEM ADDRESS AA,U A0,IBDATA+2 POINT TO ELEMENT TABLE ENTRY LA A1,E2 GET SECOND ELEMENT SPECIFICATION LMJ X11,RENAME RENAME THE ELEMENT LA A1,R5 LOAD THE BLOCK ADDRESS TTPUT TZ SK SKIPPING BLOCKS ? J TTSK YES. SKIP THIS ONE PUT IOBB,X9 PUT ON QUEUE FOR OUTPUT J TTGET READ NEXT BLOCK . TTSK BRELP A1 RELEASE THE BLOCK BUFFER J TTGET GET THE NEXT BLOCK . TTEOF . **** CHECK STATUS **** J TTSK SKIP THE BLOCK . . WRITE TRAILING EOF MARK AND BACK OVER IT . TTLAS LA A0,IBSTAT,A1 LOAD THE STATUS ON DEBUG TE,U A0,1 MUST BE EOF FROM 'E' INPUT IERR . NOPE. SOMEBODY GOOFED OFF DEBUG SZ IBLAST,A1 MARK THIS NOT THE LAST BLOCK PUT IOBB,X9 SET THE BUFFER FOR OUTPUT BGET IBDATA ALLOCATE A DATA BUFFER SNONZ IBLAST,A0 MARK THIS AS LAST BUFFER SZ IBLEN,A0 CLEAR LENGTH TO ZERO LA,U A1,1 LOAD EOF STATUS SA A1,IBSTAT,A0 TELL OUTPUT TO WRITE END OF FILE LA,U A1,,A0 LOAD BLOCK ITEM ADDRESS PUT IOBB,X9 PUT ONTO OUTPUT DRIVER FCT LA A0,F2 GET ADDRESS OF OUTPUT FCT P IOBB+QL,A0 WAIT FOR OUTPUT TO COMPLETE BRELP X10 RELEASE THE INPUT FCT BRELP X9 RELEASE THE OUTPUT DRIVER FCT LX X9,F2 GET ADDRESS OF OUTPUT FCT LA,U A0,MB$ GET MOVE BACKWARD FUNCTION SA A0,IOFUNC,X9 PUT FUNCTION IN PACKET IOW$ IOPKT,X9 BACK UP OVER THE EOF MARK LA A1,IOSTATUS,X9 LOAD I/O STATUS TE,U A1,1 MUST BE EOF, OBVIOUSLY J TTMBER OBVIOUSLY NOT. SOUND OFF TEP,U A15,OPTION('M') END OF FILE DESIRED AT END OF OUTPUT ? J TTCPL YES. LEAVE POSITIONED AFTER FIRST EOF IOW$ IOPKT,X9 NO. BACK UP OVER THIS MARK ALSO TE,U A1,1 WAS STATUS CORRECT FOR BKSPACE OVER EOF? J TTMBER NO. ERROR BACKING UP OVER EOF AT END TTCPL BRELP X9 RELEASE THE OUTPUT FCT COMPLETE . COMPLETE THIS COMMAND . TTMBER LMJ X11,IOSEDT EDIT THE I/O STATUS ZAP . DISABLE THE FILES J TTCPL COMPLETE THE COMMAND /. . . IOZOOM: INPUT PAGER . . IOZOOM IS CALLED JUST LIKE IOW$, BUT BY AN LMJ X11. . IT SATISFIES REQUESTS FROM AN IN-CORE BUFFER WHEN . POSSIBLE, AND READS IF NECESSARY. IOZOOM DESTROYS . THE REGISTERS: A1, A2, R1 . IOZOOM LA A1,IODRAD,A0 LOAD REQUESTED READ ADDRESS TLE A1,IZFS,A0 LOWER THAN AREA IN CORE ? J IZREAD YES. READ IT IN LA,H1 A1,IOACW,A0 GET LENGTH REQUESTED DSL A1,36 MOVE TO A1, A2 AA,U A2,27 ROUND FOR COVERED DIVIDE DI,U A1,28 CHANGE TO SECTORS AA A1,IODRAD,A0 COMPUTE END ADDRESS TG A1,IZLS,A0 IS IT WITHIN BLOCK ? J IZREAD NO. READ IT IN IZMOVE LA A1,IODRAD,A0 LOAD REQUESTED SECTOR ANA A1,IZFS,A0 COMPUTE BUFFER OFFSET MSI,U A1,28 CHANGE OFFSET TO WORDS AA,U A1,IZDATA,A0 CHANGE TO ADDRESS LXI,U A1,1 LOAD INCREMENT FOR MOVE LA,H2 A2,IOACW,A0 LOAD USER ADDRESS LXI,U A2,1 SET UP INCREMENT LR,H1 R1,IOACW,A0 GET LENGTH SR R1,IOXFER,A0 MAKE TRANSFER LENGTH RIGHT BT A2,,*A1 MOVE DATA TO USER BUFFER J 0,X11 RETURN . IZREAD LR R1,IOACW,A0 SAVE USER ACW LA,U A1,IZDATA,A0 LOAD DATA AREA ADDRESS LXI,U A1,IZBUFL LOAD LENGTH OF DATA AREA SA A1,IOACW,A0 PUT IN ACCESS WORD IOW$ . READ IN DATA LA A1,IODRAD,A0 LOAD USER'S ADDRESS SA A1,IZFS,A0 SET UP FIRST SECTOR IN CORE LA A1,IOXFER,A0 LOAD WORDS TRANSFERRED DSL A1,36 MOVE TO A1, A2 DI,U A1,28 TRUNCATE AND DIVIDE BY 28 AA A1,IODRAD,A0 COMPUTE LAST SECTOR IN CORE + 1 AA,U A1,1 MAKE IT +2 SA A1,IZLS,A0 SET UP LAST SECTOR INDICATOR SR R1,IOACW,A0 RESTORE USER ACCESS WORD LA,H1 A1,IOACW,A0 LOAD USER ACCESS LENGTH DSL A1,36 SHIFT OVER AA,U A2,27 MAKE IT A COVERED DIVIDE DI,U A1,28 GET ACCESS LENGTH IN SECTORS AA A1,IODRAD,A0 ADD START REQUEST ADDRESS TLE A1,IZLS,A0 REQUEST SATISFIED ? SZ IOSTATUS,A0 YES. DON'T ASK QUESTIONS J IZMOVE MOVE THE DATA . . INITIALISE IOZOOM . . LA,U A1,<I/O FCT> . LMJ X11,IZOPN . <RETURN> A2 = NEW FCT . IZOPN SX X11,R2 SAVE THE RETURN POINT BGET IZL ALLOCATE AN IOZOOM BUFFER LR,U R1,IOL LOAD I/O FCT LENGTH LA,U A2,,A0 GET ADDRESS OF NEW FCT LXI,U A0,1 LOAD INCREMENT LA,U A3,,A1 GET OLD FCT ADDRESS LXI,U A3,1 ...WITH AN INCREMENT BT A0,,*A3 COPY I/O FCT BRELP A1 RELEASE THE OLD FCT SZ IZLS,A2 MAKE FIRST REQUEST READ IN LX X11,R2 RELOAD RETURN ADDRESS J 0,X11 RETURN /. . . IOBLOK: OUTPUT BLOCKER . . YOU CALL THIS LIKE A PUT ON IOBB,X9, AND IT BLOCKS UP . THE OUTPUT INTO BLOCKS OF SIZE 'COPLEN'. . . . OPEN BLOCKED OUTPUT . IOBOPN SX X11,R2 SAVE RETURN POINT BGET IBDATA+COPLEN ALLOCATE A BLOCKING BUFFER SA A7,IBMSAD,A0 SET UP STARTING MASS STORAGE ADDRESS LX X5,F2 GET SECOND FCT ADDRESS SA A0,IOBU,X5 SAVE BUFFER ADDRESS LA,U A0,COPLEN LOAD WORDS LEFT IN BUFFER SA A0,IOWB,X5 INITIALISE WORDS LEFT J IBKRET RETURN . . BLOCKED I/O ENTRANCE . IOBLOK SX X11,R2 SAVE RETURN POINT LX,U X1,IBDATA,A1 GET SOURCE DATA START LXI,U X1,1 LOAD INCREMENT IBKTA LX X5,F2 LOAD SECOND FCT ADDRESS LA A0,IBLEN,A1 LOAD LENGTH OF SOURCE LX X2,IOBU,X5 GET BUFFER ADDRESS AX,U X2,IBDATA POINT TO DATA AREA LA,U A2,COPLEN LOAD INITIAL LENGTH OF BUFFER ANA A2,IOWB,X5 SUBTRACT WORDS IN BUFFER ALREADY AX X2,A2 BASE STORE ADDRESS LXI,U X2,1 SET INCREMENT FOR STORE TG A0,IOWB,X5 MORE THAN LEFT IN BUFFER ? LA A0,IOWB,X5 YES, JUST FILL UP BUFFER LA A2,IBLEN,A1 LOAD INITIAL SOURCE LENGTH ANA,U A2,,A0 COMPUTE WORDS LEFT SA A2,IBLEN,A1 UPDATE LENGTH LA A2,IOWB,X5 GET WORDS LEFT IN OUTPUT BUFFER ANA,U A2,,A0 COMPUTE WORDS LEFT IN OUTPUT BUFFER SA A2,IOWB,X5 UPDATE OUTPUT COUNT SA A0,R1 SET LENGTH FOR MOVE JZ A0,IBKNM DON'T MOVE IF ZERO LENGTH BT X2,,*X1 MOVE DATA TO OUTPUT BUFFER IBKNM TZ IOWB,X5 OUTPUT BUFFER FULL ? J IBKRI NO. DON'T WRITE IT YET SA A1,R1 SAVE INPUT BUFFER ADDRESS LA A1,IOBU,X5 GET OUTPUT BUFFER ADDRESS LA,U A0,COPLEN LOAD ITS DATA LENGTH SA A0,IBLEN,A1 PUT LENGTH IN BUFFER SZ IBSTAT,A1 CLEAR STATUS TO NORMAL SZ IBLAST,A1 MARK NOT LAST BUFFER LA A4,IBMSAD,A1 LOAD FILE ADDRESS PUT IOBB,X9 SUBMIT FOR OUTPUT BGET COPLEN+IBDATA ALLOCATE A NEW BUFFER LX X5,F2 RELOAD FCT ADDRESS AA,U A4,COPLEN/28 INCREMENT SECTOR ADDRESS SA A4,IBMSAD,A0 PUT NEW ADDRESS IN BUFFER LA,U A3,COPLEN LOAD LENGTH LEFT SA A3,IOWB,X5 SET WORDS LEFT AS FULL BUFFER SA A0,IOBU,X5 SAVE BUFFER ADDRESS LA A1,R1 RELOAD INPUT BUFFER POINTER IBKRI TZ IBLEN,A1 HAS ENTIRE BUFFER BEEN MOVED ? J IBKTA NO. M-PART THIS REQUEST BRELP A1 YES. RELEASE THE INPUT BUFFER IBKRET LX X11,R2 RELOAD RETURN POINT J 0,X11 RETURN . . CLOSE OUT AND WRITE FINAL BLOCK . IOBCLO SX X11,R2 SAVE RETURN POINT LX X5,F2 GET SECOND FCT ADDRESS LA,U A0,COPLEN LOAD BUFFER LENGTH ANA A0,IOWB,X5 SUBTRACT WORDS LEFT IN THIS BUFFER JZ A0,IBCREL NO DATA STORED. JUST RELEASE IT LA A1,IOBU,X5 LOAD BUFFER ADDRESS SA A0,IBLEN,A1 SET LENGTH OF LAST BUFFER SZ IBSTAT,A1 CLEAR STATUS SZ IBLAST,A1 CLEAR LAST BUFFER PUT IOBB,X9 TRANSMIT BUFFER J IBKRET RETURN TO CALL . IBCREL LA A0,IOBU,X5 LOAD BUFFER ADDRESS BRELP A0 RELEASE THE BUFFER J IBKRET RETURN /. . . ERROR HANDLERS . . THESE MUST UNDO EVERYTHING WROUGHT BY THE ROUTINES . THAT CALL THEM, AND LIKEWISE WILL FREQUENTLY BREAK . WHEN THE MAIN ROUTINES ARE MODIFIED. . fxbb0 la a2,a14 load BSP FCT LMJ X11,BSPERP EDIT ERROR MESSAGE J FXBBX ENTER ERROR ROUTINE . fxbb1 la a2,a14 load BSP FCT addres LMJ X11,BSPERP EDIT ERROR MESSAGE BRELP A12 RELEASE OUTPUT FTI J FXBBX JOIN ERROR PROCESSING . fxbb2 la a2,a14 load BSP FCT address LMJ X11,BSPERP EDIT THE MESSAGE FXBB2A BRELP A12 RELEASE THE FTI SSL A12,18 GET ELEMENT TABLE ADDRESS BRELP A12 RELEASE ELEMENT TABLE J FXBBX ERROR THE COMMAND . fxbb3 la a2,a14 load BSP FCT address LMJ X11,BSPERP PRINT THE MESSAGE FXBB3A LA A0,F2 GET OUTPUT FCT ADDRESS LA A0,IOBU,A0 GET IOBLOK OUTPUT BUFFER BRELP A0 RELEASE THE BUFFER J FXBB2A GO AND DUMP FTI . bsperi la a2,a14 load input file FCT j bsperc enter common code . bspero la a2,a12 load output file FCT bsperc lmj x11,bsperp print BSP error message FXBBX BRELA . RELEASE ALL ALLOCATED BUFFERS LX X9,F2 GET OUTPUT FCT BGET IBDATA ALLOCATE A BUFFER TO TERMINATE SNONZ IBLAST,A0 MARK IT LAST LA,U A1,STERM LOAD TERMINATE STATUS SA A1,IBSTAT,A0 SET STATUS IN BUFFER LA,U A1,,A0 GET ADDRESS OF BUFFER FOR PUT PUT IOBB,X10 TERMINATE OUTPUT P IOBB+QL,X9 WAIT FOR TERMINATION BRELP X9 RELEASE OUTPUT FCT BRELP X10 RELEASE DRIVE FCT BRELP X7 RELEASE INPUT FCT ZAP . MARK THE COMMAND ERRORED COMPLETE . COMPLETE THE COMMAND . FFXB1 LMJ X11,IOSEDT EDIT THE I/O STATUS LX,H2 A0,IOACW,X7 GET THE BUFFER ADDRESS ANA,U A0,IBDATA GET THE BUFFER START BRELP A0 RELEASE THE BUFFER J FXBB3A FINISH UP . ffxb2 la a2,a14 load BSP FCT address LMJ X11,BSPERP EDIT BSP ERROR MESSAGE J FXBB3A ERROR THE COMMAND . FTXB1 BRELP A1 RELEASE THE BLOCK LA,U A0,IOPKT,X7 LOAD PACKET ADDRESS LMJ X11,IOSEDT EDIT I/O ERROR MESSAGE j fxbb2a go error the command . ftxb2 la a2,a14 load BSP FCT address LMJ X11,BSPERP PRINT THE BSP ERROR MESSAGE FTXB2A LA,H2 A0,IOACW,X7 GET THE BUFFER ADDRESS BRELP A0 RELEASE THE BUFFER j fxbb2a go error the command . ftxb3 la a2,a14 load BSP FCT address LMJ X11,BSPERP PRINT THE BSP ERROR MESSAGE BRELP R6 RELEASE THE BUFFER J FTXB2A PROCESS THE ERROR . tfbx1 la a2,a14 load BSP FCT address LMJ X11,BSPERP PRINT BSP ERROR MESSAGE LX X9,,X10 GET DRIVE ADDRESS LX X10,F1 GET INPUT FCT ADDRESS TFBX1A BGET IBDATA ALLOCATE A TERMINATION BUFFER SNONZ IBLAST,A0 SET AS LAST BUFFER LA,U A1,STERM LOAD TERMINATE STATUS SA A1,IBSTAT,A0 SET BUFFER STATUS AS EOF LA,U A1,,A0 SAVE BUFFER ADDRESS LA A2,F2 GET OUTPUT FCT ADDRESS SZ IOOPT,A2 CLEAR OUTPUT MODE PUT IOBB,X9 PUT BUFFER ON OUTPUT QUEUE LA A2,F2 RESTORE OUTPUT FCT ADDRESS P IOBB+QL,A2 WAIT FOR OUTPUT TO TERMINATE LMJ A1,EBUFRL RELEASE THE PROGRAM FILE BUFFERS BRELP X10 RELEASE THE INPUT FCT BRELP F2 RELEASE THE OUTPUT BUFFER BRELP X9 RELEASE THE DRIVE BUFFER ZAP . ERROR THE COMMAND COMPLETE . TERMINATE THIS COMMAND . tfbx2 la a2,a14 load BSP FCT address LMJ X11,BSPERP PRINT BSP ERROR MESSAGE TFBX2A LA A0,CE GET CURRENT ELEMENT LABEL TZ A0 IS ONE ALLOCATED ? BRELP A0 YES. RELEASE IT LA A0,F2 GET SECOND FCT LA A0,IOBU,A0 GET BLOCKING BUFFER ADDRESS BRELP A0 RELEASE IT J TFBX1A CONTINUE ERRORING COMMAND . tfbx3 la a2,a14 load BSP FCT address LMJ X11,BSPERP EDIT BSP ERROR MESSAGE TFBX3A . SZ CE CLEAR THE ELEMENT BUFFER J TFBX2A TERMINATE AND RELEASE BUFFERS . TFPRGF BRELP A1 RELEASE THE BLOCK BUFFER TN A6 IN SPANNED MODE ? J TFPRGF1 NO. NO OTHER BUFFER ALLOCATED BRELP X3 RELEASE THE OLD BUFFER TFPRGF1 R$DIT . SET UP EDITOR E$MSG TFPREMF EDIT PREMATURE EOF MESSAGE LA A0,F1 LOAD FIRST FCT SSL A0,18 GET FCT ADDRESS LMJ X11,FIST APPEND FILE AND STATEMENT J TFBX3A FINISH UP . tfspnr la a2,a14 load BSP FCT address LMJ X11,BSPERP PRINT MESSAGE BRELP X6 RELEASE FIRST BUFFER BRELP R7 RELEASE OTHER BUFFER J TFBX3A WIND OUR WAY OUT . tfbx4 la a2,a14 load BSP FCT address LMJ X11,BSPERP PRINT THE BSP ERROR MESSAGE BRELP R7 RELEASE THE BLOCK BUFFER J TFBX3A GET OUT OF HERE . tfbx5 la a2,a14 load BSP FCT address LMJ X11,BSPERP PRINT THE BSP ERROR MESSAGE J TFBX1A SLINK SILENTLY AWAY . . PURE DATA . WADTRN 'CANNOT TRANSFER WORD ADDRESSABLE !' TFPREMF 'PREMATURE END OF ELEMENT IN !' TFLABRM 'INCORRECT LABEL BLOCK READ FROM !' END