-
Notifications
You must be signed in to change notification settings - Fork 1
/
dosekey.fs
100 lines (83 loc) · 2.79 KB
/
dosekey.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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
\ dosekey, based on:
\ ekey etc.
\ Copyright (C) 2001,2007 Free Software Foundation, Inc.
\ This file is part of Gforth.
\ Gforth is free software; you can redistribute it and/or
\ modify it under the terms of the GNU General Public License
\ as published by the Free Software Foundation, either version 3
\ of the License, or (at your option) any later version.
\ This program is distributed in the hope that it will be useful,
\ but WITHOUT ANY WARRANTY; without even the implied warranty of
\ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\ GNU General Public License for more details.
\ You should have received a copy of the GNU General Public License
\ along with this program. If not, see http://www.gnu.org/licenses/.
\ this implementation of EKEY just translates the KEY values
\ received following a null to values between 256 and 511
\ Caveats: It also translates a sequence of two codes beginning with
\ 0 if they were not generated by pressing the key. It does not wait
\ for the second value in the sequence to arrive.
\ In a Forth implementation on DOS in which special keys are not
\ available by a second call to KEY following a null value, this
\ code will not work. It has only been used on Gforth 0.5
\ The dos-keycode names are compatible with pfe-0.9.14
: dos-keycode ( c "name" -- ; name execution: -- u ) 256 + constant ;
75 dos-keycode k-left
77 dos-keycode k-right
72 dos-keycode k-up
80 dos-keycode k-down
71 dos-keycode k-home
79 dos-keycode k-end
115 keycode k-prior \ note: captured by xterm
116 keycode k-next \ note: captured by xterm
82 dos-keycode k-insert \ not in pfe
\ function/keypad keys
59 dos-keycode k1
60 dos-keycode k2
61 dos-keycode k3
62 dos-keycode k4
63 dos-keycode k5
64 dos-keycode k6
65 dos-keycode k7
66 dos-keycode k8
67 dos-keycode k9
68 dos-keycode k10
133 dos-keycode k11 \ not in pfe
134 dos-keycode k12 \ not in pfe
\ shifted function/keypad keys have the same key sequences (in
\ xterm) and pfe gives the same keycodes; so use of these is
\ not portable to gforth outside of DOS
84 dos-keycode s-k1
85 dos-keycode s-k2
86 dos-keycode s-k3
87 dos-keycode s-k4
88 dos-keycode s-k5
89 dos-keycode s-k6
90 dos-keycode s-k7
91 dos-keycode s-k8
92 dos-keycode s-k9
93 dos-keycode s-k10
135 dos-keycode s-k11 \ not in pfe
136 dos-keycode s-k12 \ not in pfe
: ekey ( -- u ) \ facility-ext e-key
key ?dup 0= if key 256 + then
;
: ekey>char ( u -- u false | c true ) \ facility-ext e-key-to-char
dup 256 u<
;
: ekey? ( -- flag ) \ facility-ext e-key-question
\G Return @code{true} if a keyboard event is available (use
\G @code{ekey} to receive the event), @code{false} otherwise.
key?
;
FALSE [IF]
: test-ekey?
begin
begin
begin key? until
ekey? until
.s ekey .s drop
again
;
test-ekey?
[THEN]