-
Notifications
You must be signed in to change notification settings - Fork 1
/
slip-esc.fs
76 lines (42 loc) · 1.09 KB
/
slip-esc.fs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
$C0 constant SLIP_END
$DB constant SLIP_ESC
\ $DC constant SLIP_ESC_END
\ $DD constant SLIP_ESC_ESC
hook-key @ variable sys-key-ptr
hook-key? @ variable sys-key?-ptr
hook-emit @ variable sys-emit-ptr
' nop variable SLIP-handler-ptr
: sys-emit sys-emit-ptr @ execute ;
: sys-key sys-key-ptr @ execute ;
: sys-key? sys-key?-ptr @ execute ;
: SLIP-handler SLIP-handler-ptr @ execute ;
\ does ordinary emit, but prepends SLIP_ESC to SLIP_END and SLIP_ESC
: SLIP-emit ( char -- )
dup case
SLIP_END of SLIP_ESC sys-emit endof
SLIP_ESC of SLIP_ESC sys-emit endof
endcase
sys-emit
;
$80 stringbuffer constant SLIP-message
false variable SLIP-reading
#1000 variable SLIP-timeout
: SLIP-timeout-error
false SLIP-reading !
." ERROR: SLIP timeout" cr
quit exit
;
: slip-dumper
cr ." SLIP buffer content:" cr
SLIP-message stringbuf-dump
SLIP-message stringbuf-clear
;
' slip-dumper SLIP-handler-ptr !
: slip-ESC-activate
['] SLIP-emit hook-emit !
\ ['] SLIP-key hook-key !
;
: slip-ESC-deactivate
sys-emit-ptr @ hook-emit !
sys-key-ptr @ hook-key !
;