ptyx.h revision 9a64e1c5
19a64e1c5Smrg/* $XTermId: ptyx.h,v 1.809 2014/06/13 00:53:35 tom Exp $ */
2d522f475Smrg
3d522f475Smrg/*
4fa3f02f3Smrg * Copyright 1999-2013,2014 by Thomas E. Dickey
5d522f475Smrg *
6d522f475Smrg *                         All Rights Reserved
7d522f475Smrg *
8d522f475Smrg * Permission is hereby granted, free of charge, to any person obtaining a
9d522f475Smrg * copy of this software and associated documentation files (the
10d522f475Smrg * "Software"), to deal in the Software without restriction, including
11d522f475Smrg * without limitation the rights to use, copy, modify, merge, publish,
12d522f475Smrg * distribute, sublicense, and/or sell copies of the Software, and to
13d522f475Smrg * permit persons to whom the Software is furnished to do so, subject to
14d522f475Smrg * the following conditions:
15d522f475Smrg *
16d522f475Smrg * The above copyright notice and this permission notice shall be included
17d522f475Smrg * in all copies or substantial portions of the Software.
18d522f475Smrg *
19d522f475Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20d522f475Smrg * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21d522f475Smrg * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
22d522f475Smrg * IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
23d522f475Smrg * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
24d522f475Smrg * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
25d522f475Smrg * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26d522f475Smrg *
27d522f475Smrg * Except as contained in this notice, the name(s) of the above copyright
28d522f475Smrg * holders shall not be used in advertising or otherwise to promote the
29d522f475Smrg * sale, use or other dealings in this Software without prior written
30d522f475Smrg * authorization.
31d522f475Smrg *
32d522f475Smrg *
33d522f475Smrg * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
34d522f475Smrg *
35d522f475Smrg *                         All Rights Reserved
36d522f475Smrg *
37d522f475Smrg * Permission to use, copy, modify, and distribute this software and its
38d522f475Smrg * documentation for any purpose and without fee is hereby granted,
39d522f475Smrg * provided that the above copyright notice appear in all copies and that
40d522f475Smrg * both that copyright notice and this permission notice appear in
41d522f475Smrg * supporting documentation, and that the name of Digital Equipment
42d522f475Smrg * Corporation not be used in advertising or publicity pertaining to
43d522f475Smrg * distribution of the software without specific, written prior permission.
44d522f475Smrg *
45d522f475Smrg *
46d522f475Smrg * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
47d522f475Smrg * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
48d522f475Smrg * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
49d522f475Smrg * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
50d522f475Smrg * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
51d522f475Smrg * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
52d522f475Smrg * SOFTWARE.
53d522f475Smrg */
54d522f475Smrg
55d522f475Smrg#ifndef included_ptyx_h
56d522f475Smrg#define included_ptyx_h 1
57d522f475Smrg
58d522f475Smrg#ifdef HAVE_CONFIG_H
59d522f475Smrg#include <xtermcfg.h>
60d522f475Smrg#endif
61d522f475Smrg
62d522f475Smrg/* ptyx.h */
63c219fbebSmrg/* *INDENT-OFF* */
64d522f475Smrg/* @(#)ptyx.h	X10/6.6	11/10/86 */
65d522f475Smrg
66d522f475Smrg#include <X11/IntrinsicP.h>
67d522f475Smrg#include <X11/Shell.h>		/* for XtNdieCallback, etc. */
68d522f475Smrg#include <X11/StringDefs.h>	/* for standard resource names */
69d522f475Smrg#include <X11/Xmu/Misc.h>	/* For Max() and Min(). */
703367019cSmrg
713367019cSmrg#undef bcopy
723367019cSmrg#undef bzero
73d522f475Smrg#include <X11/Xfuncs.h>
743367019cSmrg
75d522f475Smrg#include <X11/Xosdefs.h>
76d522f475Smrg#include <X11/Xmu/Converters.h>
77d522f475Smrg#ifdef XRENDERFONT
78d522f475Smrg#include <X11/Xft/Xft.h>
79d522f475Smrg#endif
80d522f475Smrg
81712a7ff4Smrg#include <stdio.h>
82712a7ff4Smrg
83fa3f02f3Smrg#ifdef HAVE_STDINT_H
84fa3f02f3Smrg#include <stdint.h>
85fa3f02f3Smrg#define DECONST(type,s) ((type *)(intptr_t)(const type *)(s))
86fa3f02f3Smrg#else
87fa3f02f3Smrg#define DECONST(type,s) ((type *)(s))
88fa3f02f3Smrg#endif
89fa3f02f3Smrg
90d522f475Smrg/* adapted from IntrinsicI.h */
91d522f475Smrg#define MyStackAlloc(size, stack_cache_array)     \
92d522f475Smrg    ((size) <= sizeof(stack_cache_array)	  \
93d522f475Smrg    ?  (XtPointer)(stack_cache_array)		  \
94cd3331d0Smrg    :  (XtPointer)malloc((size_t)(size)))
95d522f475Smrg
96d522f475Smrg#define MyStackFree(pointer, stack_cache_array) \
97d522f475Smrg    if ((pointer) != ((char *)(stack_cache_array))) free(pointer)
98d522f475Smrg
99d522f475Smrg/* adapted from vile (vi-like-emacs) */
100cd3331d0Smrg#define TypeCallocN(type,n)	(type *)calloc((size_t) (n), sizeof(type))
101cd3331d0Smrg#define TypeCalloc(type)	TypeCallocN(type, 1)
102d522f475Smrg
103cd3331d0Smrg#define TypeMallocN(type,n)	(type *)malloc(sizeof(type) * (size_t) (n))
104cd3331d0Smrg#define TypeMalloc(type)	TypeMallocN(type, 1)
105d522f475Smrg
106d522f475Smrg#define TypeRealloc(type,n,p)	(type *)realloc(p, (n) * sizeof(type))
107d522f475Smrg
108c219fbebSmrg#define TypeXtReallocN(t,p,n)	(t *)(void *)XtRealloc((char *)(p), (Cardinal)(sizeof(t) * (size_t) (n)))
109c219fbebSmrg
110c219fbebSmrg#define TypeXtMallocX(type,n)	(type *)(void *)XtMalloc((Cardinal)(sizeof(type) + (size_t) (n)))
111c219fbebSmrg#define TypeXtMallocN(type,n)	(type *)(void *)XtMalloc((Cardinal)(sizeof(type) * (size_t) (n)))
112c219fbebSmrg#define TypeXtMalloc(type)	TypeXtMallocN(type, 1)
113c219fbebSmrg
114d522f475Smrg/* use these to allocate partly-structured data */
115cd3331d0Smrg#define CastMallocN(type,n)	(type *)malloc(sizeof(type) + (size_t) (n))
116d522f475Smrg#define CastMalloc(type)	CastMallocN(type,0)
117d522f475Smrg
118b7c89284Ssnj#define BumpBuffer(type, buffer, size, want) \
119b7c89284Ssnj	if (want >= size) { \
120b7c89284Ssnj	    size = 1 + (want * 2); \
121b7c89284Ssnj	    buffer = TypeRealloc(type, size, buffer); \
122b7c89284Ssnj	}
123b7c89284Ssnj
124b7c89284Ssnj#define BfBuf(type) screen->bf_buf_##type
125b7c89284Ssnj#define BfLen(type) screen->bf_len_##type
126b7c89284Ssnj
127b7c89284Ssnj#define TypedBuffer(type) \
128b7c89284Ssnj	type		*bf_buf_##type; \
129b7c89284Ssnj	Cardinal	bf_len_##type
130b7c89284Ssnj
131b7c89284Ssnj#define BumpTypedBuffer(type, want) \
132b7c89284Ssnj	BumpBuffer(type, BfBuf(type), BfLen(type), want)
133b7c89284Ssnj
134b7c89284Ssnj#define FreeTypedBuffer(type) \
135b7c89284Ssnj	if (BfBuf(type) != 0) { \
136b7c89284Ssnj	    free(BfBuf(type)); \
137b7c89284Ssnj	    BfBuf(type) = 0; \
138b7c89284Ssnj	} \
139b7c89284Ssnj	BfLen(type) = 0
140b7c89284Ssnj
141d522f475Smrg/*
142d522f475Smrg** System V definitions
143d522f475Smrg*/
144d522f475Smrg
145d522f475Smrg#ifdef att
146d522f475Smrg#define ATT
147d522f475Smrg#endif
148d522f475Smrg
149d522f475Smrg#ifdef SVR4
150d522f475Smrg#undef  SYSV			/* predefined on Solaris 2.4 */
151d522f475Smrg#define SYSV			/* SVR4 is (approx) superset of SVR3 */
152d522f475Smrg#define ATT
153d522f475Smrg#endif
154d522f475Smrg
155d522f475Smrg#ifdef SYSV
156d522f475Smrg#ifdef X_NOT_POSIX
157d522f475Smrg#if !defined(CRAY) && !defined(SVR4)
158d522f475Smrg#define	dup2(fd1,fd2)	((fd1 == fd2) ? fd1 : \
159d522f475Smrg				(close(fd2), fcntl(fd1, F_DUPFD, fd2)))
160d522f475Smrg#endif
161d522f475Smrg#endif
162d522f475Smrg#endif /* SYSV */
163d522f475Smrg
164d522f475Smrg/*
165d522f475Smrg * Newer versions of <X11/Xft/Xft.h> have a version number.  We use certain
166d522f475Smrg * features from that.
167d522f475Smrg */
168d522f475Smrg#if defined(XRENDERFONT) && defined(XFT_VERSION) && XFT_VERSION >= 20100
169d522f475Smrg#define HAVE_TYPE_FCCHAR32	1	/* compatible: XftChar16 */
170d522f475Smrg#define HAVE_TYPE_XFTCHARSPEC	1	/* new type XftCharSpec */
171d522f475Smrg#endif
172d522f475Smrg
173d522f475Smrg/*
174d522f475Smrg** Definitions to simplify ifdef's for pty's.
175d522f475Smrg*/
176d522f475Smrg#define USE_PTY_DEVICE 1
177d522f475Smrg#define USE_PTY_SEARCH 1
178d522f475Smrg
179b7c89284Ssnj#if defined(__osf__) || (defined(linux) && defined(__GLIBC__) && (__GLIBC__ >= 2) && (__GLIBC_MINOR__ >= 1)) || defined(__DragonFly__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__)
180d522f475Smrg#undef USE_PTY_DEVICE
181d522f475Smrg#undef USE_PTY_SEARCH
182d522f475Smrg#define USE_PTS_DEVICE 1
183d522f475Smrg#elif defined(VMS)
184d522f475Smrg#undef USE_PTY_DEVICE
185d522f475Smrg#undef USE_PTY_SEARCH
186d522f475Smrg#elif defined(PUCC_PTYD)
187d522f475Smrg#undef USE_PTY_SEARCH
188d522f475Smrg#elif (defined(sun) && defined(SVR4)) || defined(_ALL_SOURCE) || defined(__CYGWIN__)
189d522f475Smrg#undef USE_PTY_SEARCH
1903367019cSmrg#elif defined(__OpenBSD__)
1913367019cSmrg#undef USE_PTY_SEARCH
1923367019cSmrg#undef USE_PTY_DEVICE
193d522f475Smrg#endif
194d522f475Smrg
1953367019cSmrg#if (defined (__GLIBC__) && ((__GLIBC__ > 2) || (__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 1)))
1963367019cSmrg#define USE_HANDSHAKE 0	/* "recent" Linux systems do not require handshaking */
197d522f475Smrg#endif
198d522f475Smrg
199d522f475Smrg#if (defined (__GLIBC__) && ((__GLIBC__ > 2) || (__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 1)))
200d522f475Smrg#define USE_USG_PTYS
201d522f475Smrg#elif (defined(ATT) && !defined(__sgi)) || defined(__MVS__) || (defined(SYSV) && defined(i386))
202d522f475Smrg#define USE_USG_PTYS
203d522f475Smrg#endif
204d522f475Smrg
205d522f475Smrg/*
206d522f475Smrg * More systems than not require pty-handshaking.
207d522f475Smrg */
208d522f475Smrg#ifndef USE_HANDSHAKE
209d522f475Smrg#define USE_HANDSHAKE 1
210d522f475Smrg#endif
211d522f475Smrg
212d522f475Smrg/*
213d522f475Smrg** allow for mobility of the pty master/slave directories
214d522f475Smrg*/
215d522f475Smrg#ifndef PTYDEV
216d522f475Smrg#if defined(__hpux)
217d522f475Smrg#define	PTYDEV		"/dev/ptym/ptyxx"
218d522f475Smrg#elif defined(__MVS__)
219d522f475Smrg#define	PTYDEV		"/dev/ptypxxxx"
220d522f475Smrg#else
221d522f475Smrg#define	PTYDEV		"/dev/ptyxx"
222d522f475Smrg#endif
223d522f475Smrg#endif	/* !PTYDEV */
224d522f475Smrg
225d522f475Smrg#ifndef TTYDEV
226d522f475Smrg#if defined(__hpux)
227d522f475Smrg#define TTYDEV		"/dev/pty/ttyxx"
228d522f475Smrg#elif defined(__MVS__)
229d522f475Smrg#define TTYDEV		"/dev/ptypxxxx"
230d522f475Smrg#elif defined(USE_PTS_DEVICE)
231d522f475Smrg#define TTYDEV		"/dev/pts/0"
232d522f475Smrg#else
233d522f475Smrg#define	TTYDEV		"/dev/ttyxx"
234d522f475Smrg#endif
235d522f475Smrg#endif	/* !TTYDEV */
236d522f475Smrg
237d522f475Smrg#ifndef PTYCHAR1
238d522f475Smrg#ifdef __hpux
239d522f475Smrg#define PTYCHAR1	"zyxwvutsrqp"
240d522f475Smrg#else	/* !__hpux */
241d522f475Smrg#define	PTYCHAR1	"pqrstuvwxyzPQRSTUVWXYZ"
242d522f475Smrg#endif	/* !__hpux */
243d522f475Smrg#endif	/* !PTYCHAR1 */
244d522f475Smrg
245d522f475Smrg#ifndef PTYCHAR2
246d522f475Smrg#ifdef __hpux
247d522f475Smrg#define	PTYCHAR2	"fedcba9876543210"
248d522f475Smrg#else	/* !__hpux */
249d522f475Smrg#if defined(__DragonFly__) || defined(__FreeBSD__)
250d522f475Smrg#define	PTYCHAR2	"0123456789abcdefghijklmnopqrstuv"
251d522f475Smrg#else /* !__FreeBSD__ */
252d522f475Smrg#define	PTYCHAR2	"0123456789abcdef"
253d522f475Smrg#endif /* !__FreeBSD__ */
254d522f475Smrg#endif	/* !__hpux */
255d522f475Smrg#endif	/* !PTYCHAR2 */
256d522f475Smrg
257d522f475Smrg#ifndef TTYFORMAT
258d522f475Smrg#if defined(CRAY)
259d522f475Smrg#define TTYFORMAT "/dev/ttyp%03d"
260d522f475Smrg#elif defined(__MVS__)
261d522f475Smrg#define TTYFORMAT "/dev/ttyp%04d"
262d522f475Smrg#else
263d522f475Smrg#define TTYFORMAT "/dev/ttyp%d"
264d522f475Smrg#endif
265d522f475Smrg#endif /* TTYFORMAT */
266d522f475Smrg
267d522f475Smrg#ifndef PTYFORMAT
268d522f475Smrg#ifdef CRAY
269d522f475Smrg#define PTYFORMAT "/dev/pty/%03d"
270d522f475Smrg#elif defined(__MVS__)
271d522f475Smrg#define PTYFORMAT "/dev/ptyp%04d"
272d522f475Smrg#else
273d522f475Smrg#define PTYFORMAT "/dev/ptyp%d"
274d522f475Smrg#endif
275d522f475Smrg#endif /* PTYFORMAT */
276d522f475Smrg
277d522f475Smrg#ifndef PTYCHARLEN
278d522f475Smrg#ifdef CRAY
279d522f475Smrg#define PTYCHARLEN 3
280d522f475Smrg#elif defined(__MVS__)
281d522f475Smrg#define PTYCHARLEN 8     /* OS/390 stores, e.g. ut_id="ttyp1234"  */
282d522f475Smrg#else
283d522f475Smrg#define PTYCHARLEN 2
284d522f475Smrg#endif
285d522f475Smrg#endif
286d522f475Smrg
287d522f475Smrg#ifndef MAXPTTYS
288d522f475Smrg#ifdef CRAY
289d522f475Smrg#define MAXPTTYS 256
290d522f475Smrg#else
291d522f475Smrg#define MAXPTTYS 2048
292d522f475Smrg#endif
293d522f475Smrg#endif
294d522f475Smrg
295d522f475Smrg/* Until the translation manager comes along, I have to do my own translation of
296d522f475Smrg * mouse events into the proper routines. */
297d522f475Smrg
298d522f475Smrgtypedef enum {
299d522f475Smrg    NORMAL = 0
300d522f475Smrg    , LEFTEXTENSION
301d522f475Smrg    , RIGHTEXTENSION
302d522f475Smrg} EventMode;
303d522f475Smrg
304d522f475Smrg/*
305d522f475Smrg * The origin of a screen is 0, 0.  Therefore, the number of rows
306d522f475Smrg * on a screen is screen->max_row + 1, and similarly for columns.
307d522f475Smrg */
308d522f475Smrg#define MaxCols(screen)		((screen)->max_col + 1)
309d522f475Smrg#define MaxRows(screen)		((screen)->max_row + 1)
310d522f475Smrg
311d522f475Smrgtypedef unsigned char Char;		/* to support 8 bit chars */
312d522f475Smrgtypedef Char *ScrnPtr;
313d522f475Smrgtypedef ScrnPtr *ScrnBuf;
314d522f475Smrg
315cd3331d0Smrg/*
316cd3331d0Smrg * Declare an X String, but for unsigned chars.
317cd3331d0Smrg */
318cd3331d0Smrg#ifdef _CONST_X_STRING
319cd3331d0Smrgtypedef const Char *UString;
320cd3331d0Smrg#else
321cd3331d0Smrgtypedef Char *UString;
322cd3331d0Smrg#endif
323cd3331d0Smrg
324cd3331d0Smrg#define IsEmpty(s) ((s) == 0 || *(s) == '\0')
3259a64e1c5Smrg#define IsSpace(c) ((c) == ' ' || (c) == '\t' || (c) == '\r' || (c) == '\n')
326cd3331d0Smrg
327fa3f02f3Smrg#define CharOf(n) ((Char)(n))
328d522f475Smrg
329d522f475Smrgtypedef struct {
330d522f475Smrg    int row;
331d522f475Smrg    int col;
332d522f475Smrg} CELL;
333d522f475Smrg
334d522f475Smrg#define isSameRow(a,b)		((a)->row == (b)->row)
335d522f475Smrg#define isSameCol(a,b)		((a)->col == (b)->col)
336d522f475Smrg#define isSameCELL(a,b)		(isSameRow(a,b) && isSameCol(a,b))
337d522f475Smrg
338d522f475Smrg#define xBIT(n)         (1 << (n))
339d522f475Smrg
340d522f475Smrg/*
341d522f475Smrg * ANSI emulation, special character codes
342d522f475Smrg */
343cd3331d0Smrg#define ANSI_EOT	0x04
344d522f475Smrg#define ANSI_BEL	0x07
345cd3331d0Smrg#define ANSI_BS		0x08
346cd3331d0Smrg#define ANSI_HT		0x09
347cd3331d0Smrg#define ANSI_LF		0x0A
348cd3331d0Smrg#define ANSI_VT		0x0B
349d522f475Smrg#define	ANSI_FF		0x0C		/* C0, C1 control names		*/
350cd3331d0Smrg#define ANSI_CR		0x0D
351cd3331d0Smrg#define ANSI_SO		0x0E
352cd3331d0Smrg#define ANSI_SI		0x0F
353cd3331d0Smrg#define	ANSI_XON	0x11		/* DC1 */
354cd3331d0Smrg#define	ANSI_XOFF	0x13		/* DC3 */
355d522f475Smrg#define	ANSI_NAK	0x15
356d522f475Smrg#define	ANSI_CAN	0x18
357d522f475Smrg#define	ANSI_ESC	0x1B
358d522f475Smrg#define	ANSI_SPA	0x20
359d522f475Smrg#define XTERM_POUND	0x1E		/* internal mapping for '#'	*/
360d522f475Smrg#define	ANSI_DEL	0x7F
361d522f475Smrg#define	ANSI_SS2	0x8E
362d522f475Smrg#define	ANSI_SS3	0x8F
363d522f475Smrg#define	ANSI_DCS	0x90
364d522f475Smrg#define	ANSI_SOS	0x98
365d522f475Smrg#define	ANSI_CSI	0x9B
366d522f475Smrg#define	ANSI_ST		0x9C
367d522f475Smrg#define	ANSI_OSC	0x9D
368d522f475Smrg#define	ANSI_PM		0x9E
369d522f475Smrg#define	ANSI_APC	0x9F
370d522f475Smrg
371d522f475Smrg#define MIN_DECID  52			/* can emulate VT52 */
3723367019cSmrg#define MAX_DECID 525			/* ...through VT525 */
373d522f475Smrg
374d522f475Smrg#ifndef DFT_DECID
3753367019cSmrg#define DFT_DECID "vt420"		/* default VT420 */
376d522f475Smrg#endif
377d522f475Smrg
378d522f475Smrg#ifndef DFT_KBD_DIALECT
379d522f475Smrg#define DFT_KBD_DIALECT "B"		/* default USASCII */
380d522f475Smrg#endif
381d522f475Smrg
382d522f475Smrg/* constants used for utf8 mode */
383d522f475Smrg#define UCS_REPL	0xfffd
384d522f475Smrg#define UCS_LIMIT	0x80000000U	/* both limit and flag for non-UCS */
385d522f475Smrg
386d522f475Smrg#define TERMCAP_SIZE 1500		/* 1023 is standard; 'screen' exceeds */
387d522f475Smrg
388d522f475Smrg#define NMENUFONTS 9			/* font entries in fontMenu */
389d522f475Smrg
390d522f475Smrg#define	NBOX	5			/* Number of Points in box	*/
391d522f475Smrg#define	NPARAM	30			/* Max. parameters		*/
392d522f475Smrg
393d522f475Smrgtypedef struct {
394cd3331d0Smrg	String opt;
395cd3331d0Smrg	String desc;
396d522f475Smrg} OptionHelp;
397d522f475Smrg
3983367019cSmrgtypedef	struct {
3993367019cSmrg	int	count;			/* number of values in params[]	*/
4003367019cSmrg	int	has_subparams;		/* true if there are any sub's	*/
4013367019cSmrg	int	is_sub[NPARAM];		/* true for subparam		*/
4023367019cSmrg	int	params[NPARAM];		/* parameter value		*/
4033367019cSmrg} PARAMS;
4043367019cSmrg
4050d92cbfdSchristostypedef short ParmType;
4060d92cbfdSchristos
407d522f475Smrgtypedef struct {
4080d92cbfdSchristos	Char		a_type;		/* CSI, etc., see unparseq()	*/
4090d92cbfdSchristos	Char		a_pintro;	/* private-mode char, if any	*/
4103367019cSmrg	const char *	a_delim;	/* between parameters (;)	*/
4110d92cbfdSchristos	Char		a_inters;	/* special (before final-char)	*/
4120d92cbfdSchristos	Char		a_final;	/* final-char			*/
4130d92cbfdSchristos	ParmType	a_nparam;	/* # of parameters		*/
4140d92cbfdSchristos	ParmType	a_param[NPARAM]; /* Parameters			*/
4153367019cSmrg	Char		a_radix[NPARAM]; /* Parameters			*/
416d522f475Smrg} ANSI;
417d522f475Smrg
418d522f475Smrg#define TEK_FONT_LARGE 0
419d522f475Smrg#define TEK_FONT_2 1
420d522f475Smrg#define TEK_FONT_3 2
421d522f475Smrg#define TEK_FONT_SMALL 3
422d522f475Smrg#define	TEKNUMFONTS 4
423d522f475Smrg
424d522f475Smrg/* Actually there are 5 types of lines, but four are non-solid lines */
425d522f475Smrg#define	TEKNUMLINES	4
426d522f475Smrg
427d522f475Smrgtypedef struct {
428d522f475Smrg	int	x;
429d522f475Smrg	int	y;
430d522f475Smrg	int	fontsize;
431d522f475Smrg	unsigned linetype;
432d522f475Smrg} Tmodes;
433d522f475Smrg
434d522f475Smrgtypedef struct {
435d522f475Smrg	int Twidth;
436d522f475Smrg	int Theight;
437d522f475Smrg} T_fontsize;
438d522f475Smrg
439d522f475Smrgtypedef struct {
440d522f475Smrg	short *bits;
441d522f475Smrg	int x;
442d522f475Smrg	int y;
443d522f475Smrg	int width;
444d522f475Smrg	int height;
445d522f475Smrg} BitmapBits;
446d522f475Smrg
447d522f475Smrg#define	SAVELINES		64      /* default # lines to save      */
448d522f475Smrg#define SCROLLLINES 1			/* default # lines to scroll    */
449d522f475Smrg
450d522f475Smrg#define EXCHANGE(a,b,tmp) tmp = a; a = b; b = tmp
451d522f475Smrg
452d522f475Smrg/***====================================================================***/
453d522f475Smrg
454d522f475Smrg#if (XtSpecificationRelease < 6)
455d522f475Smrg#ifndef NO_ACTIVE_ICON
456d522f475Smrg#define NO_ACTIVE_ICON 1 /* Note: code relies on an X11R6 function */
457d522f475Smrg#endif
458d522f475Smrg#endif
459d522f475Smrg
460d522f475Smrg#ifndef OPT_AIX_COLORS
461d522f475Smrg#define OPT_AIX_COLORS  1 /* true if xterm is configured with AIX (16) colors */
462d522f475Smrg#endif
463d522f475Smrg
464b7c89284Ssnj#ifndef OPT_ALLOW_XXX_OPS
465b7c89284Ssnj#define OPT_ALLOW_XXX_OPS 1 /* true if xterm adds "Allow XXX Ops" submenu */
466b7c89284Ssnj#endif
467b7c89284Ssnj
468d522f475Smrg#ifndef OPT_BLINK_CURS
469d522f475Smrg#define OPT_BLINK_CURS  1 /* true if xterm has blinking cursor capability */
470d522f475Smrg#endif
471d522f475Smrg
472d522f475Smrg#ifndef OPT_BLINK_TEXT
473d522f475Smrg#define OPT_BLINK_TEXT  OPT_BLINK_CURS /* true if xterm has blinking text capability */
474d522f475Smrg#endif
475d522f475Smrg
476d522f475Smrg#ifndef OPT_BOX_CHARS
477d522f475Smrg#define OPT_BOX_CHARS	1 /* true if xterm can simulate box-characters */
478d522f475Smrg#endif
479d522f475Smrg
4803367019cSmrg#ifndef OPT_BUILTIN_XPMS
4813367019cSmrg#define OPT_BUILTIN_XPMS 0 /* true if all xpm data is compiled-in */
4823367019cSmrg#endif
4833367019cSmrg
484d522f475Smrg#ifndef OPT_BROKEN_OSC
485d522f475Smrg#ifdef linux
486d522f475Smrg#define OPT_BROKEN_OSC	1 /* man console_codes, 1st paragraph - cf: ECMA-48 */
487d522f475Smrg#else
488d522f475Smrg#define OPT_BROKEN_OSC	0 /* true if xterm allows Linux's broken OSC parsing */
489d522f475Smrg#endif
490d522f475Smrg#endif
491d522f475Smrg
492d522f475Smrg#ifndef OPT_BROKEN_ST
493d522f475Smrg#define OPT_BROKEN_ST	1 /* true if xterm allows old/broken OSC parsing */
494d522f475Smrg#endif
495d522f475Smrg
496d522f475Smrg#ifndef OPT_C1_PRINT
497d522f475Smrg#define OPT_C1_PRINT	1 /* true if xterm allows C1 controls to be printable */
498d522f475Smrg#endif
499d522f475Smrg
500d522f475Smrg#ifndef OPT_CLIP_BOLD
501d522f475Smrg#define OPT_CLIP_BOLD	1 /* true if xterm uses clipping to avoid bold-trash */
502d522f475Smrg#endif
503d522f475Smrg
504d522f475Smrg#ifndef OPT_COLOR_CLASS
505d522f475Smrg#define OPT_COLOR_CLASS 1 /* true if xterm uses separate color-resource classes */
506d522f475Smrg#endif
507d522f475Smrg
508d522f475Smrg#ifndef OPT_COLOR_RES
509d522f475Smrg#define OPT_COLOR_RES   1 /* true if xterm delays color-resource evaluation */
510d522f475Smrg#endif
511d522f475Smrg
512d522f475Smrg#ifndef OPT_DABBREV
513d522f475Smrg#define OPT_DABBREV 0	/* dynamic abbreviations */
514d522f475Smrg#endif
515d522f475Smrg
516d522f475Smrg#ifndef OPT_DEC_CHRSET
517d522f475Smrg#define OPT_DEC_CHRSET  1 /* true if xterm is configured for DEC charset */
518d522f475Smrg#endif
519d522f475Smrg
520d522f475Smrg#ifndef OPT_DEC_LOCATOR
521d522f475Smrg#define	OPT_DEC_LOCATOR 0 /* true if xterm supports VT220-style mouse events */
522d522f475Smrg#endif
523d522f475Smrg
524d522f475Smrg#ifndef OPT_DEC_RECTOPS
525d522f475Smrg#define OPT_DEC_RECTOPS 0 /* true if xterm is configured for VT420 rectangles */
526d522f475Smrg#endif
527d522f475Smrg
528fa3f02f3Smrg#ifndef OPT_SIXEL_GRAPHICS
5299a64e1c5Smrg#define OPT_SIXEL_GRAPHICS 0 /* true if xterm supports VT240-style sixel graphics */
5309a64e1c5Smrg#endif
5319a64e1c5Smrg
5329a64e1c5Smrg#ifndef OPT_REGIS_GRAPHICS
5339a64e1c5Smrg#define OPT_REGIS_GRAPHICS 0 /* true if xterm supports VT125/VT240/VT330 ReGIS graphics */
5349a64e1c5Smrg#endif
5359a64e1c5Smrg
5369a64e1c5Smrg#ifndef OPT_GRAPHICS
5379a64e1c5Smrg#define OPT_GRAPHICS 0 /* true if xterm is configured for any type of graphics */
538fa3f02f3Smrg#endif
539fa3f02f3Smrg
540d522f475Smrg#ifndef OPT_DEC_SOFTFONT
541d522f475Smrg#define OPT_DEC_SOFTFONT 0 /* true if xterm is configured for VT220 softfonts */
542d522f475Smrg#endif
543d522f475Smrg
5443367019cSmrg#ifndef OPT_DOUBLE_BUFFER
5453367019cSmrg#define OPT_DOUBLE_BUFFER 0 /* true if using double-buffering */
5463367019cSmrg#endif
5473367019cSmrg
548d522f475Smrg#ifndef OPT_EBCDIC
549d522f475Smrg#ifdef __MVS__
550d522f475Smrg#define OPT_EBCDIC 1
551d522f475Smrg#else
552d522f475Smrg#define OPT_EBCDIC 0
553d522f475Smrg#endif
554d522f475Smrg#endif
555d522f475Smrg
556d522f475Smrg#ifndef OPT_EXEC_XTERM
557d522f475Smrg#define OPT_EXEC_XTERM 0 /* true if xterm can fork/exec copies of itself */
558d522f475Smrg#endif
559d522f475Smrg
560d522f475Smrg#ifndef OPT_EXTRA_PASTE
561d522f475Smrg#define OPT_EXTRA_PASTE 1
562d522f475Smrg#endif
563d522f475Smrg
564b7c89284Ssnj#ifndef OPT_FIFO_LINES
565b7c89284Ssnj#define OPT_FIFO_LINES 0 /* optimize save-lines feature using FIFO */
566b7c89284Ssnj#endif
567b7c89284Ssnj
568d522f475Smrg#ifndef OPT_FOCUS_EVENT
569d522f475Smrg#define OPT_FOCUS_EVENT	1 /* focus in/out events */
570d522f475Smrg#endif
571d522f475Smrg
572d522f475Smrg#ifndef OPT_HP_FUNC_KEYS
573d522f475Smrg#define OPT_HP_FUNC_KEYS 0 /* true if xterm supports HP-style function keys */
574d522f475Smrg#endif
575d522f475Smrg
576d522f475Smrg#ifndef OPT_I18N_SUPPORT
577d522f475Smrg#if (XtSpecificationRelease >= 5)
578d522f475Smrg#define OPT_I18N_SUPPORT 1 /* true if xterm uses internationalization support */
579d522f475Smrg#else
580d522f475Smrg#define OPT_I18N_SUPPORT 0
581d522f475Smrg#endif
582d522f475Smrg#endif
583d522f475Smrg
584d522f475Smrg#ifndef OPT_INITIAL_ERASE
585d522f475Smrg#define OPT_INITIAL_ERASE 1 /* use pty's erase character if it's not 128 */
586d522f475Smrg#endif
587d522f475Smrg
588d522f475Smrg#ifndef OPT_INPUT_METHOD
589d522f475Smrg#if (XtSpecificationRelease >= 6)
590d522f475Smrg#define OPT_INPUT_METHOD 1 /* true if xterm uses input-method support */
591d522f475Smrg#else
592d522f475Smrg#define OPT_INPUT_METHOD 0
593d522f475Smrg#endif
594d522f475Smrg#endif
595d522f475Smrg
596d522f475Smrg#ifndef OPT_ISO_COLORS
597d522f475Smrg#define OPT_ISO_COLORS  1 /* true if xterm is configured with ISO colors */
598d522f475Smrg#endif
599d522f475Smrg
600d522f475Smrg#ifndef OPT_256_COLORS
601d522f475Smrg#define OPT_256_COLORS  0 /* true if xterm is configured with 256 colors */
602d522f475Smrg#endif
603d522f475Smrg
604d522f475Smrg#ifndef OPT_88_COLORS
605d522f475Smrg#define OPT_88_COLORS	0 /* true if xterm is configured with 88 colors */
606d522f475Smrg#endif
607d522f475Smrg
608d522f475Smrg#ifndef OPT_HIGHLIGHT_COLOR
609d522f475Smrg#define OPT_HIGHLIGHT_COLOR 1 /* true if xterm supports color highlighting */
610d522f475Smrg#endif
611d522f475Smrg
612d522f475Smrg#ifndef OPT_LOAD_VTFONTS
613d522f475Smrg#define OPT_LOAD_VTFONTS 0 /* true if xterm has load-vt-fonts() action */
614d522f475Smrg#endif
615d522f475Smrg
616d522f475Smrg#ifndef OPT_LUIT_PROG
617d522f475Smrg#define OPT_LUIT_PROG   0 /* true if xterm supports luit */
618d522f475Smrg#endif
619d522f475Smrg
620d522f475Smrg#ifndef OPT_MAXIMIZE
621d522f475Smrg#define OPT_MAXIMIZE	1 /* add actions for iconify ... maximize */
622d522f475Smrg#endif
623d522f475Smrg
624d522f475Smrg#ifndef OPT_MINI_LUIT
625d522f475Smrg#define OPT_MINI_LUIT   0 /* true if xterm supports built-in mini-luit */
626d522f475Smrg#endif
627d522f475Smrg
628d522f475Smrg#ifndef OPT_MOD_FKEYS
629d522f475Smrg#define OPT_MOD_FKEYS	1 /* modify cursor- and function-keys in normal mode */
630d522f475Smrg#endif
631d522f475Smrg
632d522f475Smrg#ifndef OPT_NUM_LOCK
633d522f475Smrg#define OPT_NUM_LOCK	1 /* use NumLock key only for numeric-keypad */
634d522f475Smrg#endif
635d522f475Smrg
636d522f475Smrg#ifndef OPT_PASTE64
637d522f475Smrg#define OPT_PASTE64	0 /* program control of select/paste via base64 */
638d522f475Smrg#endif
639d522f475Smrg
640d522f475Smrg#ifndef OPT_PC_COLORS
641d522f475Smrg#define OPT_PC_COLORS   1 /* true if xterm supports PC-style (bold) colors */
642d522f475Smrg#endif
643d522f475Smrg
644712a7ff4Smrg#ifndef OPT_PRINT_ON_EXIT
645712a7ff4Smrg#define OPT_PRINT_ON_EXIT 1 /* true allows xterm to dump screen on X error */
646712a7ff4Smrg#endif
647712a7ff4Smrg
648d522f475Smrg#ifndef OPT_PTY_HANDSHAKE
649d522f475Smrg#define OPT_PTY_HANDSHAKE USE_HANDSHAKE	/* avoid pty races on older systems */
650d522f475Smrg#endif
651d522f475Smrg
652d522f475Smrg#ifndef OPT_PRINT_COLORS
653d522f475Smrg#define OPT_PRINT_COLORS 1 /* true if we print color information */
654d522f475Smrg#endif
655d522f475Smrg
656d522f475Smrg#ifndef OPT_READLINE
657d522f475Smrg#define OPT_READLINE	0 /* mouse-click/paste support for readline */
658d522f475Smrg#endif
659d522f475Smrg
660d522f475Smrg#ifndef OPT_RENDERFONT
661d522f475Smrg#ifdef XRENDERFONT
662d522f475Smrg#define OPT_RENDERFONT 1
663d522f475Smrg#else
664d522f475Smrg#define OPT_RENDERFONT 0
665d522f475Smrg#endif
666d522f475Smrg#endif
667d522f475Smrg
668d522f475Smrg#ifndef OPT_RENDERWIDE
669d522f475Smrg#if OPT_RENDERFONT && OPT_WIDE_CHARS && defined(HAVE_TYPE_XFTCHARSPEC)
670d522f475Smrg#define OPT_RENDERWIDE 1
671d522f475Smrg#else
672d522f475Smrg#define OPT_RENDERWIDE 0
673d522f475Smrg#endif
674d522f475Smrg#endif
675d522f475Smrg
676fa3f02f3Smrg#ifndef OPT_REPORT_COLORS
677fa3f02f3Smrg#define OPT_REPORT_COLORS  1 /* provide "-report-colors" option */
678fa3f02f3Smrg#endif
679fa3f02f3Smrg
680fa3f02f3Smrg#ifndef OPT_REPORT_FONTS
681fa3f02f3Smrg#define OPT_REPORT_FONTS   1 /* provide "-report-fonts" option */
682fa3f02f3Smrg#endif
683fa3f02f3Smrg
684d522f475Smrg#ifndef OPT_SAME_NAME
685d522f475Smrg#define OPT_SAME_NAME   1 /* suppress redundant updates of title, icon, etc. */
686d522f475Smrg#endif
687d522f475Smrg
688b7c89284Ssnj#ifndef OPT_SAVE_LINES
689b7c89284Ssnj#define OPT_SAVE_LINES OPT_FIFO_LINES /* optimize save-lines feature */
690b7c89284Ssnj#endif
691b7c89284Ssnj
692d522f475Smrg#ifndef OPT_SCO_FUNC_KEYS
693d522f475Smrg#define OPT_SCO_FUNC_KEYS 0 /* true if xterm supports SCO-style function keys */
694d522f475Smrg#endif
695d522f475Smrg
696d522f475Smrg#ifndef OPT_SUN_FUNC_KEYS
697d522f475Smrg#define OPT_SUN_FUNC_KEYS 1 /* true if xterm supports Sun-style function keys */
698d522f475Smrg#endif
699d522f475Smrg
700cd3331d0Smrg#ifndef OPT_SCROLL_LOCK
701cd3331d0Smrg#define OPT_SCROLL_LOCK 1 /* true if xterm interprets fontsize-shifting */
702cd3331d0Smrg#endif
703cd3331d0Smrg
704d522f475Smrg#ifndef OPT_SELECT_REGEX
705d522f475Smrg#define OPT_SELECT_REGEX 0 /* true if xterm supports regular-expression selects */
706d522f475Smrg#endif
707d522f475Smrg
7083367019cSmrg#ifndef OPT_SELECTION_OPS
7093367019cSmrg#define OPT_SELECTION_OPS 1 /* true if xterm supports operations on selection */
7103367019cSmrg#endif
7113367019cSmrg
712d522f475Smrg#ifndef OPT_SESSION_MGT
713d522f475Smrg#if defined(XtNdieCallback) && defined(XtNsaveCallback)
714d522f475Smrg#define OPT_SESSION_MGT 1
715d522f475Smrg#else
716d522f475Smrg#define OPT_SESSION_MGT 0
717d522f475Smrg#endif
718d522f475Smrg#endif
719d522f475Smrg
720d522f475Smrg#ifndef OPT_SHIFT_FONTS
721781b53c7Schristos#define OPT_SHIFT_FONTS 0 /* true if xterm interprets fontsize-shifting */
722d522f475Smrg#endif
723d522f475Smrg
724d522f475Smrg#ifndef OPT_SUNPC_KBD
725d522f475Smrg#define OPT_SUNPC_KBD	1 /* true if xterm supports Sun/PC keyboard map */
726d522f475Smrg#endif
727d522f475Smrg
728d522f475Smrg#ifndef OPT_TCAP_FKEYS
729d522f475Smrg#define OPT_TCAP_FKEYS	0 /* true for experimental termcap function-keys */
730d522f475Smrg#endif
731d522f475Smrg
732d522f475Smrg#ifndef OPT_TCAP_QUERY
733d522f475Smrg#define OPT_TCAP_QUERY	0 /* true for experimental termcap query */
734d522f475Smrg#endif
735d522f475Smrg
736d522f475Smrg#ifndef OPT_TEK4014
737d522f475Smrg#define OPT_TEK4014     1 /* true if we're using tek4014 emulation */
738d522f475Smrg#endif
739d522f475Smrg
740d522f475Smrg#ifndef OPT_TOOLBAR
741d522f475Smrg#define OPT_TOOLBAR	0 /* true if xterm supports toolbar menus */
742d522f475Smrg#endif
743d522f475Smrg
744d522f475Smrg#ifndef OPT_TRACE
745d522f475Smrg#define OPT_TRACE       0 /* true if we're using debugging traces */
746d522f475Smrg#endif
747d522f475Smrg
748d522f475Smrg#ifndef OPT_TRACE_FLAGS
749d522f475Smrg#define OPT_TRACE_FLAGS 0 /* additional tracing used for SCRN_BUF_FLAGS */
750d522f475Smrg#endif
751d522f475Smrg
752d522f475Smrg#ifndef OPT_VT52_MODE
753d522f475Smrg#define OPT_VT52_MODE   1 /* true if xterm supports VT52 emulation */
754d522f475Smrg#endif
755d522f475Smrg
7569a64e1c5Smrg#ifndef OPT_WIDE_ATTRS
7579a64e1c5Smrg#define OPT_WIDE_ATTRS  1 /* true if xterm supports 16-bit attributes */
7589a64e1c5Smrg#endif
7599a64e1c5Smrg
760d522f475Smrg#ifndef OPT_WIDE_CHARS
761d522f475Smrg#define OPT_WIDE_CHARS  0 /* true if xterm supports 16-bit characters */
762d522f475Smrg#endif
763d522f475Smrg
764b7c89284Ssnj#ifndef OPT_WIDER_ICHAR
765b7c89284Ssnj#define OPT_WIDER_ICHAR 1 /* true if xterm uses 32-bits for wide-chars */
766b7c89284Ssnj#endif
767b7c89284Ssnj
768d522f475Smrg#ifndef OPT_XMC_GLITCH
769d522f475Smrg#define OPT_XMC_GLITCH	0 /* true if xterm supports xmc (magic cookie glitch) */
770d522f475Smrg#endif
771d522f475Smrg
772d522f475Smrg#ifndef OPT_ZICONBEEP
773d522f475Smrg#define OPT_ZICONBEEP   1 /* true if xterm supports "-ziconbeep" option */
774d522f475Smrg#endif
775d522f475Smrg
776d522f475Smrg/***====================================================================***/
777d522f475Smrg
778d522f475Smrg#if OPT_AIX_COLORS && !OPT_ISO_COLORS
779d522f475Smrg/* You must have ANSI/ISO colors to support AIX colors */
780d522f475Smrg#undef  OPT_AIX_COLORS
781d522f475Smrg#define OPT_AIX_COLORS 0
782d522f475Smrg#endif
783d522f475Smrg
784d522f475Smrg#if OPT_COLOR_RES && !OPT_ISO_COLORS
785d522f475Smrg/* You must have ANSI/ISO colors to support ColorRes logic */
786d522f475Smrg#undef  OPT_COLOR_RES
787d522f475Smrg#define OPT_COLOR_RES 0
788d522f475Smrg#endif
789d522f475Smrg
790cd3331d0Smrg#if OPT_256_COLORS && (OPT_WIDE_CHARS || OPT_RENDERFONT || OPT_XMC_GLITCH)
791cd3331d0Smrg/* It's actually more complicated than that - but by trimming options you can
792cd3331d0Smrg * have 256 color resources though.
793cd3331d0Smrg */
794cd3331d0Smrg#define OPT_COLOR_RES2 1
795cd3331d0Smrg#else
796d522f475Smrg#define OPT_COLOR_RES2 0
797d522f475Smrg#endif
798d522f475Smrg
799d522f475Smrg#if OPT_PASTE64 && !OPT_READLINE
800d522f475Smrg/* OPT_PASTE64 uses logic from OPT_READLINE */
801d522f475Smrg#undef  OPT_READLINE
802d522f475Smrg#define OPT_READLINE 1
803d522f475Smrg#endif
804d522f475Smrg
805d522f475Smrg#if OPT_PC_COLORS && !OPT_ISO_COLORS
806d522f475Smrg/* You must have ANSI/ISO colors to support PC colors */
807d522f475Smrg#undef  OPT_PC_COLORS
808d522f475Smrg#define OPT_PC_COLORS 0
809d522f475Smrg#endif
810d522f475Smrg
811d522f475Smrg#if OPT_PRINT_COLORS && !OPT_ISO_COLORS
812d522f475Smrg/* You must have ANSI/ISO colors to be able to print them */
813d522f475Smrg#undef  OPT_PRINT_COLORS
814d522f475Smrg#define OPT_PRINT_COLORS 0
815d522f475Smrg#endif
816d522f475Smrg
817d522f475Smrg#if OPT_256_COLORS && !OPT_ISO_COLORS
818d522f475Smrg/* You must have ANSI/ISO colors to support 256 colors */
819d522f475Smrg#undef  OPT_256_COLORS
820d522f475Smrg#define OPT_256_COLORS 0
821d522f475Smrg#endif
822d522f475Smrg
823d522f475Smrg#if OPT_88_COLORS && !OPT_ISO_COLORS
824d522f475Smrg/* You must have ANSI/ISO colors to support 88 colors */
825d522f475Smrg#undef  OPT_88_COLORS
826d522f475Smrg#define OPT_88_COLORS 0
827d522f475Smrg#endif
828d522f475Smrg
829d522f475Smrg#if OPT_88_COLORS && OPT_256_COLORS
830d522f475Smrg/* 256 colors supersedes 88 colors */
831d522f475Smrg#undef  OPT_88_COLORS
832d522f475Smrg#define OPT_88_COLORS 0
833d522f475Smrg#endif
834d522f475Smrg
835d522f475Smrg/***====================================================================***/
836d522f475Smrg
837d522f475Smrg/*
838d522f475Smrg * Indices for menu_font_names[][]
839d522f475Smrg */
840d522f475Smrgtypedef enum {
841d522f475Smrg    fNorm = 0			/* normal font */
842d522f475Smrg    , fBold			/* bold font */
843d522f475Smrg#if OPT_WIDE_CHARS
844d522f475Smrg    , fWide			/* double-width font */
845d522f475Smrg    , fWBold			/* double-width bold font */
846d522f475Smrg#endif
847d522f475Smrg    , fMAX
848d522f475Smrg} VTFontEnum;
849d522f475Smrg
850d522f475Smrg/*
851d522f475Smrg * Indices for cachedGCs.c (unrelated to VTFontEnum).
852d522f475Smrg */
853d522f475Smrgtypedef enum {
854d522f475Smrg    gcNorm = 0
855d522f475Smrg    , gcBold
856d522f475Smrg    , gcNormReverse
857d522f475Smrg    , gcBoldReverse
858d522f475Smrg#if OPT_BOX_CHARS
859d522f475Smrg    , gcLine
860d522f475Smrg    , gcDots
861d522f475Smrg#endif
862d522f475Smrg#if OPT_DEC_CHRSET
863d522f475Smrg    , gcCNorm
864d522f475Smrg    , gcCBold
865d522f475Smrg#endif
866d522f475Smrg#if OPT_WIDE_CHARS
867d522f475Smrg    , gcWide
868d522f475Smrg    , gcWBold
869d522f475Smrg    , gcWideReverse
870d522f475Smrg    , gcWBoldReverse
871d522f475Smrg#endif
872d522f475Smrg    , gcVTcursNormal
873d522f475Smrg    , gcVTcursFilled
874d522f475Smrg    , gcVTcursReverse
875d522f475Smrg    , gcVTcursOutline
876d522f475Smrg#if OPT_TEK4014
877d522f475Smrg    , gcTKcurs
878d522f475Smrg#endif
879d522f475Smrg    , gcMAX
880d522f475Smrg} CgsEnum;
881d522f475Smrg
882d522f475Smrg#define for_each_text_gc(n) for (n = gcNorm; n < gcVTcursNormal; ++n)
883d522f475Smrg#define for_each_curs_gc(n) for (n = gcVTcursNormal; n <= gcVTcursOutline; ++n)
884d522f475Smrg#define for_each_gc(n)      for (n = gcNorm; n < gcMAX; ++n)
885d522f475Smrg
886cd3331d0Smrg/*
887cd3331d0Smrg * Indices for the normal terminal colors in screen.Tcolors[].
888cd3331d0Smrg * See also OscTextColors, which has corresponding values.
889cd3331d0Smrg */
890d522f475Smrgtypedef enum {
891d522f475Smrg    TEXT_FG = 0			/* text foreground */
892d522f475Smrg    , TEXT_BG			/* text background */
893d522f475Smrg    , TEXT_CURSOR		/* text cursor */
894d522f475Smrg    , MOUSE_FG			/* mouse foreground */
895d522f475Smrg    , MOUSE_BG			/* mouse background */
896d522f475Smrg#if OPT_TEK4014
8973367019cSmrg    , TEK_FG = 5		/* tektronix foreground */
898d522f475Smrg    , TEK_BG			/* tektronix background */
899d522f475Smrg#endif
900d522f475Smrg#if OPT_HIGHLIGHT_COLOR
9013367019cSmrg    , HIGHLIGHT_BG = 7		/* highlight background */
9023367019cSmrg#endif
9033367019cSmrg#if OPT_TEK4014
9043367019cSmrg    , TEK_CURSOR = 8		/* tektronix cursor */
9053367019cSmrg#endif
9063367019cSmrg#if OPT_HIGHLIGHT_COLOR
9073367019cSmrg    , HIGHLIGHT_FG = 9		/* highlight foreground */
908d522f475Smrg#endif
909d522f475Smrg    , NCOLORS			/* total number of colors */
910d522f475Smrg} TermColors;
911d522f475Smrg
912cd3331d0Smrg/*
913cd3331d0Smrg * Constants for titleModes resource
914cd3331d0Smrg */
915cd3331d0Smrgtypedef enum {
916cd3331d0Smrg    tmSetBase16 = 1		/* set title using hex-string */
917cd3331d0Smrg    , tmGetBase16 = 2		/* get title using hex-string */
918cd3331d0Smrg#if OPT_WIDE_CHARS
919cd3331d0Smrg    , tmSetUtf8 = 4		/* like utf8Title, but controllable */
920cd3331d0Smrg    , tmGetUtf8 = 8		/* retrieve title encoded as UTF-8 */
921cd3331d0Smrg#endif
922cd3331d0Smrg} TitleModes;
923cd3331d0Smrg
924cd3331d0Smrg#define IsTitleMode(xw,mode) (((xw)->screen.title_modes & mode) != 0)
925cd3331d0Smrg
926fa3f02f3Smrg#include <xcharmouse.h>
927fa3f02f3Smrg
928fa3f02f3Smrg/*
929fa3f02f3Smrg * For readability...
930fa3f02f3Smrg */
931fa3f02f3Smrg#define nrc_percent   100
932fa3f02f3Smrg#define nrc_dquote    200
933fa3f02f3Smrg#define nrc_ampersand 300
934fa3f02f3Smrgtypedef enum {
935fa3f02f3Smrg    nrc_ASCII = 0
936fa3f02f3Smrg    ,nrc_British		/* vt100 */
937fa3f02f3Smrg    ,nrc_British_Latin_1	/* vt3xx */
938fa3f02f3Smrg    ,nrc_Cyrillic		/* vt5xx */
939fa3f02f3Smrg    ,nrc_DEC_Spec_Graphic	/* vt100 */
940fa3f02f3Smrg    ,nrc_DEC_Alt_Chars		/* vt100 */
941fa3f02f3Smrg    ,nrc_DEC_Alt_Graphics	/* vt100 */
942fa3f02f3Smrg    ,nrc_DEC_Supp		/* vt2xx */
943fa3f02f3Smrg    ,nrc_DEC_Supp_Graphic	/* vt3xx */
944fa3f02f3Smrg    ,nrc_DEC_Technical		/* vt3xx */
945fa3f02f3Smrg    ,nrc_Dutch			/* vt2xx */
946fa3f02f3Smrg    ,nrc_Finnish		/* vt2xx */
947fa3f02f3Smrg    ,nrc_Finnish2		/* vt2xx */
948fa3f02f3Smrg    ,nrc_French			/* vt2xx */
949fa3f02f3Smrg    ,nrc_French2		/* vt2xx */
950fa3f02f3Smrg    ,nrc_French_Canadian	/* vt2xx */
951fa3f02f3Smrg    ,nrc_French_Canadian2	/* vt3xx */
952fa3f02f3Smrg    ,nrc_German			/* vt2xx */
953fa3f02f3Smrg    ,nrc_Greek			/* vt5xx */
954fa3f02f3Smrg    ,nrc_Greek_Supp		/* vt5xx */
955fa3f02f3Smrg    ,nrc_Hebrew			/* vt5xx */
956fa3f02f3Smrg    ,nrc_Hebrew2		/* vt5xx */
957fa3f02f3Smrg    ,nrc_Hebrew_Supp		/* vt5xx */
958fa3f02f3Smrg    ,nrc_Italian		/* vt2xx */
959fa3f02f3Smrg    ,nrc_Latin_5_Supp		/* vt5xx */
960fa3f02f3Smrg    ,nrc_Latin_Cyrillic		/* vt5xx */
961fa3f02f3Smrg    ,nrc_Norwegian_Danish	/* vt3xx */
962fa3f02f3Smrg    ,nrc_Norwegian_Danish2	/* vt2xx */
963fa3f02f3Smrg    ,nrc_Norwegian_Danish3	/* vt2xx */
964fa3f02f3Smrg    ,nrc_Portugese		/* vt3xx */
965fa3f02f3Smrg    ,nrc_Russian		/* vt5xx */
966fa3f02f3Smrg    ,nrc_SCS_NRCS		/* vt5xx - probably Serbo/Croatian */
967fa3f02f3Smrg    ,nrc_Spanish		/* vt2xx */
968fa3f02f3Smrg    ,nrc_Swedish		/* vt2xx */
969fa3f02f3Smrg    ,nrc_Swedish2		/* vt2xx */
970fa3f02f3Smrg    ,nrc_Swiss			/* vt2xx */
971fa3f02f3Smrg    ,nrc_Turkish		/* vt5xx */
972fa3f02f3Smrg    ,nrc_Turkish2		/* vt5xx */
973fa3f02f3Smrg    ,nrc_Unknown
974fa3f02f3Smrg} DECNRCM_codes;
975fa3f02f3Smrg
976fa3f02f3Smrg/*
977fa3f02f3Smrg * Use this enumerated type to check consistency among dpmodes(), savemodes()
978fa3f02f3Smrg * restoremodes() and do_decrpm().
979fa3f02f3Smrg */
980fa3f02f3Smrgtypedef enum {
981fa3f02f3Smrg    srm_DECCKM = 1
982fa3f02f3Smrg    ,srm_DECANM = 2
983fa3f02f3Smrg    ,srm_DECCOLM = 3
984fa3f02f3Smrg    ,srm_DECSCLM = 4
985fa3f02f3Smrg    ,srm_DECSCNM = 5
986fa3f02f3Smrg    ,srm_DECOM = 6
987fa3f02f3Smrg    ,srm_DECAWM = 7
988fa3f02f3Smrg    ,srm_DECARM = 8
989fa3f02f3Smrg    ,srm_X10_MOUSE = SET_X10_MOUSE
990fa3f02f3Smrg#if OPT_TOOLBAR
991fa3f02f3Smrg    ,srm_RXVT_TOOLBAR = 10
992fa3f02f3Smrg#endif
993fa3f02f3Smrg#if OPT_BLINK_CURS
994fa3f02f3Smrg    ,srm_ATT610_BLINK = 12
995fa3f02f3Smrg#endif
996fa3f02f3Smrg    ,srm_DECPFF = 18
997fa3f02f3Smrg    ,srm_DECPEX = 19
998fa3f02f3Smrg    ,srm_DECTCEM = 25
999fa3f02f3Smrg    ,srm_RXVT_SCROLLBAR = 30
1000fa3f02f3Smrg#if OPT_SHIFT_FONTS
1001fa3f02f3Smrg    ,srm_RXVT_FONTSIZE = 35
1002fa3f02f3Smrg#endif
1003fa3f02f3Smrg#if OPT_TEK4014
1004fa3f02f3Smrg    ,srm_DECTEK = 38
1005fa3f02f3Smrg#endif
1006fa3f02f3Smrg    ,srm_132COLS = 40
1007fa3f02f3Smrg    ,srm_CURSES_HACK = 41
1008fa3f02f3Smrg    ,srm_DECNRCM = 42
1009fa3f02f3Smrg    ,srm_MARGIN_BELL = 44
1010fa3f02f3Smrg    ,srm_REVERSEWRAP = 45
1011fa3f02f3Smrg#ifdef ALLOWLOGGING
1012fa3f02f3Smrg    ,srm_ALLOWLOGGING = 46
1013fa3f02f3Smrg#endif
1014fa3f02f3Smrg    ,srm_OPT_ALTBUF_CURSOR = 1049
1015fa3f02f3Smrg    ,srm_OPT_ALTBUF = 1047
1016fa3f02f3Smrg    ,srm_ALTBUF = 47
1017fa3f02f3Smrg    ,srm_DECNKM = 66
1018fa3f02f3Smrg    ,srm_DECBKM = 67
1019fa3f02f3Smrg    ,srm_DECLRMM = 69
1020fa3f02f3Smrg#if OPT_SIXEL_GRAPHICS
1021fa3f02f3Smrg    ,srm_DECSDM = 80		/* Sixel Display Mode */
1022fa3f02f3Smrg#endif
1023fa3f02f3Smrg    ,srm_DECNCSM = 95
1024fa3f02f3Smrg    ,srm_VT200_MOUSE = SET_VT200_MOUSE
1025fa3f02f3Smrg    ,srm_VT200_HIGHLIGHT_MOUSE = SET_VT200_HIGHLIGHT_MOUSE
1026fa3f02f3Smrg    ,srm_BTN_EVENT_MOUSE = SET_BTN_EVENT_MOUSE
1027fa3f02f3Smrg    ,srm_ANY_EVENT_MOUSE = SET_ANY_EVENT_MOUSE
1028fa3f02f3Smrg#if OPT_FOCUS_EVENT
1029fa3f02f3Smrg    ,srm_FOCUS_EVENT_MOUSE = SET_FOCUS_EVENT_MOUSE
1030fa3f02f3Smrg#endif
1031fa3f02f3Smrg    ,srm_EXT_MODE_MOUSE = SET_EXT_MODE_MOUSE
1032fa3f02f3Smrg    ,srm_SGR_EXT_MODE_MOUSE = SET_SGR_EXT_MODE_MOUSE
1033fa3f02f3Smrg    ,srm_URXVT_EXT_MODE_MOUSE = SET_URXVT_EXT_MODE_MOUSE
1034fa3f02f3Smrg    ,srm_ALTERNATE_SCROLL = SET_ALTERNATE_SCROLL
1035fa3f02f3Smrg    ,srm_RXVT_SCROLL_TTY_OUTPUT = 1010
1036fa3f02f3Smrg    ,srm_RXVT_SCROLL_TTY_KEYPRESS = 1011
1037fa3f02f3Smrg    ,srm_EIGHT_BIT_META = 1034
1038fa3f02f3Smrg#if OPT_NUM_LOCK
1039fa3f02f3Smrg    ,srm_REAL_NUMLOCK = 1035
1040fa3f02f3Smrg    ,srm_META_SENDS_ESC = 1036
1041fa3f02f3Smrg#endif
1042fa3f02f3Smrg    ,srm_DELETE_IS_DEL = 1037
1043fa3f02f3Smrg#if OPT_NUM_LOCK
1044fa3f02f3Smrg    ,srm_ALT_SENDS_ESC = 1039
1045fa3f02f3Smrg#endif
1046fa3f02f3Smrg    ,srm_KEEP_SELECTION = 1040
1047fa3f02f3Smrg    ,srm_SELECT_TO_CLIPBOARD = 1041
1048fa3f02f3Smrg    ,srm_BELL_IS_URGENT = 1042
1049fa3f02f3Smrg    ,srm_POP_ON_BELL = 1043
1050fa3f02f3Smrg    ,srm_TITE_INHIBIT = 1048
1051fa3f02f3Smrg#if OPT_TCAP_FKEYS
1052fa3f02f3Smrg    ,srm_TCAP_FKEYS = 1050
1053fa3f02f3Smrg#endif
1054fa3f02f3Smrg#if OPT_SUN_FUNC_KEYS
1055fa3f02f3Smrg    ,srm_SUN_FKEYS = 1051
1056fa3f02f3Smrg#endif
1057fa3f02f3Smrg#if OPT_HP_FUNC_KEYS
1058fa3f02f3Smrg    ,srm_HP_FKEYS = 1052
1059fa3f02f3Smrg#endif
1060fa3f02f3Smrg#if OPT_SCO_FUNC_KEYS
1061fa3f02f3Smrg    ,srm_SCO_FKEYS = 1053
1062fa3f02f3Smrg#endif
1063fa3f02f3Smrg    ,srm_LEGACY_FKEYS = 1060
1064fa3f02f3Smrg#if OPT_SUNPC_KBD
1065fa3f02f3Smrg    ,srm_VT220_FKEYS = 1061
1066fa3f02f3Smrg#endif
10679a64e1c5Smrg#if OPT_GRAPHICS
1068fa3f02f3Smrg    ,srm_PRIVATE_COLOR_REGISTERS = 1070
1069fa3f02f3Smrg#endif
1070fa3f02f3Smrg#if OPT_READLINE
1071fa3f02f3Smrg    ,srm_BUTTON1_MOVE_POINT = SET_BUTTON1_MOVE_POINT
1072fa3f02f3Smrg    ,srm_BUTTON2_MOVE_POINT = SET_BUTTON2_MOVE_POINT
1073fa3f02f3Smrg    ,srm_DBUTTON3_DELETE = SET_DBUTTON3_DELETE
1074fa3f02f3Smrg    ,srm_PASTE_IN_BRACKET = SET_PASTE_IN_BRACKET
1075fa3f02f3Smrg    ,srm_PASTE_QUOTE = SET_PASTE_QUOTE
1076fa3f02f3Smrg    ,srm_PASTE_LITERAL_NL = SET_PASTE_LITERAL_NL
1077fa3f02f3Smrg#endif				/* OPT_READLINE */
10789a64e1c5Smrg#if OPT_SIXEL_GRAPHICS
10799a64e1c5Smrg    ,srm_SIXEL_SCROLLS_RIGHT = 8452
10809a64e1c5Smrg#endif
1081fa3f02f3Smrg} DECSET_codes;
1082fa3f02f3Smrg
1083d522f475Smrg/* indices for mapping multiple clicks to selection types */
1084d522f475Smrgtypedef enum {
1085d522f475Smrg    Select_CHAR=0
1086d522f475Smrg    ,Select_WORD
1087d522f475Smrg    ,Select_LINE
1088d522f475Smrg    ,Select_GROUP
1089d522f475Smrg    ,Select_PAGE
1090d522f475Smrg    ,Select_ALL
1091d522f475Smrg#if OPT_SELECT_REGEX
1092d522f475Smrg    ,Select_REGEX
1093d522f475Smrg#endif
1094d522f475Smrg    ,NSELECTUNITS
1095d522f475Smrg} SelectUnit;
1096d522f475Smrg
1097cd3331d0Smrgtypedef enum {
1098cd3331d0Smrg    ecSetColor = 1
1099cd3331d0Smrg    , ecGetColor
1100cd3331d0Smrg    , ecGetAnsiColor
1101cd3331d0Smrg    , ecLAST
1102cd3331d0Smrg} ColorOps;
1103cd3331d0Smrg
1104cd3331d0Smrgtypedef enum {
1105cd3331d0Smrg    efSetFont = 1
1106cd3331d0Smrg    , efGetFont
1107cd3331d0Smrg    , efLAST
1108cd3331d0Smrg} FontOps;
1109cd3331d0Smrg
1110c219fbebSmrgtypedef enum {
1111c219fbebSmrg    esFalse = 0
1112c219fbebSmrg    , esTrue
1113c219fbebSmrg    , esAlways
1114c219fbebSmrg    , esNever
1115c219fbebSmrg} FullscreenOps;
1116c219fbebSmrg
11173367019cSmrg#ifndef NO_ACTIVE_ICON
11183367019cSmrgtypedef enum {
11193367019cSmrg    eiFalse = 0
11203367019cSmrg    , eiTrue
11213367019cSmrg    , eiDefault
11223367019cSmrg    , eiLAST
11233367019cSmrg} AIconOps;
11243367019cSmrg#endif
11253367019cSmrg
1126cd3331d0Smrgtypedef enum {
1127cd3331d0Smrg    etSetTcap = 1
1128cd3331d0Smrg    , etGetTcap
1129cd3331d0Smrg    , etLAST
1130cd3331d0Smrg} TcapOps;
1131cd3331d0Smrg
1132cd3331d0Smrgtypedef enum {
11333367019cSmrg    /* 1-23 are chosen to be the same as the control-sequence coding */
1134cd3331d0Smrg    ewRestoreWin = 1
1135cd3331d0Smrg    , ewMinimizeWin = 2
1136cd3331d0Smrg    , ewSetWinPosition = 3
1137cd3331d0Smrg    , ewSetWinSizePixels = 4
1138cd3331d0Smrg    , ewRaiseWin = 5
1139cd3331d0Smrg    , ewLowerWin = 6
1140cd3331d0Smrg    , ewRefreshWin = 7
1141cd3331d0Smrg    , ewSetWinSizeChars = 8
1142cd3331d0Smrg#if OPT_MAXIMIZE
1143cd3331d0Smrg    , ewMaximizeWin = 9
1144c219fbebSmrg    , ewFullscreenWin = 10
1145cd3331d0Smrg#endif
1146cd3331d0Smrg    , ewGetWinState = 11
1147cd3331d0Smrg    , ewGetWinPosition = 13
1148cd3331d0Smrg    , ewGetWinSizePixels = 14
1149cd3331d0Smrg    , ewGetWinSizeChars = 18
1150cd3331d0Smrg#if OPT_MAXIMIZE
1151cd3331d0Smrg    , ewGetScreenSizeChars = 19
1152cd3331d0Smrg#endif
1153cd3331d0Smrg    , ewGetIconTitle = 20
1154cd3331d0Smrg    , ewGetWinTitle = 21
1155cd3331d0Smrg    , ewPushTitle = 22
1156cd3331d0Smrg    , ewPopTitle = 23
1157cd3331d0Smrg    /* these do not fit into that scheme, which is why we use an array */
1158cd3331d0Smrg    , ewSetWinLines
1159cd3331d0Smrg    , ewSetXprop
1160cd3331d0Smrg    , ewGetSelection
1161cd3331d0Smrg    , ewSetSelection
1162cd3331d0Smrg    /* get the size of the array... */
1163cd3331d0Smrg    , ewLAST
1164cd3331d0Smrg} WindowOps;
1165cd3331d0Smrg
1166cd3331d0Smrg#define	COLOR_DEFINED(s,w)	((s)->which & (unsigned) (1<<(w)))
1167d522f475Smrg#define	COLOR_VALUE(s,w)	((s)->colors[w])
1168cd3331d0Smrg#define	SET_COLOR_VALUE(s,w,v)	(((s)->colors[w] = (v)), UIntSet((s)->which, (1<<(w))))
1169d522f475Smrg
1170d522f475Smrg#define	COLOR_NAME(s,w)		((s)->names[w])
1171cd3331d0Smrg#define	SET_COLOR_NAME(s,w,v)	(((s)->names[w] = (v)), ((s)->which |= (unsigned) (1<<(w))))
1172d522f475Smrg
1173d522f475Smrg#define	UNDEFINE_COLOR(s,w)	((s)->which &= (~((w)<<1)))
1174d522f475Smrg
1175d522f475Smrg/***====================================================================***/
1176d522f475Smrg
1177d522f475Smrg#if OPT_ISO_COLORS
1178d522f475Smrg#define TERM_COLOR_FLAGS(xw)	((xw)->flags & (FG_COLOR|BG_COLOR))
1179d522f475Smrg#define COLOR_0		0
1180d522f475Smrg#define COLOR_1		1
1181d522f475Smrg#define COLOR_2		2
1182d522f475Smrg#define COLOR_3		3
1183d522f475Smrg#define COLOR_4		4
1184d522f475Smrg#define COLOR_5		5
1185d522f475Smrg#define COLOR_6		6
1186d522f475Smrg#define COLOR_7		7
1187d522f475Smrg#define COLOR_8		8
1188d522f475Smrg#define COLOR_9		9
1189d522f475Smrg#define COLOR_10	10
1190d522f475Smrg#define COLOR_11	11
1191d522f475Smrg#define COLOR_12	12
1192d522f475Smrg#define COLOR_13	13
1193d522f475Smrg#define COLOR_14	14
1194d522f475Smrg#define COLOR_15	15
1195d522f475Smrg#define MIN_ANSI_COLORS 16
1196d522f475Smrg
1197d522f475Smrg#if OPT_256_COLORS
1198d522f475Smrg# define NUM_ANSI_COLORS 256
1199d522f475Smrg#elif OPT_88_COLORS
1200d522f475Smrg# define NUM_ANSI_COLORS 88
1201d522f475Smrg#else
1202d522f475Smrg# define NUM_ANSI_COLORS MIN_ANSI_COLORS
1203d522f475Smrg#endif
1204d522f475Smrg
1205d522f475Smrg#if NUM_ANSI_COLORS > MIN_ANSI_COLORS
1206d522f475Smrg# define OPT_EXT_COLORS  1
1207d522f475Smrg#else
1208d522f475Smrg# define OPT_EXT_COLORS  0
1209d522f475Smrg#endif
1210d522f475Smrg
1211d522f475Smrg#define COLOR_BD	(NUM_ANSI_COLORS)	/* BOLD */
1212d522f475Smrg#define COLOR_UL	(NUM_ANSI_COLORS+1)	/* UNDERLINE */
1213d522f475Smrg#define COLOR_BL	(NUM_ANSI_COLORS+2)	/* BLINK */
1214d522f475Smrg#define COLOR_RV	(NUM_ANSI_COLORS+3)	/* REVERSE */
1215d522f475Smrg#define MAXCOLORS	(NUM_ANSI_COLORS+4)
1216d522f475Smrg#ifndef DFT_COLORMODE
1217d522f475Smrg#define DFT_COLORMODE True	/* default colorMode resource */
1218d522f475Smrg#endif
1219d522f475Smrg
1220d522f475Smrg#define ReverseOrHilite(screen,flags,hilite) \
1221d522f475Smrg		(( screen->colorRVMode && hilite ) || \
1222d522f475Smrg		    ( !screen->colorRVMode && \
1223d522f475Smrg		      (( (flags & INVERSE) && !hilite) || \
1224d522f475Smrg		       (!(flags & INVERSE) &&  hilite)) ))
1225d522f475Smrg
1226d522f475Smrg/* Define a fake XK code, we need it for the fake color response in
1227d522f475Smrg * xtermcapKeycode(). */
1228d522f475Smrg#if OPT_TCAP_QUERY && OPT_ISO_COLORS
1229d522f475Smrg# define XK_COLORS 0x0003
1230d522f475Smrg#endif
1231d522f475Smrg
1232d522f475Smrg#else	/* !OPT_ISO_COLORS */
1233d522f475Smrg
1234d522f475Smrg#define TERM_COLOR_FLAGS(xw) 0
1235d522f475Smrg
1236d522f475Smrg#define ReverseOrHilite(screen,flags,hilite) \
1237d522f475Smrg		      (( (flags & INVERSE) && !hilite) || \
1238d522f475Smrg		       (!(flags & INVERSE) &&  hilite))
1239d522f475Smrg
1240d522f475Smrg#endif	/* OPT_ISO_COLORS */
1241d522f475Smrg
1242cd3331d0Smrg# define XK_TCAPNAME 0x0004
1243cd3331d0Smrg
1244d522f475Smrg#if OPT_AIX_COLORS
1245d522f475Smrg#define if_OPT_AIX_COLORS(screen, code) if(screen->colorMode) code
1246d522f475Smrg#else
1247d522f475Smrg#define if_OPT_AIX_COLORS(screen, code) /* nothing */
1248d522f475Smrg#endif
1249d522f475Smrg
1250b7c89284Ssnj#if OPT_256_COLORS || OPT_88_COLORS || OPT_ISO_COLORS
1251b7c89284Ssnj# define if_OPT_ISO_COLORS(screen, code) if (screen->colorMode) code
1252d522f475Smrg#else
1253b7c89284Ssnj# define if_OPT_ISO_COLORS(screen, code) /* nothing */
1254d522f475Smrg#endif
1255d522f475Smrg
1256d522f475Smrg#define COLOR_RES_NAME(root) "color" root
1257d522f475Smrg
1258d522f475Smrg#if OPT_COLOR_CLASS
1259d522f475Smrg#define COLOR_RES_CLASS(root) "Color" root
1260d522f475Smrg#else
1261d522f475Smrg#define COLOR_RES_CLASS(root) XtCForeground
1262d522f475Smrg#endif
1263d522f475Smrg
1264d522f475Smrg#if OPT_COLOR_RES
1265d522f475Smrg#define COLOR_RES(root,offset,value) Sres(COLOR_RES_NAME(root), COLOR_RES_CLASS(root), offset.resource, value)
1266d522f475Smrg#define COLOR_RES2(name,class,offset,value) Sres(name, class, offset.resource, value)
1267d522f475Smrg#else
1268d522f475Smrg#define COLOR_RES(root,offset,value) Cres(COLOR_RES_NAME(root), COLOR_RES_CLASS(root), offset, value)
1269d522f475Smrg#define COLOR_RES2(name,class,offset,value) Cres(name, class, offset, value)
1270d522f475Smrg#endif
1271d522f475Smrg
1272d522f475Smrg#define CLICK_RES_NAME(count)  "on" count "Clicks"
1273d522f475Smrg#define CLICK_RES_CLASS(count) "On" count "Clicks"
1274d522f475Smrg#define CLICK_RES(count,offset,value) Sres(CLICK_RES_NAME(count), CLICK_RES_CLASS(count), offset, value)
1275d522f475Smrg
1276d522f475Smrg/***====================================================================***/
1277d522f475Smrg
1278d522f475Smrg#if OPT_DEC_CHRSET
1279d522f475Smrg#define if_OPT_DEC_CHRSET(code) code
1280d522f475Smrg	/* Use 2 bits for encoding the double high/wide sense of characters */
1281d522f475Smrg#define CSET_SWL        0
1282d522f475Smrg#define CSET_DHL_TOP    1
1283d522f475Smrg#define CSET_DHL_BOT    2
1284d522f475Smrg#define CSET_DWL        3
1285d522f475Smrg#define NUM_CHRSET      8	/* normal/bold and 4 CSET_xxx values */
1286b7c89284Ssnj
1287d522f475Smrg	/* Use remaining bits for encoding the other character-sets */
1288d522f475Smrg#define CSET_NORMAL(code)  ((code) == CSET_SWL)
1289d522f475Smrg#define CSET_DOUBLE(code)  (!CSET_NORMAL(code) && !CSET_EXTEND(code))
1290cd3331d0Smrg#define CSET_EXTEND(code)  ((int)(code) > CSET_DWL)
1291b7c89284Ssnj
1292b7c89284Ssnj#define DBLCS_BITS            4
1293b7c89284Ssnj#define DBLCS_MASK            BITS2MASK(DBLCS_BITS)
1294b7c89284Ssnj
1295b7c89284Ssnj#define GetLineDblCS(ld)      (((ld)->bufHead >> LINEFLAG_BITS) & DBLCS_MASK)
1296b7c89284Ssnj#define SetLineDblCS(ld,cs)   (ld)->bufHead = (RowData) ((ld->bufHead & LINEFLAG_MASK) | (cs << LINEFLAG_BITS))
1297b7c89284Ssnj
1298b7c89284Ssnj#define LineCharSet(screen, ld) \
1299b7c89284Ssnj	((CSET_DOUBLE(GetLineDblCS(ld))) \
1300b7c89284Ssnj		? GetLineDblCS(ld) \
1301b7c89284Ssnj		: (screen)->cur_chrset)
1302b7c89284Ssnj#define LineMaxCol(screen, ld) \
1303b7c89284Ssnj	(CSET_DOUBLE(GetLineDblCS(ld)) \
1304b7c89284Ssnj	 ? (screen->max_col / 2) \
1305b7c89284Ssnj	 : (screen->max_col))
1306b7c89284Ssnj#define LineCursorX(screen, ld, col) \
1307b7c89284Ssnj	(CSET_DOUBLE(GetLineDblCS(ld)) \
1308b7c89284Ssnj	 ? CursorX(screen, 2*(col)) \
1309b7c89284Ssnj	 : CursorX(screen, (col)))
1310b7c89284Ssnj#define LineFontWidth(screen, ld) \
1311b7c89284Ssnj	(CSET_DOUBLE(GetLineDblCS(ld)) \
1312b7c89284Ssnj	 ? 2*FontWidth(screen) \
1313b7c89284Ssnj	 : FontWidth(screen))
1314d522f475Smrg#else
1315b7c89284Ssnj
1316d522f475Smrg#define if_OPT_DEC_CHRSET(code) /*nothing*/
1317b7c89284Ssnj
1318b7c89284Ssnj#define GetLineDblCS(ld)       0
1319b7c89284Ssnj
1320b7c89284Ssnj#define LineCharSet(screen, ld)         0
1321b7c89284Ssnj#define LineMaxCol(screen, ld)          screen->max_col
1322b7c89284Ssnj#define LineCursorX(screen, ld, col)    CursorX(screen, col)
1323b7c89284Ssnj#define LineFontWidth(screen, ld)       FontWidth(screen)
1324b7c89284Ssnj
1325d522f475Smrg#endif
1326d522f475Smrg
1327d522f475Smrg#if OPT_LUIT_PROG && !OPT_WIDE_CHARS
1328d522f475Smrg#error Luit requires the wide-chars configuration
1329d522f475Smrg#endif
1330d522f475Smrg
1331d522f475Smrg/***====================================================================***/
1332d522f475Smrg
1333d522f475Smrg#if OPT_EBCDIC
1334d522f475Smrgextern int E2A(int);
1335d522f475Smrgextern int A2E(int);
1336d522f475Smrg#else
1337d522f475Smrg#define E2A(a) (a)
1338d522f475Smrg#define A2E(a) (a)
1339d522f475Smrg#endif
1340d522f475Smrg
1341d522f475Smrg#define CONTROL(a) (A2E(E2A(a)&037))
1342d522f475Smrg
1343d522f475Smrg/***====================================================================***/
1344d522f475Smrg
1345d522f475Smrg#if OPT_TEK4014
1346d522f475Smrg#define TEK4014_ACTIVE(xw)      ((xw)->misc.TekEmu)
1347d522f475Smrg#define TEK4014_SHOWN(xw)       ((xw)->misc.Tshow)
1348d522f475Smrg#define CURRENT_EMU_VAL(tek,vt) (TEK4014_ACTIVE(term) ? tek : vt)
1349d522f475Smrg#define CURRENT_EMU()           CURRENT_EMU_VAL((Widget)tekWidget, (Widget)term)
1350d522f475Smrg#else
1351d522f475Smrg#define TEK4014_ACTIVE(screen)  0
1352d522f475Smrg#define TEK4014_SHOWN(xw)       0
1353d522f475Smrg#define CURRENT_EMU_VAL(tek,vt) (vt)
1354d522f475Smrg#define CURRENT_EMU()           ((Widget)term)
1355d522f475Smrg#endif
1356d522f475Smrg
1357d522f475Smrg/***====================================================================***/
1358d522f475Smrg
1359d522f475Smrg#if OPT_TOOLBAR
1360d522f475Smrg#define SHELL_OF(widget) XtParent(XtParent(widget))
1361d522f475Smrg#else
1362d522f475Smrg#define SHELL_OF(widget) XtParent(widget)
1363d522f475Smrg#endif
1364d522f475Smrg
1365d522f475Smrg/***====================================================================***/
1366d522f475Smrg
1367d522f475Smrg#if OPT_VT52_MODE
1368d522f475Smrg#define if_OPT_VT52_MODE(screen, code) if(screen->vtXX_level == 0) code
1369d522f475Smrg#else
1370d522f475Smrg#define if_OPT_VT52_MODE(screen, code) /* nothing */
1371d522f475Smrg#endif
1372d522f475Smrg
1373d522f475Smrg/***====================================================================***/
1374d522f475Smrg
1375d522f475Smrg#if OPT_XMC_GLITCH
1376d522f475Smrg#define if_OPT_XMC_GLITCH(screen, code) if(screen->xmc_glitch) code
1377d522f475Smrg#define XMC_GLITCH 1	/* the character we'll show */
1378d522f475Smrg#define XMC_FLAGS (INVERSE|UNDERLINE|BOLD|BLINK)
1379d522f475Smrg#else
1380d522f475Smrg#define if_OPT_XMC_GLITCH(screen, code) /* nothing */
1381d522f475Smrg#endif
1382d522f475Smrg
1383d522f475Smrg/***====================================================================***/
1384d522f475Smrg
13859a64e1c5Smrgtypedef unsigned IFlags;	/* at least 32 bits */
13869a64e1c5Smrg
13879a64e1c5Smrg#if OPT_WIDE_ATTRS
13889a64e1c5Smrgtypedef unsigned short IAttr;	/* at least 16 bits */
13899a64e1c5Smrg#else
13909a64e1c5Smrgtypedef unsigned char IAttr;	/* at least 8 bits */
13919a64e1c5Smrg#endif
13929a64e1c5Smrg
13939a64e1c5Smrg/***====================================================================***/
13949a64e1c5Smrg
13950d92cbfdSchristos#define LO_BYTE(ch) CharOf((ch) & 0xff)
13960d92cbfdSchristos#define HI_BYTE(ch) CharOf((ch) >> 8)
13970d92cbfdSchristos
1398d522f475Smrg#if OPT_WIDE_CHARS
1399d522f475Smrg#define if_OPT_WIDE_CHARS(screen, code) if(screen->wide_chars) code
1400d522f475Smrg#define if_WIDE_OR_NARROW(screen, wide, narrow) if(screen->wide_chars) wide else narrow
1401b7c89284Ssnj#if OPT_WIDER_ICHAR
1402b7c89284Ssnjtypedef unsigned IChar;		/* for 8-21 bit characters */
1403b7c89284Ssnj#else
1404b7c89284Ssnjtypedef unsigned short IChar;	/* for 8-16 bit characters */
1405b7c89284Ssnj#endif
1406d522f475Smrg#else
1407d522f475Smrg#define if_OPT_WIDE_CHARS(screen, code) /* nothing */
1408d522f475Smrg#define if_WIDE_OR_NARROW(screen, wide, narrow) narrow
1409d522f475Smrgtypedef unsigned char IChar;	/* for 8-bit characters */
1410d522f475Smrg#endif
1411d522f475Smrg
1412d522f475Smrg/***====================================================================***/
1413d522f475Smrg
1414d522f475Smrg#ifndef RES_OFFSET
1415d522f475Smrg#define RES_OFFSET(offset) XtOffsetOf(XtermWidgetRec, offset)
1416d522f475Smrg#endif
1417d522f475Smrg
1418d522f475Smrg#define RES_NAME(name) name
1419d522f475Smrg#define RES_CLASS(name) name
1420d522f475Smrg
1421d522f475Smrg#define Bres(name, class, offset, dftvalue) \
1422d522f475Smrg	{RES_NAME(name), RES_CLASS(class), XtRBoolean, sizeof(Boolean), \
1423d522f475Smrg	 RES_OFFSET(offset), XtRImmediate, (XtPointer) dftvalue}
1424d522f475Smrg
1425d522f475Smrg#define Cres(name, class, offset, dftvalue) \
1426d522f475Smrg	{RES_NAME(name), RES_CLASS(class), XtRPixel, sizeof(Pixel), \
1427fa3f02f3Smrg	 RES_OFFSET(offset), XtRString, DECONST(char,dftvalue)}
1428d522f475Smrg
1429d522f475Smrg#define Tres(name, class, offset, dftvalue) \
1430d522f475Smrg	COLOR_RES2(name, class, screen.Tcolors[offset], dftvalue) \
1431d522f475Smrg
1432d522f475Smrg#define Fres(name, class, offset, dftvalue) \
1433d522f475Smrg	{RES_NAME(name), RES_CLASS(class), XtRFontStruct, sizeof(XFontStruct *), \
1434fa3f02f3Smrg	 RES_OFFSET(offset), XtRString, DECONST(char,dftvalue)}
1435d522f475Smrg
1436d522f475Smrg#define Ires(name, class, offset, dftvalue) \
1437d522f475Smrg	{RES_NAME(name), RES_CLASS(class), XtRInt, sizeof(int), \
1438d522f475Smrg	 RES_OFFSET(offset), XtRImmediate, (XtPointer) dftvalue}
1439d522f475Smrg
1440d522f475Smrg#define Dres(name, class, offset, dftvalue) \
1441d522f475Smrg	{RES_NAME(name), RES_CLASS(class), XtRFloat, sizeof(float), \
1442fa3f02f3Smrg	 RES_OFFSET(offset), XtRString, DECONST(char,dftvalue)}
1443d522f475Smrg
1444d522f475Smrg#define Sres(name, class, offset, dftvalue) \
1445d522f475Smrg	{RES_NAME(name), RES_CLASS(class), XtRString, sizeof(char *), \
1446fa3f02f3Smrg	 RES_OFFSET(offset), XtRString, DECONST(char,dftvalue)}
1447d522f475Smrg
1448d522f475Smrg#define Wres(name, class, offset, dftvalue) \
1449d522f475Smrg	{RES_NAME(name), RES_CLASS(class), XtRWidget, sizeof(Widget), \
1450d522f475Smrg	 RES_OFFSET(offset), XtRWidget, (XtPointer) dftvalue}
1451d522f475Smrg
1452d522f475Smrg/***====================================================================***/
1453d522f475Smrg
1454d522f475Smrg#define FRG_SIZE resource.minBufSize
1455d522f475Smrg#define BUF_SIZE resource.maxBufSize
1456d522f475Smrg
1457d522f475Smrgtypedef struct {
1458d522f475Smrg	Char *	next;
1459d522f475Smrg	Char *	last;
1460d522f475Smrg	int	update;		/* HandleInterpret */
1461d522f475Smrg#if OPT_WIDE_CHARS
1462d522f475Smrg	IChar	utf_data;	/* resulting character */
1463d522f475Smrg	int	utf_size;	/* ...number of bytes decoded */
1464d522f475Smrg	Char	*write_buf;
1465d522f475Smrg	unsigned write_len;
1466d522f475Smrg#endif
1467d522f475Smrg	Char	buffer[1];
1468d522f475Smrg} PtyData;
1469d522f475Smrg
1470d522f475Smrg/***====================================================================***/
1471d522f475Smrg
1472d522f475Smrg#if OPT_ISO_COLORS
1473d522f475Smrg#if OPT_256_COLORS || OPT_88_COLORS
1474b7c89284Ssnj#define COLOR_BITS 8
1475b7c89284Ssnjtypedef unsigned short CellColor;
1476d522f475Smrg#else
1477b7c89284Ssnj#define COLOR_BITS 4
1478b7c89284Ssnjtypedef Char CellColor;
1479d522f475Smrg#endif
1480b7c89284Ssnj#else
14819a64e1c5Smrgtypedef unsigned CellColor;
1482d522f475Smrg#endif
1483b7c89284Ssnj
1484b7c89284Ssnj#define BITS2MASK(b)          ((1 << b) - 1)
1485b7c89284Ssnj
1486b7c89284Ssnj#define COLOR_MASK            BITS2MASK(COLOR_BITS)
1487b7c89284Ssnj
1488b7c89284Ssnj#define GetCellColorFG(src)   ((src) & COLOR_MASK)
1489b7c89284Ssnj#define GetCellColorBG(src)   (((src) >> COLOR_BITS) & COLOR_MASK)
1490b7c89284Ssnj
1491b7c89284Ssnjtypedef Char RowData;		/* wrap/blink, and DEC single-double chars */
1492b7c89284Ssnj
1493b7c89284Ssnj#define LINEFLAG_BITS         4
1494b7c89284Ssnj#define LINEFLAG_MASK         BITS2MASK(LINEFLAG_BITS)
1495b7c89284Ssnj
1496b7c89284Ssnj#define GetLineFlags(ld)      ((ld)->bufHead & LINEFLAG_MASK)
1497b7c89284Ssnj
1498d522f475Smrg#if OPT_DEC_CHRSET
1499b7c89284Ssnj#define SetLineFlags(ld,xx)   (ld)->bufHead = (RowData) ((ld->bufHead & (DBLCS_MASK << LINEFLAG_BITS)) | (xx & LINEFLAG_MASK))
1500b7c89284Ssnj#else
1501b7c89284Ssnj#define SetLineFlags(ld,xx)   (ld)->bufHead = (RowData) (xx & LINEFLAG_MASK)
1502d522f475Smrg#endif
1503b7c89284Ssnj
1504b7c89284Ssnjtypedef IChar CharData;
1505b7c89284Ssnj
1506b7c89284Ssnj/*
1507b7c89284Ssnj * This is the xterm line-data/scrollback structure.
1508b7c89284Ssnj */
1509b7c89284Ssnjtypedef struct {
1510b7c89284Ssnj	Dimension lineSize;	/* number of columns in this row */
1511b7c89284Ssnj	RowData bufHead;	/* flag for wrapped lines */
1512d522f475Smrg#if OPT_WIDE_CHARS
1513b7c89284Ssnj	Char combSize;		/* number of items in combData[] */
1514b7c89284Ssnj#endif
15159a64e1c5Smrg	IAttr *attribs;		/* video attributes */
1516b7c89284Ssnj#if OPT_ISO_COLORS
1517b7c89284Ssnj	CellColor *color;	/* foreground+background color numbers */
1518b7c89284Ssnj#endif
1519b7c89284Ssnj	CharData *charData;	/* cell's base character */
1520b7c89284Ssnj	CharData *combData[1];	/* first enum past fixed-offsets */
1521b7c89284Ssnj} LineData;
1522b7c89284Ssnj
1523b7c89284Ssnj/*
1524b7c89284Ssnj * We use CellData in a few places, when copying a cell's data to a temporary
1525b7c89284Ssnj * variable.
1526b7c89284Ssnj */
1527b7c89284Ssnjtypedef struct {
15289a64e1c5Smrg	IAttr attribs;
1529b7c89284Ssnj#if OPT_WIDE_CHARS
1530b7c89284Ssnj	Char combSize;		/* number of items in combData[] */
1531b7c89284Ssnj#endif
1532b7c89284Ssnj#if OPT_ISO_COLORS
1533b7c89284Ssnj	CellColor color;	/* color-array */
1534d522f475Smrg#endif
1535b7c89284Ssnj	CharData charData;	/* cell's base character */
1536b7c89284Ssnj	CharData combData[1];	/* array of combining chars */
1537b7c89284Ssnj} CellData;
1538b7c89284Ssnj
1539b7c89284Ssnj#define for_each_combData(off, ld) for (off = 0; off < ld->combSize; ++off)
1540b7c89284Ssnj
1541b7c89284Ssnj/*
1542b7c89284Ssnj * Accommodate older compilers by not using variable-length arrays.
1543b7c89284Ssnj */
1544b7c89284Ssnj#define SizeOfLineData  offsetof(LineData, combData)
1545b7c89284Ssnj#define SizeOfCellData  offsetof(CellData, combData)
1546d522f475Smrg
1547d522f475Smrg	/*
1548d522f475Smrg	 * A "row" is the index within the visible part of the screen, and an
1549d522f475Smrg	 * "inx" is the index within the whole set of scrollable lines.
1550d522f475Smrg	 */
1551d522f475Smrg#define ROW2INX(screen, row)	((row) + (screen)->topline)
1552d522f475Smrg#define INX2ROW(screen, inx)	((inx) - (screen)->topline)
1553d522f475Smrg
1554d522f475Smrg#define ROW2ABS(screen, row)	((row) + (screen)->savedlines)
1555d522f475Smrg#define INX2ABS(screen, inx)	ROW2ABS(screen, INX2ROW(screen, inx))
1556d522f475Smrg
1557d522f475Smrg#define okScrnRow(screen, row) \
1558b7c89284Ssnj	((row) <= ((screen)->max_row - (screen)->topline) \
1559d522f475Smrg      && (row) >= -((screen)->savedlines))
1560d522f475Smrg
1561b7c89284Ssnj	/*
1562b7c89284Ssnj	 * Cache data for "proportional" and other fonts containing a mixture
1563b7c89284Ssnj	 * of widths.
1564b7c89284Ssnj	 */
1565b7c89284Ssnjtypedef struct {
15663367019cSmrg	Bool		mixed;
1567b7c89284Ssnj	Dimension	min_width;	/* nominal cell width for 0..255 */
1568b7c89284Ssnj	Dimension	max_width;	/* maximum cell width */
1569b7c89284Ssnj} FontMap;
1570d522f475Smrg
1571fa3f02f3Smrg#define KNOWN_MISSING	256
1572fa3f02f3Smrg
1573d522f475Smrgtypedef struct {
1574d522f475Smrg	unsigned	chrset;
1575d522f475Smrg	unsigned	flags;
1576d522f475Smrg	XFontStruct *	fs;
1577d522f475Smrg	char *		fn;
1578b7c89284Ssnj	FontMap		map;
1579fa3f02f3Smrg	Char		known_missing[KNOWN_MISSING];
1580d522f475Smrg} XTermFonts;
1581d522f475Smrg
1582b7c89284Ssnj#if OPT_RENDERFONT
1583cd3331d0Smrgtypedef enum {
1584cd3331d0Smrg	erFalse = 0
1585cd3331d0Smrg	, erTrue
1586cd3331d0Smrg	, erDefault
1587cd3331d0Smrg	, erLast
1588cd3331d0Smrg} RenderFont;
1589cd3331d0Smrg
1590cd3331d0Smrg#define DefaultRenderFont(xw) \
15913367019cSmrg	if ((xw)->work.render_font == erDefault) \
15923367019cSmrg	    (xw)->work.render_font = erFalse
1593cd3331d0Smrg
1594b7c89284Ssnjtypedef struct {
1595b7c89284Ssnj	XftFont *	font;
1596b7c89284Ssnj	FontMap		map;
1597b7c89284Ssnj} XTermXftFonts;
1598b7c89284Ssnj#endif
1599b7c89284Ssnj
1600d522f475Smrgtypedef struct {
1601d522f475Smrg	int		top;
1602d522f475Smrg	int		left;
1603d522f475Smrg	int		bottom;
1604d522f475Smrg	int		right;
1605d522f475Smrg} XTermRect;
1606d522f475Smrg
1607d522f475Smrg	/* indices into save_modes[] */
1608d522f475Smrgtypedef enum {
16093367019cSmrg	DP_ALTERNATE_SCROLL,
16103367019cSmrg	DP_ALT_SENDS_ESC,
16113367019cSmrg	DP_BELL_IS_URGENT,
1612d522f475Smrg	DP_CRS_VISIBLE,
1613d522f475Smrg	DP_DECANM,
1614d522f475Smrg	DP_DECARM,
1615d522f475Smrg	DP_DECAWM,
1616d522f475Smrg	DP_DECBKM,
1617d522f475Smrg	DP_DECCKM,
1618d522f475Smrg	DP_DECCOLM,	/* IN132COLUMNS */
16193367019cSmrg	DP_DECKPAM,
16203367019cSmrg	DP_DECNRCM,
1621d522f475Smrg	DP_DECOM,
1622d522f475Smrg	DP_DECPEX,
1623d522f475Smrg	DP_DECPFF,
1624d522f475Smrg	DP_DECSCLM,
1625d522f475Smrg	DP_DECSCNM,
1626d522f475Smrg	DP_DECTCEM,
16273367019cSmrg	DP_DELETE_IS_DEL,
16283367019cSmrg	DP_EIGHT_BIT_META,
16293367019cSmrg	DP_KEEP_SELECTION,
16303367019cSmrg	DP_KEYBOARD_TYPE,
16313367019cSmrg	DP_POP_ON_BELL,
1632d522f475Smrg	DP_PRN_EXTENT,
1633d522f475Smrg	DP_PRN_FORMFEED,
16343367019cSmrg	DP_RXVT_SCROLLBAR,
16353367019cSmrg	DP_RXVT_SCROLL_TTY_KEYPRESS,
16363367019cSmrg	DP_RXVT_SCROLL_TTY_OUTPUT,
16373367019cSmrg	DP_SELECT_TO_CLIPBOARD,
1638d522f475Smrg	DP_X_ALTSCRN,
1639d522f475Smrg	DP_X_DECCOLM,
16403367019cSmrg	DP_X_EXT_MOUSE,
1641d522f475Smrg	DP_X_LOGGING,
16423367019cSmrg	DP_X_LRMM,
1643d522f475Smrg	DP_X_MARGIN,
1644d522f475Smrg	DP_X_MORE,
1645d522f475Smrg	DP_X_MOUSE,
16463367019cSmrg	DP_X_NCSM,
1647d522f475Smrg	DP_X_REVWRAP,
1648d522f475Smrg	DP_X_X10MSE,
1649d522f475Smrg#if OPT_BLINK_CURS
1650d522f475Smrg	DP_CRS_BLINK,
1651d522f475Smrg#endif
1652d522f475Smrg#if OPT_FOCUS_EVENT
1653d522f475Smrg	DP_X_FOCUS,
1654d522f475Smrg#endif
16553367019cSmrg#if OPT_NUM_LOCK
16563367019cSmrg	DP_REAL_NUMLOCK,
16573367019cSmrg	DP_META_SENDS_ESC,
16583367019cSmrg#endif
16593367019cSmrg#if OPT_SHIFT_FONTS
16603367019cSmrg	DP_RXVT_FONTSIZE,
16613367019cSmrg#endif
1662fa3f02f3Smrg#if OPT_SIXEL_GRAPHICS
1663fa3f02f3Smrg	DP_DECSDM,
1664fa3f02f3Smrg#endif
16653367019cSmrg#if OPT_TEK4014
16663367019cSmrg	DP_DECTEK,
16673367019cSmrg#endif
1668d522f475Smrg#if OPT_TOOLBAR
1669d522f475Smrg	DP_TOOLBAR,
1670d522f475Smrg#endif
1671fa3f02f3Smrg	DP_X_PRIVATE_COLOR_REGISTERS,
16729a64e1c5Smrg#if OPT_SIXEL_GRAPHICS
16739a64e1c5Smrg	DP_SIXEL_SCROLLS_RIGHT,
16749a64e1c5Smrg#endif
1675d522f475Smrg	DP_LAST
1676d522f475Smrg} SaveModes;
1677d522f475Smrg
16780d92cbfdSchristos#define DoSM(code,value)  screen->save_modes[code] = (unsigned) (value)
16790d92cbfdSchristos#define DoRM(code,value)  value = (Boolean) screen->save_modes[code]
16800d92cbfdSchristos#define DoRM0(code,value) value = screen->save_modes[code]
1681d522f475Smrg
1682d522f475Smrg	/* index into vt_shell[] or tek_shell[] */
1683d522f475Smrgtypedef enum {
1684d522f475Smrg	noMenu = -1,
1685d522f475Smrg	mainMenu,
1686d522f475Smrg	vtMenu,
1687d522f475Smrg	fontMenu,
1688b7c89284Ssnj#if OPT_TEK4014
1689d522f475Smrg	tekMenu
1690b7c89284Ssnj#endif
1691d522f475Smrg} MenuIndex;
1692d522f475Smrg
1693cd3331d0Smrgtypedef enum {
1694cd3331d0Smrg	bvOff = -1,
1695cd3331d0Smrg	bvLow = 0,
1696cd3331d0Smrg	bvHigh
1697cd3331d0Smrg} BellVolume;
1698cd3331d0Smrg
1699d522f475Smrg#define NUM_POPUP_MENUS 4
1700d522f475Smrg
1701d522f475Smrg#if OPT_COLOR_RES
1702d522f475Smrgtypedef struct {
1703d522f475Smrg	String		resource;
1704d522f475Smrg	Pixel		value;
17053367019cSmrg	unsigned short red, green, blue;
1706cd3331d0Smrg	int		mode;		/* -1=invalid, 0=unset, 1=set   */
1707d522f475Smrg} ColorRes;
1708d522f475Smrg#else
1709d522f475Smrg#define ColorRes Pixel
1710d522f475Smrg#endif
1711d522f475Smrg
1712cd3331d0Smrg/* these are set in getPrinterFlags */
1713cd3331d0Smrgtypedef struct {
1714cd3331d0Smrg	int	printer_extent;		/* print complete page		*/
1715cd3331d0Smrg	int	printer_formfeed;	/* print formfeed per function	*/
1716cd3331d0Smrg	int	printer_newline;	/* print newline per function	*/
1717cd3331d0Smrg	int	print_attributes;	/* 0=off, 1=normal, 2=color	*/
1718712a7ff4Smrg	int	print_everything;	/* 0=all, 1=dft, 2=alt, 3=saved */
1719cd3331d0Smrg} PrinterFlags;
1720cd3331d0Smrg
1721712a7ff4Smrgtypedef struct {
1722712a7ff4Smrg	FILE *	fp;			/* output file/pipe used	*/
1723712a7ff4Smrg	Boolean isOpen;			/* output was opened/tried	*/
1724712a7ff4Smrg	Boolean toFile;			/* true when directly to file	*/
17253367019cSmrg	Boolean printer_checked;	/* printer_command is checked	*/
1726712a7ff4Smrg	String	printer_command;	/* pipe/shell command string	*/
1727712a7ff4Smrg	Boolean printer_autoclose;	/* close printer when offline	*/
1728712a7ff4Smrg	Boolean printer_extent;		/* print complete page		*/
1729712a7ff4Smrg	Boolean printer_formfeed;	/* print formfeed per function	*/
1730712a7ff4Smrg	Boolean printer_newline;	/* print newline per function	*/
1731712a7ff4Smrg	int	printer_controlmode;	/* 0=off, 1=auto, 2=controller	*/
1732712a7ff4Smrg	int	print_attributes;	/* 0=off, 1=normal, 2=color	*/
1733712a7ff4Smrg	int	print_everything;	/* 0=all, 1=dft, 2=alt, 3=saved */
1734712a7ff4Smrg} PrinterState;
1735712a7ff4Smrg
1736d522f475Smrgtypedef struct {
1737d522f475Smrg	unsigned	which;		/* must have NCOLORS bits */
1738d522f475Smrg	Pixel		colors[NCOLORS];
1739d522f475Smrg	char		*names[NCOLORS];
1740d522f475Smrg} ScrnColors;
1741d522f475Smrg
1742d522f475Smrgtypedef struct {
1743d522f475Smrg	Boolean		saved;
1744d522f475Smrg	int		row;
1745d522f475Smrg	int		col;
17469a64e1c5Smrg	IFlags		flags;		/* VTxxx saves graphics rendition */
17470d92cbfdSchristos	Char		curgl;
17480d92cbfdSchristos	Char		curgr;
1749fa3f02f3Smrg	int		gsets[4];
1750d522f475Smrg#if OPT_ISO_COLORS
1751d522f475Smrg	int		cur_foreground; /* current foreground color	*/
1752d522f475Smrg	int		cur_background; /* current background color	*/
1753d522f475Smrg	int		sgr_foreground; /* current SGR foreground color */
1754d522f475Smrg	int		sgr_background; /* current SGR background color */
1755d522f475Smrg	Boolean		sgr_extended;	/* SGR set with extended codes? */
1756d522f475Smrg#endif
1757d522f475Smrg} SavedCursor;
1758d522f475Smrg
1759cd3331d0Smrgtypedef struct _SaveTitle {
17603367019cSmrg	struct _SaveTitle *next;
1761cd3331d0Smrg	char		*iconName;
1762cd3331d0Smrg	char		*windowName;
1763cd3331d0Smrg} SaveTitle;
1764cd3331d0Smrg
1765d522f475Smrg#define SAVED_CURSORS 2
1766d522f475Smrg
1767d522f475Smrgtypedef struct {
1768d522f475Smrg	int		width;		/* if > 0, width of scrollbar,	*/
1769d522f475Smrg					/* and scrollbar is showing	*/
1770d522f475Smrg	Boolean		rv_cached;	/* see ScrollBarReverseVideo	*/
1771d522f475Smrg	int		rv_active;	/* ...current reverse-video	*/
1772d522f475Smrg	Pixel		bg;		/* ...cached background color	*/
1773d522f475Smrg	Pixel		fg;		/* ...cached foreground color	*/
1774d522f475Smrg	Pixel		bdr;		/* ...cached border color	*/
1775d522f475Smrg	Pixmap		bdpix;		/* ...cached border pixmap	*/
1776d522f475Smrg} SbInfo;
1777d522f475Smrg
1778d522f475Smrg#if OPT_TOOLBAR
1779d522f475Smrgtypedef struct {
1780d522f475Smrg	Widget		menu_bar;	/* toolbar, if initialized	*/
1781d522f475Smrg	Dimension	menu_height;	/* ...and its height		*/
1782d522f475Smrg	Dimension	menu_border;	/* ...and its border		*/
1783d522f475Smrg} TbInfo;
1784d522f475Smrg#define VT100_TB_INFO(name) screen.fullVwin.tb_info.name
1785d522f475Smrg#endif
1786d522f475Smrg
1787d522f475Smrgtypedef struct {
1788d522f475Smrg	Window		window;		/* X window id			*/
1789d522f475Smrg	int		width;		/* width of columns		*/
1790d522f475Smrg	int		height;		/* height of rows		*/
1791d522f475Smrg	Dimension	fullwidth;	/* full width of window		*/
1792d522f475Smrg	Dimension	fullheight;	/* full height of window	*/
1793d522f475Smrg	int		f_width;	/* width of fonts in pixels	*/
1794d522f475Smrg	int		f_height;	/* height of fonts in pixels	*/
1795d522f475Smrg	int		f_ascent;	/* ascent of font in pixels	*/
1796d522f475Smrg	int		f_descent;	/* descent of font in pixels	*/
1797d522f475Smrg	SbInfo		sb_info;
17983367019cSmrg#if OPT_DOUBLE_BUFFER
17993367019cSmrg	Drawable	drawable;	/* X drawable id                */
18003367019cSmrg#endif
1801d522f475Smrg#if OPT_TOOLBAR
1802d522f475Smrg	Boolean		active;		/* true if toolbars are used	*/
1803d522f475Smrg	TbInfo		tb_info;	/* toolbar information		*/
1804d522f475Smrg#endif
1805d522f475Smrg} VTwin;
1806d522f475Smrg
1807d522f475Smrgtypedef struct {
1808d522f475Smrg	Window		window;		/* X window id			*/
1809d522f475Smrg	int		width;		/* width of columns		*/
1810d522f475Smrg	int		height;		/* height of rows		*/
1811d522f475Smrg	Dimension	fullwidth;	/* full width of window		*/
1812d522f475Smrg	Dimension	fullheight;	/* full height of window	*/
1813d522f475Smrg	double		tekscale;	/* scale factor Tek -> vs100	*/
1814d522f475Smrg} TKwin;
1815d522f475Smrg
1816712a7ff4Smrgtypedef struct {
1817712a7ff4Smrg    String f_n;			/* the normal font */
1818712a7ff4Smrg    String f_b;			/* the bold font */
1819712a7ff4Smrg#if OPT_WIDE_CHARS
1820712a7ff4Smrg    String f_w;			/* the normal wide font */
1821712a7ff4Smrg    String f_wb;		/* the bold wide font */
1822712a7ff4Smrg#endif
1823712a7ff4Smrg} VTFontNames;
1824712a7ff4Smrg
1825712a7ff4Smrgtypedef struct {
1826712a7ff4Smrg    VTFontNames default_font;
1827712a7ff4Smrg    String menu_font_names[NMENUFONTS][fMAX];
1828712a7ff4Smrg} SubResourceRec;
1829712a7ff4Smrg
18303367019cSmrg#if OPT_INPUT_METHOD
18313367019cSmrg#define NINPUTWIDGETS	3
18323367019cSmrgtypedef struct {
18333367019cSmrg	Widget		w;
18343367019cSmrg	XIM		xim;		/* input method attached to 'w' */
18353367019cSmrg	XIC		xic;		/* input context attached to 'xim' */
18363367019cSmrg} TInput;
18373367019cSmrg#endif
18383367019cSmrg
18393367019cSmrgtypedef enum {
18403367019cSmrg	CURSOR_BLOCK = 2
18413367019cSmrg	, CURSOR_UNDERLINE = 4
18423367019cSmrg	, CURSOR_BAR = 6
18433367019cSmrg} XtCursorShape;
18443367019cSmrg
18453367019cSmrg#define isCursorBlock(s)	((s)->cursor_shape == CURSOR_BLOCK)
18463367019cSmrg#define isCursorUnderline(s)	((s)->cursor_shape == CURSOR_UNDERLINE)
18473367019cSmrg#define isCursorBar(s)		((s)->cursor_shape == CURSOR_BAR)
18483367019cSmrg
18493367019cSmrgtypedef enum {
18503367019cSmrg	DEFAULT_STYLE = 0
18513367019cSmrg	, BLINK_BLOCK
18523367019cSmrg	, STEADY_BLOCK
18533367019cSmrg	, BLINK_UNDERLINE
18543367019cSmrg	, STEADY_UNDERLINE
18553367019cSmrg	, BLINK_BAR
18563367019cSmrg	, STEADY_BAR
18573367019cSmrg} XtCursorStyle;
18583367019cSmrg
1859d522f475Smrgtypedef struct {
1860d522f475Smrg/* These parameters apply to both windows */
1861d522f475Smrg	Display		*display;	/* X display for screen		*/
1862d522f475Smrg	int		respond;	/* socket for responses
1863d522f475Smrg					   (position report, etc.)	*/
1864d522f475Smrg/* These parameters apply to VT100 window */
1865d522f475Smrg	IChar		unparse_bfr[256];
1866d522f475Smrg	unsigned	unparse_len;
1867d522f475Smrg
1868d522f475Smrg#if OPT_TCAP_QUERY
1869d522f475Smrg	int		tc_query_code;
1870d522f475Smrg	Bool		tc_query_fkey;
1871d522f475Smrg#endif
1872d522f475Smrg	pid_t		pid;		/* pid of process on far side   */
1873d522f475Smrg	uid_t		uid;		/* user id of actual person	*/
1874d522f475Smrg	gid_t		gid;		/* group id of actual person	*/
1875d522f475Smrg	ColorRes	Tcolors[NCOLORS]; /* terminal colors		*/
1876d522f475Smrg#if OPT_HIGHLIGHT_COLOR
1877d522f475Smrg	Boolean		hilite_color;	/* hilite colors override	*/
1878d522f475Smrg	Boolean		hilite_reverse;	/* hilite overrides reverse	*/
1879d522f475Smrg#endif
1880d522f475Smrg#if OPT_ISO_COLORS
18813367019cSmrg	XColor *	cmap_data;	/* color table			*/
18823367019cSmrg	unsigned	cmap_size;
1883d522f475Smrg	ColorRes	Acolors[MAXCOLORS]; /* ANSI color emulation	*/
1884d522f475Smrg	int		veryBoldColors;	/* modifier for boldColors	*/
1885d522f475Smrg	Boolean		boldColors;	/* can we make bold colors?	*/
1886d522f475Smrg	Boolean		colorMode;	/* are we using color mode?	*/
1887d522f475Smrg	Boolean		colorULMode;	/* use color for underline?	*/
1888d522f475Smrg	Boolean		italicULMode;	/* italic font for underline?	*/
1889d522f475Smrg	Boolean		colorBDMode;	/* use color for bold?		*/
1890d522f475Smrg	Boolean		colorBLMode;	/* use color for blink?		*/
1891d522f475Smrg	Boolean		colorRVMode;	/* use color for reverse?	*/
1892d522f475Smrg	Boolean		colorAttrMode;	/* prefer colorUL/BD to SGR	*/
1893d522f475Smrg#endif
1894d522f475Smrg#if OPT_DEC_CHRSET
1895d522f475Smrg	Boolean		font_doublesize;/* enable font-scaling		*/
1896d522f475Smrg	int		cache_doublesize;/* limit of our cache		*/
1897d522f475Smrg	Char		cur_chrset;	/* character-set index & code	*/
1898d522f475Smrg	int		fonts_used;	/* count items in double_fonts	*/
1899d522f475Smrg	XTermFonts	double_fonts[NUM_CHRSET];
1900d522f475Smrg#endif
1901d522f475Smrg#if OPT_DEC_RECTOPS
1902d522f475Smrg	int		cur_decsace;	/* parameter for DECSACE	*/
1903d522f475Smrg#endif
1904d522f475Smrg#if OPT_WIDE_CHARS
1905d522f475Smrg	Boolean		wide_chars;	/* true when 16-bit chars	*/
1906d522f475Smrg	Boolean		vt100_graphics;	/* true to allow vt100-graphics	*/
1907d522f475Smrg	Boolean		utf8_inparse;	/* true to enable UTF-8 parser	*/
19083367019cSmrg	Boolean		normalized_c;	/* true to precompose to Form C */
1909712a7ff4Smrg	char *		utf8_mode_s;	/* use UTF-8 decode/encode	*/
1910712a7ff4Smrg	char *		utf8_fonts_s;	/* use UTF-8 decode/encode	*/
1911fa3f02f3Smrg	int		utf8_nrc_mode;	/* saved UTF-8 mode for DECNRCM */
1912fa3f02f3Smrg	Boolean		utf8_always;	/* special case for wideChars	*/
1913d522f475Smrg	int		utf8_mode;	/* use UTF-8 decode/encode: 0-2	*/
1914712a7ff4Smrg	int		utf8_fonts;	/* use UTF-8 decode/encode: 0-2	*/
1915d522f475Smrg	int		max_combining;	/* maximum # of combining chars	*/
1916d522f475Smrg	Boolean		utf8_latin1;	/* use UTF-8 with Latin-1 bias	*/
1917d522f475Smrg	Boolean		utf8_title;	/* use UTF-8 titles		*/
1918d522f475Smrg	int		latin9_mode;	/* poor man's luit, latin9	*/
1919d522f475Smrg	int		unicode_font;	/* font uses unicode encoding	*/
1920d522f475Smrg	int		utf_count;	/* state of utf_char		*/
1921d522f475Smrg	IChar		utf_char;	/* in-progress character	*/
19223367019cSmrg	Boolean		char_was_written;
1923d522f475Smrg	int		last_written_col;
1924d522f475Smrg	int		last_written_row;
1925b7c89284Ssnj	TypedBuffer(XChar2b);
1926b7c89284Ssnj	TypedBuffer(char);
1927d522f475Smrg#endif
1928d522f475Smrg#if OPT_BROKEN_OSC
1929d522f475Smrg	Boolean		brokenLinuxOSC; /* true to ignore Linux palette ctls */
1930d522f475Smrg#endif
1931d522f475Smrg#if OPT_BROKEN_ST
1932d522f475Smrg	Boolean		brokenStringTerm; /* true to match old OSC parse */
1933d522f475Smrg#endif
1934d522f475Smrg#if OPT_C1_PRINT || OPT_WIDE_CHARS
1935d522f475Smrg	Boolean		c1_printable;	/* true if we treat C1 as print	*/
1936d522f475Smrg#endif
1937d522f475Smrg	int		border;		/* inner border			*/
1938d522f475Smrg	int		scrollBarBorder; /* scrollBar border		*/
19390d92cbfdSchristos	long		event_mask;
19400d92cbfdSchristos	unsigned	send_mouse_pos;	/* user wants mouse transition  */
1941d522f475Smrg					/* and position information	*/
19423367019cSmrg	int		extend_coords;	/* support large terminals	*/
1943d522f475Smrg	Boolean		send_focus_pos; /* user wants focus in/out info */
1944d522f475Smrg	Boolean		quiet_grab;	/* true if no cursor change on focus */
1945d522f475Smrg#if OPT_PASTE64
1946b7c89284Ssnj	Cardinal	base64_paste;	/* set to send paste in base64	*/
1947d522f475Smrg	int		base64_final;	/* string-terminator for paste	*/
1948d522f475Smrg	/* _qWriteSelectionData expects these to be initialized to zero.
1949d522f475Smrg	 * base64_flush() is the last step of the conversion, it clears these
1950d522f475Smrg	 * variables.
1951d522f475Smrg	 */
19520d92cbfdSchristos	unsigned	base64_accu;
19530d92cbfdSchristos	unsigned	base64_count;
19540d92cbfdSchristos	unsigned	base64_pad;
1955d522f475Smrg#endif
1956d522f475Smrg#if OPT_READLINE
1957d522f475Smrg	unsigned	click1_moves;
1958d522f475Smrg	unsigned	paste_moves;
1959d522f475Smrg	unsigned	dclick3_deletes;
1960d522f475Smrg	unsigned	paste_brackets;
1961d522f475Smrg	unsigned	paste_quotes;
1962d522f475Smrg	unsigned	paste_literal_nl;
1963d522f475Smrg#endif	/* OPT_READLINE */
1964d522f475Smrg#if OPT_DEC_LOCATOR
1965d522f475Smrg	Boolean		locator_reset;	/* turn mouse off after 1 report? */
1966d522f475Smrg	Boolean		locator_pixels;	/* report in pixels?		*/
1967d522f475Smrg					/* if false, report in cells	*/
19680d92cbfdSchristos	unsigned	locator_events;	/* what events to report	*/
1969d522f475Smrg	Boolean		loc_filter;	/* is filter rectangle active?	*/
1970d522f475Smrg	int		loc_filter_top;	/* filter rectangle for DEC Locator */
1971d522f475Smrg	int		loc_filter_left;
1972d522f475Smrg	int		loc_filter_bottom;
1973d522f475Smrg	int		loc_filter_right;
1974d522f475Smrg#endif	/* OPT_DEC_LOCATOR */
1975d522f475Smrg	int		mouse_button;	/* current button pressed	*/
1976d522f475Smrg	int		mouse_row;	/* ...and its row		*/
1977d522f475Smrg	int		mouse_col;	/* ...and its column		*/
1978d522f475Smrg	int		select;		/* xterm selected		*/
1979d522f475Smrg	Boolean		bellOnReset;	/* bellOnReset			*/
1980d522f475Smrg	Boolean		visualbell;	/* visual bell mode		*/
1981d522f475Smrg	Boolean		poponbell;	/* pop on bell mode		*/
19820d92cbfdSchristos
19833367019cSmrg	Boolean		allowPasteControls; /* PasteControls mode	*/
1984cd3331d0Smrg	Boolean		allowColorOps;	/* ColorOps mode		*/
19850d92cbfdSchristos	Boolean		allowFontOps;	/* FontOps mode			*/
1986d522f475Smrg	Boolean		allowSendEvents;/* SendEvent mode		*/
19870d92cbfdSchristos	Boolean		allowTcapOps;	/* TcapOps mode			*/
1988d522f475Smrg	Boolean		allowTitleOps;	/* TitleOps mode		*/
1989d522f475Smrg	Boolean		allowWindowOps;	/* WindowOps mode		*/
19900d92cbfdSchristos
1991cd3331d0Smrg	Boolean		allowColorOp0;	/* initial ColorOps mode	*/
19920d92cbfdSchristos	Boolean		allowFontOp0;	/* initial FontOps mode		*/
1993d522f475Smrg	Boolean		allowSendEvent0;/* initial SendEvent mode	*/
19940d92cbfdSchristos	Boolean		allowTcapOp0;	/* initial TcapOps mode		*/
1995d522f475Smrg	Boolean		allowTitleOp0;	/* initial TitleOps mode	*/
1996d522f475Smrg	Boolean		allowWindowOp0;	/* initial WindowOps mode	*/
19970d92cbfdSchristos
1998cd3331d0Smrg	String		disallowedColorOps;
1999cd3331d0Smrg	char		disallow_color_ops[ecLAST];
2000cd3331d0Smrg
2001cd3331d0Smrg	String		disallowedFontOps;
2002cd3331d0Smrg	char		disallow_font_ops[efLAST];
2003cd3331d0Smrg
2004cd3331d0Smrg	String		disallowedTcapOps;
2005cd3331d0Smrg	char		disallow_tcap_ops[etLAST];
2006cd3331d0Smrg
2007cd3331d0Smrg	String		disallowedWinOps;
2008cd3331d0Smrg	char		disallow_win_ops[ewLAST];
2009cd3331d0Smrg
2010d522f475Smrg	Boolean		awaitInput;	/* select-timeout mode		*/
2011d522f475Smrg	Boolean		grabbedKbd;	/* keyboard is grabbed		*/
2012d522f475Smrg#ifdef ALLOWLOGGING
2013d522f475Smrg	int		logging;	/* logging mode			*/
2014d522f475Smrg	int		logfd;		/* file descriptor of log	*/
2015d522f475Smrg	char		*logfile;	/* log file name		*/
2016d522f475Smrg	Char		*logstart;	/* current start of log buffer	*/
2017d522f475Smrg#endif
2018d522f475Smrg	int		inhibit;	/* flags for inhibiting changes	*/
2019d522f475Smrg
2020d522f475Smrg/* VT window parameters */
2021d522f475Smrg	Boolean		Vshow;		/* VT window showing		*/
2022d522f475Smrg	VTwin		fullVwin;
20233367019cSmrg	int		needSwap;
2024d522f475Smrg#ifndef NO_ACTIVE_ICON
2025d522f475Smrg	VTwin		iconVwin;
2026d522f475Smrg	VTwin		*whichVwin;
2027d522f475Smrg#endif /* NO_ACTIVE_ICON */
2028d522f475Smrg
2029d522f475Smrg	int		pointer_mode;	/* when to use hidden_cursor	*/
20309a64e1c5Smrg	int		pointer_mode0;	/* ...initial value             */
2031d522f475Smrg	Boolean 	hide_pointer;	/* true to use "hidden_cursor"  */
2032d522f475Smrg	Cursor		pointer_cursor;	/* pointer cursor in window	*/
2033d522f475Smrg	Cursor		hidden_cursor;	/* hidden cursor in window	*/
2034d522f475Smrg
2035d522f475Smrg	String	answer_back;		/* response to ENQ		*/
2036d522f475Smrg
2037712a7ff4Smrg	PrinterState	printer_state;	/* actual printer state		*/
2038cd3331d0Smrg	PrinterFlags	printer_flags;	/* working copy of printer flags */
2039712a7ff4Smrg#if OPT_PRINT_ON_EXIT
2040712a7ff4Smrg	Boolean		write_error;
2041712a7ff4Smrg#endif
2042cd3331d0Smrg
2043d522f475Smrg	Boolean		fnt_prop;	/* true if proportional fonts	*/
2044d522f475Smrg	Boolean		fnt_boxes;	/* true if font has box-chars	*/
2045cd3331d0Smrg	Boolean		force_packed;	/* true to override proportional */
2046d522f475Smrg#if OPT_BOX_CHARS
20473367019cSmrg	Boolean		force_box_chars;/* true if we assume no boxchars */
2048cd3331d0Smrg	Boolean		force_all_chars;/* true to outline missing chars */
2049fa3f02f3Smrg	Boolean		assume_all_chars;/* true to allow missing chars */
2050cd3331d0Smrg	Boolean		allow_packing;	/* true to allow packed-fonts	*/
2051d522f475Smrg#endif
2052d522f475Smrg	Dimension	fnt_wide;
2053d522f475Smrg	Dimension	fnt_high;
20543367019cSmrg	float		scale_height;	/* scaling for font-height	*/
2055d522f475Smrg	XTermFonts	fnts[fMAX];	/* normal/bold/etc for terminal	*/
2056d522f475Smrg	Boolean		free_bold_box;	/* same_font_size's austerity	*/
2057712a7ff4Smrg	Boolean		allowBoldFonts;	/* do we use bold fonts at all? */
20589a64e1c5Smrg#if OPT_WIDE_ATTRS
20599a64e1c5Smrg	XTermFonts	ifnts[fMAX];	/* normal/bold/etc italic fonts */
20609a64e1c5Smrg	Boolean		ifnts_ok;	/* true if ifnts[] is cached	*/
20619a64e1c5Smrg#endif
2062d522f475Smrg#ifndef NO_ACTIVE_ICON
2063cb4a1343Smrg	XTermFonts	fnt_icon;	/* icon font			*/
2064cb4a1343Smrg	String		icon_fontname;	/* name of icon font		*/
2065cb4a1343Smrg	int		icon_fontnum;	/* number to use for icon font	*/
2066d522f475Smrg#endif /* NO_ACTIVE_ICON */
2067d522f475Smrg	int		enbolden;	/* overstrike for bold font	*/
2068d522f475Smrg	XPoint		*box;		/* draw unselected cursor	*/
2069d522f475Smrg
2070d522f475Smrg	int		cursor_state;	/* ON, OFF, or BLINKED_OFF	*/
2071d522f475Smrg	int		cursor_busy;	/* do not redraw...		*/
20720d92cbfdSchristos	Boolean		cursor_underline; /* true if cursor is in underline mode */
20733367019cSmrg	XtCursorShape	cursor_shape;
2074d522f475Smrg#if OPT_BLINK_CURS
2075d522f475Smrg	Boolean		cursor_blink;	/* cursor blink enable		*/
2076d522f475Smrg	Boolean		cursor_blink_res; /* initial cursor blink value	*/
2077d522f475Smrg	Boolean		cursor_blink_esc; /* cursor blink escape-state	*/
2078d522f475Smrg#endif
2079d522f475Smrg#if OPT_BLINK_TEXT
2080d522f475Smrg	Boolean		blink_as_bold;	/* text blink disable		*/
2081d522f475Smrg#endif
2082d522f475Smrg#if OPT_BLINK_CURS || OPT_BLINK_TEXT
2083d522f475Smrg	int		blink_state;	/* ON, OFF, or BLINKED_OFF	*/
2084d522f475Smrg	int		blink_on;	/* cursor on time (msecs)	*/
2085d522f475Smrg	int		blink_off;	/* cursor off time (msecs)	*/
2086d522f475Smrg	XtIntervalId	blink_timer;	/* timer-id for cursor-proc	*/
2087d522f475Smrg#endif
2088d522f475Smrg#if OPT_ZICONBEEP
2089d522f475Smrg	Boolean		zIconBeep_flagged; /* True if icon name was changed */
2090d522f475Smrg#endif /* OPT_ZICONBEEP */
2091d522f475Smrg	int		cursor_GC;	/* see ShowCursor()		*/
2092d522f475Smrg	int		cursor_set;	/* requested state		*/
2093d522f475Smrg	CELL		cursorp;	/* previous cursor row/column	*/
2094d522f475Smrg	int		cur_col;	/* current cursor column	*/
2095d522f475Smrg	int		cur_row;	/* current cursor row		*/
2096d522f475Smrg	int		max_col;	/* rightmost column		*/
2097d522f475Smrg	int		max_row;	/* bottom row			*/
2098d522f475Smrg	int		top_marg;	/* top line of scrolling region */
2099d522f475Smrg	int		bot_marg;	/* bottom line of  "	    "	*/
21003367019cSmrg	int		lft_marg;	/* left column of "	    "	*/
21013367019cSmrg	int		rgt_marg;	/* right column of "	    "	*/
2102d522f475Smrg	Widget		scrollWidget;	/* pointer to scrollbar struct	*/
2103d522f475Smrg	/*
2104d522f475Smrg	 * Indices used to keep track of the top of the vt100 window and
2105d522f475Smrg	 * the saved lines, taking scrolling into account.
2106d522f475Smrg	 */
2107d522f475Smrg	int		topline;	/* line number of top, <= 0	*/
2108b7c89284Ssnj	long		saved_fifo;     /* number of lines that've been saved */
2109d522f475Smrg	int		savedlines;     /* number of lines that've been saved */
2110d522f475Smrg	int		savelines;	/* number of lines off top to save */
2111d522f475Smrg	int		scroll_amt;	/* amount to scroll		*/
2112d522f475Smrg	int		refresh_amt;	/* amount to refresh		*/
2113d522f475Smrg	/*
2114b7c89284Ssnj	 * Working variables for getLineData().
2115b7c89284Ssnj	 */
2116b7c89284Ssnj	size_t		lineExtra;	/* extra space for combining chars */
2117b7c89284Ssnj	/*
2118b7c89284Ssnj	 * Pointer to the current visible buffer.
2119d522f475Smrg	 */
2120d522f475Smrg	ScrnBuf		visbuf;		/* ptr to visible screen buf (main) */
2121d522f475Smrg	/*
2122d522f475Smrg	 * Data for the normal buffer, which may have saved lines to which
2123d522f475Smrg	 * the user can scroll.
2124d522f475Smrg	 */
2125b7c89284Ssnj	ScrnBuf		saveBuf_index;
2126b7c89284Ssnj	Char		*saveBuf_data;
2127d522f475Smrg	/*
2128b7c89284Ssnj	 * Data for visible and alternate buffer.
2129d522f475Smrg	 */
2130b7c89284Ssnj	ScrnBuf		editBuf_index[2];
2131b7c89284Ssnj	Char		*editBuf_data[2];
2132b7c89284Ssnj	int		whichBuf;	/* 0/1 for normal/alternate buf */
2133b7c89284Ssnj	Boolean		is_running;	/* true when buffers are legal	*/
2134d522f475Smrg	/*
2135d522f475Smrg	 * Workspace used for screen operations.
2136d522f475Smrg	 */
2137d522f475Smrg	Char		**save_ptr;	/* workspace for save-pointers  */
2138d522f475Smrg	size_t		save_len;	/* ...and its length		*/
2139d522f475Smrg
2140d522f475Smrg	int		scrolllines;	/* number of lines to button scroll */
21413367019cSmrg	Boolean		alternateScroll; /* scroll-actions become keys */
2142d522f475Smrg	Boolean		scrollttyoutput; /* scroll to bottom on tty output */
2143d522f475Smrg	Boolean		scrollkey;	/* scroll to bottom on key	*/
2144d522f475Smrg	Boolean		cursor_moved;	/* scrolling makes cursor move	*/
2145d522f475Smrg
21460d92cbfdSchristos	Boolean		do_wrap;	/* true if cursor in last column
2147d522f475Smrg					    and character just output    */
2148d522f475Smrg
2149d522f475Smrg	int		incopy;		/* 0 idle; 1 XCopyArea issued;
2150d522f475Smrg					    -1 first GraphicsExpose seen,
2151d522f475Smrg					    but last not seen		*/
2152d522f475Smrg	int		copy_src_x;	/* params from last XCopyArea ... */
2153d522f475Smrg	int		copy_src_y;
2154d522f475Smrg	unsigned int	copy_width;
2155d522f475Smrg	unsigned int	copy_height;
2156d522f475Smrg	int		copy_dest_x;
2157d522f475Smrg	int		copy_dest_y;
2158d522f475Smrg
21593367019cSmrg	Dimension	embed_wide;
21603367019cSmrg	Dimension	embed_high;
21613367019cSmrg
2162d522f475Smrg	Boolean		c132;		/* allow change to 132 columns	*/
2163d522f475Smrg	Boolean		curses;		/* kludge line wrap for more	*/
2164d522f475Smrg	Boolean		hp_ll_bc;	/* kludge HP-style ll for xdb	*/
2165d522f475Smrg	Boolean		marginbell;	/* true if margin bell on	*/
2166d522f475Smrg	int		nmarginbell;	/* columns from right margin	*/
2167cd3331d0Smrg	int		bellArmed;	/* cursor below bell margin	*/
2168cd3331d0Smrg	BellVolume	marginVolume;	/* margin-bell volume           */
2169cd3331d0Smrg	BellVolume	warningVolume;	/* warning-bell volume          */
2170d522f475Smrg	Boolean		multiscroll;	/* true if multi-scroll		*/
2171d522f475Smrg	int		scrolls;	/* outstanding scroll count,
2172d522f475Smrg					    used only with multiscroll	*/
2173d522f475Smrg	SavedCursor	sc[SAVED_CURSORS]; /* data for restore cursor	*/
21749a64e1c5Smrg	IFlags		save_modes[DP_LAST]; /* save dec/xterm private modes */
2175d522f475Smrg
2176cd3331d0Smrg	int		title_modes;	/* control set/get of titles	*/
21779a64e1c5Smrg	int		title_modes0;	/* ...initial value         	*/
2178cd3331d0Smrg	SaveTitle	*save_title;
2179cd3331d0Smrg
2180d522f475Smrg	/* Improved VT100 emulation stuff.				*/
2181d522f475Smrg	String		keyboard_dialect; /* default keyboard dialect	*/
2182fa3f02f3Smrg	int		gsets[4];	/* G0 through G3.		*/
2183d522f475Smrg	Char		curgl;		/* Current GL setting.		*/
2184d522f475Smrg	Char		curgr;		/* Current GR setting.		*/
2185d522f475Smrg	Char		curss;		/* Current single shift.	*/
2186d522f475Smrg	String		term_id;	/* resource for terminal_id	*/
2187d522f475Smrg	int		terminal_id;	/* 100=vt100, 220=vt220, etc.	*/
2188d522f475Smrg	int		vtXX_level;	/* 0=vt52, 1,2,3 = vt100 ... vt320 */
21893367019cSmrg	int		ansi_level;	/* dpANSI levels 1,2,3		*/
2190d522f475Smrg	int		protected_mode;	/* 0=off, 1=DEC, 2=ISO		*/
2191d522f475Smrg	Boolean		always_bold_mode; /* compare normal/bold font	*/
2192d522f475Smrg	Boolean		always_highlight; /* whether to highlight cursor */
2193d522f475Smrg	Boolean		bold_mode;	/* use bold font or overstrike	*/
2194d522f475Smrg	Boolean		delete_is_del;	/* true for compatible Delete key */
2195d522f475Smrg	Boolean		jumpscroll;	/* whether we should jumpscroll */
2196b7c89284Ssnj	Boolean		fastscroll;	/* whether we should fastscroll */
2197d522f475Smrg	Boolean		old_fkeys;	/* true for compatible fkeys	*/
21989a64e1c5Smrg	Boolean		old_fkeys0;	/* ...initial value         	*/
2199d522f475Smrg	Boolean		underline;	/* whether to underline text	*/
2200d522f475Smrg
2201d522f475Smrg#if OPT_MAXIMIZE
2202d522f475Smrg	Boolean		restore_data;
2203d522f475Smrg	int		restore_x;
2204d522f475Smrg	int		restore_y;
2205d522f475Smrg	unsigned	restore_width;
2206d522f475Smrg	unsigned	restore_height;
2207d522f475Smrg#endif
2208d522f475Smrg
2209cd3331d0Smrg#if OPT_SCROLL_LOCK
2210cd3331d0Smrg	Boolean		allowScrollLock;/* ScrollLock mode		*/
2211cd3331d0Smrg	Boolean		allowScrollLock0;/* initial ScrollLock mode	*/
2212cd3331d0Smrg	Boolean		scroll_lock;	/* true to keep buffer in view	*/
2213cd3331d0Smrg	Boolean		scroll_dirty;	/* scrolling makes screen dirty	*/
2214cd3331d0Smrg#endif
2215cd3331d0Smrg
2216fa3f02f3Smrg#if OPT_SIXEL_GRAPHICS
2217fa3f02f3Smrg	Boolean		sixel_scrolling; /* sixel scrolling             */
22189a64e1c5Smrg	Boolean		sixel_scrolls_right; /* sixel scrolling moves cursor to right */
22199a64e1c5Smrg#endif
22209a64e1c5Smrg
22219a64e1c5Smrg#if OPT_GRAPHICS
22229a64e1c5Smrg	int		numcolorregisters; /* number of supported color registers */
2223fa3f02f3Smrg	Boolean		privatecolorregisters; /* private color registers for each graphic */
2224fa3f02f3Smrg#endif
2225fa3f02f3Smrg
2226d522f475Smrg#if OPT_VT52_MODE
22270d92cbfdSchristos	Char		vt52_save_curgl;
22280d92cbfdSchristos	Char		vt52_save_curgr;
22290d92cbfdSchristos	Char		vt52_save_curss;
2230fa3f02f3Smrg	int		vt52_save_gsets[4];
2231d522f475Smrg#endif
2232d522f475Smrg	/* Testing */
2233d522f475Smrg#if OPT_XMC_GLITCH
2234d522f475Smrg	unsigned	xmc_glitch;	/* # of spaces to pad on SGR's	*/
22359a64e1c5Smrg	IAttr		xmc_attributes;	/* attrs that make a glitch	*/
2236d522f475Smrg	Boolean		xmc_inline;	/* SGR's propagate only to eol	*/
2237d522f475Smrg	Boolean		move_sgr_ok;	/* SGR is reset on move		*/
2238d522f475Smrg#endif
2239d522f475Smrg
2240d522f475Smrg	/*
2241d522f475Smrg	 * Bell
2242d522f475Smrg	 */
2243d522f475Smrg	int		visualBellDelay; /* msecs to delay for visibleBell */
2244d522f475Smrg	int		bellSuppressTime; /* msecs after Bell before another allowed */
2245d522f475Smrg	Boolean		bellInProgress; /* still ringing/flashing prev bell? */
2246d522f475Smrg	Boolean		bellIsUrgent;	/* set XUrgency WM hint on bell */
22473367019cSmrg	Boolean		flash_line;	/* show visualBell as current line */
2248d522f475Smrg	/*
2249d522f475Smrg	 * Select/paste state.
2250d522f475Smrg	 */
2251d522f475Smrg	Boolean		selectToClipboard; /* primary vs clipboard */
2252d522f475Smrg	String		*mappedSelect;	/* mapping for "SELECT" to "PRIMARY" */
2253d522f475Smrg
2254d522f475Smrg	Boolean		waitingForTrackInfo;
2255d522f475Smrg	int		numberOfClicks;
2256d522f475Smrg	int		maxClicks;
2257d522f475Smrg	int		multiClickTime;	/* time between multiclick selects */
2258d522f475Smrg	SelectUnit	selectUnit;
2259d522f475Smrg	SelectUnit	selectMap[NSELECTUNITS];
2260d522f475Smrg	String		onClick[NSELECTUNITS + 1];
2261d522f475Smrg
2262d522f475Smrg	char		*charClass;	/* for overriding word selection */
2263d522f475Smrg	Boolean		cutNewline;	/* whether or not line cut has \n */
2264d522f475Smrg	Boolean		cutToBeginningOfLine;  /* line cuts to BOL? */
2265d522f475Smrg	Boolean		highlight_selection; /* controls appearance of selection */
2266cb4a1343Smrg	Boolean		show_wrap_marks; /* show lines which are wrapped */
2267d522f475Smrg	Boolean		trim_selection; /* controls trimming of selection */
2268d522f475Smrg	Boolean		i18nSelections;
2269d522f475Smrg	Boolean		brokenSelections;
2270d522f475Smrg	Boolean		keepSelection;	/* do not lose selection on output */
2271d522f475Smrg	Boolean		replyToEmacs;	/* Send emacs escape code when done selecting or extending? */
2272d522f475Smrg	Char		*selection_data; /* the current selection */
2273d522f475Smrg	int		selection_size; /* size of allocated buffer */
22740d92cbfdSchristos	unsigned long	selection_length; /* number of significant bytes */
2275d522f475Smrg	EventMode	eventMode;
2276d522f475Smrg	Time		selection_time;	/* latest event timestamp */
2277d522f475Smrg	Time		lastButtonUpTime;
2278d522f475Smrg	unsigned	lastButton;
2279d522f475Smrg
2280d522f475Smrg	CELL		rawPos;		/* raw position for selection start */
2281d522f475Smrg	CELL		startRaw;	/* area before selectUnit processing */
2282d522f475Smrg	CELL		endRaw;		/* " " */
2283d522f475Smrg	CELL		startSel;	/* area after selectUnit processing */
2284d522f475Smrg	CELL		endSel;		/* " " */
2285d522f475Smrg	CELL		startH;		/* start highlighted text */
2286d522f475Smrg	CELL		endH;		/* end highlighted text */
2287d522f475Smrg	CELL		saveStartW;	/* saved WORD state, for LINE */
2288d522f475Smrg	CELL		startExt;	/* Start, end of extension */
2289d522f475Smrg	CELL		endExt;		/* " " */
2290d522f475Smrg	CELL		saveStartR;	/* Saved values of raw selection for extend to restore to */
2291d522f475Smrg	CELL		saveEndR;	/* " " */
2292d522f475Smrg	int		startHCoord, endHCoord;
2293d522f475Smrg	int		firstValidRow;	/* Valid rows for selection clipping */
2294d522f475Smrg	int		lastValidRow;	/* " " */
2295d522f475Smrg
22963367019cSmrg	Boolean		selectToBuffer;	/* copy selection to buffer	*/
22973367019cSmrg	char *		internal_select;
22983367019cSmrg
2299b7c89284Ssnj	String		default_string;
2300b7c89284Ssnj	String		eightbit_select_types;
2301b7c89284Ssnj	Atom*		selection_targets_8bit;
2302b7c89284Ssnj#if OPT_WIDE_CHARS
2303b7c89284Ssnj	String		utf8_select_types;
2304b7c89284Ssnj	Atom*		selection_targets_utf8;
2305b7c89284Ssnj#endif
2306d522f475Smrg	Atom*		selection_atoms; /* which selections we own */
23073367019cSmrg	Cardinal	sel_atoms_size;	 /* how many atoms allocated */
2308d522f475Smrg	Cardinal	selection_count; /* how many atoms in use */
2309d522f475Smrg#if OPT_SELECT_REGEX
2310d522f475Smrg	char *		selectExpr[NSELECTUNITS];
2311d522f475Smrg#endif
2312d522f475Smrg	/*
2313d522f475Smrg	 * Input/output state.
2314d522f475Smrg	 */
23153367019cSmrg	Boolean		input_eight_bits;	/* do not send ESC when meta pressed */
23163367019cSmrg	int		eight_bit_meta;		/* use 8th bit when meta pressed */
23173367019cSmrg	char *		eight_bit_meta_s;	/* ...resource eightBitMeta */
23183367019cSmrg	Boolean		output_eight_bits;	/* honor all bits or strip */
23193367019cSmrg	Boolean		control_eight_bits;	/* send CSI as 8-bits */
2320d522f475Smrg	Boolean		backarrow_key;		/* backspace/delete */
2321d522f475Smrg	Boolean		alt_is_not_meta;	/* use both Alt- and Meta-key */
2322d522f475Smrg	Boolean		alt_sends_esc;		/* Alt-key sends ESC prefix */
2323d522f475Smrg	Boolean		meta_sends_esc;		/* Meta-key sends ESC prefix */
2324d522f475Smrg	/*
2325d522f475Smrg	 * Fonts
2326d522f475Smrg	 */
2327d522f475Smrg	Pixmap		menu_item_bitmap;	/* mask for checking items */
2328d522f475Smrg	String		initial_font;
2329d522f475Smrg	String		menu_font_names[NMENUFONTS][fMAX];
2330d522f475Smrg#define MenuFontName(n) menu_font_names[n][fNorm]
2331d522f475Smrg	long		menu_font_sizes[NMENUFONTS];
2332d522f475Smrg	int		menu_font_number;
23333367019cSmrg#if OPT_LOAD_VTFONTS || OPT_WIDE_CHARS
2334712a7ff4Smrg	Boolean		savedVTFonts;
2335712a7ff4Smrg	Boolean		mergedVTFonts;
2336712a7ff4Smrg	SubResourceRec	cacheVTFonts;
2337712a7ff4Smrg#endif
2338d522f475Smrg#if OPT_CLIP_BOLD
2339d522f475Smrg	Boolean		use_clipping;
2340d522f475Smrg#endif
2341d522f475Smrg	void *		main_cgs_cache;
2342d522f475Smrg#ifndef NO_ACTIVE_ICON
2343d522f475Smrg	void *		icon_cgs_cache;
2344d522f475Smrg#endif
2345d522f475Smrg#if OPT_RENDERFONT
2346b7c89284Ssnj	XTermXftFonts	renderFontNorm[NMENUFONTS];
2347b7c89284Ssnj	XTermXftFonts	renderFontBold[NMENUFONTS];
2348b7c89284Ssnj	XTermXftFonts	renderFontItal[NMENUFONTS];
2349b7c89284Ssnj#if OPT_RENDERWIDE
2350b7c89284Ssnj	XTermXftFonts	renderWideNorm[NMENUFONTS];
2351b7c89284Ssnj	XTermXftFonts	renderWideBold[NMENUFONTS];
2352b7c89284Ssnj	XTermXftFonts	renderWideItal[NMENUFONTS];
2353b7c89284Ssnj	TypedBuffer(XftCharSpec);
2354b7c89284Ssnj#else
2355b7c89284Ssnj	TypedBuffer(XftChar8);
2356b7c89284Ssnj#endif
2357d522f475Smrg	XftDraw *	renderDraw;
2358d522f475Smrg#endif
2359d522f475Smrg#if OPT_DABBREV
2360b7c89284Ssnj	Boolean		dabbrev_working;	/* nonzero during dabbrev process */
2361d522f475Smrg	unsigned char	dabbrev_erase_char;	/* used for deleting inserted completion */
2362d522f475Smrg#endif
2363d522f475Smrg	char		tcapbuf[TERMCAP_SIZE];
2364712a7ff4Smrg	char		tcap_area[TERMCAP_SIZE];
2365d522f475Smrg#if OPT_TCAP_FKEYS
2366d522f475Smrg	char **		tcap_fkeys;
2367d522f475Smrg#endif
2368d522f475Smrg} TScreen;
2369d522f475Smrg
2370d522f475Smrgtypedef struct _TekPart {
2371d522f475Smrg	XFontStruct *	Tfont[TEKNUMFONTS];
2372d522f475Smrg	int		tobaseline[TEKNUMFONTS]; /* top-baseline, each font */
2373d522f475Smrg	char *		initial_font;		/* large, 2, 3, small */
2374d522f475Smrg	char *		gin_terminator_str;	/* ginTerminator resource */
2375d522f475Smrg#if OPT_TOOLBAR
2376d522f475Smrg	TbInfo		tb_info;	/* toolbar information		*/
2377d522f475Smrg#endif
2378d522f475Smrg} TekPart;
2379d522f475Smrg
2380d522f475Smrg/* Tektronix window parameters */
2381d522f475Smrgtypedef struct _TekScreen {
2382d522f475Smrg	GC		TnormalGC;	/* normal painting		*/
2383d522f475Smrg	GC		TcursorGC;	/* normal cursor painting	*/
2384d522f475Smrg
2385d522f475Smrg	Boolean		waitrefresh;	/* postpone refresh		*/
2386d522f475Smrg	TKwin		fullTwin;
2387d522f475Smrg#ifndef NO_ACTIVE_ICON
2388d522f475Smrg	TKwin		iconTwin;
2389d522f475Smrg	TKwin		*whichTwin;
2390d522f475Smrg#endif /* NO_ACTIVE_ICON */
2391d522f475Smrg
2392d522f475Smrg	Cursor		arrow;		/* arrow cursor			*/
2393d522f475Smrg	GC		linepat[TEKNUMLINES]; /* line patterns		*/
2394d522f475Smrg	int		cur_X;		/* current x			*/
2395d522f475Smrg	int		cur_Y;		/* current y			*/
2396d522f475Smrg	Tmodes		cur;		/* current tek modes		*/
2397d522f475Smrg	Tmodes		page;		/* starting tek modes on page	*/
2398d522f475Smrg	int		margin;		/* 0 -> margin 1, 1 -> margin 2	*/
2399d522f475Smrg	int		pen;		/* current Tektronix pen 0=up, 1=dn */
2400d522f475Smrg	char		*TekGIN;	/* nonzero if Tektronix GIN mode*/
2401d522f475Smrg	int		gin_terminator; /* Tek strap option */
2402d522f475Smrg	char		tcapbuf[TERMCAP_SIZE];
2403d522f475Smrg} TekScreen;
2404d522f475Smrg
2405d522f475Smrg#if OPT_READLINE
2406d522f475Smrg#define SCREEN_FLAG(screenp,f)		(1&(screenp)->f)
2407d522f475Smrg#define SCREEN_FLAG_set(screenp,f)	((screenp)->f |= 1)
2408cd3331d0Smrg#define SCREEN_FLAG_unset(screenp,f)	((screenp)->f &= (unsigned) ~1L)
2409d522f475Smrg#define SCREEN_FLAG_save(screenp,f)	\
2410d522f475Smrg	((screenp)->f = (((screenp)->f)<<1) | SCREEN_FLAG(screenp,f))
2411d522f475Smrg#define SCREEN_FLAG_restore(screenp,f)	((screenp)->f = (((screenp)->f)>>1))
2412d522f475Smrg#else
2413d522f475Smrg#define SCREEN_FLAG(screenp,f)		(0)
2414d522f475Smrg#endif
2415d522f475Smrg
24163367019cSmrg/*
24173367019cSmrg * After screen-updates, reset the flag that tells us we should do wrapping.
24183367019cSmrg * Likewise, reset (in wide-character mode) the flag that tells us where the
24193367019cSmrg * "previous" character was written.
24203367019cSmrg */
24213367019cSmrg#if OPT_WIDE_CHARS
24223367019cSmrg#define ResetWrap(screen) \
24233367019cSmrg    (screen)->do_wrap = \
24243367019cSmrg    (screen)->char_was_written = False
24253367019cSmrg#else
24263367019cSmrg#define ResetWrap(screen) \
24273367019cSmrg    (screen)->do_wrap = False
24283367019cSmrg#endif
24293367019cSmrg
2430d522f475Smrg/* meaning of bits in screen.select flag */
2431d522f475Smrg#define	INWINDOW	01	/* the mouse is in one of the windows */
2432d522f475Smrg#define	FOCUS		02	/* one of the windows is the focus window */
2433d522f475Smrg
2434d522f475Smrg#define MULTICLICKTIME 250	/* milliseconds */
2435d522f475Smrg
2436c219fbebSmrgtypedef struct {
2437c219fbebSmrg    const char *name;
2438c219fbebSmrg    int code;
2439c219fbebSmrg} FlagList;
2440c219fbebSmrg
2441b7c89284Ssnjtypedef enum {
2442b7c89284Ssnj    fwNever = 0,
2443b7c89284Ssnj    fwResource,
2444b7c89284Ssnj    fwAlways
2445b7c89284Ssnj} fontWarningTypes;
2446b7c89284Ssnj
2447d522f475Smrgtypedef enum {
2448d522f475Smrg    keyboardIsLegacy,		/* bogus vt220 codes for F1-F4, etc. */
2449d522f475Smrg    keyboardIsDefault,
2450d522f475Smrg    keyboardIsHP,
2451d522f475Smrg    keyboardIsSCO,
2452d522f475Smrg    keyboardIsSun,
2453d522f475Smrg    keyboardIsTermcap,
2454d522f475Smrg    keyboardIsVT220
2455d522f475Smrg} xtermKeyboardType;
2456d522f475Smrg
2457d522f475Smrgtypedef enum {			/* legal values for screen.pointer_mode */
24583367019cSmrg    pNever = 0
24593367019cSmrg    , pNoMouse = 1
24603367019cSmrg    , pAlways = 2
24613367019cSmrg    , pFocused = 3
2462d522f475Smrg} pointerModeTypes;
2463d522f475Smrg
2464d522f475Smrgtypedef enum {			/* legal values for screen.utf8_mode */
2465712a7ff4Smrg    uFalse = 0
2466712a7ff4Smrg    , uTrue = 1
2467712a7ff4Smrg    , uAlways = 2
2468712a7ff4Smrg    , uDefault = 3
2469712a7ff4Smrg    , uLast
2470d522f475Smrg} utf8ModeTypes;
2471d522f475Smrg
24723367019cSmrgtypedef enum {			/* legal values for screen.eight_bit_meta */
24733367019cSmrg    ebFalse = 0
24743367019cSmrg    , ebTrue = 1
24753367019cSmrg    , ebNever = 2
24763367019cSmrg    , ebLocale = 3
24773367019cSmrg    , ebLast
24783367019cSmrg} ebMetaModeTypes;
24793367019cSmrg
2480d522f475Smrg#if OPT_HP_FUNC_KEYS
2481d522f475Smrg#define NAME_HP_KT " hp"
2482d522f475Smrg#else
2483d522f475Smrg#define NAME_HP_KT /*nothing*/
2484d522f475Smrg#endif
2485d522f475Smrg
2486d522f475Smrg#if OPT_SCO_FUNC_KEYS
2487d522f475Smrg#define NAME_SCO_KT " sco"
2488d522f475Smrg#else
2489d522f475Smrg#define NAME_SCO_KT /*nothing*/
2490d522f475Smrg#endif
2491d522f475Smrg
2492d522f475Smrg#if OPT_SUN_FUNC_KEYS
2493d522f475Smrg#define NAME_SUN_KT " sun"
2494d522f475Smrg#else
2495d522f475Smrg#define NAME_SUN_KT /*nothing*/
2496d522f475Smrg#endif
2497d522f475Smrg
2498d522f475Smrg#if OPT_SUNPC_KBD
2499d522f475Smrg#define NAME_VT220_KT " vt220"
2500d522f475Smrg#else
2501d522f475Smrg#define NAME_VT220_KT /*nothing*/
2502d522f475Smrg#endif
2503d522f475Smrg
2504d522f475Smrg#if OPT_TCAP_FKEYS
2505d522f475Smrg#define NAME_TCAP_KT " tcap"
2506d522f475Smrg#else
2507d522f475Smrg#define NAME_TCAP_KT /*nothing*/
2508d522f475Smrg#endif
2509d522f475Smrg
2510d522f475Smrg#define KEYBOARD_TYPES NAME_TCAP_KT NAME_HP_KT NAME_SCO_KT NAME_SUN_KT NAME_VT220_KT
2511d522f475Smrg
2512cd3331d0Smrg#if OPT_TRACE
2513cd3331d0Smrg#define TRACE_RC(code,func) code = func
2514cd3331d0Smrg#else
2515cd3331d0Smrg#define TRACE_RC(code,func) func
2516cd3331d0Smrg#endif
2517cd3331d0Smrg
2518d522f475Smrg#if OPT_TRACE
2519d522f475Smrgextern	const char * visibleKeyboardType(xtermKeyboardType);
2520d522f475Smrg#endif
2521d522f475Smrg
2522d522f475Smrgtypedef struct
2523d522f475Smrg{
25243367019cSmrg    int allow_keys;		/* how to handle legacy/vt220 keyboard */
2525d522f475Smrg    int cursor_keys;		/* how to handle cursor-key modifiers */
2526d522f475Smrg    int function_keys;		/* how to handle function-key modifiers */
2527d522f475Smrg    int keypad_keys;		/* how to handle keypad key-modifiers */
2528d522f475Smrg    int other_keys;		/* how to handle other key-modifiers */
2529d522f475Smrg    int string_keys;		/* how to handle string() modifiers */
2530d522f475Smrg} TModify;
2531d522f475Smrg
2532d522f475Smrgtypedef struct
2533d522f475Smrg{
2534d522f475Smrg    xtermKeyboardType type;
25359a64e1c5Smrg    IFlags flags;
2536d522f475Smrg    char *shell_translations;
2537d522f475Smrg    char *xterm_translations;
2538d522f475Smrg    char *extra_translations;
2539d522f475Smrg#if OPT_INITIAL_ERASE
2540d522f475Smrg    int	reset_DECBKM;		/* reset should set DECBKM */
2541d522f475Smrg#endif
2542d522f475Smrg#if OPT_MOD_FKEYS
2543d522f475Smrg    TModify modify_now;		/* current modifier value */
2544d522f475Smrg    TModify modify_1st;		/* original modifier value, for resets */
2545d522f475Smrg    int format_keys;		/* format of modifyOtherKeys */
2546d522f475Smrg#endif
2547d522f475Smrg} TKeyboard;
2548d522f475Smrg
2549b7c89284Ssnj#define GravityIsNorthWest(w) ((w)->misc.resizeGravity == NorthWestGravity)
2550b7c89284Ssnj#define GravityIsSouthWest(w) ((w)->misc.resizeGravity == SouthWestGravity)
2551b7c89284Ssnj
2552d522f475Smrgtypedef struct _Misc {
2553d522f475Smrg    VTFontNames default_font;
2554d522f475Smrg    char *geo_metry;
2555d522f475Smrg    char *T_geometry;
2556d522f475Smrg#if OPT_WIDE_CHARS
2557d522f475Smrg    Boolean cjk_width;		/* true for built-in CJK wcwidth() */
2558d522f475Smrg    Boolean mk_width;		/* true for simpler built-in wcwidth() */
2559d522f475Smrg    int mk_samplesize;
2560d522f475Smrg    int mk_samplepass;
2561d522f475Smrg#endif
2562d522f475Smrg#if OPT_LUIT_PROG
2563d522f475Smrg    Boolean callfilter;		/* true to invoke luit */
2564d522f475Smrg    Boolean use_encoding;	/* true to use -encoding option for luit */
2565d522f475Smrg    char *locale_str;		/* "locale" resource */
2566d522f475Smrg    char *localefilter;		/* path for luit */
2567d522f475Smrg#endif
2568b7c89284Ssnj    fontWarningTypes fontWarnings;
2569d522f475Smrg    int limit_resize;
2570d522f475Smrg#ifdef ALLOWLOGGING
2571d522f475Smrg    Boolean log_on;
2572d522f475Smrg#endif
2573d522f475Smrg    Boolean login_shell;
25743367019cSmrg    Boolean palette_changed;
2575d522f475Smrg    Boolean re_verse;
2576d522f475Smrg    Boolean re_verse0;		/* initial value of "-rv" */
2577d522f475Smrg    XtGravity resizeGravity;
2578d522f475Smrg    Boolean reverseWrap;
2579d522f475Smrg    Boolean autoWrap;
2580d522f475Smrg    Boolean logInhibit;
2581d522f475Smrg    Boolean signalInhibit;
2582d522f475Smrg#if OPT_TEK4014
2583d522f475Smrg    Boolean tekInhibit;
2584d522f475Smrg    Boolean tekSmall;		/* start tek window in small size */
2585d522f475Smrg    Boolean TekEmu;		/* true if Tektronix emulation	*/
2586d522f475Smrg    Boolean Tshow;		/* Tek window showing		*/
2587d522f475Smrg#endif
2588d522f475Smrg    Boolean scrollbar;
2589d522f475Smrg#ifdef SCROLLBAR_RIGHT
2590d522f475Smrg    Boolean useRight;
2591d522f475Smrg#endif
2592d522f475Smrg    Boolean titeInhibit;
25933367019cSmrg    Boolean tiXtraScroll;	/* scroll on ti/te */
25943367019cSmrg    Boolean cdXtraScroll;	/* scroll on cd (clear-display) */
2595d522f475Smrg    Boolean appcursorDefault;
2596d522f475Smrg    Boolean appkeypadDefault;
2597d522f475Smrg#if OPT_INPUT_METHOD
2598b7c89284Ssnj    char* f_x;			/* font for XIM */
2599d522f475Smrg    char* input_method;
2600d522f475Smrg    char* preedit_type;
2601b7c89284Ssnj    Boolean open_im;		/* true if input-method is opened */
2602d522f475Smrg    Boolean cannot_im;		/* true if we cannot use input-method */
2603b7c89284Ssnj    int retry_im;
26043367019cSmrg    XFontSet xim_fs;		/* fontset for XIM preedit */
26053367019cSmrg    int xim_fs_ascent;		/* ascent of fs */
26063367019cSmrg    TInput inputs[NINPUTWIDGETS];
2607d522f475Smrg#endif
2608d522f475Smrg    Boolean dynamicColors;
2609d522f475Smrg#ifndef NO_ACTIVE_ICON
26103367019cSmrg    char *active_icon_s;	/* use application icon window  */
2611d522f475Smrg    unsigned icon_border_width;
2612d522f475Smrg    Pixel icon_border_pixel;
2613d522f475Smrg#endif /* NO_ACTIVE_ICON */
2614d522f475Smrg#if OPT_DEC_SOFTFONT
2615d522f475Smrg    Boolean font_loadable;
2616d522f475Smrg#endif
2617d522f475Smrg#if OPT_SHIFT_FONTS
2618d522f475Smrg    Boolean shift_fonts;	/* true if we interpret fontsize-shifting */
2619d522f475Smrg#endif
2620d522f475Smrg#if OPT_SUNPC_KBD
2621d522f475Smrg    int ctrl_fkeys;		/* amount to add to XK_F1 for ctrl modifier */
2622d522f475Smrg#endif
2623d522f475Smrg#if OPT_NUM_LOCK
2624d522f475Smrg    Boolean real_NumLock;	/* true if we treat NumLock key specially */
2625d522f475Smrg    Boolean alwaysUseMods;	/* true if we always want f-key modifiers */
2626d522f475Smrg#endif
2627d522f475Smrg#if OPT_RENDERFONT
2628d522f475Smrg    char *face_name;
2629d522f475Smrg    char *face_wide_name;
2630d522f475Smrg    float face_size[NMENUFONTS];
2631cd3331d0Smrg    char *render_font_s;
2632d522f475Smrg#endif
2633d522f475Smrg} Misc;
2634d522f475Smrg
26353367019cSmrgtypedef struct _Work {
26363367019cSmrg    int dummy;
26379a64e1c5Smrg#ifdef SunXK_F36
26389a64e1c5Smrg#define MAX_UDK 37
26399a64e1c5Smrg#else
26409a64e1c5Smrg#define MAX_UDK 35
26419a64e1c5Smrg#endif
26429a64e1c5Smrg    struct {
26439a64e1c5Smrg	char *str;
26449a64e1c5Smrg	int len;
26459a64e1c5Smrg    } user_keys[MAX_UDK];
26463367019cSmrg#ifndef NO_ACTIVE_ICON
26473367019cSmrg    int active_icon;		/* use application icon window  */
26483367019cSmrg#endif /* NO_ACTIVE_ICON */
26493367019cSmrg#if OPT_MAXIMIZE
26503367019cSmrg#define MAX_EWMH_MODE 3
26513367019cSmrg#define MAX_EWMH_DATA (1 + OPT_TEK4014)
26523367019cSmrg    struct {
26533367019cSmrg	int mode;		/* fullscreen, etc.		*/
26543367019cSmrg	Boolean checked[MAX_EWMH_MODE];
26553367019cSmrg	Boolean allowed[MAX_EWMH_MODE];
26563367019cSmrg    } ewmh[MAX_EWMH_DATA];
26573367019cSmrg#endif
26583367019cSmrg#if OPT_NUM_LOCK
26593367019cSmrg    unsigned num_lock;		/* modifier for Num_Lock */
26603367019cSmrg    unsigned alt_mods;		/* modifier for Alt_L or Alt_R */
26613367019cSmrg    unsigned meta_mods;		/* modifier for Meta_L or Meta_R */
26623367019cSmrg#endif
26633367019cSmrg#if OPT_RENDERFONT
26643367019cSmrg    Boolean render_font;
26653367019cSmrg#endif
26669a64e1c5Smrg#if OPT_DABBREV
26679a64e1c5Smrg#define MAX_DABBREV	1024	/* maximum word length as in tcsh */
26689a64e1c5Smrg    char dabbrev_data[MAX_DABBREV];
26699a64e1c5Smrg#endif
26709a64e1c5Smrg    ScrnColors *oldColors;
26713367019cSmrg} Work;
26723367019cSmrg
2673d522f475Smrgtypedef struct {int foo;} XtermClassPart, TekClassPart;
2674d522f475Smrg
2675d522f475Smrgtypedef struct _XtermClassRec {
2676d522f475Smrg    CoreClassPart  core_class;
2677d522f475Smrg    XtermClassPart xterm_class;
2678d522f475Smrg} XtermClassRec;
2679d522f475Smrg
2680d522f475Smrgextern WidgetClass xtermWidgetClass;
2681d522f475Smrg
2682d522f475Smrg#define IsXtermWidget(w) (XtClass(w) == xtermWidgetClass)
2683d522f475Smrg
2684d522f475Smrg#if OPT_TEK4014
2685d522f475Smrgtypedef struct _TekClassRec {
2686d522f475Smrg    CoreClassPart core_class;
2687d522f475Smrg    TekClassPart tek_class;
2688d522f475Smrg} TekClassRec;
2689d522f475Smrg
2690d522f475Smrgextern WidgetClass tekWidgetClass;
2691d522f475Smrg
2692d522f475Smrg#define IsTekWidget(w) (XtClass(w) == tekWidgetClass)
2693d522f475Smrg
2694d522f475Smrg#endif
2695d522f475Smrg
2696d522f475Smrg/* define masks for keyboard.flags */
2697fa3f02f3Smrg#define MODE_KAM	xBIT(0)	/* mode 2: keyboard action mode */
2698d522f475Smrg#define MODE_DECKPAM	xBIT(1)	/* keypad application mode */
2699fa3f02f3Smrg#define MODE_DECCKM	xBIT(2)	/* private mode 1: cursor keys */
2700fa3f02f3Smrg#define MODE_SRM	xBIT(3)	/* mode 12: send-receive mode */
2701fa3f02f3Smrg#define MODE_DECBKM	xBIT(4)	/* private mode 67: backarrow */
2702fa3f02f3Smrg#define MODE_DECSDM	xBIT(5)	/* private mode 80: sixel scrolling mode */
2703d522f475Smrg
2704d522f475Smrg#define N_MARGINBELL	10
2705d522f475Smrg
2706d522f475Smrg#define TAB_BITS_SHIFT	5	/* FIXME: 2**5 == 32 (should derive) */
2707d522f475Smrg#define TAB_BITS_WIDTH	(1 << TAB_BITS_SHIFT)
2708d522f475Smrg#define TAB_ARRAY_SIZE	(1024 / TAB_BITS_WIDTH)
2709d522f475Smrg#define MAX_TABS	(TAB_BITS_WIDTH * TAB_ARRAY_SIZE)
2710d522f475Smrg
2711d522f475Smrgtypedef unsigned Tabs [TAB_ARRAY_SIZE];
2712d522f475Smrg
2713d522f475Smrgtypedef struct _XtermWidgetRec {
2714d522f475Smrg    CorePart	core;
2715d522f475Smrg    XSizeHints	hints;
2716fa3f02f3Smrg    XVisualInfo *visInfo;
2717fa3f02f3Smrg    int		numVisuals;
2718d522f475Smrg    Bool	init_menu;
2719d522f475Smrg    TKeyboard	keyboard;	/* terminal keyboard		*/
2720d522f475Smrg    TScreen	screen;		/* terminal screen		*/
27219a64e1c5Smrg    IFlags	flags;		/* mode flags			*/
2722d522f475Smrg    int		cur_foreground; /* current foreground color	*/
2723d522f475Smrg    int		cur_background; /* current background color	*/
2724d522f475Smrg    Pixel	dft_foreground; /* default foreground color	*/
2725d522f475Smrg    Pixel	dft_background; /* default background color	*/
2726712a7ff4Smrg    Pixel	old_foreground; /* original foreground color	*/
2727712a7ff4Smrg    Pixel	old_background; /* original background color	*/
2728d522f475Smrg#if OPT_ISO_COLORS
2729d522f475Smrg    int		sgr_foreground; /* current SGR foreground color */
2730d522f475Smrg    int		sgr_background; /* current SGR background color */
2731d522f475Smrg    Boolean	sgr_extended;	/* SGR set with extended codes? */
2732d522f475Smrg#endif
27339a64e1c5Smrg    IFlags	initflags;	/* initial mode flags		*/
2734d522f475Smrg    Tabs	tabs;		/* tabstops of the terminal	*/
2735d522f475Smrg    Misc	misc;		/* miscellaneous parameters	*/
27363367019cSmrg    Work	work;		/* workspace (no resources)	*/
2737d522f475Smrg} XtermWidgetRec, *XtermWidget;
2738d522f475Smrg
2739d522f475Smrg#if OPT_TEK4014
2740d522f475Smrgtypedef struct _TekWidgetRec {
2741d522f475Smrg    CorePart	core;
2742d522f475Smrg    TekPart	tek;		/* contains resources */
2743d522f475Smrg    TekScreen	screen;		/* contains working data (no resources) */
2744d522f475Smrg    Bool	init_menu;
2745d522f475Smrg    XSizeHints	hints;
2746d522f475Smrg} TekWidgetRec, *TekWidget;
2747d522f475Smrg#endif /* OPT_TEK4014 */
2748d522f475Smrg
2749d522f475Smrg/*
2750d522f475Smrg * terminal flags
2751d522f475Smrg * There are actually two namespaces mixed together here.
2752d522f475Smrg * One is the set of flags that can go in screen->visbuf attributes
2753d522f475Smrg * and which must fit in a char (see OFF_ATTRS).
2754d522f475Smrg * The other is the global setting stored in
2755d522f475Smrg * term->flags and screen->save_modes.  This need only fit in an unsigned.
2756d522f475Smrg */
2757d522f475Smrg
2758d522f475Smrg#define AttrBIT(n)	xBIT(n)		/* text-attributes */
2759d522f475Smrg#define MiscBIT(n)	xBIT(n + 16)	/* miscellaneous state flags */
2760d522f475Smrg
2761d522f475Smrg/* global flags and character flags (visible character attributes) */
2762d522f475Smrg#define INVERSE		AttrBIT(0)	/* invert the characters to be output */
2763d522f475Smrg#define UNDERLINE	AttrBIT(1)	/* true if underlining */
2764d522f475Smrg#define BOLD		AttrBIT(2)
2765d522f475Smrg#define BLINK		AttrBIT(3)
2766d522f475Smrg/* global flags (also character attributes) */
2767d522f475Smrg#define BG_COLOR	AttrBIT(4)	/* true if background set */
2768d522f475Smrg#define FG_COLOR	AttrBIT(5)	/* true if foreground set */
2769d522f475Smrg
2770d522f475Smrg/* character flags (internal attributes) */
2771d522f475Smrg#define PROTECTED	AttrBIT(6)	/* a character that cannot be erased */
2772d522f475Smrg#define CHARDRAWN	AttrBIT(7)	/* a character has been drawn here on
2773d522f475Smrg					   the screen.  Used to distinguish
2774d522f475Smrg					   blanks from empty parts of the
2775d522f475Smrg					   screen when selecting */
2776d522f475Smrg
27779a64e1c5Smrg#if OPT_WIDE_ATTRS
27789a64e1c5Smrg#define ATR_FAINT	AttrBIT(8)
27799a64e1c5Smrg#define ATR_ITALIC	AttrBIT(9)
27809a64e1c5Smrg#define ATR_STRIKEOUT	AttrBIT(10)
27819a64e1c5Smrg#define ATR_DBL_UNDER	AttrBIT(11)
27829a64e1c5Smrg#define SGR_MASK2       (ATR_FAINT | ATR_ITALIC | ATR_STRIKEOUT | ATR_DBL_UNDER)
27839a64e1c5Smrg#else
27849a64e1c5Smrg#define SGR_MASK2       0
27859a64e1c5Smrg#endif
2786d522f475Smrg
2787d522f475Smrg/*
2788d522f475Smrg * Other flags
2789d522f475Smrg */
2790d522f475Smrg#define WRAPAROUND	MiscBIT(0)	/* true if auto wraparound mode */
2791d522f475Smrg#define	REVERSEWRAP	MiscBIT(1)	/* true if reverse wraparound mode */
2792d522f475Smrg#define REVERSE_VIDEO	MiscBIT(2)	/* true if screen white on black */
2793d522f475Smrg#define LINEFEED	MiscBIT(3)	/* true if in auto linefeed mode */
2794d522f475Smrg#define ORIGIN		MiscBIT(4)	/* true if in origin mode */
2795d522f475Smrg#define INSERT		MiscBIT(5)	/* true if in insert mode */
2796d522f475Smrg#define SMOOTHSCROLL	MiscBIT(6)	/* true if in smooth scroll mode */
2797d522f475Smrg#define IN132COLUMNS	MiscBIT(7)	/* true if in 132 column mode */
2798d522f475Smrg#define INVISIBLE	MiscBIT(8)	/* true if writing invisible text */
2799d522f475Smrg#define NATIONAL        MiscBIT(9)	/* true if writing national charset */
28003367019cSmrg#define LEFT_RIGHT      MiscBIT(10)	/* true if left/right margin mode */
28013367019cSmrg#define NOCLEAR_COLM    MiscBIT(11)	/* true if no clear on DECCOLM change */
2802d522f475Smrg
28039a64e1c5Smrg#define DrawBIT(n)	xBIT(n + 8)	/* drawXtermText flags */
28049a64e1c5Smrg/* The following attributes are used in the argument of drawXtermText()  */
28059a64e1c5Smrg#define NOBACKGROUND	DrawBIT(0)	/* Used for overstrike */
28069a64e1c5Smrg#define NOTRANSLATION	DrawBIT(1)	/* No scan for chars missing in font */
28079a64e1c5Smrg#define DOUBLEWFONT	DrawBIT(2)	/* The actual X-font is double-width */
28089a64e1c5Smrg#define DOUBLEHFONT	DrawBIT(3)	/* The actual X-font is double-height */
28099a64e1c5Smrg#define CHARBYCHAR	DrawBIT(4)	/* Draw chars one-by-one */
28109a64e1c5Smrg
28119a64e1c5Smrg/* The following attribute is used in the argument of xtermSpecialFont etc */
28129a64e1c5Smrg#define NORESOLUTION	DrawBIT(5)	/* find the font without resolution */
28139a64e1c5Smrg
28149a64e1c5Smrg
2815d522f475Smrg/*
2816d522f475Smrg * Groups of attributes
2817d522f475Smrg */
2818d522f475Smrg			/* mask for video-attributes only */
2819d522f475Smrg#define SGR_MASK	(BOLD | BLINK | UNDERLINE | INVERSE)
2820d522f475Smrg
2821d522f475Smrg			/* mask: user-visible attributes */
28229a64e1c5Smrg#define	ATTRIBUTES	(SGR_MASK | SGR_MASK2 | BG_COLOR | FG_COLOR | INVISIBLE | PROTECTED)
2823d522f475Smrg
2824d522f475Smrg/* The toplevel-call to drawXtermText() should have text-attributes guarded: */
2825d522f475Smrg#define DRAWX_MASK	(ATTRIBUTES | CHARDRAWN)
2826d522f475Smrg
2827712a7ff4Smrg/*
2828712a7ff4Smrg * BOLDATTR is not only nonzero when we will use bold font, but uses the bits
2829712a7ff4Smrg * for BOLD/BLINK to match against the video attributes which were originally
2830712a7ff4Smrg * requested.
2831712a7ff4Smrg */
2832712a7ff4Smrg#define USE_BOLD(screen) ((screen)->allowBoldFonts)
2833712a7ff4Smrg
2834d522f475Smrg#if OPT_BLINK_TEXT
2835712a7ff4Smrg#define BOLDATTR(screen) (unsigned) (USE_BOLD(screen) ? (BOLD | ((screen)->blink_as_bold ? BLINK : 0)) : 0)
2836d522f475Smrg#else
2837712a7ff4Smrg#define BOLDATTR(screen) (unsigned) (USE_BOLD(screen) ? (BOLD | BLINK) : 0)
2838d522f475Smrg#endif
2839d522f475Smrg
2840d522f475Smrg/*
2841d522f475Smrg * Per-line flags
2842d522f475Smrg */
2843b7c89284Ssnj#define LINEWRAPPED	AttrBIT(0)
2844b7c89284Ssnj/* used once per line to indicate that it wraps onto the next line so we can
2845b7c89284Ssnj * tell the difference between lines that have wrapped around and lines that
2846b7c89284Ssnj * have ended naturally with a CR at column max_col.
2847b7c89284Ssnj */
2848b7c89284Ssnj#define LINEBLINKED	AttrBIT(1)
2849b7c89284Ssnj/* set when the line contains blinking text.
2850b7c89284Ssnj */
2851d522f475Smrg
2852d522f475Smrg#if OPT_ZICONBEEP || OPT_TOOLBAR
2853d522f475Smrg#define HANDLE_STRUCT_NOTIFY 1
2854d522f475Smrg#else
2855d522f475Smrg#define HANDLE_STRUCT_NOTIFY 0
2856d522f475Smrg#endif
2857d522f475Smrg
2858d522f475Smrg/*
2859d522f475Smrg * If we've set protected attributes with the DEC-style DECSCA, then we'll have
2860d522f475Smrg * to use DECSED or DECSEL to erase preserving protected text.  (The normal ED,
2861d522f475Smrg * EL won't preserve protected-text).  If we've used SPA, then normal ED and EL
2862d522f475Smrg * will preserve protected-text.  To keep things simple, just remember the last
2863d522f475Smrg * control that was used to begin protected-text, and use that to determine how
2864d522f475Smrg * erases are performed (otherwise we'd need 2 bits per protected character).
2865d522f475Smrg */
2866d522f475Smrg#define OFF_PROTECT 0
2867d522f475Smrg#define DEC_PROTECT 1
2868d522f475Smrg#define ISO_PROTECT 2
2869d522f475Smrg
2870d522f475Smrg#define TScreenOf(xw)	(&(xw)->screen)
2871d522f475Smrg#define TekScreenOf(tw) (&(tw)->screen)
2872d522f475Smrg
2873712a7ff4Smrg#define PrinterOf(screen) (screen)->printer_state
2874712a7ff4Smrg
2875d522f475Smrg#ifdef SCROLLBAR_RIGHT
2876d522f475Smrg#define OriginX(screen) (((term->misc.useRight)?0:ScrollbarWidth(screen)) + screen->border)
2877d522f475Smrg#else
2878d522f475Smrg#define OriginX(screen) (ScrollbarWidth(screen) + screen->border)
2879d522f475Smrg#endif
2880d522f475Smrg
2881d522f475Smrg#define OriginY(screen) (screen->border)
2882d522f475Smrg
2883d522f475Smrg#define CursorMoved(screen) \
2884d522f475Smrg		((screen)->cursor_moved || \
2885d522f475Smrg		    ((screen)->cursorp.col != (screen)->cur_col || \
2886d522f475Smrg		     (screen)->cursorp.row != (screen)->cur_row))
2887d522f475Smrg
28883367019cSmrg#define CursorX2(screen,col,fw) ((col) * (int)(fw) + OriginX(screen))
28893367019cSmrg#define CursorX(screen,col)     CursorX2(screen, col, FontWidth(screen))
28903367019cSmrg#define CursorY2(screen,row)    (((row) * FontHeight(screen)) + screen->border)
28913367019cSmrg#define CursorY(screen,row)     CursorY2(screen, INX2ROW(screen, row))
2892d522f475Smrg
2893d522f475Smrg/*
2894d522f475Smrg * These definitions depend on whether xterm supports active-icon.
2895d522f475Smrg */
2896d522f475Smrg#ifndef NO_ACTIVE_ICON
2897d522f475Smrg#define IsIconWin(screen,win)	((win) == &(screen)->iconVwin)
2898d522f475Smrg#define IsIcon(screen)		(WhichVWin(screen) == &(screen)->iconVwin)
2899d522f475Smrg#define WhichVWin(screen)	((screen)->whichVwin)
2900d522f475Smrg#define WhichTWin(screen)	((screen)->whichTwin)
2901d522f475Smrg
2902d522f475Smrg#define WhichVFont(screen,name)	(IsIcon(screen) ? (screen)->fnt_icon.fs \
2903d522f475Smrg						: (screen)->name)
2904d522f475Smrg#define FontAscent(screen)	(IsIcon(screen) ? (screen)->fnt_icon.fs->ascent \
2905d522f475Smrg						: WhichVWin(screen)->f_ascent)
2906d522f475Smrg#define FontDescent(screen)	(IsIcon(screen) ? (screen)->fnt_icon.fs->descent \
2907d522f475Smrg						: WhichVWin(screen)->f_descent)
2908d522f475Smrg#else /* NO_ACTIVE_ICON */
2909d522f475Smrg
2910d522f475Smrg#define IsIconWin(screen,win)	(False)
2911d522f475Smrg#define IsIcon(screen)		(False)
2912d522f475Smrg#define WhichVWin(screen)	(&((screen)->fullVwin))
2913d522f475Smrg#define WhichTWin(screen)	(&((screen)->fullTwin))
2914d522f475Smrg
2915d522f475Smrg#define WhichVFont(screen,name)	((screen)->name)
2916d522f475Smrg#define FontAscent(screen)	WhichVWin(screen)->f_ascent
2917d522f475Smrg#define FontDescent(screen)	WhichVWin(screen)->f_descent
2918d522f475Smrg
2919d522f475Smrg#endif /* NO_ACTIVE_ICON */
2920d522f475Smrg
2921d522f475Smrg#define okFont(font) ((font) != 0 && (font)->fid != 0)
2922d522f475Smrg
2923d522f475Smrg/*
2924d522f475Smrg * Macro to check if we are iconified; do not use render for that case.
2925d522f475Smrg */
29263367019cSmrg#define UsingRenderFont(xw)	(((xw)->work.render_font == True) && !IsIcon(TScreenOf(xw)))
2927d522f475Smrg
2928d522f475Smrg/*
2929d522f475Smrg * These definitions do not depend on whether xterm supports active-icon.
2930d522f475Smrg */
2931d522f475Smrg#define VWindow(screen)		WhichVWin(screen)->window
2932c219fbebSmrg#define VShellWindow(xw)	XtWindow(SHELL_OF(xw))
2933d522f475Smrg#define TWindow(screen)		WhichTWin(screen)->window
2934d522f475Smrg#define TShellWindow		XtWindow(SHELL_OF(tekWidget))
2935d522f475Smrg
29363367019cSmrg#if OPT_DOUBLE_BUFFER
29373367019cSmrg#define VDrawable(screen)	(((screen)->needSwap=1), WhichVWin(screen)->drawable)
29383367019cSmrg#else
29393367019cSmrg#define VDrawable(screen)	VWindow(screen)
29403367019cSmrg#endif
29413367019cSmrg
2942d522f475Smrg#define Width(screen)		WhichVWin(screen)->width
2943d522f475Smrg#define Height(screen)		WhichVWin(screen)->height
2944d522f475Smrg#define FullWidth(screen)	WhichVWin(screen)->fullwidth
2945d522f475Smrg#define FullHeight(screen)	WhichVWin(screen)->fullheight
2946d522f475Smrg#define FontWidth(screen)	WhichVWin(screen)->f_width
2947d522f475Smrg#define FontHeight(screen)	WhichVWin(screen)->f_height
2948d522f475Smrg
2949d522f475Smrg#define NormalFont(screen)	WhichVFont(screen, fnts[fNorm].fs)
2950d522f475Smrg#define BoldFont(screen)	WhichVFont(screen, fnts[fBold].fs)
2951d522f475Smrg
2952d522f475Smrg#if OPT_WIDE_CHARS
2953d522f475Smrg#define NormalWFont(screen)	WhichVFont(screen, fnts[fWide].fs)
2954d522f475Smrg#define BoldWFont(screen)	WhichVFont(screen, fnts[fWBold].fs)
2955d522f475Smrg#endif
2956d522f475Smrg
2957d522f475Smrg#define ScrollbarWidth(screen)	WhichVWin(screen)->sb_info.width
2958d522f475Smrg
2959d522f475Smrg#define NormalGC(w,sp)		getCgsGC(w, WhichVWin(sp), gcNorm)
2960d522f475Smrg#define ReverseGC(w,sp)		getCgsGC(w, WhichVWin(sp), gcNormReverse)
2961d522f475Smrg#define NormalBoldGC(w,sp)	getCgsGC(w, WhichVWin(sp), gcBold)
2962d522f475Smrg#define ReverseBoldGC(w,sp)	getCgsGC(w, WhichVWin(sp), gcBoldReverse)
2963d522f475Smrg
2964d522f475Smrg#define TWidth(screen)		WhichTWin(screen)->width
2965d522f475Smrg#define THeight(screen)		WhichTWin(screen)->height
2966d522f475Smrg#define TFullWidth(screen)	WhichTWin(screen)->fullwidth
2967d522f475Smrg#define TFullHeight(screen)	WhichTWin(screen)->fullheight
2968d522f475Smrg#define TekScale(screen)	WhichTWin(screen)->tekscale
2969d522f475Smrg
2970d522f475Smrg#define BorderWidth(w)		((w)->core.border_width)
2971d522f475Smrg#define BorderPixel(w)		((w)->core.border_pixel)
2972d522f475Smrg
2973cd3331d0Smrg#define AllowXtermOps(w,name)	(TScreenOf(w)->name && !TScreenOf(w)->allowSendEvents)
2974cd3331d0Smrg
2975cd3331d0Smrg#define AllowColorOps(w,name)	(AllowXtermOps(w, allowColorOps) || \
2976cd3331d0Smrg				 !TScreenOf(w)->disallow_color_ops[name])
2977cd3331d0Smrg
2978cd3331d0Smrg#define AllowFontOps(w,name)	(AllowXtermOps(w, allowFontOps) || \
2979cd3331d0Smrg				 !TScreenOf(w)->disallow_font_ops[name])
2980cd3331d0Smrg
2981cd3331d0Smrg#define AllowTcapOps(w,name)	(AllowXtermOps(w, allowTcapOps) || \
2982cd3331d0Smrg				 !TScreenOf(w)->disallow_tcap_ops[name])
2983cd3331d0Smrg
2984b7c89284Ssnj#define AllowTitleOps(w)	AllowXtermOps(w, allowTitleOps)
2985cd3331d0Smrg
29863367019cSmrg#define SpecialWindowOps(w,name) (!TScreenOf(w)->disallow_win_ops[name])
2987cd3331d0Smrg#define AllowWindowOps(w,name)	(AllowXtermOps(w, allowWindowOps) || \
29883367019cSmrg				 SpecialWindowOps(w,name))
2989b7c89284Ssnj
2990d522f475Smrg#if OPT_TOOLBAR
2991d522f475Smrg#define ToolbarHeight(w)	((resource.toolBar) \
2992c219fbebSmrg				 ? ((w)->VT100_TB_INFO(menu_height) \
2993c219fbebSmrg				  + (w)->VT100_TB_INFO(menu_border) * 2) \
2994d522f475Smrg				 : 0)
2995d522f475Smrg#else
2996d522f475Smrg#define ToolbarHeight(w) 0
2997d522f475Smrg#endif
2998d522f475Smrg
2999d522f475Smrg#if OPT_TEK4014
3000d522f475Smrg#define TEK_LINK_BLOCK_SIZE 1024
3001d522f475Smrg
3002d522f475Smrgtypedef struct Tek_Link
3003d522f475Smrg{
3004d522f475Smrg	struct Tek_Link	*next;	/* pointer to next TekLink in list
3005d522f475Smrg				   NULL <=> this is last TekLink */
3006d522f475Smrg	unsigned short fontsize;/* character size, 0-3 */
3007d522f475Smrg	unsigned short count;	/* number of chars in data */
3008d522f475Smrg	char *ptr;		/* current pointer into data */
3009d522f475Smrg	char data [TEK_LINK_BLOCK_SIZE];
3010d522f475Smrg} TekLink;
3011d522f475Smrg#endif /* OPT_TEK4014 */
3012d522f475Smrg
3013d522f475Smrg/* flags for cursors */
3014d522f475Smrg#define	OFF		0
3015d522f475Smrg#define	ON		1
3016d522f475Smrg#define	BLINKED_OFF	2
3017d522f475Smrg#define	CLEAR		0
3018d522f475Smrg#define	TOGGLE		1
3019d522f475Smrg
3020d522f475Smrg/* flags for inhibit */
3021d522f475Smrg#ifdef ALLOWLOGGING
3022d522f475Smrg#define	I_LOG		0x01
3023d522f475Smrg#endif
3024d522f475Smrg#define	I_SIGNAL	0x02
3025d522f475Smrg#define	I_TEK		0x04
3026d522f475Smrg
3027d522f475Smrg/***====================================================================***/
3028d522f475Smrg
3029d522f475Smrg#if OPT_TRACE
3030d522f475Smrg#undef NDEBUG			/* turn on assert's */
3031d522f475Smrg#else
3032d522f475Smrg#ifndef NDEBUG
3033d522f475Smrg#define NDEBUG			/* not debugging, don't do assert's */
3034d522f475Smrg#endif
3035d522f475Smrg#endif
3036d522f475Smrg
30370d92cbfdSchristos#include <trace.h>
30380d92cbfdSchristos
3039d522f475Smrg#ifndef TRACE
3040d522f475Smrg#define TRACE(p) /*nothing*/
3041d522f475Smrg#endif
3042d522f475Smrg
3043cd3331d0Smrg#ifndef TRACE_CLOSE
3044cd3331d0Smrg#define TRACE_CLOSE() /*nothing*/
3045cd3331d0Smrg#endif
3046cd3331d0Smrg
3047d522f475Smrg#ifndef TRACE_ARGV
3048d522f475Smrg#define TRACE_ARGV(tag,argv) /*nothing*/
3049d522f475Smrg#endif
3050d522f475Smrg
3051d522f475Smrg#ifndef TRACE_CHILD
3052d522f475Smrg#define TRACE_CHILD /*nothing*/
3053d522f475Smrg#endif
3054d522f475Smrg
3055cd3331d0Smrg#ifndef TRACE_FOCUS
3056cd3331d0Smrg#define TRACE_FOCUS(w,e) /*nothing*/
3057cd3331d0Smrg#endif
3058cd3331d0Smrg
3059d522f475Smrg#ifndef TRACE_HINTS
3060d522f475Smrg#define TRACE_HINTS(hints) /*nothing*/
3061d522f475Smrg#endif
3062d522f475Smrg
3063d522f475Smrg#ifndef TRACE_IDS
3064d522f475Smrg#define TRACE_IDS /*nothing*/
3065d522f475Smrg#endif
3066d522f475Smrg
3067d522f475Smrg#ifndef TRACE_OPTS
3068d522f475Smrg#define TRACE_OPTS(opts,ress,lens) /*nothing*/
3069d522f475Smrg#endif
3070d522f475Smrg
3071d522f475Smrg#ifndef TRACE_TRANS
3072d522f475Smrg#define TRACE_TRANS(name,w) /*nothing*/
3073d522f475Smrg#endif
3074d522f475Smrg
30753367019cSmrg#ifndef TRACE_WIN_ATTRS
30763367019cSmrg#define TRACE_WIN_ATTRS(w) /*nothing*/
30773367019cSmrg#endif
30783367019cSmrg
3079d522f475Smrg#ifndef TRACE_WM_HINTS
3080d522f475Smrg#define TRACE_WM_HINTS(w) /*nothing*/
3081d522f475Smrg#endif
3082d522f475Smrg
3083d522f475Smrg#ifndef TRACE_XRES
3084d522f475Smrg#define TRACE_XRES() /*nothing*/
3085d522f475Smrg#endif
3086d522f475Smrg
3087d522f475Smrg#ifndef TRACE2
3088d522f475Smrg#define TRACE2(p) /*nothing*/
3089d522f475Smrg#endif
3090d522f475Smrg
30913367019cSmrg#if OPT_TRACE && !defined(DEBUG)
30923367019cSmrg#define DEBUG 1
30933367019cSmrg#endif
30943367019cSmrg
30953367019cSmrg#ifdef DEBUG
30963367019cSmrg#define if_DEBUG(code) if(debug) code
30973367019cSmrg#else
30983367019cSmrg#define if_DEBUG(code) /*nothing*/
30993367019cSmrg#endif
31003367019cSmrg
31013367019cSmrg#define DEBUG_MSG(text) if_DEBUG({ IGNORE_RC(write(2, text, sizeof(text) - 1)); })
31023367019cSmrg
3103c219fbebSmrg/* *INDENT-ON* */
3104c219fbebSmrg
3105d522f475Smrg#endif /* included_ptyx_h */
3106