      INTEGER FUNCTION RFILE (X)
C
C     ****************************************************************
C
C              KERMIT for the MODCOMP MAXIV operating system
C
C        Compliments of:
C
C                         SETPOINT, Inc.
C                      10245 Brecksville Rd.
C                      Brecksville, Ohio 44141
C
C
C      KERMIT is a copyrighted protocol of Columbia Univ. The authors
C      of this version hereby grant permission to copy this software
C      provided that it is not used for an explicitly commercial
C      purpose and that proper credit be given. SETPOINT, Inc. makes
C      no warranty whatsoever regarding the accuracy of this package
C      and will assume no liability resulting from it's use.
C
C     ****************************************************************
C
C     Abstract:  Read a file header packer from the other Kermit.
C
C     MODIFICATION HISTORY
C
C     BY            DATE     REASON            PROGRAMS AFFECTED
C
C
C     ****************************************************************
C
C     Author: BOB BORGESON          Version: A.0    Date: Oct-86
C
C     Calling Parameters:
C
C       X   - REQUIRED BY FORTRAN
C
C     ****************************************************************
C
C     Messages generated by this module :  None
C
C     ****************************************************************
C
C     Subroutines called directly :  PUTLIN, RPACK, SPACK
C
C     ****************************************************************
C
C     Files referenced :  None
C
C     ****************************************************************
C
C     Local variable definitions :
C
C     N      - CURRENT PACKET SEQUENCE #
C     NUM    - LAST PACKET SEQUENCE #
C     FILNM  - UNPACKED ASCII FILE NAME TO BE RECEIVED
C
C     ****************************************************************
C
C     Commons referenced :  KER, KERPAR local commons
C
C     ****************************************************************
C
C     (*$END.DOCUMENT*)
C
C     ****************************************************************
C     *                                                              *
C     *         D I M E N S I O N   S T A T E M E N T S              *
C     *                                                              *
C     ****************************************************************
C
      IMPLICIT INTEGER (A-Z)
C
      INTEGER*2   ANAME(132)
C
C     ****************************************************************
C     *                                                              *
C     *         T Y P E   S T A T E M E N T S                        *
C     *                                                              *
C     ****************************************************************
C
C
C     ****************************************************************
C     *                                                              *
C     *         C O M M O N   S T A T E M E N T S                    *
C     *                                                              *
C     ****************************************************************
C
      INCLUDE USL/KERCOM
      INCLUDE USL/KERPMC
C
C     ****************************************************************
C     *                                                              *
C     *         E Q U I V A L E N C E   S T A T E M E N T S          *
C     *                                                              *
C     ****************************************************************
C
C
C     ****************************************************************
C     *                                                              *
C     *         D A T A   S T A T E M E N T S                        *
C     *                                                              *
C     ****************************************************************
C
C
C     ****************************************************************
C
C     Code starts here :
C
C
      IF(NUMTRY.LE.MAXTRY)GO TO 100
C                                            !EXCEEDED MAX. # OF RE-TRY
         RFILE=BIGA
C                                            !GIVES UP
         RETURN
  100 CONTINUE
          NUMTRY=NUMTRY+1
C
C                                            PICK UP A PACKET
C
      STATUS=RPACK(LEN,NUM,PACKET)
C                                            !WE GOT A SINIT PACKET
      IF(STATUS.NE.BIGS)GO TO 1000
         IF(OLDTRY.LE.MAXTRY)GO TO 200
C                                            !RE-TRY IT AGAIN
            RFILE=BIGA
            RETURN
  200    CONTINUE
             OLDTRY=OLDTRY+1
         IF(NUM.NE.(N-1))GO TO 300
C                                            !WE ALREADY GOT THE SINIT
C                                            !PACKET, GET MY FILE-TRANSFER
C                                            !REQUIREMENT/PARAMETERS
            CALL SPAR(PACKET)
            TV1=BIGY
            TV2=6
C                                            !ACK IT
            CALL SPACK(TV1,NUM,TV2,PACKET)
            NUMTRY=0
            RFILE=STATE
            RETURN
  300    CONTINUE
