.TITLE QUEUE .IDENT /RJDK02/ ; 2ND LEVEL OF QUEUE SPOOLING -- FILE BASED TO REPLACE EXEC POOL SPACE BASED ; SYSTEM INCLUDING PRT... e.t.c. ; .MCALL SETF$S ; .MCALL ALUN$S,FDBDF$,FDAT$A,FDRC$A,FDOP$A,FSRSZ$ .MCALL QIOW$S,CSI$,CSI$1,CSI$2,CSI$ND,CSI$SW,CSI$SV .MCALL DIR$,GTSK$,NMBLK$,FINIT$,OPEN$U,EXIT$S,CLOSE$ .MCALL PUT$R,GET$R,GCML$,GCMLB$ .MCALL RQST$ .MCALL OPEN$R,OPEN$M GTTSK: GTSK$ GTBUF ;REQUIRED FOR OWN UIC = 00-17 WD 07 ; GTBUF: .BLKW 20 MASK: .WORD 0 ;OPTIONS PASSED OUT SPRMSK: .WORD 0 ;WHICH SPOOLER ARE WE QUEING TO PRIORT: .WORD 0 ;PRIORITY OF REQUEST COPIES: .WORD 0 ; # OF COPIES. SPEED: .WORD 0 ;ALSO USED FOR ANY OTHERS TO OCCUPY THIS BYTE SPTBL: CSI$SV DECIMAL,SPEED,2 ;DECLARE 1 DEC PARAM /SP:N CSI$ND COTBL: CSI$SV DECIMAL,COPIES,2 ;& COPIES /CO:N CSI$ND PRTBL: CSI$SV DECIMAL,PRIORT,2 ;&PRIORITY /PR:N CSI$ND ; bit set in priority for currently being done procsd=100000 ; ; bits in mask passed as flags to despoolers ; DEBIT=100000 CMBIT=040000 NFBIT=020000 ; DELETE FILE, COMPATIBLE FILE, NO FORM FEEDS ; CONTROL FIELDS PRBIT=100000 SPBIT=040000 COBIT=020000 LIBIT=010000 RMBIT=004000 INBIT=002000 ABBIT=1000 ; SET IN SPRMSK ; SPOOLER TYPE SET IN SPRMSK BABIT=1 LABIT=2 LPBIT=4 HPBIT=10 PLBIT=20 SWTBL: CSI$SW DE,DEBIT,MASK,SET ;DELETE AFTER SPOOLING CSI$SW CM,CMBIT,MASK,SET ;COMPATIBLE PLOT FILES CSI$SW NF,NFBIT,MASK,SET ;NO FORM FEEDS CSI$SW BA,BABIT,SPRMSK,SET ;/BA = BATCH CSI$SW LA,LABIT,SPRMSK,SET ;/LA = LA36 CSI$SW LP,LPBIT,SPRMSK,SET ;/LP = ANELEX CSI$SW HP,HPBIT,SPRMSK,SET ;/HP = HP PLOTTER CSI$SW PL,PLBIT,SPRMSK,SET ;/PL = CIL PLOTTER CSI$SW CO,COBIT,SPRMSK,SET,,COTBL CSI$SW SP,SPBIT,SPRMSK,SET,,SPTBL CSI$SW PR,PRBIT,SPRMSK,SET,,PRTBL CSI$SW IN,INBIT,SPRMSK,SET ;INSERT ENTRY CSI$SW LI,LIBIT,SPRMSK,SET ;LIST ENTRIES(DEFAULT) CSI$SW RM,RMBIT,SPRMSK,SET ;REMOVE ENTRY CSI$SW AB,ABBIT,SPRMSK,SET ;ABORT ENTRY CSI$ND PLDFNB: NMBLK$ PLOTFILE,PLT,0,SY,0 BADFNB: NMBLK$ BATCHJOB,BAT,0,SY,0 CSI$ CSIBLK: .BLKB C.SIZE GCLBLK: GCMLB$ 1,QUE,,1 FSRSZ$ 1 .PSECT SPRDSD: .WORD 4,SPRDEV,5,SPRUIC,12.,SPRFIL SPRDEV: .ASCII /SY0:/ SPRUIC: .ASCII /[1,7]/ SPRFIL: .ASCII /QUEUEMAN.SYS/ SYN: .ASCIZ /QUE -- *FATL* -- SYNTAX ERROR/ NOFIL: .ASCIZ /QUE -- *DIAG* -- NO SUCH FILE(S)/ QERR: .ASCIZ /QUE -- *FATL* -- ERROR ACCESSING QUE MANAGER/ PRV: .ASCIZ /QUE -- *FATL* -- PRIVILEGE VIOLATION/ ENT: .ASCIZ /QUE -- *DIAG* -- ENTRY NOT FOUND/ PROC: .ASCIZ /QUE -- *DIAG* -- ENTRY BEING PROCESSED/ .EVEN FCOUNT: .WORD 0 RMCNT: .WORD 0 DONE: .WORD 0 RQST: RQST$ ...... FDB: FDBDF$ FDRC$A FD.RAN!FD.PLC,LINE,64. FDOP$A 2,SPRDSD,,FO.UPD NDB: NMBLK$ PLOTFILE,PLT,,SY ;FOR PARSE OF FILES.. LINE: .BLKB 64. OUTBUF: .BLKB 66. ;OUT BUFFER FOR LISTING LISTLN: MOV #OUTBUF,R0 MOV R0,-(SP) MOV #19.,R1 1$: MOV #" ,(R0)+ SOB R1,1$ MOV #26.,R1 MOV R5,R2 ADD #38.,R2 2$: MOVB (R2)+,(R0)+ BEQ 3$ SOB R1,2$ 3$: CLRB (R0)+ ; LINE IS NOW CLEARED FOR LISTING MOV (SP)+,R0 ;POINT BACK TO START OF LINE MOV (R5),R1 CALL $C5TA TSTB (R0)+ ;LEAVE A SPACE AFTER SPLR MOV 4(R5),R1 ;GET PRI BPL 4$ BIC #100000,R1 MOVB #'*,(R0) 4$: TST (R0)+ ;SHOULD BE WORD ALIGNED! MOV #33012,R2 CALL $CBTA TSTB (R0)+ MOV 6(R5),R3 MOV R0,R2 MOV #1,R4 CALL .PPASC TSTB (R2)+ ; NOW SIMPLY ADD IN FLAGS MOV 10(R5),R1 BIT #DEBIT,R1 BEQ 5$ MOVB #'D,(R2)+ MOVB #'E,(R2)+ TSTB (R2)+ 5$: BIT #CMBIT,R1 BEQ 6$ MOVB #'C,(R2)+ MOVB #'M,(R2)+ TSTB (R2)+ 6$: BIT #NFBIT,R1 BEQ 7$ MOVB #'N,(R2)+ MOVB #'F,(R2)+ TSTB (R2)+ 7$: MOV #OUTBUF,R0 ;FALL THRU TO TYPE IT TYPMSG: MOV R0,R1 ;ROUTINE TO TYPE A MESSAGE ADDR IN R0 1$: TSTB (R1)+ BNE 1$ DEC R1 SUB R0,R1 QIOW$S #IO.WLB,#3,#3,,,, RTS PC SYNERR: MOV #SYN,R0 JSR PC,TYPMSG START: FINIT$ ALUN$S #3,#"TI,#0 ALUN$S #1,#"TI,#0 DIR$ #GTTSK NEXT: GCML$ #GCLBLK BCS 1$ TSTB GCLBLK+G.ERR BEQ 2$ 1$: EXIT$S 2$: CLR MASK CLR PRIORT CLR COPIES CLR SPEED CLR SPRMSK MOV GCLBLK+G.CMLD,CSIBLK+C.CMLD BEQ NEXT MOV GCLBLK+G.CMLD+2,CSIBLK+C.CMLD+2 CSI$1 #CSIBLK BCS SYNERR TST CSIBLK+C.CMLD BEQ NEXT 3$: CSI$2 #CSIBLK,OUTPUT,#SWTBL BCS SYNERR BITB #CS.EQU,CSIBLK+C.STAT BNE SYNERR BIT #ABBIT,SPRMSK ;IS ABORT BNE 35$ BIT #INBIT!RMBIT,SPRMSK BEQ 30$ ;NO THEN IS LIST MOV #FDB,R0 MOV #NDB,R1 MOV #CSIBLK+C.DSDS,R2 MOV #PLDFNB,R3 BIT #BABIT,SPRMSK BEQ 4$ MOV #BADFNB,R3 4$: CALL .PARSE BCS SYNERR CLR FCOUNT 10$: MOV #FDB,R0 MOV #NDB,R1 CALL .FIND BCS 20$ INC FCOUNT CALL SPOOLR BIT #RMBIT,SPRMSK BNE 11$ CALL SPOOL BR 12$ 11$: CALL REMOVE 12$: BIT #NB.SVR!NB.STP!NB.SNM,N.STAT+NDB BNE 10$ 20$: TST FCOUNT BNE 21$ MOV #NOFIL,R0 CALL TYPMSG 21$: BITB #CS.MOR,CSIBLK+C.STAT BEQ NEXT BR 3$ 30$: CALL LISTQ BR NEXT 35$: BIT #HPBIT,SPRMSK BEQ 37$ MOV #54.,R1 BR 40$ 37$: BIT #PLBIT,SPRMSK BEQ 41$ MOV #55.,R1 40$: SETF$S R1 41$: JMP NEXT ; ROUTINE TO SET UP SPOOL RECORD ; FORMAT ;1&2 DESPOOLER NAME (RAD50) HP.... LP.... LA.... PL.... BA.... ;3 PRIORITY ;4 UIC OF SPOOL REQUESTOR ;5 FLAGS ;6 COPIES (LOW BYTE) SPEED (HIGH) ;7&8&9 N.FID ;10&11&12 N.FNAM ;13 N.FSEQ ;14 N.FVER ;15&6&7 N.DID ;18 N.DVNM ;19 N.UNIT ;20-32 TEXT HEADER SPOOLR: MOV #LINE,R5 MOV SPRMSK,R1 BIT #BABIT,R1 BEQ 1$ MOV #<^RBA.>,R2 BR 6$ 1$: BIT #LABIT,R1 BEQ 2$ MOV #<^RLA.>,R2 BR 6$ 2$: BIT #LPBIT,R1 BEQ 3$ MOV #<^RLP.>,R2 BR 6$ 3$: BIT #HPBIT,R1 BEQ 4$ MOV #<^RHP.>,R2 BR 6$ 4$: BIT #PLBIT,R1 BEQ 5$ MOV #<^RPL.>,R2 BR 6$ 5$: MOV #<^RLP.>,R2 ;DEFAULT TO ANELEX LP.... 6$: MOV R2,(R5)+ MOV #<^R...>,(R5)+ MOV PRIORT,(R5)+ MOV GTBUF+16,(R5)+ MOV MASK,(R5)+ MOVB COPIES,(R5)+ MOVB SPEED,(R5)+ ; COPIED IN DESPOOLER NAME .. PRIORITY .. UIC OF REQUESTOR ; FLAGS ... COPIES AND SPEED ... ; NOW FILE INFO MOV #NDB,R0 MOV #10,R1 10$: MOV (R0)+,(R5)+ SOB R1,10$ CMP (R0)+,(R0)+ ;SKIP N.STAT&N.NEXT MOV #5,R1 11$: MOV (R0)+,(R5)+ SOB R1,11$ MOV CSIBLK+C.DSDS+4,R1 BEQ 15$ MOV CSIBLK+C.DSDS+6,R0 12$: MOVB (R0)+,(R5)+ SOB R1,12$ 15$: MOV #NDB+N.FNAM,R4 MOV R5,R0 ;C5TA WRITE @ R0 MOV (R4)+,R1 CALL $C5TA MOV (R4)+,R1 CALL $C5TA MOV (R4)+,R1 CALL $C5TA MOVB #'.,(R0)+ MOV (R4)+,R1 CALL $C5TA MOVB #';,(R0)+ MOV (R4),R1 CLR R2 CALL $CBOMG 16$: CMP R0,#LINE+64. BHIS 17$ MOVB #40,(R0)+ BR 16$ 17$: RTS PC .MCALL MRKT$S,WTSE$S QF: MRKT$S #1,#5,#1 WTSE$S #1 REMOVE: OPEN$M #FDB BCS QF CLR RMCNT 1$: GET$R #FDB BCS 15$ MOV FDB+F.NRBD+2,R5 MOV R5,R4 MOV #LINE,R3 TST (R4) BEQ 1$ CMP (R4)+,(R3)+ BNE 1$ ;WRONG SPOOLER CMP (R4)+,(R3)+ ;AND AGAIN BNE 1$ ADD #10,R4 ADD #10,R3 MOV #13.,R1 2$: CMP (R3)+,(R4)+ BNE 1$ SOB R1,2$ INC RMCNT ; HERE FILE IS CORRECT ; IS HE USER / PRIV? CMP LINE+6,6(R5) BEQ 10$ ;YES CMP LINE+6,#4400 ;YES PRIV BLOS 10$ MOV #PRV,R0 CALL TYPMSG BR 15$ 9$: MOV #PROC,R0 CALL TYPMSG BR 15$ 10$: TST 4(R5) BMI 9$ MOV #32.,R1 11$: CLR (R5)+ SOB R1,11$ ;ANNUL RECORD dec FDB+F.RCNM+2 PUT$R #FDB 15$: CLOSE$ #FDB TST RMCNT BNE 16$ MOV #ENT,R0 CALL TYPMSG 16$: RTS PC QFAIL: MOV #QERR,R0 CALL TYPMSG JMP NEXT .MCALL DIR$ LQ: MRKT$S #1,#5,#1 WTSE$S #1 LISTQ: CLR DONE OPEN$R #FDB BCS LQ 1$: GET$R #FDB BCS 2$ MOV FDB+F.NRBD+2,R5 TST (R5) BEQ 1$ INC DONE CALL LISTLN BR 1$ 2$: CLOSE$ #FDB TST DONE BNE 3$ MOV #NOFIL,R0 CALL TYPMSG 3$: RTS PC QS: MRKT$S #1,#5,#1 WTSE$S #1 SPOOL: OPEN$U #FDB BCS QS CLR DONE 1$: GET$R #FDB BCS 10$ MOV FDB+F.NRBD+2,R5 CMP (R5),LINE BNE 2$ INC 4(R5) DEC FDB+F.RCNM+2 PUT$R #FDB BR 1$ 2$: TST DONE BNE 1$ TST (R5) BNE 1$ INC DONE DEC FDB+F.RCNM+2 PUT$R #FDB,#LINE BR 1$ 10$: TST DONE BNE 11$ PUT$R #FDB,#LINE 11$: CLOSE$ #FDB MOV LINE,RQST+R.QSTN CMP LINE,#<^RBA.> BEQ 12$ DIR$ #RQST 12$: RTS PC .END START