Vous êtes sur la page 1sur 12

$CHAREQU

$SEGMENT %_LBUTIL
LOGICAL*4 FUNCTION FINDS(LNG,STRING,ASCOPN,ASCOPA)
IMPLICIT CHARACTER*123 (A-Z)
*
* (C) COPYRIGHT: Kevin G. Rhoads & High Voltage Research Lab (MIT) - 1983.
*
INTEGER*4 LNG,ASCOPN
CHARACTER*(*) STRING
CHARACTER*1 ASCOPA(8192),FIRST,NEXT
INTEGER*4 SAVEN,I,IJKL
LOGICAL*4 FND,FIND
LOGICAL*2 ISTEST
COMMON /TST/ISTEST
SAVE /TST/
EXTERNAL FIND
SAVE
*
IJKL = 1
FIRST = STRING(1:1)
SAVEN = ASCOPN
2 CONTINUE
FND = FIND(FIRST,ASCOPN,ASCOPA)
IF (.NOT.FND) THEN
FINDS = FND
IF (IJKL.EQ.1) THEN
PRINT *,'FINDS: START OVER FROM ASCOPN = 1, LOOKING FOR ',STRING
IJKL = 2
ASCOPN = 1
GOTO 2
ENDIF
ASCOPN = SAVEN
RETURN
ENDIF
DO 1 I = 2,LNG
NEXT = STRING(I:I)
IF (NEXT.NE.ASCOPA(ASCOPN+I-2)) GOTO 2
1 CONTINUE
ASCOPN = ASCOPN + LNG - 1
FINDS = .TRUE.
RETURN
END
*----------------------------------------------------------------------------
*
* This subroutine looks through ASCOPA, starting at the present value of
* ASCOPN, for the next occurence of a user-specified character (ASCCHR).
* The position of the character is indicated by the value of ASCOPN upon
* the return of FIND.
*
LOGICAL*4 FUNCTION FIND(ASCCHR,ASCOPN,ASCOPA)
IMPLICIT CHARACTER*124 (A-Z)
*
* (C) COPYRIGHT: Kevin G. Rhoads, Jay Tucker & High Voltage Research Lab (MIT) - 1983.
*
CHARACTER*1 ASCCHR,ASCOPA(8192)
INTEGER*4 SAVEN,ASCOPN
LOGICAL*2 FNDERR,ERRORS(3)
COMMON /ERRORS/FNDERR,ERRORS
SAVE /ERRORS/,SAVEN
SAVE
*
SAVEN = ASCOPN
1 IF(ASCOPA(ASCOPN).EQ.ASCCHR)GOTO 2
ASCOPN=ASCOPN+1
IF (ASCOPN.GE.8191) THEN
ASCOPN = SAVEN
IF (FNDERR) ERRORS(1) = .TRUE.
FNDERR = .TRUE.
FIND = .FALSE.
RETURN
ENDIF
GOTO 1
*
2 ASCOPN=ASCOPN+1
ERRORS(1) = .FALSE.
FNDERR =.FALSE.
FIND = .TRUE.
RETURN
END
*----------------------------------------------------------------------------
SUBROUTINE SCGTRL(VAL,ASCOPN,ASCOPA)
IMPLICIT CHARACTER*125 (A-Z)
CHARACTER*1 ASCOPA(8192)
REAL*4 VAL,ASCRL
INTEGER*4 ASCOPN
EXTERNAL ASCRL
SAVE
PRINT *,'SCGTRL: ENTERED'
VAL = ASCRL(ASCOPN,ASCOPA)
PRINT *,'SCGTRL: ASCRL RETURNED'
RETURN
END
*----------------------------------------------------------------------------
* This subroutine decodes the value of an ASCII-encoded number and
* puts it into a real number. It expects ASCOPN to be pointing to the
* first digit of the number in ASCOPA.
*
REAL*4 FUNCTION ASCRL(ASCOPN,ASCOPA)
IMPLICIT CHARACTER*126 (A-Z)
*
* (C) COPYRIGHT: Kevin G. Rhoads, Jay Tucker & High Voltage Research Lab (MIT) - 1983.
*
CHARACTER*1 ASCOPA(8192),THECHR,CR,LF,COMMA,CAPE,SMALLE,POINT,MINUS,PLUS
CHARACTER*18 ANUM
REAL FLOAT,RNUM
INTEGER*4 EXPO,ANUMN,INUM,ASCOPN,DEC,I
C LOGICAL*2 ENDWFM
LOGICAL*2 FNDERR,ERRORS(3),ISTEST,DUMPIT
COMMON /ERRORS/FNDERR,ERRORS
COMMON /TST/ISTEST,/DUMP/DUMPIT
SAVE /TST/,/DUMP/,/ERRORS/
EXTERNAL DMP
SAVE
*
* Initialize two flags, DEC and EXPO, that will keep track of the what
* format the ASCII-encoded number is in.
*
C ENDWFM = .FALSE.
IF (FNDERR.OR.(ASCOPN.GE.8192)) THEN
ASCRL = 0.0
RETURN
ENDIF
DO 9999 I = 1,18
ANUM(I:I) = ' '
9999 CONTINUE
DEC=0
EXPO=0
ANUMN=1
ANUM=' '
CR = CHAR(13)
LF = CHAR(10)
COMMA = ','
CAPE = 'E'
SMALLE = 'e'
POINT = '.'
MINUS = '-'
PLUS = '+'
*
* Put the ASCII-encoded number into the string variable ANUM.
*
IF (DUMPIT) PRINT *,'ASCRL: INITIALIZATION DONE, ASCOPN = ',ASCOPN
THECHR=ASCOPA(ASCOPN-1)
IF ((THECHR.GE.'0').AND.(THECHR.LE.'9')) GOTO 1
IF ((THECHR.EQ.POINT).OR.(THECHR.EQ.SMALLE).OR.(THECHR.EQ.CAPE)) GOTO 1
IF ((THECHR.EQ.'+').OR.(THECHR.EQ.'-')) GOTO 1
THECHR=ASCOPA(ASCOPN)
1 ANUM(ANUMN:ANUMN) = THECHR
9000 FORMAT (' ASCRL: ANUM = ',18A1)
IF(THECHR.EQ.POINT)DEC=1
IF((THECHR.EQ.CAPE).OR.(THECHR.EQ.SMALLE))THEN
EXPO=1
*
* Insert a decimal point into an exponential if one's not already there.
*
IF(DEC.NE.1)THEN
ANUM(ANUMN:ANUMN)=POINT
ANUMN=ANUMN+1
ANUM(ANUMN:ANUMN)=CAPE
ENDIF
*
ENDIF
ANUMN=ANUMN+1
ASCOPN=ASCOPN+1
THECHR = ASCOPA(ASCOPN)
IF (THECHR.EQ.COMMA) GOTO 2
IF ((THECHR.EQ.CR).OR.(THECHR.EQ.LF)) GOTO 2
IF (ASCOPN.GE.8192) GOTO 2
IF ((THECHR.GE.'0').AND.(THECHR.LE.'9')) GOTO 1
IF ((THECHR.EQ.POINT).OR.(THECHR.EQ.CAPE).OR.(THECHR.EQ.SMALLE)) GOTO 1
IF ((THECHR.EQ.'+').OR.(THECHR.EQ.'-')) GOTO 1
*
* Convert the number from ASCII to real using internal reads. Use the
* two flags to select the appropriate format.
*
2 CONTINUE
IF(DEC.EQ.0.AND.EXPO.EQ.0)THEN
IF (DUMPIT) PRINT *,'ASCRL: ANUM = ',ANUM,' -- FORMAT = I5'
READ(ANUM,'(BN,I5)')INUM
ASCRL = FLOAT(INUM)
ELSEIF(DEC.EQ.1.AND.EXPO.EQ.0)THEN
IF (DUMPIT) PRINT *,'ASCRL: ANUM = ',ANUM,' -- FORMAT = F7.4'
READ(ANUM,'(BN,F7.4)')RNUM
ASCRL = RNUM
ELSE
IF (DUMPIT) PRINT *,'ASCRL: ANUM = ',ANUM,' -- FORMAT = E11.3'
READ(ANUM,'(BN,E11.3)')RNUM
ASCRL = RNUM
ENDIF
RETURN
END
*----------------------------------------------------------------------
SUBROUTINE WHICHS
IMPLICIT CHARACTER*127 (A-Z)
*
* (C) COPYRIGHT: Kevin G. Rhoads & High Voltage Research Lab (MIT) - 1983.
*
CHARACTER*20 FOO
CHARACTER*32 BARFU
INTEGER*4 SCRN0,CNSL0,KPD,PR,BUSA,BUSB,BUSC,BUSD,FILE,GR,I
INTEGER*4 ERROR,GETINT,MENU
INTEGER*2 IEK468,IK7854,IK7D20,PKT(-2:15),IASC,ISCAN,IKBF1,IKBF2,IERR
INTEGER*2 ASCI,SCAN,KBF1,KBF2,ERR
LOGICAL*2 TEK468,TK7854,TK7D20,PAUSES,ISTEST,ABORT,ESCAPE,INTRPT
LOGICAL*2 DUMPIT,DOMESS,TASCII,BINARY,NTRPLT
EQUIVALENCE (IEK468,TEK468),(IK7854,TK7854),(IK7D20,TK7D20)
COMMON /UNITS/SCRN0,CNSL0,KPD,PR,BUSA,BUSB,BUSC,BUSD,FILE,GR
COMMON /PAWS/PAUSES,/SCTYPE/TEK468,TK7854,TK7D20,/TST/ISTEST
COMMON /DUMP/DUMPIT,/KEYGET/IASC,ISCAN,IKBF1,IKBF2,IERR
COMMON /NTRVN/ABORT,ESCAPE,INTRPT,/WFMFMT/TASCII,BINARY,NTRPLT
SAVE /TST/,/SCTYPE/,/PAWS/,/UNITS/,/DUMP/,/KEYGET/,/NTRVN/
SAVE /WFMFMT/
EXTERNAL GETKEY,GETINT,MENU,CRCLS
SAVE
*
CALL CRCLS
ABORT = .FALSE.
ESCAPE = .FALSE.
INTRPT = .FALSE.
C IF (ISTEST) THEN
C CALL PAUSE ('TRY AUTO?(^C=NO)')
C IF (INTRPT.OR.ESCAPE.OR.ABORT) GOTO 3
C GOTO 2
C ENDIF
3 CONTINUE
DOMESS = DUMPIT
PRINT *,'SINCE CERTAIN SYSTEM ROUTINES ARE NOT WORKING, IT IS IMPOSSIBLE'
PRINT *,'TO AUTOMATICALLY DETERMINE WHICH SCOPE(S) ARE ACTIVE AND CONNECTED.'
PRINT *,' '
1 PRINT *,'Which SCOPE are you using?'
PRINT *,' 1 = TEKTRONIX 7854 (Large Scope) [DEFAULT]'
PRINT *,' 2 = TEKTRONIX 468 (Small Scope)'
PRINT *,' 3 = TK7D20 '
IF (ISTEST) THEN
PRINT *,' 4 = CONTROLLER'
* I = MENU(1,0,4)
ELSE
PRINT *,' 4 = NONE '
* I = MENU(1,0,3)
ENDIF
I = MENU(1,0,4)
TK7854 = I.EQ.1
TEK468 = I.EQ.2
TK7D20 = I.EQ.3
PAUSES = .FALSE.
4 CONTINUE
IF (TK7D20) THEN
TEK468 = .FALSE.
TK7854 = .FALSE.
TASCII = .TRUE.
NTRPLT = .FALSE.
BINARY = .FALSE.
ELSEIF (TEK468) THEN
TK7854 = .FALSE.
TASCII = .FALSE.
NTRPLT = .FALSE.
BINARY = .TRUE.
ELSE
TASCII = .TRUE.
NTRPLT = .FALSE.
BINARY = .FALSE.
ENDIF
C IF (.NOT.TK7854) THEN
C CLOSE(6)
C ENDIF
C IF (.NOT.TEK468) THEN
C CLOSE(16)
C ENDIF
C IF (.NOT.TK7D20) THEN
C CLOSE(26)
C ENDIF
RETURN
*
* 2 CONTINUE
*C CALL PAUSE('WHICHS: TRY AUTOMATIC CHOICE')
* PRINT *,'WHICHS: ABOUT TO TRY TO DETERMINE WHICH SCOPE AUTOMATICALLY'
* IF (ABORT) GOTO 1
* OPEN (UNIT=BUSB,FILE='#BUSB',ERR=8001)
* 8001 OPEN (UNIT=BUSC,FILE='#BUSC',ERR=8002)
* 8002 OPEN (UNIT=BUSD,FILE='#BUSD',ERR=8003)
* 8003 CONTINUE
* PKT(-2) = 28
* PKT(-1) = 10
* PKT(0) = 21
** PKT(1) = 4123
* PKT(1) = 27
* PKT(2) = $423F
* PKT(3) = 0
* PKT(4) = $433F
* PKT(5) = 0
* PKT(6) = $443F
* PKT(7) = 0
* PKT(8) = $3F3F
* PKT(9) = 20
* PKT(10) = 23
* PKT(11) = 22
* PKT(12) = 2
* PKT(13) = 0
* CALL TMOUT
* WRITE (26,'(A)',ERR=9903) 'INIT GPIB'
* CALL CLRBSD
* CALL TMOUT
* 9903 WRITE (6,'(A/)',ERR=9901) '0 WFM'
* CALL CLRBSB
* CALL TMOUT
* 9901 OPEN (36,FILE='#BUSA?',ERR=9902)
* CALL TMOUT
* 9902 CONTINUE
* CALL CLRBSC
* CALL TIMOUT
* CALL SYSFUN(36,PKT(-2),ERROR)
* PRINT *,'WHICHS: ERROR ',ERROR,' B ',PKT(3),' C ',PKT(5),' D ',PKT(7)
* I = PKT(3)
* TK7854 = I.NE.31
* I = PKT(5)
* TEK468 = I.NE.0
* I = PKT(7)
* TK7D20 = I.NE.0
* PRINT *,'WHICHS: TK7854 = ',TK7854,' TEK468 = ',TEK468,' TK7D20 = ',TK7D20
*C CLOSE (17)
* IF (TK7854) THEN
* CALL TIMOUT
*C CALL CRCLS
* PRINT *,'CLEAR SCOPE WITH 0 WFM COMMAND'
* WRITE (6,'(A/)',ERR=9909) '0 WFM'
* 9909 CALL CLRBSB
* ENDIF
* IF (.NOT.(TK7854.OR.TEK468.OR.TK7D20)) GOTO 3
* PRINT *,'AUTOMATIC SCOPE DETERMINATION SUCESSFUL'
* PRINT *,IK7854,IEK468,IK7D20
* CALL PAUSE('WHICHS')
* IF (INTRPT.OR.ESCAPE) GOTO 3
* RETURN
*C PRINT *,'WHICHS: ERROR ',ERROR,' B ',PKT(3),' C ',PKT(5),' D ',PKT(7)
*C PRINT *,'WHICHS: TK7854 = ',TK7854,' TEK468 = ',TEK468,' TK7D20 = ',TK7D20
*C RETURN
END
*-----------------------------------------------------------------------
* These subroutines control the IEEE-488 bus, on which the scopes are
* TEKTRONIX 7854 = BUS ADDRESS 2 (BUSB? opened as LUN 6)
* TEKTRONIX 468 = BUS ADDRESS 3 (BUSC? opened as LUN 16)
* TEKTRONIX 7D20 = BUS ADDRESS 4 (BUSD? opened as LUN 26)
* The COMPUTER is bus CONTROLLER and occupies BUS ADDRESS 1 (BUSA? opened as LUN 36)
*
SUBROUTINE OPEBUS
IMPLICIT CHARACTER*128 (A-Z)
*
* (C) COPYRIGHT: Kevin G. Rhoads & High Voltage Research Lab (MIT) - 1983.
*
CHARACTER BARFOO*32,CONT*6
INTEGER*4 LENDB,HENDB,DIBOPT,FIXVAR,I,IEE488,IKL,J,JKL,NNMBER,NUMBER
INTEGER*4 ERROR,SCRN0,CNSL0,KPD,PR,BUSA,BUSB,BUSC,BUSD,FILE,GR
INTEGER*4 IXLEN,IYLEN,IIXLEN,IIYLEN,IXNUM,IYNUM,SENBAS,SENDAT,RUNNUM,SHOTNO
INTEGER*4 ZLEN,ZMARK,ZPOINT,ALEN,AMARK,APOINT,IA256,IA512,IAPS(32)
INTEGER*4 APS(0:7),LNMAIN,LN2,LN3,LN4,LN5,LN6,LNZR,LNMX
INTEGER*4 APMAIN,AP2,AP3,AP4,AP5,AP6,APZR,APMX,LENS(32),LNS(0:7)
INTEGER*4 IOS,GETINT,ATTACH,DTCB4
INTEGER*2 IEK468,IK7854,IK7D20,FPCKTA(100),P(100)
INTEGER*2 TYPS(32),LENXS(32),LENYS(32),FNRNSN(32)
INTEGER*1 DTCB,DTCBA(50)
LOGICAL*4 ISOPEN
LOGICAL*2 TEK468,TK7854,TK7D20,ISTEST,PAUSES,DUMPIT,OPETST,BUSDUN
LOGICAL*2 ZVALID,ZZCORR,AVALID,AACORR
EQUIVALENCE (IEK468,TEK468),(IK7854,TK7854),(IK7D20,TK7D20)
EQUIVALENCE (DTCB,DTCBA(1),DTCB4),(FPCKTA(1),P(1))
EQUIVALENCE (APS(0),APMAIN),(APS(1),AP1),(APS(2),AP2),(APS(3),AP3)
EQUIVALENCE (APS(4),AP4),(APS(5),AP5),(APS(6),APZR),(APS(7),APMX)
EQUIVALENCE (LNS(0),LNMAIN),(LNS(1),LN1),(LNS(2),LN2),(LNS(3),LN3)
EQUIVALENCE (LNS(4),LN4),(LNS(5),LN5),(LNS(6),LNZR),(LNS(7),LNMX)
COMMON /UNITS/SCRN0,CNSL0,KPD,PR,BUSA,BUSB,BUSC,BUSD,FILE,GR
COMMON /MESEND/LENDB,HENDB,/FUNPKT/FPCKTA,/INT488/BUSDUN
COMMON /TST/ISTEST,/DTCBS/DTCBA,/PAWS/PAUSES,/DUMP/DUMPIT
COMMON /SCTYPE/TEK468,TK7854,TK7D20,/OMABFR/APS,LNS
COMMON /OMAPR2/IIXLEN,IIYLEN,IXLEN,IYLEN,IA256,IA512
COMMON /ZEROS/ZVALID,ZLEN,ZMARK,ZPOINT,ZZCORR
COMMON /AMPLS/AVALID,ALEN,AMARK,APOINT,AACORR,AFMTYP
COMMON /OMACNT/IAPS,HAPS,LENS/OMATYP/TYPS,LENXS,LENYS,FNRNSN
SAVE /SCTYPE/,/MESEND/,/UNITS/,/FUNPKT/,/TST/,/DTCBS/,/PAWS/,/INT488/
SAVE /OMAPR2/,/OMACNT/,/ZEROS/,/OMATYP/,/AMPLS/,/OMABFR/
EXTERNAL GETINT,CRCLS,PAUSE,SYSOPE,SYSCLO
SAVE
*
OPETST = .FALSE.
9999 CONTINUE
BUSA = 36
BUSB = 6
BUSC = 16
BUSD = 26
CONT = '#BUSA?'
DO 1 I = 1,50
DTCBA(I) = 0
FPCKTA(2*I) = 0
FPCKTA(2*I-1) = 0
1 CONTINUE
JKL = 0
11 CONTINUE
C WRITE (BARFOO,'(I1,1X,I1,1X,I1)') IK7854,IEK468,IK7D20
C IF (ISTEST) PRINT *,BARFOO
DIBOPT = $8010
FIXVAR = 1
OPEN (UNIT=BUSA,FILE=CONT,ERR=9904)
GOTO 9907
9904 CONTINUE
JKL = JKL + 1
INQUIRE (FILE=CONT,EXIST=ISOPEN)
IF (.NOT.ISOPEN) THEN
INQUIRE(FILE='#BUS@?',EXIST=ISOPEN)
IF (.NOT.ISOPEN) THEN
IF (OPETST.OR.JKL.LE.3) THEN
CALL CRCLS
CALL GOTOXY(0,8)
PRINT *,'BUS CONTROLLER NOT ATTACHED! - ATTEMPTING FIX.'
CALL WAIT(0.9)
IKL = IEE488()
IF (IKL.EQ.0) PRINT *,'BUS CONTROLLER SUCCESSFULLY ATTACHED.'
IF (IKL.EQ.0.OR.IKL.EQ.33) GOTO 11
RETURN
ENDIF
STOP 'BUS CONTROLLER NOT ATTACHED! '
ENDIF
ENDIF
9907 CONTINUE
IF (ISTEST) PRINT *,' OPEBUS: bus controller attached.'
CALL SYSCLO(36,ERROR)
ERROR = 0
CALL SYSOPE (36,CONT,2,DIBOPT,FIXVAR,0,ERROR)
IF (ERROR.NE.0) THEN
PRINT *,'OPEBUS: FOR UNIT 36 ERROR = ',ERROR
INQUIRE (UNIT=BUSA,IOSTAT=IOS,OPENED=ISOPEN)
PRINT *,'OPEBUS: FOR UNIT 36, INQUIRE IOS = ',IOS
IF (.NOT.ISOPEN) THEN
BUSA = 36
OPEN (UNIT=36,FILE=CONT,ERR=9801)
ENDIF
9801 CALL SYSCLO(36,ERROR)
ERROR = 0
CALL SYSOPE (36,CONT,2,DIBOPT,FIXVAR,0,ERROR)
ENDIF
IF (ISTEST) PRINT *,' OPEBUS: bus controller opened.'
CALL BUSCLR
DIBOPT = $8010
P(1) = 42
P(2) = DIBOPT
P(3) = 0
CALL TMOUT
CALL SYSFUN(36,P(1),ERROR)
IF (TK7854) THEN
IF (ISTEST) PRINT *,' OPEBUS: Opening #BUSB?.'
OPEN (UNIT=BUSB,FILE='#BUSB?',ERR=9901)
GOTO 9900
9901 CONTINUE
IF (ISTEST) CALL PAUSE ('OPEBUS: ERROR IN FORTRAN OPEN FOR UNIT 6: #BUSB')
9900 CONTINUE
CALL SYSCLO(6,ERROR)
ERROR = 0
CALL SYSOPE(6,'#BUSB?',2,DIBOPT,FIXVAR,0,ERROR)
IF (ERROR.NE.0) THEN
IF (TK7854) PRINT *,'OPEBUS: FOR UNIT 6 ERROR = ',ERROR
INQUIRE (UNIT=BUSB,IOSTAT=IOS,OPENED=ISOPEN)
IF (TK7854) PRINT *,'OPEBUS: FOR UNIT 6, INQUIRE IOS = ',IOS
IF (.NOT.ISOPEN) THEN
I = ATTACH('#BUSB?')
BUSB = 6
OPEN (UNIT=6,FILE='#BUSB?',ERR=9802)
ENDIF
9802 CALL SYSCLO(6,ERROR)
ERROR = 0
CALL SYSOPE(6,'#BUSB?',2,DIBOPT,FIXVAR,0,ERROR)
IF (ERROR.NE.0) THEN
INQUIRE (UNIT=BUSB,IOSTAT=IOS,OPENED=ISOPEN)
IF (ISOPEN) CLOSE (UNIT=BUSB,ERR=9702)
9702 TK7854 = .FALSE.
ENDIF
ENDIF
CALL TMOUT
CALL SYSFUN(6,P(1),ERROR)
CALL TIMOUT
CALL CLRBUS
CALL TIMOUT
IF (ISTEST) WRITE (*,'(A/)') 'RQSOFF OPCOFF IOCOFF REMOFF'
WRITE (6,'(A/)') 'RQSOFF OPCOFF IOCOFF REMOFF'
CALL TIMOUT
IF (ISTEST) WRITE (*,'(A/)') 'OPCOFF IOCOFF REMOFF RQSOFF'
WRITE (6,'(A/)') 'OPCOFF IOCOFF REMOFF RQSOFF'
CALL TIMOUT
IF (ISTEST) WRITE (*,'(A/)') 'IOCOFF REMOFF EXROFF RQSOFF'
WRITE (6,'(A/)') 'IOCOFF REMOFF EXROFF RQSOFF'
CALL TIMOUT
IF (ISTEST) WRITE (*,'(A/)') 'REMOFF CEROFF EXROFF RQSOFF'
WRITE (6,'(A/)') 'REMOFF CEROFF EXROFF RQSOFF'
CALL TIMOUT
IF (ISTEST) WRITE (*,'(A/)') 'CEROFF EXROFF RQSOFF'
WRITE (6,'(A/)') 'CEROFF EXROFF RQSOFF'
CALL TIMOUT
IF (ISTEST) WRITE (*,'(A/)') 'EXROFF RQSOFF'
WRITE (6,'(A/)') 'EXROFF RQSOFF'
CALL CLRBSB
IF (ISTEST) THEN
PRINT *,' OPEBUS: #BUSB? opened.'
CALL WAIT(0.5)
ENDIF
ENDIF
IF (TEK468) THEN
IF (ISTEST) PRINT *,' OPEBUS: Opening #BUSC?.'
OPEN (UNIT=BUSC,FILE='#BUSC?',ERR=9902)
GOTO 9905
9902 CONTINUE
IF (ISTEST) CALL PAUSE ('OPEBUS: ERROR IN FORTRAN OPEN FOR UNIT 16: #BUSC')
9905 CONTINUE
CALL SYSCLO(16,ERROR)
ERROR = 0
CALL SYSOPE (16,'#BUSC?',2,DIBOPT,FIXVAR,0,ERROR)
IF (ERROR.NE.0) THEN
IF (TEK468) PRINT *,'OPEBUS: FOR UNIT 16 ERROR = ',ERROR
INQUIRE (UNIT=BUSC,IOSTAT=IOS,OPENED=ISOPEN)
IF (TEK468) PRINT *,'OPEBUS: FOR UNIT 16, INQUIRE IOS = ',IOS
IF (.NOT.ISOPEN) THEN
I = ATTACH('#BUSC?')
BUSC = 16
OPEN (UNIT=16,FILE='#BUSC',ERR=9803)
ENDIF
9803 CALL SYSCLO(16,ERROR)
ERROR = 0
CALL SYSOPE (16,'#BUSC?',2,DIBOPT,FIXVAR,0,ERROR)
IF (ERROR.NE.0) THEN
INQUIRE (UNIT=BUSC,IOSTAT=IOS,OPENED=ISOPEN)
IF (ISOPEN) CLOSE (UNIT=BUSC,ERR=9703)
9703 TEK468 = .FALSE.
ENDIF
ENDIF
CALL TMOUT
CALL SYSFUN(16,P(1),ERROR)
IF (ISTEST) PRINT *,' OPEBUS: #BUSC? opened.'
ENDIF
IF (TK7D20) THEN
IF (ISTEST) PRINT *,' OPEBUS: Opening #BUSD?.'
OPEN (UNIT=BUSD,FILE='#BUSD?',ERR=9903)
GOTO 9906
9903 CONTINUE
IF (ISTEST) CALL PAUSE ('OPEBUS: ERROR IN FORTRAN OPEN FOR UNIT 26: #BUSD')
9906 CONTINUE
CALL SYSCLO(26,ERROR)
ERROR = 0
CALL SYSOPE (26,'#BUSD?',2,DIBOPT,FIXVAR,0,ERROR)
IF (ERROR.NE.0) THEN
IF (TK7D20) PRINT *,'OPEBUS: FOR UNIT 26 ERROR = ',ERROR
INQUIRE(UNIT=BUSD,IOSTAT=IOS,OPENED=ISOPEN)
IF (TK7D20) PRINT *,'OPEBUS: FOR UNIT 26, INQUIRE IOS = ',IOS
IF (.NOT.ISOPEN) THEN
I = ATTACH('#BUSD?')
BUSD = 26
OPEN (UNIT=26,FILE='#BUSD?',ERR=9804)
ENDIF
9804 CALL SYSCLO(26,ERROR)
ERROR = 0
CALL SYSOPE (26,'#BUSD?',2,DIBOPT,FIXVAR,0,ERROR)
IF (ERROR.NE.0) THEN
INQUIRE (UNIT=BUSD,IOSTAT=IOS,OPENED=ISOPEN)
IF (ISOPEN) CLOSE (UNIT=BUSD,ERR=9704)
9704 TK7D20 = .FALSE.
ENDIF
ENDIF
CALL TMOUT
CALL SYSFUN(26,P(1),ERROR)
IF (ISTEST) PRINT *,' OPEBUS: #BUSD? opened.'
ENDIF
J = 0
OPEN (46,FILE='#BUS@?',FORM='BINARY',ERR=8800)
8800 CALL SYSCLO(46,ERROR)
CALL SYSOPE(46,'#BUS@?',2,$8000,FIXVAR,0,ERROR)
J = J + 1
IF (ERROR.NE.0.AND.J.LT.4) GOTO 8800
* ERROR = 0
* CALL CANCEL(6,ERROR)
* ERROR = 0
* CALL CANCEL(16,ERROR)
* ERROR = 0
* CALL CANCEL(26,ERROR)
* ERROR = 0
* CALL CANCEL(36,ERROR)
RETURN
ENTRY CLOBUS
P(1) = 28
P(2) = 40
P(3) = 42
P(4) = $8000
P(5) = 2
P(6) = 7
P(7) = 29
P(8) = 0
CALL SYSFUN(6,P(1),ERROR)
CALL SYSFUN(16,P(1),ERROR)
CALL SYSFUN(26,P(1),ERROR)
CALL SYSFUN(36,P(1),ERROR)
J = 0
9100 CONTINUE
CALL SUSPSY(NUMBER)
ERROR = 0
CALL CANCEL(BUSB,ERROR)
ERROR = 0
CALL CANCEL(BUSC,ERROR)
ERROR = 0
CALL CANCEL(BUSD,ERROR)
ERROR = 0
CALL CANCEL(BUSA,ERROR)
CALL SUSPSY(NNMBER)
IF (NUMBER.EQ.NNMBER) J = J + 1
IF (NNMBER.GT.0.AND.J.LT.5) GOTO 9100
CLOSE (6,ERR=9101)
9101 CLOSE (16,ERR=9102)
9102 CLOSE (26,ERR=9103)
9103 CLOSE (36,ERR=9104)
9104 CLOSE (46,ERR=9105)
9105 CONTINUE
RETURN
ENTRY OPE488
OPETST = .TRUE.
GOTO 9999
END
*----------------------------------------------------------------------------
SUBROUTINE BUSTST
IMPLICIT CHARACTER*129 (A-Z)
ENTRY TSTBUS
*
* (C) COPYRIGHT: Kevin G. Rhoads & High Voltage Research Lab (MIT) - 1983.
*
CHARACTER*8 HEXOF,THEHEX
INTEGER*4 I,ERROR,DTCB4,DEVSTA,J,OTHERW,SCRCHW
INTEGER*1 DTCB,DTCBA(50),SCOPE0(8192)
LOGICAL*2 TEK468,TK7854,TK7D20,RDNG1,WRTNG0,ISTEST
EQUIVALENCE (DTCB,DTCBA(1),DTCB4)
COMMON /WFM0SV/SCOPE0,/SCTYPE/TEK468,TK7854,TK7D20,/WFMFOO/OTHERW,SCRCHW
COMMON /DTCBS/DTCBA,/ASYNCH/RDNG1,WRTNG0,/TST/ISTEST
SAVE /TST/,/ASYNCH/,/SCTYPE/,/WFM0SV/,/DTCBS/,/WFMFOO/
EXTERNAL AWRITE,TIMOUT,CLRBUS,CANCEL
*
IF (DTCB.LT.0) RETURN
IF (.NOT.(RDNG1.OR.WRTNG0)) RETURN
IF (RDNG1) THEN
RDNG1 = .FALSE.
WRTNG0 = TK7854 .AND. OTHERW.NE.0 .AND. SCRCHW.EQ.0
ERROR = 0
IF ((DTCB.NE.0).AND.ISTEST) CALL CANCEL(6,ERROR)
IF (ERROR.EQ.0) ERROR = DTCB
PRINT *,'BUSTST: DTCB = ',DTCB,' WFM 1 READ COMPLETE ',ERROR
IF (DTCB.NE.0) CALL CLRBUS
ERROR = 0
DO 1 I = 1,50
DTCBA(I) = 0
1 CONTINUE
IF (WRTNG0) THEN
PRINT *,'Second waveform has been read into computer, wiping out'
PRINT *,'waveform 0 in the scope. So now waveform 0 will be restored'
CALL TIMOUT
PRINT *,'to the scope.'
IF (ISTEST) PRINT *,'REPEAT WFM 0 RESTORE VALUES ...(1000 BYTES)'
IF (ISTEST) CALL HEX2(1,1000,SCOPE0(1))
SCOPE0(8192) = 10
ERROR = 0
J = 0
DO 8900 I = 1,4000
J = I
IF (SCOPE0(I).EQ.87) GOTO 8901
8900 CONTINUE
8901 CONTINUE
WRITE (*,'(A/)') '0 WFM READX'
WRITE (6,'(A/)') '0 WFM READX'
IF (ISTEST) CALL WAIT(0.001)
8989 CALL AWRITE(DTCBA,6,SCOPE0(J),8192,0,0,0,ERROR)
ELSEIF (TK7854.AND.SCRCHW.NE.0.AND.OTHERW.NE.0) THEN
CALL TIMOUT
WRITE (*,'(I1,A/)') SCRCHW,' WFM 0 >WFM 0 WFM'
WRITE (6,'(I1,A/)') SCRCHW,' WFM 0 >WFM 0 WFM'
ENDIF
ELSEIF (WRTNG0) THEN
IF (DTCB.NE.0) THEN
CALL CLRBUS
PRINT *,'WFM0 restore error ',DTCB
ERROR = DTCB
ELSE
PRINT *,'Waveform 0 has been restored to the scope.'
ERROR = 0
ENDIF
WRTNG0 = .FALSE.
WRITE (6,'(A/)') '0 WFM'
DO 2 I = 1,50
DTCBA(I) = 0
2 CONTINUE
ENDIF
RETURN
END
*----------------------------------------------------------------------------
* This routine enables timeouts on the bus.
*
SUBROUTINE TIMOUT
IMPLICIT CHARACTER*130 (A-Z)
*
* (C) COPYRIGHT: Kevin G. Rhoads, Jay Tucker & High Voltage Research Lab (MIT) - 1983.
*
INTEGER*4 SCRN0,CNSL0,KPD,PR,BUSA,BUSB,BUSC,BUSD,FILE,GR
INTEGER*4 IT,ERROR
INTEGER*2 PCKTA(100),TIMEOU
LOGICAL*2 TEK468,TK7854,TK7D20
COMMON /UNITS/SCRN0,CNSL0,KPD,PR,BUSA,BUSB,BUSC,BUSD,FILE,GR
COMMON /SCTYPE/TEK468,TK7854,TK7D20,/FPKT/PCKTA,/TIMING/TIMEOU
SAVE /SCTYPE/,/FPKT/,/TIMING/,/UNITS/
EXTERNAL SYSFUN
SAVE
*
PCKTA(3) = 50
1 ERROR = 0
PCKTA(1) = 17
PCKTA(2) = 286
PCKTA(4) = 30
PCKTA(5) = PCKTA(3)
PCKTA(6) = 0
ERROR = 0
CALL SYSFUN(36,PCKTA(1),ERROR)
IF (TK7854) CALL SYSFUN(6,PCKTA(1),ERROR)
IF (TEK468) CALL SYSFUN(16,PCKTA(1),ERROR)
IF (TK7D20) CALL SYSFUN(26,PCKTA(1),ERROR)
CALL SYSFUN(6,PCKTA(4),ERROR)
CALL SYSFUN(16,PCKTA(4),ERROR)
CALL SYSFUN(26,PCKTA(4),ERROR)
ERROR = 0
CALL SYSFUN(46,PCKTA(4),ERROR)
ERROR = 0
CALL SYSFUN(36,PCKTA(4),ERROR)
RETURN
*
ENTRY TMOUT
PCKTA(3) = 1
GOTO 1
ENTRY TMSOUT
PCKTA(3) = TIMEOU
GOTO 1
ENTRY TMVOUT(IT)
PCKTA(3) = IT
GOTO 1
END
*----------------------------------------------------------------------------
*
SUBROUTINE CLRBUS
IMPLICIT CHARACTER*131 (A-Z)
*
* (C) COPYRIGHT: Kevin G. Rhoads, Jay Tucker & High Voltage Research Lab (MIT) - 1983.
*
INTEGER*4 SCRN0,CNSL0,KPD,PR,BUSA,BUSB,BUSC,BUSD,FILE,GR,ERROR
INTEGER*2 PKT(-3:6),P(100)
LOGICAL*2 TEK468,TK7854,TK7D20,ISTEST
EQUIVALENCE (P(1),PKT(-3))
COMMON /UNITS/SCRN0,CNSL0,KPD,PR,BUSA,BUSB,BUSC,BUSD,FILE,GR
COMMON /SCTYPE/TEK468,TK7854,TK7D20,/TST/ISTEST,/FUNPKT/P
SAVE /TST/,/SCTYPE/,/UNITS/,/FUNPKT/
SAVE
IF (TK7854) CALL CLRBSB
IF (TEK468) CALL CLRBSC
IF (TK7D20) CALL CLRBSD
IF (ISTEST) PRINT *,'CLRBUS: HAVE DONE SCOPE DRIVER PART, DOING CONTROLLER'
* take control, selected device clear, reset REN line, unlisten, untalk
* unlisten & universal device clear, interface clear, no timeouts, goto local
PKT(-3) = 28
PKT(-2) = 19
PKT(-1) = 12
PKT(0) = 22
PKT(1) = 23
PKT(2) = 2
PKT(3) = 10
PKT(4) = 29
PKT(5) = 7
PKT(6) = 0
CALL SYSFUN(36,PKT(0),ERROR)
IF (ISTEST.AND.(ERROR.NE.0)) PRINT *,'CLRBUS: ERROR IN CONTROLLER CLEAR: ',ERROR
RETURN
END
*----------------------------------------------------------------------------
*
SUBROUTINE CLRBSB
IMPLICIT CHARACTER*132 (A-Z)
*
* (C) COPYRIGHT: Kevin G. Rhoads, Jay Tucker & High Voltage Research Lab (MIT) - 1983.
*
INTEGER*4 SCRN0,CNSL0,KPD,PR,BUSA,BUSB,BUSC,BUSD,FILE,GR,ERROR
INTEGER*2 PKT(0:6)
COMMON /UNITS/SCRN0,CNSL0,KPD,PR,BUSA,BUSB,BUSC,BUSD,FILE,GR
SAVE /UNITS/
EXTERNAL SYSFUN
SAVE
PKT(0) = 28
PKT(1) = 19
PKT(2) = 23
PKT(3) = 22
PKT(4) = 12
PKT(5) = 7
PKT(6) = 0
CALL SYSFUN(6,PKT(0),ERROR)
RETURN
END
*----------------------------------------------------------------------------
*
SUBROUTINE CLRBSC
IMPLICIT CHARACTER*133 (A-Z)
*
* (C) COPYRIGHT: Kevin G. Rhoads, Jay Tucker & High Voltage Research Lab (MIT) - 1983.
*
INTEGER*4 SCRN0,CNSL0,KPD,PR,BUSA,BUSB,BUSC,BUSD,FILE,GR,ERROR
INTEGER*2 PKT(0:6),P(100)
EQUIVALENCE (P(1),PKT(0))
COMMON /UNITS/SCRN0,CNSL0,KPD,PR,BUSA,BUSB,BUSC,BUSD,FILE,GR
COMMON /FUNPKT/P
SAVE /UNITS/
EXTERNAL SYSFUN
SAVE
PKT(0) = 28
PKT(1) = 23
PKT(2) = 2
PKT(3) = 12
PKT(4) = 7
PKT(5) = 0
PKT(6) = 0
CALL SYSFUN(16,PKT(0),ERROR)
RETURN
END
*----------------------------------------------------------------------------
*
SUBROUTINE CLRBSD
IMPLICIT CHARACTER*134 (A-Z)
*
* (C) COPYRIGHT: Kevin G. Rhoads, Jay Tucker & High Voltage Research Lab (MIT) - 1983.
*
INTEGER*4 SCRN0,CNSL0,KPD,PR,BUSA,BUSB,BUSC,BUSD,FILE,GR,ERROR
INTEGER*2 PKT(0:6),P(100)
EQUIVALENCE (P(1),PKT(0))
COMMON /UNITS/SCRN0,CNSL0,KPD,PR,BUSA,BUSB,BUSC,BUSD,FILE,GR
COMMON /FUNPKT/P
SAVE /UNITS/,/FUNPKT/
EXTERNAL SYSFUN
SAVE
PKT(0) = 28
PKT(1) = 19
PKT(2) = 23
PKT(3) = 22
PKT(4) = 12
PKT(5) = 7
PKT(6) = 0
CALL SYSFUN(26,PKT(0),ERROR)
RETURN
END
*----------------------------------------------------------------------------
*
SUBROUTINE BUSCLR
IMPLICIT CHARACTER*135 (A-Z)
*
* (C) COPYRIGHT: Kevin G. Rhoads, Jay Tucker & High Voltage Research Lab (MIT) - 1983.
*
INTEGER*4 SCRN0,CNSL0,KPD,PR,BUSA,BUSB,BUSC,BUSD,FILE,GR,ERROR
INTEGER*2 PKT(-2:6),P(100)
EQUIVALENCE (P(1),PKT(-2))
COMMON /UNITS/SCRN0,CNSL0,KPD,PR,BUSA,BUSB,BUSC,BUSD,FILE,GR
COMMON /FUNPKT/P
SAVE /UNITS/,/FUNPKT/
EXTERNAL SYSFUN
SAVE
* take control, goto local, untalk, unlisten, reset REN line,
* unlisten & universal device clear, no timeouts, interface clear
PKT(-2) = 28
PKT(-1) = 7
PKT(0) = 23
PKT(1) = 22
PKT(2) = 12
PKT(3) = 2
PKT(4) = 29
PKT(5) = 10
PKT(6) = 0
CALL SYSFUN(36,PKT(1),ERROR)
RETURN
END
*----------------------------------------------------------------------------
INTEGER*4 FUNCTION DEVSTA(ADDR)
INTEGER*4 ADDR,ERROR,I
INTEGER*2 FPCKTA(100),P(100),I2AND2
EQUIVALENCE (FPCKTA(1),P(1))
COMMON /FUNPKT/FPCKTA
SAVE /FUNPKT/
P(1) = 23
P(2) = 22
P(3) = 30
P(4) = 50
P(5) = 13
P(6) = 21
P(7) = 16
P(8) = ADDR
P(9) = 24
P(10) = 0
P(11) = 23
P(12) = 20
P(13) = 0
P(14) = 0
P(15) = 0
ERROR = 0
CALL SYSFUN(36,P(1),ERROR)
IF (ERROR.NE.0) THEN
I = ERROR*65536 + P(10)
ELSEIF (P(10).EQ.-1) THEN
I = -1
ELSE
I = I2AND2(P(10),$00FF)
ENDIF
DEVSTA = I
RETURN
END

Vous aimerez peut-être aussi