C                                            !UNEXPECTED SEQUENCE #
             RFILE=BIGA
C                                            !GIVES UP
             RETURN
C
 1000 CONTINUE
C                                            !WE GOT A EOF PACKET
      IF(STATUS.NE.BIGZ)GO TO 2000
              IF(OLDTRY.LE.MAXTRY)GO TO 1100
C                                            !EXCEEDED MAX # OF RE-TRY
                 RFILE=BIGA
C                                            !GIVES UP
                 RETURN
 1100         CONTINUE
C                                            !RE-TRY ONE MORE TIME
                  OLDTRY=OLDTRY+1
              IF(NUM.NE.(N-1))GO TO 1200
C                                            !WE ALREADY GOT THE EOF PACKET
                 TV1=BIGY
                 TV2=0
                 TV3=0
C                                            !JUST ACK IT
                 CALL SPACK(TV1,NUM,TV2,TV3)
                 NUMTRY=0
                 RFILE=STATE
                 RETURN
 1200         CONTINUE
C                                            !UNEXPECTED SEQUENCE #
                  RFILE=BIGA
                  RETURN
C
 2000 CONTINUE
C                                            !WE GOT THE FILE HEADER PACKET
      IF(STATUS.NE.BIGF)GO TO 3000
              IF(NUM.EQ.N)GO TO 2100
C                                            !UNEXPECTED SEQUENCE #,NAK IT
                 RFILE=BIGA
                 RETURN
 2100         CONTINUE
C                                            !PACKET(LEN) HAS THE INCOMING
C                                            !FILENAME PACKET
              PACKET(LEN+1)=LF
              PACKET(LEN+2)=EOS
C
C                                             STORE FILENAME FOR LATER
C                                             WRITE TO DISK
C
              DO 2125 I = 1,132
C
                FILNAM(I) = 0
                ANAME(I) = 0
C
 2125         CONTINUE
C
              DO 2150 I = 1,LEN
C
               FILNAM(I) = PACKET(I)
               ANAME(I) = ISHFT (PACKET(I),8)
C
 2150         CONTINUE
C
              FILNAM(I+1) = LF
              FILNAM(I+2) = EOS
              IF(HOSTON.NE.NO)GO TO 2300
                 WRITE (LOCALO,2175) (ANAME(I),I=1,LEN)
 2175            FORMAT( ' RECEIVING FILE--> ',60A1)
                 WRITE (LOCALO,2176)
 2176            FORMAT (/)
 2300         CONTINUE
              TNUM=N
              TV1=BIGY
              TV2=0
              TV3=0
C                                            !ACK THE FILE HEADER PACKET
              CALL SPACK(TV1,TNUM,TV2,TV3)
              OLDTRY=NUMTRY
              NUMTRY=0
              N=MOD((N+1),64)
C                                           !CHANGE STATE TO LOOK FOR DATA
C                                           !PACKET
              RFILE=BIGD
              RETURN
C
 3000      CONTINUE
C                                           !WE GOT A BREAK TRANSMISSION
      IF(STATUS.NE.BIGB)GO TO 4000
              IF(NUM.EQ.N)GO TO 3100
                 RFILE=BIGA
                 RETURN
 3100         CONTINUE
              TNUM=N
              TV1=BIGY
              TV2=0
              TV3=0
C                                          !ACK THE BREAK PACKET
              CALL SPACK(TV1,TNUM,TV2,TV3)
C                                          !CHANGE STATE TO COMPLETE STATUS
              RFILE=BIGC
              RETURN
 4000 CONTINUE
C                                          !WE GOT AN ERROR ON THE CHECK SUM
      IF(STATUS.NE.BAD)GO TO 5000
              RFILE=STATE
              TNUM=N
              TV1=BIGN
              TV2=0
              TV3=0
C                                         !NAK IT
              CALL SPACK(TV1,TNUM,TV2,TV3)
              RETURN
 5000 CONTINUE
C                                          !UNEXPECTED PACKET TYPE, GIVE UP
          RFILE=BIGA
      RETURN
      END
