mirror of
https://github.com/PDP-10/stacken.git
synced 2026-01-31 05:42:03 +00:00
379 lines
9.0 KiB
Fortran
379 lines
9.0 KiB
Fortran
IMPLICIT INTEGER (A-Z)
|
||
PARAMETER TOPCPU=4
|
||
DIMENSION UPTIME(TOPCPU),IDLTIM(TOPCPU)
|
||
DIMENSION DOORBL(TOPCPU),OVRHED(TOPCPU),L1(2)
|
||
DIMENSION UUOS(TOPCPU),CTXS(TOPCPU),SAWIT(TOPCPU)
|
||
DIMENSION SWEEPS(TOPCPU),CSHLST(TOPCPU),LSTTIM(TOPCPU)
|
||
DOUBLE PRECISION DUMMY
|
||
REAL F1
|
||
COMMON /DPY/SCREEN(16),GRFSUP,CPUOFS,ARROW,TRKING,SAVED(1000)
|
||
DATA WAIT/5/
|
||
CALL ERRSET(0)
|
||
TTTYPE = DPYINI(7,'VT52 ')
|
||
CPUOFS=48
|
||
ARROW=39
|
||
IF (TTTYPE .NE. 'VT52 '.AND.TTTYPE .NE. 'VT61 ') GOTO 8001
|
||
CPUOFS=116
|
||
ARROW=107
|
||
CALL ENGRAP
|
||
8001 CALL NECHO
|
||
CALL PGRAPH
|
||
CALL DPYZAP
|
||
ENCODE(80,200,SCREEN(1))
|
||
200 FORMAT(' UPTIME IDLE CACHE OVER',
|
||
1 ' UUOS DBLS CTXS CSWP PAGS FRECOR')
|
||
CALL DPYRSC(SCREEN,1,1,80,1)
|
||
ENCODE(80,201,SCREEN(1))
|
||
201 FORMAT(26X,'HIT HEAD SEC SEC SEC SEC SEC USED')
|
||
CALL DPYRSC(SCREEN,1,2,80,2)
|
||
DO 202 I=1,TOPCPU
|
||
CALL MTRINI(I-1)
|
||
SAWIT(I)=-1
|
||
202 UPTIME(I)=0
|
||
SWPBLK=0
|
||
INDEX=0
|
||
TRKING=0
|
||
|
||
|
||
1 CALL NEWPNT
|
||
SWPTHS=0
|
||
DO 100 I=1,100
|
||
CALL SWPDAT(INDEX,DUMMY,DUMMY,I1,I2,DUMMY,DUMMY)
|
||
IF (INDEX.EQ.0) GOTO 101
|
||
SWPTHS=SWPTHS+I1+I2
|
||
100 CONTINUE
|
||
101 LINE=4
|
||
CALL FREUSD(PERUSD)
|
||
DO 10 I=1,TOPCPU
|
||
FLAG=CPUDAT(I-1,UP,LOST,NUL,OHT,DBLS,UUO,
|
||
1 CTX,SWEEP,CSHHIT,CLT)
|
||
IF(FLAG.NE.0) GOTO 11
|
||
IF(GRFSUP.NE.0.AND.
|
||
1 (LINE.GT.9.OR.(UP-UPTIME(I).EQ.0.AND.SAWIT(I).EQ.0))) FLAG=-1
|
||
SAWIT(I)=0
|
||
IDLE=NUL-LOST
|
||
LOST=LOST-CLT
|
||
CSHHIT=100000-CSHHIT
|
||
IF(FLAG.EQ.0)
|
||
1 CALL DOOUT(I-1,LINE,UP,IDLE,CSHHIT,DBLS,OHT,UUO,CTX,SWEEP)
|
||
IF(UPTIME(I).EQ.0) GOTO 12
|
||
UPTIME(I)=UP-UPTIME(I)
|
||
IF(UPTIME(I).EQ.0) GOTO 12
|
||
SAWIT(I)=-1
|
||
IDLTIM(I)=IDLE-IDLTIM(I)
|
||
IF(IDLTIM(I).LT.0)IDLTIM(I)=0
|
||
DOORBL(I)=DBLS-DOORBL(I)
|
||
CSHLST(I)=CLT-CSHLST(I)
|
||
LSTTIM(I)=LOST-LSTTIM(I)
|
||
OVRHED(I)=OHT-OVRHED(I)
|
||
UUOS(I)=UUO-UUOS(I)
|
||
CTXS(I)=CTX-CTXS(I)
|
||
SWEEPS(I)=SWEEP-SWEEPS(I)
|
||
CALL COLECT(0,I-1,(UPTIME(I)/60))
|
||
CALL COLECT(1,I-1,UUOS(I)/(UPTIME(I)/60))
|
||
CALL COLECT(2,I-1,(OVRHED(I)*100)/UPTIME(I))
|
||
CALL COLECT(3,I-1,CTXS(I)/(UPTIME(I)/60))
|
||
CALL COLECT(4,I-1,CSHHIT/1000)
|
||
CALL COLECT(5,I-1,(IDLTIM(I)*100)/UPTIME(I))
|
||
CALL COLECT(7,I-1,SWEEPS(I)/(UPTIME(I)/60))
|
||
CALL COLECT(9,I-1,DOORBL(I)/(UPTIME(I)/60))
|
||
CALL COLECT(10,I-1,(CSHLST(I)*100)/UPTIME(I))
|
||
CALL COLECT(11,I-1,(LSTTIM(I)*100)/UPTIME(I))
|
||
12 IF(FLAG.NE.0) GOTO 13
|
||
CALL DOOUT(-1,LINE+1,UPTIME(I),IDLTIM(I),CSHHIT,
|
||
1 DOORBL(I),OVRHED(I),UUOS(I),CTXS(I),SWEEPS(I))
|
||
IF(I.NE.1) GOTO 14
|
||
F1=PERUSD/100.
|
||
ENCODE(10,103,L1) F1
|
||
103 FORMAT(F5.2,'%')
|
||
CALL DPYRSC(L1,64,LINE,69,LINE)
|
||
I1=F1
|
||
IF (UPTIME(1).NE.0) CALL COLECT(8,0,I1)
|
||
I1=SWPTHS/(UP/15)
|
||
ENCODE(10,102,L1) I1
|
||
102 FORMAT(I5)
|
||
SWPBLK=SWPTHS-SWPBLK
|
||
IF(UPTIME(1).EQ.0) GOTO 15
|
||
I1=SWPBLK/(UPTIME(1)/15)
|
||
ENCODE(5,102,L1(2)) I1
|
||
CALL COLECT(6,0,I1)
|
||
15 SWPBLK=SWPTHS
|
||
CALL DPYRSC(L1,58,LINE,62,LINE+1)
|
||
14 LINE=LINE+3
|
||
13 UPTIME(I)=UP
|
||
IDLTIM(I)=IDLE
|
||
DOORBL(I)=DBLS
|
||
CSHLST(I)=CLT
|
||
LSTTIM(I)=LOST
|
||
OVRHED(I)=OHT
|
||
UUOS(I)=UUO
|
||
CTXS(I)=CTX
|
||
SWEEPS(I)=SWEEP
|
||
10 CONTINUE
|
||
|
||
|
||
11 CALL GRFOUT
|
||
1100 CHAR=CHAR1(0)
|
||
IF(CHAR.EQ.0) GOTO 1101
|
||
IF(CHAR.EQ.'R') CALL DPYREF
|
||
IF(CHAR.EQ.'W') CALL SAVEIT
|
||
IF(CHAR.EQ.'T') CALL TRACK
|
||
IF(WAIT.GT.1 .AND. CHAR.EQ.'F') WAIT=WAIT-1
|
||
IF(WAIT.LT.60 .AND. CHAR.EQ.'S') WAIT=WAIT+1
|
||
IF(CHAR.NE.'+') GOTO 1102
|
||
CALL ADGRAP
|
||
GOTO 11
|
||
1102 IF(CHAR.NE.'-') GOTO 1103
|
||
CALL RMGRAP
|
||
GOTO 11
|
||
1103 IF(CHAR.NE.'H') GOTO 1104
|
||
CALL DPYSAV(SAVED)
|
||
CALL DPYROL(3)
|
||
CALL CPUHLP
|
||
CALL DPYWAT(10)
|
||
CALL DPYCLR
|
||
CALL DPYRST(SAVED)
|
||
1104 IF(CHAR.NE.'E' .AND. CHAR.NE."151004020100) GOTO 1105
|
||
CALL DPYROL(1)
|
||
CALL ECHO
|
||
1105 GOTO 1100
|
||
1101 CALL DPYCRM(-1,1,1)
|
||
CALL DPYWAT(WAIT)
|
||
GOTO 1
|
||
END
|
||
SUBROUTINE DOOUT
|
||
1 (ICPU,LINE,IUP,IDLE,ICSH,IDBLS,IOVH,IUUO,ICTX,ISWP)
|
||
DIMENSION ITIM(5)
|
||
COMMON /DPY/SCREEN(16),GRFSUP,CPUOFS,ARROW,TRKING,SAVED(400)
|
||
ITIM(1)=IUP/(3600*60)
|
||
ITIM(3)=(IUP-(ITIM(1)*3600*60))/(60*60)
|
||
ITIM(5)=(IUP-(ITIM(1)*3600*60)-(ITIM(3)*60*60))/60
|
||
ITIM(2)=ITIM(3)/10
|
||
ITIM(4)=ITIM(5)/10
|
||
ITIM(3)=ITIM(3)-(ITIM(2)*10)
|
||
ITIM(5)=ITIM(5)-(ITIM(4)*10)
|
||
IF(IUP.LT.60) GOTO 600
|
||
F1=(IDLE*100.0)/IUP
|
||
F4=(IOVH*100.0)/IUP
|
||
I5=IUUO/(IUP/60)
|
||
I6=ICTX/(IUP/60)
|
||
I7=ISWP/(IUP/60)
|
||
I8=IDBLS/(IUP/60)
|
||
IF(ICPU.LT.0) GOTO 500
|
||
ENCODE(80,100,SCREEN(1))ICPU,ITIM,F1,F4,I5,I8,I6,I7
|
||
100 FORMAT(' CPU',I1,I4,':',2I1,':',2I1,
|
||
1 F6.1,'%',8X,F6.1,'%',4I5)
|
||
GOTO 501
|
||
500 F2=ICSH/1000.0
|
||
ENCODE(80,101,SCREEN(1))ITIM,F1,F2,F4,I5,I8,I6,I7
|
||
101 FORMAT(I9,':',2I1,':',2I1,F6.1,'%',F7.2,
|
||
1 '%',F6.1,'%',4I5)
|
||
501 CALL DPYRSC(SCREEN,1,LINE,57,LINE)
|
||
RETURN
|
||
600 IF(ICPU.LT.0) GOTO 601
|
||
ENCODE(80,102,SCREEN(1))ICPU,ITIM
|
||
102 FORMAT(' CPU',I1,I4,':',2I1,':',2I1)
|
||
GOTO 501
|
||
601 ENCODE(80,103,SCREEN(1))ITIM
|
||
103 FORMAT(I9,':',2I1,':',2I1)
|
||
GOTO 501
|
||
END
|
||
SUBROUTINE SAVEIT
|
||
IMPLICIT INTEGER (A-Z)
|
||
DOUBLE PRECISION FILENA
|
||
COMMON /DPY/SCREEN(16),GRFSUP,CPUOFS,ARROW,TRKING,SAVED(400)
|
||
DATA FILNUM/1/
|
||
CALL DPYSAV(SAVED)
|
||
ENCODE(10,201,FILENA)FILNUM
|
||
201 FORMAT('SCREEN.',O3)
|
||
OPEN(UNIT=20,DEVICE='DSK',
|
||
1 ACCESS='SEQOUT',MODE='ASCII',FILE=FILENA)
|
||
DO 20 I=1,400,16
|
||
WRITE(20,200)(SAVED(J),J=I,I+15)
|
||
200 FORMAT(16A5)
|
||
20 CONTINUE
|
||
CLOSE(UNIT=20)
|
||
FILNUM=FILNUM+1
|
||
RETURN
|
||
END
|
||
SUBROUTINE COLECT(GN,CPUN,ITEM)
|
||
IMPLICIT INTEGER (A-Z)
|
||
PARAMETER NUMGRA=11
|
||
DOUBLE PRECISION TRKLIT
|
||
DIMENSION CPUSIG(6),CPUCOL(6)
|
||
DIMENSION GRPHS(8,16,NUMGRA),SIGNAL(NUMGRA),BOTTOM(NUMGRA)
|
||
DIMENSION SCALE(NUMGRA),TAKEN(NUMGRA)
|
||
COMMON /DPY/SCREEN(16),GRFSUP,CPUOFS,ARROW,TRKING,SAVED(400)
|
||
DATA TRKLIT/'*TRACKING*'/
|
||
DATA UPLIT/'UP'/
|
||
DATA CPUSIG/'0','1','2','3','4','5'/
|
||
DATA CPUCOL/-1,-1,-1,-1,-1,-1/
|
||
DATA SIGNAL/'U','O','C','H','I','S','J','F','D','Z','L'/
|
||
DATA SCALE/25,4,10,3,8,15,15,8,15,2,2/
|
||
DATA TAKEN/0,1,0,0,-1,0,0,0,0,0,0/
|
||
DATA BOTTOM/0,0,0,60,0,0,0,0,0,0,0/
|
||
|
||
IF(TRKING.EQ.0) GOTO 4000
|
||
IF(GN.EQ.0) WRITE(21,8999)UPLIT,CPUN,ITEM
|
||
IF(GN.NE.0) WRITE(21,8999)SIGNAL(GN),CPUN,ITEM
|
||
8999 FORMAT(A2,I1,I7)
|
||
4000 IF(GN.EQ.0 .OR. CPUCOL(CPUN+1).EQ.0) RETURN
|
||
ITEMP=15-(ITEM-BOTTOM(GN)+(SCALE(GN)/2))/SCALE(GN)
|
||
IF (ITEMP.LT.2) ITEMP=2
|
||
IF (ITEMP.GT.15) ITEMP=15
|
||
CALL PUTC(CPUOFS+CPUN,CURPNT,ITEMP,GRPHS(1,1,GN),40)
|
||
RETURN
|
||
|
||
|
||
ENTRY PGRAPH
|
||
|
||
CURPNT=5
|
||
CLRPNT=CURPNT+3
|
||
GRFSUP=0
|
||
DO 5001 II=1,NUMGRA
|
||
IF(TAKEN(II).NE.0) GRFSUP=GRFSUP+1
|
||
DO 5000 I=2,15
|
||
N=((15-I)*SCALE(II))+BOTTOM(II)
|
||
GOTO (100,200,100,200,200,100,100,200,100,200,200),II
|
||
100 ENCODE(40,9999,GRPHS(1,I,II))N
|
||
9999 FORMAT(I3)
|
||
GOTO 5000
|
||
200 ENCODE(40,9998,GRPHS(1,I,II))N
|
||
9998 FORMAT(I2,'%')
|
||
5000 CONTINUE
|
||
GOTO (101,201,301,401,501,601,701,801,901,1001,1101),II
|
||
101 ENCODE(40,9997,GRPHS(1,16,1))
|
||
9997 FORMAT(14X,'UUOS/SECOND')
|
||
GOTO 5001
|
||
201 ENCODE(40,9996,GRPHS(1,16,2))
|
||
9996 FORMAT(16X,'OVERHEAD')
|
||
GOTO 5001
|
||
301 ENCODE(40,9995,GRPHS(1,16,3))
|
||
9995 FORMAT(8X,'CONTEXT SWITCHES/SECOND')
|
||
GOTO 5001
|
||
401 ENCODE(40,9994,GRPHS(1,16,4))
|
||
9994 FORMAT(12X,'CACHE HIT RATIO')
|
||
GOTO 5001
|
||
501 ENCODE(40,9993,GRPHS(1,16,5))
|
||
9993 FORMAT(16X,'IDLE TIME')
|
||
GOTO 5001
|
||
601 ENCODE(40,9992,GRPHS(1,16,6))
|
||
9992 FORMAT(9X,'SWAPPING PAGES/SECOND')
|
||
GOTO 5001
|
||
701 ENCODE(40,9991,GRPHS(1,16,7))
|
||
9991 FORMAT(10X,'CACHE SWEEPS/SECOND')
|
||
GOTO 5001
|
||
801 ENCODE(40,9990,GRPHS(1,16,8))
|
||
9990 FORMAT(9X,'MONITOR FREE CORE USED')
|
||
GOTO 5001
|
||
901 ENCODE(40,9989,GRPHS(1,16,9))
|
||
9989 FORMAT(9X,'DOOR BELL RINGS/SECOND')
|
||
GOTO 5001
|
||
1001 ENCODE(40,9988,GRPHS(1,16,10))
|
||
9988 FORMAT(12X,'CACHE LOST TIME')
|
||
GOTO 5001
|
||
1101 ENCODE(40,9987,GRPHS(1,16,11))
|
||
9987 FORMAT(13X,'SWAP LOST TIME')
|
||
5001 CONTINUE
|
||
RETURN
|
||
|
||
|
||
ENTRY NEWPNT
|
||
|
||
OLDPNT=CURPNT
|
||
CURPNT=CURPNT+1
|
||
IF(CURPNT.GT.38) CURPNT=6
|
||
CLRPNT=CLRPNT+1
|
||
IF(CLRPNT.GT.38) CLRPNT=6
|
||
DO 5002 II=1,NUMGRA
|
||
CALL PUTC(0,OLDPNT,1,GRPHS(1,1,II),40)
|
||
CALL PUTC(ARROW,CURPNT,1,GRPHS(1,1,II),40)
|
||
DO 5002 I=2,15
|
||
III=I
|
||
5002 CALL PUTC(0,CLRPNT,III,GRPHS(1,1,II),40)
|
||
RETURN
|
||
|
||
|
||
ENTRY GRFOUT
|
||
|
||
LEFT=0
|
||
RIGHT=0
|
||
DO 5003 II=1,NUMGRA
|
||
IF (TAKEN(II)) 5004,5003,5005
|
||
5004 IF(RIGHT.NE.0) GOTO 5003
|
||
RIGHT=1
|
||
CALL DPYRSC(GRPHS(1,1,II),41,9,80,24)
|
||
GOTO 5003
|
||
5005 IF(LEFT.NE.0) GOTO 5003
|
||
LEFT=1
|
||
CALL DPYRSC(GRPHS(1,1,II),1,9,40,24)
|
||
5003 CONTINUE
|
||
RETURN
|
||
|
||
|
||
ENTRY RMGRAP
|
||
|
||
CHAR=CHAR2(ITEMP)
|
||
DO 5006 II=1,NUMGRA
|
||
IF(CHAR.NE.SIGNAL(II)) GOTO 5006
|
||
IF(TAKEN(II).EQ.0) RETURN
|
||
IF (TAKEN(II).LT.0) CALL DPYCSC(41,9,80,24)
|
||
IF (TAKEN(II).GT.0) CALL DPYCSC(1,9,40,24)
|
||
GRFSUP=GRFSUP-1
|
||
TAKEN(II)=0
|
||
RETURN
|
||
5006 CONTINUE
|
||
DO 5021 II=1,6
|
||
IF (CHAR.NE.CPUSIG(II)) GOTO 5021
|
||
CPUCOL(II)=0
|
||
RETURN
|
||
5021 CONTINUE
|
||
RETURN
|
||
|
||
|
||
ENTRY ADGRAP
|
||
|
||
CHAR=CHAR2(ITEMP)
|
||
LEFT=0
|
||
RIGHT=0
|
||
I=0
|
||
DO 5009 II=1,NUMGRA
|
||
IF(TAKEN(II)) 5010,5011,5012
|
||
5010 RIGHT=1
|
||
GOTO 5011
|
||
5012 LEFT=1
|
||
5011 IF(CHAR.EQ.SIGNAL(II)) I=II
|
||
5009 CONTINUE
|
||
IF(I.EQ.0) GOTO 5022
|
||
IF(TAKEN(I).NE.0) RETURN
|
||
IF(LEFT.NE.0) GOTO 5013
|
||
TAKEN(I)=1
|
||
GOTO 5014
|
||
5013 IF(RIGHT.EQ.0) TAKEN(I)=-1
|
||
5014 IF(TAKEN(I).NE.0) GRFSUP=GRFSUP+1
|
||
IF (GRFSUP.EQ.1) CALL DPYCSC(41,9,80,24)
|
||
RETURN
|
||
5022 DO 5023 II=1,6
|
||
IF (CHAR.NE.CPUSIG(II)) GOTO 5023
|
||
CPUCOL(II)=-1
|
||
RETURN
|
||
5023 CONTINUE
|
||
RETURN
|
||
|
||
|
||
ENTRY TRACK
|
||
|
||
IF(TRKING.EQ.0) GOTO 5024
|
||
CLOSE(UNIT=21)
|
||
TRKING=0
|
||
CALL DPYCSC(7,2,16,2)
|
||
RETURN
|
||
5024 OPEN(UNIT=21,DEVICE='DSK',
|
||
1 ACCESS='SEQOUT',MODE='ASCII',FILE='TRKOUT.CPU')
|
||
TRKING=1
|
||
CALL DPYRSC(TRKLIT,7,2,16,2)
|
||
RETURN
|
||
|
||
|
||
END
|