home *** CD-ROM | disk | FTP | other *** search
/ kermit.columbia.edu / kermit.columbia.edu.tar / kermit.columbia.edu / aosfortran / aosker.fr < prev    next >
Text File  |  1984-02-01  |  74KB  |  2,434 lines

  1. CCCCCCCCCCCCCCCCCCCCCC  KEMRIT.FR       CCCCCCCCCCCCCCCCCCCCCCCCCCC
  2. C     KERMIT-AOS MAIN PROGRAM
  3. C  
  4. C     Implemented by John Lee of RCA Laboratories for Data General
  5. C     family of mini-computers running the AOS operating system.
  6. C  
  7. C     Permission is granted to any individual or institution to
  8. C     copy or use this program, except for explicitly commercial
  9. C     purpose.
  10. C  
  11. C                                             John Lee
  12. C                                             RCA Laboratories
  13. C                                             (609) 734-3157
  14. C                                             7/5/84
  15. C  
  16. C  
  17.       IMPLICIT INTEGER (A-Z)
  18.       COMMON /KER/ N,RPSIZ,SPSIZ,PAD,NUMTRY,OLDTRY, FD,RMTINFD,RMTOUTFD,
  19.      *STATE,PADCHAR, EOL,ESCHAR,QUOTE,FILNAM(132),RECPKT(94 ), PACKET(94
  20.      * ),SIZE,MOREFD,IBM,HOST, LOCALINFD,LOCALOUTFD,SPEED
  21.       INTEGER RESW,X,STATUS,GETLIN,TEMP,AOPEN,AONE,BONE,A1,Z1
  22.       INTEGER ATWO,FINDLN
  23.       INTEGER FLAG1,FLAG2,FLAG3,FLAG4,FLAG5,FLAG6,FLAG7,FLAG8,FLAG9
  24.       INTEGER BELL
  25.       INTEGER ALIN(132)
  26.       INTEGER BLIN(132)
  27.       INTEGER DLIN(132)
  28.       INTEGER SLIN(132)
  29.       INTEGER APAT(128)
  30.       INTEGER BPAT(128)
  31.       INTEGER CPAT(128)
  32.       INTEGER DPAT(128)
  33.       INTEGER EPAT(128)
  34.       INTEGER FPAT(128)
  35.       INTEGER GPAT(128)
  36.       INTEGER HPAT(128)
  37.       INTEGER IPAT(128)
  38.       INTEGER XREC(8)
  39.       DATA XREC(1),XREC(2),XREC(3),XREC(4),XREC(5),XREC(6),XREC(7),XREC(
  40.      *8)/82,69,67,69,73,86,69,10002/
  41.       INTEGER CON(9)
  42.       DATA CON(1),CON(2),CON(3),CON(4),CON(5),CON(6),CON(7),CON(8),CON(9
  43.      *)/64,67,79,78,83,79,76,69,10002/
  44.       INTEGER CON4(6)
  45.       DATA CON4(1),CON4(2),CON4(3),CON4(4),CON4(5),CON4(6)/64,67,79,78,5
  46.      *2,10002/
  47.       INTEGER CON11(7)
  48.       DATA CON11(1),CON11(2),CON11(3),CON11(4),CON11(5),CON11(6),CON11(7
  49.      *)/64,67,79,78,49,49,10002/
  50.       INTEGER SSEND(5)
  51.       DATA SSEND(1),SSEND(2),SSEND(3),SSEND(4),SSEND(5)/83,69,78,68,1000
  52.      *2/
  53.       INTEGER HELP(5)
  54.       DATA HELP(1),HELP(2),HELP(3),HELP(4),HELP(5)/72,69,76,80,10002/
  55.       INTEGER SEXIT(5)
  56.       DATA SEXIT(1),SEXIT(2),SEXIT(3),SEXIT(4),SEXIT(5)/69,88,73,84,1000
  57.      *2/
  58.       INTEGER QUIT(5)
  59.       DATA QUIT(1),QUIT(2),QUIT(3),QUIT(4),QUIT(5)/81,85,73,84,10002/
  60.       INTEGER STAT(7)
  61.       DATA STAT(1),STAT(2),STAT(3),STAT(4),STAT(5),STAT(6),STAT(7)/83,84
  62.      *,65,84,85,83,10002/
  63.       INTEGER IBMON(11)
  64.       DATA IBMON(1),IBMON(2),IBMON(3),IBMON(4),IBMON(5),IBMON(6),IBMON(7
  65.      *),IBMON(8),IBMON(9),IBMON(10),IBMON(11)/83,69,84,32,73,66,77,32,79
  66.      *,78,10002/
  67.       INTEGER IBMOFF(12)
  68.       DATA IBMOFF(1),IBMOFF(2),IBMOFF(3),IBMOFF(4),IBMOFF(5),IBMOFF(6),I
  69.      *BMOFF(7),IBMOFF(8),IBMOFF(9),IBMOFF(10),IBMOFF(11),IBMOFF(12)/83,6
  70.      *9,84,32,73,66,77,32,79,70,70,10002/
  71.       INTEGER HELPFILE(12)
  72.       DATA HELPFILE(1),HELPFILE(2),HELPFILE(3),HELPFILE(4),HELPFILE(5),H
  73.      *ELPFILE(6),HELPFILE(7),HELPFILE(8),HELPFILE(9),HELPFILE(10),HELPFI
  74.      *LE(11),HELPFILE(12)/72,69,76,80,95,75,69,82,77,73,84,10002/
  75.       INTEGER VALUE(41)
  76.       DATA VALUE(1),VALUE(2),VALUE(3),VALUE(4),VALUE(5),VALUE(6),VALUE(7
  77.      *),VALUE(8),VALUE(9),VALUE(10),VALUE(11),VALUE(12),VALUE(13),VALUE(
  78.      *14),VALUE(15),VALUE(16),VALUE(17),VALUE(18),VALUE(19),VALUE(20),VA
  79.      *LUE(21),VALUE(22),VALUE(23),VALUE(24),VALUE(25),VALUE(26),VALUE(27
  80.      *),VALUE(28),VALUE(29),VALUE(30),VALUE(31),VALUE(32),VALUE(33),VALU
  81.      *E(34),VALUE(35),VALUE(36),VALUE(37),VALUE(38),VALUE(39),VALUE(40),
  82.      *VALUE(41)/32,108,111,99,97,108,32,111,102,102,32,32,32,35,32,32,32
  83.      *,32,32,57,52,32,32,32,94,77,32,32,64,99,111,110,32,32,32,32,32,32,
  84.      *32,32,10002/
  85.       INTEGER MOREFILE(9)
  86.       DATA MOREFILE(1),MOREFILE(2),MOREFILE(3),MOREFILE(4),MOREFILE(5),M
  87.      *OREFILE(6),MOREFILE(7),MOREFILE(8),MOREFILE(9)/109,111,114,101,102
  88.      *,105,108,101,10002/
  89.       INTEGER SCONNECT(8)
  90.       DATA SCONNECT(1),SCONNECT(2),SCONNECT(3),SCONNECT(4),SCONNECT(5),S
  91.      *CONNECT(6),SCONNECT(7),SCONNECT(8)/67,79,78,78,69,67,84,10002/
  92.       CALL STDOPEN
  93.       MOREFD=-1
  94.       STATE=67
  95.       BELL='<BEL><BEL>'
  96.       IBM=0
  97.       HOST=-1
  98.       AONE=1
  99.       BONE=1
  100.       ATWO=2
  101.       LOCALINFD=AOPEN(CON,0)
  102.       IF(.NOT.(LOCALINFD.EQ.10001))GOTO 23000
  103.       CALL CANT(CON)
  104. 23000 CONTINUE
  105.       LOCALOUTFD=AOPEN(CON,3)
  106.       IF(.NOT.(LOCALOUTFD.EQ.10001))GOTO 23002
  107.       CALL CANT(CON)
  108. 23002 CONTINUE
  109.       CALL SCOPY(HELP,AONE,APAT,BONE)
  110.       CALL SCOPY(SEXIT,AONE,BPAT,BONE)
  111.       CALL SCOPY(QUIT,AONE,CPAT,BONE)
  112.       CALL SCOPY(STAT,AONE,DPAT,BONE)
  113.       CALL SCOPY(IBMON,AONE,EPAT,BONE)
  114.       CALL SCOPY(IBMOFF,AONE,FPAT,BONE)
  115.       CALL SCOPY(SSEND,AONE,GPAT,BONE)
  116.       CALL SCOPY(XREC,AONE,HPAT,BONE)
  117.       CALL SCOPY(SCONNECT,AONE,IPAT,BONE)
  118.       CALL SCOPY(VALUE,AONE,SLIN,BONE)
  119.       CALL REMARK("KERMIT-AOS Version 1.0")
  120.       CALL REMARK("Remote or Local KERMIT mode R/L ??")
  121.       STATUS=GETLIN(ALIN,LOCALINFD)
  122.       CALL UPPER(ALIN,BLIN)
  123.       IF(.NOT.(BLIN(1).EQ.82))GOTO 23004
  124.       CALL REMARK("Remote kermit now in effect")
  125.       RMTINFD=LOCALINFD
  126.       RMTOUTFD=LOCALOUTFD
  127.       GOTO 23005
  128. 23004 CONTINUE
  129.       IF(.NOT.(BLIN(1).EQ.76))GOTO 23006
  130.       HOST=0
  131.       CALL REMARK("Local kermit now in effect")
  132.       CALL REMARK("9600 or 1200 Baud (9/1) ??")
  133.       STATUS=GETLIN(ALIN,LOCALINFD)
  134.       IF(.NOT.(ALIN(1).EQ.57))GOTO 23008
  135.       SPEED=-1
  136.       RMTINFD=AOPEN(CON4,0)
  137.       IF(.NOT.(RMTINFD.EQ.10001))GOTO 23010
  138.       CALL CANT(CON4)
  139. 23010 CONTINUE
  140.       RMTOUTFD=AOPEN(CON4,3)
  141.       IF(.NOT.(RMTOUTFD.EQ.10001))GOTO 23012
  142.       CALL CANT(CON4)
  143. 23012 CONTINUE
  144.       GOTO 23009
  145. 23008 CONTINUE
  146.       SPEED=0
  147.       RMTINFD=AOPEN(CON11,0)
  148.       IF(.NOT.(RMTINFD.EQ.10001))GOTO 23014
  149.       CALL CANT(CON11)
  150. 23014 CONTINUE
  151.       RMTOUTFD=AOPEN(CON11,3)
  152.       IF(.NOT.(RMTOUTFD.EQ.10001))GOTO 23016
  153.       CALL CANT(CON11)
  154. 23016 CONTINUE
  155. 23009 CONTINUE
  156.       GOTO 23007
  157. 23006 CONTINUE
  158.       CALL REMARK ("Unknown mode, try again")
  159.       CALL RATEXIT
  160. 23007 CONTINUE
  161. 23005 CONTINUE
  162.       ISTAT=1
  163. 23018 IF(.NOT.(ISTAT.EQ.1))GOTO 23019
  164.       CALL WRSEQ(LOCALOUTFD,"KERMIT-AOS >",12,IER)
  165.       FD=10001
  166.       STATUS=GETLIN(ALIN,LOCALINFD)
  167.       CALL UPPER(ALIN,BLIN)
  168.       A1=1
  169.       FLAG1=FINDLN(BLIN,APAT,A1,Z1)
  170.       A1=1
  171.       FLAG2=FINDLN(BLIN,BPAT,A1,Z1)
  172.       A1=1
  173.       FLAG3=FINDLN(BLIN,CPAT,A1,Z1)
  174.       A1=1
  175.       FLAG4=FINDLN(BLIN,DPAT,A1,Z1)
  176.       A1=1
  177.       FLAG5=FINDLN(BLIN,EPAT,A1,Z1)
  178.       A1=1
  179.       FLAG6=FINDLN(BLIN,FPAT,A1,Z1)
  180.       A1=1
  181.       FLAG7=FINDLN(BLIN,GPAT,A1,Z1)
  182.       A1=1
  183.       FLAG8=FINDLN(BLIN,HPAT,A1,Z1)
  184.       A1=1
  185.       FLAG9=FINDLN(BLIN,IPAT,A1,Z1)
  186.       IF(.NOT.(FLAG1.EQ.1))GOTO 23020
  187.       TEMP=AOPEN(HELPFILE,0)
  188. 23022 IF(.NOT.((GETLIN(ALIN,TEMP).NE.10003)))GOTO 23023
  189.       CALL PUTLIN(ALIN,LOCALOUTFD)
  190.       GOTO 23022
  191. 23023 CONTINUE
  192.       CALL RATCLOSE(TEMP)
  193.       GOTO 23021
  194. 23020 CONTINUE
  195.       IF(.NOT.((FLAG2.EQ.1).OR.(FLAG3.EQ.1)))GOTO 23024
  196.       CALL REMARK("Kermit now terminated")
  197.       CALL RATEXIT
  198.       GOTO 23025
  199. 23024 CONTINUE
  200.       IF(.NOT.(FLAG4.EQ.1))GOTO 23026
  201.       CALL REMARK("                 PACKET ")
  202.       CALL REMARK(" MODE  IBM QUOTE  SIZE  EOL TTY    SPEED STATE")
  203.       CALL REMARK(" ")
  204.       IF(.NOT.(HOST.EQ.-1))GOTO 23028
  205.       SLIN(1)=114
  206.       SLIN(2)=101
  207.       SLIN(3)=109
  208.       SLIN(4)=111
  209.       SLIN(5)=116
  210.       SLIN(6)=101
  211.       GOTO 23029
  212. 23028 CONTINUE
  213.       SLIN(1)=32
  214.       SLIN(2)=108
  215.       SLIN(3)=111
  216.       SLIN(4)=99
  217.       SLIN(5)=97
  218.       SLIN(6)=108
  219. 23029 CONTINUE
  220.       IF(.NOT.(IBM.EQ.-1))GOTO 23030
  221.       SLIN(8)=111
  222.       SLIN(9)=110
  223.       SLIN(10)=32
  224.       SLIN(11)=32
  225.       GOTO 23031
  226. 23030 CONTINUE
  227.       SLIN(8)=111
  228.       SLIN(9)=102
  229.       SLIN(10)=102
  230.       SLIN(11)=32
  231. 23031 CONTINUE
  232.       IF(.NOT.(HOST.EQ.-1))GOTO 23032
  233.       SLIN(33)=32
  234.       SLIN(34)=32
  235.       GOTO 23033
  236. 23032 CONTINUE
  237.       IF(.NOT.(SPEED.EQ.-1))GOTO 23034
  238.       SLIN(33)=52
  239.       SLIN(34)=32
  240.       SLIN(35)=32
  241.       SLIN(36)=57
  242.       SLIN(37)=54
  243.       SLIN(38)=48
  244.       SLIN(39)=48
  245.       SLIN(40)=32
  246.       GOTO 23035
  247. 23034 CONTINUE
  248.       SLIN(33)=49
  249.       SLIN(34)=49
  250.       SLIN(35)=32
  251.       SLIN(36)=49
  252.       SLIN(37)=50
  253.       SLIN(38)=48
  254.       SLIN(39)=48
  255.       SLIN(40)=32
  256. 23035 CONTINUE
  257. 23033 CONTINUE
  258.       SLIN(41)=32
  259.       SLIN(42)=32
  260.       SLIN(43)=32
  261.       SLIN(44)=STATE
  262.       SLIN(45)=32
  263.       SLIN(46)=32
  264.       SLIN(47)=10
  265.       SLIN(48)=10002
  266.       CALL PUTLIN(SLIN,LOCALOUTFD)
  267.       CALL REMARK(" ")
  268.       GOTO 23027
  269. 23026 CONTINUE
  270.       IF(.NOT.(FLAG5.EQ.1))GOTO 23036
  271.       IF(.NOT.(HOST.EQ.-1))GOTO 23038
  272.       CALL REMARK("Not supported in host kermit mode")
  273.       GOTO 23039
  274. 23038 CONTINUE
  275.       IBM=-1
  276. 23039 CONTINUE
  277.       GOTO 23037
  278. 23036 CONTINUE
  279.       IF(.NOT.(FLAG6.EQ.1))GOTO 23040
  280.       IBM=0
  281.       GOTO 23041
  282. 23040 CONTINUE
  283.       IF(.NOT.(FLAG7.EQ.1))GOTO 23042
  284.       ITEMP=0
  285.       CALL REMARK("enter filename or @filename")
  286.       STATUS=GETLIN(ALIN,LOCALINFD)
  287.       CALL REMOVE(MOREFILE)
  288.       MOREFD=AOPEN(MOREFILE,3)
  289.       IF(.NOT.(ALIN(1).NE.64))GOTO 23044
  290.       CALL PUTLIN(ALIN,MOREFD)
  291.       GOTO 23045
  292. 23044 CONTINUE
  293.       CALL SCOPY(ALIN,ATWO,DLIN,AONE)
  294.       ITEMP=AOPEN(DLIN,0)
  295.       IF(.NOT.(ITEMP.EQ.10001))GOTO 23046
  296.       CALL REMARK("Source file not found")
  297.       GOTO 23047
  298. 23046 CONTINUE
  299. 23048 IF(.NOT.(GETLIN(ALIN,ITEMP).NE.10003))GOTO 23049
  300.       CALL PUTLIN(ALIN,MOREFD)
  301.       GOTO 23048
  302. 23049 CONTINUE
  303.       CALL RATCLOSE(ITEMP)
  304. 23047 CONTINUE
  305. 23045 CONTINUE
  306.       CALL RATCLOSE(MOREFD)
  307.       IF(.NOT.(ITEMP.NE.10001))GOTO 23050
  308.       IF(.NOT.(HOST.EQ.-1))GOTO 23052
  309.       CALL WAIT(15,2,IER)
  310. 23052 CONTINUE
  311.       STATUS=SENDSW(X)
  312.       IF(.NOT.(HOST.EQ.0))GOTO 23054
  313.       CALL WRSEQ(LOCALOUTFD,BELL,2,IER)
  314. 23054 CONTINUE
  315.       IF(.NOT.(HOST.EQ.0))GOTO 23056
  316.       CALL REMARK(" ")
  317. 23056 CONTINUE
  318.       IF(.NOT.((STATUS.EQ.-1).AND.(HOST.EQ.0)))GOTO 23058
  319.       CALL REMARK("COMPLETED")
  320. 23058 CONTINUE
  321.       IF(.NOT.((STATUS.NE.-1).AND.(HOST.EQ.0)))GOTO 23060
  322.       CALL REMARK("FAILED")
  323. 23060 CONTINUE
  324.       IF(.NOT.(FD.NE.10001))GOTO 23062
  325.       CALL RATCLOSE(FD)
  326. 23062 CONTINUE
  327. 23050 CONTINUE
  328.       GOTO 23043
  329. 23042 CONTINUE
  330.       IF(.NOT.(FLAG8.EQ.1))GOTO 23064
  331.       STATUS=RECSW(X)
  332.       IF(.NOT.(HOST.EQ.0))GOTO 23066
  333.       CALL WRSEQ(LOCALOUTFD,BELL,2,IER)
  334. 23066 CONTINUE
  335.       IF(.NOT.(HOST.EQ.0))GOTO 23068
  336.       CALL REMARK(" ")
  337. 23068 CONTINUE
  338.       IF(.NOT.((STATUS.EQ.-1).AND.(HOST.EQ.0)))GOTO 23070
  339.       CALL REMARK("COMPLETED")
  340. 23070 CONTINUE
  341.       IF(.NOT.((STATUS.NE.-1).AND.(HOST.EQ.0)))GOTO 23072
  342.       CALL REMARK("FAILED")
  343. 23072 CONTINUE
  344.       IF(.NOT.(FD.NE.10001))GOTO 23074
  345.       CALL RATCLOSE(FD)
  346. 23074 CONTINUE
  347.       GOTO 23065
  348. 23064 CONTINUE
  349.       IF(.NOT.(FLAG9.EQ.1))GOTO 23076
  350.       IF(.NOT.(HOST.EQ.-1))GOTO 23078
  351.       CALL REMARK("Connect is not supported in Host mode")
  352.       GOTO 23079
  353. 23078 CONTINUE
  354.       CALL TTYRAW
  355.       CALL CONNECT
  356.       CALL TTYCOOK
  357. 23079 CONTINUE
  358.       GOTO 23077
  359. 23076 CONTINUE
  360.       CALL REMARK("Invalid command, please type HELP")
  361. 23077 CONTINUE
  362. 23065 CONTINUE
  363. 23043 CONTINUE
  364. 23041 CONTINUE
  365. 23037 CONTINUE
  366. 23027 CONTINUE
  367. 23025 CONTINUE
  368. 23021 CONTINUE
  369.       GOTO 23018
  370. 23019 CONTINUE
  371.       RETURN
  372.       END
  373. CCCCCCCCCCCCCCCCCCCCCC AOPEN.FR         CCCCCCCCCCCCCCCCCCCCCCCCCCC
  374.       INTEGER FUNCTION AOPEN (NAME, MODE)
  375.       INTEGER NAME(10000)
  376.       INTEGER MODE
  377.       COMMON /CHANNEL/ CHANNEL(0:15), APOS, VPOS, LINEBUF(68,0:15), NC(0
  378.      *:15), IC(0:15), MD(0:15)
  379.       INTEGER CHANNEL
  380.       INTEGER APOS
  381.       INTEGER VPOS
  382.       INTEGER LINEBUF
  383.       INTEGER NC
  384.       INTEGER IC
  385.       INTEGER MD
  386.       INTEGER TEMP
  387.       INTEGER STRING(40), CH
  388.       TEMP=MODE
  389.       I = 1
  390. 23000 IF(.NOT.(NAME(I) .EQ. 32))GOTO 23002
  391. 23001 I = I+1
  392.       GOTO 23000
  393. 23002 CONTINUE
  394.       J = 1
  395. 23003 IF(.NOT.(NAME(I) .NE. 10002))GOTO 23005
  396.       BYTE(STRING,J) = NAME(I)
  397.       J = J+1
  398. 23004 I = I+1
  399.       GOTO 23003
  400. 23005 CONTINUE
  401.       BYTE(STRING,J) = 0
  402.       CH = 0
  403. 23006 IF(.NOT.(CH .LE. 15))GOTO 23008
  404.       IF(.NOT.(CHANNEL(CH) .EQ. 10001))GOTO 23009
  405.       GOTO 23008
  406. 23009 CONTINUE
  407. 23007 CH = CH+1
  408.       GOTO 23006
  409. 23008 CONTINUE
  410.       IF(.NOT.(CH .GT. 15))GOTO 23011
  411.       IER = 10001
  412.       GOTO 23012
  413. 23011 CONTINUE
  414.       IF(.NOT.(MODE .EQ. 3))GOTO 23013
  415.       CALL CFILW(STRING,2,IER)
  416.       CALL OPEN(CH,STRING,0,IER)
  417.       GOTO 23014
  418. 23013 CONTINUE
  419.       IF(.NOT.(MODE .EQ. 0))GOTO 23015
  420.       CALL OPEN (CH, STRING, 1, IER)
  421.       GOTO 23016
  422. 23015 CONTINUE
  423.       IF(.NOT.(MODE .EQ. 1 .OR. MODE .EQ. 2))GOTO 23017
  424.       CALL CFILW (STRING, 2, IER)
  425.       CALL OPEN (CH, STRING, 3, IER)
  426. 23017 CONTINUE
  427. 23016 CONTINUE
  428. 23014 CONTINUE
  429. 23012 CONTINUE
  430.       IF(.NOT.(TEMP.EQ.3))GOTO 23019
  431.       TEMP=1
  432. 23019 CONTINUE
  433.       IF(.NOT.(IER .NE. 1))GOTO 23021
  434.       CH = 10001
  435.       GOTO 23022
  436. 23021 CONTINUE
  437.       CHANNEL(CH) = TEMP
  438. 23022 CONTINUE
  439.       AOPEN=(CH)
  440.       RETURN
  441.       END
  442. CCCCCCCCCCCCCCCCCCCCCC  BUFEMP.FR       CCCCCCCCCCCCCCCCCCCCCCCCCCC
  443.       SUBROUTINE BUFEMP(BUFFER,LEN)
  444.       IMPLICIT INTEGER (A-Z)
  445.       COMMON /KER/ N,RPSIZ,SPSIZ,PAD,NUMTRY,OLDTRY, FD,RMTINFD,RMTOUTFD,
  446.      *STATE,PADCHAR, EOL,ESCHAR,QUOTE,FILNAM(132),RECPKT(94 ), PACKET(94
  447.      * ),SIZE,MOREFD,IBM,HOST, LOCALINFD,LOCALOUTFD,SPEED
  448.       INTEGER BUFFER(1)
  449.       INTEGER CH,LEN,CTL
  450.       INTEGER I,T
  451.       CH=FD
  452.       I=1
  453. 23000 IF(.NOT.(I.LT.LEN+1))GOTO 23002
  454.       T=BUFFER(I)
  455.       IF(.NOT.(T.EQ.35 ))GOTO 23003
  456.       I=I+1
  457.       T=BUFFER(I)
  458.       IF(.NOT.(T.NE.35 ))GOTO 23005
  459.       T=CTL(T)
  460. 23005 CONTINUE
  461. 23003 CONTINUE
  462.       IF(.NOT.(T.NE.13))GOTO 23007
  463.       CALL KPUTCH(T,CH)
  464. 23007 CONTINUE
  465. 23001 I=I+1
  466.       GOTO 23000
  467. 23002 CONTINUE
  468.       RETURN
  469.       END
  470. CCCCCCCCCCCCCCCCCCCCCC  BUFILL.FR       CCCCCCCCCCCCCCCCCCCCCCCCCCC
  471.       INTEGER FUNCTION BUFILL(BUFFER)
  472.       IMPLICIT INTEGER (A-Z)
  473.       COMMON /KER/ N,RPSIZ,SPSIZ,PAD,NUMTRY,OLDTRY, FD,RMTINFD,RMTOUTFD,
  474.      *STATE,PADCHAR, EOL,ESCHAR,QUOTE,FILNAM(132),RECPKT(94 ), PACKET(94
  475.      * ),SIZE,MOREFD,IBM,HOST, LOCALINFD,LOCALOUTFD,SPEED
  476.       INTEGER I,CTL,T,KGETCH,BUFFER(1),CH
  477.       I=1
  478.       CH=FD
  479. 23000 IF(.NOT.(KGETCH(T,CH).GT.0))GOTO 23001
  480.       IF(.NOT.((T.LT.32 ).OR.(T.EQ.127 ).OR.(T.EQ.QUOTE)))GOTO 23002
  481.       IF(.NOT.(T.EQ.10))GOTO 23004
  482.       BUFFER(I)=QUOTE
  483.       I=I+1
  484.       BUFFER(I)=CTL(13)
  485.       I=I+1
  486. 23004 CONTINUE
  487.       BUFFER(I)=QUOTE
  488.       I=I+1
  489.       IF(.NOT.(T.NE.QUOTE))GOTO 23006
  490.       T=CTL(T)
  491. 23006 CONTINUE
  492. 23002 CONTINUE
  493.       BUFFER(I)=T
  494.       I=I+1
  495.       IF(.NOT.(I.GT.SPSIZ-8))GOTO 23008
  496.       BUFILL=I-1
  497.       RETURN
  498. 23008 CONTINUE
  499.       GOTO 23000
  500. 23001 CONTINUE
  501.       IF(.NOT.(I.EQ.1))GOTO 23010
  502.       BUFILL=10003
  503.       RETURN
  504. 23010 CONTINUE
  505.       BUFILL=I-1
  506.       RETURN
  507.       END
  508. CCCCCCCCCCCCCCCCCCCCCC  CANT.FR         CCCCCCCCCCCCCCCCCCCCCCCCCCC
  509.        SUBROUTINE CANT(BUF)
  510.       INTEGER BUF(132)
  511.       CALL PUTLIN(BUF, 2)
  512.       CALL REMARK(": can't open.")
  513.       CALL RATEXIT
  514.       END
  515. CCCCCCCCCCCCCCCCCCCCCC  CHKIO.FR        CCCCCCCCCCCCCCCCCCCCCCCCCCC
  516.       SUBROUTINE CHKIO (FD, IER)
  517.       INTEGER FD, IER
  518.       IF(.NOT.(IER .EQ. 1 .OR. IER .EQ. 27))GOTO 23000
  519.       RETURN
  520. 23000 CONTINUE
  521.       WRITE (2, 1) IER, FD
  522. 1     FORMAT(" *** error code ", I6, " from channel ", I6)
  523.       RETURN
  524.       END
  525. CCCCCCCCCCCCCCCCCCCCCC COMPILEALL.CLI   CCCCCCCCCCCCCCCCCCCCCCCCCCC
  526. WRITE Compiling all KERMIT subroutines need to install KERMIT-AOS
  527. F5 AOPEN
  528. F5 BUFEMP
  529. F5 BUFILL
  530. F5 CANT
  531. F5 CONNECT
  532. F5 CTL
  533. F5 FINDLN
  534. F5 IBMGETLIN
  535. F5 KERMIT
  536. F5 KGETCH
  537. F5 KGETLIN
  538. F5 KPICK
  539. F5 KPUTCH
  540. F5 RDATA
  541. F5 RECSW
  542. F5 RFILE
  543. F5 RINIT
  544. F5 RPACK
  545. F5 RPAR
  546. F5 SBREAK
  547. F5 SDATA
  548. F5 SENDSW
  549. F5 SEOF
  550. F5 SFILE
  551. F5 SINIT
  552. F5 SPACK
  553. F5 SPACK1
  554. F5 SPAR
  555. F5 TOCHAR
  556. F5 TTYCOOK
  557. F5 TTYRAW
  558. F5 UNCHAR
  559. F5 UNHUNG
  560. F5 UPPER
  561. F5 VERIFY
  562. WRITE Compiling all RATFOR library subroutine needed for KERMIT-AOS
  563. F5 CHKIO
  564. F5 FLUSH
  565. F5 GETCH
  566. F5 GETLIN
  567. F5 ITOC
  568. F5 LENGTH
  569. F5 PACK
  570. F5 PUTC
  571. F5 PUTCH
  572. F5 PUTDEC
  573. F5 PUTINT
  574. F5 PUTLIN
  575. F5 PUTSTR
  576. F5 RATCLOSE
  577. F5 RATEXIT
  578. F5 REMARK
  579. F5 REMOVE
  580. F5 SCOPY
  581. F5 SSCOPY
  582. F5 STDIO
  583. F5 STDOPEN
  584. F5 STDSETUP
  585. WRITE All subroutines needed to installed KERMIT-AOS have veen compiled
  586. CCCCCCCCCCCCCCCCCCCCCC   CONNECT.FR     CCCCCCCCCCCCCCCCCCCCCCCCCCC
  587.       SUBROUTINE CONNECT
  588.       IMPLICIT INTEGER (A-Z)
  589.       COMMON /KER/ N,RPSIZ,SPSIZ,PAD,NUMTRY,OLDTRY, FD,RMTINFD,RMTOUTFD,
  590.      *STATE,PADCHAR, EOL,ESCHAR,QUOTE,FILNAM(132),RECPKT(94 ), PACKET(94
  591.      * ),SIZE,MOREFD,IBM,HOST, LOCALINFD,LOCALOUTFD,SPEED
  592.       INTEGER ECHAR,T,STATUS,ICHAR,KGETCH,CQ,CS
  593.       CS=011423K
  594.       CQ=010421K
  595.       ECHAR=29
  596.       STATUS=1
  597.       TASK KPICK,ID=3,PRI=1
  598.       CALL REMARK(" typing CNTR-] causes return to KERMIT-AOS")
  599. 23000 IF(.NOT.(STATUS.EQ.1))GOTO 23001
  600.       T=KGETCH(ICHAR,LOCALINFD)
  601.       IF(.NOT.(T.EQ.0))GOTO 23002
  602.       CALL REMARK("error in I/O using remote TTY")
  603.       CALL TIDK(3,IER)
  604.       CALL WAIT(1,2,IER)
  605.       CALL REMARK("returning to Kermit-AOS")
  606.       CALL WRSEQ(RMTOUTFD,CQ,1,IER)
  607.       RETURN
  608. 23002 CONTINUE
  609.       IF(.NOT.(ICHAR.EQ.ECHAR))GOTO 23004
  610.       CALL TIDK(3,IER)
  611.       CALL WAIT(1,2,IER)
  612.       CALL REMARK("returning to Kermit-AOS")
  613.       CALL WRSEQ(RMTOUTFD,CQ,1,IER)
  614.       RETURN
  615. 23004 CONTINUE
  616.       CALL KPUTCH(ICHAR,RMTOUTFD)
  617.       IF(.NOT.(IBM.EQ.-1))GOTO 23006
  618.       CALL KPUTCH(ICHAR,LOCALOUTFD)
  619. 23006 CONTINUE
  620. 23005 CONTINUE
  621.       GOTO 23000
  622. 23001 CONTINUE
  623.       RETURN
  624.       END
  625. CCCCCCCCCCCCCCCCCCCCCC  CTL.FR          CCCCCCCCCCCCCCCCCCCCCCCCCCC
  626.       INTEGER FUNCTION CTL(CH)
  627.       INTEGER CH
  628.       CTL=IXOR(CH,100K)
  629.       RETURN
  630.       END
  631. CCCCCCCCCCCCCCCCCCCCCC    FINDLN.FR     CCCCCCCCCCCCCCCCCCCCCCCCCCC
  632.       INTEGER FUNCTION FINDLN(LIN,APAT,A1,Z1)
  633.       IMPLICIT INTEGER (A-Z)
  634.       INTEGER LIN(132)
  635.       INTEGER APAT(128)
  636.       STATUS=-2
  637.       T1=A1
  638. 23000 IF(.NOT.(STATUS.EQ.-2))GOTO 23001
  639. 23002 IF(.NOT.((LIN(T1).NE.APAT(1).AND.(LIN(T1)).NE.10002)))GOTO 23003
  640.       T1=T1+1
  641.       GOTO 23002
  642. 23003 CONTINUE
  643.       IF(.NOT.(LIN(T1).EQ.10002))GOTO 23004
  644.       STATUS=0
  645.       GOTO 23005
  646. 23004 CONTINUE
  647.       A1=T1
  648.       T2=1
  649.       T3=T1
  650.       FLAG=0
  651. 23006 IF(.NOT.((FLAG.EQ.0).AND.(APAT(T2).NE.10002)))GOTO 23007
  652.       IF(.NOT.(APAT(T2).EQ.LIN(T1)))GOTO 23008
  653.       T1=T1+1
  654.       T2=T2+1
  655.       GOTO 23009
  656. 23008 CONTINUE
  657.       FLAG=1
  658. 23009 CONTINUE
  659.       GOTO 23006
  660. 23007 CONTINUE
  661.       IF(.NOT.(APAT(T2).EQ.10002))GOTO 23010
  662.       Z1=T1-1
  663.       STATUS=1
  664.       GOTO 23011
  665. 23010 CONTINUE
  666.       T1=T3+1
  667. 23011 CONTINUE
  668. 23005 CONTINUE
  669.       GOTO 23000
  670. 23001 CONTINUE
  671.       FINDLN=STATUS
  672.       RETURN
  673.       END
  674. CCCCCCCCCCCCCCCCCCCCCC FLUSH.FR         CCCCCCCCCCCCCCCCCCCCCCCCCCC
  675.       SUBROUTINE FLUSH(FD)
  676.       INTEGER FD
  677.       COMMON /CHANNEL/ CHANNEL(0:15), APOS, VPOS, LINEBUF(68,0:15), NC(0
  678.      *:15), IC(0:15), MD(0:15)
  679.       INTEGER CHANNEL
  680.       INTEGER APOS
  681.       INTEGER VPOS
  682.       INTEGER LINEBUF
  683.       INTEGER NC
  684.       INTEGER IC
  685.       INTEGER MD
  686.       IF(.NOT.(0 .LE. FD .AND. FD .LE. 15 .AND. CHANNEL(FD) .NE. 10001))
  687.      *GOTO 23000
  688.       IF(.NOT.(MD(FD) .EQ. 1 .AND. IC(FD) .GT. 1))GOTO 23002
  689.       BYTE(LINEBUF(1,FD),IC(FD)) = 0
  690.       CALL WRLIN (FD, LINEBUF(1,FD), NC(FD), IER)
  691.       CALL CHKIO (FD, IER)
  692. 23002 CONTINUE
  693.       IC(FD) = 1
  694.       NC(FD) = 0
  695. 23000 CONTINUE
  696.       RETURN
  697.       END
  698. CCCCCCCCCCCCCCCCCCCCCC HELP_KERMIT      CCCCCCCCCCCCCCCCCCCCCCCCCCC
  699.  CONNECT          - Enters into the 'CHAT' mode, whatever you typed on the
  700.                   - local keyboard is transmitted to the remote host, and
  701.                   - information from the remote host are transmitted to the
  702.                   - local terminal.  'CHAT' mode is used in establishing
  703.                   - login sessions and invoking remote KERMIT program.
  704.                   - CNTR-] will cause exit from 'CHAT' mode.
  705.    
  706.  EXIT             - EXIT from this KERMIT program and returns to the CLI.
  707.    
  708.  HELP             - Displays the content of this help file.
  709.    
  710.  QUIT             - QUIT from this KERMIT program and returns to the CLI.
  711.    
  712.  RECEIVE          - Enters the 'RECEIVE' state of file transfer mode,
  713.                   - program waits for in-coming packet with no time-out
  714.                   - detection capability provided.
  715.    
  716.  SEND             - Enters the 'SEND' state of file transfer mode, program
  717.                   - prompts for either a filename or a directory
  718.                   - of filenames (i.e. @directory) to be transmitted.
  719.    
  720.  SET IBM OFF      - In 'CHAT' mode, expects remote system to echo back
  721.                   - transmitted characters.  In file transfer mode, does
  722.                   - not wait for the detection of DC1 before sending out
  723.                   - the next packet.
  724.    
  725.  SET IBM ON       - In 'CHAT' mode, performs local echoing of transmitted
  726.                   - characters.  In file transfer mode, wait for the
  727.                   - detection of DC1 or CMS prompt from CMS before sending
  728.                   - out the packet.
  729.    
  730.  STATUS           - Displays the current values of various setting.
  731. CCCCCCCCCCCCCCCCCCCCCC IBMGETLIN.FR     CCCCCCCCCCCCCCCCCCCCCCCCCCC
  732.       INTEGER FUNCTION IBMGETLIN(BUFFER,CH)
  733.       IMPLICIT INTEGER (A-Z)
  734.       COMMON /KER/ N,RPSIZ,SPSIZ,PAD,NUMTRY,OLDTRY, FD,RMTINFD,RMTOUTFD,
  735.      *STATE,PADCHAR, EOL,ESCHAR,QUOTE,FILNAM(132),RECPKT(94 ), PACKET(94
  736.      * ),SIZE,MOREFD,IBM,HOST, LOCALINFD,LOCALOUTFD,SPEED
  737.       INTEGER BUFFER(132)
  738.       INTEGER CH,IDC1,STATUS,COUNT,IBYTE,T,GETSOH
  739.       IDC1=021K
  740.       STATUS=1
  741.       GETSOH=0
  742.       COUNT=1
  743. 23000 IF(.NOT.(STATUS.EQ.1))GOTO 23001
  744. 23002 IF(.NOT.(GETSOH.EQ.0))GOTO 23003
  745.       IBYTE=0
  746.       CALL RDSEQ(CH,IBYTE,1,IER)
  747.       T=ISHIFT(IBYTE,-8) .AND. 177K
  748.       IF(.NOT.(T.EQ.1 ))GOTO 23004
  749.       GETSOH=1
  750.       BUFFER(COUNT)=T
  751.       COUNT=COUNT+1
  752. 23004 CONTINUE
  753.       GOTO 23002
  754. 23003 CONTINUE
  755.       IBYTE=0
  756.       CALL RDSEQ(CH,IBYTE,1,IER)
  757.       T=ISHIFT(IBYTE,-8) .AND. 177K
  758.       IF(.NOT.(T.EQ.IDC1))GOTO 23006
  759.       STATUS=0
  760.       GOTO 23007
  761. 23006 CONTINUE
  762.       BUFFER(COUNT)=T
  763.       COUNT=COUNT+1
  764. 23007 CONTINUE
  765.       GOTO 23000
  766. 23001 CONTINUE
  767.       BUFFER(COUNT)=10002
  768.       RETURN
  769.       END
  770. CCCCCCCCCCCCCCCCCCCCCC  ITOC.FR         CCCCCCCCCCCCCCCCCCCCCCCCCCC
  771.       INTEGER FUNCTION ITOC(INT, STR, SIZE)
  772.       INTEGER IABS, MOD
  773.       INTEGER I, INT, INTVAL, J, K, SIZE
  774.       INTEGER STR(10000)
  775.       INTVAL = IABS(INT)
  776.       STR(1) = 10002
  777.       I = 1
  778. 23000 CONTINUE
  779.       I = I + 1
  780.       STR(I) = 48 + MOD(INTVAL,10)
  781.       INTVAL = INTVAL / 10
  782. 23001 IF(.NOT.(INTVAL .EQ. 0 .OR. I .GE. SIZE))GOTO 23000
  783. 23002 CONTINUE
  784.       IF(.NOT.(INT .LT. 0 .AND. I .LT. SIZE))GOTO 23003
  785.       I = I + 1
  786.       STR(I) = 45
  787. 23003 CONTINUE
  788.       ITOC = I - 1
  789.       J = 1
  790. 23005 IF(.NOT.(J .LT. I))GOTO 23007
  791.       K = STR(I)
  792.       STR(I) = STR(J)
  793.       STR(J) = K
  794.       I = I - 1
  795. 23006 J = J + 1
  796.       GOTO 23005
  797. 23007 CONTINUE
  798.       RETURN
  799.       END
  800. CCCCCCCCCCCCCCCCCCCCCC   GETCH.FR       CCCCCCCCCCCCCCCCCCCCCCCCCCC
  801.        INTEGER FUNCTION GETCH (C, FD)
  802.       INTEGER C, FD
  803.       COMMON /CHANNEL/ CHANNEL(0:15), APOS, VPOS, LINEBUF(68,0:15), NC(0
  804.      *:15), IC(0:15), MD(0:15)
  805.       INTEGER CHANNEL
  806.       INTEGER APOS
  807.       INTEGER VPOS
  808.       INTEGER LINEBUF
  809.       INTEGER NC
  810.       INTEGER IC
  811.       INTEGER MD
  812.       IF(.NOT.(0 .LE. FD .AND. FD .LE. 15 .AND. CHANNEL(FD) .NE. 10001))
  813.      *GOTO 23000
  814.       IF(.NOT.(MD(FD) .NE. 0))GOTO 23002
  815.       MD(FD) = 0
  816.       IC(FD) = 1
  817.       NC(FD) = 0
  818. 23002 CONTINUE
  819. 23004 CONTINUE
  820.       IF(.NOT.(NC(FD) .LT. IC(FD)))GOTO 23007
  821.       NC(FD) = 0
  822.       CALL RDLIN (FD, LINEBUF(1,FD), NC(FD), IER)
  823.       CALL CHKIO (FD, IER)
  824.       IC(FD) = 1
  825. 23007 CONTINUE
  826.       IF(.NOT.(NC(FD) .LT. IC(FD)))GOTO 23009
  827.       C = 10003
  828.       GOTO 23010
  829. 23009 CONTINUE
  830.       C = BYTE(LINEBUF(1,FD), IC(FD)) .AND. 177K
  831.       IC(FD) = IC(FD) + 1
  832. 23010 CONTINUE
  833. 23005 IF(.NOT.(C .EQ. 10003 .OR. C .NE. 0))GOTO 23004
  834. 23006 CONTINUE
  835.       GOTO 23001
  836. 23000 CONTINUE
  837.       C = 10003
  838. 23001 CONTINUE
  839.       GETCH=(C)
  840.       RETURN
  841.       END
  842. CCCCCCCCCCCCCCCCCCCCCC GETLIN.FR        CCCCCCCCCCCCCCCCCCCCCCCCCCC
  843.        INTEGER FUNCTION GETLIN(LINE, F)
  844.       INTEGER LINE(132), C, GETCH
  845.       INTEGER F
  846.       GETLIN = 0
  847. 23000 IF(.NOT.(GETCH(C, F) .NE. 10003))GOTO 23002
  848.       IF(.NOT.(C .EQ. 0))GOTO 23003
  849.       GOTO 23002
  850. 23003 CONTINUE
  851.       IF(.NOT.(GETLIN .LT. 132 - 1))GOTO 23005
  852.       GETLIN = GETLIN + 1
  853.       LINE(GETLIN) = C
  854. 23005 CONTINUE
  855.       IF(.NOT.(C .EQ. 10 .OR. C .EQ. 12))GOTO 23007
  856.       GOTO 23002
  857. 23007 CONTINUE
  858. 23001 GOTO 23000
  859. 23002 CONTINUE
  860.       LINE(GETLIN+1) = 10002
  861.       IF(.NOT.(GETLIN .EQ. 0 .AND. C .EQ. 10003))GOTO 23009
  862.       GETLIN = 10003
  863. 23009 CONTINUE
  864.       RETURN
  865.       END
  866. CCCCCCCCCCCCCCCCCCCCCC  KGETCH.FR       CCCCCCCCCCCCCCCCCCCCCCCCCCC
  867.       INTEGER FUNCTION KGETCH(T,CHAN)
  868.       INTEGER T,CHAN,X,IER
  869.       CALL RDSEQ(CHAN,X,1,IER)
  870.       IF(.NOT.(IER.NE.1))GOTO 23000
  871.       GOTO 100
  872. 23000 CONTINUE
  873.       T=ISHIFT(X,-8).AND. 177K
  874.       KGETCH=1
  875.       RETURN
  876. 100   CONTINUE
  877.       KGETCH=0
  878.       RETURN
  879.       END
  880. CCCCCCCCCCCCCCCCCCCCCC  KGETLIN.FR      CCCCCCCCCCCCCCCCCCCCCCCCCCC
  881.       INTEGER FUNCTION KGETLIN(ALIN,CH)
  882.       IMPLICIT INTEGER (A-Z)
  883.       COMMON /KER/ N,RPSIZ,SPSIZ,PAD,NUMTRY,OLDTRY, FD,RMTINFD,RMTOUTFD,
  884.      *STATE,PADCHAR, EOL,ESCHAR,QUOTE,FILNAM(132),RECPKT(94 ), PACKET(94
  885.      * ),SIZE,MOREFD,IBM,HOST, LOCALINFD,LOCALOUTFD,SPEED
  886.       INTEGER ALIN(132)
  887.       INTEGER BLIN(132)
  888.       INTEGER COUNT,IER
  889.       CALL RDLIN(CH,BLIN,COUNT,IER)
  890.       IF(.NOT.(IER.NE.1))GOTO 23000
  891.       KGETLIN=10001
  892.       GOTO 23001
  893. 23000 CONTINUE
  894.       KGETLIN=1
  895. 23001 CONTINUE
  896.       I=1
  897. 23002 IF(.NOT.(I.LE.COUNT))GOTO 23004
  898.       ALIN(I)=BYTE(BLIN,I) .AND. 177K
  899. 23003 I=I+1
  900.       GOTO 23002
  901. 23004 CONTINUE
  902.       IF(.NOT.(ALIN(COUNT).EQ.127))GOTO 23005
  903.       ALIN(COUNT)=13
  904. 23005 CONTINUE
  905.       ALIN(COUNT+1)=10002
  906.       RETURN
  907.       END
  908. CCCCCCCCCCCCCCCCCCCCCC  KPICK.FR        CCCCCCCCCCCCCCCCCCCCCCCCCCC
  909.       SUBROUTINE KPICK
  910.       IMPLICIT INTEGER (A-Z)
  911.       COMMON /KER/ N,RPSIZ,SPSIZ,PAD,NUMTRY,OLDTRY, FD,RMTINFD,RMTOUTFD,
  912.      *STATE,PADCHAR, EOL,ESCHAR,QUOTE,FILNAM(132),RECPKT(94 ), PACKET(94
  913.      * ),SIZE,MOREFD,IBM,HOST, LOCALINFD,LOCALOUTFD,SPEED
  914.       INTEGER IBYTE,STATUS,CS,CQ,COUNT
  915.       INTEGER ALIN(132)
  916.       CS=011423K
  917.       CQ=010421K
  918.       STATUS=1
  919.       IF(.NOT.(IBM.EQ.0))GOTO 23000
  920. 23002 IF(.NOT.(STATUS.EQ.1))GOTO 23003
  921.       CALL RDSEQ(RMTINFD,ALIN,1,IER)
  922.       CALL WRSEQ(LOCALOUTFD,ALIN,1,IER)
  923.       GOTO 23002
  924. 23003 CONTINUE
  925.       GOTO 23001
  926. 23000 CONTINUE
  927. 23004 IF(.NOT.(STATUS.EQ.1))GOTO 23005
  928.       CALL RDSEQ(RMTINFD,IBYTE,1,IER)
  929.       CALL WRSEQ(LOCALOUTFD,IBYTE,1,IER)
  930.       GOTO 23004
  931. 23005 CONTINUE
  932. 23001 CONTINUE
  933.       RETURN
  934.       END
  935. CCCCCCCCCCCCCCCCCCCCCC  KPUTCH.FR       CCCCCCCCCCCCCCCCCCCCCCCCCCC
  936.       SUBROUTINE KPUTCH(T,CHAN)
  937.       INTEGER T
  938.       INTEGER CH,IER,X
  939.       X=ISHIFT(T,8)
  940.       CALL WRSEQ(CHAN,X,1,IER)
  941.       IF(.NOT.(IER.NE.1))GOTO 23000
  942.       TYPE "error in kputch ",IER
  943. 23000 CONTINUE
  944.       RETURN
  945.       END
  946. CCCCCCCCCCCCCCCCCCCCCC LINKALL.CLI      CCCCCCCCCCCCCCCCCCCCCCCCCCC
  947. F5LD/TASKS=7/QCALLS KERMIT &
  948. AOPEN &
  949. BUFEMP BUFILL &
  950. CANT CHKIO CONNECT CTL &
  951. FINDLN FLUSH &
  952. IBMGETLIN ITOC &
  953. GETCH GETLIN &
  954. KGETCH KGETLIN KPICK KPUTCH &
  955. LENGTH &
  956. PACK PUTC PUTCH PUTDEC PUTINT PUTLIN PUTSTR &
  957. RATEXIT RATCLOSE RDATA RECSW REMARK REMOVE RFILE RINIT RPACK RPAR &
  958. SBREAK SCOPY SDATA SENDSW SEOF SFILE SINIT SPACK SPACK1 SPAR SSCOPY STDIO &
  959. STDOPEN STDSETUP &
  960. TOCHAR TTYCOOK TTYRAW &
  961. UNCHAR UNHUNG UPPER &
  962. VERIFY
  963. CCCCCCCCCCCCCCCCCCCCCC  LENGTH.FR       CCCCCCCCCCCCCCCCCCCCCCCCCCC
  964.        INTEGER FUNCTION LENGTH(STR)
  965.       INTEGER STR(10000)
  966.       LENGTH = 0
  967. 23000 IF(.NOT.(STR(LENGTH+1) .NE. 10002))GOTO 23002
  968. 23001 LENGTH = LENGTH + 1
  969.       GOTO 23000
  970. 23002 CONTINUE
  971.       RETURN
  972.       END
  973. CCCCCCCCCCCCCCCCCCCCCC  PACK.FR         CCCCCCCCCCCCCCCCCCCCCCCCCCC
  974.       INTEGER FUNCTION PACK (RSTRING, STRING, MAX0)
  975.       INTEGER STRING(10000), RSTRING(MAX0)
  976.       I = 1
  977. 23000 IF(.NOT.(I .LT. MAX0))GOTO 23002
  978.       BYTE(STRING,I) = RSTRING(I)
  979.       IF(.NOT.(RSTRING(I) .EQ. 10002))GOTO 23003
  980.       GOTO 23002
  981. 23003 CONTINUE
  982. 23001 I = I + 1
  983.       GOTO 23000
  984. 23002 CONTINUE
  985.       BYTE(STRING,I) = 0
  986.       PACK=(I-1)
  987.       RETURN
  988.       END
  989. CCCCCCCCCCCCCCCCCCCCCC PUTC.FR          CCCCCCCCCCCCCCCCCCCCCCCCCCC
  990.        SUBROUTINE PUTC(C)
  991.       INTEGER C
  992.       CALL PUTCH(C, 1)
  993.       RETURN
  994.       END
  995. CCCCCCCCCCCCCCCCCCCCCC   PUTCH.FR       CCCCCCCCCCCCCCCCCCCCCCCCCCC
  996.        SUBROUTINE PUTCH (C, FD)
  997.       INTEGER C, FD
  998.       COMMON /CHANNEL/ CHANNEL(0:15), APOS, VPOS, LINEBUF(68,0:15), NC(0
  999.      *:15), IC(0:15), MD(0:15)
  1000.       INTEGER CHANNEL
  1001.       INTEGER APOS
  1002.       INTEGER VPOS
  1003.       INTEGER LINEBUF
  1004.       INTEGER NC
  1005.       INTEGER IC
  1006.       INTEGER MD
  1007.       IF(.NOT.(0 .LE. FD .AND. FD .LE. 15 .AND. CHANNEL(FD) .NE. 10001))
  1008.      *GOTO 23000
  1009.       IF(.NOT.(MD(FD) .NE. 1))GOTO 23002
  1010.       MD(FD) = 1
  1011.       IC(FD) = 1
  1012.       NC(FD) = 0
  1013. 23002 CONTINUE
  1014.       IF(.NOT.(C .EQ. 10))GOTO 23004
  1015.       BYTE(LINEBUF(1,FD),IC(FD)) = 10
  1016.       IC(FD) = IC(FD) + 1
  1017.       CALL FLUSH (FD)
  1018.       GOTO 23005
  1019. 23004 CONTINUE
  1020.       BYTE(LINEBUF(1,FD),IC(FD)) = C
  1021.       IC(FD) = IC(FD) + 1
  1022.       IF(.NOT.(IC(FD) .GT. 132 .OR. C .EQ. 13))GOTO 23006
  1023.       CALL WRSEQ (FD, LINEBUF(1,FD), IC(FD), IER)
  1024.       CALL CHKIO (FD, IER)
  1025.       IC(FD) = 1
  1026.       GOTO 23007
  1027. 23006 CONTINUE
  1028.       IF(.NOT.(C .EQ. 12 .OR. C .EQ. 0))GOTO 23008
  1029.       CALL FLUSH (FD)
  1030. 23008 CONTINUE
  1031. 23007 CONTINUE
  1032. 23005 CONTINUE
  1033. 23000 CONTINUE
  1034.       RETURN
  1035.       END
  1036. CCCCCCCCCCCCCCCCCCCCCC  PUTDEC.FR       CCCCCCCCCCCCCCCCCCCCCCCCCCC
  1037.        SUBROUTINE PUTDEC(N, W)
  1038.       INTEGER N, W
  1039.       CALL PUTINT(N, W, 1)
  1040.       RETURN
  1041.       END
  1042. CCCCCCCCCCCCCCCCCCCCCC  PUTINT.FR       CCCCCCCCCCCCCCCCCCCCCCCCCCC
  1043.        SUBROUTINE PUTINT(N, W, F)
  1044.       INTEGER N, W, F
  1045.       INTEGER CHARS(10)
  1046.       INTEGER ITOC
  1047.       INTEGER JUNK
  1048.       JUNK = ITOC(N, CHARS, 10)
  1049.       CALL PUTSTR(CHARS, W, F)
  1050.       RETURN
  1051.       END
  1052. CCCCCCCCCCCCCCCCCCCCCC   PUTLIN.FR      CCCCCCCCCCCCCCCCCCCCCCCCCCC
  1053.        SUBROUTINE PUTLIN(B, F)
  1054.       INTEGER B(10000)
  1055.       INTEGER F, I
  1056.       I = 1
  1057. 23000 IF(.NOT.(B(I) .NE. 10002))GOTO 23002
  1058.       CALL PUTCH(B(I), F)
  1059. 23001 I = I + 1
  1060.       GOTO 23000
  1061. 23002 CONTINUE
  1062.       RETURN
  1063.       END
  1064. CCCCCCCCCCCCCCCCCCCCCC PUTSTR.FR        CCCCCCCCCCCCCCCCCCCCCCCCCCC
  1065.        SUBROUTINE PUTSTR(STR, W, F)
  1066.       INTEGER STR(132)
  1067.       INTEGER W, F, LEN, I, LENGTH
  1068.       LEN = LENGTH(STR)
  1069.       IF(.NOT.(W .GE. 0))GOTO 23000
  1070.       I = LEN + 1
  1071. 23002 IF(.NOT.(I .LE. W))GOTO 23004
  1072.       CALL PUTCH(32, F)
  1073. 23003 I = I + 1
  1074.       GOTO 23002
  1075. 23004 CONTINUE
  1076. 23000 CONTINUE
  1077.       I = 1
  1078. 23005 IF(.NOT.(STR(I) .NE. 10002))GOTO 23007
  1079.       CALL PUTCH(STR(I), F)
  1080. 23006 I = I + 1
  1081.       GOTO 23005
  1082. 23007 CONTINUE
  1083.       IF(.NOT.(W .LT. 0))GOTO 23008
  1084.       I = LEN + 1
  1085. 23010 IF(.NOT.(I .LE. -W))GOTO 23012
  1086.       CALL PUTCH(32, F)
  1087. 23011 I = I + 1
  1088.       GOTO 23010
  1089. 23012 CONTINUE
  1090. 23008 CONTINUE
  1091.       RETURN
  1092.       END
  1093. CCCCCCCCCCCCCCCCCCCCCC RATEXIT.FR       CCCCCCCCCCCCCCCCCCCCCCCCCCC
  1094.        SUBROUTINE RATEXIT
  1095.       COMMON /CHANNEL/ CHANNEL(0:15), APOS, VPOS, LINEBUF(68,0:15), NC(0
  1096.      *:15), IC(0:15), MD(0:15)
  1097.       INTEGER CHANNEL
  1098.       INTEGER APOS
  1099.       INTEGER VPOS
  1100.       INTEGER LINEBUF
  1101.       INTEGER NC
  1102.       INTEGER IC
  1103.       INTEGER MD
  1104.       DO23000 I = 0, 15
  1105.       CALL FLUSH (I)
  1106. 23000 CONTINUE
  1107. 23001 CONTINUE
  1108.       CALL EXIT
  1109.       END
  1110. CCCCCCCCCCCCCCCCCCCCCC RATCLOSE.FR      CCCCCCCCCCCCCCCCCCCCCCCCCCC
  1111.       SUBROUTINE RATCLOSE (FD)
  1112.       INTEGER FD
  1113.       COMMON /CHANNEL/ CHANNEL(0:15), APOS, VPOS, LINEBUF(68,0:15), NC(0
  1114.      *:15), IC(0:15), MD(0:15)
  1115.       INTEGER CHANNEL
  1116.       INTEGER APOS
  1117.       INTEGER VPOS
  1118.       INTEGER LINEBUF
  1119.       INTEGER NC
  1120.       INTEGER IC
  1121.       INTEGER MD
  1122.       IF(.NOT.(0 .LE. FD .AND. FD .LE. 15))GOTO 23000
  1123.       CALL FLUSH (FD)
  1124.       CALL CLOSE (FD, IER)
  1125.       CHANNEL(FD) = 10001
  1126.       MD(FD) = 2
  1127. 23000 CONTINUE
  1128.       RETURN
  1129.       END
  1130. CCCCCCCCCCCCCCCCCCCCCC  RDATA.FR        CCCCCCCCCCCCCCCCCCCCCCCCCCC
  1131.       INTEGER FUNCTION RDATA(X)
  1132.       IMPLICIT INTEGER (A-Z)
  1133.       COMMON /KER/ N,RPSIZ,SPSIZ,PAD,NUMTRY,OLDTRY, FD,RMTINFD,RMTOUTFD,
  1134.      *STATE,PADCHAR, EOL,ESCHAR,QUOTE,FILNAM(132),RECPKT(94 ), PACKET(94
  1135.      * ),SIZE,MOREFD,IBM,HOST, LOCALINFD,LOCALOUTFD,SPEED
  1136.       INTEGER NUM,LEN,STATUS
  1137.       INTEGER X,RPACK,TNUM
  1138.       IF(.NOT.(NUMTRY.GT.5 ))GOTO 23000
  1139.       RDATA=65
  1140.       RETURN
  1141. 23000 CONTINUE
  1142.       NUMTRY=NUMTRY+1
  1143. 23001 CONTINUE
  1144.       STATUS=RPACK(LEN,NUM,PACKET)
  1145.       IF(.NOT.(HOST.EQ.0))GOTO 23002
  1146.       CALL PUTDEC(NUM,4)
  1147.       CALL PUTC(13)
  1148.       CALL FLUSH(1)
  1149. 23002 CONTINUE
  1150.       IF(.NOT.(STATUS.EQ.68))GOTO 23004
  1151.       IF(.NOT.(NUM.NE.N))GOTO 23006
  1152.       IF(.NOT.(OLDTRY.GT.5 ))GOTO 23008
  1153.       RDATA=65
  1154.       RETURN
  1155. 23008 CONTINUE
  1156.       OLDTRY=OLDTRY+1
  1157. 23009 CONTINUE
  1158.       IF(.NOT.(NUM.EQ.(N-1)))GOTO 23010
  1159.       CALL SPAR(PACKET)
  1160.       CALL SPACK(89,NUM,6,PACKET)
  1161.       NUMTRY=0
  1162.       RDATA=STATE
  1163.       RETURN
  1164. 23010 CONTINUE
  1165.       RDATA=65
  1166.       RETURN
  1167. 23011 CONTINUE
  1168. 23006 CONTINUE
  1169.       CALL BUFEMP(PACKET,LEN)
  1170.       TNUM=N
  1171.       CALL SPACK(89,TNUM,0,0)
  1172.       OLDTRY=NUMTRY
  1173.       NUMTRY=0
  1174.       N=MOD((N+1),64)
  1175.       RDATA=68
  1176.       RETURN
  1177. 23004 CONTINUE
  1178.       IF(.NOT.(STATUS.EQ.70))GOTO 23012
  1179.       IF(.NOT.(OLDTRY.GT.5 ))GOTO 23014
  1180.       RDATA=65
  1181.       RETURN
  1182. 23014 CONTINUE
  1183.       OLDTRY=OLDTRY+1
  1184. 23015 CONTINUE
  1185.       IF(.NOT.(NUM.EQ.(N-1)))GOTO 23016
  1186.       CALL SPACK(89,NUM,0,0)
  1187.       NUMTRY=0
  1188.       RDATA=STATE
  1189.       RETURN
  1190. 23016 CONTINUE
  1191.       RDATA=65
  1192.       RETURN
  1193. 23017 CONTINUE
  1194.       GOTO 23013
  1195. 23012 CONTINUE
  1196.       IF(.NOT.(STATUS.EQ.90))GOTO 23018
  1197.       IF(.NOT.(NUM.NE.N))GOTO 23020
  1198.       RDATA=65
  1199.       RETURN
  1200. 23020 CONTINUE
  1201.       TNUM=N
  1202.       CALL SPACK(89,TNUM,0,0)
  1203.       CALL RATCLOSE(FD)
  1204.       N=MOD((N+1),64)
  1205.       RDATA=70
  1206.       RETURN
  1207. 23018 CONTINUE
  1208.       IF(.NOT.(STATUS.EQ.0))GOTO 23022
  1209.       RDATA=STATE
  1210.       TNUM=N
  1211.       CALL SPACK(78,TNUM,0,0)
  1212.       RETURN
  1213. 23022 CONTINUE
  1214.       RDATA=65
  1215. 23023 CONTINUE
  1216. 23019 CONTINUE
  1217. 23013 CONTINUE
  1218. 23005 CONTINUE
  1219.       RETURN
  1220.       END
  1221. CCCCCCCCCCCCCCCCCCCCCC  RECSW.FR        CCCCCCCCCCCCCCCCCCCCCCCCCCC
  1222.       INTEGER FUNCTION RECSW(X)
  1223.       IMPLICIT INTEGER (A-Z)
  1224.       COMMON /KER/ N,RPSIZ,SPSIZ,PAD,NUMTRY,OLDTRY, FD,RMTINFD,RMTOUTFD,
  1225.      *STATE,PADCHAR, EOL,ESCHAR,QUOTE,FILNAM(132),RECPKT(94 ), PACKET(94
  1226.      * ),SIZE,MOREFD,IBM,HOST, LOCALINFD,LOCALOUTFD,SPEED
  1227.       INTEGER X
  1228.       INTEGER RDATA,RFILE,RINIT,STATUS
  1229.       STATUS=1
  1230.       STATE=82
  1231.       N=0
  1232.       NUMTRY=0
  1233.       EOL=13
  1234.       CALL TTYRAW
  1235.       IF(.NOT.(HOST.EQ.0))GOTO 23000
  1236.       TASK UNHUNG, ID=2, PRI=255
  1237. 23000 CONTINUE
  1238. 23002 IF(.NOT.(STATUS.EQ.1))GOTO 23003
  1239.       IF(.NOT.(STATE.EQ.68))GOTO 23004
  1240.       STATE=RDATA(X)
  1241.       GOTO 23005
  1242. 23004 CONTINUE
  1243.       IF(.NOT.(STATE.EQ.70))GOTO 23006
  1244.       STATE=RFILE(X)
  1245.       GOTO 23007
  1246. 23006 CONTINUE
  1247.       IF(.NOT.(STATE.EQ.82))GOTO 23008
  1248.       STATE=RINIT(X)
  1249.       GOTO 23009
  1250. 23008 CONTINUE
  1251.       IF(.NOT.(STATE.EQ.67))GOTO 23010
  1252.       RECSW=-1
  1253.       IF(.NOT.(HOST.EQ.0))GOTO 23012
  1254.       CALL TIDK(2,IER)
  1255.       CALL WAIT(1,2,IER)
  1256. 23012 CONTINUE
  1257.       CALL TTYCOOK
  1258.       RETURN
  1259. 23010 CONTINUE
  1260.       IF(.NOT.(STATE.EQ.65))GOTO 23014
  1261.       RECSW=0
  1262.       IF(.NOT.(HOST.EQ.0))GOTO 23016
  1263.       CALL TIDK(2,IER)
  1264.       CALL WAIT(1,2,IER)
  1265. 23016 CONTINUE
  1266.       CALL TTYCOOK
  1267.       RETURN
  1268. 23014 CONTINUE
  1269. 23011 CONTINUE
  1270. 23009 CONTINUE
  1271. 23007 CONTINUE
  1272. 23005 CONTINUE
  1273.       GOTO 23002
  1274. 23003 CONTINUE
  1275.       CALL TTYCOOK
  1276.       RETURN
  1277.       END
  1278. CCCCCCCCCCCCCCCCCCCCCC REMARK.FR        CCCCCCCCCCCCCCCCCCCCCCCCCCC
  1279.        SUBROUTINE REMARK (STRING)
  1280.       INTEGER STRING
  1281.       INTEGER C
  1282.       I=1
  1283. 23000 CONTINUE
  1284.       C = BYTE(STRING,I)
  1285.       IF(.NOT.(C .EQ. 0))GOTO 23003
  1286.       GOTO 23002
  1287. 23003 CONTINUE
  1288.       CALL PUTCH (C, 2)
  1289. 23001 I=I+1
  1290.       GOTO 23000
  1291. 23002 CONTINUE
  1292.       CALL PUTCH (10, 2)
  1293.       RETURN
  1294.       END
  1295. CCCCCCCCCCCCCCCCCCCCCC REMOVE.FR        CCCCCCCCCCCCCCCCCCCCCCCCCCC
  1296.        SUBROUTINE REMOVE(NAME)
  1297.       INTEGER NAME(50)
  1298.       INTEGER PNAME(50)
  1299.       INTEGER PACK, IER
  1300.       IER = PACK (NAME, PNAME, 50)
  1301.       CALL DFILW (PNAME, IER)
  1302.       RETURN
  1303.       END
  1304. CCCCCCCCCCCCCCCCCCCCCC  RFILE.FR        CCCCCCCCCCCCCCCCCCCCCCCCCCC
  1305.       INTEGER FUNCTION RFILE(X)
  1306.       IMPLICIT INTEGER (A-Z)
  1307.       COMMON /KER/ N,RPSIZ,SPSIZ,PAD,NUMTRY,OLDTRY, FD,RMTINFD,RMTOUTFD,
  1308.      *STATE,PADCHAR, EOL,ESCHAR,QUOTE,FILNAM(132),RECPKT(94 ), PACKET(94
  1309.      * ),SIZE,MOREFD,IBM,HOST, LOCALINFD,LOCALOUTFD,SPEED
  1310.       INTEGER NUM,LEN,STATUS,RPACK,X,TNUM
  1311.       INTEGER AONE,BONE,A12
  1312.       INTEGER ALIN(132)
  1313.       INTEGER RECEIVING(12)
  1314.       DATA RECEIVING(1),RECEIVING(2),RECEIVING(3),RECEIVING(4),RECEIVING
  1315.      *(5),RECEIVING(6),RECEIVING(7),RECEIVING(8),RECEIVING(9),RECEIVING(
  1316.      *10),RECEIVING(11),RECEIVING(12)/32,82,101,99,101,105,118,105,110,1
  1317.      *03,32,10002/
  1318.       IF(.NOT.(NUMTRY.GT.5 ))GOTO 23000
  1319.       RFILE=65
  1320.       RETURN
  1321. 23000 CONTINUE
  1322.       NUMTRY=NUMTRY+1
  1323. 23001 CONTINUE
  1324.       STATUS=RPACK(LEN,NUM,PACKET)
  1325.       IF(.NOT.(STATUS.EQ.83))GOTO 23002
  1326.       IF(.NOT.(OLDTRY.GT.5 ))GOTO 23004
  1327.       RFILE=65
  1328.       RETURN
  1329. 23004 CONTINUE
  1330.       OLDTRY=OLDTRY+1
  1331. 23005 CONTINUE
  1332.       IF(.NOT.(NUM.EQ.(N-1)))GOTO 23006
  1333.       CALL SPAR(PACKET)
  1334.       CALL SPACK(89,NUM,6,PACKET)
  1335.       NUMTRY=0
  1336.       RFILE=STATE
  1337.       RETURN
  1338. 23006 CONTINUE
  1339.       RFILE=65
  1340.       RETURN
  1341. 23007 CONTINUE
  1342.       GOTO 23003
  1343. 23002 CONTINUE
  1344.       IF(.NOT.(STATUS.EQ.90))GOTO 23008
  1345.       IF(.NOT.(OLDTRY.GT.5 ))GOTO 23010
  1346.       RFILE=65
  1347.       RETURN
  1348. 23010 CONTINUE
  1349.       OLDTRY=OLDTRY+1
  1350. 23011 CONTINUE
  1351.       IF(.NOT.(NUM.EQ.(N-1)))GOTO 23012
  1352.       CALL SPACK(89,NUM,0,0)
  1353.       NUMTRY=0
  1354.       RFILE=STATE
  1355.       RETURN
  1356. 23012 CONTINUE
  1357.       RFILE=65
  1358.       RETURN
  1359. 23013 CONTINUE
  1360.       GOTO 23009
  1361. 23008 CONTINUE
  1362.       IF(.NOT.(STATUS.EQ.70))GOTO 23014
  1363.       IF(.NOT.(NUM.NE.N))GOTO 23016
  1364.       RFILE=65
  1365.       RETURN
  1366. 23016 CONTINUE
  1367.       PACKET(LEN+1)=10
  1368.       PACKET(LEN+2)=10002
  1369.       CALL VERIFY(PACKET)
  1370.       IF(.NOT.(HOST.EQ.0))GOTO 23018
  1371.       AONE=1
  1372.       BONE=1
  1373.       A12=12
  1374.       CALL SCOPY(RECEIVING,AONE,ALIN,BONE)
  1375.       CALL SCOPY(PACKET,AONE,ALIN,A12)
  1376.       CALL PUTLIN(ALIN,LOCALOUTFD)
  1377.       CALL PUTCH(10,LOCALOUTFD)
  1378.       CALL REMARK(" Packet # ")
  1379. 23018 CONTINUE
  1380.       FD=AOPEN(PACKET,1)
  1381.       IF(.NOT.(FD.EQ.10001))GOTO 23020
  1382.       RFILE=65
  1383.       RETURN
  1384. 23020 CONTINUE
  1385.       TNUM=N
  1386.       CALL SPACK(89,TNUM,0,0)
  1387.       ODLTRY=NUMTRY
  1388.       NUMTRY=0
  1389.       N=MOD((N+1),64)
  1390.       RFILE=68
  1391.       RETURN
  1392. 23014 CONTINUE
  1393.       IF(.NOT.(STATUS.EQ.66))GOTO 23022
  1394.       IF(.NOT.(NUM.NE.N))GOTO 23024
  1395.       RFILE=65
  1396.       RETURN
  1397. 23024 CONTINUE
  1398.       TNUM=N
  1399.       CALL SPACK(89,TNUM,0,0)
  1400.       RFILE=67
  1401.       RETURN
  1402. 23022 CONTINUE
  1403.       IF(.NOT.(STATUS.EQ.0))GOTO 23026
  1404.       RFILE=STATE
  1405.       TNUM=N
  1406.       CALL SPACK(78,TNUM,0,0)
  1407.       RETURN
  1408. 23026 CONTINUE
  1409.       RFILE=65
  1410. 23027 CONTINUE
  1411. 23023 CONTINUE
  1412. 23015 CONTINUE
  1413. 23009 CONTINUE
  1414. 23003 CONTINUE
  1415.       RETURN
  1416.       END
  1417. CCCCCCCCCCCCCCCCCCCCCC  RINIT.FR    CCCCCCCCCCCCCCCCCCCCCCCCCCC
  1418.       INTEGER FUNCTION RINIT(X)
  1419.       IMPLICIT INTEGER (A-Z)
  1420.       COMMON /KER/ N,RPSIZ,SPSIZ,PAD,NUMTRY,OLDTRY, FD,RMTINFD,RMTOUTFD,
  1421.      *STATE,PADCHAR, EOL,ESCHAR,QUOTE,FILNAM(132),RECPKT(94 ), PACKET(94
  1422.      * ),SIZE,MOREFD,IBM,HOST, LOCALINFD,LOCALOUTFD,SPEED
  1423.       INTEGER LEN,NUM,STATUS,RPACK,X,TNUM
  1424.       IF(.NOT.(NUMTRY.GT.5 ))GOTO 23000
  1425.       RINIT=65
  1426.       RETURN
  1427. 23000 CONTINUE
  1428.       NUMTRY=NUMTRY+1
  1429. 23001 CONTINUE
  1430.       STATUS=RPACK(LEN,NUM,PACKET)
  1431.       IF(.NOT.(STATUS.EQ.83))GOTO 23002
  1432.       CALL RPAR(PACKET)
  1433.       CALL SPAR(PACKET)
  1434.       TNUM=N
  1435.       CALL SPACK(89,TNUM,6,PACKET)
  1436.       OLDTRY=NUMTRY
  1437.       NUMTRY=0
  1438.       N=MOD((N+1),64)
  1439.       RINIT=70
  1440.       RETURN
  1441. 23002 CONTINUE
  1442.       IF(.NOT.(STATUS.EQ.0))GOTO 23004
  1443.       RINIT=STATE
  1444.       TNUM=N
  1445.       CALL SPACK(78,TNUM,0,0)
  1446.       RETURN
  1447. 23004 CONTINUE
  1448.       RINIT=65
  1449. 23005 CONTINUE
  1450. 23003 CONTINUE
  1451.       RETURN
  1452.       END
  1453. CCCCCCCCCCCCCCCCCCCCCC RPACK.FR         CCCCCCCCCCCCCCCCCCCCCCCCCCC
  1454.       INTEGER FUNCTION RPACK(LEN,NUM,XDATA)
  1455.       IMPLICIT INTEGER (A-Z)
  1456.       COMMON /KER/ N,RPSIZ,SPSIZ,PAD,NUMTRY,OLDTRY, FD,RMTINFD,RMTOUTFD,
  1457.      *STATE,PADCHAR, EOL,ESCHAR,QUOTE,FILNAM(132),RECPKT(94 ), PACKET(94
  1458.      * ),SIZE,MOREFD,IBM,HOST, LOCALINFD,LOCALOUTFD,SPEED
  1459.       INTEGER LEN,NUM,CH
  1460.       INTEGER KGETLIN
  1461.       INTEGER XDATA(1)
  1462.       INTEGER I,COUNT,STATUS,UNCHAR,J,K,IDC1,T1,IBYTE
  1463.       INTEGER XCOUNT,TEMP,MAILID
  1464.       INTEGER CHKSUM,T,XTYPE,BUFFER(132)
  1465.       IDC1=03400K
  1466.       CHKSUM=0
  1467.       IF(.NOT.(IBM.EQ.-1))GOTO 23000
  1468.       XCOUNT=8
  1469.       GOTO 23001
  1470. 23000 CONTINUE
  1471.       XCOUNT=2
  1472. 23001 CONTINUE
  1473.       I=1
  1474.       CH=RMTINFD
  1475. 23002 IF(.NOT.(I.LE.XCOUNT))GOTO 23003
  1476.       IF(.NOT.(IBM.EQ.-1))GOTO 23004
  1477.       STATUS=IBMGETLIN(BUFFER,CH)
  1478.       GOTO 23005
  1479. 23004 CONTINUE
  1480.       STATUS=GETLIN(BUFFER,CH)
  1481. 23005 CONTINUE
  1482.       COUNT=1
  1483. 23006 IF(.NOT.((BUFFER(COUNT).NE.1 ).AND.(BUFFER(COUNT).NE.10002)))GOTO
  1484.      *23007
  1485.       COUNT=COUNT+1
  1486.       GOTO 23006
  1487. 23007 CONTINUE
  1488.       IF(.NOT.(BUFFER(COUNT).EQ.1 ))GOTO 23008
  1489.       K=COUNT+1
  1490.       CHKSUM=BUFFER(K)
  1491.       LEN=UNCHAR(BUFFER(K))-3
  1492.       K=K+1
  1493.       CHKSUM=CHKSUM+BUFFER(K)
  1494.       NUM=UNCHAR(BUFFER(K))
  1495.       K=K+1
  1496.       XTYPE=BUFFER(K)
  1497.       CHKSUM=CHKSUM+BUFFER(K)
  1498.       K=K+1
  1499.       J=1
  1500. 23010 IF(.NOT.(J.LE.LEN))GOTO 23012
  1501.       XDATA(J)=BUFFER(K)
  1502.       CHKSUM=CHKSUM+BUFFER(K)
  1503.       K=K+1
  1504.       COUNT=J
  1505. 23011 J=J+1
  1506.       GOTO 23010
  1507. 23012 CONTINUE
  1508.       XDATA(COUNT+1)=0
  1509.       T=BUFFER(K)
  1510.       CHKSUM=(CHKSUM+(CHKSUM.AND.192)/64).AND.63
  1511.       IF(.NOT.(CHKSUM.NE.UNCHAR(T)))GOTO 23013
  1512.       RPACK=0
  1513.       RETURN
  1514. 23013 CONTINUE
  1515.       RPACK=XTYPE
  1516.       RETURN
  1517. 23008 CONTINUE
  1518.       I=I+1
  1519.       GOTO 23002
  1520. 23003 CONTINUE
  1521.       RPACK=0
  1522.       RETURN
  1523.       END
  1524. CCCCCCCCCCCCCCCCCCCCCC   RPAR.FR        CCCCCCCCCCCCCCCCCCCCCCCCCCC
  1525.       SUBROUTINE RPAR(XDATA)
  1526.       IMPLICIT INTEGER (A-Z)
  1527.       COMMON /KER/ N,RPSIZ,SPSIZ,PAD,NUMTRY,OLDTRY, FD,RMTINFD,RMTOUTFD,
  1528.      *STATE,PADCHAR, EOL,ESCHAR,QUOTE,FILNAM(132),RECPKT(94 ), PACKET(94
  1529.      * ),SIZE,MOREFD,IBM,HOST, LOCALINFD,LOCALOUTFD,SPEED
  1530.       INTEGER XDATA(1)
  1531.       INTEGER UNCHAR,CTL
  1532.       SPSIZ=UNCHAR(XDATA(1))
  1533.       PAD=UNCHAR(XDATA(3))
  1534.       PADCHAR=CTL(XDATA(4))
  1535.       EOL=UNCHAR(XDATA(5))
  1536.       QUOTE=XDATA(6)
  1537.       RETURN
  1538.       END
  1539. CCCCCCCCCCCCCCCCCCCCCC  SBREAK.FR       CCCCCCCCCCCCCCCCCCCCCCCCCCC
  1540.       INTEGER FUNCTION SBREAK(X)
  1541.       IMPLICIT INTEGER (A-Z)
  1542.       COMMON /KER/ N,RPSIZ,SPSIZ,PAD,NUMTRY,OLDTRY, FD,RMTINFD,RMTOUTFD,
  1543.      *STATE,PADCHAR, EOL,ESCHAR,QUOTE,FILNAM(132),RECPKT(94 ), PACKET(94
  1544.      * ),SIZE,MOREFD,IBM,HOST, LOCALINFD,LOCALOUTFD,SPEED
  1545.       INTEGER NUM,LEN,RPACK,STATUS,X,TNUM
  1546.       IF(.NOT.(NUMTRY.GT.5 ))GOTO 23000
  1547.       SBREAK=65
  1548.       RETURN
  1549. 23000 CONTINUE
  1550.       NUMTRY=NUMTRY+1
  1551. 23001 CONTINUE
  1552.       TNUM=N
  1553.       CALL SPACK(66,TNUM,0,PACKET)
  1554.       STATUS=RPACK(LEN,NUM,RECPKT)
  1555.       IF(.NOT.(STATUS.EQ.78))GOTO 23002
  1556.       IF(.NOT.(N.NE.(NUM-1)))GOTO 23004
  1557.       SBREAK=STATE
  1558.       RETURN
  1559. 23004 CONTINUE
  1560.       GOTO 23003
  1561. 23002 CONTINUE
  1562.       IF(.NOT.(STATUS.EQ.89))GOTO 23006
  1563.       IF(.NOT.(N.NE.NUM))GOTO 23008
  1564.       SBREAK=STATE
  1565.       RETURN
  1566. 23008 CONTINUE
  1567.       NUMTRY=0
  1568.       N=MOD((N+1),64)
  1569.       SBREAK=67
  1570.       RETURN
  1571. 23006 CONTINUE
  1572.       IF(.NOT.(STATUS.EQ.0))GOTO 23010
  1573.       SBREAK=STATE
  1574.       RETURN
  1575. 23010 CONTINUE
  1576.       SBREAK=65
  1577. 23011 CONTINUE
  1578. 23007 CONTINUE
  1579. 23003 CONTINUE
  1580.       RETURN
  1581.       END
  1582. CCCCCCCCCCCCCCCCCCCCCC  SCOPY.FR        CCCCCCCCCCCCCCCCCCCCCCCCCCC
  1583.        SUBROUTINE SCOPY(FROM, I, TO, J)
  1584.       INTEGER FROM(10000), TO(10000)
  1585.       INTEGER I, J, K1, K2
  1586.       K2 = J
  1587.       K1 = I
  1588. 23000 IF(.NOT.(FROM(K1) .NE. 10002))GOTO 23002
  1589.       TO(K2) = FROM(K1)
  1590.       K2 = K2 + 1
  1591. 23001 K1 = K1 + 1
  1592.       GOTO 23000
  1593. 23002 CONTINUE
  1594.       TO(K2) = 10002
  1595.       RETURN
  1596.       END
  1597. CCCCCCCCCCCCCCCCCCCCCC  SDATA.FR        CCCCCCCCCCCCCCCCCCCCCCCCCCC
  1598.       INTEGER FUNCTION SDATA(X)
  1599.       IMPLICIT INTEGER (A-Z)
  1600.       COMMON /KER/ N,RPSIZ,SPSIZ,PAD,NUMTRY,OLDTRY, FD,RMTINFD,RMTOUTFD,
  1601.      *STATE,PADCHAR, EOL,ESCHAR,QUOTE,FILNAM(132),RECPKT(94 ), PACKET(94
  1602.      * ),SIZE,MOREFD,IBM,HOST, LOCALINFD,LOCALOUTFD,SPEED
  1603.       INTEGER X,NUM,LEN,BUFILL,STATUS,RPACK,TNUM
  1604.       IF(.NOT.(NUMTRY.GT.5 ))GOTO 23000
  1605.       SDATA=65
  1606.       RETURN
  1607. 23000 CONTINUE
  1608.       NUMTRY=NUMTRY+1
  1609. 23001 CONTINUE
  1610.       TNUM=N
  1611.       CALL SPACK(68,TNUM,SIZE,PACKET)
  1612.       IF(.NOT.(HOST.EQ.0))GOTO 23002
  1613.       CALL PUTDEC(TNUM,4)
  1614.       CALL PUTC(13)
  1615.       CALL FLUSH(1)
  1616. 23002 CONTINUE
  1617.       STATUS=RPACK(LEN,NUM,RECPKT)
  1618.       IF(.NOT.((STATUS.EQ.89).AND.(N.EQ.(NUM+1))))GOTO 23004
  1619.       STATUS=RPACK(LEN,NUM,RECPKT)
  1620. 23004 CONTINUE
  1621.       IF(.NOT.(STATUS.EQ.78))GOTO 23006
  1622.       IF(.NOT.(N.NE.(NUM-1)))GOTO 23008
  1623.       SDATA=STATE
  1624.       RETURN
  1625. 23008 CONTINUE
  1626.       GOTO 23007
  1627. 23006 CONTINUE
  1628.       IF(.NOT.(STATUS.EQ.89))GOTO 23010
  1629.       IF(.NOT.(N.NE.NUM))GOTO 23012
  1630.       SDATA=STATE
  1631.       RETURN
  1632. 23012 CONTINUE
  1633.       NUMTRY=0
  1634.       N=MOD((N+1),64)
  1635.       SIZE=BUFILL(PACKET)
  1636.       IF(.NOT.(SIZE.EQ.10003))GOTO 23014
  1637.       SDATA=90
  1638.       RETURN
  1639. 23014 CONTINUE
  1640.       SDATA=68
  1641.       RETURN
  1642. 23010 CONTINUE
  1643.       IF(.NOT.(STATUS.EQ.0))GOTO 23016
  1644.       SDATA=STATE
  1645.       RETURN
  1646. 23016 CONTINUE
  1647.       SDATA=65
  1648. 23017 CONTINUE
  1649. 23011 CONTINUE
  1650. 23007 CONTINUE
  1651.       RETURN
  1652.       END
  1653. CCCCCCCCCCCCCCCCCCCCCC  SENDSW.FR       CCCCCCCCCCCCCCCCCCCCCCCCCCC
  1654.       INTEGER FUNCTION SENDSW(X)
  1655.       IMPLICIT INTEGER (A-Z)
  1656.       COMMON /KER/ N,RPSIZ,SPSIZ,PAD,NUMTRY,OLDTRY, FD,RMTINFD,RMTOUTFD,
  1657.      *STATE,PADCHAR, EOL,ESCHAR,QUOTE,FILNAM(132),RECPKT(94 ), PACKET(94
  1658.      * ),SIZE,MOREFD,IBM,HOST, LOCALINFD,LOCALOUTFD,SPEED
  1659.       INTEGER X,STATUS
  1660.       INTEGER SDATA,SFILE,SEOF,SINIT,SBREAK
  1661.       STATE=83
  1662.       N=0
  1663.       EOL=13
  1664.       NUMTRY=0
  1665.       STATUS=1
  1666.       CALL TTYRAW
  1667.       IF(.NOT.(HOST.EQ.0))GOTO 23000
  1668.       TASK UNHUNG,ID=2,PRI=255
  1669. 23000 CONTINUE
  1670. 23002 IF(.NOT.(STATUS.EQ.1))GOTO 23003
  1671.       IF(.NOT.(STATE.EQ.68))GOTO 23004
  1672.       STATE=SDATA(X)
  1673.       GOTO 23005
  1674. 23004 CONTINUE
  1675.       IF(.NOT.(STATE.EQ.70))GOTO 23006
  1676.       STATE=SFILE(X)
  1677.       GOTO 23007
  1678. 23006 CONTINUE
  1679.       IF(.NOT.(STATE.EQ.90))GOTO 23008
  1680.       STATE=SEOF(X)
  1681.       GOTO 23009
  1682. 23008 CONTINUE
  1683.       IF(.NOT.(STATE.EQ.83))GOTO 23010
  1684.       STATE=SINIT(X)
  1685.       GOTO 23011
  1686. 23010 CONTINUE
  1687.       IF(.NOT.(STATE.EQ.66))GOTO 23012
  1688.       STATE=SBREAK(X)
  1689.       GOTO 23013
  1690. 23012 CONTINUE
  1691.       IF(.NOT.(STATE.EQ.67))GOTO 23014
  1692.       SENDSW=-1
  1693.       IF(.NOT.(HOST.EQ.0))GOTO 23016
  1694.       CALL TIDK(2,IER)
  1695.       CALL WAIT(1,2,IER)
  1696. 23016 CONTINUE
  1697.       CALL TTYCOOK
  1698.       RETURN
  1699. 23014 CONTINUE
  1700.       IF(.NOT.(STATE.EQ.65))GOTO 23018
  1701.       SENDSW=0
  1702.       IF(.NOT.(HOST.EQ.0))GOTO 23020
  1703.       CALL TIDK(2,IER)
  1704.       CALL WAIT(1,2,IER)
  1705. 23020 CONTINUE
  1706.       CALL TTYCOOK
  1707.       RETURN
  1708. 23018 CONTINUE
  1709.       STATUS=0
  1710.       SENDSW=0
  1711.       IF(.NOT.(HOST.EQ.0))GOTO 23022
  1712.       CALL TIDK(2,IER)
  1713.       CALL WAIT(1,2,IER)
  1714. 23022 CONTINUE
  1715. 23019 CONTINUE
  1716. 23015 CONTINUE
  1717. 23013 CONTINUE
  1718. 23011 CONTINUE
  1719. 23009 CONTINUE
  1720. 23007 CONTINUE
  1721. 23005 CONTINUE
  1722.       GOTO 23002
  1723. 23003 CONTINUE
  1724.       CALL TTYCOOK
  1725.       RETURN
  1726.       END
  1727. CCCCCCCCCCCCCCCCCCCCCC  SEOF.FR         CCCCCCCCCCCCCCCCCCCCCCCCCCC
  1728.       INTEGER FUNCTION SEOF(X)
  1729.       IMPLICIT INTEGER (A-Z)
  1730.       COMMON /KER/ N,RPSIZ,SPSIZ,PAD,NUMTRY,OLDTRY, FD,RMTINFD,RMTOUTFD,
  1731.      *STATE,PADCHAR, EOL,ESCHAR,QUOTE,FILNAM(132),RECPKT(94 ), PACKET(94
  1732.      * ),SIZE,MOREFD,IBM,HOST, LOCALINFD,LOCALOUTFD,SPEED
  1733.       INTEGER NUM,LEN,STATUS,RPACK,X,TNUM,TEMP
  1734.       INTEGER XY
  1735.       INTEGER ALIN(132)
  1736.       INTEGER AONE,BONE
  1737.       IF(.NOT.(NUMTRY.GT.5 ))GOTO 23000
  1738.       SEOF=65
  1739.       RETURN
  1740. 23000 CONTINUE
  1741.       NUMTRY=NUMTRY+1
  1742. 23001 CONTINUE
  1743.       AONE=1
  1744.       BONE=1
  1745.       TNUM=N
  1746.       CALL SPACK(90,TNUM,0,PACKET)
  1747.       STATUS=RPACK(LEN,NUM,RECPKT)
  1748.       IF(.NOT.(STATUS.EQ.78))GOTO 23002
  1749.       IF(.NOT.(N.NE.(NUM-1)))GOTO 23004
  1750.       SEOF=STATE
  1751.       RETURN
  1752. 23004 CONTINUE
  1753.       GOTO 23003
  1754. 23002 CONTINUE
  1755.       IF(.NOT.(STATUS.EQ.89))GOTO 23006
  1756.       IF(.NOT.(N.NE.NUM))GOTO 23008
  1757.       SEOF=STATE
  1758.       RETURN
  1759. 23008 CONTINUE
  1760.       NUMTRY=0
  1761.       CALL RATCLOSE(FD)
  1762.       N=MOD((N+1),64)
  1763.       TEMP=GETLIN(FILNAM,MOREFD)
  1764.       IF(.NOT.(TEMP.EQ.10003))GOTO 23010
  1765.       CALL RATCLOSE(MOREFD)
  1766.       SEOF=66
  1767.       RETURN
  1768. 23010 CONTINUE
  1769.       FD=AOPEN(FILNAM,0)
  1770.       IF(.NOT.(FD.EQ.10001))GOTO 23012
  1771.       TEMP=1
  1772. 23014 IF(.NOT.(TEMP.EQ.1))GOTO 23015
  1773.       XY=GETLIN(ALIN,MOREFD)
  1774.       IF(.NOT.(XY.EQ.10003))GOTO 23016
  1775.       SEOF=66
  1776.       CALL RATCLOSE(MOREFD)
  1777.       RETURN
  1778. 23016 CONTINUE
  1779.       CALL SCOPY(ALIN,AONE,FILNAM,BONE)
  1780.       FD=AOPEN(FILANM,0)
  1781.       IF(.NOT.(FD.NE.10001))GOTO 23018
  1782.       TEMP=0
  1783. 23018 CONTINUE
  1784. 23017 CONTINUE
  1785.       GOTO 23014
  1786. 23015 CONTINUE
  1787.       SEOF=70
  1788.       RETURN
  1789. 23012 CONTINUE
  1790.       SEOF=70
  1791.       RETURN
  1792. 23013 CONTINUE
  1793. 23011 CONTINUE
  1794.       GOTO 23007
  1795. 23006 CONTINUE
  1796.       IF(.NOT.(STATUS.EQ.0))GOTO 23020
  1797.       SEOF=STATE
  1798.       RETURN
  1799. 23020 CONTINUE
  1800.       SEOF=65
  1801. 23021 CONTINUE
  1802. 23007 CONTINUE
  1803. 23003 CONTINUE
  1804.       RETURN
  1805.       END
  1806. CCCCCCCCCCCCCCCCCCCCCC  SFILE.FR        CCCCCCCCCCCCCCCCCCCCCCCCCCC
  1807.       INTEGER FUNCTION SFILE(X)
  1808.       IMPLICIT INTEGER (A-Z)
  1809.       COMMON /KER/ N,RPSIZ,SPSIZ,PAD,NUMTRY,OLDTRY, FD,RMTINFD,RMTOUTFD,
  1810.      *STATE,PADCHAR, EOL,ESCHAR,QUOTE,FILNAM(132),RECPKT(94 ), PACKET(94
  1811.      * ),SIZE,MOREFD,IBM,HOST, LOCALINFD,LOCALOUTFD,SPEED
  1812.       INTEGER NUM,LEN,COUNT,RPACK,BUFILL,X,TNUM
  1813.       INTEGER AONE,ATEN,BONE
  1814.       INTEGER ALIN(132)
  1815.       INTEGER SENDING(10)
  1816.       DATA SENDING(1),SENDING(2),SENDING(3),SENDING(4),SENDING(5),SENDIN
  1817.      *G(6),SENDING(7),SENDING(8),SENDING(9),SENDING(10)/32,83,101,110,10
  1818.      *0,105,110,103,32,10002/
  1819.       IF(.NOT.(HOST.EQ.0))GOTO 23000
  1820.       AONE=1
  1821.       BONE=1
  1822.       ATEN=10
  1823.       CALL SCOPY(SENDING,AONE,ALIN,BONE)
  1824.       CALL SCOPY(FILNAM,AONE,ALIN,ATEN)
  1825.       CALL PUTLIN(ALIN,LOCALOUTFD)
  1826.       CALL REMARK(" Packet # ")
  1827. 23000 CONTINUE
  1828.       IF(.NOT.(NUMTRY.GT.5 ))GOTO 23002
  1829.       SFILE=65
  1830.       RETURN
  1831. 23002 CONTINUE
  1832.       NUMTRY=NUMTRY+1
  1833. 23003 CONTINUE
  1834.       LEN=1
  1835. 23004 IF(.NOT.(FILNAM(LEN).NE.10002))GOTO 23005
  1836.       LEN=LEN+1
  1837.       GOTO 23004
  1838. 23005 CONTINUE
  1839.       LEN=LEN-2
  1840.       TNUM=N
  1841.       CALL SPACK(70,TNUM,LEN,FILNAM)
  1842.       STATUS=RPACK(LEN,NUM,RECPKT)
  1843.       IF(.NOT.(STATUS.EQ.78))GOTO 23006
  1844.       IF(.NOT.(N.NE.(NUM-1)))GOTO 23008
  1845.       SFILE=STATE
  1846.       RETURN
  1847. 23008 CONTINUE
  1848.       GOTO 23007
  1849. 23006 CONTINUE
  1850.       IF(.NOT.(STATUS.EQ.89))GOTO 23010
  1851.       IF(.NOT.(N.NE.NUM))GOTO 23012
  1852.       SFILE=STATE
  1853.       RETURN
  1854. 23012 CONTINUE
  1855.       NUMTRY=0
  1856.       N=MOD((N+1),64)
  1857.       SIZE=BUFILL(PACKET)
  1858.       SFILE=68
  1859.       RETURN
  1860. 23010 CONTINUE
  1861.       IF(.NOT.(STATUS.EQ.0))GOTO 23014
  1862.       SFILE=STATE
  1863.       RETURN
  1864. 23014 CONTINUE
  1865.       SFILE=65
  1866.       RETURN
  1867. 23015 CONTINUE
  1868. 23011 CONTINUE
  1869. 23007 CONTINUE
  1870.       RETURN
  1871.       END
  1872. CCCCCCCCCCCCCCCCCCCCCC    SINIT.FR   CCCCCCCCCCCCCCCCCCCCCCCCCCC
  1873.       INTEGER FUNCTION SINIT(X)
  1874.       IMPLICIT INTEGER (A-Z)
  1875.       COMMON /KER/ N,RPSIZ,SPSIZ,PAD,NUMTRY,OLDTRY, FD,RMTINFD,RMTOUTFD,
  1876.      *STATE,PADCHAR, EOL,ESCHAR,QUOTE,FILNAM(132),RECPKT(94 ), PACKET(94
  1877.      * ),SIZE,MOREFD,IBM,HOST, LOCALINFD,LOCALOUTFD,SPEED
  1878.       INTEGER NUM,LEN,STATUS,RPACK,X,TNUM,TEMP
  1879.       INTEGER XY
  1880.       INTEGER ALIN(132)
  1881.       INTEGER AONE,BONE
  1882.       INTEGER MOREFILE(9)
  1883.       DATA MOREFILE(1),MOREFILE(2),MOREFILE(3),MOREFILE(4),MOREFILE(5),M
  1884.      *OREFILE(6),MOREFILE(7),MOREFILE(8),MOREFILE(9)/77,79,82,69,70,73,7
  1885.      *6,69,10002/
  1886.       IF(.NOT.(NUMTRY.GT.5 ))GOTO 23000
  1887.       SINIT=65
  1888.       RETURN
  1889. 23000 CONTINUE
  1890.       NUMTRY=NUMTRY+1
  1891. 23001 CONTINUE
  1892.       AONE=1
  1893.       BONE=1
  1894.       CALL SPAR(PACKET)
  1895.       TNUM=N
  1896.       CALL SPACK(83,TNUM,6,PACKET)
  1897.       STATUS=RPACK(LEN,NUM,RECPKT)
  1898.       IF(.NOT.(STATUS.EQ.78))GOTO 23002
  1899.       IF(.NOT.(N.NE.(NUM-1)))GOTO 23004
  1900.       SINIT=STATE
  1901.       RETURN
  1902. 23004 CONTINUE
  1903.       GOTO 23003
  1904. 23002 CONTINUE
  1905.       IF(.NOT.(STATUS.EQ.89))GOTO 23006
  1906.       IF(.NOT.(N.NE.NUM))GOTO 23008
  1907.       SINIT=STATE
  1908.       RETURN
  1909. 23008 CONTINUE
  1910.       CALL RPAR(RECPKT)
  1911.       IF(.NOT.(EOL.EQ.0))GOTO 23010
  1912.       EOL=10
  1913. 23010 CONTINUE
  1914.       IF(.NOT.(QUOTE.EQ.0))GOTO 23012
  1915.       QUOTE=35
  1916. 23012 CONTINUE
  1917.       NUMTRY=0
  1918.       N=MOD((N+1),64)
  1919.       MOREFD=AOPEN(MOREFILE,0)
  1920.       TEMP=1
  1921. 23014 IF(.NOT.(TEMP.EQ.1))GOTO 23015
  1922.       XY=GETLIN(ALIN,MOREFD)
  1923.       IF(.NOT.(XY.EQ.10003))GOTO 23016
  1924.       SINIT=65
  1925.       CALL RATCLOSE(MOREFD)
  1926.       RETURN
  1927. 23016 CONTINUE
  1928.       CALL SCOPY(ALIN,AONE,FILNAM,BONE)
  1929.       FD=AOPEN(FILNAM,0)
  1930.       IF(.NOT.(FD.NE.10001))GOTO 23018
  1931.       TEMP=0
  1932. 23018 CONTINUE
  1933. 23017 CONTINUE
  1934.       GOTO 23014
  1935. 23015 CONTINUE
  1936.       SINIT=70
  1937.       RETURN
  1938. 23006 CONTINUE
  1939.       IF(.NOT.(STATUS.EQ.0))GOTO 23020
  1940.       SINIT=STATE
  1941.       RETURN
  1942. 23020 CONTINUE
  1943.       SINIT=65
  1944. 23021 CONTINUE
  1945. 23007 CONTINUE
  1946. 23003 CONTINUE
  1947.       RETURN
  1948.       END
  1949. CCCCCCCCCCCCCCCCCCCCCC    SPACK.FR      CCCCCCCCCCCCCCCCCCCCCCCCCCC
  1950.       SUBROUTINE SPACK(XTYPE,NUM,LEN,XDATA)
  1951.       IMPLICIT INTEGER (A-Z)
  1952.       COMMON /KER/ N,RPSIZ,SPSIZ,PAD,NUMTRY,OLDTRY, FD,RMTINFD,RMTOUTFD,
  1953.      *STATE,PADCHAR, EOL,ESCHAR,QUOTE,FILNAM(132),RECPKT(94 ), PACKET(94
  1954.      * ),SIZE,MOREFD,IBM,HOST, LOCALINFD,LOCALOUTFD,SPEED
  1955.       INTEGER XTYPE,XDATA(1)
  1956.       INTEGER NUM,LEN,CH
  1957.       INTEGER I,IER,COUNT,TOCHAR
  1958.       INTEGER CHKSUM,BUFFER(100)
  1959.       CH=RMTOUTFD
  1960.       I=1
  1961. 23000 IF(.NOT.(I.LE.PAD))GOTO 23001
  1962.       CALL KPUTCH(PADCHAR,CH)
  1963.       I=I+1
  1964.       GOTO 23000
  1965. 23001 CONTINUE
  1966.       COUNT=1
  1967.       BUFFER(COUNT)=1
  1968.       COUNT=COUNT+1
  1969.       CHKSUM=TOCHAR(LEN+3)
  1970.       BUFFER(COUNT)=TOCHAR(LEN+3)
  1971.       COUNT=COUNT+1
  1972.       CHKSUM=CHKSUM+TOCHAR(NUM)
  1973.       BUFFER(COUNT)=TOCHAR(NUM)
  1974.       COUNT=COUNT+1
  1975.       CHKSUM=CHKSUM+XTYPE
  1976.       BUFFER(COUNT)=XTYPE
  1977.       COUNT=COUNT+1
  1978.       I=1
  1979. 23002 IF(.NOT.(I.LE.LEN))GOTO 23004
  1980.       BUFFER(COUNT)=XDATA(I)
  1981.       COUNT=COUNT+1
  1982.       CHKSUM=CHKSUM+XDATA(I)
  1983. 23003 I=I+1
  1984.       GOTO 23002
  1985. 23004 CONTINUE
  1986.       CHKSUM=(CHKSUM+(CHKSUM.AND.192)/64).AND.63
  1987.       BUFFER(COUNT)=TOCHAR(CHKSUM)
  1988.       COUNT=COUNT+1
  1989.       BUFFER(COUNT)=EOL
  1990.       BUFFER(COUNT+1)=10002
  1991.       COUNT=1
  1992.       CH=RMTOUTFD
  1993. 23005 IF(.NOT.(BUFFER(COUNT).NE.10002))GOTO 23006
  1994.       CALL KPUTCH(BUFFER(COUNT),CH)
  1995.       COUNT=COUNT+1
  1996.       GOTO 23005
  1997. 23006 CONTINUE
  1998.       RETURN
  1999.       END
  2000. CCCCCCCCCCCCCCCCCCCCCC  SPACK1.FR       CCCCCCCCCCCCCCCCCCCCCCCCCCC
  2001.       SUBROUTINE SPACK1(XTYPE,NUM,LEN,XDATA)
  2002.       IMPLICIT INTEGER (A-Z)
  2003.       COMMON /KER/ N,RPSIZ,SPSIZ,PAD,NUMTRY,OLDTRY, FD,RMTINFD,RMTOUTFD,
  2004.      *STATE,PADCHAR, EOL,ESCHAR,QUOTE,FILNAM(132),RECPKT(94 ), PACKET(94
  2005.      * ),SIZE,MOREFD,IBM,HOST, LOCALINFD,LOCALOUTFD,SPEED
  2006.       INTEGER XTYPE,XDATA(1)
  2007.       INTEGER NUM,LEN,CH
  2008.       INTEGER I,IER,COUNT,TOCHAR
  2009.       INTEGER CHKSUM,BUFFER(100)
  2010.       CH=RMTOUTFD
  2011.       I=1
  2012. 23000 IF(.NOT.(I.LE.PAD))GOTO 23001
  2013.       CALL KPUTCH(PADCHAR,CH)
  2014.       I=I+1
  2015.       GOTO 23000
  2016. 23001 CONTINUE
  2017.       COUNT=1
  2018.       BUFFER(COUNT)=1
  2019.       COUNT=COUNT+1
  2020.       CHKSUM=TOCHAR(LEN+3)
  2021.       BUFFER(COUNT)=TOCHAR(LEN+3)
  2022.       COUNT=COUNT+1
  2023.       CHKSUM=CHKSUM+TOCHAR(NUM)
  2024.       BUFFER(COUNT)=TOCHAR(NUM)
  2025.       COUNT=COUNT+1
  2026.       CHKSUM=CHKSUM+XTYPE
  2027.       BUFFER(COUNT)=XTYPE
  2028.       COUNT=COUNT+1
  2029.       I=1
  2030. 23002 IF(.NOT.(I.LE.LEN))GOTO 23004
  2031.       BUFFER(COUNT)=XDATA(I)
  2032.       COUNT=COUNT+1
  2033.       CHKSUM=CHKSUM+XDATA(I)
  2034. 23003 I=I+1
  2035.       GOTO 23002
  2036. 23004 CONTINUE
  2037.       CHKSUM=(CHKSUM+(CHKSUM.AND.192)/64).AND.63
  2038.       BUFFER(COUNT)=TOCHAR(CHKSUM)
  2039.       COUNT=COUNT+1
  2040.       BUFFER(COUNT)=EOL
  2041.       BUFFER(COUNT+1)=10002
  2042.       COUNT=1
  2043.       CH=RMTOUTFD
  2044. 23005 IF(.NOT.(BUFFER(COUNT).NE.10002))GOTO 23006
  2045.       CALL KPUTCH(BUFFER(COUNT),CH)
  2046.       COUNT=COUNT+1
  2047.       GOTO 23005
  2048. 23006 CONTINUE
  2049.       RETURN
  2050.       END
  2051. CCCCCCCCCCCCCCCCCCCCCC  SPAR.FR         CCCCCCCCCCCCCCCCCCCCCCCCCCC
  2052.       SUBROUTINE SPAR(XDATA)
  2053.       IMPLICIT INTEGER (A-Z)
  2054.       COMMON /KER/ N,RPSIZ,SPSIZ,PAD,NUMTRY,OLDTRY, FD,RMTINFD,RMTOUTFD,
  2055.      *STATE,PADCHAR, EOL,ESCHAR,QUOTE,FILNAM(132),RECPKT(94 ), PACKET(94
  2056.      * ),SIZE,MOREFD,IBM,HOST, LOCALINFD,LOCALOUTFD,SPEED
  2057.       INTEGER XDATA(1)
  2058.       INTEGER CTL,TOCHAR
  2059.       XDATA(1)=TOCHAR(94 )
  2060.       XDATA(2)=TOCHAR(0)
  2061.       XDATA(3)=TOCHAR(0 )
  2062.       XDATA(4)=CTL(0 )
  2063.       XDATA(5)=TOCHAR(13 )
  2064.       XDATA(6)=35
  2065.       RETURN
  2066.       END
  2067. CCCCCCCCCCCCCCCCCCCCCC  SSCOPY.FR       CCCCCCCCCCCCCCCCCCCCCCCCCCC
  2068.       SUBROUTINE SSCOPY (FROM, TO)
  2069.       INTEGER FROM(1), TO(1)
  2070.       I = 0
  2071. 23000 CONTINUE
  2072.       I=I+1
  2073.       TO(I)=FROM(I)
  2074. 23001 IF(.NOT.(((TO(I).AND.177400K).EQ.0) .OR. ((TO(I).AND.377K).EQ.0)))
  2075.      *GOTO 23000
  2076. 23002 CONTINUE
  2077.       RETURN
  2078.       END
  2079. CCCCCCCCCCCCCCCCCCCCCC    STDIO.FR  CCCCCCCCCCCCCCCCCCCCCCCCCCC
  2080.       SUBROUTINE STDIO (STDIN, STDOUT, STDERR, STDCOM)                  ;00003
  2081.       INTEGER           STDIN, STDOUT, STDERR, STDCOM                   ;00004
  2082.       INCLUDE "F5ERR.FR"        ;NEEDED TO DEFINE EREOF BELOW           ;00072
  2083.       PARAMETER NULL = 0        ;ASCII NULL                             ;00074
  2084.       PARAMETER DEL  = 255      ;ASCII DEL                              ;00075
  2085.       INTEGER ARG(70), SW(2)                                            ;00077
  2086.       INTEGER INNAME(70), OUTNAME(70), ERRNAME(70)                      ;00078
  2087.       LOGICAL ISET, OSET, PIPE                                          ;00079
  2088.       LOGICAL APPOUT, DELERR                                            ;00080
  2089.       LOGICAL PSW, ISW, OSW, LSW, ESW, ASW, DSW                         ;00081
  2090.       LOGICAL NULLARG, COMEOF                                           ;00082
  2091.       COMMON /STD/ SINNAME, SOUTNAME, SERRNAME, LPTNAME                 ;00084
  2092.       INTEGER SINNAME(3), SOUTNAME(4), SERRNAME(4), LPTNAME(3)          ;00085
  2093.       DATA SINNAME  / "ST", "DI", "N<0>" /                              ;00086
  2094.       DATA SOUTNAME / "ST", "DO", "UT", 0 /                             ;00087
  2095.       DATA SERRNAME / "ST", "DE", "RR", 0 /                             ;00088
  2096.       DATA LPTNAME  / "$L", "PT", 0 /                                   ;00089
  2097.       CALL SSCOPY (SINNAME, INNAME)                                     ;00093
  2098.       CALL GCOUT (OUTNAME, IER)                                         ;00094
  2099.       CALL GCOUT (ERRNAME, IER)                                         ;00095
  2100.       ISET = .FALSE.                                                    ;00096
  2101.       OSET = .FALSE.                                                    ;00097
  2102.       PIPE = .FALSE.                                                    ;00098
  2103.       COMEOF = .FALSE.                                                  ;00099
  2104.       CALL COMINIT(STDCOM,IER)                                          ;00102
  2105.       CALL CHECK(IER)                                                   ;00103
  2106.       ASSIGN 32758 TO I32759                                            ;00106
  2107.       GO TO 32759                                                       ;00106
  2108. 32758 IF(.NOT.(PSW)) GO TO 32757                                        ;00107
  2109.       ASSIGN 32755 TO I32756                                            ;00107
  2110.       GO TO 32756                                                       ;00107
  2111. 32755 CONTINUE                                                          ;00107
  2112. 32757 IF(.NOT.(ISW)) GO TO 32754                                        ;00108
  2113.       ASSIGN 32752 TO I32753                                            ;00108
  2114.       GO TO 32753                                                       ;00108
  2115. 32752 CONTINUE                                                          ;00108
  2116. 32754 IF(.NOT.(OSW)) GO TO 32751                                        ;00109
  2117.       ASSIGN 32749 TO I32750                                            ;00109
  2118.       GO TO 32750                                                       ;00109
  2119. 32749 CONTINUE                                                          ;00109
  2120. 32751 IF(.NOT.(LSW)) GO TO 32748                                        ;00110
  2121.       ASSIGN 32746 TO I32747                                            ;00110
  2122.       GO TO 32747                                                       ;00110
  2123. 32746 CONTINUE                                                          ;00110
  2124. 32748 IF(.NOT.(ESW)) GO TO 32745                                        ;00111
  2125.       ASSIGN 32743 TO I32744                                            ;00111
  2126.       GO TO 32744                                                       ;00111
  2127. 32743 CONTINUE                                                          ;00111
  2128. 32745 APPOUT = ASW                                                      ;00112
  2129.       DELERR = DSW                                                      ;00113
  2130. 32742 CONTINUE                                                          ;00116
  2131.       ASSIGN 32740 TO I32759                                            ;00117
  2132.       GO TO 32759                                                       ;00117
  2133. 32740 IF(COMEOF) GO TO 32741                                            ;00118
  2134.       IF(.NOT.(PSW)) GO TO 32739                                        ;00119
  2135.       ASSIGN 32738 TO I32756                                            ;00120
  2136.       GO TO 32756                                                       ;00120
  2137. 32738 DELERR = DELERR .OR. DSW                                          ;00121
  2138.       APPOUT = APPOUT .OR. ASW                                          ;00122
  2139. 32739 IF(.NOT.(ISW)) GO TO 32737                                        ;00124
  2140.       IF(.NOT.(NULLARG)) GO TO 32733                                    ;00125
  2141.       ASSIGN 32736 TO I32753                                            ;00125
  2142.       GO TO 32753                                                       ;00125
  2143. 32732 CONTINUE                                                          ;00126
  2144. 32736 CONTINUE                                                          ;00127
  2145. 32737 IF(.NOT.(OSW)) GO TO 32731                                        ;00128
  2146.       IF(.NOT.(NULLARG)) GO TO 32729                                    ;00129
  2147.       ASSIGN 32730 TO I32750                                            ;00129
  2148.       GO TO 32750                                                       ;00129
  2149. 32729 ASSIGN 32726 TO I32727                                            ;00130
  2150.       GO TO 32727                                                       ;00130
  2151. 32726 CONTINUE                                                          ;00130
  2152. 32730 CONTINUE                                                          ;00131
  2153. 32731 IF(.NOT.(LSW)) GO TO 32725                                        ;00132
  2154.       IF(.NOT.(NULLARG)) GO TO 32723                                    ;00133
  2155.       ASSIGN 32724 TO I32747                                            ;00133
  2156.       GO TO 32747                                                       ;00133
  2157. 32723 ASSIGN 32721 TO I32727                                            ;00134
  2158.       GO TO 32727                                                       ;00134
  2159. 32721 CONTINUE                                                          ;00134
  2160. 32724 CONTINUE                                                          ;00135
  2161. 32725 IF(.NOT.(ESW)) GO TO 32742                                        ;00136
  2162.       IF(.NOT.(NULLARG)) GO TO 32716                                    ;00137
  2163.       ASSIGN 32719 TO I32744                                            ;00137
  2164.       GO TO 32744                                                       ;00137
  2165. 32715 CONTINUE                                                          ;00138
  2166. 32719 CONTINUE                                                          ;00139
  2167.       GO TO 32742                                                       ;00140
  2168. 32741 IF(.NOT.(PIPE)) GO TO 32714                                       ;00142
  2169.       CALL DFILW (SINNAME, IER)                                         ;00143
  2170.       CALL RENAME (SOUTNAME, SINNAME, IER)                              ;00144
  2171. 32714 IF(.NOT.(STDIN .GE. 0)) GO TO 32713                               ;00148
  2172.       CALL OPEN (STDIN, INNAME, 2, IER)                                 ;00149
  2173. 32713 IF(.NOT.(STDOUT .GE. 0)) GO TO 32712                              ;00152
  2174.       IF(.NOT.(APPOUT)) CALL DFILW (OUTNAME, IER)                       ;00153
  2175.       CALL CFILW (OUTNAME, 2, IER)                                      ;00154
  2176.       CALL APPEND (STDOUT, OUTNAME, 0, IER)                             ;00155
  2177.       IF (IER .NE. 1) STOP "Can't open STDOUT"                          ;00156
  2178. 32712 IF(.NOT.(STDERR .GE. 0)) GO TO 32711                              ;00159
  2179.       IF (DELERR) CALL DFILW (ERRNAME, IER)                             ;00160
  2180.       CALL CFILW (ERRNAME, 2, IER)                                      ;00161
  2181.       CALL APPEND (STDERR, ERRNAME, 0, IER)                             ;00162
  2182.       IF (IER .NE. 1) STOP "Can't open STDERR"                          ;00163
  2183. 32711 RETURN                                                            ;00166
  2184. 32759 CONTINUE                                                          ;00168
  2185.       CALL COMARG(STDCOM,ARG,SW,IER)                                    ;00169
  2186.       IF (IER .NE. 1 .AND. IER .NE. EREOF) CALL CHECK(IER)              ;00170
  2187.       COMEOF = (IER .NE. 1) .OR. BYTE(ARG,1) .EQ. DEL                   ;00172
  2188.       NULLARG = COMEOF .OR. BYTE(ARG,1) .EQ. NULL                       ;00173
  2189.       PSW = ITEST(SW(1), 0) .EQ. 1                                      ;00175
  2190.       ISW = ITEST(SW(1), 7) .EQ. 1                                      ;00176
  2191.       OSW = ITEST(SW(1), 1) .EQ. 1                                      ;00177
  2192.       LSW = ITEST(SW(1), 4) .EQ. 1                                      ;00178
  2193.       ESW = ITEST(SW(1),11) .EQ. 1                                      ;00179
  2194.       DSW = ITEST(SW(1),12) .EQ. 1                                      ;00180
  2195.       ASW = ITEST(SW(1),15) .EQ. 1                                      ;00181
  2196.       GO TO I32759                                                      ;00182
  2197. 32756 CONTINUE                                                          ;00184
  2198.       IF(.NOT.(ISET)) CALL SSCOPY (SINNAME, INNAME)                     ;00185
  2199.       IF(.NOT.(OSET)) CALL SSCOPY (SOUTNAME, OUTNAME)                   ;00186
  2200.       ISET = .TRUE.                                                     ;00187
  2201.       OSET = .TRUE.                                                     ;00188
  2202.       PIPE = .TRUE.                                                     ;00189
  2203.       GO TO I32756                                                      ;00190
  2204. 32753 CONTINUE                                                          ;00192
  2205.       CALL GCIN (INNAME, IER)                                           ;00193
  2206.       ISET = .TRUE.                                                     ;00194
  2207.       GO TO I32753                                                      ;00195
  2208. 32750 CONTINUE                                                          ;00197
  2209.       CALL SSCOPY (SOUTNAME, OUTNAME)                                   ;00198
  2210.       OSET = .TRUE.                                                     ;00199
  2211.       GO TO I32750                                                      ;00200
  2212. 32747 CONTINUE                                                          ;00202
  2213.       CALL SSCOPY (LPTNAME, OUTNAME)                                    ;00203
  2214.       OSET = .TRUE.                                                     ;00204
  2215.       GO TO I32747                                                      ;00205
  2216. 32744 CONTINUE                                                          ;00207
  2217.       CALL SSCOPY (SERRNAME, ERRNAME)                                   ;00208
  2218.       GO TO I32744                                                      ;00209
  2219. 32733 CONTINUE                                                          ;00211
  2220.       CALL SSCOPY (ARG, INNAME)                                         ;00212
  2221.       ISET = .TRUE.                                                     ;00213
  2222.       GO TO 32732                                                       ;00214
  2223. 32727 CONTINUE                                                          ;00216
  2224.       CALL SSCOPY (ARG, OUTNAME)                                        ;00217
  2225.       OSET = .TRUE.                                                     ;00218
  2226.       GO TO I32727                                                      ;00219
  2227. 32716 CONTINUE                                                          ;00221
  2228.       CALL SSCOPY (ARG, ERRNAME)                                        ;00222
  2229.       GO TO 32715                                                       ;00223
  2230.       END                                                               ;00225
  2231. CCCCCCCCCCCCCCCCCCCCCC STDOPEN.FR       CCCCCCCCCCCCCCCCCCCCCCCCCCC
  2232.       SUBROUTINE STDOPEN
  2233.       COMMON /CHANNEL/ CHANNEL(0:15), APOS, VPOS, LINEBUF(68,0:15), NC(0
  2234.      *:15), IC(0:15), MD(0:15)
  2235.       INTEGER CHANNEL
  2236.       INTEGER APOS
  2237.       INTEGER VPOS
  2238.       INTEGER LINEBUF
  2239.       INTEGER NC
  2240.       INTEGER IC
  2241.       INTEGER MD
  2242.       CALL STDIO (0, 1, 2, 3)
  2243.       CALL STDSETUP(0, 1, 2)
  2244.       RETURN
  2245.       END
  2246. CCCCCCCCCCCCCCCCCCCCCC  STDSETUP.FR     CCCCCCCCCCCCCCCCCCCCCCCCCCC
  2247.       SUBROUTINE STDSETUP (FDI, FDO, FDE)
  2248.       INTEGER FDI, FDO, FDE
  2249.       COMMON /CHANNEL/ CHANNEL(0:15), APOS, VPOS, LINEBUF(68,0:15), NC(0
  2250.      *:15), IC(0:15), MD(0:15)
  2251.       INTEGER CHANNEL
  2252.       INTEGER APOS
  2253.       INTEGER VPOS
  2254.       INTEGER LINEBUF
  2255.       INTEGER NC
  2256.       INTEGER IC
  2257.       INTEGER MD
  2258.       DATA CHANNEL /10001, 15*10001/
  2259.       DATA APOS / 32767 /
  2260.       DATA VPOS / 32767 /
  2261.       DATA NC / 0, 15*0 /
  2262.       DATA IC / 1, 15*1 /
  2263.       DATA MD / 2, 15*2 /
  2264.       CHANNEL(3) = 0
  2265.       CHANNEL(6) = 1
  2266.       CHANNEL(10) = 1
  2267.       CHANNEL(11) = 0
  2268.       CHANNEL(12) = 1
  2269.       IF(.NOT.(FDI.GE.0))GOTO 23000
  2270.       CHANNEL(FDI) = 0
  2271. 23000 CONTINUE
  2272.       IF(.NOT.(FDO.GE.0))GOTO 23002
  2273.       CHANNEL(FDO) = 1
  2274. 23002 CONTINUE
  2275.       IF(.NOT.(FDE.GE.0))GOTO 23004
  2276.       CHANNEL(FDE) = 1
  2277. 23004 CONTINUE
  2278.       RETURN
  2279.       END
  2280. CCCCCCCCCCCCCCCCCCCCCC  TOCHAR.FR      CCCCCCCCCCCCCCCCCCCCCCCCCCC
  2281.       INTEGER FUNCTION TOCHAR(CH)
  2282.       INTEGER CH
  2283.       TOCHAR=CH+32
  2284.       RETURN
  2285.       END
  2286. CCCCCCCCCCCCCCCCCCCCCC   TTYCOOK.FR     CCCCCCCCCCCCCCCCCCCCCCCCCCC
  2287.       SUBROUTINE TTYCOOK
  2288.       IMPLICIT INTEGER (A-Z)
  2289.       COMMON /KER/ N,RPSIZ,SPSIZ,PAD,NUMTRY,OLDTRY, FD,RMTINFD,RMTOUTFD,
  2290.      *STATE,PADCHAR, EOL,ESCHAR,QUOTE,FILNAM(132),RECPKT(94 ), PACKET(94
  2291.      * ),SIZE,MOREFD,IBM,HOST, LOCALINFD,LOCALOUTFD,SPEED
  2292.       INTEGER IER
  2293.       INTEGER XCHAR(3)
  2294.       IF(.NOT.(HOST.EQ.-1))GOTO 23000
  2295.       CALL QGCHR(000000K,"@console",XCHAR,IER)
  2296.       CALL ISET(XCHAR(1),0)
  2297.       CALL ISET(XCHAR(1),1)
  2298.       CALL ICLR(XCHAR(2),15)
  2299.       CALL QSCHR(000000K,"@console",XCHAR,IER)
  2300.       GOTO 23001
  2301. 23000 CONTINUE
  2302.       IF(.NOT.(SPEED.EQ.0))GOTO 23002
  2303.       CALL QGCHR(000000K,"@con11",XCHAR,IER)
  2304.       CALL ISET(XCHAR(1),0)
  2305.       CALL ISET(XCHAR(1),1)
  2306.       CALL ICLR(XCHAR(2),15)
  2307.       CALL QSCHR(000000K,"@con11",XCHAR,IER)
  2308.       GOTO 23003
  2309. 23002 CONTINUE
  2310.       CALL QGCHR(000000K,"@con4",XCHAR,IER)
  2311.       CALL ISET(XCHAR(1),0)
  2312.       CALL ISET(XCHAR(1),1)
  2313.       CALL ICLR(XCHAR(2),15)
  2314.       CALL QSCHR(000000K,"@con4",XCHAR,IER)
  2315. 23003 CONTINUE
  2316. 23001 CONTINUE
  2317.       RETURN
  2318.       END
  2319. CCCCCCCCCCCCCCCCCCCCCC TTYRAW.FR        CCCCCCCCCCCCCCCCCCCCCCCCCCC
  2320.       SUBROUTINE TTYRAW
  2321.       IMPLICIT INTEGER (A-Z)
  2322.       COMMON /KER/ N,RPSIZ,SPSIZ,PAD,NUMTRY,OLDTRY, FD,RMTINFD,RMTOUTFD,
  2323.      *STATE,PADCHAR, EOL,ESCHAR,QUOTE,FILNAM(132),RECPKT(94 ), PACKET(94
  2324.      * ),SIZE,MOREFD,IBM,HOST, LOCALINFD,LOCALOUTFD,SPEED
  2325.       INTEGER IER
  2326.       INTEGER XCHAR(3)
  2327.       IF(.NOT.(HOST.EQ.-1))GOTO 23000
  2328.       CALL QGCHR(000000K,"@console",XCHAR,IER)
  2329.       CALL ICLR(XCHAR(1),0)
  2330.       CALL ICLR(XCHAR(1),1)
  2331.       CALL ISET(XCHAR(2),15)
  2332.       CALL QSCHR(000000K,"@console",XCHAR,IER)
  2333.       GOTO 23001
  2334. 23000 CONTINUE
  2335.       IF(.NOT.(SPEED.EQ.0))GOTO 23002
  2336.       CALL QGCHR(000000K,"@con11",XCHAR,IER)
  2337.       CALL ICLR(XCHAR(1),0)
  2338.       CALL ICLR(XCHAR(1),1)
  2339.       CALL ISET(XCHAR(2),15)
  2340.       CALL QSCHR(000000K,"@con11",XCHAR,IER)
  2341.       GOTO 23003
  2342. 23002 CONTINUE
  2343.       CALL QGCHR(000000K,"@con4",XCHAR,IER)
  2344.       CALL ICLR(XCHAR(1),0)
  2345.       CALL ICLR(XCHAR(1),1)
  2346.       CALL ISET(XCHAR(2),15)
  2347.       CALL QSCHR(000000K,"@con4",XCHAR,IER)
  2348. 23003 CONTINUE
  2349. 23001 CONTINUE
  2350.       RETURN
  2351.       END
  2352. CCCCCCCCCCCCCCCCCCCCCC UNCHAR.FR        CCCCCCCCCCCCCCCCCCCCCCCCCCC
  2353.       INTEGER FUNCTION UNCHAR(CH)
  2354.       INTEGER CH
  2355.       UNCHAR=CH-32
  2356.       RETURN
  2357.       END
  2358. CCCCCCCCCCCCCCCCCCCCCC  UNHUNG.FR       CCCCCCCCCCCCCCCCCCCCCCCCCCC
  2359.       SUBROUTINE UNHUNG
  2360.       IMPLICIT INTEGER (A-Z)
  2361.       COMMON /KER/ N,RPSIZ,SPSIZ,PAD,NUMTRY,OLDTRY, FD,RMTINFD,RMTOUTFD,
  2362.      *STATE,PADCHAR, EOL,ESCHAR,QUOTE,FILNAM(132),RECPKT(94 ), PACKET(94
  2363.      * ),SIZE,MOREFD,IBM,HOST, LOCALINFD,LOCALOUTFD,SPEED
  2364.       INTEGER ALIN(132)
  2365.       INTEGER TNUM,STATUS,GETLIN
  2366. 23000 IF(.NOT.((GETLIN(ALIN,LOCALINFD).NE.10003)))GOTO 23001
  2367.       IF(.NOT.((ALIN(1).EQ.81).AND.(ALIN(2).EQ.117)))GOTO 23002
  2368.       CALL RATEXIT
  2369. 23002 CONTINUE
  2370.       CALL REMARK("Sending out a NAK for retry purpose")
  2371.       TNUM=N
  2372.       CALL SPACK1(78,TNUM,0,0)
  2373.       GOTO 23000
  2374. 23001 CONTINUE
  2375.       RETURN
  2376.       END
  2377. CCCCCCCCCCCCCCCCCCCCCC UPPER.FR         CCCCCCCCCCCCCCCCCCCCCCCCCCC
  2378.       SUBROUTINE UPPER(ALIN,BLIN)
  2379.       IMPLICIT INTEGER (A-Z)
  2380.       INTEGER ALIN(132)
  2381.       INTEGER BLIN(132)
  2382.       INTEGER UCASE(27)
  2383.       DATA UCASE(1),UCASE(2),UCASE(3),UCASE(4),UCASE(5),UCASE(6),UCASE(7
  2384.      *),UCASE(8),UCASE(9),UCASE(10),UCASE(11),UCASE(12),UCASE(13),UCASE(
  2385.      *14),UCASE(15),UCASE(16),UCASE(17),UCASE(18),UCASE(19),UCASE(20),UC
  2386.      *ASE(21),UCASE(22),UCASE(23),UCASE(24),UCASE(25),UCASE(26),UCASE(27
  2387.      *)/65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,8
  2388.      *6,87,88,89,90,10002/
  2389.       A1=1
  2390. 23000 IF(.NOT.(ALIN(A1).NE.10002))GOTO 23001
  2391.       IF(.NOT.((ALIN(A1).GT.96).AND.(ALIN(A1).LT.123)))GOTO 23002
  2392.       BLIN(A1)=UCASE((ALIN(A1)-32-64))
  2393.       GOTO 23003
  2394. 23002 CONTINUE
  2395.       BLIN(A1)=ALIN(A1)
  2396. 23003 CONTINUE
  2397.       A1=A1+1
  2398.       GOTO 23000
  2399. 23001 CONTINUE
  2400.       BLIN(A1)=10002
  2401.       RETURN
  2402.       END
  2403. CCCCCCCCCCCCCCCCCCCCCC VERIFY.FR        CCCCCCCCCCCCCCCCCCCCCCCCCCC
  2404.       SUBROUTINE VERIFY(TFILE)
  2405.       INTEGER INFILE(132)
  2406.       INTEGER OUTFILE(132)
  2407.       INTEGER TFILE(132)
  2408.       INTEGER AONE,BONE,TEMP
  2409.       AONE=1
  2410.       BONE=1
  2411.       TEMP=1
  2412.       CALL UPPER(TFILE,INFILE)
  2413. 23000 IF(.NOT.((INFILE(TEMP).NE.10).AND.(INFILE(TEMP).NE.10002)))GOTO 23
  2414.      *001
  2415.       IF(.NOT.((INFILE(TEMP).GT.64).AND.(INFILE(TEMP).LT.91)))GOTO 23002
  2416.       OUTFILE(TEMP)=INFILE(TEMP)
  2417.       GOTO 23003
  2418. 23002 CONTINUE
  2419.       IF(.NOT.((INFILE(TEMP).GT.47).AND.(INFILE(TEMP).LT.58)))GOTO 23004
  2420.       OUTFILE(TEMP)=INFILE(TEMP)
  2421.       GOTO 23005
  2422. 23004 CONTINUE
  2423.       OUTFILE(TEMP)=46
  2424. 23005 CONTINUE
  2425. 23003 CONTINUE
  2426.       TEMP=TEMP+1
  2427.       GOTO 23000
  2428. 23001 CONTINUE
  2429.       OUTFILE(TEMP)=10002
  2430.       CALL SCOPY(OUTFILE,AONE,TFILE,BONE)
  2431.       RETURN
  2432.       END
  2433. CCCCCCCCC     THE END CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  2434.