.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 ; *** MODIFIED BY S. DOVER TO PRINT RECEIVE QUEUE OF ANY TASK 11/30/81 ; ; 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 ;- TFLAG: .WORD 0 ;TASKNAME DEFINED FLAG 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 OSTRNG=GMCR+G.MCRB ; OVERLAY OUTPUT STRING ON MCR BUFFER .=GMCR+340. ;MAKE SURE THERE IS ENOUGH ROOM QIODPB: QIOW$ IO.WVB,1,1,,,, ; QIO TO LUN 1 ;+ ; BYTE STORAGE ;- .NLIST BEX ISTRNG: .ASCII /SENDER: %2R/<11> ; INPUT TO $EDMSG ICNG: .ASCIZ /FILE: %X/ ; CHANGABLE PART .EVEN ESTRNG: .ASCIZ /...SPQ - QUEUE EMPTY/ ; EMPTY QUEUE MESSAGE ESIZ=.-ESTRNG .EVEN TASKQU: .ASCIZ /DATA: %13P/ ; USE WITH TASK RECEIVE QUEUE .EVEN .LIST BEX .PAGE .SBTTL MAIN LINE CODE ;+ ; **-SPQ-PRINT SPOOL QUEUE CONTENTS ; ; PRINTS THE CONTENTS OF THE SPOOL QUEUE (DEFAULT) OR ANY TASK QUEUE BY ; SPECIFYING TASK NAME USING LUN 1 ; INSTALL AS ...SPQ ; ; COMMAND LINE: SPQ [TASKNAME] ; PRT... IS ASSUMED IF NO TASKNAME ; ; FORMAT OF OUTPUT: ; FOR PRT... ; SENDER: TASK FILE: FILENAME ; FOR ANY TASK: ; SENDER: TASK BF: 13. WORDS IN OCTAL FORMAT ; ; ONLY THE FIRST 20. PACKETS IN ANY TASK QUEUE ; WILL BE DISPLAYED. ;- .ENABL LSB START: DIR$ #GMCR ; PICK UP COMMAND LINE CMP $DSW,#4 ; WAS A TASK SPECIFIED BLE DEFALT ; IF LESS OR EQUAL NO MOV #GMCR+6,R2 ; GET BEGINNING OF MCR COMMAND CMPB #'P,(R2)+ ; TEST TO SEE BNE NOPE ; IF THE PRINT CMPB #'R,(R2)+ ; DESPOOLER TASK BNE NOPE ; WAS SPECIFIED. CMPB #'T,(R2)+ ; BRANCH IF BNE NOPE ; PRT... WAS CMPB #'.,(R2) ; NOT SPECIFIED. BNE NOPE ; BR DEFALT ; ASSUME PRT... WAS SPECIFIED NOPE: INC TFLAG ; SET TASK SPECIFIED FLAG MOV #GMCR+6,R2 ; GET THE BEGINNING OF THE TASK NAME MOV #ESTRNG,R3 ; GET THE EMPTY STRING POINTER MOV #6,R4 ; GET THE BYTE COUNT LOP1: CMPB #13.,(R2) ; CHECK FOR CARRIAGE RETURN TERMINATOR BNE LOP11 MOVB #40,(R2) ; INSERT BLANK LOP11: MOVB (R2)+,(R3)+ ; MOVE A CHARACTER SOB R4,LOP1 ; MOVE ALL 6 CHARACTERS MOV #1,R1 ; ALLOW PERIODS AS VALID MOV #GMCR+6,R0 ; POINT TO THE FIRST CHARACTER CALL $CAT5 ; CONVERT 3 CHARACTERS TO RAD50 MOV R1,NAME ; SAVE THE RAD50 CHARACTERS AND OVERWRITE PRT MOV #1,R1 ; ALLOW PERIODS AGAIN ; R0 SHOULD BE OK FROM THE $CAT5 CALL $CAT5 ; CONVERT 3 MORE CHARACTERS MOV R1,NAME+2 ; SAVE THE RAD50 CHARACTERS AND OVERWRITE ... MOV #ICNG,R4 ; GET THE CHANGABLE OUTPUT ADDRESS MOV #TASKQU,R5 ; GET THE TASK RECEIVE QUEUE ADDRESS CNVSUB: MOVB (R5)+,(R4)+ ; MOVE A BYTE BNE CNVSUB ; IF NOT EQUAL TRY FOR MORE DEFALT: 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 EQUAL - 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 TST TFLAG ; TEST IF TASK NAME WAS SPECIFIED BEQ 20$ ; BRANCH IF PRT... WAS ASSUMED MOV #15.,R4 ; 15. WORDS FOR RECEIVE DATA PACKETS 20$: MOV (R0)+,(R2)+ ; MOVE WORD TO BUFFER SOB R4,20$ ; DONE? CMP #MAX,PKTCNT ; DONE 20 PACKETS YET? BEQ 25$ ; BRANCH IF SO MOV (R1),R0 ; ELSE REPLACE POINTER BNE 10$ ; IF NE, MORE IN QUEUE 25$: RETURN ; RETURN 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 ; PUT NUMBER OF BYTES IN QIO DPB MOV #OSTRNG,QIODPB+Q.IOPL ; PUT ADDR OF OUTPUT STRING IN QIO DPB 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 ; PUT ADDR OF OUTPUT STRING IN QIO DPB MOV #ESIZ,QIODPB+Q.IOPL+2 ; PUT NUMBER IN BYTES IN QIO DPB DIR$ #QIODPB ; PRINT EMPTY MESSAGE ERR1: BR 99$ .DSABL LSB .END START