      SUBROUTINE WAIT(X)
C     WAIT PUTS YOU TO SLEEP FOR X SECONDS WHERE X IS ANY FLOATING
C     NUMBER
      IMPLICIT INTEGER*4 (S)
      INTEGER*4 DELAY(2)
      LOGICAL ERROR
      EXTERNAL SS$_ABORT
      ERROR(I) = MOD(I,8).NE.1
C     NOTE THAT THE ALGORITHM IS SUBJECT TO ROUNDING ERRORS
C     BUT THESE SHOULD NOT GIVE ANY SERIOUS PROBLEMS TO ANYONE.
      Y = X * 1.E7
C     Y IS TICS
      DELAY(2) = Y/4.294967296E9
C     COMPUTE REMAINDER
      Y = Y - DELAY(2)*4.294967296E9
      DELAY(2) =.NOT.DELAY(2)
C     SO MUCH FOR THE HIGH ORDER PART
C     NOW FOR THE LOW.
D     TYPE *,Y
C     MAKE SURE IT IS POSITIVE
      Y = AMAX1(Y,0.0)
D     TYPE *,Y
C     THROW AWAY 1 100NSEC RESOLUTION TO SIMPLIFY SIGN OVERFLOW PROBLEM
      DELAY(1) = Y/2.
      DELAY(1) = ISHFT(DELAY(1),1)
      DELAY(1) =  - DELAY(1)
      I = LIB$GET_EF(IFLAG)
      IF(ERROR(I))THEN
         CALL ERRMES(I)
         TYPE *,'ERROR IN OBTAINING EVENT FLAG IN WAIT'
         CALL SYS$EXIT(SS$_ABORT)
      END IF
      I = SYS$SETIMR(%VAL(IFLAG),DELAY,,)
      IF(ERROR(I))THEN
         CALL ERRMES(I)
         TYPE *,'ERROR IN SETTING TIMER IN WAIT'
         CALL SYS$EXIT(SS$_ABORT)
      END IF
      I = SYS$WAITFR(%VAL(IFLAG))
      IF(ERROR(I))THEN
         CALL ERRMES(I)
         TYPE *,'ERROR IN WAITING FOR FLAG IN WAIT'
         CALL SYS$EXIT(SS$_ABORT)
      END IF
      I = LIB$FREE_EF(IFLAG)
      IF(ERROR(I))THEN
         CALL ERRMES(I)
         TYPE *,'ERROR FREEING EVENT FLAG IN WAIT'
         CALL SYS$EXIT(SS$_ABORT)
      END IF
D     TYPE 101,DELAY(2),DELAY(1),DELAY(2),DELAY(1)
101   FORMAT(2Z8,5X,2I15)
      RETURN
      END
