1 /*
2  * $LynxId: LYEditmap.c,v 1.29 2013/01/04 00:03:24 tom Exp $
3  *
4  * LYEditMap.c
5  * Keybindings for line and form editting.
6  */
7 
8 #include <HTUtils.h>
9 #include <LYGlobalDefs.h>
10 #include <LYStrings.h>
11 #include <LYKeymap.h>		/* KEYMAP_SIZE, LKC_*, LYK_* - kw */
12 
13 /* * * * * LynxEditactionCodes * * * * */
14 #ifdef USE_ALT_BINDINGS
15 
16 /* Last valid index for the (lynxkeycode+modifier -> lynxeditactioncode)
17  * tables.  Currently all three tables are the same.  - kw
18  */
19 #define LAST_MOD1_LKC	0x111
20 #define LAST_MOD2_LKC	0x111
21 #define LAST_MOD3_LKC	0x111
22 
23 /*  Get (lynxkeycode+modifier -> lynxeditactioncode) mapping, intermediate.
24  */
25 #define LKC_TO_LEC_M1(c) ((c)>LAST_MOD1_LKC? (int)LYE_UNMOD: Mod1Binding[c])
26 #define LKC_TO_LEC_M2(c) ((c)>LAST_MOD2_LKC? (int)LYE_UNMOD: Mod2Binding[c])
27 #define LKC_TO_LEC_M3(c) ((c)>LAST_MOD3_LKC? (int)LYE_UNMOD: Mod3Binding[c])
28 
29 #endif /* USE_ALT_BINDINGS */
30 
31 int current_lineedit = 0;	/* Index into LYLineEditors[]   */
32 
33 int escape_bound = 0;		/* User wanted Escape to perform actions?  */
34 
35 /*
36  * See LYStrings.h for the LYE definitions.
37  */
38 /* *INDENT-OFF* */
39 static LYEditCode DefaultEditBinding[KEYMAP_SIZE - 1] = {
40 
41 LYE_NOP,        LYE_BOL,        LYE_DELPW,      LYE_ABORT,
42 /* nul          ^A              ^B              ^C      */
43 
44 LYE_DELN,       LYE_EOL,        LYE_DELNW,      LYE_ABORT,
45 /* ^D           ^E              ^F              ^G      */
46 
47 LYE_DELP,       LYE_TAB,      LYE_ENTER,      LYE_LOWER,
48 /* bs           tab             nl              ^K      */
49 
50 LYE_NOP,        LYE_ENTER,      LYE_FORWW,      LYE_ABORT,
51 /* ^L           cr              ^N              ^O      */
52 
53 LYE_BACKW,      LYE_NOP,        LYE_DELN,       LYE_NOP,
54 /* ^P           XON             ^R              XOFF    */
55 
56 #ifdef CAN_CUT_AND_PASTE
57 LYE_UPPER,      LYE_ERASE,      LYE_LKCMD,      LYE_PASTE,
58 #else
59 LYE_UPPER,      LYE_ERASE,      LYE_LKCMD,      LYE_NOP,
60 #endif
61 /* ^T           ^U              ^V              ^W      */
62 
63 LYE_SETM1,      LYE_NOP,        LYE_NOP,        LYE_NOP,
64 /* ^X           ^Y              ^Z              ESC     */
65 
66 LYE_NOP,        LYE_NOP,        LYE_SWMAP,      LYE_DELEL,
67 /* ^\           ^]              ^^              ^_      */
68 
69 /* sp .. RUBOUT                                         */
70 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
71 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
72 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
73 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
74 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
75 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
76 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
77 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
78 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
79 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
80 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
81 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
82 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
83 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
84 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
85 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
86 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
87 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
88 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
89 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
90 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
91 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
92 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
93 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_DELP,
94 
95 /* 80..9F ISO-8859-1 8-bit escape characters. */
96 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
97 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
98 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
99 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
100 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
101 #ifdef CJK_EX	/* 1997/11/03 (Mon) 20:30:54 */
102 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
103 #else
104 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_AIX,
105 /*                                               97 AIX    */
106 #endif
107 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
108 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
109 
110 /* A0..FF (permissible ISO-8859-1) 8-bit characters. */
111 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
112 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
113 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
114 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
115 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
116 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
117 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
118 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
119 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
120 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
121 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
122 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
123 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
124 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
125 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
126 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
127 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
128 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
129 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
130 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
131 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
132 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
133 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
134 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
135 
136 /* 100..10F function key definitions in LYStrings.h */
137 LYE_FORM_PASS,  LYE_FORM_PASS,  LYE_FORW,       LYE_BACK,
138 /* UPARROW      DNARROW         RTARROW         LTARROW     */
139 
140 LYE_FORM_PASS,  LYE_FORM_PASS,  LYE_BOL,        LYE_EOL,
141 /* PGDOWN       PGUP            HOME            END         */
142 
143 #if (defined(_WINDOWS) || defined(__DJGPP__))
144 
145 LYE_FORM_PASS,  LYE_NOP,        LYE_NOP,        LYE_NOP,
146 /* F1 */
147 
148 #else
149 
150 LYE_FORM_PASS,  LYE_TAB,        LYE_BOL,        LYE_EOL,
151 /* F1           Do key          Find key        Select key  */
152 
153 #endif /* _WINDOWS || __DJGPP__ */
154 
155 LYE_NOP,        LYE_DELP,       LYE_NOP,        LYE_FORM_PASS,
156 /* Insert key   Remove key      DO_NOTHING      Back tab */
157 
158 /* 110..18F */
159 #if (defined(_WINDOWS) || defined(__DJGPP__)) && defined(USE_SLANG) && !defined(DJGPP_KEYHANDLER)
160 
161 LYE_DELP,       LYE_ENTER,      LYE_NOP,        LYE_NOP,
162 /* Backspace    Enter */
163 
164 #else
165 
166 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
167 
168 #endif /* USE_SLANG &&(_WINDOWS || __DJGPP) && !DJGPP_KEYHANDLER */
169 
170 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
171 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
172 /*             MOUSE_KEY  */
173 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
174 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
175 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
176 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
177 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
178 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
179 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
180 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
181 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
182 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
183 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
184 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
185 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
186 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
187 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
188 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
189 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
190 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
191 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
192 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
193 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
194 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
195 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
196 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
197 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
198 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
199 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
200 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
201 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
202 /* 190..20F */
203 
204 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
205 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
206 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
207 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
208 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
209 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
210 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
211 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
212 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
213 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
214 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
215 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
216 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
217 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
218 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
219 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
220 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
221 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
222 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
223 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
224 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
225 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
226 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
227 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
228 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
229 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
230 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
231 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
232 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
233 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
234 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
235 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
236 /* 210..28F */
237 
238 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
239 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
240 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
241 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
242 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
243 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
244 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
245 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
246 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
247 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
248 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
249 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
250 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
251 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
252 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
253 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
254 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
255 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
256 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
257 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
258 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
259 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
260 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
261 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
262 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
263 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
264 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
265 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
266 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
267 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
268 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
269 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
270 /* 290..293 */
271 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
272 };
273 
274 /*
275  * Add your favorite key bindings HERE
276  */
277 
278 /* KED-01 */ /* Default except: ^B=cursor-backward,  ^F=cursor-forward,   */
279              /*                 ^K=delete-to-EOL,    ^X=delete-to-BOL,    */
280              /*                 ^R=delete-prev-word, ^T=delete-next-word, */
281              /*                 ^^=upper-case-line,  ^_=lower-case-line   */
282 /* Why the difference for tab? - kw */
283 
284 #ifdef USE_ALT_BINDINGS
285 static LYEditCode BetterEditBinding[KEYMAP_SIZE - 1]={
286 
287 LYE_NOP,        LYE_BOL,        LYE_BACK,       LYE_ABORT,
288 /* nul          ^A              ^B              ^C      */
289 
290 LYE_DELN,       LYE_EOL,        LYE_FORW,       LYE_ABORT,
291 /* ^D           ^E              ^F              ^G      */
292 
293 LYE_DELP,       LYE_ENTER,      LYE_ENTER,      LYE_DELEL,
294 /* bs           tab             nl              ^K      */
295 
296 LYE_NOP,        LYE_ENTER,      LYE_FORWW,      LYE_ABORT,
297 /* ^L           cr              ^N              ^O      */
298 
299 LYE_BACKW,      LYE_NOP,        LYE_DELPW,      LYE_NOP,
300 /* ^P           XON             ^R              XOFF    */
301 
302 #ifdef CAN_CUT_AND_PASTE
303 LYE_DELNW,      LYE_ERASE,      LYE_LKCMD,      LYE_PASTE,
304 #else
305 LYE_DELNW,      LYE_ERASE,      LYE_LKCMD,      LYE_NOP,
306 #endif
307 /* ^T           ^U              ^V              ^W      */
308 
309 LYE_SETM1,      LYE_NOP,        LYE_NOP,        LYE_NOP,
310 /* ^X           ^Y              ^Z              ESC     */
311 
312 LYE_NOP,        LYE_NOP,        LYE_UPPER,      LYE_LOWER,
313 /* ^\           ^]              ^^              ^_      */
314 
315 /* sp .. RUBOUT                                         */
316 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
317 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
318 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
319 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
320 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
321 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
322 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
323 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
324 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
325 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
326 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
327 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
328 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
329 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
330 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
331 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
332 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
333 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
334 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
335 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
336 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
337 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
338 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
339 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_DELP,
340 
341 /* 80..9F ISO-8859-1 8-bit escape characters. */
342 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
343 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
344 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
345 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
346 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
347 #ifdef CJK_EX	/* 1997/11/03 (Mon) 20:30:54 */
348 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
349 #else
350 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_AIX,
351 /*                                               97 AIX    */
352 #endif
353 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
354 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
355 
356 /* A0..FF (permissible ISO-8859-1) 8-bit characters. */
357 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
358 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
359 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
360 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
361 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
362 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
363 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
364 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
365 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
366 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
367 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
368 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
369 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
370 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
371 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
372 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
373 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
374 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
375 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
376 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
377 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
378 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
379 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
380 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
381 
382 /* 100..10F function key definitions in LYStrings.h */
383 LYE_FORM_PASS,  LYE_FORM_PASS,  LYE_FORW,       LYE_BACK,
384 /* UPARROW      DNARROW         RTARROW         LTARROW     */
385 
386 LYE_FORM_PASS,  LYE_FORM_PASS,  LYE_BOL,        LYE_EOL,
387 /* PGDOWN       PGUP            HOME            END         */
388 
389 #if (defined(_WINDOWS) || defined(__DJGPP__))
390 
391 LYE_FORM_PASS,  LYE_NOP,        LYE_NOP,        LYE_NOP,
392 /* F1 */
393 
394 #else
395 
396 LYE_FORM_PASS,  LYE_TAB,        LYE_BOL,        LYE_EOL,
397 /* F1           Do key          Find key        Select key  */
398 
399 #endif /* _WINDOWS || __DJGPP__ */
400 
401 LYE_NOP,        LYE_DELP,       LYE_NOP,        LYE_FORM_PASS,
402 /* Insert key   Remove key      DO_NOTHING      Back tab */
403 
404 /* 110..18F */
405 #if (defined(_WINDOWS) || defined(__DJGPP__)) && defined(USE_SLANG) && !defined(DJGPP_KEYHANDLER)
406 
407 LYE_DELP,       LYE_ENTER,      LYE_NOP,        LYE_NOP,
408 /* Backspace    Enter */
409 
410 #else
411 
412 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
413 
414 #endif /* USE_SLANG &&(_WINDOWS || __DJGPP) && !DJGPP_KEYHANDLER */
415 
416 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
417 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
418 /*             MOUSE_KEY  */
419 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
420 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
421 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
422 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
423 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
424 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
425 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
426 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
427 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
428 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
429 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
430 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
431 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
432 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
433 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
434 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
435 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
436 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
437 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
438 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
439 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
440 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
441 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
442 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
443 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
444 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
445 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
446 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
447 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
448 /* 190..20F */
449 
450 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
451 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
452 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
453 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
454 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
455 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
456 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
457 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
458 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
459 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
460 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
461 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
462 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
463 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
464 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
465 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
466 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
467 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
468 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
469 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
470 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
471 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
472 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
473 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
474 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
475 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
476 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
477 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
478 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
479 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
480 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
481 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
482 /* 210..28F */
483 
484 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
485 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
486 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
487 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
488 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
489 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
490 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
491 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
492 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
493 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
494 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
495 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
496 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
497 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
498 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
499 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
500 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
501 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
502 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
503 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
504 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
505 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
506 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
507 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
508 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
509 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
510 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
511 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
512 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
513 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
514 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
515 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
516 /* 290..293 */
517 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
518 };
519 
520 /* kw     */ /* Default except: ^B=cursor-backward[+],^F=cursor-forward[+], */
521              /*                 ^K=delete-to-EOL[+][++],^X=Modifier Prefix, */
522              /*                 ^[ (ESC)=Modifier Prefix,                   */
523              /*                 ^R=BACKW,             ^S=FORWW,             */
524              /*                 ^T=transpose-chars,                         */
525              /*                 ^U=delete-to-BOL,     ^W=delete-prev-word,  */
526              /*                 ^@ (NUL)=SETMARK,     ^Y=YANK,              */
527              /*                 ^_=ABORT (undo),                            */
528              /*                 ^P=FORM_PASS,         ^N=FORM_PASS,         */
529              /*                 ^O=FORM_PASS,         ^L=FORM_PASS,         */
530              /*                 ^\=FORM_PASS,         ^]=FORM_PASS,         */
531              /*                 ^Z=FORM_PASS,         F1=FORM_PASS,         */
532              /*                 ^E=EOL[++],           Remove=DELN           */
533              /* [+]: same as BetterEditBinding                              */
534              /* [++]: additionally set double-key modifier                  */
535 
536 /* Default where BetterEditBinding deviates:          ^^=SWMAP,            */
537              /*                tab=LYE_TAB                                 */
538 
539 /* Some functions for which the modifier binding is preferred:             */
540              /*         M-bs,M-del=delete-prev-word, M-d=delete-next-word, */
541              /*                M-b=BACKW,            M-f=FORWW,            */
542 
543 static LYEditCode BashlikeEditBinding[KEYMAP_SIZE - 1] = {
544 
545 LYE_SETMARK,    LYE_BOL,        LYE_BACK,       LYE_ABORT,
546 /* nul          ^A              ^B              ^C      */
547 
548 LYE_DELN,       LYE_EOL|LYE_DF, LYE_FORW,       LYE_ABORT,
549 /* ^D           ^E              ^F              ^G      */
550 
551 LYE_DELP,       LYE_TAB,        LYE_ENTER,      LYE_DELEL|LYE_DF,
552 /* bs           tab             nl              ^K      */
553 
554 LYE_FORM_PASS,  LYE_ENTER,      LYE_FORM_PASS,  LYE_FORM_PASS,
555 /* ^L           cr              ^N              ^O      */
556 
557 LYE_FORM_PASS,  LYE_NOP,        LYE_BACKW,      LYE_FORWW,
558 /* ^P           XON             ^R              ^S/XOFF */
559 
560 LYE_TPOS,       LYE_DELBL,      LYE_LKCMD,      LYE_DELPW,
561 /* ^T           ^U              ^V              ^W      */
562 
563 LYE_SETM1,      LYE_YANK,       LYE_FORM_PASS,  LYE_SETM2,
564 /* ^X           ^Y              ^Z              ESC     */
565 
566 LYE_FORM_PASS,  LYE_FORM_PASS,  LYE_SWMAP,      LYE_ABORT,
567 /* ^\           ^]              ^^              ^_      */
568 
569 /* sp .. RUBOUT                                         */
570 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
571 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
572 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
573 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
574 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
575 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
576 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
577 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
578 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
579 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
580 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
581 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
582 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
583 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
584 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
585 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
586 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
587 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
588 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
589 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
590 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
591 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
592 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
593 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_DELP,
594 
595 /* 80..9F ISO-8859-1 8-bit escape characters. */
596 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
597 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
598 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
599 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
600 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
601 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_AIX,
602 /*                                               97 AIX    */
603 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
604 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
605 
606 /* A0..FF (permissible ISO-8859-1) 8-bit characters. */
607 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
608 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
609 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
610 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
611 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
612 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
613 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
614 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
615 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
616 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
617 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
618 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
619 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
620 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
621 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
622 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
623 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
624 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
625 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
626 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
627 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
628 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
629 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
630 LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
631 
632 /* 100..10F function key definitions in LYStrings.h */
633 LYE_FORM_PASS,  LYE_FORM_PASS,  LYE_FORW,       LYE_BACK,
634 /* UPARROW      DNARROW         RTARROW         LTARROW     */
635 
636 LYE_FORM_PASS,  LYE_FORM_PASS,  LYE_BOL,        LYE_EOL,
637 /* PGDOWN       PGUP            HOME            END         */
638 
639 #if (defined(_WINDOWS) || defined(__DJGPP__))
640 
641 LYE_FORM_PASS,  LYE_NOP,        LYE_NOP,        LYE_NOP,
642 /* F1 */
643 
644 #else
645 
646 LYE_FORM_PASS,  LYE_TAB,        LYE_BOL,        LYE_EOL,
647 /* F1           Do key          Find key        Select key  */
648 
649 #endif /* _WINDOWS || __DJGPP__ */
650 
651 LYE_NOP,        LYE_DELN,       LYE_NOP,        LYE_FORM_PASS,
652 /* Insert key   Remove key      DO_NOTHING      Back tab */
653 
654 /* 110..18F */
655 #if (defined(_WINDOWS) || defined(__DJGPP__)) && defined(USE_SLANG) && !defined(DJGPP_KEYHANDLER)
656 
657 LYE_DELP,       LYE_ENTER,      LYE_NOP,        LYE_NOP,
658 /* Backspace    Enter */
659 
660 #else
661 
662 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
663 
664 #endif /* USE_SLANG &&(_WINDOWS || __DJGPP) && !DJGPP_KEYHANDLER */
665 
666 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
667 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
668 /*             MOUSE_KEY  */
669 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
670 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
671 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
672 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
673 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
674 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
675 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
676 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
677 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
678 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
679 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
680 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
681 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
682 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
683 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
684 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
685 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
686 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
687 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
688 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
689 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
690 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
691 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
692 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
693 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
694 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
695 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
696 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
697 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
698 /* 190..20F */
699 
700 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
701 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
702 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
703 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
704 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
705 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
706 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
707 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
708 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
709 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
710 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
711 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
712 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
713 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
714 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
715 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
716 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
717 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
718 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
719 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
720 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
721 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
722 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
723 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
724 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
725 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
726 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
727 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
728 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
729 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
730 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
731 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
732 /* 210..28F */
733 
734 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
735 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
736 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
737 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
738 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
739 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
740 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
741 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
742 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
743 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
744 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
745 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
746 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
747 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
748 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
749 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
750 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
751 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
752 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
753 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
754 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
755 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
756 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
757 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
758 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
759 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
760 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
761 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
762 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
763 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
764 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
765 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
766 /* 290..293 */
767 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
768 };
769 
770 /* Oh no, not another one of those tables...
771  *
772  * If modifier bit is set in a lynxkeycode, it is first looked up here.  Note
773  * the type different from the previous tables (short vs.  char), since we want
774  * to hold larger values.  OTOH we can keep the size shorter, everything beyond
775  * the end is effectively LYE_UNMOD (ignore modifier) by virtue of the
776  * LKC_TO_LEC_M1 macro.
777  *
778  * Currently this table isn't specific to the current_lineedit value, it is
779  * shared by all alternative "Bindings" to save space.  However, if the
780  * modifier flag is set only by a LYE_SETMn lynxeditaction, this table can have
781  * effect only for those Bindings that map a lynxkeycode to LYE_SETMn.  ( This
782  * doesn't apply if the modifier is already being set in LYgetch().  ) - kw
783  */
784 static short Mod1Binding[LAST_MOD1_LKC+1]={
785 
786 LYE_NOP,        LYE_BOL,        LYE_BACKW,      LYE_UNMOD,
787 /* nul          ^A              ^B              ^C      */
788 
789 LYE_FORM_LAC|LYK_NEXT_LINK,
790                 LYE_FORM_LAC|LYK_EDIT_TEXTAREA,
791                                 LYE_FORWW,      LYE_ABORT,
792 /* ^D           ^E              ^F              ^G      */
793 
794 LYE_DELPW,      LYE_UNMOD,      LYE_ENTER,     LYE_FORM_LAC|LYK_LPOS_NEXT_LINK,
795 /* bs           tab             nl              ^K      */
796 
797 LYE_FORM_PASS,  LYE_ENTER,      LYE_FORWW,      LYE_UNMOD,
798 /* ^L           cr              ^N              ^O      */
799 
800 LYE_BACKW,      LYE_NOP,        LYE_BACKW,      LYE_NOP,
801 /* ^P           XON             ^R              ^S/XOFF */
802 
803 LYE_NOP,        LYE_FORM_PASS,  LYE_NOP,        LYE_KILLREG,
804 /* ^T           ^U              ^V              ^W      */
805 
806 LYE_XPMARK,     LYE_UNMOD,      LYE_FORM_PASS,  LYE_NOP,
807 /* ^X           ^Y              ^Z              ESC     */
808 
809 LYE_FORM_PASS,  LYE_FORM_PASS,  LYE_UNMOD,      LYE_NOP,
810 /* ^\           ^]              ^^              ^_      */
811 
812 /* sp .. ?                                              */
813 LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,
814 LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,
815 LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,
816 LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,      LYE_FORM_PASS,
817 
818 LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,
819 LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,
820 LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,
821 LYE_FORM_LAC|LYK_HOME,
822                 LYE_UNMOD,      LYE_FORM_LAC|LYK_END,
823                                                 LYE_UNMOD,
824 
825 /* @, A .. Z, [, \, ], ^, _                             */
826 LYE_C1CHAR,     LYE_C1CHAR,     LYE_C1CHAR,     LYE_C1CHAR,
827 LYE_C1CHAR,     LYE_C1CHAR,     LYE_C1CHAR,     LYE_C1CHAR,
828 LYE_C1CHAR,     LYE_C1CHAR,     LYE_C1CHAR,     LYE_C1CHAR,
829 LYE_C1CHAR,     LYE_C1CHAR,     LYE_C1CHAR,     LYE_C1CHAR,
830 LYE_C1CHAR,     LYE_C1CHAR,     LYE_C1CHAR,     LYE_C1CHAR,
831 LYE_C1CHAR,     LYE_C1CHAR,     LYE_C1CHAR,     LYE_C1CHAR,
832 LYE_C1CHAR,     LYE_C1CHAR,     LYE_C1CHAR,     LYE_C1CHAR,
833 LYE_C1CHAR,     LYE_C1CHAR,     LYE_C1CHAR,     LYE_C1CHAR,
834 
835 /* `, a .. z, {, |, }, ~, RUBOUT                        */
836 LYE_UNMOD,      LYE_BOL,        LYE_BACKW,      LYE_UNMOD,
837 LYE_DELNW,      LYE_FORM_LAC|LYK_EDIT_TEXTAREA,
838                                 LYE_FORWW,      LYE_FORM_LAC|LYK_GROW_TEXTAREA,
839 LYE_CHAR,       LYE_FORM_LAC|LYK_INSERT_FILE,
840                                 LYE_CHAR,       LYE_ERASE,
841 LYE_LOWER,      LYE_CHAR,       LYE_FORM_PASS,  LYE_UNMOD,
842 LYE_CHAR,       LYE_NOP,        LYE_NOP,        LYE_NOP,
843 LYE_NOP,        LYE_UPPER,      LYE_NOP,        LYE_NOP,
844 LYE_NOP,        LYE_NOP,        LYE_UNMOD,      LYE_UNMOD,
845 LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,      LYE_DELPW,
846 
847 /* 80..9F ISO-8859-1 8-bit escape characters. */
848 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
849 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
850 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
851 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
852 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
853 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
854 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
855 LYE_NOP,        LYE_NOP,        LYE_NOP,        LYE_NOP,
856 
857 /* A0..FF (permissible ISO-8859-1) 8-bit characters. */
858 LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,
859 LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,
860 LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,
861 LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,
862 LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,
863 LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,
864 LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,
865 LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,
866 LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,
867 LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,
868 LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,
869 LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,
870 LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,
871 LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,
872 LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,
873 LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,
874 LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,
875 LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,
876 LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,
877 LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,
878 LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,
879 LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,
880 LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,
881 LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,
882 
883 /* 100..10F function key definitions in LYStrings.h */
884 LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,
885 /* UPARROW      DNARROW         RTARROW         LTARROW     */
886 
887 LYE_UNMOD,      LYE_UNMOD,      LYE_FORM_PASS,  LYE_FORM_PASS,
888 /* PGDOWN       PGUP            HOME            END         */
889 
890 #if (defined(_WINDOWS) || defined(__DJGPP__))
891 
892 LYE_FORM_LAC|LYK_DWIMHELP,
893                 LYE_UNMOD,      LYE_UNMOD,      LYE_UNMOD,
894 /* F1 */
895 
896 #else
897 
898 LYE_FORM_LAC|LYK_DWIMHELP,
899                 LYE_UNMOD,  LYE_FORM_LAC|LYK_WHEREIS, LYE_FORM_LAC|LYK_NEXT,
900 /* F1           Do key          Find key        Select key  */
901 
902 #endif /* _WINDOWS || __DJGPP__ */
903 
904 LYE_UNMOD,      LYE_NOP,        LYE_UNMOD,      LYE_UNMOD,
905 /* Insert key   Remove key      DO_NOTHING      Back tab */
906 
907 /* 110..111 */
908 #if (defined(_WINDOWS) || defined(__DJGPP__)) && defined(USE_SLANG) && !defined(DJGPP_KEYHANDLER)
909 
910 LYE_DELPW,      LYE_UNMOD,
911 /* Backspace    Enter */
912 
913 #else
914 
915 LYE_UNMOD,      LYE_UNMOD,
916 
917 #endif /* USE_SLANG &&(_WINDOWS || __DJGPP) && !DJGPP_KEYHANDLER */
918 };
919 
920 /*  Two more tables here, but currently they are all the same.
921     In other words, we are cheating to save space, until there
922     is a need for different tables. - kw */
923 static short *Mod2Binding = Mod1Binding;
924 static short *Mod3Binding = Mod1Binding;
925 
926 #endif /* USE_ALT_BINDINGS */
927 /* *INDENT-ON* */
928 
929 /*
930  * Add the array name to LYLineEditors
931  */
932 
933 LYEditCode *LYLineEditors[] =
934 {
935     DefaultEditBinding,		/* You can't please everyone, so you ... DW */
936 #ifdef USE_ALT_BINDINGS
937     BetterEditBinding,		/* No, you certainly can't ... /ked 10/27/98 */
938     BashlikeEditBinding,	/* and one more... - kw 1999-02-15 */
939 #endif
940 };
941 
942 /*
943  * Add the name that the user will see below.
944  * The order of LYLineEditors and LYLineditNames MUST be the same.
945  */
946 const char *LYLineeditNames[] =
947 {
948     "Default Binding",
949 #ifdef USE_ALT_BINDINGS
950     "Alternate Bindings",
951     "Bash-like Bindings",
952 #endif
953     (char *) 0
954 };
955 
956 /*
957  * Add the URL (relative to helpfilepath) used for context-dependent
958  * help on form field editing.
959  *
960  * The order must correspond to that of LYLineditNames.
961  */
962 const char *LYLineeditHelpURLs[] =
963 {
964     EDIT_HELP,
965 #ifdef USE_ALT_BINDINGS
966     ALT_EDIT_HELP,
967     BASHLIKE_EDIT_HELP,
968 #endif
969     (char *) 0
970 };
971 
EditBinding(int xlkc)972 int EditBinding(int xlkc)
973 {
974     int editaction, xleac = LYE_UNMOD;
975     int c = xlkc & LKC_MASK;
976 
977     if (xlkc == -1)
978 	return LYE_NOP;		/* maybe LYE_ABORT? or LYE_FORM_LAC|LYK_UNKNOWN? */
979 #ifdef NOT_ASCII
980     if (c < 256) {
981 	c = TOASCII(c);
982     }
983 #endif
984 #ifdef USE_ALT_BINDINGS
985     /*
986      * Get intermediate code from one of the lynxkeycode+modifier tables if
987      * applicable, otherwise get the lynxeditactioncode directly.  If we have
988      * more than one modifier bits, the first currently wins.  - kw
989      */
990     if (xlkc & LKC_ISLECLAC) {
991 	return LKC2_TO_LEC(xlkc);
992     } else if (xlkc & LKC_MOD1) {
993 	xleac = LKC_TO_LEC_M1(c);
994     } else if (xlkc & LKC_MOD2) {
995 	xleac = LKC_TO_LEC_M2(c);
996     } else if (xlkc & LKC_MOD3) {
997 	xleac = LKC_TO_LEC_M3(c);
998     } else {
999 	xleac = UCH(CurrentLineEditor()[c]);
1000     }
1001 #endif
1002     /*
1003      * If we have an intermediate code that says "same as without modifier",
1004      * look that up now; otherwise we are already done.  - kw
1005      */
1006     if (xleac == LYE_UNMOD) {
1007 	editaction = CurrentLineEditor()[c];
1008     } else {
1009 	editaction = xleac;
1010     }
1011     return editaction;
1012 }
1013 
1014 /*
1015  * Install lec as the lynxeditaction for lynxkeycode xlkc.  func must be
1016  * present in the revmap table.  For normal (non-modifier) lynxkeycodes,
1017  * select_edi selects which of the alternative line-editor binding tables is
1018  * modified.  If select_edi is positive, only the table given by it is modified
1019  * (the DefaultEditBinding table is numbered 1).  If select_edi is 0, all
1020  * tables are modified.  If select_edi is negative, all tables except the one
1021  * given by abs(select_edi) are modified.  returns TRUE if the mapping was
1022  * made, FALSE if not.  Note that this remapping cannot be undone (as might be
1023  * desirable as a result of re-parsing lynx.cfg), we don't remember the
1024  * original editaction from the Bindings tables anywhere.  - kw
1025  */
LYRemapEditBinding(int xlkc,int lec,int select_edi)1026 BOOL LYRemapEditBinding(int xlkc,
1027 			int lec,
1028 			int select_edi)
1029 {
1030     int j;
1031     int c = xlkc & LKC_MASK;
1032     BOOLEAN success = FALSE;
1033 
1034     if (xlkc < 0 || (xlkc & LKC_ISLAC) || c >= KEYMAP_SIZE + 1)
1035 	return FALSE;
1036 #ifdef USE_ALT_BINDINGS
1037     if (xlkc & LKC_MOD1) {
1038 	if (c > LAST_MOD1_LKC)
1039 	    return FALSE;
1040 	else
1041 	    Mod1Binding[c] = (short) lec;
1042 	return TRUE;
1043     } else if (xlkc & LKC_MOD2) {
1044 	if (c > LAST_MOD2_LKC)
1045 	    return FALSE;
1046 	else
1047 	    Mod2Binding[c] = (short) lec;
1048 	return TRUE;
1049     } else if (xlkc & LKC_MOD3) {
1050 	if (c > LAST_MOD3_LKC)
1051 	    return FALSE;
1052 	else
1053 	    Mod3Binding[c] = (short) lec;
1054 	return TRUE;
1055     } else
1056 #endif /* USE_ALT_BINDINGS */
1057     {
1058 #ifndef UCHAR_MAX
1059 #define UCHAR_MAX 255
1060 #endif
1061 	if ((unsigned int) lec > UCHAR_MAX)
1062 	    return FALSE;	/* cannot do, doesn't fit in a char - kw */
1063 	if (select_edi > 0) {
1064 	    if ((unsigned int) select_edi < TABLESIZE(LYLineEditors)) {
1065 		LYLineEditors[select_edi - 1][c] = (LYEditCode) lec;
1066 		success = TRUE;
1067 	    }
1068 	} else {
1069 	    for (j = 0; LYLineeditNames[j]; j++) {
1070 		success = TRUE;
1071 		if (select_edi < 0 && j + 1 + select_edi == 0)
1072 		    continue;
1073 		LYLineEditors[j][c] = (LYEditCode) lec;
1074 	    }
1075 	}
1076     }
1077     return success;
1078 }
1079 
1080 /*
1081  * Macro to walk through lkc-indexed tables up to imax, in the (ASCII) order
1082  *     97 - 122  ('a' - 'z'),
1083  *     32 -  96  (' ' - '`', includes 'A' - 'Z'),
1084  *    123 - 126  ('{' - '~'),
1085  *      0 -  31  (^@  - ^_),
1086  *    256 - imax,
1087  *    127 - 255
1088  */
1089 #define NEXT_I(i,imax) ((i==122) ? 32 : (i==96) ? 123 : (i==126) ? 0 :\
1090 			(i==31) ? 256 : (i==imax) ? 127 :\
1091 			(i==255) ? (-1) :i+1)
1092 #define FIRST_I 97
1093 
LYKeyForEditAction(int lec)1094 int LYKeyForEditAction(int lec)
1095 {
1096     int editaction, i;
1097 
1098     for (i = FIRST_I; i >= 0; i = NEXT_I(i, KEYMAP_SIZE - 2)) {
1099 	editaction = CurrentLineEditor()[i];
1100 	if (editaction == lec) {
1101 #ifdef NOT_ASCII
1102 	    if (i < 256) {
1103 		return FROMASCII(i);
1104 	    } else
1105 #endif
1106 		return i;
1107 	}
1108     }
1109     return (-1);
1110 }
1111 
1112 /*
1113  * Given a lynxactioncode, return a key (lynxkeycode) or sequence of two keys
1114  * that results in the given action while forms-editing.  The main keycode is
1115  * returned as function value, possibly with modifier bits set; in addition, if
1116  * applicable, a key that sets the required modifier flag is returned in
1117  * *pmodkey if (pmodkey!=NULL).  Non-lineediting bindings that would require
1118  * typing LYE_LKCMD (default ^V) to activate are not checked here, the caller
1119  * should do that separately if required.  If no key is bound by current
1120  * line-editor bindings to the action, -1 is returned.
1121  *
1122  * This is all a bit long - it is general enough to continue to work should the
1123  * three Mod<N>Binding[] become different tables.  - kw
1124  */
LYEditKeyForAction(int lac,int * pmodkey)1125 int LYEditKeyForAction(int lac,
1126 		       int *pmodkey)
1127 {
1128     int editaction, i, c;
1129     int mod1found = -1, mod2found = -1, mod3found = -1;
1130 
1131     if (pmodkey)
1132 	*pmodkey = -1;
1133     for (i = FIRST_I; i >= 0; i = NEXT_I(i, KEYMAP_SIZE - 2)) {
1134 	editaction = CurrentLineEditor()[i];
1135 #ifdef NOT_ASCII
1136 	if (i < 256) {
1137 	    c = FROMASCII(i);
1138 	} else
1139 #endif
1140 	    c = i;
1141 	if (editaction == (lac | LYE_FORM_LAC))
1142 	    return c;
1143 	if (editaction == LYE_FORM_PASS) {
1144 #if defined(DIRED_SUPPORT) && defined(OK_OVERRIDE)
1145 	    if (lynx_edit_mode && !no_dired_support && lac &&
1146 		LKC_TO_LAC(key_override, c) == lac)
1147 		return c;
1148 #endif /* DIRED_SUPPORT && OK_OVERRIDE */
1149 	    if (LKC_TO_LAC(keymap, c) == lac)
1150 		return c;
1151 	}
1152 	if (editaction == LYE_TAB) {
1153 #if defined(DIRED_SUPPORT) && defined(OK_OVERRIDE)
1154 	    if (lynx_edit_mode && !no_dired_support && lac &&
1155 		LKC_TO_LAC(key_override, '\t') == lac)
1156 		return c;
1157 #endif /* DIRED_SUPPORT && OK_OVERRIDE */
1158 	    if (LKC_TO_LAC(keymap, '\t') == lac)
1159 		return c;
1160 	}
1161 	if (editaction == LYE_SETM1 && mod1found < 0)
1162 	    mod1found = i;
1163 	if (editaction == LYE_SETM2 && mod2found < 0)
1164 	    mod2found = i;
1165 	if ((editaction & LYE_DF) && mod3found < 0)
1166 	    mod3found = i;
1167     }
1168 #ifdef USE_ALT_BINDINGS
1169     if (mod3found >= 0) {
1170 	for (i = mod3found; i >= 0; i = NEXT_I(i, LAST_MOD3_LKC)) {
1171 	    editaction = CurrentLineEditor()[i];
1172 	    if (!(editaction & LYE_DF))
1173 		continue;
1174 	    editaction = Mod3Binding[i];
1175 #ifdef NOT_ASCII
1176 	    if (i < 256) {
1177 		c = FROMASCII(i);
1178 	    } else
1179 #endif
1180 		c = i;
1181 	    if (pmodkey)
1182 		*pmodkey = c;
1183 	    if (editaction == (lac | LYE_FORM_LAC))
1184 		return (c | LKC_MOD3);
1185 	    if (editaction == LYE_FORM_PASS) {
1186 #if defined(DIRED_SUPPORT) && defined(OK_OVERRIDE)
1187 		if (lynx_edit_mode && !no_dired_support && lac &&
1188 		    LKC_TO_LAC(key_override, c) == lac)
1189 		    return (c | LKC_MOD3);
1190 #endif /* DIRED_SUPPORT && OK_OVERRIDE */
1191 		if (LKC_TO_LAC(keymap, c) == lac)
1192 		    return (c | LKC_MOD3);
1193 	    }
1194 	    if (editaction == LYE_TAB) {
1195 #if defined(DIRED_SUPPORT) && defined(OK_OVERRIDE)
1196 		if (lynx_edit_mode && !no_dired_support && lac &&
1197 		    LKC_TO_LAC(key_override, '\t') == lac)
1198 		    return (c | LKC_MOD3);
1199 #endif /* DIRED_SUPPORT && OK_OVERRIDE */
1200 		if (LKC_TO_LAC(keymap, '\t') == lac)
1201 		    return (c | LKC_MOD3);
1202 	    }
1203 	}
1204     }
1205     if (mod1found >= 0) {
1206 	if (pmodkey) {
1207 #ifdef NOT_ASCII
1208 	    if (mod1found < 256) {
1209 		*pmodkey = FROMASCII(mod1found);
1210 	    } else
1211 #endif
1212 		*pmodkey = mod1found;
1213 	}
1214 	for (i = FIRST_I; i >= 0; i = NEXT_I(i, LAST_MOD1_LKC)) {
1215 	    editaction = Mod1Binding[i];
1216 #ifdef NOT_ASCII
1217 	    if (i < 256) {
1218 		c = FROMASCII(i);
1219 	    } else
1220 #endif
1221 		c = i;
1222 	    if (editaction == (lac | LYE_FORM_LAC))
1223 		return (c | LKC_MOD1);
1224 	    if (editaction == LYE_FORM_PASS) {
1225 #if defined(DIRED_SUPPORT) && defined(OK_OVERRIDE)
1226 		if (lynx_edit_mode && !no_dired_support && lac &&
1227 		    LKC_TO_LAC(key_override, c) == lac)
1228 		    return (c | LKC_MOD1);
1229 #endif /* DIRED_SUPPORT && OK_OVERRIDE */
1230 		if (LKC_TO_LAC(keymap, c) == lac)
1231 		    return (c | LKC_MOD1);
1232 	    }
1233 	    if (editaction == LYE_TAB) {
1234 #if defined(DIRED_SUPPORT) && defined(OK_OVERRIDE)
1235 		if (lynx_edit_mode && !no_dired_support && lac &&
1236 		    LKC_TO_LAC(key_override, '\t') == lac)
1237 		    return (c | LKC_MOD1);
1238 #endif /* DIRED_SUPPORT && OK_OVERRIDE */
1239 		if (LKC_TO_LAC(keymap, '\t') == lac)
1240 		    return (c | LKC_MOD1);
1241 	    }
1242 	}
1243     }
1244     if (mod2found >= 0) {
1245 	if (pmodkey) {
1246 #ifdef NOT_ASCII
1247 	    if (mod1found < 256) {
1248 		*pmodkey = FROMASCII(mod1found);
1249 	    } else
1250 #endif
1251 		*pmodkey = mod1found;
1252 	}
1253 	for (i = FIRST_I; i >= 0; i = NEXT_I(i, LAST_MOD2_LKC)) {
1254 	    editaction = Mod2Binding[i];
1255 #ifdef NOT_ASCII
1256 	    if (i < 256) {
1257 		c = FROMASCII(i);
1258 	    } else
1259 #endif
1260 		c = i;
1261 	    if (editaction == (lac | LYE_FORM_LAC))
1262 		return (c | LKC_MOD2);
1263 	    if (editaction == LYE_FORM_PASS) {
1264 #if defined(DIRED_SUPPORT) && defined(OK_OVERRIDE)
1265 		if (lynx_edit_mode && !no_dired_support && lac &&
1266 		    LKC_TO_LAC(key_override, c) == lac)
1267 		    return (c | LKC_MOD2);
1268 #endif /* DIRED_SUPPORT && OK_OVERRIDE */
1269 		if (LKC_TO_LAC(keymap, c) == lac)
1270 		    return (c | LKC_MOD2);
1271 	    }
1272 	    if (editaction == LYE_TAB) {
1273 #if defined(DIRED_SUPPORT) && defined(OK_OVERRIDE)
1274 		if (lynx_edit_mode && !no_dired_support && lac &&
1275 		    LKC_TO_LAC(key_override, '\t') == lac)
1276 		    return (c | LKC_MOD2);
1277 #endif /* DIRED_SUPPORT && OK_OVERRIDE */
1278 		if (LKC_TO_LAC(keymap, '\t') == lac)
1279 		    return (c | LKC_MOD2);
1280 	    }
1281 	}
1282     }
1283 #endif /* USE_ALT_BINDINGS */
1284     if (pmodkey)
1285 	*pmodkey = -1;
1286     return (-1);
1287 }
1288 
1289 /*
1290  * Dummy initializer to ensure this module is linked
1291  * if the external model is common block, and the
1292  * module is ever placed in a library. - FM
1293  */
LYEditmapDeclared(void)1294 int LYEditmapDeclared(void)
1295 {
1296     int status = 1;
1297 
1298     return status;
1299 }
1300