FTN4,L PROGRAM TDUMP(19,90),91780-16017 REV.1940 790528 C C **************************************************************** C C NAME: TDUMP C SOURCE: 91780-18017 C RELOC: 91780-16017 (PART OF) C PGMR: D. BOLIERE ( 07/25/78 ) C L. DIETZ ( 05/28/79 ) C C **************************************************************** C * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979. 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 ADD CAPABILITY TO DECODE TRACE INTO ASCII CHARS WHEN C USER SPECIFIED. DEFAULTS TO EBCDIC. ( 05/28/79 ) C C ADD AUTO TOF AT COMPLETION IF OUTPUT DEVICE IS LINEPRINTER C (DRIVER TYPE = 12B). ( 06/08/79 ) C C **************************************************************** C C PROGRAM TDUMP IS USED TO PROVIDE AN OFF-LINE ANALYSIS OF THE TRACE C DATA (EBCDIC/ASCII) RJE/1000 BY THE PROGRAM TRACE. C C RU,TDUMP [,INPUT [,OUTPUT [,LINECT [,LNCODE ] ] ] ] C C WHERE: INPUT AND OUTPUT ARE ANY LU OR LEGAL FILE C NAME IN THE FORMAT NAMR [:SC [:CR ] ]. C C INPUT IS THE LOCATION WHERE THE RAW TRACE DATA CAN BE C FOUND. C C OUTPUT IS THE DESTINATION FOR THE INTERPRETED LISTING. C IF A FILE IS SPECIFIED AND CANNOT BE FOUND, ONE IS C CREATED OF TYPE 3 AND 24 BLOCKS WITH THE OPTIONAL USER C SPECIFIED SECURITY CODE AND CARTRIDGE. C C LINECT IS THE MAXIMUM NUMBER OF LINES OF INFORMATION TO C PRINT AFTER EACH LINE TURNAROUND. C C LNCODE IS THE COMMUNICATION LINE CODE WHICH WAS USED IN C TRANSMISSION DURING TRACE AND FROM WHICH IT WILL BE C DECODED INTO CHARACTERS. LNCODE IS SPECIFIED AS C EB[CDIC]/AS[CII]. C C DEFAULTS ARE: INPUT=8, OUTPUT=6, LINECT=999, LNCODE=EB C C INTEGER PARAM(5),DATA(2,64),LABL(14),TIME(2),TIM(16) INTEGER IREG(2),AREG,BREG,LBUF(40),LUARY(2),IDCB(144,2) INTEGER DIREC,IBUF(50),TYPE EQUIVALENCE (REG,IREG,AREG), (IREG(2),BREG) EQUIVALENCE (LUARY(1),LUIN), (LUARY(2),LUOUT) DATA TIME/2*0/,LCNT/999/,LUARY/8,6/ DATA LCNTR/0/,DIREC/0/,LNCODE/2HEB/ C C PICK UP CONSOLE LU AND GET USER PARAMETER STRING C LUC=LOGLU(ISES) CALL GETST(IBUF(11),-80,LOG) ISTRC=1 C C DECODE FIRST TWO PARAMETERS THE SAME WAY C DO 40 I=1,2 C C IF NO OR NULL PARAMETERS, USE DEFAULTS C IF(LOG.EQ.0) GO TO 20 IF(NAMR(IBUF,IBUF(11),LOG,ISTRC)) 20,10 10 IF(IBUF(4).EQ.0) GO TO 20 C C CHECK FOR FILE NAME C IF(IBUF(4).NE.1) GO TO 30 C C IF NUMERIC AND + , USE AS NEW LU # C IF(IBUF(1).GT.0) LUARY(I)=IBUF(1) C C LOCK LU # C 20 REG=LURQ(100001B,LUARY(I),1) IF(AREG.EQ.0) GO TO 40 WRITE(LUC,930) LUARY(I) GO TO 999 C C TRY TO OPEN SPECIFIED FILE C 30 LUARY(I)=-1 CALL OPEN(IDCB(1,I),IERR,IBUF,0,IBUF(5),IBUF(6)) IF(IERR.GE.0) GO TO 40 IF(IERR.EQ.-6.AND.I.NE.1) GO TO 35 WRITE(LUC,910) IERR,(IBUF(J),J=1,3) GO TO 999 C C TRY TO CREATE THE FILE INSTEAD C 35 CALL CREAT(IDCB(1,I),IERR,IBUF,24,3,IBUF(5),IBUF(6)) IF(IERR.GE.0) GO TO 40 WRITE(LUC,920) IERR,(IBUF(J),J=1,3) GO TO 999 C 40 CONTINUE C C DECODE THIRD PARAMETER AS LINE COUNT LIMITATION C 60 IF(NAMR(IBUF,IBUF(11),LOG,ISTRC)) 80,70 70 IF(IBUF(4).NE.1) GO TO 80 IF(IBUF(1).GE.0) LCNT=IBUF(1) C C DECODE FOURTH PARAMETER AS CHARACTER TRANSMISSION TYPE (EB/AS) C 80 IF(NAMR(IBUF,IBUF(11),LOG,ISTRC)) 100,90 90 IF(IBUF(4).EQ.0) GO TO 100 IF(IBUF(1).EQ.2HEB) GO TO 100 IF(IBUF(1).EQ.2HAS) GO TO 95 WRITE(LUC,925) GO TO 999 95 LNCODE=2HAS C C INITIALIZATION ALL DONE, NOW START INTERPRETING THE FILE C 100 NREC=0 C C IF INPUT DEVICE IS A LU, READ FROM IT C 110 IF(LUIN.LT.0) GO TO 120 REG=REIO(1,LUIN,DATA,128) LEN=BREG GO TO 130 C C OTHERWISE READ DATA FROM THE FILE SPECIFIED C 120 CALL READF(IDCB(1,1),IERR,DATA(1,1),128,LEN) IF(IERR.GE.0) GO TO 130 WRITE(LUC,940)IERR GO TO 999 C C MUST BE AN EOF: TERMINATE TDUMP C 130 IF(LEN.LE.0) GO TO 790 C C SUCCESSFUL READ, START PROCESSING THE NEXT RECORD. IF ITS THE FIRST C RECORD, DECODE TIME STAMP. C 200 NREC=NREC+1 IPT=1 IF(NREC.NE.1) GO TO 210 CALL TMDA1(TIM,DATA) CALL CODE WRITE(LBUF,800)TIM KCNT=25 GO TO 700 C C PICK UP NEXT PAIR OF DATA ENTRIES C 210 I1=DATA(1,IPT) I2=DATA(2,IPT) C C IF UPPER BYTE OF I2 IS 200B OR 0B, THEN DECODE AS I/O ENTRY C WHICH MEANS I1 IS LOWER TIME STAMP AND LOWER BYTE OF I2 IS DATA BYTE C IF(IAND(I2,77400B).NE.0) GO TO 300 TIME=I1 C C RESET LINE DIRECTION INDICATOR IF WE'VE TURNED AROUND. ONLY C PRINT OUT USER SPECIFIED NUMBER OF LINES AFTER EACH TURNAROUND. C K=0 IF(I2.LT.0) K=1 IF(K.NE.DIREC) LCNTR=0 DIREC=K IF(LCNTR.GE.LCNT) GO TO 720 LCNTR=LCNTR+1 CALL TMVAL(TIME,TIM) C C CONVERT BYTE TO 4 CHARACTER DESCRIPTION C CALL EBC(I2,LNCODE,LABL) C C PRINT OUT AS RECEIVED IF UPPER BYTE OF I2=0 C IF(I2.GE.0) GO TO 250 CALL CODE WRITE(LBUF,810) TIM(4),TIM(3),TIM(2),TIM(1),I2,LABL(1),LABL(2) KCNT=14 GO TO 700 C C PRINT OUT AS SENT IF UPPER BYTE OF I2=200B C 250 CALL CODE WRITE(LBUF,820) TIM(4),TIM(3),TIM(2),TIM(1),I2,LABL(1),LABL(2) KCNT=21 GO TO 700 C C IF UPPER BYTE OF I2=100B, ENTRY IS NEW UPPER TIME STAMP. C 300 IF(IAND(I2,40000B).EQ.0) GO TO 400 TIME(2)=I1 GO TO 750 C C IF UPPER BYTE OF I2=40B, ENTRY IS OVERRUN INDICATOR C 400 IF(IAND(I2,20000B).EQ.0) GO TO 500 CALL CODE WRITE(LBUF,830) KCNT=18 GO TO 700 C C IF UPPER BYTE OF I2=20B, ENTRY IS NEW I/O REQUEST. ADDITIONALY, C IF THE LOWER BIT OF I2 IS SET, WE'VE ALSO STARTED A NEW TRACE. C 500 IF(IAND(I2,10000B).EQ.0) GO TO 600 IF(IAND(I2,1).EQ.0) GO TO 550 CALL CODE WRITE(LBUF,840) KCNT=37 DATA(2,IPT)=IAND(I2,177776B) IPT=IPT-1 GO TO 700 C 550 CALL CMD(I1,LABL) CALL CODE WRITE(LBUF,850)I1,LABL KCNT=25 GO TO 700 C C IF UPPER BYTE OF I2=10B, ENTRY IS A I/O COMPLETION/STATUS REPORT C 600 IF(IAND(I2,4000B).EQ.0) GO TO 650 CALL CODE WRITE(LBUF,860)I2,I1 KCNT=23 GO TO 700 C C IF WE'VE GOT HERE, ITS AN ENTRY TYPE THAT IS NOT RECOGNIZED, SO C PRINT OUT DECODE ERROR. C 650 CALL CODE WRITE(LBUF,870) KCNT=7 GO TO 700 C C IF LUOUT=-1, WRITE EXPLANATION BUFFER TO DISC FILE C 700 IF(LUOUT.GE.0) GO TO 710 CALL WRITF(IDCB(1,2),IERR,LBUF,KCNT) IF(IERR.GE.0) GO TO 720 WRITE(LUC,950) IERR GO TO 999 C C IF LUOUT>0, WRITE BUFFER TO THAT LU. C 710 CALL REIO(2,LUOUT,LBUF,KCNT) C C IF JUST WROTE HEADER, WRITE SECOND LINE AS WELL C 720 IF(NREC.NE.1.OR.IPT.NE.1) GO TO 750 IPT=3 CALL CODE WRITE(LBUF,880) KCNT=21 GO TO 700 C C IF MORE DATA IN RECORD, REPEAT ANALYSIS BEFORE ACCESSING I/O DEVICE C 750 IPT=IPT+1 IF(IPT*2.LE.LEN) GO TO 210 GO TO 110 C C COMPLETION! C 790 IF(LUIN.LT.0) CALL CLOSE(IDCB(1,1)) IF(LUOUT.LT.0) CALL CLOSE(IDCB(1,2)) WRITE(LUC,890) IF(LUOUT.LT.0) GO TO 999 C C GET EQUIPMENT TYPE CODE OF LUOUT. DO TOF IF TYPE = 12B (LP). C CALL EXEC(13,LUOUT,TYPE) TYPE=IAND(37400B,TYPE)/256 IF(TYPE.EQ.12B) CALL EXEC(3,11B*64+LUOUT,-2) GO TO 999 C C FORMAT STATEMENTS C 800 FORMAT("1RJE/1000 TRACE OF",16A2) 810 FORMAT(5X,I2,":",I2,":",I2,".",I2,3X,@3,1X,2A2,1X) 820 FORMAT(5X,I2,":",I2,":",I2,".",I2,17X,@3,1X,2A2,1X) 830 FORMAT(" OVERRUN! ",6X,20("*")) 840 FORMAT(" NEW TRACE STARTED ",55("*")) 850 FORMAT(" I/O REQUEST=",@6,3X,14A2) 860 FORMAT(" COMPLETION/ERROR REPORT, STATUS=",@3,4X,@6) 870 FORMAT(" DECODE ERROR!") 880 FORMAT(5X,"HR:MN:SECOND",2X,"SENT",10X,"RECEIVED ") 890 FORMAT(" TDUMP COMPLETED!") 910 FORMAT(" TDUMP ABORTED DUE TO OPEN ERROR",I4," ON FILE ",3A2) 920 FORMAT(" TDUMP ABORTED DUE TO CREATE ERROR",I4," ON FILE ",3A2) 925 FORMAT(" TDUMP ABORTED DUE TO LINECODE PARAMETER ERROR") 930 FORMAT(" TDUMP ABORTED DUE TO LOCK FAILURE ON LU",I4) 940 FORMAT(" TDUMP ABORTED DUE TO FILE READ ERROR",I4) 950 FORMAT(" TDUMP ABORTED DUE TO FILE WRITE ERROR",I4) C 999 END END$