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 .