Commit | Line | Data |
---|---|---|
00ea1f8e KB |
1 | /*- |
2 | * Copyright (c) 1992 The Regents of the University of California. | |
3 | * All rights reserved. | |
4 | * | |
5 | * This code is derived from software contributed to Berkeley by | |
6 | * Christos Zoulas of Cornell University. | |
7 | * | |
8 | * %sccs.include.redist.c% | |
9 | * | |
b6dd18ed | 10 | * @(#)tty.h 5.3 (Berkeley) %G% |
00ea1f8e KB |
11 | */ |
12 | ||
13 | /* | |
14 | * el.tty.h: Local terminal header | |
15 | */ | |
16 | #ifndef _h_el_tty | |
17 | #define _h_el_tty | |
18 | ||
25b839a8 | 19 | #include "histedit.h" |
00ea1f8e KB |
20 | #include <termios.h> |
21 | ||
22 | /* Define our own since everyone gets it wrong! */ | |
23 | #define CONTROL(A) ((A) & 037) | |
24 | ||
25 | /* | |
26 | * Aix compatible names | |
27 | */ | |
28 | # if defined(VWERSE) && !defined(VWERASE) | |
29 | # define VWERASE VWERSE | |
30 | # endif /* VWERSE && !VWERASE */ | |
31 | ||
32 | # if defined(VDISCRD) && !defined(VDISCARD) | |
33 | # define VDISCARD VDISCRD | |
34 | # endif /* VDISCRD && !VDISCARD */ | |
35 | ||
36 | # if defined(VFLUSHO) && !defined(VDISCARD) | |
37 | # define VDISCARD VFLUSHO | |
38 | # endif /* VFLUSHO && VDISCARD */ | |
39 | ||
40 | # if defined(VSTRT) && !defined(VSTART) | |
41 | # define VSTART VSTRT | |
42 | # endif /* VSTRT && ! VSTART */ | |
43 | ||
44 | # if defined(VSTAT) && !defined(VSTATUS) | |
45 | # define VSTATUS VSTAT | |
46 | # endif /* VSTAT && ! VSTATUS */ | |
47 | ||
48 | # ifndef ONLRET | |
49 | # define ONLRET 0 | |
50 | # endif /* ONLRET */ | |
51 | ||
52 | # ifndef TAB3 | |
53 | # ifdef OXTABS | |
54 | # define TAB3 OXTABS | |
55 | # else | |
56 | # define TAB3 0 | |
57 | # endif /* OXTABS */ | |
58 | # endif /* !TAB3 */ | |
59 | ||
60 | # if defined(OXTABS) && !defined(XTABS) | |
61 | # define XTABS OXTABS | |
62 | # endif /* OXTABS && !XTABS */ | |
63 | ||
64 | # ifndef ONLCR | |
65 | # define ONLCR 0 | |
66 | # endif /* ONLCR */ | |
67 | ||
68 | # ifndef IEXTEN | |
69 | # define IEXTEN 0 | |
70 | # endif /* IEXTEN */ | |
71 | ||
72 | # ifndef ECHOCTL | |
73 | # define ECHOCTL 0 | |
74 | # endif /* ECHOCTL */ | |
75 | ||
76 | # ifndef PARENB | |
77 | # define PARENB 0 | |
78 | # endif /* PARENB */ | |
79 | ||
80 | # ifndef EXTPROC | |
81 | # define EXTPROC 0 | |
82 | # endif /* EXTPROC */ | |
83 | ||
84 | # ifndef FLUSHO | |
85 | # define FLUSHO 0 | |
86 | # endif /* FLUSHO */ | |
87 | ||
88 | ||
89 | # if defined(VDISABLE) && !defined(_POSIX_VDISABLE) | |
90 | # define _POSIX_VDISABLE VDISABLE | |
91 | # endif /* VDISABLE && ! _POSIX_VDISABLE */ | |
92 | ||
93 | /* | |
94 | * Work around ISC's definition of IEXTEN which is | |
95 | * XCASE! | |
96 | */ | |
97 | # ifdef ISC | |
98 | # if defined(IEXTEN) && defined(XCASE) | |
99 | # if IEXTEN == XCASE | |
100 | # undef IEXTEN | |
101 | # define IEXTEN 0 | |
102 | # endif /* IEXTEN == XCASE */ | |
103 | # endif /* IEXTEN && XCASE */ | |
104 | # if defined(IEXTEN) && !defined(XCASE) | |
105 | # define XCASE IEXTEN | |
106 | # undef IEXTEN | |
107 | # define IEXTEN 0 | |
108 | # endif /* IEXTEN && !XCASE */ | |
109 | # endif /* ISC */ | |
110 | ||
111 | /* | |
112 | * Work around convex weirdness where turning off IEXTEN makes us | |
113 | * lose all postprocessing! | |
114 | */ | |
115 | #if defined(convex) || defined(__convex__) | |
116 | # if defined(IEXTEN) && IEXTEN != 0 | |
117 | # undef IEXTEN | |
118 | # define IEXTEN 0 | |
119 | # endif /* IEXTEN != 0 */ | |
120 | #endif /* convex || __convex__ */ | |
121 | ||
122 | ||
123 | ||
124 | #ifndef _POSIX_VDISABLE | |
125 | # define _POSIX_VDISABLE ((unsigned char) -1) | |
126 | #endif /* _POSIX_VDISABLE */ | |
127 | ||
128 | #if !defined(CREPRINT) && defined(CRPRNT) | |
129 | # define CREPRINT CRPRNT | |
130 | #endif /* !CREPRINT && CRPRNT */ | |
131 | #if !defined(CDISCARD) && defined(CFLUSH) | |
132 | # define CDISCARD CFLUSH | |
133 | #endif /* !CDISCARD && CFLUSH */ | |
134 | ||
135 | #ifndef CINTR | |
136 | # define CINTR CONTROL('c') | |
137 | #endif /* CINTR */ | |
138 | #ifndef CQUIT | |
139 | # define CQUIT 034 /* ^\ */ | |
140 | #endif /* CQUIT */ | |
141 | #ifndef CERASE | |
142 | # define CERASE 0177 /* ^? */ | |
143 | #endif /* CERASE */ | |
144 | #ifndef CKILL | |
145 | # define CKILL CONTROL('u') | |
146 | #endif /* CKILL */ | |
147 | #ifndef CEOF | |
148 | # define CEOF CONTROL('d') | |
149 | #endif /* CEOF */ | |
150 | #ifndef CEOL | |
151 | # define CEOL _POSIX_VDISABLE | |
152 | #endif /* CEOL */ | |
153 | #ifndef CEOL2 | |
154 | # define CEOL2 _POSIX_VDISABLE | |
155 | #endif /* CEOL2 */ | |
156 | #ifndef CSWTCH | |
157 | # define CSWTCH _POSIX_VDISABLE | |
158 | #endif /* CSWTCH */ | |
159 | #ifndef CDSWTCH | |
160 | # define CDSWTCH _POSIX_VDISABLE | |
161 | #endif /* CDSWTCH */ | |
162 | #ifndef CERASE2 | |
163 | # define CERASE2 _POSIX_VDISABLE | |
164 | #endif /* CERASE2 */ | |
165 | #ifndef CSTART | |
166 | # define CSTART CONTROL('q') | |
167 | #endif /* CSTART */ | |
168 | #ifndef CSTOP | |
169 | # define CSTOP CONTROL('s') | |
170 | #endif /* CSTOP */ | |
171 | #ifndef CSUSP | |
172 | # define CSUSP CONTROL('z') | |
173 | #endif /* CSUSP */ | |
174 | #ifndef CDSUSP | |
175 | # define CDSUSP CONTROL('y') | |
176 | #endif /* CDSUSP */ | |
177 | ||
178 | #ifdef hpux | |
179 | ||
180 | # ifndef CREPRINT | |
181 | # define CREPRINT _POSIX_VDISABLE | |
182 | # endif /* CREPRINT */ | |
183 | # ifndef CDISCARD | |
184 | # define CDISCARD _POSIX_VDISABLE | |
185 | # endif /* CDISCARD */ | |
186 | # ifndef CLNEXT | |
187 | # define CLNEXT _POSIX_VDISABLE | |
188 | # endif /* CLNEXT */ | |
189 | # ifndef CWERASE | |
190 | # define CWERASE _POSIX_VDISABLE | |
191 | # endif /* CWERASE */ | |
192 | ||
193 | #else /* !hpux */ | |
194 | ||
195 | # ifndef CREPRINT | |
196 | # define CREPRINT CONTROL('r') | |
197 | # endif /* CREPRINT */ | |
198 | # ifndef CDISCARD | |
199 | # define CDISCARD CONTROL('o') | |
200 | # endif /* CDISCARD */ | |
201 | # ifndef CLNEXT | |
202 | # define CLNEXT CONTROL('v') | |
203 | # endif /* CLNEXT */ | |
204 | # ifndef CWERASE | |
205 | # define CWERASE CONTROL('w') | |
206 | # endif /* CWERASE */ | |
207 | ||
208 | #endif /* hpux */ | |
209 | ||
210 | #ifndef CSTATUS | |
211 | # define CSTATUS CONTROL('t') | |
212 | #endif /* CSTATUS */ | |
213 | #ifndef CPAGE | |
214 | # define CPAGE ' ' | |
215 | #endif /* CPAGE */ | |
216 | #ifndef CPGOFF | |
217 | # define CPGOFF CONTROL('m') | |
218 | #endif /* CPGOFF */ | |
219 | #ifndef CKILL2 | |
220 | # define CKILL2 _POSIX_VDISABLE | |
221 | #endif /* CKILL2 */ | |
222 | #ifndef CBRK | |
223 | # ifndef masscomp | |
224 | # define CBRK 0377 | |
225 | # else | |
226 | # define CBRK '\0' | |
227 | # endif /* masscomp */ | |
228 | #endif /* CBRK */ | |
229 | #ifndef CMIN | |
230 | # define CMIN CEOF | |
231 | #endif /* CMIN */ | |
232 | #ifndef CTIME | |
233 | # define CTIME CEOL | |
234 | #endif /* CTIME */ | |
235 | ||
236 | /* | |
237 | * Fix for sun inconsistency. On termio VSUSP and the rest of the | |
238 | * ttychars > NCC are defined. So we undefine them. | |
239 | */ | |
240 | #if defined(TERMIO) || defined(POSIX) | |
241 | # if defined(POSIX) && defined(NCCS) | |
242 | # define NUMCC NCCS | |
243 | # else | |
244 | # ifdef NCC | |
245 | # define NUMCC NCC | |
246 | # endif /* NCC */ | |
247 | # endif /* POSIX && NCCS */ | |
248 | # ifdef NUMCC | |
249 | # ifdef VINTR | |
250 | # if NUMCC <= VINTR | |
251 | # undef VINTR | |
252 | # endif /* NUMCC <= VINTR */ | |
253 | # endif /* VINTR */ | |
254 | # ifdef VQUIT | |
255 | # if NUMCC <= VQUIT | |
256 | # undef VQUIT | |
257 | # endif /* NUMCC <= VQUIT */ | |
258 | # endif /* VQUIT */ | |
259 | # ifdef VERASE | |
260 | # if NUMCC <= VERASE | |
261 | # undef VERASE | |
262 | # endif /* NUMCC <= VERASE */ | |
263 | # endif /* VERASE */ | |
264 | # ifdef VKILL | |
265 | # if NUMCC <= VKILL | |
266 | # undef VKILL | |
267 | # endif /* NUMCC <= VKILL */ | |
268 | # endif /* VKILL */ | |
269 | # ifdef VEOF | |
270 | # if NUMCC <= VEOF | |
271 | # undef VEOF | |
272 | # endif /* NUMCC <= VEOF */ | |
273 | # endif /* VEOF */ | |
274 | # ifdef VEOL | |
275 | # if NUMCC <= VEOL | |
276 | # undef VEOL | |
277 | # endif /* NUMCC <= VEOL */ | |
278 | # endif /* VEOL */ | |
279 | # ifdef VEOL2 | |
280 | # if NUMCC <= VEOL2 | |
281 | # undef VEOL2 | |
282 | # endif /* NUMCC <= VEOL2 */ | |
283 | # endif /* VEOL2 */ | |
284 | # ifdef VSWTCH | |
285 | # if NUMCC <= VSWTCH | |
286 | # undef VSWTCH | |
287 | # endif /* NUMCC <= VSWTCH */ | |
288 | # endif /* VSWTCH */ | |
289 | # ifdef VDSWTCH | |
290 | # if NUMCC <= VDSWTCH | |
291 | # undef VDSWTCH | |
292 | # endif /* NUMCC <= VDSWTCH */ | |
293 | # endif /* VDSWTCH */ | |
294 | # ifdef VERASE2 | |
295 | # if NUMCC <= VERASE2 | |
296 | # undef VERASE2 | |
297 | # endif /* NUMCC <= VERASE2 */ | |
298 | # endif /* VERASE2 */ | |
299 | # ifdef VSTART | |
300 | # if NUMCC <= VSTART | |
301 | # undef VSTART | |
302 | # endif /* NUMCC <= VSTART */ | |
303 | # endif /* VSTART */ | |
304 | # ifdef VSTOP | |
305 | # if NUMCC <= VSTOP | |
306 | # undef VSTOP | |
307 | # endif /* NUMCC <= VSTOP */ | |
308 | # endif /* VSTOP */ | |
309 | # ifdef VWERASE | |
310 | # if NUMCC <= VWERASE | |
311 | # undef VWERASE | |
312 | # endif /* NUMCC <= VWERASE */ | |
313 | # endif /* VWERASE */ | |
314 | # ifdef VSUSP | |
315 | # if NUMCC <= VSUSP | |
316 | # undef VSUSP | |
317 | # endif /* NUMCC <= VSUSP */ | |
318 | # endif /* VSUSP */ | |
319 | # ifdef VDSUSP | |
320 | # if NUMCC <= VDSUSP | |
321 | # undef VDSUSP | |
322 | # endif /* NUMCC <= VDSUSP */ | |
323 | # endif /* VDSUSP */ | |
324 | # ifdef VREPRINT | |
325 | # if NUMCC <= VREPRINT | |
326 | # undef VREPRINT | |
327 | # endif /* NUMCC <= VREPRINT */ | |
328 | # endif /* VREPRINT */ | |
329 | # ifdef VDISCARD | |
330 | # if NUMCC <= VDISCARD | |
331 | # undef VDISCARD | |
332 | # endif /* NUMCC <= VDISCARD */ | |
333 | # endif /* VDISCARD */ | |
334 | # ifdef VLNEXT | |
335 | # if NUMCC <= VLNEXT | |
336 | # undef VLNEXT | |
337 | # endif /* NUMCC <= VLNEXT */ | |
338 | # endif /* VLNEXT */ | |
339 | # ifdef VSTATUS | |
340 | # if NUMCC <= VSTATUS | |
341 | # undef VSTATUS | |
342 | # endif /* NUMCC <= VSTATUS */ | |
343 | # endif /* VSTATUS */ | |
344 | # ifdef VPAGE | |
345 | # if NUMCC <= VPAGE | |
346 | # undef VPAGE | |
347 | # endif /* NUMCC <= VPAGE */ | |
348 | # endif /* VPAGE */ | |
349 | # ifdef VPGOFF | |
350 | # if NUMCC <= VPGOFF | |
351 | # undef VPGOFF | |
352 | # endif /* NUMCC <= VPGOFF */ | |
353 | # endif /* VPGOFF */ | |
354 | # ifdef VKILL2 | |
355 | # if NUMCC <= VKILL2 | |
356 | # undef VKILL2 | |
357 | # endif /* NUMCC <= VKILL2 */ | |
358 | # endif /* VKILL2 */ | |
359 | # ifdef VBRK | |
360 | # if NUMCC <= VBRK | |
361 | # undef VBRK | |
362 | # endif /* NUMCC <= VBRK */ | |
363 | # endif /* VBRK */ | |
364 | # ifdef VMIN | |
365 | # if NUMCC <= VMIN | |
366 | # undef VMIN | |
367 | # endif /* NUMCC <= VMIN */ | |
368 | # endif /* VMIN */ | |
369 | # ifdef VTIME | |
370 | # if NUMCC <= VTIME | |
371 | # undef VTIME | |
372 | # endif /* NUMCC <= VTIME */ | |
373 | # endif /* VTIME */ | |
374 | # endif /* NUMCC */ | |
375 | #endif /* !POSIX */ | |
376 | ||
377 | #define C_INTR 0 | |
378 | #define C_QUIT 1 | |
379 | #define C_ERASE 2 | |
380 | #define C_KILL 3 | |
381 | #define C_EOF 4 | |
382 | #define C_EOL 5 | |
383 | #define C_EOL2 6 | |
384 | #define C_SWTCH 7 | |
385 | #define C_DSWTCH 8 | |
386 | #define C_ERASE2 9 | |
387 | #define C_START 10 | |
388 | #define C_STOP 11 | |
389 | #define C_WERASE 12 | |
390 | #define C_SUSP 13 | |
391 | #define C_DSUSP 14 | |
392 | #define C_REPRINT 15 | |
393 | #define C_DISCARD 16 | |
394 | #define C_LNEXT 17 | |
395 | #define C_STATUS 18 | |
396 | #define C_PAGE 19 | |
397 | #define C_PGOFF 20 | |
398 | #define C_KILL2 21 | |
399 | #define C_BRK 22 | |
400 | #define C_MIN 23 | |
401 | #define C_TIME 24 | |
402 | #define C_NCC 25 | |
403 | #define C_SH(A) (1 << (A)) | |
404 | ||
405 | /* | |
406 | * Terminal dependend data structures | |
407 | */ | |
408 | #define EX_IO 0 /* while we are executing */ | |
409 | #define ED_IO 1 /* while we are editing */ | |
410 | #define TS_IO 2 /* new mode from terminal */ | |
411 | #define QU_IO 2 /* used only for quoted chars */ | |
412 | #define NN_IO 3 /* The number of entries */ | |
413 | ||
414 | #define M_INP 0 | |
415 | #define M_OUT 1 | |
416 | #define M_CTL 2 | |
417 | #define M_LIN 3 | |
418 | #define M_CHAR 4 | |
419 | #define M_NN 5 | |
420 | ||
421 | typedef struct { | |
422 | char *t_name; | |
423 | int t_setmask; | |
424 | int t_clrmask; | |
425 | } ttyperm_t[NN_IO][M_NN]; | |
426 | ||
427 | typedef unsigned char ttychar_t[NN_IO][C_NCC]; | |
428 | ||
429 | protected int tty_init __P((EditLine *)); | |
430 | protected void tty_end __P((EditLine *)); | |
431 | protected int tty_stty __P((EditLine *, int, char**)); | |
432 | protected int tty_rawmode __P((EditLine *)); | |
433 | protected int tty_cookedmode __P((EditLine *)); | |
434 | protected int tty_quotemode __P((EditLine *)); | |
435 | protected int tty_noquotemode __P((EditLine *)); | |
436 | ||
437 | typedef struct { | |
438 | ttyperm_t t_t; | |
439 | ttychar_t t_c; | |
440 | struct termios t_ex, t_ed, t_ts; | |
441 | int t_tabs; | |
442 | int t_eight; | |
443 | speed_t t_speed; | |
444 | int t_mode; | |
445 | unsigned char t_vdisable; | |
446 | } el_tty_t; | |
447 | ||
448 | ||
449 | #endif /* _h_el_tty */ |