home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / modcomp / rfile. < prev    next >
Text File  |  2020-01-01  |  9KB  |  258 lines

  1.       INTEGER FUNCTION RFILE (X)
  2. C
  3. C     ****************************************************************
  4. C
  5. C              KERMIT for the MODCOMP MAXIV operating system
  6. C
  7. C        Compliments of:
  8. C
  9. C                         SETPOINT, Inc.
  10. C                      10245 Brecksville Rd.
  11. C                      Brecksville, Ohio 44141
  12. C
  13. C
  14. C      KERMIT is a copyrighted protocol of Columbia Univ. The authors
  15. C      of this version hereby grant permission to copy this software
  16. C      provided that it is not used for an explicitly commercial
  17. C      purpose and that proper credit be given. SETPOINT, Inc. makes
  18. C      no warranty whatsoever regarding the accuracy of this package
  19. C      and will assume no liability resulting from it's use.
  20. C
  21. C     ****************************************************************
  22. C
  23. C     Abstract:  Read a file header packer from the other Kermit.
  24. C
  25. C     MODIFICATION HISTORY
  26. C
  27. C     BY            DATE     REASON            PROGRAMS AFFECTED
  28. C
  29. C
  30. C     ****************************************************************
  31. C
  32. C     Author: BOB BORGESON          Version: A.0    Date: Oct-86
  33. C
  34. C     Calling Parameters:
  35. C
  36. C       X   - REQUIRED BY FORTRAN
  37. C
  38. C     ****************************************************************
  39. C
  40. C     Messages generated by this module :  None
  41. C
  42. C     ****************************************************************
  43. C
  44. C     Subroutines called directly :  PUTLIN, RPACK, SPACK
  45. C
  46. C     ****************************************************************
  47. C
  48. C     Files referenced :  None
  49. C
  50. C     ****************************************************************
  51. C
  52. C     Local variable definitions :
  53. C
  54. C     N      - CURRENT PACKET SEQUENCE #
  55. C     NUM    - LAST PACKET SEQUENCE #
  56. C     FILNM  - UNPACKED ASCII FILE NAME TO BE RECEIVED
  57. C
  58. C     ****************************************************************
  59. C
  60. C     Commons referenced :  KER, KERPAR local commons
  61. C
  62. C     ****************************************************************
  63. C
  64. C     (*$END.DOCUMENT*)
  65. C
  66. C     ****************************************************************
  67. C     *                                                              *
  68. C     *         D I M E N S I O N   S T A T E M E N T S              *
  69. C     *                                                              *
  70. C     ****************************************************************
  71. C
  72.       IMPLICIT INTEGER (A-Z)
  73. C
  74.       INTEGER*2   ANAME(132)
  75. C
  76. C     ****************************************************************
  77. C     *                                                              *
  78. C     *         T Y P E   S T A T E M E N T S                        *
  79. C     *                                                              *
  80. C     ****************************************************************
  81. C
  82. C
  83. C     ****************************************************************
  84. C     *                                                              *
  85. C     *         C O M M O N   S T A T E M E N T S                    *
  86. C     *                                                              *
  87. C     ****************************************************************
  88. C
  89.       INCLUDE USL/KERCOM
  90.       INCLUDE USL/KERPMC
  91. C
  92. C     ****************************************************************
  93. C     *                                                              *
  94. C     *         E Q U I V A L E N C E   S T A T E M E N T S          *
  95. C     *                                                              *
  96. C     ****************************************************************
  97. C
  98. C
  99. C     ****************************************************************
  100. C     *                                                              *
  101. C     *         D A T A   S T A T E M E N T S                        *
  102. C     *                                                              *
  103. C     ****************************************************************
  104. C
  105. C
  106. C     ****************************************************************
  107. C
  108. C     Code starts here :
  109. C
  110. C
  111.       IF(NUMTRY.LE.MAXTRY)GO TO 100
  112. C                                            !EXCEEDED MAX. # OF RE-TRY
  113.          RFILE=BIGA
  114. C                                            !GIVES UP
  115.          RETURN
  116.   100 CONTINUE
  117.           NUMTRY=NUMTRY+1
  118. C
  119. C                                            PICK UP A PACKET
  120. C
  121.       STATUS=RPACK(LEN,NUM,PACKET)
  122. C                                            !WE GOT A SINIT PACKET
  123.       IF(STATUS.NE.BIGS)GO TO 1000
  124.          IF(OLDTRY.LE.MAXTRY)GO TO 200
  125. C                                            !RE-TRY IT AGAIN
  126.             RFILE=BIGA
  127.             RETURN
  128.   200    CONTINUE
  129.              OLDTRY=OLDTRY+1
  130.          IF(NUM.NE.(N-1))GO TO 300
  131. C                                            !WE ALREADY GOT THE SINIT
  132. C                                            !PACKET, GET MY FILE-TRANSFER
  133. C                                            !REQUIREMENT/PARAMETERS
  134.             CALL SPAR(PACKET)
  135.             TV1=BIGY
  136.             TV2=6
  137. C                                            !ACK IT
  138.             CALL SPACK(TV1,NUM,TV2,PACKET)
  139.             NUMTRY=0
  140.             RFILE=STATE
  141.             RETURN
  142.   300    CONTINUE
  143. C                                            !UNEXPECTED SEQUENCE #
  144.              RFILE=BIGA
  145. C                                            !GIVES UP
  146.              RETURN
  147. C
  148.  1000 CONTINUE
  149. C                                            !WE GOT A EOF PACKET
  150.       IF(STATUS.NE.BIGZ)GO TO 2000
  151.               IF(OLDTRY.LE.MAXTRY)GO TO 1100
  152. C                                            !EXCEEDED MAX # OF RE-TRY
  153.                  RFILE=BIGA
  154. C                                            !GIVES UP
  155.                  RETURN
  156.  1100         CONTINUE
  157. C                                            !RE-TRY ONE MORE TIME
  158.                   OLDTRY=OLDTRY+1
  159.               IF(NUM.NE.(N-1))GO TO 1200
  160. C                                            !WE ALREADY GOT THE EOF PACKET
  161.                  TV1=BIGY
  162.                  TV2=0
  163.                  TV3=0
  164. C                                            !JUST ACK IT
  165.                  CALL SPACK(TV1,NUM,TV2,TV3)
  166.                  NUMTRY=0
  167.                  RFILE=STATE
  168.                  RETURN
  169.  1200         CONTINUE
  170. C                                            !UNEXPECTED SEQUENCE #
  171.                   RFILE=BIGA
  172.                   RETURN
  173. C
  174.  2000 CONTINUE
  175. C                                            !WE GOT THE FILE HEADER PACKET
  176.       IF(STATUS.NE.BIGF)GO TO 3000
  177.               IF(NUM.EQ.N)GO TO 2100
  178. C                                            !UNEXPECTED SEQUENCE #,NAK IT
  179.                  RFILE=BIGA
  180.                  RETURN
  181.  2100         CONTINUE
  182. C                                            !PACKET(LEN) HAS THE INCOMING
  183. C                                            !FILENAME PACKET
  184.               PACKET(LEN+1)=LF
  185.               PACKET(LEN+2)=EOS
  186. C
  187. C                                             STORE FILENAME FOR LATER
  188. C                                             WRITE TO DISK
  189. C
  190.               DO 2125 I = 1,132
  191. C
  192.                 FILNAM(I) = 0
  193.                 ANAME(I) = 0
  194. C
  195.  2125         CONTINUE
  196. C
  197.               DO 2150 I = 1,LEN
  198. C
  199.                FILNAM(I) = PACKET(I)
  200.                ANAME(I) = ISHFT (PACKET(I),8)
  201. C
  202.  2150         CONTINUE
  203. C
  204.               FILNAM(I+1) = LF
  205.               FILNAM(I+2) = EOS
  206.               IF(HOSTON.NE.NO)GO TO 2300
  207.                  WRITE (LOCALO,2175) (ANAME(I),I=1,LEN)
  208.  2175            FORMAT( ' RECEIVING FILE--> ',60A1)
  209.                  WRITE (LOCALO,2176)
  210.  2176            FORMAT (/)
  211.  2300         CONTINUE
  212.               TNUM=N
  213.               TV1=BIGY
  214.               TV2=0
  215.               TV3=0
  216. C                                            !ACK THE FILE HEADER PACKET
  217.               CALL SPACK(TV1,TNUM,TV2,TV3)
  218.               OLDTRY=NUMTRY
  219.               NUMTRY=0
  220.               N=MOD((N+1),64)
  221. C                                           !CHANGE STATE TO LOOK FOR DATA
  222. C                                           !PACKET
  223.               RFILE=BIGD
  224.               RETURN
  225. C
  226.  3000      CONTINUE
  227. C                                           !WE GOT A BREAK TRANSMISSION
  228.       IF(STATUS.NE.BIGB)GO TO 4000
  229.               IF(NUM.EQ.N)GO TO 3100
  230.                  RFILE=BIGA
  231.                  RETURN
  232.  3100         CONTINUE
  233.               TNUM=N
  234.               TV1=BIGY
  235.               TV2=0
  236.               TV3=0
  237. C                                          !ACK THE BREAK PACKET
  238.               CALL SPACK(TV1,TNUM,TV2,TV3)
  239. C                                          !CHANGE STATE TO COMPLETE STATUS
  240.               RFILE=BIGC
  241.               RETURN
  242.  4000 CONTINUE
  243. C                                          !WE GOT AN ERROR ON THE CHECK SUM
  244.       IF(STATUS.NE.BAD)GO TO 5000
  245.               RFILE=STATE
  246.               TNUM=N
  247.               TV1=BIGN
  248.               TV2=0
  249.               TV3=0
  250. C                                         !NAK IT
  251.               CALL SPACK(TV1,TNUM,TV2,TV3)
  252.               RETURN
  253.  5000 CONTINUE
  254. C                                          !UNEXPECTED PACKET TYPE, GIVE UP
  255.           RFILE=BIGA
  256.       RETURN
  257.       END
  258.