Sie sind auf Seite 1von 20

$CHAREQU

$SEGMENT KSCOPE
SUBROUTINE RD7BIN
* (C) COPYRIGHT: Kevin G. Rhoads & High Voltage Research Lab (MIT) - 1983.
RETURN
END
*--------------------------------------------------------------------------
SUBROUTINE RD7ASC
ENTRY RD7854
* (C) 1983 COPYRIGHT: Kevin G. Rhoads, Jay Tucker & High Voltage Research Lab (MIT)
* (C) 1984,85,86 COPYRIGHT: Kevin G. Rhoads, & High Voltage Research Lab (MIT)
* IMPLICIT INTEGER*4 (A-Z)
IMPLICIT CHARACTER*41 (A-Z)
CHARACTER*1 ASCOPA(8192),ASCOP0(8192),KEY*12
REAL*4 PEAK0,PEAK1,TINCR,ASCRL,AMAX1,CHGVLT
INTEGER*4 WFMNO,SAQQQQ(2048),S0QQQQ(2048),ERROR,RECLEN,FREC,ASCOPN,IWFMNO
INTEGER*4 SCRN0,CNSL0,KPD,PR,BUSA,BUSB,BSUC,BUSD,FILE,GR,I,J,DTCB4
INTEGER*4 OTHERW,SCRCHW,SAVWNO,MENU
INTEGER*2 WFM0DX,WFM1DX,TENCPI,SXTNCP
INTEGER*1 SCOPEA(8192),ASCII,SCOPE0(8192),DTCB,DTCBA(50)
LOGICAL*4 FOUND
LOGICAL*2 ISTEST,RDNG1,WRTNG0,TASCII,BINARY,NTRPLT
LOGICAL*2 TEK468,TK7854,TK7D20,DUMPIT,NOTWO
LOGICAL*2 FNDERR,ERRORS(3),WFM0OK,OTHROK
LOGICAL*1 DISK,END,PARAM,FUBAR
EQUIVALENCE (DTCB,DTCBA(1),DTCB4)
EQUIVALENCE (SAQQQQ(1),SCOPEA(1)),(S0QQQQ(1),SCOPE0(1))
COMMON /SCTYPE/TEK468,TK7854,TK7D20,/I/SCOPEA,/WFM0SV/SCOPE0
COMMON /UNITS/SCRN0,CNSL0,KPD,PR,BUSA,BUSB,BSUC,BUSD,FILE,GR
COMMON /WFMFMT/TASCII,BINARY,NTRPLT,/WFMFOO/OTHERW,SCRCHW
COMMON /GARBAG/ERROR,DISK,END,PARAM,FUBAR,WFM0DX,WFM1DX,CHGVLT,TINCR,
&FREC,RECLEN,TENCPI,SXTNCP,/ERRORS/FNDERR,ERRORS,/QWFM/FOUND,WFM0OK,OTHROK
COMMON /ASCVAR/ASCOPA,ASCOP0,/ASCNDX/ASCOPN,/NEWCNT/KEY,NOTWO
COMMON /DUMP/DUMPIT,/TST/ISTEST,/DTCBS/DTCBA,/ASYNCH/RDNG1,WRTNG0
SAVE /WFMFMT/,/UNITS/,/SCTYPE/,/I/,/WFM0SV/,/ASYNCH/,/WFMFOO/
SAVE /GARBAG/,/ASCVAR/,/ASCNDX/,/DUMP/,/TST/,/DTCBS/,/ERRORS/
SAVE /QWFM/,SAVWNO
INTRINSIC AMAX1
EXTERNAL TIMOUT,REMEN,SREAD,AREAD,CANCEL,ASCRL,CRCLS,DC7ASC
SAVE
*
* $$$$ Now using integer variables with suggestive names instead of
* literal unit numbers.
* Enable timeouts on the bus. $$$$ AND WAIT/CLEANUP FOR ASYNCHRONOUS I/O
*
WFMNO = 1
SAVWNO = 1
GOTO 8897
ENTRY RDBASC(IWFMNO)
IF (IWFMNO.LT.0.OR.IWFMNO.GT.9) IWFMNO = 0
WFMNO = IWFMNO
SAVWNO = WFMNO
IF ((SCRCHW.LE.0.OR.SCRCHW.GT.9).AND.TK7854) THEN
IF (WFMNO.NE.0) SCRCHW = 9
IF (WFMNO.EQ.9) SCRCHW = 0
ENDIF
8897 IF (DTCB.EQ.3) GOTO 8897
IF (DTCB.EQ.2) THEN
ERROR = 0
IF (ISTEST) CALL CANCEL(6,ERROR)
CALL CLRBUS
DO 8898 I = 1,50
DTCBA(I) = 0
8898 CONTINUE
CALL CRCLS
ELSE
CALL CRCLS
ENDIF
CALL HITIT(S0QQQQ(1),8192,$0A0A0A0A)
DO 4404 J = 1,4
SCOPE0(J) = 10
SCOPE0(8192-J) = 10
4404 CONTINUE
CALL TIMOUT
PRINT *,'RD7ASC: READING WFM 0 TO COMPUTER'
*
* Call up Waveform 0 on the scope and send it over the bus.
* Read the waveform data into SCOPE0.
*
ERROR = 0
IF (TK7854) THEN
WRITE (6,'(A/)') '0 WFM SENDX'
CALL SREAD(6,SCOPE0(1),8192,0,0,0,ERROR)
ELSEIF (TK7D20.AND.TASCII) THEN
WRITE (*,'(A)') 'DATA ENCDG:ASCII'
WRITE (26,'(A)') 'DATA ENCDG:ASCII'
WRITE (*,'(A)') 'DATA MEMORY:1'
WRITE (26,'(A)') 'DATA MEMORY:1'
IF (NTRPLT) THEN
WRITE (*,'(A)') 'DATA INTERPOLATE:ON'
WRITE (26,'(A)') 'DATA INTERPOLATE:ON'
ELSE
WRITE (*,'(A)') 'DATA INTERPOLATE:OFF'
WRITE (26,'(A)') 'DATA INTERPOLATE:OFF'
ENDIF
WRITE (*,'(A)') 'WAVFRM?'
WRITE (26,'(A)') 'WAVFRM?'
CALL SREAD(26,SCOPE0(1),8192,0,0,0,ERROR)
ENDIF
CALL CRCLS
CALL CLRBUS
DTCB = 0
PRINT *,'RD7ASC: WFM 0 READ AND SAVED IN COMPUTER'
IF (DUMPIT) CALL HEX2(0,8000,SCOPE0)
*START READING WFM1 WHILE DECODING WFM0
DO 103 I = 1,50
DTCBA(I) = 0
103 CONTINUE
IF (WFMNO.EQ.0.OR.SCRCHW.NE.0) THEN
RDNG1 = .FALSE.
WRTNG0 = .FALSE.
IF (WFMNO.EQ.0) GOTO 200
ENDIF
CALL HITIT(SAQQQQ(1),8192,$0A0A0A0A)
DO 4414 J = 1,4
SCOPEA(J) = 10
SCOPEA(8193-J) = 10
4414 CONTINUE
ERROR = 0
CALL TIMOUT
IF (TK7854) THEN
IF (KEY.EQ.'Dc7AscKey ') CALL CLRBSB
IF (SCRCHW.GT.0.AND.SCRCHW.LE.9.AND.SCRCHW.NE.WFMNO) THEN
PRINT *,'RD7ASC: Transferring WFM 0 to WFM ',SCRCHW
WRITE (6,'(A,I1,A/)') '0 WFM ',SCRCHW,' >WFM '
PRINT *,'in preparation for reading second WFM'
CALL TIMOUT
ELSE
SCRCHW = 0
ENDIF
PRINT *,'RD7ASC: TRANSFERING WFM ',WFMNO,' TO WFM 0 FOR TRANSMISSION'
IF ((WFMNO.LE.0).OR.(WFMNO.GT.9)) WFMNO = 1
WRITE (6,'(I1,A/)') WFMNO,' WFM 0 >WFM 0 WFM SENDX'
CALL AREAD(DTCB,6,SCOPEA(1),8192,0,0,0,ERROR)
ELSEIF (TK7D20.AND.TASCII) THEN
PRINT *,'RD7ASC: ECHOING COMMANDS TO SCOPE'
WRITE (*,'(A)') 'DATA ENCDG:ASCII'
WRITE (26,'(A)') 'DATA ENCDG:ASCII'
IF ((WFMNO.LE.0).OR.(WFMNO.GT.5)) WFMNO = 1
WRITE (*,'(A,I1)') 'DATA MEMORY:',(WFMNO+1)
WRITE (26,'(A,I1)') 'DATA MEMORY:',(WFMNO+1)
IF (NTRPLT) THEN
WRITE (*,'(A)') 'DATA INTERPOLATE:ON'
WRITE (26,'(A)') 'DATA INTERPOLATE:ON'
ELSE
WRITE (*,'(A)') 'DATA INTERPOLATE:OFF'
WRITE (26,'(A)') 'DATA INTERPOLATE:OFF'
ENDIF
WRITE (*,'(A)') 'WAVFRM?'
WRITE (26,'(A)') 'WAVFRM?'
CALL AREAD(DTCB,26,SCOPEA(1),8192,0,0,0,ERROR)
ENDIF
RDNG1 = .TRUE.
WRTNG0 = .FALSE.
*
* Clean up the ASCII and transfer to ASCOP0
*
200 CONTINUE
DO 100 ASCOPN=1,8192
ASCII=SCOPE0(ASCOPN)
IF (ASCII.GE.32.AND.ASCII.LE.126) THEN
ASCOP0(ASCOPN)=CHAR(ASCII)
ELSEIF (ASCII.EQ.13) THEN
ASCOP0(ASCOPN)='@'
ELSEIF (ASCII.EQ.10) THEN
ASCOP0(ASCOPN)='#'
ELSE
ASCOP0(ASCOPN)=' '
ENDIF
100 CONTINUE
PRINT *,'RD7ASC: ASCOP0 FILLED -- CALLING DC7ASC(0)'
*
CALL DC7ASC(0)
IF (WFMNO.EQ.0) THEN
IF (WFM0OK) RETURN
PRINT *,'WFM0 READ ERROR: curve not found, REREAD? (y/N)'
I = MENU(0,0,1)
IF (I.EQ.0) RETURN
GOTO 8897
ENDIF
101 CONTINUE
CALL BUSTST
IF (.NOT.RDNG1) GOTO 102
CALL CRCLS
PRINT *,'RD7ASC: WAITING FOR WFM1 TO BE READ'
CALL WAIT(0.15)
IF (RDNG1) GOTO 101
102 CONTINUE
IF (DUMPIT) CALL HEX2(0,8000,SCOPEA)
IF (TK7854.OR.(TK7D20.AND.TASCII)) THEN
CALL DC7ASC(WFMNO)
ENDIF
IF (.NOT.(WFM0OK.OR.OTHROK)) THEN
PRINT *,'READ ERROR: curves not found (BOTH WFMs), REREAD? (y/N)'
I = MENU(0,0,1)
IF (I.EQ.0) RETURN
GOTO 8897
ELSEIF (.NOT.WFM0OK) THEN
IF (WFMNO.NE.0) SAVWNO = WFMNO
WFMNO = 0
PRINT *,'WFM0 READ ERROR: curve not found, REREAD? (y/N)'
I = MENU(0,0,1)
IF (I.EQ.0) RETURN
GOTO 8897
ELSEIF (.NOT.OTHROK.AND.WFMNO.NE.0) THEN
PRINT *,'WFM ',WFMNO,' READ ERROR: curve not found, REREAD? (Y/n)'
CALL WFMASC(WFMNO)
ENDIF
*
RETURN
END
*----------------------------------------------------------------------
SUBROUTINE DC7ASC(WFMNO)
ENTRY DC7854(WFMNO)
IMPLICIT CHARACTER*41 (A-Z)
* (C) COPYRIGHT 1983: Kevin G. Rhoads, Jay Tucker & High Voltage Research Lab (MIT)
* (C) 1984,85,86 COPYRIGHT: Kevin G. Rhoads, & High Voltage Research Lab (MIT)
* Convert the integer values of SCOPEA into their ASCII equivalents
* and put them, in one-to-one correspondance, into ASCOPA. Carriage
* Returns are marked with a '@'; other non-printable characters are
* turned into blanks.
CHARACTER PROGNM*18,MAINLN*54,SAVENM*11,ANUM*8
CHARACTER*1 ASCOPA(8192),ASCOP0(8192),TCH
REAL*4 QPNTS,WFMS(0:1023,-10:11),WFMA(0:1023),YMUL(10),Y0(10),ASCRL
REAL*4 RNUM,TINCR,YZERO,YMULT,AMAX1,VGND,TTRIG,VTRIG,CHGVLT
REAL*4 WFM0(0:1023),PWFM0(0:1023),WFM1(0:1023),PWFM1(0:1023),TIME(0:1023)
REAL*4 WFM2(0:1023),PWFM2(0:1023),WFM3(0:1023),PWFM3(0:1023)
REAL*4 WFM4(0:1023),PWFM4(0:1023),WFM5(0:1023),PWFM5(0:1023)
REAL*4 WFM6(0:1023),PWFM6(0:1023),WFM7(0:1023),PWFM7(0:1023)
REAL*4 WFM8(0:1023),PWFM8(0:1023),WFM9(0:1023),PWFM9(0:1023)
INTEGER*4 IPNTS,WFMNO,SCRN0,CNSL0,KPD,PR,BUSA,BUSB,BSUC,BUSD,FILE,GR
INTEGER*4 VOLTN,ASCII,ANUMN,ASCOPN,ERROR,RECLEN,FREC,IFIX,DTCB4
INTEGER*4 OTHERW,SCRCHW
INTEGER*2 WFM0DX,WFM1DX,TENCPI,SXTNCP,TASCII,BINARY,NTRPLT,PRPNTS,NOPNTS
INTEGER*1 DTCB,DTCBA(50),SCOPE0(8192),SCOPEA(8192)
LOGICAL*4 FOUND,FIND,FINDS
LOGICAL*2 TEK468,TK7854,TK7D20,FNDERR,ERRORS(3),WFM0OK,OTHROK
LOGICAL*2 ABORT,ESCAPE,INTRPT,ISTEST,DUMPIT,RDNG1,WRTNG0
LOGICAL*1 DISK,END,PARAM,FUBAR
EQUIVALENCE (TIME(0),WFMS(0,0)),(WFM0(0),WFMS(0,1)),(WFM1(0),WFMS(0,2))
EQUIVALENCE (PWFM0(0),WFMS(0,-1)),(PWFM1(0),WFMS(0,-2))
EQUIVALENCE (WFM2(0),WFMS(0,3)),(WFM3(0),WFMS(0,4))
EQUIVALENCE (PWFM2(0),WFMS(0,-3)),(PWFM3(0),WFMS(0,-4))
EQUIVALENCE (WFM4(0),WFMS(0,5)),(WFM5(0),WFMS(0,6))
EQUIVALENCE (PWFM4(0),WFMS(0,-5)),(PWFM5(0),WFMS(0,-6))
EQUIVALENCE (WFM6(0),WFMS(0,7)),(WFM7(0),WFMS(0,8))
EQUIVALENCE (PWFM6(0),WFMS(0,-7)),(PWFM7(0),WFMS(0,-8))
EQUIVALENCE (WFM8(0),WFMS(0,9)),(WFM9(0),WFMS(0,10))
EQUIVALENCE (PWFM8(0),WFMS(0,-9)),(PWFM9(0),WFMS(0,-10))
EQUIVALENCE (DTCB,DTCBA(1),DTCB4),(WFMS(0,11),WFMA(0))
COMMON /GARBAG/ERROR,DISK,END,PARAM,FUBAR,WFM0DX,WFM1DX,CHGVLT,TINCR,
1FREC,RECLEN,TENCPI,SXTNCP,/WFMFOO/OTHERW,SCRCHW
COMMON /UNITS/SCRN0,CNSL0,KPD,PR,BUSA,BUSB,BSUC,BUSD,FILE,GR
COMMON /NAMEPR/PROGNM,MAINLN,/WFMFMT/TASCII,BINARY,NTRPLT
COMMON /PNTS/PRPNTS,NOPNTS,/DTCBS/DTCBA,/SCTYPE/TEK468,TK7854,TK7D20
COMMON /WFMS/WFMS,/ERRORS/FNDERR,ERRORS,/WFM0SV/SCOPE0,/QWFM/FOUND,WFM0OK,OTHROK
COMMON /I/SCOPEA,/ASCVAR/ASCOPA,ASCOP0,/ASCNDX/ASCOPN,/FOO6/ANUM
COMMON /FOO5/VOLTN,RNUM,YZERO,YMULT,VGND,TTRIG,VTRIG,/ASYNCH/RDNG1,WRTNG0
COMMON /YSCALE/YMUL,Y0,/NTRVN/ABORT,ESCAPE,INTRPT,/TST/ISTEST,/DUMP/DUMPIT
SAVE /ASCVAR/,/ASCNDX/,/WFM0SV/,/I/,/FOO6/,/FOO5/,/GARBAG/,/YSCALE/
SAVE /NAMEPR/,/WFMFMT/,/PNTS/,/DTCBS/,/UNITS/,/SCTYPE/,/WFMS/,/ERRORS/
SAVE /NTRVN/,/TST/,/DUMP/,/ASYNCH/,/WFMFOO/
INTRINSIC AMAX1,IFIX
EXTERNAL ASCRL,FIND,FINDS,CRCLS
SAVE
*
* Go through the Waveform Preamble, decode XINCR, YZERO, and YMULT, and
* store them in TINCR (T=time), YZERO, and YMULT.
*
IF (WFMNO.EQ.0) THEN
WFM0OK = .FALSE.
CALL CRCLS
PRINT *,'DC7ASC: ABOUT TO DECODE WFM 0'
ASCOPN=1
FOUND = FINDS(6,'NR.PT:',ASCOPN,ASCOP0)
IF (FNDERR.OR.(.NOT.FOUND)) RETURN
QPNTS = ASCRL(ASCOPN,ASCOP0)
NOPNTS = IFIX(QPNTS)
IF (ISTEST) PRINT *,'DC7ASC: NOPNTS FOUND TO BE ',NOPNTS
FOUND = FINDS(6,'XINCR:',ASCOPN,ASCOP0)
IF (FNDERR.OR.(.NOT.FOUND)) RETURN
TINCR=ASCRL(ASCOPN,ASCOP0)
IF (ISTEST) PRINT *,'DC7ASC: TINCR FOUND TO BE ',TINCR
FOUND = FINDS(6,'YZERO:',ASCOPN,ASCOP0)
YZERO=ASCRL(ASCOPN,ASCOP0)
Y0(WFMNO) = YZERO
IF (ISTEST) PRINT *,'DC7ASC: YZERO FOUND TO BE ',YZERO
FOUND = FINDS(6,'YMULT:',ASCOPN,ASCOP0)
YMULT=ASCRL(ASCOPN,ASCOP0)
YMUL(WFMNO) = YMULT
IF (ISTEST) PRINT *,'DC7ASC: YMULT FOUND TO BE ',YMULT
FOUND = FINDS(5,'CURVE',ASCOPN,ASCOP0)
PRINT *,'DC7ASC: CURVE FOUND? ',FOUND
WFM0OK = FOUND
DO 101 VOLTN=0,NOPNTS
ANUMN=1
ANUM=' '
1 ANUM(ANUMN:ANUMN)=ASCOP0(ASCOPN)
ANUMN=ANUMN+1
ASCOPN=ASCOPN+1
IF (ASCOPN.GT.8192) CALL PAUSE ('ERROR - ASCOPN > 8192!!')
IF (INTRPT.OR.ESCAPE) GOTO 1010
IF (ABORT) STOP 'DC7ASC - OPERATOR INTERVENTION'
IF (ASCOP0(ASCOPN).NE.','.AND.ASCOP0(ASCOPN).NE.'@'.AND.ASCOP0(ASCOPN).NE.'#')GOTO 1
TCH = ASCOP0(ASCOPN)
ASCOPN=ASCOPN+1
READ(ANUM,'(BN,F7.4)')RNUM
WFM0(VOLTN) = YMULT*(RNUM-YZERO)
TIME(VOLTN) = TINCR*FLOAT(VOLTN)
IF ((MOD(VOLTN,16).EQ.1).AND.(RDNG1.OR.WRTNG0)) CALL BUSTST
IF (TCH.EQ.'@'.OR.TCH.EQ.'#') THEN
GOTO 1010
ENDIF
101 CONTINUE
ELSE
CALL CRCLS
OTHROK = .FALSE.
PRINT *,'DC7ASC: DECODING WFM #',WFMNO
DO 100 ASCOPN=1,8192
ASCII=SCOPEA(ASCOPN)
IF (ASCII.GE.32.AND.ASCII.LE.126) THEN
ASCOPA(ASCOPN)=CHAR(ASCII)
ELSEIF (ASCII.EQ.13) THEN
ASCOPA(ASCOPN)='@'
ELSEIF (ASCII.EQ.10) THEN
ASCOPA(ASCOPN)='#'
ELSE
ASCOPA(ASCOPN)=' '
ENDIF
100 CONTINUE
ASCOPN=1
IF (WRTNG0) CALL BUSTST
ASCOPN=1
FOUND = FINDS(6,'NR.PT:',ASCOPN,ASCOPA)
IF (FNDERR.OR.(.NOT.FOUND)) RETURN
QPNTS = ASCRL(ASCOPN,ASCOPA)
NOPNTS = IFIX(QPNTS)
IF (ISTEST) PRINT *,'DC7ASC: NOPNTS FOUND TO BE ',NOPNTS
FOUND = FINDS(6,'XINCR:',ASCOPN,ASCOPA)
IF (FNDERR.OR.(.NOT.FOUND)) RETURN
TINCR=ASCRL(ASCOPN,ASCOPA)
IF (ISTEST) PRINT *,'DC7ASC: TINCR FOUND TO BE ',TINCR
FOUND = FINDS(6,'YZERO:',ASCOPN,ASCOPA)
YZERO=ASCRL(ASCOPN,ASCOPA)
IF (ISTEST) PRINT *,'DC7ASC: YZERO FOUND TO BE ',YZERO
Y0(WFMNO) = YZERO
FOUND = FINDS(6,'YMULT:',ASCOPN,ASCOPA)
YMULT=ASCRL(ASCOPN,ASCOPA)
IF (ISTEST) PRINT *,'DC7ASC: YMULT FOUND TO BE ',YMULT
YMUL(WFMNO) = YMULT
FOUND = FINDS(5,'CURVE',ASCOPN,ASCOPA)
PRINT *,'DC7ASC: CURVE FOUND? ',FOUND
OTHROK = FOUND
DO 102 VOLTN=0,NOPNTS
ANUMN=1
ANUM=' '
2 ANUM(ANUMN:ANUMN)=ASCOPA(ASCOPN)
ANUMN=ANUMN+1
ASCOPN=ASCOPN+1
IF (ASCOPN.GT.8192) CALL PAUSE ('ERROR - ASCOPN > 8192!!')
IF (INTRPT.OR.ESCAPE) GOTO 1010
IF (ABORT) STOP 'DC7ASC - OPERATOR INTERVENTION'
IF (ASCOPA(ASCOPN).NE.','.AND.ASCOPA(ASCOPN).NE.'@'.AND.ASCOPA(ASCOPN).NE.'#')GOTO 2
TCH = ASCOPA(ASCOPN)
ASCOPN=ASCOPN+1
READ(ANUM,'(BN,F7.4)')RNUM
WFMS(VOLTN,WFMNO+1) = YMUL(WFMNO)*(RNUM-Y0(WFMNO))
IF ((MOD(VOLTN,16).EQ.1).AND.(RDNG1.OR.WRTNG0)) CALL BUSTST
IF (TCH.EQ.'@'.OR.TCH.EQ.'#') THEN
C NOPNTS = VOLTN + 1
GOTO 1010
ENDIF
102 CONTINUE
ENDIF
*
1010 CONTINUE
RETURN
END
*----------------------------------------------------------------------
SUBROUTINE BCURVE(ASCOPN,ASCOPA,SCOPEA)
IMPLICIT CHARACTER*41 (A-Z)
* (C) COPYRIGHT: Kevin G. Rhoads & High Voltage Research Lab (MIT) - 1983.
CHARACTER PROGNM*18,MAINLN*54,SAVENM*18,BEGINM*12,MESS*80,HMN*30
CHARACTER*3 WFID,MODE,XUNIT,YUNIT
CHARACTER*1 ASCOPA(8192),CH
REAL*4 RNUM,TINCR,YZERO,YMULT,ASCRL,AMAX1,VGND,TTRIG,VTRIG,SCALE
REAL*4 RLMAX,RLMIN,WFMS(0:1023,-10:11),WFMA(0:1023),XSCALE
REAL*4 XINCR,XZERO,XUNITS,YOFF,YUNITS,YMUL(10),Y0(10)
REAL*4 WFM0(0:1023),PWFM0(0:1023),WFM1(0:1023),PWFM1(0:1023),TIME(0:1023)
REAL*4 WFM2(0:1023),PWFM2(0:1023),WFM3(0:1023),PWFM3(0:1023)
REAL*4 WFM4(0:1023),PWFM4(0:1023),WFM5(0:1023),PWFM5(0:1023)
REAL*4 WFM6(0:1023),PWFM6(0:1023),WFM7(0:1023),PWFM7(0:1023)
REAL*4 WFM8(0:1023),PWFM8(0:1023),WFM9(0:1023),PWFM9(0:1023)
INTEGER*4 SCRN0,CNSL0,KPD,PR,BUSA,BUSB,BSUC,BUSD,FILE,GR,HMANY
INTEGER*4 ERROR,ASCOPN,INT4MN,INT4MX,IFIX,ICHAR,MOD,GETINT,I,J
INTEGER*4 VOLTN,KHMN,IKL,OTHERW,SCRCHW
INTEGER*2 IASC,ISCAN,IKBF1,IKBF2,IERR,WFM(0:1023),WFMNO,PTOFF,OFFSET
INTEGER*2 CHKSUM,WORD,HMANY1,HMANY2,HLK,PRPNTS,NOPNTS,INT2MN,INT2MX
INTEGER*1 SCOPEA(8192),INT1MN,INT1MX,BYTE,BYT(2)
LOGICAL*4 FIND,FINDS,FOUND
LOGICAL*2 TASCII,BINARY,NTRPLT,TEK468,TK7854,TK7D20,PAUSES
LOGICAL*2 IS1,IS2,IS3,IS4,IS5,IS6,ISADD,WFM0OK,WFM1OK,TIMEOK
LOGICAL*2 DUMPIT,SAVDMP,DOITP,ISTEST,FNDERR,ERRORS(3)
LOGICAL*2 ABORT,ESCAPE,INTRPT,FOO,BAR
EQUIVALENCE (WFMS(0,11),WFMA(0)),(WORD,BYT(1)),(BYTE,BYT(2))
EQUIVALENCE (TIME(0),WFMS(0,0)),(WFM0(0),WFMS(0,1)),(WFM1(0),WFMS(0,2))
EQUIVALENCE (PWFM0(0),WFMS(0,-1)),(PWFM1(0),WFMS(0,-2))
EQUIVALENCE (WFM2(0),WFMS(0,3)),(WFM3(0),WFMS(0,4))
EQUIVALENCE (PWFM2(0),WFMS(0,-3)),(PWFM3(0),WFMS(0,-4))
EQUIVALENCE (WFM4(0),WFMS(0,5)),(WFM5(0),WFMS(0,6))
EQUIVALENCE (PWFM4(0),WFMS(0,-5)),(PWFM5(0),WFMS(0,-6))
EQUIVALENCE (WFM6(0),WFMS(0,7)),(WFM7(0),WFMS(0,8))
EQUIVALENCE (PWFM6(0),WFMS(0,-7)),(PWFM7(0),WFMS(0,-8))
EQUIVALENCE (WFM8(0),WFMS(0,9)),(WFM9(0),WFMS(0,10))
EQUIVALENCE (PWFM8(0),WFMS(0,-9)),(PWFM9(0),WFMS(0,-10))
COMMON /UNITS/SCRN0,CNSL0,KPD,PR,BUSA,BUSB,BSUC,BUSD,FILE,GR
COMMON /REPLIM/RLMAX,RLMIN,INT1MX,INT1MN,INT2MX,INT2MN,INT4MX,INT4MN
COMMON /WFMFMT/TASCII,BINARY,NTRPLT,/SCTYPE/TEK468,TK7854,TK7D20
COMMON /PAWS/PAUSES,/NAMEPR/PROGNM,MAINLN,/PNTS/PRPNTS,NOPNTS
COMMON /FOO5/VOLTN,RNUM,YZERO,YMULT,VGND,TTRIG,VTRIG,/WFMS/WFMS
COMMON /TST/ISTEST,/ERRORS/FNDERR,ERRORS,/YSCALE/YMUL,Y0
COMMON /BIN/IS1,IS2,IS3,IS4,IS5,IS6,ISADD,WFM0OK,WFM1OK,TIMEOK
COMMON /IBIN/WFM,WFMNO,PTOFF,CHKSUM,WORD,HMANY1,HMANY2,HMANY
COMMON /RBIN/XINCR,XZERO,XUNITS,YOFF,YUNITS,/DUMP/DUMPIT
COMMON /CBIN/WFID,MODE,XUNIT,YUNIT,CH,/NTRVN/ABORT,ESCAPE,INTRPT
COMMON /KEYGET/IASC,ISCAN,IKBF1,IKBF2,IERR,/WFMFOO/OTHERW,SCRCHW
SAVE /NAMEPR/,/PAWS/,/SCTYPE/,/WFMFMT/,/REPLIM/,/UNITS/,/PNTS/
SAVE /WFMS/,/TST/,/ERRORS/,/FOO5/,/YSCALE/,/BIN/,/CBIN/,/RBIN/
SAVE /DUMP/,/KEYGET/,/NTRVN/,/WFMFOO/
INTRINSIC AMAX1,IFIX,MOD,ICHAR
EXTERNAL DMP,FIND,FINDS,ASCRL,GETRL,CRCLS,PAUSE,ISNTRP,GETINT
SAVE
*
BEGINM = PROGNM
* CALL CRCLS
WRITE (*,*,ERR=9000) 'BCURVE: ABOUT TO DECODE BINARY WAVEFORM ',WFID
9000 CONTINUE
INTRPT = .FALSE.
ESCAPE = .FALSE.
ABORT = .FALSE.
*
OFFSET = PTOFF
FOUND = FIND('%',ASCOPN,ASCOPA)
IF (.NOT.FOUND) THEN
CALL PAUSE('BCURVE: "%" NOT FOUND')
IF (ABORT) STOP
IF (ESCAPE.OR.INTRPT) THEN
ASCOPN = 8190
RETURN
ENDIF
CALL DMP(ASCOPN,ASCOPA)
RETURN
ENDIF
* IF (DUMPIT) THEN
* PRINT *,'BCURVE: FOUND "%" ? ',FOUND,' FOR WAVEFORM ',WFID
* CALL DMP(ASCOPN,ASCOPA)
* CALL PAUSE ('BCURVE:')
* ENDIF
HMANY1 = SCOPEA(ASCOPN)
HMANY2 = SCOPEA(ASCOPN+1)
IF (HMANY1.LT.0) HMANY1 = HMANY1 + 256
IF (HMANY2.LT.0) HMANY2 = HMANY2 + 256
HMANY = HMANY1*256 + HMANY2 - 1
* WRITE (HMN,'(A,I5)') 'BCURVE: HMANY = ',HMANY
* IF (ISTEST) PRINT *,HMN
IF (INTRPT.OR.ESCAPE) THEN
PRINT *,'BCURVE: HMANY = ',HMANY,' NEW VALUE?'
KHMN = GETINT()
IF (KHMN.GT.0) HMANY = KHMN
GOTO 8000
ENDIF
IF ((HMANY.NE.1024).AND.(HMANY.NE.820).AND.(HMANY.NE.256).AND.(HMANY.NE.512).AND.(HMANY.NE.128)) THEN
HMANY = NOPNTS
PRINT *,'BCURVE: ERROR IN COMPUTING HMANY, IT HAS BEEN SET TO NR.PT:',NOPNTS
PRINT *,'BCURVE: HMANY1, HMANY2 ARE: ',HMANY1,' ',HMANY2
CALL DMP((ASCOPN-10),ASCOPA)
CALL PAUSE ('BCURVE:')
ENDIF
8000 CONTINUE
CHKSUM = HMANY1 + HMANY2
ASCOPN = ASCOPN + 1
* WRITE (HMN,'(A,I5)') 'BCURVE: ASCOPN = ',ASCOPN
* IF (DUMPIT) PRINT *,HMN
IF (INTRPT.OR.ESCAPE) THEN
PRINT *,'BCURVE: ASCOPN = ',ASCOPN,' NEW VALUE?'
KHMN = GETINT()
IF (KHMN.GT.0) ASCOPN = KHMN
ENDIF
*
DOITP = DUMPIT
DO 1 I = 1,HMANY
CALL ISNTRP
IF ((INTRPT.OR.ESCAPE).AND.(IERR.EQ.0)) THEN
DOITP = .FALSE.
INTRPT = .FALSE.
ESCAPE = .FALSE.
ENDIF
WORD = SCOPEA(ASCOPN+I) +256
WORD = MOD(WORD,256)
CHKSUM = MOD((CHKSUM+WORD),256)
IF (TEK468) THEN
WFM(I) = WORD
ELSEIF (TK7D20) THEN
WFM(I) = WORD - 128
ENDIF
* IF (DOITP) PRINT *,'BCURVE: I: ',I,', WFM(I): ',WFM(I),', BYTE ',BYTE,' WORD ',WORD
1 CONTINUE
* IF (DUMPIT.OR.DOITP) CALL PAUSE(' ')
WORD = SCOPEA(ASCOPN+HMANY+1)
WORD = MOD((WORD+256),256)
CHKSUM = MOD((CHKSUM+WORD),256)
IS1 = (WFID .EQ. 'CH1') .OR. (WFID(3:3).EQ.'1')
IS2 = (WFID .EQ. 'CH2') .OR. (WFID(3:3).EQ.'2')
IS3 = (WFID(3:3).EQ.'3')
IS4 = (WFID(3:3).EQ.'4')
IS5 = (WFID(3:3).EQ.'5')
IS6 = (WFID(3:3).EQ.'6')
ISADD = WFID .EQ. 'ADD'
IF (IS1) THEN
WFMNO = 0
ELSEIF (IS2) THEN
WFMNO = 1
ELSEIF (IS3) THEN
WFMNO = 2
ELSEIF (IS4) THEN
WFMNO = 3
ELSEIF (IS5) THEN
WFMNO = 4
ELSEIF (IS6) THEN
WFMNO = 5
ELSEIF (ISADD) THEN
WFMNO = 10
ENDIF
IF (CHKSUM.NE.0) THEN
WRITE (MESS,FMT='(A,I2,A,I5)') 'BCURVE: CHECKSUM ERROR IN WFM(',WFMNO,'), CHKSUM = ',CHKSUM
ELSE
MESS = 'BCURVE: CHECKSUM OK'
ENDIF
IF (CHKSUM.NE.0) CALL PAUSE(MESS)
ASCOPN = ASCOPN + HMANY + 2
*
DOITP = DUMPIT
PAUSES = .FALSE.
IF (IS1) THEN
SCALE = YMULT * YUNITS
XSCALE = XINCR * XUNITS
IF (DOITP) THEN
PRINT *,'BCURVE: SCALE, XSCALE ',SCALE,' ',XSCALE
CALL PAUSE(' ')
ENDIF
OTHERW = 0
DO 7000 I = 0,(NOPNTS-1)
WFM0(I) = FLOAT(WFM(I+1)) * SCALE
TIME(I) = XSCALE * FLOAT(I-OFFSET)
IF (.NOT.WFM1OK) WFM1(I) = WFM0(I)
IF (DOITP) PRINT *,'WFM0(',I,') = ',WFM0(I),' TIME = ',TIME(I)
CALL ISNTRP
DOITP = (.NOT. (ESCAPE.OR.INTRPT) ) .AND. (IERR.EQ.0)
7000 CONTINUE
WFM0OK = .TRUE.
TIMEOK = .TRUE.
IF (WFM0OK.AND.WFM1OK) GOTO 7004
ELSEIF (IS2.OR.IS3.OR.IS4.OR.IS5.OR.IS6) THEN
SCALE = YMULT * YUNITS
XSCALE = XINCR * XUNITS
IF (DOITP) THEN
PRINT *,'BCURVE: SCALE, XSCALE ',SCALE,' ',XSCALE
CALL PAUSE(' ')
ENDIF
OTHERW = WFMNO
DO 7001 I = 0,(NOPNTS-1)
WFM1(I) = FLOAT(WFM(I+1)) * SCALE
IF (.NOT.WFM0OK) THEN
WFM0(I) = WFM1(I)
ENDIF
IF (.NOT.TIMEOK) THEN
TIME(I) = XSCALE * FLOAT(I-OFFSET)
ENDIF
IF (DOITP) PRINT *,'WFM1(',I,') = ',WFM1(I),' TIME = ',TIME(I)
CALL ISNTRP
DOITP = (.NOT. (ESCAPE.OR.INTRPT) ) .AND. (IERR.EQ.0)
7001 CONTINUE
WFM1OK = .TRUE.
IF (WFM0OK.AND.WFM1OK) GOTO 7004
ELSEIF (ISADD) THEN
SCALE = YMULT * YUNITS
XSCALE = XINCR * XUNITS
IF (DOITP) THEN
PRINT *,'BCURVE: SCALE, XSCALE ',SCALE,' ',XSCALE
CALL PAUSE(' ')
ENDIF
OTHERW = 0
DO 7002 I = 0,(NOPNTS-1)
WFMA(I) = FLOAT(WFM(I+1)) * SCALE
WFM0(I) = WFMA(I)
IF (.NOT.TIMEOK) TIME(I) = XSCALE * FLOAT(I-OFFSET)
IF (.NOT.WFM0OK) WFM0(I) = WFMA(I)
IF (.NOT.WFM1OK) WFM1(I) = WFMA(I)
IF (DOITP) PRINT *,'WFM1=WFM0(',I,') = ',WFM0(I),' TIME = ',TIME(I)
CALL ISNTRP
DOITP = (.NOT. (ESCAPE.OR.INTRPT) ) .AND. (IERR.EQ.0)
7002 CONTINUE
WFM0OK = .TRUE.
WFM1OK = .TRUE.
GOTO 7004
ELSE
SCALE = YMULT * YUNITS
XSCALE = XINCR * XUNITS
J = WFMNO + 1
IF (DOITP) THEN
PRINT *,'BCURVE: SCALE, XSCALE ',SCALE,' ',XSCALE
CALL PAUSE(' ')
ENDIF
DO 7008 I = 0,(NOPNTS-1)
WFMS(I,J) = FLOAT(WFM(I+1)) * SCALE
IF (.NOT.TIMEOK) TIME(I) = XSCALE * FLOAT(I-OFFSET)
IF (.NOT.WFM0OK) WFM0(I) = WFMS(I,J)
IF (.NOT.WFM1OK) WFM1(I) = WFMS(I,J)
IF (DOITP) PRINT *,'WFMS(',I,',',J,') = ',WFMS(I,J),' TIME = ',TIME(I)
CALL ISNTRP
DOITP = (.NOT. (ESCAPE.OR.INTRPT) ) .AND. (IERR.EQ.0)
7008 CONTINUE
GOTO 7004
ENDIF
FOO = WFM0OK .AND. WFM1OK
BAR = .TRUE.
DO 7003 IKL = -1,10
J = ASCOPN + IKL
FOO = FOO .OR. (ASCOPA(J).EQ.CHAR(10)) .OR. (J.GE.8192)
IF (FOO) GOTO 7004
BAR = BAR .AND. ((ASCOPA(J).EQ.CHAR(10)) .OR. (SCOPEA(J).EQ.0))
7003 CONTINUE
7004 CONTINUE
BAR = BAR .OR. FOO
* IF (ISTEST.AND.BAR) THEN
* CALL CRCLS
* PRINT *,'BCURVE: DO YOU WANT A DUMP OF THE WAVEFORM(S)?(Y/N)'
* PAUSES = .TRUE.
* CALL ISNTRP
* PAUSES = .FALSE.
* IF ((IASC.EQ.$59).OR.(IASC.EQ.$79)) THEN
* DO 7005 HLK = 0,(NOPNTS-1)
* WRITE (*,7006) WFM0(HLK),WFM1(HLK)
* CALL ISNTRP
* IF (ESCAPE.OR.INTRPT) GOTO 7007
* 7005 CONTINUE
* ENDIF
* 7006 FORMAT (G12.4E2,4X,G12.4E2)
* ENDIF
7007 CONTINUE
* WRITE (HMN,'(A,I5)') 'BCURVE: ASCOPN = ',ASCOPN
* IF (ISTEST) PRINT *,HMN
IF (INTRPT.OR.ESCAPE) THEN
PRINT *,'BCURVE: ASCOPN = ',ASCOPN,' NEW VALUE?'
KHMN = GETINT()
IF (KHMN.GT.0) ASCOPN = KHMN
ENDIF
RETURN
END
*--------------------------------------------------------------------------
SUBROUTINE RD468
IMPLICIT CHARACTER*41 (A-Z)
* (C) COPYRIGHT: Kevin G. Rhoads & High Voltage Research Lab (MIT) - 1983.
CHARACTER PROGNM*18,MAINLN*54,SAVENM*12
CHARACTER*1 ASCOPA(8192),ASCOP0(8192)
CHARACTER*1 CHAR
INTEGER*4 SCRN0,CNSL0,KPD,PR,BUSA,BUSB,BSUC,BUSD,FILE,GR,ISCOP0,ISCOPA
INTEGER*4 S0QQQQ(2048),ERROR,ASCOPN,ASCEQN,BYTEN,SCOPEN,OFFSET,J
INTEGER*1 SCOPE0(8192),SCOPEA(8192),ASCII,SCPBYT
LOGICAL*2 ISTEST
EQUIVALENCE (S0QQQQ(1),SCOPE0(1)),(ISCOPA,ASCOPA(1)),(ISCOP0,ASCOP0(1))
COMMON /UNITS/SCRN0,CNSL0,KPD,PR,BUSA,BUSB,BSUC,BUSD,FILE,GR
COMMON /ASCVAR/ASCOPA,ASCOP0,/ASCNDX/ASCOPN,/NAMEPR/PROGNM,MAINLN
COMMON /WFM0SV/SCOPE0,/I/SCOPEA,/TST/ISTEST
SAVE /NAMEPR/,/UNITS/,/WFM0SV/,/I/,/TST/
SAVE /ASCVAR/,/ASCNDX/
INTRINSIC CHAR
EXTERNAL PAUSE,TIMOUT,CRCLS,SREAD,CLRBUS
SAVE
DO 4 J = 1,4
SCOPE0(J) = 0
4 CONTINUE
CALL ZAPIT(S0QQQQ(1),8192)
S0QQQQ(1) = 0
S0QQQQ(8192) = 0
CALL TIMOUT
CALL CRCLS
WRITE (*,*,ERR=5) 'RD468: ABOUT TO READ TEKTRONIX 468 WAVEFORM(S)'
5 CONTINUE
CALL SREAD(16,SCOPE0(1),8192,0,0,0,ERROR)
CALL CLRBUS
* IF (ISTEST) THEN
* PRINT *,'RD468: RAW WAVEFORM PRINTOUT ...'
* CALL HEX2(0,1600,SCOPE0)
* ENDIF
CALL DDC0PY(SCOPE0(1),SCOPEA(1),8192)
CALL DDC0PY(SCOPE0(1),ISCOPA,8192)
CALL DDC0PY(SCOPE0(1),ISCOP0,8192)
RETURN
END
*--------------------------------------------------------------------------
SUBROUTINE DC468
IMPLICIT CHARACTER*41 (A-Z)
* (C) COPYRIGHT: Kevin G. Rhoads & High Voltage Research Lab (MIT) - 1983.
CHARACTER PROGNM*18,MAINLN*54,SAVENM*12,MESS*80,HMN*30
CHARACTER*1 ASCOPA(8192),ASCOP0(8192),CH
CHARACTER*3 WFID,MODE,XUNIT,YUNIT
REAL*4 XINCR,XZERO,XUNITS,YOFF,YUNITS,YMUL(10),Y0(10),GETRL
REAL*4 RLMAX,RLMIN,WFMS(0:1023,-10:11),WFMA(0:1023)
REAL*4 RNUM,TINCR,YZERO,YMULT,ASCRL,AMAX1,VGND,TTRIG,VTRIG
REAL*4 WFM0(0:1023),PWFM0(0:1023),WFM1(0:1023),PWFM1(0:1023),TIME(0:1023)
REAL*4 WFM2(0:1023),PWFM2(0:1023),WFM3(0:1023),PWFM3(0:1023)
REAL*4 WFM4(0:1023),PWFM4(0:1023),WFM5(0:1023),PWFM5(0:1023)
REAL*4 WFM6(0:1023),PWFM6(0:1023),WFM7(0:1023),PWFM7(0:1023)
REAL*4 WFM8(0:1023),PWFM8(0:1023),WFM9(0:1023),PWFM9(0:1023)
INTEGER*4 SCRN0,CNSL0,KPD,PR,BUSA,BUSB,BSUC,BUSD,FILE,GR,INT4MN,INT4MX
INTEGER*4 ERROR,ASCOPN,IFIX,ICHAR,MOD,HMANY,VOLTN,IKL,J,KHMN
INTEGER*4 OTHERW,SCRCHW
INTEGER*2 IASC,ISCAN,IKBF1,IKBF2,IERR,HLK,PRPNTS,NOPNTS,INT2MN,INT2MX
INTEGER*2 WFM(0:1023),WFMNO,PTOFF,OFFSET,CHKSUM,WORD,HMANY1,HMANY2
INTEGER*1 INT1MX,INT1MN,BYTE,BYT(2),SCOPEA(8192)
LOGICAL*4 FOUND,FIND,FINDS
LOGICAL*2 DUMPIT,SAVDMP,DOITP,PAUSES,ISTEST,FNDERR,ERRORS(3)
LOGICAL*2 IS1,IS2,IS3,IS4,IS5,IS6,ISADD,WFM0OK,WFM1OK,TIMEOK
LOGICAL*2 ABORT,ESCAPE,INTRPT,FOO,BAR
EQUIVALENCE(WFMS(0,11),WFMA(0))
EQUIVALENCE (TIME(0),WFMS(0,0)),(WFM0(0),WFMS(0,1)),(WFM1(0),WFMS(0,2))
EQUIVALENCE (PWFM0(0),WFMS(0,-1)),(PWFM1(0),WFMS(0,-2))
EQUIVALENCE (WFM2(0),WFMS(0,3)),(WFM3(0),WFMS(0,4))
EQUIVALENCE (PWFM2(0),WFMS(0,-3)),(PWFM3(0),WFMS(0,-4))
EQUIVALENCE (WFM4(0),WFMS(0,5)),(WFM5(0),WFMS(0,6))
EQUIVALENCE (PWFM4(0),WFMS(0,-5)),(PWFM5(0),WFMS(0,-6))
EQUIVALENCE (WFM6(0),WFMS(0,7)),(WFM7(0),WFMS(0,8))
EQUIVALENCE (PWFM6(0),WFMS(0,-7)),(PWFM7(0),WFMS(0,-8))
EQUIVALENCE (WFM8(0),WFMS(0,9)),(WFM9(0),WFMS(0,10))
EQUIVALENCE (PWFM8(0),WFMS(0,-9)),(PWFM9(0),WFMS(0,-10))
EQUIVALENCE (WORD,BYT(1)),(BYTE,BYT(2))
COMMON /WFMS/WFMS,/ASCVAR/ASCOPA,ASCOP0,/ASCNDX/ASCOPN,/NAMEPR/PROGNM,MAINLN
COMMON /REPLIM/RLMAX,RLMIN,INT1MX,INT1MN,INT2MX,INT2MN,INT4MX,INT4MN
COMMON /UNITS/SCRN0,CNSL0,KPD,PR,BUSA,BUSB,BSUC,BUSD,FILE,GR
COMMON /PNTS/PRPNTS,NOPNTS,/I/SCOPEA,/PAWS/PAUSES,/TST/ISTEST
COMMON /ERRORS/FNDERR,ERRORS,/FOO5/VOLTN,RNUM,YZERO,YMULT,VGND,TTRIG,VTRIG
COMMON /KEYGET/IASC,ISCAN,IKBF1,IKBF2,IERR,/NTRVN/ABORT,ESCAPE,INTRPT
COMMON /BIN/IS1,IS2,IS3,IS4,IS5,IS6,ISADD,WFM0OK,WFM1OK,TIMEOK
COMMON /CBIN/WFID,MODE,XUNIT,YUNIT,CH,/YSCALE/YMUL,Y0,/DUMP/DUMPIT
COMMON /IBIN/WFM,WFMNO,PTOFF,CHKSUM,WORD,HMANY1,HMANY2,HMANY
COMMON /RBIN/XINCR,XZERO,XUNITS,YOFF,YUNITS,/WFMFOO/OTHERW,SCRCHW
SAVE /REPLIM/,/UNITS/,/PNTS/,/I/,/PAWS/,/NAMEPR/,/ASCVAR/,/ASCNDX/
SAVE /WFMS/,/TST/,/ERRORS/,/FOO5/,/YSCALE/,/DUMP/,/KEYGET/,/NTRVN/
SAVE /BIN/,/CBIN/,/RBIN/,/WFMFOO/
EXTERNAL DMP,FIND,FINDS,BCURVE,ASCRL,GETRL,CRCLS,PAUSE,ISNTRP
INTRINSIC AMAX1,IFIX,MOD,ICHAR
SAVE
SAVDMP = DUMPIT
DUMPIT = .FALSE.
WFM0OK = .FALSE.
WFM1OK = .FALSE.
TIMEOK = .FALSE.
ASCOPN = 1
CALL CRCLS
INTRPT = .FALSE.
ESCAPE = .FALSE.
ABORT = .FALSE.
WRITE (*,*,ERR=9999) 'DC468: ABOUT TO DECODE TEKTRONIX 468 WAVEFORMS'
9999 CONTINUE
IF (ASCOPA(ASCOPN).EQ.CHAR(10)) RETURN
FOUND = FINDS(6,'WFMPRE',ASCOPN,ASCOPA)
IF (.NOT.FOUND) THEN
CALL PAUSE('WFMPRE NOT FOUND')
IF (ABORT) STOP
CALL DMP(ASCOPN,ASCOPA)
ENDIF
FOUND = FINDS(6,'WFID:"',ASCOPN,ASCOPA)
WFID(1:1) = ASCOPA(ASCOPN)
WFID(2:2) = ASCOPA(ASCOPN+1)
WFID(3:3) = ASCOPA(ASCOPN+2)
MODE(1:1) = ASCOPA(ASCOPN+4)
MODE(2:2) = ASCOPA(ASCOPN+5)
MODE(3:3) = ASCOPA(ASCOPN+6)
ASCOPN = ASCOPN + 5
FOUND = FINDS(6,'NR.PT:',ASCOPN,ASCOPA)
NOPNTS = IFIX( ASCRL(ASCOPN,ASCOPA) )
FOUND = FINDS(6,'XINCR:',ASCOPN,ASCOPA)
XINCR = ASCRL(ASCOPN,ASCOPA)
FOUND = FINDS(6,'XZERO:',ASCOPN,ASCOPA)
XZERO = ASCRL(ASCOPN,ASCOPA)
FOUND = FINDS(7,'PT.OFF:',ASCOPN,ASCOPA)
PTOFF = IFIX( ASCRL(ASCOPN,ASCOPA) )
FOUND = FINDS(6,'XUNIT:',ASCOPN,ASCOPA)
XUNIT(1:1) = ASCOPA(ASCOPN)
XUNIT(2:2) = ASCOPA(ASCOPN+1)
XUNIT(3:3) = ' '
CH = XUNIT(1:1)
IF ((CH.EQ.'S').OR.(CH.EQ.'s')) XUNITS = 1.0
IF ((CH.EQ.'M').OR.(CH.EQ.'m')) XUNITS = 1.0E-3
IF ((CH.EQ.'U').OR.(CH.EQ.'u')) XUNITS = 1.0E-6
IF ((CH.EQ.'N').OR.(CH.EQ.'n')) XUNITS = 1.0E-9
IF (DUMPIT) THEN
PRINT *,'DC468: WFID = ',WFID,' MODE = ',MODE
PRINT *,'DC468: NR.PT: ',NOPNTS,', XINCR: ',XINCR,', XZERO: ',XZERO
PRINT *,' PT.OFF: ',PTOFF,', XUNIT: ',XUNIT,', XUNITS ',XUNITS
ENDIF
FOUND = FINDS(6,'YMULT:',ASCOPN,ASCOPA)
YMULT = ASCRL(ASCOPN,ASCOPA)
FOUND = FINDS(6,'YZERO:',ASCOPN,ASCOPA)
YZERO = ASCRL(ASCOPN,ASCOPA)
FOUND = FINDS(5,'YOFF:',ASCOPN,ASCOPA)
YOFF = ASCRL(ASCOPN,ASCOPA)
FOUND = FINDS(6,'YUNIT:',ASCOPN,ASCOPA)
YUNIT(1:1) = ASCOPA(ASCOPN)
YUNIT(2:2) = ASCOPA(ASCOPN+1)
CH = YUNIT(1:1)
IF ((CH.EQ.'V').OR.(CH.EQ.'v')) YUNITS = 1.0
IF ((CH.EQ.'M').OR.(CH.EQ.'m')) YUNITS = 1.0E-3
IF ((CH.EQ.'U').OR.(CH.EQ.'u')) YUNITS = 1.0E-6
IF ((CH.EQ.'D').OR.(CH.EQ.'d')) THEN
CALL CRCLS
PRINT *,'DC468: Y UNITS ARE "DIV" FOR WFM ',WFID,', I need to know, in terms of VOLTS:'
9078 PRINT *,'WHAT ARE DIV? (ENTER A REAL NUMBER, eg. IF millivolts enter 0.001 OR 1.0E-3)'
YUNITS = GETRL()
PRINT *,' THE Y UNITS (DIV) ARE: ',YUNITS,' CORRECT?(Y/N)'
READ (*,'(A)') CH
IF ((CH.EQ.'N').OR.(CH.EQ.'n')) GOTO 9078
ENDIF
IF (DUMPIT) THEN
PRINT *,'DC468: WFID = ',WFID,' MODE = ',MODE
PRINT *,'DC468: YZERO: ',YZERO,', YOFF: ',YOFF
PRINT *,' YUNIT: ',YUNIT,', YUNITS ',XUNITS
DUMPIT = SAVDMP
ENDIF
IF (ISTEST) THEN
INTRPT = .FALSE.
ESCAPE = .FALSE.
ABORT = .FALSE.
ENDIF
CALL BCURVE(ASCOPN,ASCOPA,SCOPEA)
* IF (ISTEST) PRINT *,'HAVE RETURNED FROM BCURVE'
* WRITE (HMN,'(A,I5)') 'DC468: ASCOPN = ',ASCOPN
* IF (ISTEST) PRINT *,HMN
IF (INTRPT.OR.ESCAPE) THEN
PRINT *,'DC468: ASCOPN = ',ASCOPN,' NEW VALUE?'
KHMN = GETINT()
IF (KHMN.GT.0) ASCOPN = KHMN
ENDIF
FOO = WFM0OK .AND. WFM1OK
BAR = .TRUE.
DO 7003 IKL = 0,10
J = ASCOPN + IKL
IF (J.GT.8192) GOTO 7004
FOO = FOO .OR. (ASCOPA(J).EQ.CHAR(10))
IF (FOO) GOTO 7004
BAR = BAR .AND. ((ASCOPA(J).EQ.CHAR(13)) .OR. (SCOPEA(J).EQ.0))
7003 CONTINUE
7004 CONTINUE
BAR = FOO .OR. BAR
7007 CONTINUE
IF (BAR) THEN
RETURN
ENDIF
WRITE (HMN,'(A,I5)') 'DC468: ASCOPN = ',ASCOPN
IF (INTRPT.OR.ESCAPE) THEN
PRINT *,'DC468: ASCOPN = ',ASCOPN,' NEW VALUE?'
KHMN = GETINT()
IF (KHMN.GT.0) ASCOPN = KHMN
ENDIF
GOTO 9999
END
*----------------------------------------------------------------------
SUBROUTINE DOSCOP
*
* (C) COPYRIGHT: Kevin G. Rhoads & High Voltage Research Lab (MIT) - 1983.
* (C) 1986 COPYRIGHT: Kevin G. Rhoads, & High Voltage Research Lab (MIT)
*
CHARACTER PROGNM*18,MAINLN*54,SAVENM*5
INTEGER*4 GETINT,MENU,OTHERW,SCRCHW
LOGICAL*2 TEK468,TK7854,TK7D20,ISTEST,DUMPIT,TASCII,BINARY,NTRPLT
COMMON /SCTYPE/TEK468,TK7854,TK7D20,/WFMFMT/TASCII,BINARY,NTRPLT
COMMON /TST/ISTEST,/DUMP/DUMPIT,/NAMEPR/PROGNM,MAINLN,/WFMFOO/OTHERW,SCRCHW
SAVE /DUMP/,/TST/,/WFMFMT/,/SCTYPE/,/NAMEPR/,/WFMFOO/
EXTERNAL GETINT,RD7ASC,RD468,DC468,PAUSE
SAVE
*
SAVENM = PROGNM
PROGNM = SAVENM//'>SCOPE'
9000 CONTINUE
IF (TK7854) THEN
IF (OTHERW.EQ.1) THEN
CALL RD7ASC
ELSE
CALL RDBASC(OTHERW)
ENDIF
ELSEIF (TEK468) THEN
CALL RD468
CALL DC468
ELSEIF (TK7D20) THEN
IF (TASCII) THEN
IF (OTHERW.EQ.1) THEN
CALL RD7ASC
ELSE
CALL RDBASC(OTHERW)
ENDIF
ELSEIF (BINARY) THEN
CALL RD7BIN
ENDIF
ELSE
CALL WHICHS
IF (TK7854.OR.TEK468.OR.TK7D20) THEN
CALL OPEBUS
GOTO 9000
ENDIF
ENDIF
PROGNM = SAVENM
RETURN
END
*----------------------------------------------------------------------
SUBROUTINE WFMASC(NUMBER)
* (C) 1986 COPYRIGHT: Kevin G. Rhoads, & High Voltage Research Lab (MIT)
INTEGER*4 NUMBER,MENU,DTCB(12),OTHERW,SCRCHW,TO,IRPT
INTEGER*1 SCOPEA(8192),SCOPE0(8192),DTCBA(50)
LOGICAL*4 FOUND
LOGICAL*2 TEK468,TK7854,TK7D20,RDNG1,WRTNG0,TASCII,BINARY,NTRPLT
LOGICAL*2 FNDERR,ERRORS(3),WFM0OK,OTHROK
EQUIVALENCE (DTCB(1),DTCBA(1))
COMMON /SCTYPE/TEK468,TK7854,TK7D20,/I/SCOPEA,/WFM0SV/SCOPE0
COMMON /QWFM/FOUND,WFM0OK,OTHROK,/DTCBS/DTCBA,/ASYNCH/RDNG1,WRTNG0
COMMON /WFMFMT/TASCII,BINARY,NTRPLT,/WFMFOO/OTHERW,SCRCHW
COMMON /ERRORS/FNDERR,ERRORS
SAVE /SCTYPE/,/I/,/WFM0SV/,/QWFM/,/DTCBS/,/ASYNCH/,/WFMFMT/
SAVE /WFMFOO/,/ERRORS/
SAVE
IF (TEK468) RETURN
IF (NUMBER.LT.0.OR.NUMBER.GT.9) NUMBER = 0
RDNG1 = .FALSE.
WRTNG0 = .FALSE.
DTCB(1) = 0
9000 CONTINUE
IF (NUMBER.EQ.0.AND.TK7854) THEN
CALL RDBASC(0)
ELSEIF (TK7854) THEN
CALL TIMOUT
IF (SCRCHW.GT.0.AND.SCRCHW.LE.9.AND.SCRCHW.NE.NUMBER) THEN
WRITE (*,'(A,I1,A/)') '0 WFM ',SCRCHW,' >WFM'
WRITE (6,'(A,I1,A/)') '0 WFM ',SCRCHW,' >WFM'
ELSE
SCRCHW = 0
ENDIF
IF (NUMBER.LE.0.OR.NUMBER.GT.9) THEN
WRITE (*,'(A/)') '0 WFM SENDX'
WRITE (6,'(A/)') '0 WFM SENDX'
ENDIF
WRITE (*,'(I1,A/)') NUMBER,' WFM 0 >WFM 0 WFM SENDX'
WRITE (6,'(I1,A/)') NUMBER,' WFM 0 >WFM 0 WFM SENDX'
CALL SREAD(6,SCOPEA(1),8192,0,0,0,ERROR)
ELSEIF (TK7D20.AND.TASCII) THEN
IF (NUMBER.GT.5) NUMBER = 0
CALL TIMOUT
WRITE (*,'(A)') 'DATA ENCDG:ASCII'
WRITE (26,'(A)') 'DATA ENCDG:ASCII'
WRITE (*,'(A,I1)') 'DATA MEMORY:',NUMBER+1
WRITE (26,'(A,I1)') 'DATA MEMORY:',NUMBER+1
IF (NTRPLT) THEN
WRITE (*,'(A)') 'DATA INTERPOLATE:ON'
WRITE (26,'(A)') 'DATA INTERPOLATE:ON'
ELSE
WRITE (*,'(A)') 'DATA INTERPOLATE:OFF'
WRITE (26,'(A)') 'DATA INTERPOLATE:OFF'
ENDIF
WRITE (*,'(A)') 'WAVFRM?'
WRITE (26,'(A)') 'WAVFRM?'
CALL SREAD(26,SCOPE0(1),8192,0,0,0,ERROR)
ELSEIF (TEK468) THEN
CALL RD468
CALL DC468
ENDIF
IF (SCRCHW.GT.0.AND.SCRCHW.LE.9.AND.TK7854.AND.NUMBER.NE.0) THEN
WRITE (*,'(I1,A/)') SCRCHW,' WFM 0 >WFM'
WRITE (6,'(I1,A/)') SCRCHW,' WFM 0 >WFM'
ENDIF
IF (NUMBER.NE.0) THEN
CALL DC7ASC(NUMBER)
IF (.NOT.FOUND) THEN
IF ((NUMBER.EQ.0.AND.WFM0OK).OR.(NUMBER.NE.0.AND.OTHROK)) RETURN
PRINT *,'WFM ',NUMBER,' READ ERROR: curve not found, REREAD? (Y/n)'
I = MENU(1,0,1)
IF (I.EQ.1) GOTO 9000
ENDIF
ENDIF
RETURN
ENTRY SMTWFM(NUMBER,TO)
CALL MEDWFM(NUMBER,TO)
CALL MEDWFM(TO,NUMBER)
CALL MENWFM(NUMBER,TO)
CALL MENWFM(TO,NUMBER)
CALL MENWFM(NUMBER,TO)
RETURN
END
*----------------------------------------------------------------------
$SEGMENT WFMS
*
* VARIOUS WFM OPERATIONS
*
SUBROUTINE PLTWFS(LIST,COUNT,PLOTYP)
* (C) 1986 COPYRIGHT: Kevin G. Rhoads, & High Voltage Research Lab (MIT)
CHARACTER*77 DATE*10,TITLE(3),LABEL,TITLEL
CHARACTER*38 T1,T3,OUTFIL,TMPFIL,COLABL*34
REAL*4 WFMS(0:1023,-10:11),WFMA(0:1023),TEMP,CRUD1,CRUD2
REAL*4 WFM0(0:1023),PWFM0(0:1023),WFM1(0:1023),PWFM1(0:1023),TIME(0:1023)
REAL*4 WFM2(0:1023),PWFM2(0:1023),WFM3(0:1023),PWFM3(0:1023),SCRTCH(0:1023)
REAL*4 WFM4(0:1023),PWFM4(0:1023),WFM5(0:1023),PWFM5(0:1023)
REAL*4 WFM6(0:1023),PWFM6(0:1023),WFM7(0:1023),PWFM7(0:1023)
REAL*4 WFM8(0:1023),PWFM8(0:1023),WFM9(0:1023),PWFM9(0:1023)
REAL*4 DATA(3,1024),D256L(3,1024),D128L(3,512),D75L(3,300),D64L(3,256)
REAL*4 PR256L(3,256,4),PR128L(3,128,4),PR75L(3,75,4),PR64L(3,64,4)
REAL*4 PR50L(3,50,4),D50L(3,200),VAL1,VAL2,VAL3
REAL*4 PLOT1K(1024,2,10),PLT512(512,2,20),PLT256(256,2,20)
REAL*4 RLOT1K(1024,2,8),RLT512(512,2,16),RLT256(256,2,32)
REAL*4 R500(16384)
INTEGER*4 FROM,TO,I,COUNT,LIST(COUNT),ICOUNT,II,NOPLTS,PLOTYP,J,K
INTEGER*4 FROM2
INTEGER*2 PRPNTS,NOPNTS
LOGICAL*2 DORAW,DOONE,ARETWO
EQUIVALENCE (TIME(0),WFMS(0,0)),(WFM0(0),WFMS(0,1)),(WFM1(0),WFMS(0,2))
EQUIVALENCE (PWFM0(0),WFMS(0,-1)),(PWFM1(0),WFMS(0,-2))
EQUIVALENCE (WFM2(0),WFMS(0,3)),(WFM3(0),WFMS(0,4))
EQUIVALENCE (PWFM2(0),WFMS(0,-3)),(PWFM3(0),WFMS(0,-4))
EQUIVALENCE (WFM4(0),WFMS(0,5)),(WFM5(0),WFMS(0,6))
EQUIVALENCE (PWFM4(0),WFMS(0,-5)),(PWFM5(0),WFMS(0,-6))
EQUIVALENCE (WFM6(0),WFMS(0,7)),(WFM7(0),WFMS(0,8))
EQUIVALENCE (PWFM6(0),WFMS(0,-7)),(PWFM7(0),WFMS(0,-8))
EQUIVALENCE (WFM8(0),WFMS(0,9)),(WFM9(0),WFMS(0,10))
EQUIVALENCE (PWFM8(0),WFMS(0,-9)),(PWFM9(0),WFMS(0,-10))
EQUIVALENCE (WFMS(0,11),WFMA(0))
EQUIVALENCE (DATA(1,1),D256L(1,1),D128L(1,1),D75L(1,1),D64L(1,1),D50L(1,1))
EQUIVALENCE (DATA(1,1),PR256L(1,1,1),PR128L(1,1,1),PR75L(1,1,1),PR64L(1,1,1),PR50L(1,1,1))
EQUIVALENCE (DATA(1,1),PLOT1K(1,1,1),PLT512(1,1,1),PLT256(1,1,1))
EQUIVALENCE (R500(1),RLOT1K(1,1,1),RLT512(1,1,1),RLT256(1,1,1))
COMMON /WFMOUT/DATA,/WFMS/WFMS,/PNTS/PRPNTS,NOPNTS,/PARPLZ/R500
COMMON /ASCGAR/DATE,TITLE,LABEL
SAVE /WFMS/,/WFMOUT/,/PNTS/,/ASCGAR/,/PARPLZ/
SAVE
ICOUNT = 0
NOPLTS = 0
DO 2000 II = 1,COUNT
IF (LIST(II).LT.-10.OR.LIST(II).GT.11) GOTO 2001
ICOUNT = ICOUNT + 1
IF (NOPNTS.EQ.256.AND.ICOUNT.LT.21) THEN
DO 2100 I = 1,256
RLT256(I,1,ICOUNT) = TIME(I-1)
RLT256(I,2,ICOUNT) = WFMS(I-1,LIST(II))
2100 CONTINUE
NOPLTS = NOPLTS + 1
ELSEIF (NOPNTS.EQ.512.AND.ICOUNT.LT.21) THEN
DO 2101 I = 1,512
RLT512(I,1,ICOUNT) = TIME(I-1)
RLT512(I,2,ICOUNT) = WFMS(I-1,LIST(II))
2101 CONTINUE
NOPLTS = NOPLTS + 1
ELSEIF (NOPNTS.EQ.1024.AND.ICOUNT.LT.11) THEN
DO 2102 I = 1,1024
RLOT1K(I,1,ICOUNT) = TIME(I-1)
RLOT1K(I,2,ICOUNT) = WFMS(I-1,LIST(II))
2102 CONTINUE
NOPLTS = NOPLTS + 1
ENDIF
2001 CONTINUE
2000 CONTINUE
* IF (PLOTYP.EQ.3.OR.PLOTYP.EQ.4) THEN
* IF (NOPLTS.LE.5) THEN
* CALL FSET05
* ELSEIF (NOPLTS.LE.7) THEN
* CALL FSET07
* ELSEIF (NOPLTS.LE.11) THEN
* CALL FSET11
* ELSEIF (NOPLTS.LE.15) THEN
* CALL FSET15
* ENDIF
* ENDIF
IF (PLOTYP.EQ.5.OR.PLOTYP.EQ.6) THEN
CALL FULLSC
ELSEIF (PLOTYP.EQ.9.OR.PLOTYP.EQ.10) THEN
CALL MAXWIN
ENDIF
IF (NOPNTS.EQ.256) THEN
IF (PLOTYP.EQ.1) THEN
CALL MLTPLT(RLT256,256,NOPLTS)
ELSEIF (PLOTYP.EQ.2) THEN
CALL MLTBLT(RLT256,256,NOPLTS)
ELSEIF (PLOTYP.EQ.3) THEN
CALL FANCYP(RLT256,256,NOPLTS)
ELSEIF (PLOTYP.EQ.4) THEN
CALL FANCYB(RLT256,256,NOPLTS)
ELSEIF (PLOTYP.EQ.7) THEN
CALL PLOT49(RLT256,256,NOPLTS)
ELSEIF (PLOTYP.EQ.8) THEN
CALL BARG49(RLT256,256,NOPLTS)
ELSE
CALL PLOTW(RLT256,256,NOPLTS)
ENDIF
ELSEIF (NOPNTS.EQ.512) THEN
IF (PLOTYP.EQ.1) THEN
CALL MLTPLT(RLT512,512,NOPLTS)
ELSEIF (PLOTYP.EQ.2) THEN
CALL MLTBLT(RLT512,512,NOPLTS)
ELSEIF (PLOTYP.EQ.3) THEN
CALL FANCYP(RLT512,512,NOPLTS)
ELSEIF (PLOTYP.EQ.4) THEN
CALL FANCYB(RLT512,512,NOPLTS)
ELSEIF (PLOTYP.EQ.7) THEN
CALL PLOT49(RLT512,512,NOPLTS)
ELSEIF (PLOTYP.EQ.8) THEN
CALL BARG49(RLT512,512,NOPLTS)
ELSE
CALL PLOTW(RLT512,512,NOPLTS)
ENDIF
ELSEIF (NOPNTS.EQ.1024) THEN
IF (PLOTYP.EQ.1) THEN
CALL MLTPLT(RLOT1K,1024,NOPLTS)
ELSEIF (PLOTYP.EQ.2) THEN
CALL MLTBLT(RLOT1K,1024,NOPLTS)
ELSEIF (PLOTYP.EQ.3) THEN
CALL FANCYP(RLOT1K,1024,NOPLTS)
ELSEIF (PLOTYP.EQ.4) THEN
CALL FANCYB(RLOT1K,1024,NOPLTS)
ELSEIF (PLOTYP.EQ.7) THEN
CALL PLOT49(RLOT1K,1024,NOPLTS)
ELSEIF (PLOTYP.EQ.8) THEN
CALL BARG49(RLOT1K,1024,NOPLTS)
ELSE
CALL PLOTW(RLOT1K,1024,NOPLTS)
ENDIF
ENDIF
RETURN
ENTRY CPYWFM(FROM,TO)
IF (FROM.EQ.TO.OR.FROM.LT.-10.OR.FROM.GT.11.OR.TO.LT.-10.OR.TO.GT.11) RETURN
DO 1 I = 0,1023
WFMS(I,TO) = WFMS(I,FROM)
1 CONTINUE
RETURN
ENTRY EXGWFM(FROM,TO)
IF (FROM.EQ.TO.OR.FROM.LT.-10.OR.FROM.GT.11.OR.TO.LT.-10.OR.TO.GT.11) RETURN
DO 2 I = 0,1023
TEMP = WFMS(I,TO)
WFMS(I,TO) = WFMS(I,FROM)
WFMS(I,FROM) = TEMP
2 CONTINUE
RETURN
ENTRY ADDWFM(FROM,FROM2,TO)
IF (FROM.EQ.TO.OR.FROM.LT.-10.OR.FROM.GT.11.OR.TO.LT.-10.OR.TO.GT.11) RETURN
DO 3 I = 0,(NOPNTS-1)
WFMS(I,TO) = WFMS(I,FROM) + WFMS(I,FROM2)
3 CONTINUE
RETURN
ENTRY SUBWFM(FROM,FROM2,TO)
IF (FROM.EQ.TO.OR.FROM.LT.-10.OR.FROM.GT.11.OR.TO.LT.-10.OR.TO.GT.11) RETURN
DO 4 I = 0,(NOPNTS-1)
WFMS(I,TO) = WFMS(I,FROM) - WFMS(I,FROM2)
4 CONTINUE
RETURN
ENTRY MRNWFM(FROM,TO,COUNT)
ICOUNT = COUNT
GOTO 9005
ENTRY MENWFM(FROM,TO)
ICOUNT = 1
9005 CONTINUE
IF (FROM.EQ.TO.OR.FROM.LT.-10.OR.FROM.GT.11.OR.TO.LT.-10.OR.TO.GT.11) RETURN
IF (ICOUNT.GT.1) THEN
DO 9045 I = 0,(NOPNTS-1)
SCRTCH(I) = WFMS(I,FROM)
9045 CONTINUE
ENDIF
DO 9015 J = 1,ICOUNT
DO 5 I = 1,(NOPNTS-2)
WFMS(I,TO) = (WFMS(I-1,FROM)+2.0*WFMS(I,FROM)+WFMS(I+1,FROM))/4.0
5 CONTINUE
WFMS(0,TO) = (2.0*WFMS(0,FROM)+WFMS(1,FROM))/3.0
WFMS((NOPNTS-1),TO) = (2.0*WFMS((NOPNTS-1),FROM)+WFMS((NOPNTS-2),FROM))/3.0
IF (J.LT.ICOUNT) THEN
DO 9025 I = 0,(NOPNTS-1)
WFMS(I,FROM) = WFMS(I,TO)
9025 CONTINUE
ELSEIF (J.EQ.ICOUNT.AND.ICOUNT.GT.1) THEN
DO 9035 I = 0,(NOPNTS-1)
WFMS(I,FROM) = SCRTCH(I)
9035 CONTINUE
ENDIF
9015 CONTINUE
RETURN
ENTRY PLTWFM(FROM,PLOTYP)
IF (FROM.LT.-10.OR.FROM.GT.11) RETURN
IF (PLOTYP.EQ.5.OR.PLOTYP.EQ.6) THEN
CALL FULLSC
ELSEIF (PLOTYP.EQ.9.OR.PLOTYP.EQ.10) THEN
CALL MAXWIN
ENDIF
IF (NOPNTS.EQ.256) THEN
DO 100 I = 1,256
RLT256(I,1,1) = TIME(I-1)
RLT256(I,2,1) = WFMS(I-1,FROM)
100 CONTINUE
IF (PLOTYP.EQ.1) THEN
CALL MLTPLT(RLT256,256,1)
ELSEIF (PLOTYP.EQ.2) THEN
CALL MLTBLT(RLT256,256,1)
ELSEIF (PLOTYP.EQ.3) THEN
CALL FANCYP(RLT256,256,1)
ELSEIF (PLOTYP.EQ.4) THEN
CALL FANCYB(RLT256,256,1)
ELSEIF (PLOTYP.EQ.5.OR.PLOTYP.EQ.9) THEN
CALL BLOTW(RLT256,256,1)
ELSEIF (PLOTYP.EQ.7) THEN
CALL PLOT49(RLT256,256,1)
ELSEIF (PLOTYP.EQ.8) THEN
CALL BARG49(RLT256,256,1)
ELSE
CALL PLOTW(RLT256,256,1)
ENDIF
ELSEIF (NOPNTS.EQ.512) THEN
DO 101 I = 1,512
RLT512(I,1,1) = TIME(I-1)
RLT512(I,2,1) = WFMS(I-1,FROM)
101 CONTINUE
IF (PLOTYP.EQ.1) THEN
CALL MLTPLT(RLT512,512,1)
ELSEIF (PLOTYP.EQ.2) THEN
CALL BARG49(RLT512,512,1)
ELSEIF (PLOTYP.EQ.3) THEN
CALL FANCYP(RLT512,512,1)
ELSEIF (PLOTYP.EQ.4) THEN
CALL FANCYB(RLT512,512,1)
ELSEIF (PLOTYP.EQ.5.OR.PLOTYP.EQ.9) THEN
CALL BLOTW(RLT512,512,1)
ELSEIF (PLOTYP.EQ.7) THEN
CALL PLOT49(RLT512,512,1)
ELSEIF (PLOTYP.EQ.8) THEN
CALL BARG49(RLT512,512,1)
ELSE
CALL PLOTW(RLT512,512,1)
ENDIF
ELSEIF (NOPNTS.EQ.1024) THEN
DO 102 I = 1,1024
RLT256(I,1,1) = TIME(I-1)
RLT256(I,2,1) = WFMS(I-1,FROM)
102 CONTINUE
IF (PLOTYP.EQ.1) THEN
CALL MLTPLT(RLOT1K,1024,1)
ELSEIF (PLOTYP.EQ.2) THEN
CALL BARG49(RLOT1K,1024,1)
ELSEIF (PLOTYP.EQ.3) THEN
CALL FANCYP(RLOT1K,1024,1)
ELSEIF (PLOTYP.EQ.4) THEN
CALL FANCYB(RLOT1K,1024,1)
ELSEIF (PLOTYP.EQ.5.OR.PLOTYP.EQ.9) THEN
CALL BLOTW(RLOT1K,1024,1)
ELSEIF (PLOTYP.EQ.7) THEN
CALL PLOT49(RLOT1K,1024,1)
ELSEIF (PLOTYP.EQ.8) THEN
CALL BARG49(RLOT1K,1024,1)
ELSE
CALL PLOTW(RLOT1K,1024,1)
ENDIF
ENDIF
RETURN
ENTRY MRDWFM(FROM,TO,COUNT)
ICOUNT = COUNT
ENTRY MEDWFM(FROM,TO)
ICOUNT = 1
9006 CONTINUE
IF (FROM.EQ.TO.OR.FROM.LT.-10.OR.FROM.GT.11.OR.TO.LT.-10.OR.TO.GT.11) RETURN
IF (ICOUNT.GT.1) THEN
DO 9046 I = 0,1023
SCRTCH(I) = WFMS(I,FROM)
9046 CONTINUE
ENDIF
DO 9016 J = 1,ICOUNT
DO 6 I = 1,(NOPNTS-2)
VAL1 = WFMS(I-1,FROM)
VAL2 = WFMS(I,FROM)
VAL3 = WFMS(I+1,FROM)
IF (VAL1.GT.VAL2) THEN
TEMP = VAL1
VAL1 = VAL2
VAL2 = TEMP
ENDIF
IF (VAL1.GT.VAL3) THEN
TEMP = VAL1
VAL1 = VAL3
VAL3 = TEMP
ENDIF
IF (VAL2.GT.VAL3) THEN
WFMS(I,TO) = VAL3
ELSE
WFMS(I,TO) = VAL2
ENDIF
6 CONTINUE
IF (J.LT.ICOUNT) THEN
DO 9026 I = 1,(NOPNTS-2)
WFMS(I,FROM) = WFMS(I,TO)
9026 CONTINUE
ELSEIF (J.EQ.ICOUNT.AND.ICOUNT.GT.1) THEN
DO 9036 I = 0,(NOPNTS-1)
WFMS(I,FROM) = SCRTCH(I)
9036 CONTINUE
ENDIF
9016 CONTINUE
WFMS(0,TO) = WFMS(0,FROM)
WFMS((NOPNTS-1),TO) = WFMS((NOPNTS-1),FROM)
RETURN
ENTRY STOWFM(FROM,FROM2)
TMPFIL = ' '
IF (FROM.GT.10.OR.FROM2.GT.10) THEN
FROM = FROM - 10
FROM2 = FROM2 - 10
ENDIF
IF (FROM2.EQ.FROM.OR.FROM2.EQ.-FROM) THEN
WRITE (COLABL,'(A,I1,A,I1,A)') ' TIME pWFM',IABS(FROM),' rWFM',IABS(FROM),' '
ELSE
WRITE (COLABL,'(A,I1,A,I1,A)')' TIME WFM',IABS(FROM),' WFM',IABS(FROM2),' '
ENDIF
GOTO 3000
3002 CONTINUE
WRITE (*,*) 'ERROR OPENING FILE: ',OUTFIL
WRITE (*,*) 'Please specify new filename (or <Return> to skip file output)'
3000 CONTINUE
WRITE (*,*) 'What file for waveform(s) output? [<Return> to skip]'
READ (*,'(A)',ERR=3000) TMPFIL
IF (TMPFIL(1:1).EQ.CHAR(3).OR.TMPFIL.EQ.' ') GOTO 3999
CALL CHCKFN(TMPFIL,OUTFIL,' ',' ','WFM')
3011 OPEN (UNIT=45,FILE=OUTFIL,STATUS='OLD',FORM='FORMATTED',ERR=3001)
WRITE (*,*) 'FILE ALREADY EXISTS: ',OUTFIL
WRITE (*,*) 'OVERWRITE? (y/N)'
I = MENU(0,0,1)
IF (I.EQ.0) GOTO 3000
CLOSE (UNIT=45,STATUS='DELETE',ERR=3001)
3001 CONTINUE
OPEN (UNIT=45,FILE=OUTFIL,STATUS='NEW',FORM='FORMATTED',ERR=3002)
CALL CRCLS
WRITE (*,*) 'File opened successfully: ',OUTFIL
IF (FROM2.NE.FROM) THEN
DORAW = FROM.LT.0
ELSE
DORAW = .FALSE.
ENDIF
WRITE (UNIT=45,FMT='(A/A)',ERR=3003) TITLE(1),TITLE(3)
WRITE (UNIT=45,FMT='(A/A)') ' ',' '
* WRITE (UNIT=45,FMT='('' Charging Voltage: '',F10.3,A/)') CHGVLT,'kV'
* WRITE (UNIT=45,FMT='(A,G10.4,A,G10.4)') 'BASELINES, WFM0: ',WFM0ZR,' WFM1: ',WFM1ZR
IF (DORAW) THEN
WRITE (UNIT=45,FMT='(A,A/)') COLABL,' RAW DATA '
FROM = -IABS(FROM)
FROM2 = -IABS(FROM2)
ELSEIF (FROM2.NE.FROM.OR.FROM2.NE.-FROM) THEN
WRITE (UNIT=45,FMT='(A/)') COLABL
ELSE
WRITE (UNIT=45,FMT='(A/)') COLABL
FROM = -IABS(FROM)
ENDIF
WRITE (*,*) 'Writing ',NOPNTS,' points.'
DO 3010 I = 0,NOPNTS-1
IF (DORAW.AND.(FROM2.NE.FROM.OR.FROM2.NE.-FROM)) THEN
WRITE (UNIT=45,FMT=3997,ERR=3003) TIME(I),WFMS(I,FROM),
& WFMS(I,FROM2),WFMS(I,-FROM),WFMS(I,-(FROM2))
ELSEIF (FROM2.NE.FROM.AND.FROM2.NE.-FROM) THEN
WRITE (UNIT=45,FMT=3897,ERR=3003) TIME(I),WFMS(I,FROM),WFMS(I,FROM2)
ELSE
WRITE (UNIT=45,FMT=3897,ERR=3003) TIME(I),WFMS(I,FROM),WFMS(I,-FROM)
ENDIF
3010 CONTINUE
3012 CONTINUE
WRITE (*,*,ERR=3100) 'File writing finished.'
3100 CONTINUE
CLOSE (UNIT=45,STATUS='KEEP',ERR=3999)
GOTO 3999
3997 FORMAT (1P,G10.4E1,1X,G10.4E1,1X,G10.4E1,4X,G10.4E1,1X,G10.4E1)
3998 FORMAT (1P,G10.4E1,1X,G10.4E1,1X,G10.4E1,4X,G10.4E1,1X,G10.4E1/)
3897 FORMAT (1P,G10.4E1,1X,G10.4E1,1X,G10.4E1)
3898 FORMAT (1P,G10.4E1,1X,G10.4E1,1X,G10.4E1/)
3003 CONTINUE
CALL CRCLS
WRITE (*,*) 'ERROR WRITING FILE: ',OUTFIL
WRITE (*,*) 'What action? 1) RETRY, SAME FILE'
WRITE (*,*) ' 2) New file'
WRITE (*,*) ' 3) Abort'
I = MENU(1,0,3)
CLOSE (UNIT=45,STATUS='DELETE',ERR=3004)
3004 CONTINUE
OPEN (UNIT=45,FILE='#CON',ERR=3005)
3005 CONTINUE
CLOSE (UNIT=45,ERR=3006)
3006 CONTINUE
IF (I.EQ.3) GOTO 3999
IF (I.EQ.2) GOTO 3000
IF (I.EQ.1) GOTO 3011
3999 CONTINUE
RETURN
ENTRY RDWFM(FROM,FROM2)
TMPFIL = ' '
IF (FROM.GT.10.OR.FROM2.GT.10) THEN
FROM = FROM - 10
FROM2 = FROM2 - 10
ENDIF
DOONE = (FROM2.EQ.FROM.OR.FROM2.EQ.-FROM)
GOTO 3199
3102 CONTINUE
WRITE (*,*) 'ERROR OPENING FILE: ',OUTFIL
WRITE (*,*) 'Please specify new filename (or <Return> to skip file output)'
3199 CONTINUE
WRITE (*,*) 'What file for waveform input? [<Return> to skip]'
READ (*,'(A)',ERR=3199) TMPFIL
IF (TMPFIL(1:1).EQ.CHAR(3).OR.TMPFIL.EQ.' ') GOTO 3999
CALL CHCKFN(TMPFIL,OUTFIL,' ',' ','WFM')
3111 OPEN (UNIT=45,FILE=OUTFIL,STATUS='OLD',FORM='FORMATTED',ERR=3101)
GOTO 3113
3101 CONTINUE
CALL CRCLS
WRITE (*,*) 'FILE DOES NOT EXIST: ',OUTFIL
GOTO 3199
3113 CONTINUE
CALL CRCLS
WRITE (*,*) 'File opened successfully: ',OUTFIL
IF (FROM2.NE.FROM) THEN
DORAW = FROM.LT.0
ELSE
DORAW = .FALSE.
ENDIF
READ (UNIT=45,FMT='(A/A///)',ERR=3103,END=3114) TITLE(1),TITLE(3)
TITLEL = ' '
READ (UNIT=45,FMT='(A)',ERR=3103,END=3114) TITLEL
ARETWO = TITLEL(39:45) .NE. ' '
IF (DORAW) THEN
FROM = -IABS(FROM)
FROM2 = -IABS(FROM2)
ELSEIF (FROM2.NE.FROM.OR.FROM2.NE.-FROM) THEN
ELSE
FROM = -IABS(FROM)
ENDIF
IF (NOPNTS.NE.128.AND.NOPNTS.NE.256.AND.NOPNTS.NE.512.AND.NOPNTS.NE.820
& .AND.NOPNTS.NE.1024) NOPNTS = 1024
WRITE (*,*) 'Reading ',NOPNTS,' points.'
DO 3110 I = 0,NOPNTS-1
IF (ARETWO.AND.DOONE) THEN
READ (UNIT=45,FMT=3797,ERR=3103,END=3112) TIME(I),WFMS(I,FROM),
& CRUD1,WFMS(I,-FROM),CRUD2
ELSEIF (ARETWO) THEN
READ (UNIT=45,FMT=3797,ERR=3103,END=3112) TIME(I),WFMS(I,FROM),
& WFMS(I,FROM2),WFMS(I,-FROM),WFMS(I,-(FROM2))
ELSEIF (DOONE) THEN
READ (UNIT=45,FMT=3697,ERR=3103,END=3112) TIME(I),WFMS(I,FROM),
& WFMS(I,-FROM)
ELSE
READ (UNIT=45,FMT=3697,ERR=3103,END=3112) TIME(I),WFMS(I,FROM),
& WFMS(I,FROM2)
ENDIF
J = I + 1
3110 CONTINUE
3112 CONTINUE
NOPNTS = J
WRITE (*,*,ERR=3198) 'File reading finished.'
3198 CONTINUE
CLOSE (UNIT=45,STATUS='KEEP',ERR=3999)
GOTO 3999
3797 FORMAT (G10.4,1X,G10.4,1X,G10.4,4X,G10.4,1X,G10.4)
*3798 FORMAT (G10.4,1X,G10.4,1X,G10.4,4X,G10.4,1X,G10.4/)
3697 FORMAT (G10.4,1X,G10.4,1X,G10.4)
*3698 FORMAT (G10.4,1X,G10.4,1X,G10.4/)
3114 CONTINUE
CALL CRCLS
WRITE (*,*) 'UNEXPECTED END OF FILE: ',OUTFIL
GOTO 3115
3103 CONTINUE
CALL CRCLS
WRITE (*,*) 'ERROR READING FILE: ',OUTFIL
3115 CONTINUE
WRITE (*,*) 'What action? 1) RETRY, SAME FILE'
WRITE (*,*) ' 2) New file'
WRITE (*,*) ' 3) Abort'
I = MENU(1,0,3)
IF (I.NE.3) CALL REWIND(45)
CLOSE (UNIT=45,STATUS='KEEP',ERR=3104)
3104 CONTINUE
OPEN (UNIT=45,FILE='#CON',ERR=3105)
3105 CONTINUE
CLOSE (UNIT=45,ERR=3106)
3106 CONTINUE
IF (I.EQ.3) GOTO 3999
IF (I.EQ.2) GOTO 3100
IF (I.EQ.1) GOTO 3111
ENTRY ERAWFM(FROM)
IF (FROM.LT.-10.OR.FROM.GT.11) RETURN
CALL ZAPIT(WFMS(0,FROM),4092)
WFMS(0,FROM) = 0.0
WFMS(1,FROM) = 0.0
WFMS(1022,FROM) = 0.0
WFMS(1023,FROM) = 0.0
RETURN
END
*------------------------------------------------------------------------
SUBROUTINE ZAPWFM
* (C) 1987 COPYRIGHT: Kevin G. Rhoads, & High Voltage Research Lab (MIT)
REAL*4 WFMS(0:1023,-10:11)
INTEGER*4 IRPT,TO
COMMON /WFMS/WFMS
EXTERNAL ZAPIT
CALL ZAPIT(WFMS(0,-10),86000)
CALL ZAPIT(WFMS(0,0),49148)
CALL ERAWFM(-10)
CALL ERAWFM(10)
CALL ERAWFM(11)
PRINT *,' '
PRINT *,' WAVEFORM DATA SPACE ERASED'
PRINT *,' '
RETURN
ENTRY SMTWRM(NUMBER,TO,IRPT)
1001 CONTINUE
CALL SMTWFM(NUMBER,TO)
IRPT = IRPT - 1
IF (IRPT.LE.0) RETURN
CALL SMTWFM(TO,NUMBER)
GOTO 1001
END
*------------------------------------------------------------------------
SUBROUTINE WFMRD(TIME,WFM,NUMPNT,IWH)
* (C) 1987 COPYRIGHT: Kevin G. Rhoads, & High Voltage Research Lab (MIT)
CHARACTER*77 TITLE(3),TITLEL
CHARACTER*38 OUTFIL,TMPFIL
REAL*4 TIME(1024),WFM(1024),CRUD,CRUD2
INTEGER*4 NUMPNT,IWH
LOGICAL*2 DORAW,ARETWO
EQUIVALENCE (TITLEL,TITLE(2))
TMPFIL = ' '
GOTO 3100
3102 CONTINUE
WRITE (*,*) 'ERROR OPENING FILE: ',OUTFIL
WRITE (*,*) 'Please specify new filename (or <Return> to skip file output)'
3100 CONTINUE
WRITE (*,*) 'What file for waveform input? [<Return> to skip]'
READ (*,'(A)',ERR=3100) TMPFIL
IF (TMPFIL(1:1).EQ.CHAR(3).OR.TMPFIL.EQ.' ') GOTO 3999
CALL CHCKFN(TMPFIL,OUTFIL,' ',' ','WFM')
3111 OPEN (UNIT=45,FILE=OUTFIL,STATUS='OLD',FORM='FORMATTED',ERR=3101)
GOTO 3113
3101 CONTINUE
CALL CRCLS
WRITE (*,*) 'FILE DOES NOT EXIST: ',OUTFIL
GOTO 3100
3113 CONTINUE
CALL CRCLS
WRITE (*,*) 'File opened successfully: ',OUTFIL
READ (UNIT=45,FMT='(A/A///)',ERR=3103,END=3114) TITLE(1),TITLE(3)
TITLEL = ' '
READ (UNIT=45,FMT='(A)',ERR=3103,END=3114) TITLE(2)
ARETWO = TITLEL(39:45) .NE. ' '
DO 3110 I = 0,1023
IF (IWH.LE.1.OR.IWH.GT.4.OR.((.NOT.ARETWO).AND.IWH.GT.2)) THEN
READ (UNIT=45,FMT=3797,ERR=3103,END=3112) TIME(I),WFM(I)
ELSEIF (IWH.EQ.2.AND.ARETWO) THEN
READ (UNIT=45,FMT=3698,ERR=3103,END=3112) TIME(I),CRUD,
& WFM(I)
ELSEIF (IWH.EQ.2) THEN
READ (UNIT=45,FMT=3697,ERR=3103,END=3112) TIME(I),CRUD,
& WFM(I)
ELSEIF (IWH.EQ.3) THEN
READ (UNIT=45,FMT=3798,ERR=3103,END=3112) TIME(I),CRUD,
& CRUD2,WFM(I)
ELSEIF (IWH.EQ.4) THEN
READ (UNIT=45,FMT=3799,ERR=3103,END=3112) TIME(I),CRUD,
& CRUD2,CRUD3,WFM(I)
ENDIF
NUMPNT = I + 1
3110 CONTINUE
3112 CONTINUE
IF (NUMPNT.NE.128.AND.NUMPNT.NE.256.AND.NUMPNT.NE.512.AND.NUMPNT.NE.820
& .AND.NUMPNT.NE.1024) PRINT *,'?? - Number of points = ',NUMPNT
WRITE (*,*,ERR=3199) 'File reading finished, ',NUMPNT,' points.'
3199 CONTINUE
CLOSE (UNIT=45,STATUS='KEEP',ERR=3999)
GOTO 3999
3797 FORMAT (G10.4,1X,G10.4/)
3697 FORMAT (G10.4,1X,G10.4,1X,G10.4)
3698 FORMAT (G10.4,1X,G10.4,1X,G10.4/)
3798 FORMAT (G10.4,1X,G10.4,1X,G10.4,4X,G10.4/)
3799 FORMAT (G10.4,1X,G10.4,1X,G10.4,4X,G10.4,1X,G10.4)
3114 CONTINUE
CALL CRCLS
WRITE (*,*) 'UNEXPECTED END OF FILE: ',OUTFIL
GOTO 3115
3103 CONTINUE
CALL CRCLS
WRITE (*,*) 'ERROR READING FILE: ',OUTFIL
3115 CONTINUE
WRITE (*,*) 'What action? 1) RETRY, SAME FILE'
WRITE (*,*) ' 2) New file'
WRITE (*,*) ' 3) Abort'
I = MENU(1,0,3)
IF (I.NE.3) CALL REWIND(45)
CLOSE (UNIT=45,STATUS='KEEP',ERR=3104)
3104 CONTINUE
OPEN (UNIT=45,FILE='#CON',ERR=3105)
3105 CONTINUE
CLOSE (UNIT=45,ERR=3106)
3106 CONTINUE
IF (I.EQ.3) GOTO 3999
IF (I.EQ.2) GOTO 3100
IF (I.EQ.1) GOTO 3111
3999 RETURN
END

Das könnte Ihnen auch gefallen