      FTN4,L
      SUBROUTINE RASW(IFUN,IRELY),09580-16368 REV.2001 791023 
C ****************************************************
C 
C       SOURCE          09580-18368 
C       RELOCATABLE     09580-16368 
C 
C       T. KONDO          3/16/79     REV. 1926 
C       BOB RICHARDS      791023
C 
C     TEST SYSTEM SOURCE SOFTWARE IS THE PROPRIETARY
C     MATERIAL OF THE HEWLETT-PACKARD COMPANY.
C 
C     (C) COPYRIGHT  HEWLETT-PACKARD COMPANY 1979 
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 
C     THIS DEVICE SUBROUTINE IS FOR HP59306A RELAY ACTUATOR.
C 
C       SET-UP CALL:
C         RASW(IFUN,IRELY)
C           WHERE:
C                  IFUN =  FUNCTION SELECT
C                            0  = OPEN
C                            1  = CLOSE 
C                            2  = OPEN, SETTLE TIME = 50 MSEC 
C                            3  = CLOSE, SETTLE TIME = 50 MSEC
C                 IRELY =  RELAY ADDRESS (IN ARRAY) 
C                          IRELY(1) = NUMBER OF RELAYS
C                          IRELY(2) - IRELY(N) = RELAY TO 
C                            BE CLOSED OR TO BE OPENED. 
C 
C            NOTE: UNITS NOT RESETTABLE BY PRESSING RESET 
C                         I(1) = 0
C                         CALL RASW(1,I(1)) 
C                            PLACES UNITS IN MANUALLY RESETABLE MODE
C 
C                         CALL RASW(0,I(1)) 
C                            PLACES UNITS BACK IN PROGRAM ONLY MODE 
C 
C = * = * = * = * = * = * = * = * = * = * = 
C 
C     HP59306A CONFIGURATION: 
C 
C        BRANCH & MNEMONIC TABLES:
C          RASW(I,IVA),         OV=XX,   ENT=RASW,   FIL=%RASW
C 
C        CONFIGURATION TABLE: 
C 
C          R 62,1,1 
C          U1 
C               N1   (LU# OF HP59306A UNIT #1)
C          U2 
C               N2   (LU# OF HP59306A UNIT #2)
C          U3 
C               N3   (LU# OF HP59306A UNIT #3)
C 
C 
C = * = * = * = * = * = * = * = * = * = * = 
C 
      DIMENSION IERMS(5)
      DATA IERMS /10,5,2HRA,2HSW,2H   / 
      DATA IDTN /62/
C 
      CALL XASW(IERMS,IFUN,IRELY) 
      IF(IERMS.NE.0)GOTO 800
20    RETURN
C 
C 
800   CALL ERROR(IERMS,IERMS(2))
      RETURN
      END 
C ------------------------------------- 
      SUBROUTINE XASW(IERR,IFUN,IRELY),09580-16368 REV.2001 791023
      DIMENSION IOBUF(6),IRELY(2),IBUF(4) 
      DIMENSION IERR(5),IREG(2) 
C 
      EQUIVALENCE (REG,IREG,IA),(IREG(2),IB)
C 
      DATA IDTN / 62 /
C 
C  CHECK PARAMETER
C 
      IERR = 0
      IF(IFUN.LT.0.OR.IFUN.GT.3)GOTO 9900 
      NUMX = 1
      NOS = IRELY 
      IF(IRELY.EQ.0)GOTO 120
 90   NUMX = 0
      IDX = 2 
C 
C 
 100  NUMX = NUMX + 1 
      NMR = 0 
C 
C  GET RELAY NUMBER 
C 
      DO 110  I=1, NOS
      NRLY = 6 * (NUMX-1) + 1 
      IF(NOS.LT.1)GOTO 110
      IR = IRELY(IDX) 
      IF(IR.LT.1)GOTO 9900
      IF(IR.LT.NRLY.OR.IR.GT.(NRLY+5))GOTO 110
      NMR = NMR + 1 
C 
      IV = IRELY(IDX) - (NRLY-1)
      IF(IFUN.EQ.0.OR.IFUN.EQ.2)IOBUF(NMR) = 41060B + IV
      IF(IFUN.EQ.1.OR.IFUN.EQ.3)IOBUF(NMR) = 40460B + IV
      IDX = IDX + 1 
C 
 110  CONTINUE
C 
C  CHECK UNIT NUMBER
C 
      NOS = NOS - NMR 
      IF(NOS.LT.1)GOTO 115
      IF(NMR.LT.1)GOTO 100
C 
C     CHECK FOR VALID ATS STATION 
C 
115   IERR = 10 
      ISTN = ISN(IDUMY) 
      LUDEV = LUDV(ISTN,IDTN,NUMX)
      IF (LUDEV - 1) 9910,120 
120   IERR = 0
C 
C 
C 
      CALL TIM(IDTN,NUMX,1,LU1,1,IERFG) 
      IF(IERFG.LT.0)GOTO 9900 
C 
      LU0 = IBLU0(LU1)
C 
C  ENABLE REMOTE
C 
 200  CONTINUE
      CALL EXEC(100003B,1600B+LU0)
      GOTO 9000 
7710  CALL ABREG(IA,IB) 
      IF(IB.LT.0)GOTO 9100
C 
C  LOCAL LOCKOUT
C 
      IF(IRELY.NE.0)GOTO 500
      IF(IFUN.EQ.0)CALL LLO(LU0)
      IF(IFUN.EQ.1)CALL LOCL(LU0) 
      RETURN
C 
C  OUTPUT ASCII TO 59306A 
C 
 500  CONTINUE
      CALL REIO(100002B,LU1,IOBUF,NMR,IDUMY,0)
      GOTO 9000 
7730  CALL ABREG(IA,IB) 
      IF(IB.LT.0)GOTO 9100
      IF(NOS.LT.1)GOTO 600
      GOTO 100
C 
C  SETTLING TIME
C 
 600  IF(IFUN.GT.1)CALL EXEC(12,0,1,0,-5) 
      RETURN
C 
C     ERROR ROUTINE 
C 
9000  IERR = 9
      GOTO 9910 
9100  IERR = IAND(IREG,377B) + 11 
      GO TO 9910
9900  IERR = 1
9910  IERR(2) = 5 
      IERR(3) = 2HRA
      IERR(4) = 2HSW
      IERR(5) = 2H
      RETURN
      END 
    