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