.TITLE SPYTI2 ; ; SPY VS02.0 OCTOBER 23, 1979 FOR IAS VERSION 3.0 ; ; AERONAUTICAL RESEARCH ASSOCIATES OF PRINCETON (A.R.A.P.) ; BOX 2229, PRINCETON, NJ 08540 (609) 452-2950 ; ; AUTHOR: J.D. LEONARD ; ; ; SPYTI2 WILL GATHER THE STATISTICS FOR T/S TASKS FROM THE ATL. ; SPECIFICALLY, TASK NAME, NO. OF TICKS USED, SWAPPED OUT INDICATOR ; AND USERNAME (ONLY 8 CHARACTERS). ; IF THE TASK IS ...PDS IT IS IGNORED, EXCEPT THAT ...PDS ; EXISTING INDICATES THE USER IS LOGGED ON. ; A TASK IS DETERMINED TO BE A T/S TASK IF IT'S PRIORITY IS ; .LE. TO 100. ; THE OUTPUT VECTOR IS INDEXED ON THE DEVICE UNIT NUMBER. ; E.G. TT0: IS SLOT 1 TT1: IS SLOT 2, TT20: IS SLOT 17 ETC. ; BATCH IS ADDED ON THE END OF THE LAST TT NUMBER. IF YOU HAVE 16 TERMS ; PLUS CONSOLE THEN BATCH SLOT NUMBERS START AT BA0: IS SLOT 18, BA1: IS ; SLOT 19 ETC. ; ; THE OUTPUT VECTOR IS DIMENSIONED IVEC(12,N) WHERE - ; IVEC(1,N) = 1ST WORD OF FIRST TASK NAME. ; IVEC(2,N) = 2ND WORD OF FIRST TASK NAME. ; IVEC(3,N) = 2ND WORD OF 2ND TASK NAME IF 2 OR MORE TASKS ACTIVE. ; IVEC(4,N) = 2ND WORD OF 3RD TASK NAME IF 3 OR MORE TASKS ACTIVE. ; IVEC(5,N) = HIGH ORDER PART OF CPU TICKS USED. ; IVEC(6,N) = LOW ORDER PART OF CPU TICKS USED. ; IVEC(7,N) = DELTA TICKS FROM LAST CALL OF SPYTI2 - NOT USED IN SPYTI2. ; IVEC(8,N) = SWAP FLAG - '* ' MEANS SWAPPED, ' ' MEANS NOT SWAPPED. ; IVEC(9-12,N) = FIRST 8 CHARACTERS OF USERNAME. ; ; N IS THE NUMBER OF TERMINALS PLUS THE NUMBER OF BATCH STREAMS. ; PSW=177776 ENTSZ=24. UNAM=16. SPYTI2::MOV 2(R5),R4 ;ATL ARRAY ADDRESS IN R0 ; MOV PSW,-(SP) ;PSW TO STACK ; BIS #140,PSW ;;INHIBIT TASK SWITCHING ; ATL MOV #.ATLLH,R1 ;;ATL LISTHEAD IN R1 MOV .ATLLH+2,-(SP) ;;END OF ATL ON STACK ATL: CMP (R1),(SP) ;;END OF LIST? BEQ RETURN ;;BR IF SO MOV (R1),R1 ;;GET A NODE MOV A.TD(R1),R2 ;;STD ADR OF TASK IN R2 BEQ ATL ;;IGNORE IF ZERO (EXEC'S TIMESHARE NODES) ; ; MAKE SURE PRIORITY IS <= 100. ; MOVB A.RP(R1),PRIO ;;RUN PRIORITY FROM ATL CLRB PRIO+1 CMP #100.,PRIO BMI ATL ; ; SET UP TO POINT TO UNIQUE TERMINAL AREA ; 10$: MOV A.TI(R1),R4 ;;TI POINTER TO PUD CLR R3 ;;SET UP FOR OFFSET INTO TERMINAL VECTOR MOVB U.UN(R4),R3 ;;UNIT NUMBER CMP U.DN(R4),#"TT ;;TERMINAL ? BNE 12$ ;;NOPE - GO CHECK BATCH CMP MAXTT,R3 ;;UNIT # OUT OF RANGE? BLE ATL ;;YES - SKIP IT BR 15$ 12$: CMP U.DN(R4),#"BA ;;BATCH ? BNE ATL ;;NOT 'TT' OR 'BA', SKIP IT CMP MAXBA,R3 ;;BATCH UNIT # IN BOUNDS? BLE ATL ;;NOPE, GET THE NEXT ATL ENTRY ADD MAXTT,R3 ;;PUT BATCH AT END OF 'TT'S 15$: MUL #ENTSZ,R3 ;;UNIT NUMBER * ENTRY SIZE ADD 2(R5),R3 ;;OFFSET + VECTOR START ; ; CHECK IF TASK NAME IS ...PDS ; CMP (R2),PDS1 BNE 25$ ;;NOT ...PDS CMP 2(R2),PDS2 ;; CHECK 2ND WORD /PDS/ BNE 25$ ;;NOT ...PDS ; ; IT'S ...PDS, GET USERNAME FROM IASCOM ; BIS #" ,16(R3) ;;OR IN ' ' FOR SWAP FLAG MOV A.JN(R1),R4 ;;JOB NODE ADDRESS MOV J.TA(R4),R4 ;;TERMINAL NODE ADDRESS MOV #8.,R0 ;;GET ONLY 8 CHARACTERS OF USERNAME ADD #I.UN,R4 ;;POINT TO USERNAME IN IASCOM ADD #UNAM,R3 ;;POINT TO USERNAME IN TERMINAL VECTOR 20$: MOVB (R4)+,(R3) BNE 21$ ;;NE - THEN VALID CHARACTER MOVB #' ,(R3) ;;BLANK SUBSTITUTE 21$: TSTB (R3)+ ;;BUMP POINTER SOB R0,20$ BR ATL ;;GET NEXT ENTRY ; ; FILL IN JOB NAME AND CPU TIME ACCUMULATED ; 25$: TST 2(R3) ;;ONE TASK NAME ALREADY FILLED IN? BEQ 27$ ;;NO DO THE FIRST ONE (WORD 1 AND 2) TST 4(R3) ;;TWO TASKS FILLED IN? BNE 26$ ;;YES FILL 3RD SLOT WITH AND LEFTOVERS MOV 2(R2),4(R3) ;;2ND WORD ONLY BR 28$ 26$: MOV 2(R2),6(R3) ;;2ND WORD ONLY, THIRD TASK BR 28$ 27$: MOV (R2),(R3) ;;1ST TNAME WORD MOV 2(R2),2(R3) ;;2ND TNAME WORD 28$: ADD A.TAC+2(R1),10(R3) ;;LOW WORD OF CPU TIME ADC 12(R3) ;;CARRY TO HIGH ORDER WORD ADD A.TAC(R1),12(R3) ;;HIGH ORDER WORD TST A.HA(R1) ;;HAS TASK BEEN LOADED? BEQ 30$ ;;IF NOT, FLAG SWAPPED OUT BIT #AT.TR,A.TST(R1);;TASK RESIDENT? BNE 30$ ;;NO, FLAG SWAPPED OUT BIT #AF.CP,A.TF(R1) ;;IS TASK CHECKPOINTED? BEQ 40$ ;;BR IF NOT 30$: BIS #"* ,16(R3) ;;FLAG SWAPPED OUT 40$: BR ATL ; ; ; RETURN: TST (SP)+ ; JSR PC,..ENB0 ; RTS PC ; PDS1: .RAD50 /.../ PDS2: .RAD50 /PDS/ PRIO: .WORD 0 ; ; ; /SPYDFC/ ; .PSECT SPYDFC RW,D,OVR,GBL MAXTT: .WORD 0 MAXBA: .WORD 0 ICNSOL: .WORD 0 I1T20: .WORD 0 I21T40: .WORD 0 I41T60: .WORD 0 I61T10: .WORD 0 I0BA7: .WORD 0 NSECW: .WORD 0 NLTD: .WORD 0 IDISP: .WORD 0 ; MXTERM: .WORD 0 IBASTR: .WORD 0 MXLTD: .WORD 0 MXDISP: .WORD 0 .END