.TITLE START .IDENT /M01/ ; ; 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 M01 ; ; AUTHOR: L. WADE 1-JUN-72 ; ; MODIFIED BY: ; ; E. POLLACK U. OF W. 19-DEC-73 ; ; D. N. CUTLER 27-JUL-75 ; ; RUNOFF START UP INITIALIZATION ; ; MACRO LIBRARY CALLS ; .MCALL CLOSE$,CSI$,CSI$1,CSI$2,EXIT$S,GCMLD$,SDRQ$S .MCALL GCML$,GPRT$S,OPEN$R,OPEN$W,PRINT$ 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 ; .IF NDF RSTS LIMIT: .LIMIT ; .IFF .PSECT FOTBF1,GBL LIMIT: .BLKB 2048. ; .PSECT FOTBF2,GBL ELIMT: ; .PSECT .ENDC ;+ ; **-$START-START UP INITIALIZATION ;- $START::MOV SP,SPSAV ;SAVE INITIAL STACK POINTER OPEN$W #TTBLK ;OPEN COMMAND OUTPUT FILE BICB #GE.CLO,TTIBLK+G.MODE ;SET TO LEAVE COMMAND INPUT FILE OPEN RUNOFF::MOV SPSAV,SP ;RESET STACK POINTER CALL $INITL ;INITIALIZE VARIABLES 10$: CLOSE$ #TTLDMY ;CLOSE INPUT FILE CLOSE$ #LSTBLK ;CLOSE LISTING FILE GCML$ #TTIBLK ;GET A COMMAND BCC 30$ CMPB #GE.EOF,G.ERR(R0); TOP LEVEL EOF? BNE 20$ 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$ CSI$2 #CSIBLK,INPUT,#SWTBL BCC 50$ 40$: MSGPUT IFER ;INPUT FILE SPEC ERROR BR 10$ 50$: BITB #CS.MOR!CS.WLD,C.STAT(R0) BNE 40$ OPEN$R #TTLDMY,,#CSIBLK+C.DSDS BCC 60$ MSGPUT IPER BR 10$ 60$: CSI$2 #CSIBLK,OUTPUT,#SWTBL BCC 80$ 70$: MSGPUT OFER ;INPUT FILE SPEC ERROR BR 10$ 80$: BITB #CS.MOR!CS.WLD,C.STAT(R0) BNE 70$ OPEN$W #LSTBLK,,#CSIBLK+C.DSDS BCC 100$ MSGPUT OPER ;INPUT FILE OPEN ERROR BR 10$ 100$: CMPB #'B,ULSWT ;PROCESS UNDERLINE OPTIONS BNE 110$ COMB $ULMSW ;SET BACKSPACE MODE BR 130$ 110$: CMPB #'S,ULSWT BNE 120$ COMB $ULSSW ;SET SIMULATE SWITCH BR 130$ 120$: CMPB #'L,ULSWT BEQ 130$ COMB $ULNSW ;SET NO UNDERLINE SWITCH .IF NDF RSTS 130$: GPRT$S ,#CSIBLK ;GET PARTITION PARAMETERS MOV CSIBLK+2,R4 ;GET SIZE OF PARTITION IN 32W BLOCKS .REPT 6 ASL R4 ;CALCULATE LENGTH IN BYTES .ENDR ADD $DSW,R4 ;CALCULATE ENDING VIRTUAL ADDRESS .IFF 130$: MOV #ELIMT,R4 ;GET ENDING ADDRESS OF DYNAMIC AREA .IFTF MOV R4,XTOP ;INITIAL INDEX POINTERS MOV R4,XBOT ; .. .IFT MOV LIMIT+2,R2 ;GET START OF FOOTNOTE AREA .IFF MOV #LIMIT,R2 ;GET STARTING ADDRESS OF DYNAMIC AREA .ENDC DEC R2 ; MOV R2,FOOTP1 ;STORE MOV R2,FOOTP2 MOV R2,FOOTP3 ;IN BOTH POINTERS BIT #FFDSW,$SWTCH ;FORMFEED OR LF'S? BEQ 160$ ;LINEFEEDS, REQUEST POSITIONING MOV #FF,R1 ;OUTPUT A FORMFEED CALL FOUT ; 150$: CALL LINSET ;SET UP FOR LINE CLR TTBLK+F.NRBD ;CLEAR OUTPUT BUFFER JMP LGO ;AND INTO MAIN LOOP, LINE INPUT 160$: MSGPUT POST ;OUTPUT POSITIONING MESSAGE CALL TTC4N ;WAIT FOR A CHARACTER BR 150$ ;AND GO. ENDFIL::CALL OUTNJ ;FINISH LAST LINE CALL FORM ;TO TOP OF FORM CALL OUTPUT ;FLUSH IT 10$: MOV #LSTBLK,R0 .IF NDF RSTS BIT #SPLSW,$SWTCH ;SPOOL TEXT FILE? BEQ 20$ ;IF EQ NO BITB #FD.DIR,F.RCTL(R0) ;CAN'T SPOOL AN NON DIRECTORY DEVICE BEQ 20$ ;SO DON'T TRY BITB #FD.REC,F.RCTL(R0) ;OR IF ITS A TERMINAL OR PRINTER BNE 20$ ;ITS ALREADY THERE SO DON'T SPOOL TST F.BDB(R0) ;IS FILE STILL OPEN ? BEQ 5$ ;IF NOT OPEN, TOO LATE TO SPOOL 5$: TST SPDEV ;DID HE SPECIFY SPOOLING DEVICE ? BEQ 1$ ;IF NOT, USE DEFAULT DEVICE MOV R0,-(SP) MOV R1,-(SP) MOV R2,-(SP) MOV #SPDEV+2,R0 ;DEVICE # (IN ASCII) -> R0 JSR PC,$COTB ;CONVERT TO BINARY NUMBER MOV R1,SPDEV+2 ;AND FILL BACK IN DEV SPEC MOV (SP)+,R2 MOV (SP)+,R1 MOV (SP)+,R0 BR 2$ ;SPOOL TO THAT DEVICE 1$: MOV #DEFDEV,SPDEV ;ELSE FILL IN DEFAULT DEVICE MOV #DEFNUM,SPDEV+2 ;AND FILL IN DEVAULT DEVICE NUMBER 2$: MOV R0,-(SP) MOV R1,-(SP) MOV #SDRQBL,R1 ;POINT TO START OF SPOOLING BLOCK MOV SPDEV,(R1)+ ;FILL IN DEVICE NAME MOVB SPDEV+2,(R1)+ ;AND NUMBER TSTB (R1)+ ;DEFAULT TO PROGRAM PRIORITY MOVB FORMTP,R0 ;FILL IN FORMS TYPE ASH #5,R0 ;AND PUT IN RIGHT BIT POSTION BIC #177740,R0 ;JUST TO BE SURE ADD COPYCT,R0 ;AND ADD IN NUMBER OF COPIES MOVB R0,(R1)+ CLRB (R1)+ ;ALIGN TO WORD AGAIN MOV #LSTBLK,R0 ;GET LISTING FDB ADD #F.FNB,R0 ;BUMB TO FILE NAME BLOCK MOV N.DVNM(R0),(R1)+ ;FILL IN DEVICE NAME MOV N.UNIT(R0),(R1)+ ;AND UNIT # MOV N.DID(R0),(R1)+ ;AND NOW THE DIRECTORY ID MOV N.DID+2(R0),(R1)+ MOV N.DID+4(R0),(R1)+ MOV N.FNAM(R0),(R1)+ ;AND NOW THE FILE NAME MOV N.FNAM+2(R0),(R1)+ MOV N.FNAM+4(R0),(R1)+ MOV N.FTYP(R0),(R1)+ ;AND FINALLY THE FILE TYPE MOV N.FVER(R0),(R1)+ ;AND FINALLY THE VERSION NUMBER CLOSE$ #LSTBLK ;CLOSE THE FILE BCS 11$ ;BR IF CLOSE FAILED SDRQ$S #SPRNAM,,,,,#SDRQBL ;DO SEND REQUEST FOR SPR... 11$: MOV (SP)+,R1 MOV (SP)+,R0 .ENDC 20$: JMP RUNOFF ; ;ADDED INFO FOR MRH SPOOLING SWITCHES ; ;THE BUFFER FOR SEND/REQ TO SPR... SDRQBL: .ASCII /LP/ ;ASCII DEVICE NAME .BYTE 0,50 ;UNIT NUMBER, PRIORITY COPY: .BYTE 1,0 ;NUMBER OF COPIES AND FORMS & SAVE INDICATOR FID: .BLKW 10. ;ROOM FOR FID FROM FDB ; SPRNAM: .RAD50 /SPR.../ ;RAD 50 NAME OF REQUESTED TASK ; ;DEFAULT DEVICE NAME AND NUMBER DEVNAM: .ASCII /LS/ DEVNUM: .WORD 0 .END