.TITLE START .IDENT /M03X/ ; RUNOFF START-UP INITIALIZATION ; ; AUTHOR: L. WADE 1-JUN-72 ; ; MODIFIED BY ; ; E. POLLACK U. OF W. 19-DEC-73 ; ; D. N. CUTLER 27-JUL-75 ; ; C. H. SPALDING, UNIMATION, APR. '82 ; ; MODIFICATIONS ; ; SIG01 - CLEAN UP WAIT FUNCTION ; SIG02 - RSTS CHANGES ; CHS05 - MAKE PAGE SIZE SETTINGS AVAILABLE TO TASK BUILD ; CHS20 - ADD OPTIONAL-TEXT COMMANDS (ADDED TXTF FLAG) ; CHS38 - DON'T OUTPUT BLANK PAGE AT END OF OUTPUT ; CHS39 - ADD "LAYOUT" COMMAND ; CHS40 - EXPAND "HEADER" COMMAND ; CHS45 - ADD OPTIONAL-TEXT COMMAND-LINE SWITCHES ; CHS49 - ALLOW MULTIPLE INPUT FILES & APPENDING TO OUTPUT ; CHS50 - HAVE TASK EXTEND ITSELF WHEN INDEX/FOOTNOTE BUFFER FULL ; ; MACRO LIBRARY CALLS ; .MCALL CLOSE$,CSI$,CSI$1,CSI$2,EXIT$S,GCMLD$ .MCALL GCML$,GPRT$S,GTSK$S,OPEN$A,OPEN$R,OPEN$W,PRINT$ .IIF NZ EXTEND, .MCALL EXTK$S ;CHS50 CSI$ ;DEFINE CSI CONTROL BLOCK OFFSETS GCMLD$ ; ; LOCAL MACROS ; ; ERROR MESSAGE OUTPUT ; .MACRO MSGPUT NAM CALL $ERMSG .WORD MG'NAM .ENDM ; LOCAL DATA ; CSI CONTROL BLOCK .IF Z MULTIN ;PUT IN ROOT SEGMENT FOR ... ;CHS49 CSIBLK: .BLKB C.SIZE ; ; TASK MEMORY LIMITS LIMIT: .LIMIT ;SIG02 .ENDC ; Z MULTIN ; ... MULTIPLE INPUT FILES ;CHS49 ;+ ; **-$START-START UP INITIALIZATION ;- $START::MOV SP,SPSAV ;SAVE INITIAL STACK POINTER OPEN$W #TTBLK ;OPEN COMMAND OUTPUT FILE CLR TTBLK+F.NRBD ;CLEAR OUTPUT BUFFER ;CHS62 RUNOFF::MOV SPSAV,SP ;RESET STACK POINTER .IIF NZ MULTIN+EXTEND, EXTK$S ;REDUCE TASK TO INSTALLED SIZE ;CHS50 CALL $INITL ;INITIALIZE VARIABLES .IF NZ OPTXSW ;CHS20 MOV #INCL1,R0 ;POINT TO SWITCH VALUES ;CHS20 MOV #NOPVAL,R1 ;NUMBER OF WORDS ;CHS20 5$: CLR (R0)+ ;CLEAR THEM ALL ;CHS20 SOB R1,5$ ;CHS20 .ENDC ; NZ OPTXSW ;CHS20 .IF NZ MULTIN ;CHS49 .ENABL LSB ;CHS49 10$: ;RETURN HERE ON COMMAND ERROR ;CHS49 CLRB INPUTN ;CLEAR MULTIPLE-INPUT COUNT ;CHS49 RUNOF2: ;LOOP TO HERE FOR 2ND... INPUT FILE ;CHS49 .IFTF ;CHS49 CLOSE$ #TTLDMY ;CLOSE INPUT FILE .IFT ;CHS49 TSTNEB INPUTN,35$ ;SKIP IF ANOTHER INPUT FILE ;CHS49 .ENDC ; NZ MULTIN ;CHS49 CLOSE$ #LSTBLK ;CLOSE LISTING FILE GCML$ #TTIBLK ;GET A COMMAND BCC 30$ CMPNEB #GE.EOF,G.ERR(R0),20$ ;NOT TOP LEVEL EOF CLOSE$ #TTBLK CLOSE$ #TTIBLK EXIT$S 20$: MSGPUT CMDE ;COMMAND ERROR BR 10$ 30$: MOV G.CMLD(R0),R1 ;GET BYTE COUNT BEQ 10$ CSI$1 #CSIBLK,TTIBLK+G.CMLD+2,R1 ;CHECK SYNTAX BCS 20$ .IF NZ MULTIN ;CHS49 CSI$2 #CSIBLK,OUTPUT,#SWTBL ;GET OUTPUT SPECIFICATION ;CHS49 BCC 32$ ;CHS49 31$: MSGPUT OFER ;OUTPUT FILE SPEC ERROR ;CHS49 BR 10$ ;CHS49 32$: BITNEB #CS.MOR!CS.WLD,C.STAT(R0),31$ ;MORE OUTPUT FILES? ;CHS49 .IF NZ APNDSW ;CHS49A BITEQ #APNSW,$SWTCH,33$ ;APPEND TO EXISTING FILE? ;CHS49A OPEN$A #LSTBLK,,#CSIBLK+C.DSDS ; YES, OPEN WITH APPEND ACCESS ;CHS49A BR 34$ ;CHS49A .ENDC ; NZ APNDSW ;CHS49A 33$: OPEN$W #LSTBLK,,#CSIBLK+C.DSDS ;OPEN NEW FILE ;CHS49 34$: BCC 35$ ;CHS49 MSGPUT OPER ;OUTPUT FILE OPEN ERROR ;CHS49 BR 10$ ;CHS49 .IFTF ;CHS49 35$: CSI$2 #CSIBLK,INPUT,#SWTBL BCC 50$ 40$: MSGPUT IFER ;INPUT FILE SPEC ERROR 45$: BR 10$ 50$: .IFT ;CHS49 INCB INPUTN ;COUNT INPUT FILE ;CHS49 BITNEB #CS.WLD,C.STAT(R0),40$ ;WILDCARD IN SPEC? ;CHS49 CLRB LOOP ;ASSUME NO MORE INPUT FILES ;CHS49 BITEQB #CS.MOR,C.STAT(R0),55$ ;MORE INPUT FILES? ;CHS49 INCB LOOP ; YES, SET FLAG ;CHS49 55$: ; NO, LEAVE FLAG CLEAR ;CHS49 .IFF ;CHS49 BITNEB #CS.MOR!CS.WLD,C.STAT(R0),40$ ;MORE INPUT FILES? .IFTF ;CHS49 OPEN$R #TTLDMY,,#CSIBLK+C.DSDS BCC 60$ MSGPUT IPER ;INPUT FILE OPEN ERROR JMP 10$ ;CHS49 60$: .IFF ;CHS49 CSI$2 #CSIBLK,OUTPUT,#SWTBL BCC 80$ 70$: MSGPUT OFER ;OUTPUT FILE SPEC ERROR BR 10$ 80$: BITNEB #CS.MOR!CS.WLD,C.STAT(R0),70$ ;MORE OUTPUT FILES? OPEN$W #LSTBLK,,#CSIBLK+C.DSDS BCC 100$ MSGPUT OPER ;OUTPUT FILE OPEN ERROR BR 10$ .ENDC ; -NZ MULTIN ;CHS49 100$: .IF NZ SAVPS ;CHS49B CMPEQB #1,INPUTN,101$ ;ASSUME SWITCH USED ON FIRAT INPUT FILE ;CHS49B BITEQ #PSZSW,$SWTCH,106$ ;/PS USED? ;CHS49B BIC #PSZSW,$SWTCH ;ERASE EVENT ;CHS49B 101$: ;CHS49B .ENDC ; NZ SAVPS ;CHS49B MOV PRMRG,RMARG ;SET RIGHT MARGIN .IIF NZ EXTHDR, MOV PRMRG,HRMARG ;INITIALIZE HEADER RIGHT MARGIN ;CHS40 .IIF NZ XHDRSW, MOV HDRLEN,$HDRSW ;TURN ON HEADERS ;CHS40A .IF NZ LAYOUT ;CHS39 MOV PNLPG,R3 ;GET PAGE LENGTH ;CHS39 BNE 102$ ;SKIP IF NOT /PS::N CASE ;CHS39 .IF NZ TKBPS ;CHS39 MOV INLPG,R3 ;REINITIALIZE INITIAL PAGE LENGTH ;CHS39 .IFF ;CHS39 MOV #INLPG,R3 ;CHS39 .ENDC ; -NZ TKBPS ;CHS39 102$: MOV R3,PNLPG ;STORE AS PERMANENT VALUE ;CHS39 MOV R3,NLPG ; AND PAGE LENGTH ;CHS39 .IFF ;CHS39 TST PNLPG ;SEE IF /PS::N GIVEN BNE 105$ .IF NZ TKBPS ;CHS05 MOV INLPG,PNLPG ;REINITIALIZE INITIAL PAGE LENGTH ;CHS05 .IFF ;CHS05 MOV #INLPG,PNLPG ;REINITIALIZE .ENDC ; -NZ TKBPS ;CHS05 105$: MOV PNLPG,NLPG ;AND PAGE LENGTH .ENDC ; -NZ LAYOUT ;CHS39 .IF NZ OPTXSW ;CHS45 106$: BITEQ #OPTSW,$SWTCH,108$ ;SKIP IF NO OPTIONS SPECIFIED ;CHS45 .IIF NZ MULTIN, BIC #OPTSW,$SWTCH ;ERASE EVENT FOR NEXT INPUT ;CHS49 MOV #INCL1,R2 ;POINT TO TABLE OF INCLUDE VALUES ;CHS45 MOV #1,-(SP) ;SET REAL OPTIONS TO THIS ;CHS45 CALL OPTSET ;SET OPTIONS ACCORDING TO SWITCHES ;CHS45 BCS 45$ ;QUIT IF ERROR (STACK OKAY) ;CHS45 MOV #EXCL1,R2 ;POINT TO TABLE OF EXCLUDE VALUES ;CHS45 CLR -(SP) ;SET REAL OPTIONS TO THIS ;CHS45 CALL OPTSET ;SET OPTIONS ACCORDING TO SWITCHES ;CHS45 BCS 45$ ;QUIT IF ERROR (STACK OKAY) ;CHS45 108$: ;CHS45 .ENDC ; NZ OPTXSW ;CHS45 .IIF NZ MULTIN, CLRB $ULMSW ;ASSUME NOT BACKSPACE MODE ;CHS49 CMPNEB #'B,ULSWT,110$ ;NOT BACKSPACE MODE? COMB $ULMSW ;SET BACKSPACE MODE BR 130$ 110$: .IIF NZ MULTIN, CLRB $ULSSW ;ASSUME NOT SIMULATE MODE ;CHS49 CMPNEB #'S,ULSWT,120$ ;NOT SIMULATE MODE? COMB $ULSSW ;SET SIMULATE SWITCH BR 130$ 120$: .IIF NZ MULTIN, CLRB $ULNSW ;ASSUME NOT DISABLED ;CHS49 CMPEQB #'L,ULSWT,130$ ;LINE MODE? COMB $ULNSW ;SET NO UNDERLINE SWITCH 130$: .IF NZ MULTIN ;CHS49 CMPB INPUTN,#1 ;FIRST INPUT FILE? ;CHS49 BGT 140$ ; NO, SKIP ;CHS49 GTSK$S #LINBF ;GET TASK PARAMETERS ;CHS49 MOV LINBF+G.TSTS,R4 ;GET SIZE OF TASK IN BYTES ;CHS49 GPRT$S ,#LINBF ;GET STARTING VIRTUAL ADDRESS ;CHS49 .IFF ;CHS49 GTSK$S #CSIBLK ;GET TASK PARAMETERS MOV CSIBLK+G.TSTS,R4 ;GET SIZE OF TASK IN BYTES GPRT$S ,#CSIBLK ;GET STARTING VIRTUAL ADDRESS .ENDC ; -NZ MULTIN ;CHS49 ADD $DSW,R4 ;CALCULATE ENDING VIRTUAL ADDRESS MOV R4,XTOP ;INITIAL INDEX POINTERS ;SIG01-2 MOV R4,XBOT ; .. ;SIG01-2 MOV LIMIT+2,R2 ;GET START OF FOOTNOTE AREA ;SIG01-2 DEC R2 ; ;SIG01-2 MOV R2,FOOTP1 ;STORE ;SIG01-2 MOV R2,FOOTP2 ;SIG01-2 MOV R2,FOOTP3 ;IN BOTH POINTERS ;SIG01-2 CALL FFEED ;START AT TOP OF NEW FORM ;SIG01-2 CALL OPRWAT ;WAIT FOR OPERATOR IF REQUESTED TO ;SIG01-2 ;CHS CLR TTBLK+F.NRBD ;CLEAR OUTPUT BUFFER ;SIG01-2 140$: CALL LINSET ;SET UP FOR LINE ;SIG01-2 JMP LGO ;AND INTO MAIN LOOP, LINE INPUT ;SIG01-2 .IIF NZ MULTIN, .DSABL LSB ;CHS49 ENDFIL::CALL OUTPUT ;FLUSH LAST LINE ;SIG01-2 ;SIG01-2 .IF NZ MULTIN ;CHS49 TSTEQB LOOP,5$ ;QUIT IF NO OTHER INPUT FILE ;CHS49 CLR HFIN+4 ;RESET INPUT-LINE COUNTER ;CHS49 JMP RUNOF2 ;LOOP BACK ;CHS49 5$: ;FINISH UP THIS COMMAND ;CHS49 .IF NZ LSTPG ;CHS49 CLR $HDRSW ;CLEAR HEADER PRINT ENABLE ;CHS49 CALL PAGEC ;FORCE A PAGE ;CHS49 CALL OUTPUT ;OUTPUT LAST RECORD ;CHS49 .ENDC ; NZ LSTPG ;CHS49 .ENDC ; NZ MULTIN ;CHS49 .IF Z LSTPG ;CHS38 MOV SP,$EOJSW ;SIGNAL AT END OF JOB ;CHS38 CALL PAGEC ;FORCE OUT ANY FOOTNOTES ;CHS38 .ENDC ; Z LSTPG ;CHS38 ;SIG01-2 .IF NDF RSTS ;SIG01-2 ;SIG01-2 BITEQ #SPLSW,$SWTCH,10$ ;DON'T SPOOL TEXT FILE? ;SIG01-2 PRINT$ #LSTBLK ;SUBMIT FILE TO PRINT SYMBIONT ;SIG01-2 .ENDC 10$: JMP RUNOFF ; LOCAL SUBROUTINE TO PROCESS COMMAND-LINE OPTION SWITCHES ;CHS45 .IF NZ OPTXSW ;CHS45 OPTSET: MOV (R2)+,R3 ;GET SWITCH VALUE ;CHS45 BEQ 20$ ;SKIP IF AT END OF LIST ;CHS45 BLT 10$ ;ERROR CHECK VALUE ;CHS45 CMP R3,#OPTTXT ;CHS45 BGT 10$ ;CHS45 MOVB 2(SP),OPTBL(R3) ;SET TO INCLUDE ;CHS45 BR OPTSET ;GO BACK FOR NEXT VALUE ;CHS45 10$: MSGPUT OPTV ;WARN USER ;CHS45 SEC ;SIGNAL ERROR RETURN ;CHS45 BR 30$ ;CHS45 20$: CLC ;SIGNAL NORMAL RETURN ;CHS45 30$: MOV (SP)+,(SP) ;CLEAN STACK ;CHS45 RETURN ;CHS45 .ENDC ; NZ OPTXSW ;CHS45 .END