.TITLE BATQUE DISPLAY BATCH QUEUE .IDENT /02/ .ENABLE LC ;+ ; DISPLAYS THE CONTENTS OF THE BATCH QUEUE ON TI: ; ; J. SCHRIESHEIM 22-FEB-77 (SPOOL QUEUE) ; *** MODIFIED BY D. MICHAUD TO PRINT EMPTY QUEUE MESSAGE 6/27/77 ; *** MODIFIED BY J. DOWNWARD FOR USE IN DISPLAY OF BATCH QUEUE ; *** Modified by P.A. Stephensen-Payne for new BAT... packet format ; *** Modified by P.A. Stephensen-Payne for STB file enquiry ; ; THIS MODULE WAS IS BASED ON J. SCHRIESHEIM'S SPOOL QUEUE TASK(SPQ) ; AND MODIFIED TO REFLECT THE DIFFERENCES IN FORMAT AND REPORTING ; REQUIREMENTS FOR THE BATCH QUEUE. SPECIFICALLY THIS TASKS CHECKS ; TO SEE IF THE TERMINAL IS PRIVLEGED AND BASES THE OUTPUT INFORMATION ; ON THE TERMINAL'S PRIVLEGE. IF TI: IS PRIVLEGED, THE COMPLETE ; COMMAND SUBMITTED TO BATCH IS DISPLAYED, IE GRP/MEM/PASWRD CMDFILE. ; IF TI: IS NON PRIVLEGED, ONLY THE COMMAND FILE TO BE SUBMITTED IS DISPLAYED. ; THIS METHOD WAS CHOSEN SO NONPRIVLEGED USERS COULD JUDGE THE AMOUNT ; OF STUFF QUEUED UP FOR BATCH BUT NOT BE ABLE TO SEE PASSWORD INFORMATION. ; ; TO ASSEMBLE: ; [X,X]BATQUE=[1,1]EXEMC/ML,[200,200]RSXMC/PA:1,[X,X]BATQUE ; ; TO BUILD ; LB:[1,54]BTQ/PR/CP=SY:[X,X]BTQ,LB:[1,54]RSX11M.STB ; / ; ASG=TI:1 ; STACK=55 ; PRI=55 ; TASK=...BTQ ; // ; ; >>>THIS TASK MUST BE BUILT EACH SYSGEN ;- .MCALL TCBDF$,CALL,RETURN,QIOW$,DIR$,EXIT$S,GMCR$ .MCALL FDBDF$,FDOP$A,OPEN$,GET$,CLOSE$,FSRSZ$,FINIT$ .MCALL UCBDF$ ; TCBDF$ ; DEFINE TCB OFFSETS UCBDF$ ; DEFINE UCB OFFSETS FSRSZ$ 1 ;+ ; LOCAL DATA ;- PRVFLG: .WORD 0 ; FLAG TO SHOW IF TERMINAL PRIVLEGED(=1 IF PRIV) OUTBUF: .BLKB 60. ; Buffer for output NAME: .RAD50 /BAT.../ ; BATCH 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 QIODPB: QIOW$ IO.WVB,1,1,,,, ; QIO TO LUN 1 STBFDB: FDBDF$ FDOP$A 2,STBDSD,,FO.RD STBDSD: .WORD DEVL,DEVN .WORD DIRL,DIRN .WORD FILL,FILN DEVN: .ASCII /LB:/ DEVL=.-DEVN DIRN: .ASCII /[1,54]/ DIRL=.-DIRN FILN: .ASCII /RSX11M.STB/ FILL=.-FILN .EVEN SYMTAB: SRSTD: .RAD50 /$SRSTD/ TKTCB: .RAD50 /$TKTCB/ SYMNUM=<.-SYMTAB>/4 ;+ ; BYTE STORAGE ;- .NLIST BEX HDRMSG: .ASCII/BATCH WAIT QUEUE/ ; HEADER MESSAGE HDRSIZ=.-HDRMSG NINS: .ASCII /BTQ - Batch Processor not Installed/ NINSL=.-NINS ESTRNG: .ASCII /BTQ - BATCH QUEUE EMPTY/ ; EMPTY QUEUE MESSAGE ESIZ=.-ESTRNG OPNI: .ASCII /BTQ - Open Failure on RSX11M.STB/ OPNIL=.-OPNI SYMB: .ASCII /BTQ - Symbol not found in RSX11M.STB/ SYMBL=.-SYMB .EVEN .LIST BEX .PAGE .SBTTL MAIN LINE CODE ;+ ; **-BATQUE-PRINT BATCH QUEUE CONTENTS ; ; PRINTS THE CONTENTS OF THE BATCH QUEUE ON LUN 1 ; INSTALL AS ...BTQ ; FORMAT OF OUTPUT: ; ; BATCH WAIT QUEUE OR BATCH WAIT QUEUE ; GRP/MEM/PASWRD CMDFIL TTn: GRP/MEM CMDFIL TTn: ; " " " " " ; ; ONLY THE FIRST 20. REQUESTS IN THE BATCH QUEUE ; WILL BE DISPLAYED. ;- .ENABL LSB ; START: FINIT$ ; CALL STBRTN ; DIR$ #GMCR ; PICK UP COMMAND LINE MOV @TKTCB,R0 ; NEED TO FIND OUT IF TERMINAL PRIVILEGED, GET TCB ADR MOV T.UCB(R0),R0 ; GET UCB ADDRESS BIT #U2.PRV,U.CW2(R0) ; IS TERMINAL PRIVILEGED BEQ 3$ ; NO, EXIT WITH WARNING INC PRVFLG ; SHOW TI: IS PRIVILEGED 3$: MOV #NAME,R3 ; POINT TO BATCH NAME CALL @SRSTD ; FIND TCB (EXEC ROUTINE) BCC 5$ ; If CC OK - CArry on JMP ERR1 ; Else log error ; 5$: MOV #BUFF,R2 ; POINT TO BUFFER MOV T.RCVL(R0),R0 ; GET FIRST ENTRY (REC QUEUE LISTHEAD) BEQ 100$ ; IF EQ - QUEUE EMPTY ;+ ; SEARCH BATCH 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 ; 15 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,R4 ; SET UP R4 - MOV #HDRMSG,QIODPB+Q.IOPL ; SET UP TO PRINT HEADER MESSAGE MOV #HDRSIZ,QIODPB+Q.IOPL+2 ; AND BYTE COUNT OF MESSAGE DIR$ #QIODPB ; PRINT IT ; 40$: ADD #4,R4 ; Skip over sender task name MOV #OUTBUF,R0 ; Clear out buffer first MOV #30.,R1 ; ; 50$: CLR (R0)+ ; SOB R1,50$ ; MOV #OUTBUF,R0 ; MOV #14.,R1 ; NUMBER OF BYTES TO NORMALLY PRINT CLR R2 ; Clear / counter ; 60$: CMPB (R4),#'/ ; A slash? BNE 70$ ; If NE no - carry on INC R2 ; Yes - count it ; 70$: CMP R2,#2 ; Two slashes seen? BNE 80$ ; If NE no - copy it anyway TST PRVFLG ; IS TERMINAL PRIVILEGED BNE 80$ ; IF NE, OK TO PRINT PASSWORDS MOVB #' ,(R0)+ ; No - insert a space instead TSTB (R4)+ ; Jump over input BR 90$ ; and do next one ; 80$: MOVB (R4)+,(R0)+ ; Copy over a byte BNE 90$ ; If not zero OK MOVB #' ,-1(R0) ; Else overwrite with a space ; 90$: SOB R1,60$ ; Carry on to end of first bit MOVB #11,(R0)+ ; Insert a tab MOV R0,R3 ; Save offset MOVB #' ,(R0)+ ; Insert a space MOV (R4)+,R1 ; Then the filename (3 RAD50 words) CALL $C5TA ; MOV (R4)+,R1 ; CALL $C5TA ; CMP (R4),#-1 ; Fake for $? BNE 95$ ; If NE no - carry on CLR (R4) ; replace with blanks MOVB #'$,(R3) ; Stuff $ at front ; 95$: MOV (R4)+,R1 ; CALL $C5TA ; MOVB #11,(R0)+ ; Insert another tab MOV R0,R3 ; Save offset MOV (R4),R1 ; get TI: in weird format CALL $C5TA ; Convert to ASCII MOV R3,R0 ; restore address CLRB 2(R0) ; Clear bit at end CALL $CAT5 ; Convert it back again SUB R1,(R4) ; Hence get the unit MOV (R4)+,R1 ; Copy it into R1 CLR R2 ; Zero suppression CALL $CBOMG ; Convert it MOVB #':,(R0)+ ; Add a trailing : MOV #OUTBUF,QIODPB+Q.IOPL ; Point to start of buffer SUB #OUTBUF,R0 ; Calculate amount to print MOV R0,QIODPB+Q.IOPL+2 ; Number of bytes DIR$ #QIODPB ; Do the output ADD #4,R4 ; Bump to next packet DEC PKTCNT ; If NE, More to do BNE 40$ ; EXIT: EXIT$S ;+ ; PRINT EMPTY QUE MESSAGE ; 100$: MOV #ESTRNG,QIODPB+Q.IOPL MOV #ESIZ,QIODPB+Q.IOPL+2 DIR$ #QIODPB ; PRINT EMPTY MESSAGE BR EXIT ERR1: MOV #NINS,QIODPB+Q.IOPL MOV #NINSL,QIODPB+Q.IOPL+2 DIR$ #QIODPB ; PRINT EMPTY MESSAGE BR EXIT .DSABL LSB .PAGE .SBTTL STBRTN Get Values for Exec Symbols ; ; This is a subroutine to determine various Executive addresses, which does ; not have to be rebuilt for each Executive (I hope!) ; ; STBRTN: MOV #SYMTAB,R4 ; Get address of RAD50 symbol table MOV #SYMNUM,R2 ; And the number of them OPEN$ #STBFDB ; Open the input file BCC 10$ ; If CC OK - carry on MOVB F.ERR(R0),R0 ; Sign-extend error code MOV #OPNI,QIODPB+Q.IOPL MOV #OPNIL,QIODPB+Q.IOPL+2 DIR$ #QIODPB ; PRINT EMPTY MESSAGE JMP EXIT ; 10$: GET$ #STBFDB,#BUFF,#256. BCS 90$ ; If error exit CMP BUFF,#1 ; Right type? BNE 90$ ; If ne no - exit MOV #BUFF+2,R0 ; Look for symbol MOV #15.,R3 ; ; 20$: CMP (R4),(R0) ; This one BNE 30$ ; If ne no - try next CMP 2(R4),2(R0) ; Sure? BNE 30$ ; No - check next one MOV 6(R0),(R4)+ ; Yes - overwrite with address CLR (R4)+ ; and set to next symbol DEC R2 ; Count the one we had BEQ 40$ ; If EQ we've finished - return ; 30$: ADD #8.,R0 ; Set to next one SOB R3,20$ ; Keep trying BR 10$ ; Get next record ; 40$: CLOSE$ #STBFDB ; RETURN ; Return ; 90$: MOV #SYMB,QIODPB+Q.IOPL MOV #SYMBL,QIODPB+Q.IOPL+2 DIR$ #QIODPB ; PRINT EMPTY MESSAGE JMP EXIT .END START