FTN4 PROGRAM CPLOT (3,99),92082-16009 REV.2001 800203 C C C C C DATE: 10-14-79 C NAME: CPLOT C SOURCE: 92082-18009 C RELOC: 92082-16009 C PGMR: C.M.M. C C *************************************************************** C * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980. ALL RIGHTS * C * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * C * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* C * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * C *************************************************************** C C C C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C PSUEDO COMMON DECLARATIONS FOR THE IPRNT ROUTINE C C C INTEGER LINENO,PBUF,TAPE,PR,OP,NBIN,ISTUDY(16),ICOME(18) INTEGER LOW,HIGH,INCR,TITLE,PAGE,BASE,SEGMID,INAME(3) INTEGER IFILE(20),IPBUF(10),IBUF10(10) REAL BCNT,RCNT,MISS,TA DIMENSION IX(76),PBUF(25),TA(6),TITLE(40),IYES(6) C C C END OF COMMON DECLARATIONS C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC INTEGER BUF(129),K1,K2,I,J,TIBUF(40),IDCB(144),IBUF(1024) INTEGER IGRATE(50),CMD,PARMS(5) INTEGER TAPE,PR,OP,RLEN INTEGER ITITLE(40),HTITL1(40),HTITL2(40) REAL T1,BIN(50),LOGT,TEMP LOGICAL LOCF,APOSN,READF,OPEN INTEGER YESNO C C C C EQUIVALENCE(IX( 1),LINENO) EQUIVALENCE(IX( 2),PBUF(1)) EQUIVALENCE(IX(27),TAPE) EQUIVALENCE(IX(28),PR) EQUIVALENCE(IX(29),OP) EQUIVALENCE(IX(30),NBIN) EQUIVALENCE(IX(31),PAGE) EQUIVALENCE(IX(32),BASE) EQUIVALENCE(IX(33),TA(1)) EQUIVALENCE(IX(45),HIGH) EQUIVALENCE(IX(46),LOW) EQUIVALENCE(IX(47),INCR) EQUIVALENCE(IX(48),RCNT) EQUIVALENCE(IX(50),MISS) EQUIVALENCE(IX(52),BCNT) EQUIVALENCE(IX(54),TITLE(1)) C C C C LOGICAL IEXIT,ILOGIT DATA ITITLE 1 /2H* ,2H I,2HNT,2HEG,2HRA,2HL ,2HOF,2H F,2HRE,2HQU, 2 2HEN,2HCY,2H D,2HIS,2HTR,2HIB,2HUT,2HIO,2HN ,2H *, 3 2H ,2H ,2HPE,2HRC,2HEN,2HT ,2HOF,2H S,2HAM,2HPL, 4 2HE ,2HVS,2H. ,2HP-,2HRE,2HGI,2HST,2HER,2H ,2H / DATA HTITL1 1 /2H ,2H *,2H ,2HHI,2HST,2HOG,2HRA,2HM ,2HOF,2H P, 2 2H-R,2HEG,2HIS,2HTE,2HR ,2HUS,2HAG,2HE ,2H *,2H , 3 2H ,2H ,2H ,2H ,2H (,2HLO,2HGA,2HRI,2HTH,2HMI, 4 2HC ,2HSC,2HAL,2HE),2H ,2H ,2H ,2H ,2H ,2H / DATA HTITL2 1 /2H ,2H *,2H ,2HHI,2HST,2HOG,2HRA,2HM ,2HOF,2H P, 2 2H-R,2HEG,2HIS,2HTE,2HR ,2HUS,2HAG,2HE ,2H *,2H , 3 2H ,2H ,2H ,2H ,2H ,2H ,2H(L,2HIN,2HEA,2HR , 4 2HSC,2HAL,2HE),2H ,2H ,2H ,2H ,2H ,2H ,2H / C DATA ISTUDY/2HAN,2HAL,2HYS,2HIS,2H O,2HF ,2H ,2H ,2H , & 2HNO,2HW ,2HUN,2HDE,2HR ,2HWA,2HY./ C DATA ICOME /2HRE,2HSU,2HLT,2HS ,2HNO,2HW ,2HCO,2HMI,2HNG, & 2H U,2HP ,2HON,2H P,2HRI,2HNT,2HER,2H. / C DATA IYES/2HYE,2HS ,2HOR,2H N,2HO ,2H?_/ DATA TIBUF/2HPR,2HOG,2HRA,2HM ,2H ,2H ,2H ,2H ,2H ,2H , & 2H ,2H ,2H ,2H ,2H ,2H ,2H ,2H ,2H ,2H , & 2H ,2H ,2H ,2H ,2H ,2H ,2H ,2H ,2H ,2H , & 2H ,2H ,2H ,2H ,2H ,2H ,2H ,2H ,2H ,2H / C C GET THE LISTING PARAMETERS C C C C RLEN = 128 OP = LOGLU(LU) + 400B CALL REIO(2,OP,2H ,1) CALL REIO(2,OP,47HTHE RTE PROFILE MONITOR - GRAPHICS SECTION !!, &-47) CALL REIO(2,OP,2H ,1) CALL REIO(2,OP,46HENTER ' EX ' AT ANY TIME TO EXIT THIS PROGRAM., &-46) CALL REIO(2,OP,2H ,1) C C C GET THE LIST DEVICE C C 1 IONE = 1 CALL REIO(2,OP,22HENTER LIST DEVICE LU _,-22) CALL REIO(1,OP,IFILE,-40) CALL ABREG(IA,IB) CALL NAMR(IPBUF,IFILE,IB,IONE) IF(IEXIT(IPBUF)) GO TO 9999 IF(IAND(IPBUF(4),3) .NE.1) GO TO 2 PR = IPBUF IF(LUTRU(IPBUF) .GT. 0) GO TO 3 C C ILLEGAL LU C 2 CALL REIO(2,OP,12HILLEGAL LU !,-12) GO TO 1 C C C C NOW THE DATA FILE NAMR C C C 3 IONE = 1 CALL REIO(2,OP,2H ,1) CALL REIO(2,OP,22HENTER DATA FILE NAME _,-22) CALL REIO(1,OP,IFILE,-40) CALL ABREG(IA,IB) CALL NAMR(IPBUF,IFILE,IB,IONE) IF((IEXIT(IPBUF)) .AND. (IPBUF(2) .EQ. 2H )) GO TO 9999 IF(IAND(IPBUF(4),3) .NE. 3) GO TO 3 C C C OPEN THE DATA FILE & READ 1ST RECORD C C IF( OPEN(IDCB,IER,IPBUF,0,IPBUF(5),IPBUF(6))) & CALL FMPER(IER,IPBUF,OP) IF(IER .LT.0) GO TO 3 C C DO 66 KK = 0,7 IF(READF(IDCB,IER,IBUF(1+KK*128),129,IRLEN)) &CALL FMPER(IER,IPBUF,OP) IF(IER .LT.0) GO TO 9999 C C C IS THIS A REAL DATA FILE OR IS HE C CONFUSED. C C IF(IRLEN .EQ. 128) GO TO 66 CALL REIO(2,OP,26HINCORRECT FILE FORMAT !!! ,-26) CALL CLOSE(IDCB,IER) CALL REIO(2,OP,2H ,1) GO TO 3 66 CONTINUE C C C SAVE CURRENT POSITION IN FILE C C IF(LOCF(IDCB,IER,IRECX,IRBX,IOFFX)) &CALL FMPER(IER,IPBUF,OP) IF(IER .LT. 0) GO TO 9999 C C C C C SEE IF THEY WANT LOG PLOTS & BIN DUMPS C C C C 11 CALL REIO(2,OP,2H ,1) CALL REIO(2,OP,74HDO YOU WANT LOGARITHMIC PLOTS & BIN DUMPS AS WEL &L AS THE STANDARD GRAPHS ?,-74) 4 CALL REIO(2,OP,IYES, 6) CALL REIO(1,OP,IFILE,1) IF(IEXIT(IFILE)) GO TO 9999 IF(YESNO(IFILE) .EQ. 0) GO TO 4 ILOGIT = .FALSE. IF(IFILE .EQ.2HYE) ILOGIT = .TRUE. C C C C C C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C C OK EVERY THING IS SET UP. LETS EXAMINE THE HEADER C C BUFFER. C C C C......................................................................C C C C COUNTERS OF INTEREST : C C C C INCR = BUCKET SIZE. IE # OF P'S PER LINE ON GRAPH C C NBIN = # OF LINES ON THE GRAPH (50 MAX) C C RLEN = 1024 # OF WORDS PER RECORD C C RCNT = TOTAL # OF VALID POINTS READ IN FILE C C BCNT = TOTAL # OF POINTS READ IN THE SPECIFIED RANGE C C BIN()= 50 WORD ARRAY, # OF VALID POINTS READ IN THAT BIN C C MISS = # OF NEGATIVE P VALUES ENCOUNTERED ??? C C SEG = 1/2 NO/YES WE ARE LOOKING AT A SEGMENTED PROG C C LOW = LOW ADDRESS OF THE MODULE C C HIGH = HIGH ADDRESS OF THE MODULE C C C C......................................................................C C C C THE 1ST RECORD OF THE DATA BUFFER HAS INFO ABOUT C C THE ENTIRE PROGRAM. ITS FORMAT IS : C C C C WORDS 1 - 33 ID SEGMENT OF MAIN C C WORD 34 # OF SEGMEN LOADS PERFORMED C C WORD 35 # OF SHORT SEGMENTS THE PROGRAM CALLED C C WORDS 36-45 10 WORDS REPEATING. 1ST WORD = ID SEG C C ADDR OF SEGMENT FOLLOWED BY THE C C 9 WORDS OF SHORT ID SEGMENT. C C WORDS 1017 - 1020 START TIME OF PROGRAM C C WORDS 1021 - 1024 STOP TIME OF PROGRAM C C C C C C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C C SET UP SOME INITIAL INFO & SEE IF WE ARE C A SEGMENTED PROGRAM. C C ITIMES = 1 PAGE = 1 ISEG = 2 IF(IBUF(30) .EQ. 0) ISEG = 1 SEGMID = 0 IBUF(24) = IBUF(24) - 1 HIGHMN = IBUF(24) C C C C C C C PRINT OUT INFO ON THE MAIN OF THE PROGRAM C C C C C C CALL REIO(2,OP,2H ,1) CALL REIO(2,OP,43HDO YOU WANT ME TO DO THE INITIAL ANALYSIS ?,-43) 12 CALL REIO(2,OP,IYES,6) CALL REIO(1,OP,IFILE,1) IF(IEXIT(IFILE)) GO TO 9999 IF(YESNO(IFILE) .EQ.0) GO TO 12 C CALL LURQ(1,PR,1) WRITE(PR,901) 901 FORMAT("1") C IF(IFILE .EQ. 2HNO) GO TO 170 C C C C PRINT OUT TABLE INFORMATION C C HIGH = IBUF(24) LOW = IBUF(23) BASE = LOW C TIBUF(6) = IBUF(13) TIBUF(7) = IBUF(14) TIBUF(8) = IOR(IAND(IBUF(15),77400B),40B) ISTUDY(7) = TIBUF(6) ISTUDY(8) = TIBUF(7) ISTUDY(9) = TIBUF(8) C CALL REIO(2,OP,2H ,1) CALL REIO(2,OP,ISTUDY,16) C WRITE(PR,36) WRITE(PR,36) WRITE(PR,36) WRITE(PR,36) WRITE(PR,36) WRITE(PR,33) 33 FORMAT(16X,"**************************************************") WRITE(PR,34) 34 FORMAT(16X,"*",48X,"*") WRITE(PR,35) TIBUF(6),TIBUF(7),TIBUF(8) 35 FORMAT(16X,"* ACTIVITY PROFILE ANALYSIS OF PROGRAM *", & / ,16X, "*",20X,3A2,22X,"*") WRITE(PR,34) WRITE(PR,33) WRITE(PR,36) C C C C WRITE(PR,36) WRITE(PR,36) WRITE(PR,36) WRITE(PR,36) C C KK = IBUF(1017) * 10 WRITE(PR,62) IBUF(1020),IBUF(1019),IBUF(1018),KK KK = IBUF(1021) * 10 WRITE(PR,63) IBUF(1024),IBUF(1023),IBUF(1022),KK CALL TIME(IBUF(1017), IBUF(1021),1) KK = IBUF(1021) * 10 WRITE(PR,64) IBUF(1024),IBUF(1023),IBUF(1022),KK 62 FORMAT( 8X,"START TIME : ",I3," HOURS",I3," MINUTES",I3," SECON &DS",I5," MILLISECONDS.") 63 FORMAT( 8X,"STOP TIME : ",I3," HOURS",I3," MINUTES",I3," SECON &DS",I5," MILLISECONDS.") 64 FORMAT( 8X,"ELAPSED TIME : ",I3," HOURS",I3," MINUTES",I3," SECON &DS",I5," MILLISECONDS.") C C C C C WRITE(PR,36) WRITE(PR,36) WRITE(PR,36) WRITE(PR,36) WRITE(PR,36) 36 FORMAT("0") C C WRITE(PR,42) 42 FORMAT(2X,"MODULE TYPE PRIORITY LOW MAIN HIGH MAIN LOW B.P. &HIGH B.P. # OF LOADS") C WRITE(PR,44) 44 FORMAT(2X,"....................................................... &.....................") C C WRITE(PR,36) WRITE(PR,36) C IMTYPE = IAND(IBUF(15),7) C WRITE(PR,43) TIBUF(6),TIBUF(7),TIBUF(8),IMTYPE,IBUF(7),IBUF(23), & IBUF(24),IBUF(25),IBUF(26),ITIMES 43 FORMAT(3X,3A2,1X,I2,3X,I7,5X,K5,5X,K5,6X,K4,6X,K4,7X,I5) C C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C IF(ISEG .EQ. 1) GO TO 69 IF(IBUF(34) .EQ. 0) GO TO 69 C C C C SEGMENTED PROGRAM !! C MAKE A PASS THROUGH THE DATA FILE AND COUNT C THE NUMBER OF TIMES THAT EACH C SEGMENT WAS CALLED. C C C C INITIALIZE COUNT LOCATION C C DO 48 KP = 1,IBUF(35) IBUF(45 + (KP-1)*10) = 0 48 CONTINUE C IDX = 1 C C C C OK SO READ THE DATA OUT OF THE FILE C C DO 50 KP = 1,32767 C IF(READF(IDCB,IER,BUF,128,IRLEN)) CALL FMPER(IER,IPBUF,OP) IF(IER .LT. 0 ) GO TO 9999 IF(IRLEN .LE. 0) GO TO 45 C C SEE IF ANY SEGMENT LOAD WAS DONE IN THIS DATA C DO 52 KT = 1, 128, ISEG ID = BUF(KT + 1) IF(ID .EQ. 0) GO TO 52 IF(ID .EQ. IDX) GO TO 52 IDX = ID C C AH SO ! A SEGMENT LOAD WAS DETECTED. C FIND OUT WHICH SEGMENT IT WAS AND INCREMENT THAT COUNTER. C DO 54 IK = 1, IBUF(35) ISLOOP = (IK -1) * 10 IF(ID .NE. IBUF( 36 + ISLOOP)) GO TO 54 IBUF( 45 + ISLOOP) = IBUF( 45 + ISLOOP) + 1 GO TO 52 C 54 CONTINUE 52 CONTINUE 50 CONTINUE C C C OK, SO WRITE OUT ALL THE INFO ON THE SEGMENTS C C 45 DO 65 KT = 1,IBUF(35) ISLOOP = (KT -1) * 10 INAME(1) = IBUF(38 + ISLOOP) INAME(2) = IBUF(39 + ISLOOP) INAME(3) = IOR(IAND(IBUF(40 + ISLOOP),77400B),40B) IMTYPE = IAND(IBUF(40),7) IBUF(42 + ISLOOP) = IBUF(42 + ISLOOP) -1 C WRITE(PR,43) INAME,IMTYPE,IZ,IBUF(41 + ISLOOP),IBUF(42 + ISLOOP), & IBUF(43 + ISLOOP), IBUF(44 + ISLOOP), & IBUF(45 + ISLOOP) C C 65 CONTINUE C C SKIP A FEW SPACES WRITE(PR,36) WRITE(PR,36) WRITE(PR,36) WRITE(PR,36) C C PRINT OUT TOTAL # OF SEG LOADS C WRITE(PR,49) IBUF(34) 49 FORMAT(20X,"TOTAL NUMBER OF SEGMENT LOADS = ", I6) C C 69 WRITE(PR,901) C C C POSITION FILE TO FIRST DATA RECORD C C IF(APOSN(IDCB,IER,IRECX,IRBX,IOFFX)) CALL FMPER(IER,IPBUF,OP) IF(IER .LT. 0) GO TO 9999 GO TO 5555 C C C C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C END OF 1ST PAGE OF INITIAL C C C ANALYSIS C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ C C C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C START OF 2ND PAGE OF INITIAL C C C ANALYSIS C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C C C C C C C RETURN HERE FOR ALL SEGMENTS ON INITIAL STUDY. C C FINISHED WITH ALL THE SEGMENTS YET ?? C C 6666 ITIMES = ITIMES + 1 IF(ITIMES .GT. IBUF(35) + 1) GO TO 170 C C C DO THE NEXT SEGMENT C C C TIBUF(1) = 2HSE TIBUF(2) = 2HGM TIBUF(3) = 2HEN TIBUF(4) = 2HT TIBUF(5) = 2H TIBUF(6) = 2H TIBUF(7) = 2H TIBUF(8 ) = IBUF(38 + (ITIMES -2) *10) TIBUF(9 ) = IBUF(39 + (ITIMES -2) *10) TIBUF(10) = IOR(IAND(IBUF(40 + (ITIMES -2) *10) ,77400B),40B) ISTUDY(7) = TIBUF(8 ) ISTUDY(8) = TIBUF(9 ) ISTUDY(9) = TIBUF(10) C CALL REIO(2,OP,ISTUDY,16) C LOW = IBUF(41 + (ITIMES -2) *10) HIGH = IBUF(42 + (ITIMES -2) *10) BASE = LOW SEGMID = IBUF(36 + (ITIMES -2) *10) C IF(APOSN(IDCB,IER,IRECX,IRBX,IOFFX)) CALL FMPER(IER,IPBUF,OP) IF(IER .LT. 0) GO TO 9999 C GO TO 5555 C C C C C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ C C C C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C C C C INTERACTIVE ANALYSIS STARTS C C C HERE. C C C C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C C C C C C POSITION FILE TO FIRST DATA RECORD C C 170 ITIMES = -32767 CALL LURQ(100000B,PR,1) IF(APOSN(IDCB,IER,IRECX,IRBX,IOFFX)) &CALL FMPER(IER,IPBUF,OP) IF(IER .LT. 0) GO TO 9999 C C C C ASK FOR RANGE OF INTEREST OF P VALUES C C C 5 CALL REIO(2,OP,2H ,1) CALL REIO(2,OP,20HENTER EX TO EXIT OR ,-20) CALL REIO(2,OP,48HENTER RANGE OF INTEREST: LOW ADDR , HIGH ADDR _ &,-48) CALL REIO(1,OP,IFILE,-40) CALL ABREG(IA,IB) IONE = 1 C CALL NAMR(IBUF10,IFILE,IB,IONE) IF(IEXIT(IBUF10)) GO TO 9999 IF(IAND(IBUF10(4),3).NE.1) GO TO 108 IF(IBUF10 .LT. 0) GO TO 108 LOW = IBUF10 C CALL NAMR(IBUF10,IFILE,IB,IONE) IF(IAND(IBUF10(4),3).NE.1) GO TO 108 IF(IBUF10 .LT. 0) GO TO 108 HIGH = IBUF10 IF(HIGH .LT. LOW ) GO TO 108 GO TO 111 C C C 108 CALL REIO(2,OP,14HINPUT ERROR !!,-14) CALL REIO(2,OP,2H ,-2) GO TO 5 C C C C C SEE IF WE NEED TO ASK WHICH SEGMENT. C C C 111 SEGMID = 0 TIBUF(1) = 2H( TIBUF(2) = IBUF(13) TIBUF(3) = IBUF(14) TIBUF(4) = IOR(IAND(IBUF(15),77400B),40B) TIBUF(5) = 2H ) TIBUF(6) = 2H IF(ISEG .EQ. 1) GO TO 101 IF(HIGH .LE. HIGHMN) GO TO 101 C 109 CALL REIO(2,OP,2H ,1) CALL REIO(2,OP,40HWHICH SEGMENT ARE YOU INTERESTED IN ? _,-40) CALL REIO(1,OP,IFILE,-40) CALL ABREG(IA,IB) IONE = 1 CALL NAMR(IBUF10,IFILE,IB,IONE) IF(IAND(IBUF10(4),3) .NE. 3) GO TO 109 C C SEE IF WE CAN FIND THAT SEGMENT C DO 102 KK = 1,IBUF(35) IF(IBUF10(1) .NE. IBUF(38 + (KK - 1) *10)) GO TO 102 IF(IBUF10(2) .NE. IBUF(39 + (KK - 1) *10)) GO TO 102 IF(IBUF10(3) .NE. IOR(IAND(IBUF(40 + (KK - 1) *10),77400B),40B)) & GO TO 102 C GO TO 104 102 CONTINUE C C IF(IEXIT(IBUF10)) GO TO 9999 CALL REIO(2,OP,28HTHAT SEGMENT WAS NOT CALLED.,-28) GO TO 109 C C 104 SEGMID = IBUF(36 + (KK -1) * 10) TIBUF(2) = IBUF10(1) TIBUF(3) = IBUF10(2) TIBUF(4) = IBUF10(3) C C C GET BASE FOR RELATIVE ADDRESS LISTING C C 101 CALL REIO(2,OP,2H ,1) CALL REIO(2,OP,44HENTER BASE ADDRESS OF ROUTINE OF INTEREST _, &-44) C CALL REIO(1,OP,IFILE,-40) CALL ABREG(IA,IB) IONE = 1 CALL NAMR(IBUF10,IFILE,IB,IONE) * IF(IEXIT(IFILE)) GO TO 9999 BASE = IBUF10 IF(IAND(IBUF10(4),3) .NE. 1) GO TO 101 IF(IBUF10 .LT. 0 ) GO TO 105 IF(HIGH .GT. BASE) GO TO 905 C C 105 CALL REIO(2,OP,16HINPUT ERROR !!! ,-16) GO TO 101 C C C C C GET THE RUN DESCRIPTION C C 905 CALL REIO(2,OP,2H ,1) WRITE (OP,910) 910 FORMAT("WHAT DO YOU WANT TO CALL THE GRAPH ? ") C C C BLANK OR SET UP GRAPH DESCRIPTION C C DO 6 I=7,40 6 TIBUF(I)=2H READ (OP,915) (TIBUF(I),I=7,40) 915 FORMAT(40A2) 5555 DO 7 I=1,40 7 TITLE(I)=TIBUF(I) 8 CONTINUE C IF((IEXIT(TIBUF)) .AND. (TIBUF(2) .EQ. 2H )) GO TO 9999 C C C RESET OUR STATISTICAL VALUES C C DO 9 I=1,50 9 BIN(I)=0. RCNT=0 BCNT=0 MISS=0 C C C C CALCULATE BUCKET SIZE AND C # OF LINES ON GRAPH C C C INCR = ((HIGH-LOW)/50) + 1 NBIN = ((HIGH-LOW)/INCR) + 1 C C C C READ NEXT RECORD OFF DISC FILE C C C C 10 IF(READF(IDCB,IER,BUF,128,ILENGH)) &CALL FMPER(IER,IPBUF,OP) IF(IER .LT. 0) GO TO 9999 C IF(ILENGH .LE. 0) GO TO 160 C C C C INSPECT BUFFER FOR BAD P VALUES. IF ANY FOUND C MARK WITH A ZERO P VALUE. C C C DO 100 I=1,RLEN,ISEG ITEMP=BUF(I) IF(ITEMP .GE. 0) GO TO 100 ITEMP=IAND(ITEMP,077777B) BUF(I)=ITEMP DO 30 J=I,1,-ISEG IF(ITEMP .NE. BUF(J)) GO TO 30 BUF(J)=-1 MISS=MISS+1 30 CONTINUE 100 CONTINUE C C C C C FILL HISTOGRAM BINS. BINS 1 THROUGH NBIN C C C C RCNT = RCNT + RLEN / ISEG C DO 150 I=1,RLEN,ISEG K1=BUF(I) IF(K1 .EQ. 0) RCNT = RCNT - 1 IF(K1 .LT. LOW .OR. K1 .GT. HIGH .OR. K1 .EQ. 0) GO TO 150 C IF((ISEG.EQ.1) .OR. (SEGMID .EQ. 0)) GO TO 146 IF(BUF(I+1) .NE. SEGMID) GO TO 150 C 146 K1=((K1-LOW)/INCR)+1 BIN(K1)=BIN(K1)+1. BCNT=BCNT+1 150 CONTINUE GO TO 10 C C C TELL OPERATOR WHAT WE FOUND & ASK FOR A BASE ADDRESS C C C 160 IF(ITIMES .GT. 0) GO TO 200 C CALL REIO(2,OP,2H ,1) WRITE(OP,918) RCNT,BCNT 918 FORMAT (" TOTAL TRACE POINTS READ: ",F10.0/ 1 " TRACE POINTS IN SPECIFIED RANGE: ",F10.0) C C CHECK FOR CRAP IN FILE C IF(RCNT .LT. 1.0) GO TO 9998 IF(BCNT .LT. 1.0) GO TO 170 C C C C TELL THE FOLKS THAT THE RESULTS ARE COMMING UP C ON THE PRINTER. C C CALL LURQ(1,PR,1) 200 IF(RCNT .LT. 1.0) GO TO 9998 RTOTAL = RCNT - MISS IF(RTOTAL .LT. 1.0) RTOTAL = 1.0 CALL REIO(2,OP,2H ,1) CALL REIO(2,OP,ICOME,18) CALL REIO(2,OP,2H ,1) C C C PLOT INTEGRAL OF P DISTRIBUTION C C LINENO=0 BXCNT = BCNT IF(BCNT .LT. 1.0) BXCNT = 1.0 DO 205 I=1,6 205 TA(I)=(6-I)*(BXCNT/(RTOTAL))*20 C C CALL IPRNT(ITITLE,LINENO,PBUF,NBIN,PAGE,BASE,TA,HIGH,LOW, & INCR,RCNT,MISS,BCNT,TITLE,PR) C LINENO=1 T1=0 C INTEGRATE THE HISTOGRAM DO 210 I=1,NBIN T1=T1+BIN(I) IGRATE(I)=((T1*50.)/BXCNT)+1. IF (IGRATE(I) .GT. 50) IGRATE(I)=50 210 CONTINUE C C PLOT GRAPH. IGRATE(I) THRU IGRATE(NBIN) CONTAIN INTEGER C VALUES BETWEEN 1 AND 50 C DO 220 I=NBIN,1,-1 DO 212 J=1,25 212 PBUF(J)=2H C K1=52-IGRATE(I) PBUF(K1/2) = 2H* IF((K1/2)*2 .EQ. K1) GO TO 216 PBUF(K1/2) = 2H * C C 216 IF(I .EQ. 1) GO TO 218 C IF(IGRATE(I) .LE. IGRATE(I-1) + 1) GO TO 218 C K2 = 52 - IGRATE(I-1) IF(((K2/2)*2) .NE. K2) PBUF(K2/2) = 2H* IF(((K1/2)*2) .EQ. K1) PBUF(K1/2) = 2H** IUP = K1/2 +1 IDOWN = K2/2 - 1 IF(IUP .GT. IDOWN) GO TO 218 C C DO 217 J = IUP,IDOWN PBUF(J) = 2H** 217 CONTINUE C C 218 CALL IPRNT(ITITLE,LINENO,PBUF,NBIN,PAGE,BASE,TA,HIGH,LOW, & INCR,RCNT,MISS,BCNT,TITLE,PR) C 220 CONTINUE C LINENO=-1 C CALL IPRNT(ITITLE,LINENO,PBUF,NBIN,PAGE,BASE,TA,HIGH,LOW, & INCR,RCNT,MISS,BCNT,TITLE,PR) C C C C C PLOT HISTOGRAM OF DISTRIBUTION C C C C 500 BMIN=RCNT BMAX=0. DO 510 I=1,NBIN TEMP=BIN(I) IF (TEMP .GT. BMAX) BMAX=TEMP 510 IF ((TEMP .LT. BMIN) .AND. (TEMP .GT. 0.0)) BMIN=TEMP IF (BMIN .EQ. RCNT) BMIN=0. BMIN=(BMIN/(RTOTAL))*100 + .1E-36 BMAX=(BMAX/(RTOTAL))*100 + .1E-36 C C C C C DO A LINEAR HISTOGRAM C C C C C HFLAG=2 TEMP=BMAX/50.0 DO 520 I=1,6 520 TA(I)=BMAX-10.*TEMP*(I-1) C COMPUTE HEIGHT OF BARS DO 540 I=1,NBIN J=IFIX(((BIN(I)/(RTOTAL))*100.0)/TEMP) IF (BIN(I) .GT. 0.) J=J+1 IF (J .GT. 50) J=50 540 IGRATE(I)=J GO TO 580 C C C C C C C DO A LOGARITHMIC HISTOGRAM C C C C C 550 HFLAG=1 LOGT=1./ALOG(10.0) BMAX=LOGT*ALOG(BMAX) BMIN=LOGT*ALOG(BMIN) TEMP=(BMAX-BMIN)/5 DO 552 I=1,6 552 TA(I)=10.0**(BMAX-TEMP*(I-1)) C C C C COMPUTE THE LOGARITHMIC BAR HEIGHTHS C C C DO 560 I=1,NBIN T1=(BIN(I)/(RTOTAL))*100. J=0 IF (T1 .EQ. 0.) GO TO 560 J=IFIX(((LOGT*ALOG(T1)-BMIN)/(BMAX-BMIN))*50.) IF (BIN(I) .GT. 0.) J=J+1 IF (J .GT. 50) J=50 IF (J .LT. 0) J=0 560 IGRATE(I)=J C C C C C CONSTRUCT & PRINT HISTOGRAM BARS C C C C 580 LINENO=0 C CALL IPRNT(ITITLE,LINENO,PBUF,NBIN,PAGE,BASE,TA,HIGH,LOW, & INCR,RCNT,MISS,BCNT,TITLE,PR) C LINENO=1 DO 590 I=NBIN,1,-1 DO 581 J=1,25 581 PBUF(J)=2H K1=52-IGRATE(I) IF (K1 .GE. 52) GO TO 585 K2=K1/2 PBUF(K2)=2H* IF(K1 .EQ. 50) PBUF(K2) = 2H** IF((K2*2) .EQ. K1) GO TO 583 PBUF(K2)=2H * 583 IF (K2 .EQ. 25) GO TO 585 DO 584 J=K2,25 584 PBUF(J)=2H** C 585 CALL IPRNT(ITITLE,LINENO,PBUF,NBIN,PAGE,BASE,TA,HIGH,LOW, & INCR,RCNT,MISS,BCNT,TITLE,PR) C 590 CONTINUE C C C C PRINT TITLE AT BOTTOM OF GRAPH C C C C LINENO=-1 IF (HFLAG .EQ. 2) GO TO 595 C CALL IPRNT(HTITL1,LINENO,PBUF,NBIN,PAGE,BASE,TA,HIGH,LOW, & INCR,RCNT,MISS,BCNT,TITLE,PR) C GO TO 300 595 CALL IPRNT(HTITL2,LINENO,PBUF,NBIN,PAGE,BASE,TA,HIGH,LOW, & INCR,RCNT,MISS,BCNT,TITLE,PR) C IF(ILOGIT) GO TO 550 IF(ITIMES .LT. 0) GO TO 170 GO TO 6666 C C C C C DUMP BINS TO PRINTER C C C C 300 WRITE(PR,399) (TITLE(I),I=1,40) 399 FORMAT(" ","DESCRIPTION: ",40A2) WRITE(PR,366) 366 FORMAT(4X,"BIN # ",10X," # IN BIN ",10X," % OF SAMPLE ",10X,"INTEG &RAL VALUE") WRITE(PR,367) 367 FORMAT(4X,"....................................................... &..................") WRITE(PR,36) DO 310 I=NBIN,1,-1 TEMP=BIN(I)*100/(RTOTAL) TEMPX = 0. C DO 320 J = 1,I TEMPX = TEMPX + BIN(J) 320 CONTINUE C TEMPX = (TEMPX/RTOTAL) * 100 WRITE(PR,1300) I,BIN(I),TEMP,TEMPX 1300 FORMAT(5X,I2,12X,F10.0,14X,F7.3,14X,F7.3) 310 CONTINUE C C WRITE(PR,36) WRITE(PR,918) RCNT,BCNT WRITE(PR,1301) PAGE 1301 FORMAT(" ",68X,"PAGE",I4) PAGE = PAGE + 1 C WRITE(PR,901) C C IF(ITIMES .LE. 0) GO TO 170 GO TO 6666 C 9998 CALL REIO(2,OP,28HNO VALID DATA WAS TAKEN !!!,-28) 9999 CALL CLOSE(IDCB,IER) CALL REIO(2,OP,2H ,-2) CALL REIO(2,OP,18HEND OF ANALYSIS !,-18) END END$