      SUBROUTINE OPEN_FILE(LUN,FILE_NAME,OK)

      IMPLICIT NONE
      CHARACTER*(*) FILE_NAME
      LOGICAL OK
      INTEGER LUN,RID

      INTEGER NREC
      COMMON  /NREC/ NREC

      NREC=1
      CLOSE(LUN)
      
      OPEN(UNIT=LUN, FILE=FILE_NAME, STATUS='OLD',
     +     ACCESS='DIRECT', ERR=99,RECL=4,FORM='UNFORMATTED')
      
      PRINT*,'FILE OPENED'
      CALL DECODE(LUN,OK,RID)
      IF (OK.AND.(RID.EQ.1)) THEN
        OK=.TRUE.
        RETURN
      ENDIF

 99   CONTINUE
      OK=.FALSE.
      RETURN
      END

      SUBROUTINE DECODE(LUN,OK,RID)

      IMPLICIT NONE

C      INTEGER IFFFF
C      PARAMETER (IFFFF=256*256-1)

      INTEGER LUN,RID
      LOGICAL OK

      INCLUDE 'DAQ_BUFFER.fi'

      INTEGER LEN
      INTEGER I,X 

      INTEGER NREC
      COMMON  /NREC/ NREC

C      PRINT *,NREC
      READ(LUN,REC=NREC,ERR=1) RID
      NREC=NREC+1
      READ(LUN,REC=NREC,ERR=1) LEN
      NREC=NREC+1
      X=NREC+LEN/4-2

      SELECT CASE(RID)
        CASE(1)
          READ(LUN,REC=NREC,ERR=1) RUNR_FVER
          NREC=NREC+1
          READ(LUN,REC=NREC,ERR=1) RUNR_TIME
          NREC=NREC+1
          READ(LUN,REC=NREC,ERR=1) RUNR_NEV
          NREC=NREC+1
          READ(LUN,REC=NREC,ERR=1) RUNR_NCH
          NREC=NREC+1
          READ(LUN,REC=NREC,ERR=1) RUNR_PED
          NREC=NREC+1
          READ(LUN,REC=NREC,ERR=1) RUNR_XY
          NREC=NREC+1
          READ(LUN,REC=NREC,ERR=1) RUNR_NX
          NREC=NREC+1
          READ(LUN,REC=NREC,ERR=1) RUNR_X0
          NREC=NREC+1
          READ(LUN,REC=NREC,ERR=1) RUNR_DX
          NREC=NREC+1
          READ(LUN,REC=NREC,ERR=1) RUNR_NY
          NREC=NREC+1
          READ(LUN,REC=NREC,ERR=1) RUNR_Y0
          NREC=NREC+1
          READ(LUN,REC=NREC,ERR=1) RUNR_DY
          NREC=NREC+1
          IF (NREC.LT.X) THEN
             READ(LUN,REC=NREC,ERR=1) RUNR_NTH
             NREC=NREC+1
             READ(LUN,REC=NREC,ERR=1) RUNR_TH0
             NREC=NREC+1
             READ(LUN,REC=NREC,ERR=1) RUNR_DTH
             NREC=NREC+1
          ENDIF
          OK=.TRUE.
        CASE(2)
          READ(LUN,REC=NREC,ERR=1) ENDR_TIME
          NREC=NREC+1
          OK=.TRUE.
        CASE(3)
          READ(LUN,REC=NREC,ERR=1) POSR_TIME
          NREC=NREC+1
          READ(LUN,REC=NREC,ERR=1) POSR_IX
          NREC=NREC+1
          READ(LUN,REC=NREC,ERR=1) POSR_X
          NREC=NREC+1
          READ(LUN,REC=NREC,ERR=1) POSR_XSET
          NREC=NREC+1
          READ(LUN,REC=NREC,ERR=1) POSR_IY
          NREC=NREC+1
          READ(LUN,REC=NREC,ERR=1) POSR_Y
          NREC=NREC+1
          READ(LUN,REC=NREC,ERR=1) POSR_YSET
          NREC=NREC+1
          OK=.TRUE.
        CASE(4)
          READ(LUN,REC=NREC,ERR=1) EVTR_TIME
          NREC=NREC+1
          READ(LUN,REC=NREC,ERR=1) EVTR_NEV
          NREC=NREC+1
          LEN=LEN/4-4
          DO I=1,LEN
            READ(LUN,REC=NREC,ERR=1) EVTR_DATA(I)
            NREC=NREC+1
          ENDDO
          OK=.TRUE.
        CASE(5)
          READ(LUN,REC=NREC,ERR=1) THRR_TIME
          NREC=NREC+1
          READ(LUN,REC=NREC,ERR=1) THRR_ITH
          NREC=NREC+1
          READ(LUN,REC=NREC,ERR=1) THRR_TH
          NREC=NREC+1
          OK=.TRUE.
        CASE DEFAULT
          OK=.FALSE.
      END SELECT
      NREC=X
      RETURN

 1    CONTINUE
        PRINT*,'EOF'
      OK=.FALSE.

      RETURN
      END
