.TITLE SPQ DISPLAY SPOOL QUEUE .IDENT /01/ ;+ ; 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 ; ; 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$ ; TCBDF$ ; DEFINE TCB OFFSETS ;+ ; LOCAL DATA ;- NAME: .RAD50 /PRT.../ ; SPOOLER TASKNAME PKTCNT: .WORD 0 ; PACKET COUNT MAX=20. ; PRINT UP TO 20 PACKETS BUFF: .BLKW MAX*7 ; ALLOCATE SPACE FOR UP TO 20. ENTRIES GMCR: GMCR$ ; NEEDED BECAUSE INSTALLED AS MCR TASK OSTRNG=GMCR+G.MCRB ; OVERLAY OUTPUT STRING ON MCR BUFFER QIODPB: QIOW$ IO.WVB,1,1,,,, ; QIO TO LUN 1 ;+ ; BYTE STORAGE ;- .NLIST BEX ISTRNG: .ASCIZ /SENDER: %2R/<11>/FILE: %X/ ; INPUT TO $EDMSG .EVEN ESTRNG: .ASCIZ /...SPQ - QUEUE EMPTY/ ; EMPTY QUEUE MESSAGE ESIZ=.-ESTRNG .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 20. 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) BCS ERR1 ; NOT INSTALLED? MOV #BUFF,R2 ; POINT TO BUFFER MOV T.RCVL(R0),R0 ; GET FIRST ENTRY (REC QUEUE LISTHEAD) BEQ 100$ ; IF EQ - QUEUE EMPTY ;+ ; 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? CMP #MAX,PKTCNT ; DONE 20 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 - 40$: 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 BNE 40$ ; IF NE, MORE TO DO 99$: EXIT$S ; SO LONG! ;+ ; PRINT EPMTY QUE MESSAGE ; 100$: MOV #ESTRNG,QIODPB+Q.IOPL MOV #ESIZ,QIODPB+Q.IOPL+2 DIR$ #QIODPB ; PRINT EMPTY MESSAGE BR 99$ ERR1: BR 99$ ; EXIT WITH NO MESSAGE .DSABL LSB .END START