.TITLE SPQ DISPLAY SPOOL QUEUE .IDENT /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 M. BLAKE-KNOX TO PRINT UIC'S 79/03/30 ; ; TO ASSEMBLE: ; [X,X]SPQ=[1,1]EXEMC/ML,[200,200]RSXMC/PA:,[Y,Y]MACROS/ML,[X,X]SPQ ;- .MCALL TCBDF$,CALL,RETURN,QIOW$,DIR$,EXIT$S,GMCR$ .MCALL FSRSZ$,FINIT$,ERR$B,ERR$S,ERR$P,NMBLK$ ; TCBDF$ ; DEFINE TCB OFFSETS ;+ FSRSZ$ 1 ; LOCAL DATA ;- NAME: .RAD50 /PRT.../ ; SPOOLER TASKNAME PKTCNT: .WORD 0 ; PACKET COUNT MAX= 20. ; PRINT UP TO 20 PACKETS BUFF: .BLKW MAX*15. ; ALLOCATE SPACE FOR UP TO 20. ENTRIES GMCR: GMCR$ ; NEEDED BECAUSE INSTALLED AS MCR TASK QIODPB: QIOW$ IO.WVB,1,1,,,,<0,0,40> ; QIO TO LUN 1 ;+ ; BYTE STORAGE ;- .NLIST BEX .EVEN ESTRNG: .ASCIZ /...SPQ - QUEUE EMPTY/ ; EMPTY QUEUE MESSAGE ESIZ= .-ESTRNG .EVEN BLOCK: ERR$B 1,,,8. ;DEFINE ERROR MESSAGE CONTROL BLOCK ; FNB: NMBLK$ ;DUMMY NAME BLOCK .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: FINIT$ 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 #15.,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 #FNB+N.FNAM,R0 ;COPY MOV R2,R1 ;FILE NAME CMP (R1)+,(R1)+ ;INFO ACROSS MOV #5,R3 ;INTO DUMMY FNB 50$: MOV (R1)+,(R0)+ ;... SOB R3,50$ ;LOOP MOV (R1)+,FNB+N.DVNM ;DEVICE MOV (R1)+,FNB+N.UNIT ;AND UNIT ADD #6,R1 ;POINT AT DIRECTORY ID MOV (R1)+,FNB+N.DID ;AND MOV (R1)+,FNB+N.DID+2 ;MOVE IT MOV (R1)+,FNB+N.DID+4 ;INTO FNB ERR$S BLOCK+E.SUBL,<,,> ;NOTE ; SUBSTITUTIONS ERR$P #BLOCK, ADD #15.*2,R2 ;POINT TO NEXT ENTRY 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