xref: /freebsd/contrib/tcsh/ed.term.h (revision a466cc55373fc3cf86837f09da729535b57e69a1)
1 /*
2  * ed.term.h: Local terminal header
3  */
4 /*-
5  * Copyright (c) 1980, 1991 The Regents of the University of California.
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions and the following disclaimer.
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the
15  *    documentation and/or other materials provided with the distribution.
16  * 3. Neither the name of the University nor the names of its contributors
17  *    may be used to endorse or promote products derived from this software
18  *    without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30  * SUCH DAMAGE.
31  */
32 #ifndef _h_ed_term
33 #define _h_ed_term
34 
35 #define TO_CONTROL(A)	((A) & 037)
36 
37 #if defined(TERMIO) || defined(POSIX)
38 /*
39  * Aix compatible names
40  */
41 # if defined(VWERSE) && !defined(VWERASE)
42 #  define VWERASE VWERSE
43 # endif /* VWERSE && !VWERASE */
44 
45 # if defined(VDISCRD) && !defined(VDISCARD)
46 #  define VDISCARD VDISCRD
47 # endif /* VDISCRD && !VDISCARD */
48 
49 # if defined(VFLUSHO) && !defined(VDISCARD)
50 #  define VDISCARD VFLUSHO
51 # endif  /* VFLUSHO && VDISCARD */
52 
53 # if defined(VSTRT) && !defined(VSTART)
54 #  define VSTART VSTRT
55 # endif /* VSTRT && ! VSTART */
56 
57 # if defined(VSTAT) && !defined(VSTATUS)
58 #  define VSTATUS VSTAT
59 # endif /* VSTAT && ! VSTATUS */
60 
61 # ifndef ONLRET
62 #  define ONLRET 0
63 # endif /* ONLRET */
64 
65 # ifndef TAB3
66 #  ifdef OXTABS
67 #   define TAB3 OXTABS
68 #  else
69 #   define TAB3 0
70 #  endif /* OXTABS */
71 # endif /* !TAB3 */
72 
73 # if defined(OXTABS) && !defined(XTABS)
74 #  define XTABS OXTABS
75 # endif /* OXTABS && !XTABS */
76 
77 # ifndef ONLCR
78 #  define ONLCR 0
79 # endif /* ONLCR */
80 
81 # ifndef IEXTEN
82 #  define IEXTEN 0
83 # endif /* IEXTEN */
84 
85 /*
86  * emx garbage
87  */
88 # ifndef IDEFAULT
89 #  define IDEFAULT 0
90 # endif /* IDEFAULT */
91 
92 # ifndef IDELETE
93 #  define IDELETE 0
94 # endif /* IDELETE */
95 
96 # ifndef ECHOCTL
97 #  define ECHOCTL 0
98 # endif /* ECHOCTL */
99 
100 # ifndef PARENB
101 #  define PARENB 0
102 # endif /* PARENB */
103 
104 # ifndef EXTPROC
105 #  define EXTPROC 0
106 # endif /* EXTPROC */
107 
108 # ifndef FLUSHO
109 #  define FLUSHO  0
110 # endif /* FLUSHO */
111 
112 
113 # if defined(VDISABLE) && !defined(_POSIX_VDISABLE)
114 #  define _POSIX_VDISABLE VDISABLE
115 # endif /* VDISABLE && ! _POSIX_VDISABLE */
116 
117 /*
118  * Work around ISC's definition of IEXTEN which is
119  * XCASE!
120  */
121 # ifdef ISC
122 #  if defined(IEXTEN) && defined(XCASE)
123 #   if IEXTEN == XCASE
124 #    undef IEXTEN
125 #    define IEXTEN 0
126 #   endif /* IEXTEN == XCASE */
127 #  endif /* IEXTEN && XCASE */
128 #  if defined(IEXTEN) && !defined(XCASE)
129 #   define XCASE IEXTEN
130 #   undef IEXTEN
131 #   define IEXTEN 0
132 #  endif /* IEXTEN && !XCASE */
133 # endif /* ISC */
134 
135 /*
136  * Work around convex weirdness where turning off IEXTEN makes us
137  * lose all postprocessing!
138  */
139 #ifdef convex
140 # if defined(IEXTEN) && IEXTEN != 0
141 #  undef IEXTEN
142 #  define IEXTEN 0
143 # endif /* IEXTEN != 0 */
144 #endif /* convex */
145 
146 
147 # else /* SGTTY */
148 
149 # ifndef LPASS8
150 #  define LPASS8  0
151 # endif /* LPASS8 */
152 
153 #endif /* TERMIO || POSIX */
154 
155 #ifndef _POSIX_VDISABLE
156 # define _POSIX_VDISABLE ((unsigned char) -1)
157 #endif /* _POSIX_VDISABLE */
158 
159 
160 #if !defined(CREPRINT) && defined(CRPRNT)
161 # define CREPRINT CRPRNT
162 #endif /* !CREPRINT && CRPRNT */
163 #if !defined(CDISCARD) && defined(CFLUSH)
164 # define CDISCARD CFLUSH
165 #endif /* !CDISCARD && CFLUSH */
166 #if !defined(CDISCARD) && defined(CFLUSHO)
167 # define CDISCARD CFLUSHO
168 #endif /* !CDISCARD && CFLUSHO */
169 
170 /*
171  * IRIX4.0 control macro is broken!
172  * Ignore and undef all default tty chars defined and redefine only
173  * the ones that are different in the IRIX file.
174  */
175 #if __STDC__ && defined(IRIS4D)
176 # undef  CINTR
177 # define CINTR		0177	/* ^? */
178 # undef  CQUIT
179 # undef  CERASE
180 # define CERASE		TO_CONTROL('h')
181 # undef  CKILL
182 # undef  CEOF
183 # undef  CEOL
184 # undef  CEOL2
185 # undef  CSWTCH
186 # define CSWTCH		TO_CONTROL('z')
187 # undef  CDSWTCH
188 # undef  CERASE2
189 # undef  CSTART
190 # undef  CSTOP
191 # undef  CWERASE
192 # undef  CSUSP
193 # undef  CDSUSP
194 # undef  CREPRINT
195 # undef  CDISCARD
196 # undef  CLNEXT
197 # undef  CSTATUS
198 # undef  CPAGE
199 # undef  CPGOFF
200 # undef  CKILL2
201 # undef  CBRK
202 # undef  CMIN
203 # undef  CTIME
204 #endif /* __STDC__ && IRIS4D */
205 
206 
207 #ifndef CINTR
208 # define CINTR		TO_CONTROL('c')
209 #endif /* CINTR */
210 #ifndef CQUIT
211 # define CQUIT		034	/* ^\ */
212 #endif /* CQUIT */
213 #ifndef CERASE
214 # define CERASE		0177	/* ^? */
215 #endif /* CERASE */
216 #ifndef CKILL
217 # define CKILL		TO_CONTROL('u')
218 #endif /* CKILL */
219 #ifndef CEOF
220 # define CEOF		TO_CONTROL('d')
221 #endif /* CEOF */
222 #ifndef CEOL
223 # define CEOL		_POSIX_VDISABLE
224 #endif /* CEOL */
225 #ifndef CEOL2
226 # define CEOL2		_POSIX_VDISABLE
227 #endif /* CEOL2 */
228 #ifndef CSWTCH
229 # define CSWTCH		_POSIX_VDISABLE
230 #endif /* CSWTCH */
231 #ifndef CDSWTCH
232 # define CDSWTCH	_POSIX_VDISABLE
233 #endif /* CDSWTCH */
234 #ifndef CERASE2
235 # define CERASE2	_POSIX_VDISABLE
236 #endif /* CERASE2 */
237 #ifndef CSTART
238 # define CSTART		TO_CONTROL('q')
239 #endif /* CSTART */
240 #ifndef CSTOP
241 # define CSTOP		TO_CONTROL('s')
242 #endif /* CSTOP */
243 #ifndef CSUSP
244 # define CSUSP		TO_CONTROL('z')
245 #endif /* CSUSP */
246 #ifndef CDSUSP
247 # define CDSUSP		TO_CONTROL('y')
248 #endif /* CDSUSP */
249 
250 #ifdef hpux
251 
252 # ifndef CREPRINT
253 #  define CREPRINT	_POSIX_VDISABLE
254 # endif /* CREPRINT */
255 # ifndef CDISCARD
256 #  define CDISCARD	_POSIX_VDISABLE
257 # endif /* CDISCARD */
258 # ifndef CLNEXT
259 #  define CLNEXT	_POSIX_VDISABLE
260 # endif /* CLNEXT */
261 # ifndef CWERASE
262 #  define CWERASE	_POSIX_VDISABLE
263 # endif /* CWERASE */
264 
265 #else /* !hpux */
266 
267 # ifndef CREPRINT
268 #  define CREPRINT	TO_CONTROL('r')
269 # endif /* CREPRINT */
270 # ifndef CDISCARD
271 #  define CDISCARD	TO_CONTROL('o')
272 # endif /* CDISCARD */
273 # ifndef CLNEXT
274 #  define CLNEXT	TO_CONTROL('v')
275 # endif /* CLNEXT */
276 # ifndef CWERASE
277 #  define CWERASE	TO_CONTROL('w')
278 # endif /* CWERASE */
279 
280 #endif /* hpux */
281 
282 #ifndef CSTATUS
283 # define CSTATUS	TO_CONTROL('t')
284 #endif /* CSTATUS */
285 #ifndef CPAGE
286 # define CPAGE		' '
287 #endif /* CPAGE */
288 #ifndef CPGOFF
289 # define CPGOFF		TO_CONTROL('m')
290 #endif /* CPGOFF */
291 #ifndef CKILL2
292 # define CKILL2		_POSIX_VDISABLE
293 #endif /* CKILL2 */
294 #ifndef CBRK
295 # ifndef masscomp
296 #  define CBRK		0377
297 # else
298 #  define CBRK		'\0'
299 # endif /* masscomp */
300 #endif /* CBRK */
301 #ifndef CMIN
302 # if VMIN == VEOF
303 #  define CMIN		CEOF
304 # else
305 #  define CMIN		1
306 # endif
307 #endif /* CMIN */
308 #ifndef CTIME
309 # if VTIME == VEOL
310 #  define CTIME		CEOL
311 # else
312 #  define CTIME		0
313 # endif
314 #endif /* CTIME */
315 
316 /*
317  * Fix for sun inconsistency. On termio VSUSP and the rest of the
318  * ttychars > NCC are defined. So we undefine them.
319  */
320 #if defined(TERMIO) || defined(POSIX)
321 # if defined(POSIX) && defined(NCCS)
322 #  define NUMCC		NCCS
323 # else
324 #  ifdef NCC
325 #   define NUMCC	NCC
326 #  endif /* NCC */
327 # endif /* POSIX && NCCS */
328 # ifdef NUMCC
329 #  ifdef VINTR
330 #   if NUMCC <= VINTR
331 #    undef VINTR
332 #   endif /* NUMCC <= VINTR */
333 #  endif /* VINTR */
334 #  ifdef VQUIT
335 #   if NUMCC <= VQUIT
336 #    undef VQUIT
337 #   endif /* NUMCC <= VQUIT */
338 #  endif /* VQUIT */
339 #  ifdef VERASE
340 #   if NUMCC <= VERASE
341 #    undef VERASE
342 #   endif /* NUMCC <= VERASE */
343 #  endif /* VERASE */
344 #  ifdef VKILL
345 #   if NUMCC <= VKILL
346 #    undef VKILL
347 #   endif /* NUMCC <= VKILL */
348 #  endif /* VKILL */
349 #  ifdef VEOF
350 #   if NUMCC <= VEOF
351 #    undef VEOF
352 #   endif /* NUMCC <= VEOF */
353 #  endif /* VEOF */
354 #  ifdef VEOL
355 #   if NUMCC <= VEOL
356 #    undef VEOL
357 #   endif /* NUMCC <= VEOL */
358 #  endif /* VEOL */
359 #  ifdef VEOL2
360 #   if NUMCC <= VEOL2
361 #    undef VEOL2
362 #   endif /* NUMCC <= VEOL2 */
363 #  endif /* VEOL2 */
364 #  ifdef VSWTCH
365 #   if NUMCC <= VSWTCH
366 #    undef VSWTCH
367 #   endif /* NUMCC <= VSWTCH */
368 #  endif /* VSWTCH */
369 #  ifdef VDSWTCH
370 #   if NUMCC <= VDSWTCH
371 #    undef VDSWTCH
372 #   endif /* NUMCC <= VDSWTCH */
373 #  endif /* VDSWTCH */
374 #  ifdef VERASE2
375 #   if NUMCC <= VERASE2
376 #    undef VERASE2
377 #   endif /* NUMCC <= VERASE2 */
378 #  endif /* VERASE2 */
379 #  ifdef VSTART
380 #   if NUMCC <= VSTART
381 #    undef VSTART
382 #   endif /* NUMCC <= VSTART */
383 #  endif /* VSTART */
384 #  ifdef VSTOP
385 #   if NUMCC <= VSTOP
386 #    undef VSTOP
387 #   endif /* NUMCC <= VSTOP */
388 #  endif /* VSTOP */
389 #  ifdef VWERASE
390 #   if NUMCC <= VWERASE
391 #    undef VWERASE
392 #   endif /* NUMCC <= VWERASE */
393 #  endif /* VWERASE */
394 #  ifdef VSUSP
395 #   if NUMCC <= VSUSP
396 #    undef VSUSP
397 #   endif /* NUMCC <= VSUSP */
398 #  endif /* VSUSP */
399 #  ifdef VDSUSP
400 #   if NUMCC <= VDSUSP
401 #    undef VDSUSP
402 #   endif /* NUMCC <= VDSUSP */
403 #  endif /* VDSUSP */
404 #  ifdef VREPRINT
405 #   if NUMCC <= VREPRINT
406 #    undef VREPRINT
407 #   endif /* NUMCC <= VREPRINT */
408 #  endif /* VREPRINT */
409 #  ifdef VDISCARD
410 #   if NUMCC <= VDISCARD
411 #    undef VDISCARD
412 #   endif /* NUMCC <= VDISCARD */
413 #  endif /* VDISCARD */
414 #  ifdef VLNEXT
415 #   if NUMCC <= VLNEXT
416 #    undef VLNEXT
417 #   endif /* NUMCC <= VLNEXT */
418 #  endif /* VLNEXT */
419 #  ifdef VSTATUS
420 #   if NUMCC <= VSTATUS
421 #    undef VSTATUS
422 #   endif /* NUMCC <= VSTATUS */
423 #  endif /* VSTATUS */
424 #  ifdef VPAGE
425 #   if NUMCC <= VPAGE
426 #    undef VPAGE
427 #   endif /* NUMCC <= VPAGE */
428 #  endif /* VPAGE */
429 #  ifdef VPGOFF
430 #   if NUMCC <= VPGOFF
431 #    undef VPGOFF
432 #   endif /* NUMCC <= VPGOFF */
433 #  endif /* VPGOFF */
434 #  ifdef VKILL2
435 #   if NUMCC <= VKILL2
436 #    undef VKILL2
437 #   endif /* NUMCC <= VKILL2 */
438 #  endif /* VKILL2 */
439 #  ifdef VBRK
440 #   if NUMCC <= VBRK
441 #    undef VBRK
442 #   endif /* NUMCC <= VBRK */
443 #  endif /* VBRK */
444 #  ifdef VMIN
445 #   if NUMCC <= VMIN
446 #    undef VMIN
447 #   endif /* NUMCC <= VMIN */
448 #  endif /* VMIN */
449 #  ifdef VTIME
450 #   if NUMCC <= VTIME
451 #    undef VTIME
452 #   endif /* NUMCC <= VTIME */
453 #  endif /* VTIME */
454 # endif /* NUMCC */
455 #endif /* !POSIX */
456 
457 /*
458  * fix for hpux10 inconsistency: it has VWERASE, but TIOCSLTC returns
459  * EINVAL if one tries to change it
460  * Also for RH6.2 on the alpha, defined TIOCGLTC, but does not have
461  * struct ltchars
462  */
463 #if (defined(hpux) && defined(VSUSP) && defined(VDSUSP) && defined(VWERASE) && defined(VLNEXT)) || defined(__linux__) || defined(__GNU__) || defined(__GLIBC__) || defined(__QNXNTO__)
464 # undef TIOCGLTC       /* not really needed */
465 # undef TIOCSLTC
466 #endif
467 
468 #define C_INTR		 0
469 #define C_QUIT		 1
470 #define C_ERASE		 2
471 #define C_KILL		 3
472 #define C_EOF		 4
473 #define C_EOL		 5
474 #define C_EOL2		 6
475 #define C_SWTCH		 7
476 #define C_DSWTCH	 8
477 #define C_ERASE2	 9
478 #define C_START		10
479 #define C_STOP		11
480 #define C_WERASE	12
481 #define C_SUSP		13
482 #define C_DSUSP		14
483 #define C_REPRINT	15
484 #define C_DISCARD	16
485 #define C_LNEXT		17
486 #define C_STATUS	18
487 #define C_PAGE		19
488 #define C_PGOFF		20
489 #define C_KILL2		21
490 #define C_BRK		22
491 #define C_MIN		23
492 #define C_TIME		24
493 #define C_NCC		25
494 #define C_SH(A)		(1 << (A))
495 
496 /*
497  * Terminal dependend data structures
498  */
499 typedef struct {
500 #ifdef WINNT_NATIVE
501     int dummy;
502 #else /* !WINNT_NATIVE */
503 # if defined(POSIX) || defined(TERMIO)
504 #  ifdef POSIX
505     struct termios d_t;
506 #  else
507     struct termio d_t;
508 #  endif /* POSIX */
509 # else /* SGTTY */
510 #  ifdef TIOCGETP
511     struct sgttyb d_t;
512 #  endif /* TIOCGETP */
513 #  ifdef TIOCGETC
514     struct tchars d_tc;
515 #  endif /* TIOCGETC */
516 #  ifdef TIOCGPAGE
517     struct ttypagestat d_pc;
518 #  endif /* TIOCGPAGE */
519 #  ifdef TIOCLGET
520     int d_lb;
521 #  endif /* TIOCLGET */
522 # endif /* POSIX || TERMIO */
523 # ifdef TIOCGLTC
524     struct ltchars d_ltc;
525 # endif /* TIOCGLTC */
526 #endif /* WINNT_NATIVE */
527 } ttydata_t;
528 
529 #endif /* _h_ed_term */
530