.TITLE AAC .IDENT /V02.1/ .NLIST BEX .NLIST CND .ENABL LC .NLIST ME .SBTTL DESCRIPTION ; ; ; COMPONENT: AAC ; --------- ; ; DATE: 09-JUL-80 ; ---- ; ; AUTHOR: GR JOHNSON ; ------ BATTELLE NORTHWEST ; P O BOX 999 ; RICHLAND WA 99352 ; ; SOURCE: MACRO-11 ; ------ ; ; ; DESCRIPTION: ; ----------- ; ; ; PDS> AAC [/ACTIVE][/qualifier] ; ; ; /ACTIVE -- list active terminals only ; ; /ALL -- list all terminals ; /BATCH -- list batch streams ; /CONSOLE -- list console terminal ; /DIALUP -- list dialup terminals * ; /TERMINAL -- list interactive terminals ; ; /REALTIME -- list active realtime tasks ; ; * (privileged option) ; ; .SBTTL .SBTTL INSTALLATION PROCEDURE ; ; ; ASSEMBLY: ; -------- ; ; MCR> EDI [311,201]AAC.MAC ; *PL TSS= ; * . ; * . EDIT CONDITIONAL ASSEMBLY PARAMETERS ; * . ; *EX ; ; MCR> MAC [11,202]AAC,[211,202]AAC/-SP=[311,202]AAC ; ; ; TASK BUILD: ; ---------- ; ; MCR> TKB ; TKB> [11,1]AAC/PR/MU,[111,202]AAC/-SP/-SH/CR=[11,202]AAC .IF DF,TSS ; TKB> LB:[1,1]IASCOM.STB/SS .ENDC ; TKB> LB:[1,1]EXEC.STB/SS ; TKB> / ; ENTER OPTIONS: ; TKB> TASK=$$$AAC ; TKB> UIC=[1,1] ; TKB> ACTFIL=1 ; TKB> LIBR=SYSRES:RO .IF DF,TSS ; TKB> LIBR=IASCOM:RO .ENDC ; TKB> // ; ; ; INSTALLATION: ; ------------ ; ; MCR> INS [11,1]AAC ; ; .SBTTL ASSEMBLY PARAMETERS TSS= 0 ; TIMESHARING SYSTEM VERSION DFSW= ACSW!BASW!TTSW ; /ACTIVE/BATCH/TERMINAL .IF DF,NJOB .IF DF,TSS .IF GT,NJOB-3. .ERROR ; NJOB MUST BE LESS THAN 4. .ENDC .IF GT,NJOB-7. .ERROR ; NJOB MUST BE LESS THAN 8. .ENDC .ENDC .IFF .IF DF,TSS NJOB= 3. .IFF NJOB= 7. .ENDC .ENDC .SBTTL .SBTTL SYSTEM DIRECTIVE MACROS .MCALL DIR$ ; .MCALL ALUN$ ; ASSIGN LOGICAL UNIT .MCALL GMCR$ ; GET MCR COMMAND-LINE .MCALL GTSK$ ; GET TASK PARAMETERS .MCALL CSI$,CSI$1,CSI$2 ; COMMAND STRING INTERPRETER .MCALL CSI$SW,CSI$SV,CSI$ND ; COMMAND STRING INTERPRETER .MCALL QIO$ ; QUEUE I-O REQUEST .MCALL QIOW$ ; QUEUE I-O REQUEST AND WAIT .MCALL EXIT$S ; TASK EXIT .SBTTL INTERNAL MACRO DEFINITIONS .MACRO .INH0 ; INHIBIT TASK SWITCHING MOV PS.EXP,-(SP) MOVB #140,PS.EXP .ENDM .INH0 .MACRO .ENB0 ; ENABLE TASK SWITCHING JSR PC,..ENB0 .ENDM .ENB0 .MACRO PADB N ; PACK "N" SPACES .REPT N MOVB #040,(R0)+ .ENDR .ENDM PADB .SBTTL .SBTTL COMMAND-LINE PROCESSING BUFFERS GMCR: GMCR$ ; GET MCR COMMAND-LINE DPB GTSK: GTSK$ GMCR ; GET TASK PARAMETERS DPB CSI$ ; DEFINE CSI OFFSETS ; CSIBF: .BLKB C.SIZE ; ALLOCATE CSI BUFFER SWTBL: ; CSI SWITCH TABLE CSI$SW ACTIVE ,ACSW ,SWMSK ,SET CSI$SW ALL ,BASW!COSW!TTSW ,SWMSK ,SET CSI$SW BATCH ,BASW ,SWMSK ,SET CSI$SW CONSOLE ,COSW ,SWMSK ,SET CSI$SW DIALUP ,DLSW ,SWMSK ,SET CSI$SW TERMINAL,TTSW ,SWMSK ,SET CSI$SW REALTIME,RTSW ,SWMSK ,SET CSI$ND SWMSK: .WORD 0 ; CSI SWITCH MASK ; CSI SWITCH MASK BIT DEFINITIONS ; BASW= 000001 ; BATCH COSW= 000002 ; CONSOLE DLSW= 000004 ; DIALUP TTSW= 000010 ; TERMINAL ; ACSW= 000400 ; ACTIVE RTSW= 001000 ; REALTIME ; COMMAND ERROR MESSAGE DPB'S ERRQ1: QIOW$ IO.WLB,5,5,,,, ERRM1: .ASCII /Syntax error/ ; ERRL1= .-ERRM1 ; .EVEN ERRQ2: QIOW$ IO.WLB,5,5,,,, ERRM2: .ASCII /Privileged command/ ; ERRL2= .-ERRM2 ; .EVEN .SBTTL .SBTTL ACTIVE ACCOUNT DATA BUFFER AATDN: .WORD 0 ; TERMINAL DEVICE NAME AATUN: .WORD 0 ; TERMINAL UNIT NUMBER AAUIC: .WORD 0 ; UIC .IF DF,TSS AAUSN: .BLKB 12. ; USERNAME AADDN: .WORD 0 ; DEFAULT DEVICE NAME AADUN: .WORD 0 ; DEFAULT UNIT NUMBER AAUFD: .WORD 0 ; DEFAULT UFD AACLI: .WORD 0 ; CLI NAME .ENDC AANAJ: .WORD 0 ; ACTIVE JOB COUNT AANJB: .WORD 0 ; ACTIVE JOB NAME BUFFER COUNT AAJOB: .BLKW ; ACTIVE JOB NAME BUFFER .SBTTL ACTIVE ACCOUNT OUTPUT BUFFER ALUN5: ALUN$ 5,TI,0 ; ASSIGN LOGICAL UNIT #5 ; HEADER QIO DPB QHDR: QIOW$ IO.WLB,5,5,,,, HDRBF: ; HEADER BUFFER .IF DF,TSS .ASCII <15><12>/Terminal User name Defaults CLI/ .IF GT,NJOB .ASCII / Active Jobs / .ENDC .ASCII <15><12>/-------- ------------- -------------- ---/ .IF GT,NJOB .ASCII / -------------/ .ENDC .IFF .ASCII <15><12>/Terminal User-id / .IF GT,NJOB .ASCII / Active Jobs / .ENDC .ASCII <15><12>/-------- ---------/ .IF GT,NJOB .ASCII / -------------/ .ENDC .ENDC HDRSZ= .-HDRBF ; HEADER BUFFER LENGTH HDRFL: .WORD -1 ; HEADER FLAG ; OUTPUT QIO DPB QOUT: QIOW$ IO.WLB,5,5,,,, OUTBF: .BLKB 80. ; OUTPUT BUFFER OUTSZ= QOUT+Q.IOPL+2 ; OUTPUT BUFFER LENGTH .SBTTL .SBTTL TERMINAL CHARACTERISTICS PROCESSING BUFFERS ; FETCH TERMINAL DIALUP CHARACTERISTIC ; DLLUN: ALUN$ 1,TI,0 ; ASSIGN LOGICAL UNIT ; ; GET CHARACTERISTIC DLGSC: QIOW$ SF.GSC,1,1,,IOSB,, IOSB: .BLKW 2 ; .SBTTL .SBTTL .SBTTL ACTIVE ACCOUNTS SUMMARY (AAC) UTILITY .SBTTL .SBTTL .SBTTL AAC -- ENTRY POINT AAC: DIR$ #ALUN5 ; ASSIGN LOGICAL UNIT #5 DIR$ #GMCR ; FETCH MCR COMMAND-LINE CSI$1 #CSIBF,#GMCR+2,@#$DSW ; COMMAND SYNTAX ANALYSER BCC 2$ ; ERROR? ; DIR$ #ERRQ1 ; YES -- OUTPUT MESSAGE JMP EXIT ; AND TERMINATE. 2$: CSI$2 #CSIBF,OUTPUT,#SWTBL ; COMMAND SEMANTIC PARSER BCC 4$ ; ERROR? ; DIR$ #ERRQ1 ; YES -- OUTPUT MESSAGE JMP EXIT ; AND TERMINATE. 4$: TSTB SWMSK ; SWITCHES? BNE 6$ ; BIS #DFSW,SWMSK ; NO -- SET DEFAULTS 6$: BIT #DLSW,SWMSK ; LIST DIALUP TERMINALS? BEQ CAAC0 ; DIR$ #GTSK ; YES -- FETCH TASK PARAMETERS CMPB #10,@#G.TSDU+1+GMCR ; SYSTEM USER? BPL CAAC0 ; YES ; DIR$ #ERRQ2 ; NO -- OUTPUT MESSAGE JMP EXIT ; AND TERMINATE. .SBTTL CAAC -- COLLECT AAC DATA CAAC0: MOV .PUDBA,R0 ; PUD LISTHEAD SUB #U.SZ,R0 ; BACK-OFF ONE ENTRY CAAC: 2$: ADD #U.SZ,R0 ; NEXT PUD ENTRY CMP R0,.PUDEA ; END OF PUD? BNE .+6 ; JMP EXIT ; YES -- EXIT CMP #"BA,U.DN(R0) ; BATCH STREAM? BNE 4$ ; BIT #BASW,SWMSK ; YES -- LIST BATCH STREAMS? BEQ 2$ ; NO -- BYPASS BR 10$ ; 4$: BIT #UC.TTY,U.C1(R0) ; TTY DEVICE? BEQ 2$ ; NO -- BYPASS BITB #UF.CO,U.FB(R0) ; DIRECTED TO CO? BEQ 6$ ; BIT #COSW,SWMSK ; YES -- LIST CONSOLE TERMINAL? BEQ 2$ ; NO -- BYPASS BR 10$ ; 6$: BIT #TTSW,SWMSK ; LIST INTERACTIVE TERMINALS? BNE 10$ ; YES BIT #DLSW,SWMSK ; LIST DIALUP TERMINALS? BEQ 2$ ; NO ; MOV U.DN(R0),DLLUN+A.LUNA ; DEVICE NAME MOVB U.UN(R0),DLLUN+A.LUNU ; UNIT NUMBER ; DIR$ #DLLUN ; ASSIGN LOGICAL UNIT ; DIR$ #DLGSC ; FETCH TERMINAL CHARACTERISTIC ; TST IOSB+2 ; DIALUP TERMINAL? BEQ 2$ ; NO -- BYPASS ; CAAC - CNTD 10$: MOV U.DN(R0),AATDN ; SAVE TERMINAL DEVICE NAME MOVB U.UN(R0),AATUN ; SAVE TERMINAL UNIT NUMBER CLR AAUIC ; CLEAR UIC .IF DF,TSS CLR AAUSN ; CLEAR USERNAME .ENDC CLR AANAJ ; CLEAR ACTIVE JOB COUNT CLR AANJB ; CLEAR ACTIVE JOB NAME BUFFER COUNT .INH0 ;; INHIBIT TASK SWITCHING BITB #UT.LG,U.PR(R0) ;; LOGGED ON? BEQ 12$ ;; NO ;; CMP #"BA,U.DN(R0) ;; BATCH STREAM? BNE 14$ ;; NO ;; MOV U.HA(R0),R1 ;; BATCH STREAM ATL ADDRESS TSTB A.IN(R1) ;; I-O PENDING COUNT > 0? BNE 14$ ;; YES ;; 12$: BIT #ACSW,SWMSK ;; LIST INACTIVE TERMINALS? BEQ 22$ ;; YES ;; .ENB0 ; NO -- ENABLE TASK SWITCHING ; BR 2$ ; BYPASS 14$: MOV U.UI(R0),AAUIC ;; SAVE UIC .IF DF,TSS ; CAAC - CNTD MOV U.ACP(R0),R1 ;; UTN POINTER MOV R1,R2 ;; UTN USERNAME POINTER ADD #I.UN,R2 ;; MOV #AAUSN,R3 ;; USERNAME BUFFER POINTER ;; MOV #12.,R4 ;; TRANSFER COUNT ;; 16$: MOVB (R2)+,(R3)+ ;; SAVE USERNAME SOB R4,16$ ;; MOV I.SY(R1),R2 ;; DEFAULT DEVICE PUD POINTER ;; MOV U.DN(R2),AADDN ;; SAVE DEFAULT DEVICE NAME MOVB U.UN(R2),AADUN ;; SAVE DEFAULT DEVICE UNIT NUMBER MOV I.DU(R1),AAUFD ;; SAVE DEFAULT UFD .ENDC ; CAAC - CNTD ;; FETCH ACTIVE JOB(S) ;; MOV #.ATLLH,R2 ;; ATL LISTHEAD ;; MOV #AAJOB,R4 ;; ACTIVE JOB NAME BUFFER POINTER 20$: MOV (R2),R2 ;; NEXT ATL ENTRY ;; CMP R2,#.ATLLH ;; END OF LIST? BEQ 22$ ;; YES -- TERMINATE ATL SCAN CMP A.TI(R2),R0 ;; TI IDENTIFICATION - SAME PUD ADDRESS? BNE 20$ ;; NO -- BYPASS BIT #AF.IA,A.TF(R2) ;; IAS CONTROLLED TASK? BNE .+12 ;; BIT #RTSW,SWMSK ;; NO -- LIST REALTIME TASKS? BEQ 20$ ;; NO -- BYPASS MOV A.TD(R2),R3 ;; JOB STD POINTER BEQ 20$ ;; NONE -- BYPASS .IF DF,TSS CMP I.CI(R1),A.JN(R2) ;; CLI? BNE .+12 ;; MOV S.TN+2(R3),AACLI ;; YES -- SAVE CLI NAME (WORD 2) ;; BR 20$ ;; LOOP .ENDC INC AANAJ ;; INCREMENT ACTIVE JOB COUNT CMP AANJB,#NJOB ;; JOB NAME BUFFER FULL? BEQ 20$ ;; YES -- BYPASS MOV S.TN+0(R3),(R4)+ ;; SAVE JOB NAME (WORD 1) MOV S.TN+2(R3),(R4)+ ;; SAVE JOB NAME (WORD 2) ;; INC AANJB ;; INCREMENT ACTIVE JOB NAME COUNT ;; BR 20$ ;; LOOP 22$: .ENB0 ;; ENABLE TASK SWITCHING .SBTTL FMTR -- FORMAT REPORT LINE FMTR: MOV R0,-(SP) ; PRESERVE PUD POINTER MOV #OUTBF,R0 ; RECORD BUFFER POINTER PADB 2. ; PACK TWO SPACES MOVB AATDN ,(R0)+ ; PACK TERMINAL DEVICE NAME MOVB AATDN+1,(R0)+ ; PACK TERMINAL DEVICE NAME MOV AATUN,R1 ; TERMINAL DEVICE UNIT NUMBER ; MOV #11010,R2 ; CONVERSION OPTIONS CALL $CBTA ; CONVERT AND PACK UNIT NUMBER ; FMTR - CNTD .IF DF,TSS MOV #AAUSN,R3 ; USERNAME BUFFER POINTER ; TSTB (R3) ; TEST USERNAME BEQ OUTR ; NONE -- BYPASS ; PADB 5. ; PACK FIVE SPACES ; MOV #12.,R4 ; TRANSFER COUNT ; 2$: MOVB (R3)+,(R0) ; PACK USERNAME ; BNE 4$ ; END OF USERNAME? MOVB #40,(R0) ; YES -- PAD USERNAME 4$: INC R0 ; SOB R4,2$ ; LOOP .IFF MOV AAUIC,R3 ; UIC BEQ OUTR ; NONE -- BYPASS ; PADB 5. ; PACK FIVE SPACES ; MOV R0,R2 ; RECORD BUFFER POINTER MOV #1,R4 ; CONVERSION OPTION CALL .PPASC ; CONVERT AND PACK UFD ; MOV R2,R0 ; UPDATE RECORD BUFFER POINTER .ENDC .IF DF,TSS ; FMTR - CNTD PADB 4. ; PACK FOUR SPACES MOVB AADDN ,(R0)+ ; PACK DEFAULT DEVICE NAME MOVB AADDN+1,(R0)+ ; PACK DEFAULT DEVICE NAME MOV AADUN,R1 ; DEFAULT DEVICE UNIT NUMBER ; MOV #11010,R2 ; CONVERSION OPTIONS CALL $CBTA ; CONVERT AND PACK UNIT NUMBER ; MOVB #':,(R0)+ ; PACK COLON MOV AAUFD,R3 ; DEFAULT UFD ; MOV R0,R2 ; RECORD BUFFER POINTER MOV #1,R4 ; CONVERSION OPTION CALL .PPASC ; CONVERT AND PACK UFD ; MOV R2,R0 ; UPDATE RECORD BUFFER POINTER PADB 3. ; PACK THREE SPACES MOV AACLI,R1 ; CLI NAME CALL $C5TA ; CONVERT AND PACK CLI NAME .ENDC .IF GT,NJOB ; FMTR - CNTD MOV AANJB,R3 ; ACTIVE JOB NAME BUFFER COUNT BEQ OUTR ; ZERO -- BYPASS PADB 2. ; PACK TWO SPACES MOV #AAJOB,R4 ; ACTIVE JOB NAME BUFFER POINTER 6$: PADB 1. ; PACK ONE SPACE ; MOV (R4)+,R1 ; CALL $C5TA ; CONVERT AND PACK JOB NAME (WORD 1) ; MOV (R4)+,R1 ; CALL $C5TA ; CONVERT AND PACK JOB NAME (WORD 2) ; SOB R3,6$ ; LOOP MOV AANAJ,R1 ; ACTIVE JOBS SUB AANJB,R1 ; ACTIVE JOBS NOT LISTED BLE OUTR ; NONE -- BYPASS ; PADB 1. ; PACK ONE SPACE MOVB #'+,(R0)+ ; PACK PLUS SIGN ; CLR R2 ; CONVERSION OPTION CALL $CBDAT ; CONVERT TO ASCII ; MOVB #'.,(R0)+ ; PACK DECIMAL POINT .ENDC .SBTTL OUTR -- OUTPUT REPORT LINE OUTR: TST HDRFL ; HEADER FLAG SET? BEQ 2$ ; NO ; DIR$ #QHDR ; OUTPUT REPORT HEADER ; CLR HDRFL ; CLEAR HEADER FLAG 2$: SUB #OUTBF,R0 ; COMPUTE REPORT BUFFER LENGTH MOV R0,OUTSZ ; DIR$ #QOUT ; OUTPUT REPORT BUFFER MOV (SP)+,R0 ; RESTORE PUD POINTER JMP CAAC ; LOOP .SBTTL .SBTTL EXIT -- TASK EXIT EXIT: EXIT$S .END AAC