C C PROGRAM REPORT - TMON DATA COMPUTATION AND REPORTING C BYTE SEG(6,150),NMBUF(6),IANS,ANS INTEGER*4 DSLF(150),DSLCNT(150),ITOTAL,DSFT(8,150),DWAIT(16) INTEGER*4 NSMPLS,MAX,MIN,DCNT INTEGER SLI,SLB,SLL,MW(1200),SFT,SLF,SLFLG,SLCNT,OUTC,WAITFR INTEGER TICKS,BUF1,BUF2,DTIC COMMON/MONCOM/ID(5),SLI(6),SLB(7),SLL(150),SFT(8,150),SLF(150), 1 SLFLG(150),SLCNT(150),WAITFR(16),OUTC,BUF1(8),BUF2(8),DTIC COMMON/SEGLST/SEG EQUIVALENCE (MW,SFT) DATA SEG/900*1H / C C INITIAL VALUES FOR NON-O/L TASK: C KS=1 ANS=' ' C TYPE 10 10 FORMAT('$NO. OF OVERLAYS IN TASK (INCLUDING ROOT):') ACCEPT *,NSEG TYPE 15 15 FORMAT('$ OUTPUT LUN:') ACCEPT *,LUN IF (NSEG .EQ. 0) GOTO 27 TYPE 20 20 FORMAT('$MONITOR SINGLE SEGMENT OR TASK (S OR T):') READ(5,21)ANS 21 FORMAT(A1) IF (ANS .EQ. 'T') GOTO 26 TYPE 23 23 FORMAT('$SEGMENT INDEX (ROOT=0):') ACCEPT *,KS KS=KS+1 C C GENERATE SEGMENT NAMES LIST C 26 CALL NAMLST(ID,NSEG) C 27 WRITE(LUN,28) 28 FORMAT(//,' TASK MONITOR REPORT'///) C C CONVERT SGA DATA ARRAYS TO POSITIVE VALUES C DO 5 IN=1,150 DSLF(IN)=SLF(IN) IF (SLF(IN) .LT. 0) DSLF(IN)=65536+DSLF(IN) DSLCNT(IN)=SLCNT(IN) IF (SLCNT(IN) .LT. 0) DSLCNT(IN)=65536+DSLCNT(IN) DO 6 J=1,8 DSFT(J,IN)=SFT(J,IN) IF (SFT(J,IN) .LT. 0) DSFT(J,IN)=65536+DSFT(J,IN) 6 CONTINUE 5 CONTINUE DO 7 IN=1,16 DWAIT(IN)=WAITFR(IN) IF (WAITFR(IN) .LT. 0) DWAIT(IN)=65536+DWAIT(IN) 7 CONTINUE C C C COMPUTE GENERAL INFO: C MONITORED TASK AND TERMINAL NO. C DURATION BETWEEN SAMPLES (NTICS) C NO. OF SAMPLES (NSMPLS) C MONITOR DURATION - TASK ACTIVE PERIOD (TICKS AND SECS) C CALL R50ASC(6,ID,NMBUF) NTICS=DTIC NSMPLS=DSLF(1) TICKS=NTICS*NSMPLS SECS=TICKS*0.01667 WRITE(LUN,102)NMBUF,ID(4) 102 FORMAT(1X,'MONITORED TASK: ',6A1/,1X,'TERMINAL TT: ',2O//) WRITE(LUN,104)TICKS,SECS 104 FORMAT(1X,'TASK ACTIVE TIME: ',I7,' TICKS,',F7.03,' SECONDS'//) WRITE(LUN,106) WRITE(LUN,108)(BUF1(I),I=4,7),BUF1(3),BUF1(2),BUF1(1) WRITE(LUN,107) WRITE(LUN,108)(BUF2(I),I=4,7),BUF2(3),BUF2(2),BUF2(1) 106 FORMAT('$','MONITOR ON: ') 107 FORMAT('$','MONITOR OFF: ') 108 FORMAT('+',16X,I2,3(':',I2),4X,I2,2('-',I2)) 39 TYPE 40 40 FORMAT('$SGA DUMP? (Y OR N):') READ(5,21)IANS IF (IANS .EQ. 'Y') GOTO 399 IF (IANS .EQ. 'N') GOTO 42 GOTO 39 42 NHIT=1 TYPE 47 47 FORMAT('$FILTER OFF?') READ(5,21)IANS IF (IANS .EQ. 'Y') GOTO 49 TYPE 48 48 FORMAT('$MIN HIT LEVEL FOR OUTPUT?') ACCEPT *,NHIT 49 IF (NSEG .EQ. 0) GOTO 45 C C OUTPUT SEGMENT LOADED LIST AT TERMINATION C WRITE(LUN,22) 22 FORMAT(/1X,' SEGMENT LOADED LIST AT TERMINATION:'/) I=1 25 IN=SLI(I)/2+1 IF ((I .GT. 1) .AND. (IN .EQ. 1)) GOTO 50 WRITE(LUN,30) (SEG(J,IN),J=1,6) 30 FORMAT(1X,6A1) I=I+1 GOTO 25 C C OUTPUT SEGMENT LOAD FREQUENCY C 50 WRITE(LUN,35) 35 FORMAT(/,11X,'LOAD FREQUENCY',4X,'NO. OF TIMES LOADED') WRITE(LUN,36) 36 FORMAT(1X,'SEGMENT:',1X,'RELATIVE TO ROOT',2X,'DURING MONITOR' 1 ' PERIOD'/) ITOTAL=DSLF(1) IF (ITOTAL .EQ. 0) GOTO 998 DO 200 I=2,NSEG PC=DSLF(I)*100./ITOTAL IF (PC .EQ. 0) GOTO 200 WRITE(LUN,60) (SEG(J,I),J=1,6),PC,DSLCNT(I) 60 FORMAT(1X,6A1,F12.02,' %',4X,I12) 200 CONTINUE C C OUTPUT INACTIVE DATA C 45 WRITE(LUN,51) 51 FORMAT(//' TASK INACTIVE STATES DURING MONITOR PERIOD'/) ITOTAL=0 SECS=0 PC=0 DO 12 I=1,15 ITOTAL=ITOTAL+DWAIT(I) 12 CONTINUE IF ((ITOTAL .EQ. 0) .AND. (DSLF(1) .EQ. 0)) GOTO 11 PC=ITOTAL*100./(ITOTAL+DSLF(1)) SECS=ITOTAL*0.01667 11 WRITE(LUN,14)ITOTAL,SECS 14 FORMAT(1X'TASK INACTIVE TIME: ',I7,' TICKS,',F10.03,' SECONDS') WRITE(LUN,110) PC 110 FORMAT(/' TASK INACTIVE',F10.02,' % OF MONITOR PERIOD'/) IF (ITOTAL .EQ. 0) GOTO 202 DO 13 I=0,4 PC=DWAIT(I+1)*100./ITOTAL IF (PC .EQ. 0) GOTO 13 WRITE(LUN,112) I,PC 112 FORMAT(8X,'WF',I1,':',F7.02,' %') 13 CONTINUE DO 17 I=0,4 PC=DWAIT(I+6)*100./ITOTAL IF (PC .EQ. 0) GOTO 17 WRITE(LUN,114) I,PC 114 FORMAT(8X,'ST',I1,':',F7.02,' %') 17 CONTINUE PC=DWAIT(11)*100./ITOTAL IF (PC .EQ. 0) GOTO 116 WRITE(LUN,115)PC 115 FORMAT(8X,'STP:',F7.02,' %') 116 PC=DWAIT(12)*100./ITOTAL IF (PC .EQ. 0) GOTO 118 WRITE(LUN,117)PC 117 FORMAT(8X,'MRL:',F7.02,' %') 118 PC=DWAIT(13)*100./ITOTAL IF (PC .EQ. 0) GOTO 120 WRITE(LUN,119) PC 119 FORMAT(8X,'MRR:',F7.02,' %') 120 PC=DWAIT(14)*100./ITOTAL IF (PC .EQ. 0) GOTO 122 WRITE(LUN,121) PC 121 FORMAT(8X,'SUS:',F7.02,' %') 122 PC=DWAIT(15)*100./ITOTAL IF (PC .EQ. 0) GOTO 202 WRITE(LUN,113) PC 113 FORMAT(6X,'OTHER:',F7.02,' %') C C OUTPUT SEGMENT PC LOCATION FREQUENCY C 202 WRITE(LUN,61) 61 FORMAT(1X,//' SEGMENT PC LOCATION FREQUENCY') IN=1 LT=8 ITOTAL=DSLF(1) IF (ITOTAL .EQ. 0) GOTO 85 HITLVL=100.*NHIT/ITOTAL 65 IF (DSLF(IN) .EQ. 0) GOTO 75 ICNT=0 IF (ANS .EQ. 'T') GOTO 66 IN=KS LT=1024 !WORDS IF (NSEG .NE. 0) GOTO 81 IF (SLL(1) .LE. 1200) LT=SLL(1) GOTO 83 81 IF (SLL(IN) .LE. 2400) LT=SLL(IN)/2 83 DO 82 I=1,LT ICNT=ICNT+MW(I) 82 CONTINUE GOTO 67 66 DO 64 I=1,LT ICNT=ICNT+SFT(I,IN) 64 CONTINUE 67 IF (ICNT .EQ. 0)GOTO 75 PCT=0. IF (NSEG .EQ. 0) GOTO 71 WRITE(LUN,62) (SEG(J,IN),J=1,6) 62 FORMAT(1X,//' SEGMENT: ',6A1/) GOTO 74 71 WRITE(LUN,72) NMBUF 72 FORMAT(1X,//' TASK: ',6A1/) 74 IF (IANS .EQ. 'Y') GOTO 58 WRITE(LUN,56) NHIT 56 FORMAT(1X,'FILTER ON - MIN HIT LEVEL REPORTED:',I4/) 58 WRITE(LUN,63) 63 FORMAT(8X,'RANGE',10X,'PERCENT',5X,'HITS'/) MIN=0 TL=LT DELTA=SLL(IN)/TL IF (NSEG .EQ. 0) DELTA=SLL(1)*2./TL XMAX=DELTA DO 350 I=1,LT PC=DSFT(I,IN)*100./ITOTAL DCNT=DSFT(I,IN) IF (ANS .EQ. 'T') GOTO 69 PC=MW(I)*100./ITOTAL DCNT=MW(I) 69 PCT=PCT+PC MAX=XMAX IF (LT .EQ. SLL(1)) MAX=XMAX-1 IF (PC .GE. HITLVL) WRITE(LUN,70)MIN,MAX,PC,DCNT 70 FORMAT(1X,O7,' -',O7,F12.02,I9) MIN=MAX+1 XMAX=XMAX+DELTA 350 CONTINUE WRITE(LUN,80) PCT 80 FORMAT(16X,' TOTAL',F7.02) 75 IN=IN+1 IF (IN .LE. NSEG .AND. ANS .EQ. 'T') GOTO 65 C C OUTPUT PC OUT OF ADDR SPACE COUNT C IF (OUTC .EQ. 0) GOTO 85 WRITE(LUN,180) 180 FORMAT(1X,//' PC OUTSIDE TASK ADDR SPACE'/) PCO=OUTC*100./DSLF(1) WRITE(LUN,185) PCO 185 FORMAT(1X,F10.02,' % OF ACTIVE PERIOD') 85 STOP C C DUMP SGA: C 399 WRITE(LUN,400)SLI,SLB 400 FORMAT(1X,'SLI:',6I7,' SLB:',7I7//,1X,'SLL:') WRITE(LUN,402)(SLL(I),I=1,NSEG+1) 402 FORMAT(1X,I7) WRITE(LUN,403) 403 FORMAT(/,7X,'SLF: SLFLG: SLCNT:') WRITE(LUN,404) (SLF(I),SLFLG(I),SLCNT(I),I=1,NSEG+1) 404 FORMAT(1X,3I10) WRITE(LUN,406) 406 FORMAT(/,1X,'SEG FREQ TBLS:') IF (NSEG .EQ. 0) NSEG=150 DO 405 I=1,NSEG WRITE(LUN,410)I,(SFT(J,I),J=1,8) 410 FORMAT(1X,'TBL:',I6,9I7) 405 CONTINUE WRITE(LUN,412) DWAIT 412 FORMAT(/,1X,'WAIT LIST:',16I7) WRITE(LUN,415) OUTC 415 FORMAT(/1X,'OUTCNT:',I6) WRITE(LUN,407)DTIC 407 FORMAT(/,1X,'SAMPLE DELTA (TICKS):',I7) 998 STOP 999 TYPE 99 99 FORMAT(1X,'ERROR OPENING OVERLAY FILE') STOP END C C SUBROUTINES: C SUBROUTINE NAMLST(ID,NSEG) BYTE TN(24),BUF(80),SEG(6,150) DIMENSION ID(5) COMMON/SEGLST/SEG DATA TN/'D','B','0',':','[','2',2*'0',',','2',2*'0',']',10*' ',0/ C C CONVERT TASK NAME TO ASCII AND GEN FILE SPEC C CALL R50ASC(6,ID,TN(14)) I=13 10 I=I+1 IF (TN(I) .NE. "40) GOTO 10 TN(I)='.' TN(I+1)='M' TN(I+2)='A' TN(I+3)='P' C C OPEN TASK MAP FILE ON [1,1] C OPEN (UNIT=1,NAME=TN,TYPE='OLD',ERR=999) 100 FORMAT(80A1) C C SCAN MAP FILE TO START OF OVERLAY DESCRIPTION C 110 READ(1,100)BUF IF (BUF(1) .NE. '0') GOTO 110 C C SETUP AND GEN SEG NAME ARRAY C J=1 K=1 15 I=30 20 I=I+1 IF ((BUF(I) .LE. "100) .OR. (BUF(I) .GE. "133)) GOTO 20 30 SEG(K,J)=BUF(I) I=I+1 K=K+1 IF (BUF(I) .GE. "60) GOTO 30 IF (J .EQ. NSEG) GOTO 50 J=J+1 K=1 35 READ (1,100)BUF IF ((BUF(1) .NE. "60) .AND. (BUF(1) .NE. "61)) GOTO 35 GOTO 15 50 CLOSE(UNIT=1) RETURN 999 STOP 'FILE OPN ERROR' END