.TITLE NODE -- DISPLAYS IAS NODE USAGE .SBTTL ;------------------------------------------------------------------------ ; AUTHOR: BARRY K. ATKINSON ; DEFENSE INTELLIGENCE AGENCY ; RSE-2 ; WASHINGTON, DC 20301 ;------------------------------------------------------------------------ ; 'NODE' WILL DISPLAY ON A VT52/VT100 THE NODE USAGE STATISITICS OF ; INSTALLED TASKS. ; ; TO RUN NODE: ; ; MCR>INS [?,?]NODE ; MCR>NOD ; ; THE INITIAL DISPLAY WILL BE OF ALL TASKS WITH NON-ZERO POOL USAGE. ; THIS DISPLAY WILL BE UPDATED EVERY 5 SECONDS. WHILE 'NODE' IS ; RUNNING, IT WILL ACCEPT INPUT FROM THE TERMINAL (THE INPUT WILL NOT ; BE ECHOED TO THE TERMINAL). INPUT MAY BE: ; ; TERMINATE 'NODE' ; ^Z TERMINATE 'NODE' ; N DISPLAY TASKS WITH NON-ZERO POOL USAGE ; A1 DISPLAY ALL INSTALLED TASKS ; A0 DISPLAY ALL INSTALLED TASKS EXCEPT BLANK OUT ; TASKS WITH ZERO POOL USAGE;EFFECTIVELY THE SAME ; AS 'N' EXCEPT THE TASKS KEEP THEIR RELATIVE ; POSITION. ; IN CHANGE THE TIME INTERVAL BETWEEN SCREEN UPDATES. ; N=THE NUMBER OF SECONDS BETWEEN SCREEN UPDATES ; N=0,1,...8,9 ONLY (0 GIVES A CONTINUOUS UPDATE) ;------------------------------------------------------------------------ .NLIST BEX ;-------------------------------------------------------- .MCALL QIOW$,QIO$,DIR$,MRKT$S,WTSE$S,EXIT$S,.INH,.ENB,SETF$S,ASTX$S ;-------------------------------------------------------- .PSECT NODEI,D,GBL,RW OUTBUF: .BLKB 40. STRING: .ASCIZ /%2R %D/ .EVEN A1: 0 A2: 0 A3: 0 ;-------------------------------------------------------- READ: QIO$ IO.RLB!TF.RNE,5,,,RIOST,RDAST, RIOST: 0,0 RBUF: .BLKB 10. BOTTOM: QIOW$ IO.WLB!TF.WAL,5,5,,,, B.BUF: .BYTE 33,'Y,37+24.,37+30. .ASCII /'NODE' EXITING/ LBBUF=.-B.BUF .EVEN ;-------------------------------------------------------- HD: .ASCIZ /IAS NODE USAGE FREE=%D LONG=%D/ BLANK: .ASCIZ /%VS/ .EVEN ;-------------------------------------------------------- $CW:: 11. ;COLUMN WIDTH IN BYTES EXITFL: 0 INTERVAL:: 5 ;DELAY INTERVAL IN SECONDS MODE:: 'N ;N = PRINT ONLY TASKS WITH NON-ZERO USAGE ;A1 = PRINT ALL INSTALLEED TASKS ;A0 = PRINT ALL INSTALLED TASKS BUT BLANK ; THOSE WITH USAGE = 0 ;-------------------------------------------------------- .PAGE .PSECT NODEP,I,LCL,RO START: DIR$ #READ CALL MC.IN ;INIT MULCOL ROUTINE CALL MC.SM ;SET SCREEN MODE MOV $CW,R0 ;COLUMN WIDTH IN BYTES CALL MC.CW ;SET COLUMN WIDTH CALL MC.BBC ;BYPAS 1ST ROW BLANK CHECK CALL MC.NC ;NO CLASSIFICATION ; CREATE A FAKE HEADER--REAL ONE CREATED LATER MOV #1,R0 ;L(FAKE HEADER) MOV #HD,R1 ;A(FAKE HEADER) CALL MC.HD ;PASS HEADER PARAMETERS TO MULCOL ;------------------------------------------------------------------------ 100$: MOV .STDTA,R5 ;A(ALPHA TABLE) MOV R5,R4 ADD .STDTZ,R4 ;A(END OF FILLED IN ALPHA TABLE) 110$: CMP R5,R4 ;END OF STD ENTRIES? BGE 190$ ;BR IF YES MOV (R5)+,R3 ;A(STD) BEQ 180$ ;BR IF NONE ; CMPB MODE,#'A ;ALL TASKS? BEQ 115$ ;BR IF YES--BYPASS USAGE CHECK TST S.PU(R3) ;ANY NODES USED? BEQ 180$ ;BR IF NO 115$: MOV S.TN(R3),A1 ;TASK NAME MOV S.TN+2(R3),A2 MOV S.PU(R3),A3 ;NODE USAGE MOV #OUTBUF,R0 MOV #STRING,R1 ; TST A3 ;0 NODES? BNE 125$ ;BR IF NO CMP MODE,#"A1 ;PRINT TASLS WITH 0 USAGE? BEQ 125$ ;BR IF YES MOV $CW,A1 ;# OF BLANKS TO PRINT MOV #BLANK,R1 ;A(BLANK STRING) 125$: MOV #A1,R2 CALL $EDMSG SUB #OUTBUF,R0 ;L(PRINT LINE) MOV #OUTBUF,R1 ;A(PRINT LINE) CALL MULCOL 180$: BR 110$ 190$: ; ; DETERMINE # OF FREE NODES ; .INH MOV @#.POLLH,R0 ;A(1ST FREE NODE) CLR A1 CLR A2 192$: MOV 2(R0),R1 ;L(CONTIG FREE NODES) ASH #-4,R1 ;# OF 8-BYTE NODES ADD R1,A1 ;ACCUMULATE TOTAL CMP R1,A2 ;NEW LONG? BLE 199$ ;BR IF NO MOV R1,A2 ;YES--SAVE NEW LONG 199$: MOV (R0),R0 ;A(NEXT CONTIG FREE NODES) BNE 192$ ;CONTINUE IF THERE ARE ANY .ENB ; ; CREATE HEADER ; MOV #OUTBUF,R0 MOV #HD,R1 MOV #A1,R2 CALL $EDMSG SUB #OUTBUF,R0 ;L(PRINT LINE) MOV #OUTBUF,R1 ;A(PRINT LINE) CALL MC.HD ;PASS HEADER TO MULCOL ROUTINE ; ; PRINT THE SCREEN ; CALL MC.PP 200$: TST EXITFL ;EXIT? BNE EXIT ; MRKT$S #1,INTERVAL,#2 ;DELAY WTSE$S #1 ; TST EXITFL BNE EXIT ; BR 100$ 999$: EXIT$S ;------------------------------------------------------- EXIT:: DIR$ #BOTTOM EXIT$S ;------------------------------------------------------- RDAST: MOV R0,-(SP) MOV R1,-(SP) ; CMPB RIOST,#IE.EOF ;^Z ENTERED? BNE 29$ ;BR IF NO 25$: INC EXITFL ;SET TO EXIT BR 999$ 29$: TSTB RIOST+2 ;ANY INPUT BEQ 25$ ;BR IF NO ; MOV RIOST+2,R0 CLRB RBUF(R0) ;CLEAR BYTE FOLLOWING INPUT ; CMPB RBUF,#'A BNE 129$ MOV RBUF,MODE BR 990$ 129$: CMPB RBUF,#'N BNE 139$ MOV RBUF,MODE BR 990$ 139$: CMPB RBUF,#'I ;TIME INTERVAL CHANGE? BNE 119$ MOVB RBUF+1,INTERVAL BIC #60,INTERVAL BR 990$ 119$: 990$: CLR RBUF DIR$ #READ 999$: MOV (SP)+,R1 MOV (SP)+,R0 TST (SP)+ ;POP A(IOST) ASTX$S ;------------------------------------------------------------------- .END START