%%HP: T(3)A(R)F(.);
\<< "" ""                
  \<<                    
    WHILE DUP SIZE       
21 >
    REPEAT DUP 1 21      
SUB 7 DISP nl DUP        
SIZE 22 SWAP SUB    
DUP 'line' STO 
    END 7 DISP          
  \>>
  \<< NUM \-> nbr       
    \<<
      CASE nbr 8 ==      
        THEN string
DUP SIZE 2 - 1 SWAP
SUB 'string' STO
string write
        END nbr 13       
==
        THEN nl ""
'line' STO
        END nbr 7        
==
        THEN 1000
.2 BEEP
        END
      END
    \>>
  \>>
  \<< DUP NUM \->        
outkey nbr               
    \<<                  
      CASE nbr DUP
128 < SWAP 13 \=/ AND    
        THEN outkey
XMIT DROP
        END nbr 13       
==
        THEN outkey
10 CHR + XMIT DROP
        END nbr 128      
==
        THEN 2 CF
          IF 1 FS?
          THEN 1 CF
          ELSE 1 SF
          END
        END nbr 129      
==
        THEN 1 CF
          IF 2 FS?
          THEN 2 CF
          ELSE 2 SF
          END
        END nbr 130      
==
        THEN SBRK
nl
"  -- Break sent --"
write
        END nbr 131      
==
        THEN 4 SF
        END nbr 132       
==
        THEN kermit
        END nbr 133     
==
        THEN RECV
        END nbr 134      
==
        THEN
          IF 5 FS?
          THEN 5 CF
          ELSE 5 SF
          END
        END
      END
    \>>
  \>>
  \<< LCD\-> { # 0h      
# 8h } { # 83h
# 37h } SUB # 83h
# 40h BLANK { # 0h
# 0h } 3 ROLL GOR
\->LCD "" 'line' STO
  \>>
  \<<                    
"Term 2.1 Kermit Send"
"File name:" INPUT
DUP SIZE 11 SWAP
SUB "'" + "'" SWAP
+ STR\-> SEND CLLCD 2
CF TERM2.1                
  \>> 'kermit' STO        
'nl' STO 'snd' STO
'cntl' STO 'write'
STO 'string' STO
'line' STO 1 CF 2
CF 3 CF 4 CF CLLCD
  DO BUFLEN               
    IF DROP DUP 
    THEN                 
      IF DUP 40 > 5       
FS? AND
      THEN BUFLEN
DROP SRECV DROP2
      ELSE ""             
'string' STO 1 SWAP
        FOR dobuf 1       
SRECV DROP
          IF DUP          
NUM 31 >             
          THEN           
'string' SWAP STO+
          ELSE
'line' string STO+
line write cntl ""
'string' STO
          END
        NEXT 'line'       
string STO+ line
write
      END
    ELSE DROP
    END KEY               
    IF
    THEN \-> k
      \<<
        CASE 1 FS?
          THEN 0
          END 2 FS?
          THEN 1
          END 1 FS?
2 FS? AND NOT
          THEN 2
          END
        END 100 * k
+ keys SWAP DUP SUB
snd
      \>>
    END
  UNTIL 4 FS?
  END { cntl snd
write string line
kermit nl } PURGE
CLOSEIO 1 CF 2 CF 3
CF 4 CF 5 CF
\>>

