C This is an AOS version of KERMIT written on a D.G. S/250 C running AOS rev. 4.0 and Fortran 5 6.14 . Credit should be C given to Fred Brehm who installed RATFOR onto D.G. systems C for RCA; it makes my implementation of AOS-KERMIT from the C C listing found in the PROTOCOL manual much simplier. C Permission is granted to any individual or institution to copy C or use this program, except for explicitly commercial purpose. C Documenation can be found in READ.ME and RATFOR listing. C C John Lee C RCA LABS (Princeton) C 609-734-3157 C 1/23/84 C IMPLICIT INTEGER (A-Z) COMMON /KER/ N,RPSIZ,SPSIZ,PAD,NUMTRY,OLDTRY, FD,RMTINFD,RMTOUTFD, *STATE,PADCHAR, EOL,ESCHAR,QUOTE,FILNAM(132),RECPKT(94 ), PACKET(94 * ),SIZE,MOREFD,IBM,HOST, LOCALINFD,LOCALOUTFD,SPEED INTEGER RESW,X,STATUS,GETLIN,TEMP,AOPEN,AONE,BONE,A1,Z1 INTEGER ATWO,FINDLN INTEGER FLAG1,FLAG2,FLAG3,FLAG4,FLAG5,FLAG6,FLAG7,FLAG8,FLAG9 INTEGER BELL INTEGER ALIN(132) INTEGER BLIN(132) INTEGER DLIN(132) INTEGER SLIN(132) INTEGER APAT(128) INTEGER BPAT(128) INTEGER CPAT(128) INTEGER DPAT(128) INTEGER EPAT(128) INTEGER FPAT(128) INTEGER GPAT(128) INTEGER HPAT(128) INTEGER IPAT(128) INTEGER XREC(8) DATA XREC(1),XREC(2),XREC(3),XREC(4),XREC(5),XREC(6),XREC(7),XREC( *8)/82,69,67,69,73,86,69,10002/ INTEGER CON(9) DATA CON(1),CON(2),CON(3),CON(4),CON(5),CON(6),CON(7),CON(8),CON(9 *)/64,67,79,78,83,79,76,69,10002/ INTEGER CON4(6) DATA CON4(1),CON4(2),CON4(3),CON4(4),CON4(5),CON4(6)/64,67,79,78,5 *2,10002/ INTEGER CON11(7) DATA CON11(1),CON11(2),CON11(3),CON11(4),CON11(5),CON11(6),CON11(7 *)/64,67,79,78,49,49,10002/ INTEGER SSEND(5) DATA SSEND(1),SSEND(2),SSEND(3),SSEND(4),SSEND(5)/83,69,78,68,1000 *2/ INTEGER HELP(5) DATA HELP(1),HELP(2),HELP(3),HELP(4),HELP(5)/72,69,76,80,10002/ INTEGER SEXIT(5) DATA SEXIT(1),SEXIT(2),SEXIT(3),SEXIT(4),SEXIT(5)/69,88,73,84,1000 *2/ INTEGER QUIT(5) DATA QUIT(1),QUIT(2),QUIT(3),QUIT(4),QUIT(5)/81,85,73,84,10002/ INTEGER STAT(7) DATA STAT(1),STAT(2),STAT(3),STAT(4),STAT(5),STAT(6),STAT(7)/83,84 *,65,84,85,83,10002/ INTEGER IBMON(11) DATA IBMON(1),IBMON(2),IBMON(3),IBMON(4),IBMON(5),IBMON(6),IBMON(7 *),IBMON(8),IBMON(9),IBMON(10),IBMON(11)/83,69,84,32,73,66,77,32,79 *,78,10002/ INTEGER IBMOFF(12) DATA IBMOFF(1),IBMOFF(2),IBMOFF(3),IBMOFF(4),IBMOFF(5),IBMOFF(6),I *BMOFF(7),IBMOFF(8),IBMOFF(9),IBMOFF(10),IBMOFF(11),IBMOFF(12)/83,6 *9,84,32,73,66,77,32,79,70,70,10002/ INTEGER HELPFILE(12) DATA HELPFILE(1),HELPFILE(2),HELPFILE(3),HELPFILE(4),HELPFILE(5),H *ELPFILE(6),HELPFILE(7),HELPFILE(8),HELPFILE(9),HELPFILE(10),HELPFI *LE(11),HELPFILE(12)/72,69,76,80,95,75,69,82,77,73,84,10002/ INTEGER VALUE(41) DATA VALUE(1),VALUE(2),VALUE(3),VALUE(4),VALUE(5),VALUE(6),VALUE(7 *),VALUE(8),VALUE(9),VALUE(10),VALUE(11),VALUE(12),VALUE(13),VALUE( *14),VALUE(15),VALUE(16),VALUE(17),VALUE(18),VALUE(19),VALUE(20),VA *LUE(21),VALUE(22),VALUE(23),VALUE(24),VALUE(25),VALUE(26),VALUE(27 *),VALUE(28),VALUE(29),VALUE(30),VALUE(31),VALUE(32),VALUE(33),VALU *E(34),VALUE(35),VALUE(36),VALUE(37),VALUE(38),VALUE(39),VALUE(40), *VALUE(41)/32,108,111,99,97,108,32,111,102,102,32,32,32,35,32,32,32 *,32,32,57,52,32,32,32,94,77,32,32,64,99,111,110,32,32,32,32,32,32, *32,32,10002/ INTEGER MOREFILE(9) DATA MOREFILE(1),MOREFILE(2),MOREFILE(3),MOREFILE(4),MOREFILE(5),M *OREFILE(6),MOREFILE(7),MOREFILE(8),MOREFILE(9)/109,111,114,101,102 *,105,108,101,10002/ INTEGER SCONNECT(8) DATA SCONNECT(1),SCONNECT(2),SCONNECT(3),SCONNECT(4),SCONNECT(5),S *CONNECT(6),SCONNECT(7),SCONNECT(8)/67,79,78,78,69,67,84,10002/ CALL STDOPEN MOREFD=-1 STATE=67 BELL='' IBM=0 HOST=-1 AONE=1 BONE=1 ATWO=2 LOCALINFD=AOPEN(CON,0) IF(.NOT.(LOCALINFD.EQ.10001))GOTO 23000 CALL CANT(CON) 23000 CONTINUE LOCALOUTFD=AOPEN(CON,3) IF(.NOT.(LOCALOUTFD.EQ.10001))GOTO 23002 CALL CANT(CON) 23002 CONTINUE CALL SCOPY(HELP,AONE,APAT,BONE) CALL SCOPY(SEXIT,AONE,BPAT,BONE) CALL SCOPY(QUIT,AONE,CPAT,BONE) CALL SCOPY(STAT,AONE,DPAT,BONE) CALL SCOPY(IBMON,AONE,EPAT,BONE) CALL SCOPY(IBMOFF,AONE,FPAT,BONE) CALL SCOPY(SSEND,AONE,GPAT,BONE) CALL SCOPY(XREC,AONE,HPAT,BONE) CALL SCOPY(SCONNECT,AONE,IPAT,BONE) CALL SCOPY(VALUE,AONE,SLIN,BONE) CALL REMARK("Remote or Local KERMIT mode R/L ??") STATUS=GETLIN(ALIN,LOCALINFD) CALL UPPER(ALIN,BLIN) IF(.NOT.(BLIN(1).EQ.82))GOTO 23004 CALL REMARK("Remote kermit now in effect") RMTINFD=LOCALINFD RMTOUTFD=LOCALOUTFD GOTO 23005 23004 CONTINUE IF(.NOT.(BLIN(1).EQ.76))GOTO 23006 HOST=0 CALL REMARK("Local kermit now in effect") CALL REMARK("9600 or 1200 Baud (9/1) ??") STATUS=GETLIN(ALIN,LOCALINFD) IF(.NOT.(ALIN(1).EQ.57))GOTO 23008 SPEED=-1 RMTINFD=AOPEN(CON4,0) IF(.NOT.(RMTINFD.EQ.10001))GOTO 23010 CALL CANT(CON4) 23010 CONTINUE RMTOUTFD=AOPEN(CON4,3) IF(.NOT.(RMTOUTFD.EQ.10001))GOTO 23012 CALL CANT(CON4) 23012 CONTINUE GOTO 23009 23008 CONTINUE SPEED=0 RMTINFD=AOPEN(CON11,0) IF(.NOT.(RMTINFD.EQ.10001))GOTO 23014 CALL CANT(CON11) 23014 CONTINUE RMTOUTFD=AOPEN(CON11,3) IF(.NOT.(RMTOUTFD.EQ.10001))GOTO 23016 CALL CANT(CON11) 23016 CONTINUE 23009 CONTINUE GOTO 23007 23006 CONTINUE CALL REMARK ("Unknown mode, try again") CALL RATEXIT 23007 CONTINUE 23005 CONTINUE ISTAT=1 23018 IF(.NOT.(ISTAT.EQ.1))GOTO 23019 CALL WRSEQ(LOCALOUTFD,"KERMIT-AOS >",12,IER) FD=10001 STATUS=GETLIN(ALIN,LOCALINFD) CALL UPPER(ALIN,BLIN) A1=1 FLAG1=FINDLN(BLIN,APAT,A1,Z1) A1=1 FLAG2=FINDLN(BLIN,BPAT,A1,Z1) A1=1 FLAG3=FINDLN(BLIN,CPAT,A1,Z1) A1=1 FLAG4=FINDLN(BLIN,DPAT,A1,Z1) A1=1 FLAG5=FINDLN(BLIN,EPAT,A1,Z1) A1=1 FLAG6=FINDLN(BLIN,FPAT,A1,Z1) A1=1 FLAG7=FINDLN(BLIN,GPAT,A1,Z1) A1=1 FLAG8=FINDLN(BLIN,HPAT,A1,Z1) A1=1 FLAG9=FINDLN(BLIN,IPAT,A1,Z1) IF(.NOT.(FLAG1.EQ.1))GOTO 23020 TEMP=AOPEN(HELPFILE,0) 23022 IF(.NOT.((GETLIN(ALIN,TEMP).NE.10003)))GOTO 23023 CALL PUTLIN(ALIN,LOCALOUTFD) GOTO 23022 23023 CONTINUE CALL RATCLOSE(TEMP) GOTO 23021 23020 CONTINUE IF(.NOT.((FLAG2.EQ.1).OR.(FLAG3.EQ.1)))GOTO 23024 CALL REMARK("Kermit now terminated") CALL RATEXIT GOTO 23025 23024 CONTINUE IF(.NOT.(FLAG4.EQ.1))GOTO 23026 CALL REMARK(" PACKET ") CALL REMARK(" MODE IBM QUOTE SIZE EOL TTY SPEED STATE") CALL REMARK(" ") IF(.NOT.(HOST.EQ.-1))GOTO 23028 SLIN(1)=114 SLIN(2)=101 SLIN(3)=109 SLIN(4)=111 SLIN(5)=116 SLIN(6)=101 GOTO 23029 23028 CONTINUE SLIN(1)=32 SLIN(2)=108 SLIN(3)=111 SLIN(4)=99 SLIN(5)=97 SLIN(6)=108 23029 CONTINUE IF(.NOT.(IBM.EQ.-1))GOTO 23030 SLIN(8)=111 SLIN(9)=110 SLIN(10)=32 SLIN(11)=32 GOTO 23031 23030 CONTINUE SLIN(8)=111 SLIN(9)=102 SLIN(10)=102 SLIN(11)=32 23031 CONTINUE IF(.NOT.(HOST.EQ.-1))GOTO 23032 SLIN(33)=32 SLIN(34)=32 GOTO 23033 23032 CONTINUE IF(.NOT.(SPEED.EQ.-1))GOTO 23034 SLIN(33)=52 SLIN(34)=32 SLIN(35)=32 SLIN(36)=57 SLIN(37)=54 SLIN(38)=48 SLIN(39)=48 SLIN(40)=32 GOTO 23035 23034 CONTINUE SLIN(33)=49 SLIN(34)=49 SLIN(35)=32 SLIN(36)=49 SLIN(37)=50 SLIN(38)=48 SLIN(39)=48 SLIN(40)=32 23035 CONTINUE 23033 CONTINUE SLIN(41)=32 SLIN(42)=32 SLIN(43)=32 SLIN(44)=STATE SLIN(45)=32 SLIN(46)=32 SLIN(47)=10 SLIN(48)=10002 CALL PUTLIN(SLIN,LOCALOUTFD) CALL REMARK(" ") GOTO 23027 23026 CONTINUE IF(.NOT.(FLAG5.EQ.1))GOTO 23036 IF(.NOT.(HOST.EQ.-1))GOTO 23038 CALL REMARK("Not supported in host kermit mode") GOTO 23039 23038 CONTINUE IBM=-1 23039 CONTINUE GOTO 23037 23036 CONTINUE IF(.NOT.(FLAG6.EQ.1))GOTO 23040 IBM=0 GOTO 23041 23040 CONTINUE IF(.NOT.(FLAG7.EQ.1))GOTO 23042 ITEMP=0 CALL REMARK("enter filename or @filename") STATUS=GETLIN(ALIN,LOCALINFD) CALL REMOVE(MOREFILE) MOREFD=AOPEN(MOREFILE,3) IF(.NOT.(ALIN(1).NE.64))GOTO 23044 CALL PUTLIN(ALIN,MOREFD) GOTO 23045 23044 CONTINUE CALL SCOPY(ALIN,ATWO,DLIN,AONE) ITEMP=AOPEN(DLIN,0) IF(.NOT.(ITEMP.EQ.10001))GOTO 23046 CALL REMARK("Source file not found") GOTO 23047 23046 CONTINUE 23048 IF(.NOT.(GETLIN(ALIN,ITEMP).NE.10003))GOTO 23049 CALL PUTLIN(ALIN,MOREFD) GOTO 23048 23049 CONTINUE CALL RATCLOSE(ITEMP) 23047 CONTINUE 23045 CONTINUE CALL RATCLOSE(MOREFD) IF(.NOT.(ITEMP.NE.10001))GOTO 23050 IF(.NOT.(HOST.EQ.-1))GOTO 23052 CALL WAIT(15,2,IER) 23052 CONTINUE STATUS=SENDSW(X) IF(.NOT.(HOST.EQ.0))GOTO 23054 CALL WRSEQ(LOCALOUTFD,BELL,2,IER) 23054 CONTINUE IF(.NOT.(HOST.EQ.0))GOTO 23056 CALL REMARK(" ") 23056 CONTINUE IF(.NOT.((STATUS.EQ.-1).AND.(HOST.EQ.0)))GOTO 23058 CALL REMARK("COMPLETED") 23058 CONTINUE IF(.NOT.((STATUS.NE.-1).AND.(HOST.EQ.0)))GOTO 23060 CALL REMARK("FAILED") 23060 CONTINUE IF(.NOT.(FD.NE.10001))GOTO 23062 CALL RATCLOSE(FD) 23062 CONTINUE 23050 CONTINUE GOTO 23043 23042 CONTINUE IF(.NOT.(FLAG8.EQ.1))GOTO 23064 STATUS=RECSW(X) IF(.NOT.(HOST.EQ.0))GOTO 23066 CALL WRSEQ(LOCALOUTFD,BELL,2,IER) 23066 CONTINUE IF(.NOT.(HOST.EQ.0))GOTO 23068 CALL REMARK(" ") 23068 CONTINUE IF(.NOT.((STATUS.EQ.-1).AND.(HOST.EQ.0)))GOTO 23070 CALL REMARK("COMPLETED") 23070 CONTINUE IF(.NOT.((STATUS.NE.-1).AND.(HOST.EQ.0)))GOTO 23072 CALL REMARK("FAILED") 23072 CONTINUE IF(.NOT.(FD.NE.10001))GOTO 23074 CALL RATCLOSE(FD) 23074 CONTINUE GOTO 23065 23064 CONTINUE IF(.NOT.(FLAG9.EQ.1))GOTO 23076 IF(.NOT.(HOST.EQ.-1))GOTO 23078 CALL REMARK("Connect is not supported in Host mode") GOTO 23079 23078 CONTINUE CALL TTYRAW CALL CONNECT CALL TTYCOOK 23079 CONTINUE GOTO 23077 23076 CONTINUE CALL REMARK("Invalid command, please type HELP") 23077 CONTINUE 23065 CONTINUE 23043 CONTINUE 23041 CONTINUE 23037 CONTINUE 23027 CONTINUE 23025 CONTINUE 23021 CONTINUE GOTO 23018 23019 CONTINUE RETURN END