.TITLE SPQ DISPLAY SPOOL QUEUE .IDENT /01.02/ ;+ ; DISPLAYS THE CONTENTS OF THE SPOOL QUEUE ON CO: ; ; J. SCHRIESHEIM 22-FEB-77 ; VERSION 1 ; *** MODIFIED BY D. MICHAUD TO PRINT EMPTY QUEUE MESSAGE 6/27/77 ; *** MODIFIED BY D. MICHAUD TO PRINT #PAGES OF SPOOLED FILES 6/29/78 ; NOTE: SYMBOL PBLOCK ASSUMES THERE ARE PBLOCK BLOCKS/PAGE OF PRINTED TEXT, ; AND THE NUMBER OF PAGES PER FILE INCLUDE 3 EXTRA PAGES PRODUCED ; BY PRT. ; ; TO ASSEMBLE: ; [X,X]SPQ=[1,1]EXEMC/ML,[200,200]RSXMC/PA:1,[X,X]SPQ ;- .MCALL TCBDF$,CALL,RETURN,QIOW$,DIR$,EXIT$S,GMCR$ .MCALL FSRSZ$,FDBDF$,OFID$R,ALTP$S,CLOSE$,FDOP$A ; TCBDF$ ; DEFINE TCB OFFSETS FSRSZ$ 0 ; NO FSR NEEDED ;+ ; LOCAL DATA ;- PBLKS = 4 ; 4 BLOCKS/PAGE EXTRA = 2 ; EXTRA PAGES/FILE FOR BANNER MAX = 30. ; PRINT UP TO MAX PACKETS FDB: FDBDF$ FDOP$A 1,,FA.SHR ; OPEN FILES FOR SHARED MYPRI: .WORD 0 ; HOLDS SPQ'S RUNNING PRIORITY PAGES: .BLKW MAX ; NEED MAX WORDS TO HOLD FILE PAGE SIZES STBLK: .BLKW 5 ; STATISTICS BLOCK BUFFER NAME: .RAD50 /PRT.../ ; SPOOLER TASKNAME PKTCNT: .WORD 0 ; PACKET COUNT BUFF: .BLKW MAX*12. ; ALLOCATE SPACE FOR UP TO MAX ENTRIES GMCR: GMCR$ ; NEEDED BECAUSE INSTALLED AS MCR TASK OSTRNG=GMCR+G.MCRB ; OVERLAY OUTPUT STRING ON MCR BUFFER HOLE: .BLKW 10 ; NEED SOME EXTRA SPACE QIODPB: QIOW$ IO.WVB,5,1,,,, ; QIO TO LUN 5 ;+ ; BYTE STORAGE ;- .NLIST BEX ISTRNG: .ASCIZ /SENDER: %2R/<11>/FILE: %X/<11>/PAGES: %U/ ;INPUT TO $EDMSG .EVEN ESTRNG: .ASCII /...SPQ - QUEUE EMPTY/ ; EMPTY QUEUE MESSAGE ESIZ=.-ESTRNG .EVEN NOINS: .ASCII /...SPQ - PRT... NOT INSTALLED/ NSIZ=.-NOINS .EVEN .LIST BEX .PAGE .SBTTL MAIN LINE CODE ;+ ; **-SPQ-PRINT SPOOL QUEUE CONTENTS ; ; PRINTS THE CONTENTS OF THE SPOOL QUEUE ON LUN 1 ; INSTALL AS ...SPQ ; FORMAT OF OUTPUT: ; SENDER: TASK FILE: FILENAME ; ; ONLY THE FIRST 'MAX' REQUESTS IN THE SPOOL QUEUE ; WILL BE DISPLAYED. ;- .ENABL LSB START: DIR$ #GMCR ; PICK UP COMMAND LINE MOV #NAME,R3 ; POINT TO SPOOLER NAME CALL $SRSTD ; FIND TCB (EXEC ROUTINE) BCC 2$ ; IF C CLEARED, PRT IS INSTALLED JMP ERR1 ; OTHER WISE NOT INSTALLED RLM. 2$: CLR MYPRI BISB $TKTCB+T.PRI,MYPRI ; GET MY PRIORITY -DM. CLR R5 ; BISB T.PRI(R0),R5 ; GET PRT'S PRIORITY -DM. INC R5 ; INCREASE BY ONE -DM. ALTP$S ,R5 ; NOW WE ARE HIGHER THAT PRT... -DM. MOV #BUFF,R2 ; POINT TO BUFFER MOV T.RCVL(R0),R0 ; GET FIRST ENTRY (REC QUEUE LISTHEAD) BNE 4$ ; IF NE THEN QUEUE NOT EMPTY JMP EMPTY ; OTHERWISE QUEUE EMPTY 4$: MOV #PAGES,R5 ; GET ADDRESS OF PAGES BUFFER -DM. ;+ ; SEARCH SPOOL QUEUE IN SYSTEM STATE ;- CALL $SWSTK,30$ ; SWITCH TO SYSTEM STATE (SET $STKDP=0) 10$: MOV R0,R1 ; SAVE LINK WORD INC PKTCNT ; UPDATE PACKET COUNT TST (R0)+ ; BUMP POINTER PAST LINK WORD MOV #7,R4 ; 7 WORDS TO MOVE 20$: MOV (R0)+,(R2)+ ; MOVE WORD TO BUFFER SOB R4,20$ ; DONE? MOV #5,R4 ; GET UP TO FILE ID FROM THE RECEIVE QUE- MOV R2,(R5)+ ; AFTER STORING WHERE PAGE SIZES GO IN BUF -DM. 22$: MOV (R0)+,(R2)+ ; NOW GET REST OF QUE -DM. SOB R4,22$ ; -DM. CMP #MAX,PKTCNT ; DONE MAX PACKETS YET? BEQ 25$ ; IF EQ, YES MOV (R1),R0 ; ELSE REPLACE POINTER BNE 10$ ; IF NE, MORE IN QUEUE 25$: RETURN ; BACK TO USER STATE ;+ ; IN USER STATE, FORMAT OUTPUT AND PRINT ;- 30$: MOV #BUFF,R2 ; SET UP R0 - MOV #FDB+F.FNB,R3 ; GET FILENAME BLOCK -DM. MOV #PAGES,R5 ; GET PAGE SIZE BUFFER 40$: MOV 16(R2),N.DVNM(R3) ; GET DEVICE NAME -DM. MOV 20(R2),N.UNIT(R3) ; UNIT NUMBER -DM. MOV 22(R2),N.FID(R3) ; FILEID -DM. MOV 24(R2),N.FID+2(R3) ; (3 WORDS) MOV 26(R2),N.FID+4(R3) ; MOV #STBLK,FDB+F.STBK ; GET STATISTICS BLOCK - RLM. OFID$R #FDB,,,#FD.RWM,,,45$ ; OPEN BY FILE ID - RLM. CLOSE$ #FDB ; CLOSE THE FILE CLR R0 ; MOV STBLK+6,R1 ; GET DIVIDEND DIV #PBLKS,R0 ; DIVIDE - RLM. MOV R0,@(R5) ; INSERT PAGES - RLM. TST @(R5) ; IF QUOT =0, THEN COUNT 1 PAGE- RLM. BNE 44$ ; - RLM INC @(R5) ; ONE PAGE OF REAL TEXT - RLM. 44$: ADD #EXTRA,@(R5)+ ; NOW HAVE PAGES - RLM. BR 46$ ; 8/24/78 RLM. 45$: ; HERE WHEN CAN'T OPEN FILE 8/24/78 RLM CLR @(R5)+ ; PROB. DELETED-0 PAGES 8/24/78 RLM 46$: ; 8/24/78 RLM. MOV #ISTRNG,R1 ; R1, AND R2 FOR - MOV #OSTRNG,R0 ; CALL TO - CALL $EDMSG ; $EDMSG. SUB #OSTRNG,R0 ; CALCULATE # OF BYTES TO PRINT MOV R0,QIODPB+Q.IOPL+2 ; MOV #OSTRNG,QIODPB+Q.IOPL ; DIR$ #QIODPB ; PRINT MESSAGE DEC PKTCNT ; ANOTHER PACKET PRINTED BEQ 99$ ; IF 0 THEN DONE ADD #8.,R2 ; HAVE TO BUMP POINTER BY 4 WORDS - RLM. BR 40$ ; DO AGAIN ; 99$: EXIT$S ; SO LONG! ;+ ; PRINT EPMTY QUE MESSAGE ; EMPTY: MOV #ESTRNG,QIODPB+Q.IOPL MOV #ESIZ,QIODPB+Q.IOPL+2 BR PRINT ;+ ; PRINT NOT INSTALLED MESSAGE ;- ERR1: MOV #NOINS,QIODPB+Q.IOPL MOV #NSIZ,QIODPB+Q.IOPL+2 BR PRINT ; PRINT: DIR$ #QIODPB EXIT$S ; GO AWAY .DSABL LSB .END START