home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / dgrdos1 / rdosker.fr next >
Text File  |  2020-01-01  |  69KB  |  2,249 lines

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