.TITLE START .IDENT /M02.2/ ;**-1 ; ; COPYRIGHT (C) 1976 ; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. ; ; THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A ; SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLU- ; SION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR ANY ; OTHER COPIES THEREOF, MAY NOT BE PROVIDED OR OTHERWISE MADE ; AVAILABLE TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH SYSTEM ; AND TO ONE WHO AGREES TO THESE LICENSE TERMS. TITLE TO AND ; OWNERSHIP OF THE SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC. ; ; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT ; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL ; EQUIPMENT CORPORATION. ; ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS ; SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. ; ; VERSION M02 ; ; AUTHOR: L. WADE 1-JUN-72 ; ; MODIFIED BY: ; ; E. POLLACK U. OF W. 19-DEC-73 ; ; D. N. CUTLER 27-JUL-75 ; ; RAY VAN TASSLE 13 Nov 1980 ;**NEW** ; DEFAULT OUTPUT IS SAME FILENAME AS INPUT (EXCEPT EXTENT) ;**NEW** ; IF NO OUTPUT SPECIFIED (NO = IN THE COMMAND LINE), OUTPUT ;**NEW** ; DEVICE IS TI: ;**NEW** ; SIG MODIFICATIONS ; SIG01 CLEAN UP WAIT FUNCTION ; SIG02 RSTS CHANGES ; ; B.F.BRUCE / CAMB. COMPUTER ASSTS. AUG 81 /BT SWITCH MOD ; ; RUNOFF START UP INITIALIZATION ; ; MACRO LIBRARY CALLS ; .MCALL CLOSE$,CSI$,CSI$1,CSI$2,EXIT$S,GCMLD$,FINIT$ .MCALL GCML$,GPRT$S,GTSK$S,OPEN$R,OPEN$W,PRINT$ .MCALL GLUN$S,QIOW$S ;**NEW** STATSAV: .WORD 0 ;**NEW** 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 ; CSIBLK: .BLKB C.SIZE ; ; ; TASK MEMORY LIMITS ; LIMIT: .LIMIT ;SIG02 ;+ ; **-$START-START UP INITIALIZATION ;- $START::MOV SP,SPSAV ;SAVE INITIAL STACK POINTER FINIT$ OPEN$W #TTBLK ;OPEN COMMAND OUTPUT FILE RUNOFF::MOV SPSAV,SP ;RESET STACK POINTER QIOW$S #IO.DET,#5,#5 ; DETACH IT (IF IT IS) ;**NEW** CALL $INITL ;INITIALIZE VARIABLES 10$: CLOSE$ #TTLDMY ;CLOSE INPUT FILE CLOSE$ #LSTBLK ;CLOSE LISTING FILE CLOSE$ #WRKFDB ;close work 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 25$: 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$ MOVB CSIBLK+C.STAT,STATSAV ; SOMEONE IS WIPING OUT CS.EQU ;**NEW** MOVB #CS.INP,C.TYPR(R0) ;**NEW** BITB #CS.EQU,STATSAV ;**NEW** BNE 35$ ;**NEW** MOVb #CS.OUT,C.TYPR(R0) ; NO OUTPUT SPECIFED ;**NEW** 35$: CSI$2 #CSIBLK,,#SWTBL ;**NEW** BCC 50$ ;**-1 40$: MSGPUT IFER ;INPUT FILE SPEC ERROR BR 10$ 50$: BITNEB #CS.MOR!CS.WLD,C.STAT(R0),40$ ;MORE INPUT FILES? OPEN$R #TTLDMY,,#CSIBLK+C.DSDS bcs 55$ ;**NEW** ; DEFAULT OUT FILENAME = INFILENAME ;**NEW** MOV TTLDMY+F.FNB+N.FNAM+0,LSTFIL+N.FNAM+0 ;**NEW** MOV TTLDMY+F.FNB+N.FNAM+2,LSTFIL+N.FNAM+2 ;**NEW** MOV TTLDMY+F.FNB+N.FNAM+4,LSTFIL+N.FNAM+4 ;**NEW** ; IF NO OUTPUT FILE, THE OUTPUT GOES TO TI ;**NEW** MOV #"SY,LSTFIL+N.DVNM ;**NEW** BITB #CS.EQU,STATSAV ;**NEW** BNE 60$ ; JMP IF BOTH ARE GIVEN ;**NEW** MOV #"TI,LSTFIL+N.DVNM ; USE TI ;**NEW** CLR CSIBLK+C.DSDS ;**NEW** BR 85$ ;**NEW** 55$: ;**NEW** MSGPUT IPER ;**-1 BR 25$ 60$: CSI$2 #CSIBLK,OUTPUT,#SWTBL BCC 80$ 70$: MSGPUT OFER ;INPUT FILE SPEC ERROR BR 25$ 80$: BITNEB #CS.MOR!CS.WLD,C.STAT(R0),70$ ;MORE OUTPUT FILES? 85$: ;**NEW** OPEN$W #LSTBLK,,#CSIBLK+C.DSDS BCC 100$ MSGPUT OPER ;INPUT FILE OPEN ERROR JMP 10$ ;**NEW** 100$: MOV PRMRG, RMARG ;SET RIGHT MARGIN ;**-1 TST PNLPG ;SEE IF /PS::N GIVEN BNE 105$ MOV #INLPG, PNLPG ;REINITIALIZE 105$: MOV PNLPG, NLPG ;AND PAGE LENGTH MOV #ILMRG,STDLM ; "STANDARD LM" FROM TKB DEFINTION ;**NEW** TST DLMVAL ;**NEW** BMI 103$ ;**NEW** ;**NEW** MOV DLMVAL,STDLM ; SET "STANDARD LM" AS SPECIFIED ON SWITCH ;**NEW** 103$: MOV STDLM,LMARG ; SET CURRENT LM TO STANDARD LM ;**NEW** CMPNEB #'B,ULSWT,110$ ;NOT BACKSPACE MODE? COMB $ULMSW ;SET BACKSPACE MODE BR 130$ 110$: CMPNEB #'S,ULSWT,120$ ;NOT SIMULATE MODE? COMB $ULSSW ;SET SIMULATE SWITCH BR 130$ 120$: CMPEQB #'L,ULSWT,130$ ;LINE MODE? COMB $ULNSW ;SET NO UNDERLINE SWITCH ; BOOK TITLING REVERSES TITLE AND PAGE NO. ON ALTERNATE PAGES ; NORMALLY ODD PAGES HAVE PAGE NO. ON THE RIGHT. /BT:R REVERSES THIS. ; /BT OR /BT:N (OR /BT:ANYTHING) IS NORMAL. 130$: BITEQ #BKTISW,$SWTC2,131$ ; BOOK TITLING NOT REQUESTED? CMPNEB #'R,BKTITP,131$ ; REVERSE SPECIFIED? BIC #BKTNSW,$SWTC2 ; YES, CLEAR NORNAL SWITCH 131$: GTSK$S #CSIBLK ;GET TASK PARAMETERS MOV CSIBLK+G.TSTS,R4 ;GET SIZE OF PARTITION IN BYTES GPRT$S ,#CSIBLK ;GET STARTING VIRTUAL ADDRESS ADD $DSW,R4 ;CALCULATE ENDING VIRTUAL ADDRESS MOV #XBOT,R2 ;GET START OF FOOTNOTE AREA ;SIG01-2 MOV R2,WKSTOP ;start to make top SUB R2,R4 ;size of extra space BIC #777,R4 ;round down BPL 134$ ;we do not allow workspace over 16K words ;...would require two reads/writes (FCS ;...limitation) and we can only go up to ;...16.5 anyway before hitting FCSRES. MOV #77000,R4 ;max. allowed workspace size 134$: MOV R4,WKBYSZ ;save sizein bytes ADD R4,WKSTOP ;top SWAB R4 ASR R4 BIC #177600,R4 ;size in sectors MOV R4,WKSCSZ ;save sector size CALL INTWKF ;initialize work file BCC 132$ MSGPUT WKFL JMP 10$ 132$: CALL LINSET ;SET UP FOR LINE ;SIG01-2 133$: CALL OPRWAT ;WAIT FOR OPERATOR IF REQUESTED TO ;SIG01-2 CLR TTBLK+F.NRBD ;CLEAR OUTPUT BUFFER ;SIG01-2 ;**NEW** ; ATTACH THE OUTPUT DEVICE IF IT IS RECORD-ORIENTED ;**NEW** GLUN$S #5,#OUTPRM ;**NEW** BIT #DV.REC,OUTPRM+4 ;**NEW** BEQ 135$ ;**NEW** QIOW$S #IO.ATT,#5,#5 ; ATTACH IT ;**NEW** CALL FFEED 135$: ;**NEW** JMP LGO ;AND INTO MAIN LOOP, LINE INPUT ;SIG01-2 ENDFIL::CALL OUTPUT ;FLUSH LAST LINE ;SIG01-2 TSTEQ NSLA120,5$ MOVB #'1,LPIMSG+2 ; RESET THE LA120 MOVB #DFLCPI,CPIMSG+2 CALL SET120 CALL OUTPUT ; make sure to put it out 5$: CLR NSLA120 QIOW$S #IO.DET,#5,#5 ; DETACH IT (IF IT IS) 6$: ;**-1 .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 .MCALL OPNT$D,WRITE$,WAIT$ INTWKF: ;initializes work file MOV #1,R2 MOV R2,XISECT ;start for index I ADD R4,R2 MOV R2,XJSECT ADD R4,R2 MOV R2,XKSECT ADD R4,R2 MOV R2,XLSECT ADD R4,R2 MOV R2,XMSECT ;for overall index file ADD R4,R2 MOV R2,FNSECT ;for footnotes ADD R4,R2 MOV R2,TCSECT ;table of contents ADD R4,R2 DEC R2 ;size of work file (in blocks) MOV R2,WRKFDB+F.CNTG ;specify size for open ;...try contiguous first MOV #WRKFDB,R0 OPNT$D R0 ;open temporary file BCC 10$ ;skip if OK CMPB F.ERR+WRKFDB,#IE.DFU ;device full? BNE 5$ ;if not, don't bother discontiguous NEG WRKFDB+F.CNTG ;try non-contiguous next OPNT$D R0 BCC 10$ 5$: SEC RETURN 10$: MOV WKBYSZ,F.BKDS(0) ;size of read/write MOV #XBOT,F.BKDS+2(0) ;address MOV #5,R5 ;five indices MOVB #'I,DFIDXT+6 20$: MOV WKSTOP,XBOT ;set top CLR XFIRST CLR XFIRST+2 MOVB DFIDXT+6,DXAPN ;set appendix name MOVB #1,DXTYP MOV #7,R2 ;sixe of default CMP #1,R5 ;last index? BNE 30$ SUB #2,R2 30$: MOV #DFIDXT,R0 ;default title MOV R2,XTITLN ;set length MOV #XTITLE,R1 40$: MOVB (0)+,(1)+ DEC R2 BNE 40$ WRITE$ #WRKFDB ;write file BCS 5$ WAIT$ R0 BCS 5$ INCB DFIDXT+6 ;I->J->K, etc. DEC R5 BNE 20$ MOV #FOOTP3+1,FOOTP1 MOV FOOTP1,FOOTP2 ;initialize footnotes MOV FOOTP1,FOOTP3 MOV WKSTOP,FOOTP2+2 WRITE$ #WRKFDB BCS 5$ WAIT$ R0 BCS 5$ MOV WKSTOP,XBOT ;top of toc storage CLR XFIRST MOV #XFIRST,XFIRST+2 CLRB DXTYP MOVB #'T,DXAPN MOV #TOCTTL,R0 MOV #XTITLE,R1 MOV #TOCTLN,R2 MOV R2,XTITLN ;length 70$: MOVB (0)+,(1)+ DEC R2 BNE 70$ MOV TCSECT,CWSECT ;set current sector CLC RETURN TOCTTL: .ASCII $Table of Contents$ TOCTLN = . - TOCTTL DFIDXT: .ASCII $Index I$ .EVEN .END