FTN4,L
      SUBROUTINE CTRST(IUNIT,IFUNC,IRGE,IARM),09580-16131 REV.2013 80013
     +1 
C-------------------------------------------------------------------
C 
C      RELOC.       09580-16131 
C      SOURCE       09580-18131 
C      REV. B        770315 
C      REV. C        770901 
C      REV. D        790111 
C      REV. E        791126 
C      BOB RICHARDS  800131 
C 
C 
C      HP 92425B TEST SYSTEM SOFTWARE IS THE PROPRIETARY
C      MATERIAL OF THE HEWLETT-PACKARD COMPANY.  USE AND
C      DISCLOSURE THEREOF ARE RESTRICTED BY WRITTEN AGREEMENT.
C 
C      (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980.
C      ALL RIGHTS RESERVED.  NO PART OF THIS PROGRAM
C      MAY BE PHOTOCOPIED, REPRODUCED OR TRANSLATED 
C      TO ANOTHER PROGRAM LANGUAGE WITHOUT THE PRIOR
C      WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY.
C 
C-------------------------------------------------------------------
      DIMENSION IERMS(5)
      DATA IERMS/10,5,2HCT,2HRS,2HT / 
      IERMS = 10
      ISTN = ISN(DUM) 
      LU1= LUDV(ISTN,5,IUNIT) 
      LU0 = IBLU0(LU1)
      IF(LU1.LE.0.OR.LU0.LE.0)GO TO 800 
10    CALL XTRST(LU0,LU1,IUNIT,IERMS,IFUNC,IRGE,IARM) 
      IF(IERMS)800,20,800 
20    RETURN
C 
C 
800   CALL ERROR(IERMS,IERMS(2))
      RETURN
      END 
      SUBROUTINE XTRST(LUIB, LCTR,IU,IERR,IFUNC,IRGE,IARM),09580-16131 R
     +EV.2013 800131  
C 
C 
C 
C 
C 
C       THIS DEVICE SUBROUTINE SETS UP THE 5328A
C     UNIVERSAL COUNTER COUNTER FUNCTIONS.
C 
C     CALL XTRST(LCTR,IERR,IFUNC,IRGE,IARM) 
C        WHERE: 
C              LCTR  = LU OF HP 5328A UNIVERSAL COUNTER 
C              LUIB  = LU NUMBER FOR HPIB I/O CARD
C 
C              IERR  = 5 ELEMENT ERROR ARRAY
C                      IERR(1) = ERROR CODE 
C 
C                        0= NO ERROR
C                        1= PARAMETER ERROR 
C                        3= OVERRANGE ERROR 
C                        4= BAD DATA FROM 5328A 
C     ERROR MESSAGES WHICH PERTAIN TO THE HPIB
C 
C     9 = I/O CALL REJECTED 
C     10 = LU # NOT ASSIGNED TO HPIB DEVICE OR TO STATION 
C     11 - DMA INPUT REQUEST PREMATURELY TERMINATED 
C     12 - I/O DEVICE TIME OUT
C     13 - IFC (INTERFACE CLEAR) DETECTED DURING I/O REQUEST
C     14 - SRQ SERVICE ABORTED
C     15 - NON-EXISTENT ALARM PROGRAM 
C     16 - ILLEGAL CONTROL REQUEST
C     17 - EQT EXTENSION AREA FULL, NO NEW DEVICE MAY BE ADDED ON LINE
C 
C                      IERR(2) - IERR(5) = DEVICE SUBROUTINE NAME 
C 
C              IFUNC=COUNTER FUNCTION (0-14)
C                    0=FREQ A 
C                    1=PERIOD A 
C                    2=PERIOD AVG A 
C                    3=FREQ C 
C                    4=T.I. A>B 
C                    5=T.I.AVG A>B
C                    6=START A
C                    7=STOP 
C                    8=EVENTS C,T.I. A>B
C                    9=CHECK
C                   10=N*B/A
C                   11=N*C/A
C                   12=START CLOCK
C                   13=RESTART A
C                   14=RESTART CLOCK
C                   15=INITIALIZE OR PRESET COUNTER ONLY
C                      (ALL OTHER PARAMETERS ARE IGNORED) 
C 
C              IRGE=COUNTER RANGE (0-7) 
C 
C              IARM=ARMING MODE 
C                   0=ARMING OFF
C                   1=ARMING ON 
C 
C 
C  NOTE:  WHEN CALLING THE 5328 COUNTER FOR THE "FIRST TIME"
C         MAKE THE CTRST (SET UP CALL) "FIRST" BEFORE ANY OTHER 
C         COUNTER CALL. THIS WILL ENSURE THAT THE COUNTER IS
C         INITIALIZE FIRST. THE FUNCTION CAN BE SET TO ANY OF THE ABOVE.
C         INIALIZATION WILL AUTOMATICALLY TAKE PLACE WHEN CALLING THE 
C         COUNTER FOR THE "FIRST" TIME ONLY.
C 
C 
C         IF IT BECOMES NECESSARY TO REINITIALIZE THE COUNTER,
C         THE COUNTER CAN ALWAYS BE INITIALIZE DURING THE COURSE
C         OF THE PROGRAM BY CALLING CTRST AND SETTING THE FUNCTION
C         TO 15 (INITIALIZE ONLY).  ALL OTHER PARAMETERS MUST BE
C         PROGRAMED AFTER MAKING INITIALIZATION.
C 
C 
C 
C  ALLFL  ENTRY  FOR 5328 IS AS FOLLOWS:
C-----------------------------------------------------------
C  NOTE: N= NUMBER OF 5328'S IN THE SYSTEM
C 
C 
C 
C R 5,N,1 
C   U1
C      0    TEMP STORAGE FOR INITIALIZATION FLAG
C 
C   . 
C   . 
C   . 
C   . 
C-----------------------------------------------------------
C 
      DIMENSION IDATA(5),IFNC(15),IERR(5),IARM1(2),IREG(2)
      EQUIVALENCE(REG,IREG,IA),(IREG(2),IB) 
C 
C 
C 
C  SET PROGRAM DATA 
C 
      DATA IFNC/2HF4,2HF6,2HF7,2HF>,2HF8,2HF:,2HF1,2HF0,
     12HF;,2HF<,2HF9,2HF=,2HF2,2HF1,2HF2/,
     2IARM1/2HS:,2HS;/
      DATA IDTN/5 / 
C 
C  INITIALIZE ERROR CODE
C 
      IERR = 0
C 
C   TEST PARAMETERS 
C 
      IF((IRGE.LT.0).OR.(IRGE.GT.7))GOTO 9100 
      IF((IFUNC.LT.0).OR.(IFUNC.GT.15))GOTO 9100
      IF((IARM.LT.0).OR.(IARM.GT.1))GOTO 9100 
C 
C 
C 
C  CLEAR DATA BUFFER
C 
      DO 44 I=1,5 
      IDATA(I)=2H 
44    CONTINUE
C 
C 
C 
C   CHECK IF COUNTER HAS BEEN PREVIOUSLY CALLED.
C 
C 
C 
      CALL TIM(IDTN,IU,1,IN,1,IERFG)
      IF(IERFG .NE. 0) RETURN 
C 
C 
C 
      IDATA(1)=2HP
C 
C   SET TO RANGE IRGE 
C 
      IDATA(2)=2HG0+IRGE
C 
C   SET TO PROPER COUNTER FUNCTION
C 
      INDEX=IFUNC+1 
      IDATA(3)=IFNC(INDEX)
C 
C   SET ARMING MODE 
C 
      IDATA(4)=IARM1(IARM+1)
      IF((IFUNC.EQ.6).OR.(IFUNC.EQ.12))IDATA(4)=2HS5
C 
C   SET INDEX AND NDATA DEPENDING ON IFUNC
C 
      INDEX=1 
C 
C 
C    IF  COUNTER HAS ALREADY BEEN INITIALIZE  DO NOT OUTPUT 'P' 
C 
      IF(IN .EQ. 1) INDEX=2 
C 
C 
C   IF COUNTER IS TO BE INITIALIZE ONLY  THEN OUTPUT 'P' ONLY.
C 
      IF(IFUNC .NE. 15) GOTO 50 
      INDEX=1 
      NDATA=1 
      GOTO 99 
C 
C 
50    NDATA=5-IN
      IF (IFUNC .EQ. 6)IDATA(5)=2HT 
C 
C  SET INPUT MODULE TO CHECK
C 
      IF((IFUNC.NE.9).AND.(IFUNC.NE.12))GOTO 66 
      IDATA(5) = 2HA? 
C 
C  SET REMOTE ENABLE ON BUS 
C 
66    CALL EXEC(100003B,1600B+LUIB) 
      GO TO 8000
660   CALL ABREG(IA,IB) 
      IF(IB.LT.0)GO TO 990
C 
C   PROGRAM UNIVERSAL COUNTER 
C 
99    CALL REIO(100002B,2000B+LCTR,IDATA(INDEX),NDATA,IDU,0)
      GO TO 8000
999   CALL ABREG(IA,IB) 
      IF(IB.LT.0)GO TO 990
C 
C 
C  SET FLAG FOR INITIALIZE IN ALLFL 
C  IF NOT ALREADY DONE. 
C 
      IF(IN .EQ. 1) RETURN
      IN=1
      CALL TIM(IDTN,IU,2,IN,1,IERFG)
C 
C   RETURN
C 
      RETURN
C 
C   ERROR RETURN
C 
8000  IERR = 9
      GO TO 9900
9100  IERR = 1
      GO TO 9900
990   IERR = IAND(IREG,377B) + 11 
9900  IERR(2) = 5 
      IERR(3) = 2HCT
      IERR(4) = 2HRS
      IERR(5) = 2HT 
      RETURN
      END 
      END$
                                                                                                                                                                                                    