%%HP: T(3)A(D)F(.);
\<< # 0d # 0d "" ""
"" "" \-> col row cur
spc char keymap
  \<<
    \<< 51 13 146 13
241 13 54 127 55 8
284 9 275 34 282 0
201 1 202 2 203 3
204 4 205 5 206 6
211 7 212 8 213 9
214 10 215 11 216
12 221 13 222 14
223 15 224 16 225
17 226 18 231 19
232 20 233 21 234
22 235 23 236 24
242 25 243 26 61 27
262 28 263 29 264
30 265 31
"..........abcdef....ghijkl....mnopqr....stuvwx.....yz........789/......456*....
 ..123-......0.
 +..........ABCDEF....GHIJKL....MNOPQR....STUVWX.....YZ........{<([......$%^&...
 ...,~`'......=?_|..........ABCDEF....GHIJKL....MNOPQR....STUVWX.....YZ.......\\
 }>)]................;@#........!.:"
1 39
      START ROT ROT
CHR REPL
      NEXT 'keymap'
STO
    \>>
    \<< PICT col row
2 \->LIST DUP2 col
# 5d + row # 7d + 2
\->LIST SUB 'char'
STO cur REPL
    \>>
    \<< PICT col row
2 \->LIST char REPL
      IF row # 56d
<
      THEN # 8d
'row' STO+
      ELSE PICT DUP
{ # 0d # 0d } OVER
{ # 0d # 8d } {
# 131d # 63d } SUB
REPL { # 0d # 56d }
# 131d # 8d BLANK
REPL
      END PICT col
row 2 \->LIST DUP2
col # 5d + row # 7d
+ 2 \->LIST SUB
'char' STO cur REPL
    \>> \-> addcntrl
get nl
    \<<
      \<< 2 \->GROB
PICT col row 2
\->LIST ROT REPL
'col' STO+
	IF col
# 131d >
	THEN # 0d
'col' STO get EVAL
nl EVAL
	ELSE get
EVAL
	END
      \>>
      \<< DROP
	WHILE
BUFLEN DROP NOT
	REPEAT
	END 1 SRECV
DROP NUM
	CASE DUP 65
==
	  THEN PICT
col row 2 \->LIST
char REPL
	    IF row
# 7d >
	    THEN
'row' # 8d STO-
	    END get
EVAL
	  END DUP
66 ==
	  THEN PICT
col row 2 \->LIST
char REPL
	    IF row
# 56d <
	    THEN
# 8d 'row' STO+
	    END get
EVAL
	  END DUP
67 ==
	  THEN PICT
col row 2 \->LIST
char REPL
	    IF col
# 125d <
	    THEN
# 6d 'col' STO+
	    END get
EVAL
	  END DUP
68 ==
	  THEN PICT
col row 2 \->LIST
char REPL
	    IF col
# 5d >
	    THEN
'col' # 6d STO-
	    END get
EVAL
	  END DUP
72 ==
	  THEN PICT
col row 2 \->LIST
char REPL # 0d
'col' STO # 0d
'row' STO get EVAL
	  END DUP
73 ==
	  THEN PICT
col row 2 \->LIST
char REPL
	    IF row
# 7d >
	    THEN
'row' # 8d STO-
	    ELSE
PICT DUP { # 0d
# 8d } OVER { # 0d
# 0d } { # 131d
# 55d } SUB REPL {
# 0d # 0d } # 131d
# 8d BLANK REPL
	    END get
EVAL
	  END DUP
74 ==
	  THEN PICT
# 0d row 2 \->LIST
# 131d # 64d row -
BLANK REPL get EVAL
	  END DUP
75 ==
	  THEN PICT
col row 2 \->LIST
# 131d col - # 8d
BLANK REPL get EVAL
	  END DUP
89 ==
	  THEN PICT
col row 2 \->LIST
char REPL
	    WHILE
BUFLEN DROP NOT
	    REPEAT
	    END 1
SRECV DROP NUM 32 -
# 8d * 'row' STO
	    WHILE
BUFLEN DROP NOT
	    REPEAT
	    END 1
SRECV DROP NUM 32 -
# 6d * 'col' STO
get EVAL
	  END DUP
90 ==
	  THEN 27
CHR "/Z" + XMIT
DROP
	  END
	END DROP
      \>>
      \<<
	CASE DUP
127 ==
	  THEN PICT
col row 2 \->LIST spc
REPL
	    IF col
# 5d >
	    THEN
'col' # 6d STO-
	    ELSE
# 126d 'col' STO
'row' # 8d STO-
	    END
PICT col row 2
\->LIST cur REPL
	  END DUP
13 ==
	  THEN PICT
col row 2 \->LIST
char REPL # 0d
'col' STO get EVAL
	  END DUP
DUP 10 \>= SWAP 12 \<=
AND
	  THEN nl
EVAL
	  END DUP 8
==
	  THEN PICT
col row 2 \->LIST
char REPL
	    IF col
# 5d >
	    THEN
'col' # 6d STO-
	    ELSE
# 126d 'col' STO
	      IF
row # 7d >
	      THEN
'row' # 8d STO-
	      ELSE
PICT DUP { # 0d
# 8d } OVER { # 0d
# 0d } { # 131d
# 55d } SUB REPL {
# 0d # 0d } # 131d
# 8d BLANK REPL
	      END
	    END get
EVAL
	  END DUP 7
==
	  THEN 440
.1 BEEP
	  END DUP 9
==
	  THEN PICT
col row 2 \->LIST
char REPL col # 12d
/ # 1d + # 12d *
	    IF DUP
# 131d >
	    THEN
DROP # 0d 'col' STO
get EVAL nl EVAL
	    ELSE
'col' STO get EVAL
	    END
	  END
	END DROP
      \>> 0 { } \->
write vt52 cntrl
room flags
      \<< RCLF
'flags' STO
addcntrl EVAL 127
CHR 2 \->GROB 'cur'
STO 32 CHR 2 \->GROB
DUP 'spc' STO
'char' STO -40 CF
OPENIO ERASE PICT {
# 0d # 0d } DUP
PVIEW # 0d 'col'
STO # 0d 'row' STO
cur REPL 7 CF 8 CF
9 CF 10 SF
	WHILE 10
FS?
	REPEAT
	  IF BUFLEN
DROP
	  THEN
# 131d col - # 6d /
B\->R 'room' STO ""
	    DO 1
SRECV DROP DUP NUM
	      IF
DUP 31 > SWAP 127 <
AND
	      THEN
+
	      ELSE
9 SF SWAP
	      END
	    UNTIL
DUP SIZE room > 9
FS? OR BUFLEN DROP
NOT OR
	    END
	    IF DUP
SIZE DUP
	    THEN
# 6d * SWAP write
EVAL
	    ELSE
DROP2
	    END
	    IF 9
FS?C
	    THEN
	      IF
NUM DUP 27 ==
	      THEN
vt52 EVAL
	      ELSE
cntrl EVAL
	      END
	    END
	  END
	  IF KEY
	  THEN
	    IF DUP
DUP DUP2 10 > SWAP
54 < AND SWAP 51 \=/
AND 6 FS? AND 8 FC?
AND 7 FS? OR SWAP
71 \=/ AND
	    THEN 95
+ 7 CF
	    ELSE
	      IF
DUP DUP 71 \=/ SWAP
81 \=/ AND 8 FS? AND
	      THEN
190 + 8 CF
	      END
	    END
	    IF DUP
71 ==
	    THEN
	      IF 8
FS?C
	      THEN
10 CF
	      ELSE
IF 7 FS?C
THEN
  IF 6 DUP FS?
  THEN CF
  ELSE SF
  END
ELSE 7 SF
END
	      END
DROP
	    ELSE
	      IF
DUP 81 ==
	      THEN
IF 8 FS?C
THEN SBRK
ELSE 8 SF
END DROP
	      ELSE
keymap SWAP DUP SUB
XMIT DROP
	      END
	    END
	  END
	END CLOSEIO
TEXT flags STOF
      \>>
    \>>
  \>>
\>>