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