ptyx.h revision 0d92cbfd
10d92cbfdSchristos/* $XTermId: ptyx.h,v 1.536 2008/12/30 17:22:55 tom Exp $ */
2d522f475Smrg
3d522f475Smrg/*
4d522f475Smrg * Copyright 1999-2007,2008 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 */
63d522f475Smrg/* @(#)ptyx.h	X10/6.6	11/10/86 */
64d522f475Smrg
65d522f475Smrg#include <X11/IntrinsicP.h>
66d522f475Smrg#include <X11/Shell.h>		/* for XtNdieCallback, etc. */
67d522f475Smrg#include <X11/StringDefs.h>	/* for standard resource names */
68d522f475Smrg#include <X11/Xmu/Misc.h>	/* For Max() and Min(). */
69d522f475Smrg#include <X11/Xfuncs.h>
70d522f475Smrg#include <X11/Xosdefs.h>
71d522f475Smrg#include <X11/Xmu/Converters.h>
72d522f475Smrg#ifdef XRENDERFONT
73d522f475Smrg#include <X11/Xft/Xft.h>
74d522f475Smrg#endif
75d522f475Smrg
76d522f475Smrg/* adapted from IntrinsicI.h */
77d522f475Smrg#define MyStackAlloc(size, stack_cache_array)     \
78d522f475Smrg    ((size) <= sizeof(stack_cache_array)	  \
79d522f475Smrg    ?  (XtPointer)(stack_cache_array)		  \
80d522f475Smrg    :  (XtPointer)malloc((unsigned)(size)))
81d522f475Smrg
82d522f475Smrg#define MyStackFree(pointer, stack_cache_array) \
83d522f475Smrg    if ((pointer) != ((char *)(stack_cache_array))) free(pointer)
84d522f475Smrg
85d522f475Smrg/* adapted from vile (vi-like-emacs) */
86d522f475Smrg#define TypeCallocN(type,n)	(type *)calloc((n), sizeof(type))
87d522f475Smrg#define TypeCalloc(type)	TypeCalloc(type,1)
88d522f475Smrg
89d522f475Smrg#define TypeMallocN(type,n)	(type *)malloc(sizeof(type) * (n))
90d522f475Smrg#define TypeMalloc(type)	TypeMallocN(type,1)
91d522f475Smrg
92d522f475Smrg#define TypeRealloc(type,n,p)	(type *)realloc(p, (n) * sizeof(type))
93d522f475Smrg
94d522f475Smrg/* use these to allocate partly-structured data */
95d522f475Smrg#define CastMallocN(type,n)	(type *)malloc(sizeof(type) + (n))
96d522f475Smrg#define CastMalloc(type)	CastMallocN(type,0)
97d522f475Smrg
98d522f475Smrg/*
99d522f475Smrg** System V definitions
100d522f475Smrg*/
101d522f475Smrg
102d522f475Smrg#ifdef att
103d522f475Smrg#define ATT
104d522f475Smrg#endif
105d522f475Smrg
106d522f475Smrg#ifdef SVR4
107d522f475Smrg#undef  SYSV			/* predefined on Solaris 2.4 */
108d522f475Smrg#define SYSV			/* SVR4 is (approx) superset of SVR3 */
109d522f475Smrg#define ATT
110d522f475Smrg#endif
111d522f475Smrg
112d522f475Smrg#ifdef SYSV
113d522f475Smrg#ifdef X_NOT_POSIX
114d522f475Smrg#if !defined(CRAY) && !defined(SVR4)
115d522f475Smrg#define	dup2(fd1,fd2)	((fd1 == fd2) ? fd1 : \
116d522f475Smrg				(close(fd2), fcntl(fd1, F_DUPFD, fd2)))
117d522f475Smrg#endif
118d522f475Smrg#endif
119d522f475Smrg#endif /* SYSV */
120d522f475Smrg
121d522f475Smrg/*
122d522f475Smrg * Newer versions of <X11/Xft/Xft.h> have a version number.  We use certain
123d522f475Smrg * features from that.
124d522f475Smrg */
125d522f475Smrg#if defined(XRENDERFONT) && defined(XFT_VERSION) && XFT_VERSION >= 20100
126d522f475Smrg#define HAVE_TYPE_FCCHAR32	1	/* compatible: XftChar16 */
127d522f475Smrg#define HAVE_TYPE_XFTCHARSPEC	1	/* new type XftCharSpec */
128d522f475Smrg#endif
129d522f475Smrg
130d522f475Smrg/*
131d522f475Smrg** Definitions to simplify ifdef's for pty's.
132d522f475Smrg*/
133d522f475Smrg#define USE_PTY_DEVICE 1
134d522f475Smrg#define USE_PTY_SEARCH 1
135d522f475Smrg
136d522f475Smrg#if defined(__osf__) || (defined(linux) && defined(__GLIBC__) && (__GLIBC__ >= 2) && (__GLIBC_MINOR__ >= 1)) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__)
137d522f475Smrg#undef USE_PTY_DEVICE
138d522f475Smrg#undef USE_PTY_SEARCH
139d522f475Smrg#define USE_PTS_DEVICE 1
140d522f475Smrg#elif defined(VMS)
141d522f475Smrg#undef USE_PTY_DEVICE
142d522f475Smrg#undef USE_PTY_SEARCH
143d522f475Smrg#elif defined(PUCC_PTYD)
144d522f475Smrg#undef USE_PTY_SEARCH
145d522f475Smrg#elif (defined(sun) && defined(SVR4)) || defined(_ALL_SOURCE) || defined(__CYGWIN__)
146d522f475Smrg#undef USE_PTY_SEARCH
147d522f475Smrg#endif
148d522f475Smrg
149d522f475Smrg#if defined(SYSV) && defined(i386) && !defined(SVR4)
150d522f475Smrg#define ATT
151d522f475Smrg#define USE_HANDSHAKE 1
152d522f475Smrg#define USE_ISPTS_FLAG 1
153d522f475Smrg#endif
154d522f475Smrg
155d522f475Smrg#if (defined (__GLIBC__) && ((__GLIBC__ > 2) || (__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 1)))
156d522f475Smrg#define USE_USG_PTYS
157d522f475Smrg#define USE_HANDSHAKE 0	/* "recent" Linux systems do not require handshaking */
158d522f475Smrg#elif (defined(ATT) && !defined(__sgi)) || defined(__MVS__) || (defined(SYSV) && defined(i386))
159d522f475Smrg#define USE_USG_PTYS
160d522f475Smrg#else
161d522f475Smrg#define USE_HANDSHAKE 1
162d522f475Smrg#endif
163d522f475Smrg
164d522f475Smrg/*
165d522f475Smrg * More systems than not require pty-handshaking.
166d522f475Smrg */
167d522f475Smrg#ifndef USE_HANDSHAKE
168d522f475Smrg#define USE_HANDSHAKE 1
169d522f475Smrg#endif
170d522f475Smrg
171d522f475Smrg/*
172d522f475Smrg** allow for mobility of the pty master/slave directories
173d522f475Smrg*/
174d522f475Smrg#ifndef PTYDEV
175d522f475Smrg#if defined(__hpux)
176d522f475Smrg#define	PTYDEV		"/dev/ptym/ptyxx"
177d522f475Smrg#elif defined(__MVS__)
178d522f475Smrg#define	PTYDEV		"/dev/ptypxxxx"
179d522f475Smrg#else
180d522f475Smrg#define	PTYDEV		"/dev/ptyxx"
181d522f475Smrg#endif
182d522f475Smrg#endif	/* !PTYDEV */
183d522f475Smrg
184d522f475Smrg#ifndef TTYDEV
185d522f475Smrg#if defined(__hpux)
186d522f475Smrg#define TTYDEV		"/dev/pty/ttyxx"
187d522f475Smrg#elif defined(__MVS__)
188d522f475Smrg#define TTYDEV		"/dev/ptypxxxx"
189d522f475Smrg#elif defined(USE_PTS_DEVICE)
190d522f475Smrg#define TTYDEV		"/dev/pts/0"
191d522f475Smrg#else
192d522f475Smrg#define	TTYDEV		"/dev/ttyxx"
193d522f475Smrg#endif
194d522f475Smrg#endif	/* !TTYDEV */
195d522f475Smrg
196d522f475Smrg#ifndef PTYCHAR1
197d522f475Smrg#ifdef __hpux
198d522f475Smrg#define PTYCHAR1	"zyxwvutsrqp"
199d522f475Smrg#else	/* !__hpux */
200d522f475Smrg#ifdef __UNIXOS2__
201d522f475Smrg#define PTYCHAR1	"pq"
202d522f475Smrg#else
203d522f475Smrg#define	PTYCHAR1	"pqrstuvwxyzPQRSTUVWXYZ"
204d522f475Smrg#endif  /* !__UNIXOS2__ */
205d522f475Smrg#endif	/* !__hpux */
206d522f475Smrg#endif	/* !PTYCHAR1 */
207d522f475Smrg
208d522f475Smrg#ifndef PTYCHAR2
209d522f475Smrg#ifdef __hpux
210d522f475Smrg#define	PTYCHAR2	"fedcba9876543210"
211d522f475Smrg#else	/* !__hpux */
212d522f475Smrg#if defined(__DragonFly__) || defined(__FreeBSD__)
213d522f475Smrg#define	PTYCHAR2	"0123456789abcdefghijklmnopqrstuv"
214d522f475Smrg#else /* !__FreeBSD__ */
215d522f475Smrg#define	PTYCHAR2	"0123456789abcdef"
216d522f475Smrg#endif /* !__FreeBSD__ */
217d522f475Smrg#endif	/* !__hpux */
218d522f475Smrg#endif	/* !PTYCHAR2 */
219d522f475Smrg
220d522f475Smrg#ifndef TTYFORMAT
221d522f475Smrg#if defined(CRAY)
222d522f475Smrg#define TTYFORMAT "/dev/ttyp%03d"
223d522f475Smrg#elif defined(__MVS__)
224d522f475Smrg#define TTYFORMAT "/dev/ttyp%04d"
225d522f475Smrg#else
226d522f475Smrg#define TTYFORMAT "/dev/ttyp%d"
227d522f475Smrg#endif
228d522f475Smrg#endif /* TTYFORMAT */
229d522f475Smrg
230d522f475Smrg#ifndef PTYFORMAT
231d522f475Smrg#ifdef CRAY
232d522f475Smrg#define PTYFORMAT "/dev/pty/%03d"
233d522f475Smrg#elif defined(__MVS__)
234d522f475Smrg#define PTYFORMAT "/dev/ptyp%04d"
235d522f475Smrg#else
236d522f475Smrg#define PTYFORMAT "/dev/ptyp%d"
237d522f475Smrg#endif
238d522f475Smrg#endif /* PTYFORMAT */
239d522f475Smrg
240d522f475Smrg#ifndef PTYCHARLEN
241d522f475Smrg#ifdef CRAY
242d522f475Smrg#define PTYCHARLEN 3
243d522f475Smrg#elif defined(__MVS__)
244d522f475Smrg#define PTYCHARLEN 8     /* OS/390 stores, e.g. ut_id="ttyp1234"  */
245d522f475Smrg#else
246d522f475Smrg#define PTYCHARLEN 2
247d522f475Smrg#endif
248d522f475Smrg#endif
249d522f475Smrg
250d522f475Smrg#ifndef MAXPTTYS
251d522f475Smrg#ifdef CRAY
252d522f475Smrg#define MAXPTTYS 256
253d522f475Smrg#else
254d522f475Smrg#define MAXPTTYS 2048
255d522f475Smrg#endif
256d522f475Smrg#endif
257d522f475Smrg
258d522f475Smrg/* Until the translation manager comes along, I have to do my own translation of
259d522f475Smrg * mouse events into the proper routines. */
260d522f475Smrg
261d522f475Smrgtypedef enum {
262d522f475Smrg    NORMAL = 0
263d522f475Smrg    , LEFTEXTENSION
264d522f475Smrg    , RIGHTEXTENSION
265d522f475Smrg} EventMode;
266d522f475Smrg
267d522f475Smrg/*
268d522f475Smrg * The origin of a screen is 0, 0.  Therefore, the number of rows
269d522f475Smrg * on a screen is screen->max_row + 1, and similarly for columns.
270d522f475Smrg */
271d522f475Smrg#define MaxCols(screen)		((screen)->max_col + 1)
272d522f475Smrg#define MaxRows(screen)		((screen)->max_row + 1)
273d522f475Smrg
274d522f475Smrgtypedef unsigned char Char;		/* to support 8 bit chars */
275d522f475Smrgtypedef Char *ScrnPtr;
276d522f475Smrgtypedef ScrnPtr *ScrnBuf;
277d522f475Smrg
278d522f475Smrg#define CharOf(n) ((unsigned char)(n))
279d522f475Smrg
280d522f475Smrgtypedef struct {
281d522f475Smrg    int row;
282d522f475Smrg    int col;
283d522f475Smrg} CELL;
284d522f475Smrg
285d522f475Smrg#define isSameRow(a,b)		((a)->row == (b)->row)
286d522f475Smrg#define isSameCol(a,b)		((a)->col == (b)->col)
287d522f475Smrg#define isSameCELL(a,b)		(isSameRow(a,b) && isSameCol(a,b))
288d522f475Smrg
289d522f475Smrg#define xBIT(n)         (1 << (n))
290d522f475Smrg
291d522f475Smrg/*
292d522f475Smrg * ANSI emulation, special character codes
293d522f475Smrg */
294d522f475Smrg#define ANSI_BEL	0x07
295d522f475Smrg#define	ANSI_FF		0x0C		/* C0, C1 control names		*/
296d522f475Smrg#define	ANSI_NAK	0x15
297d522f475Smrg#define	ANSI_CAN	0x18
298d522f475Smrg#define	ANSI_ESC	0x1B
299d522f475Smrg#define	ANSI_SPA	0x20
300d522f475Smrg#define XTERM_POUND	0x1E		/* internal mapping for '#'	*/
301d522f475Smrg#define	ANSI_DEL	0x7F
302d522f475Smrg#define	ANSI_SS2	0x8E
303d522f475Smrg#define	ANSI_SS3	0x8F
304d522f475Smrg#define	ANSI_DCS	0x90
305d522f475Smrg#define	ANSI_SOS	0x98
306d522f475Smrg#define	ANSI_CSI	0x9B
307d522f475Smrg#define	ANSI_ST		0x9C
308d522f475Smrg#define	ANSI_OSC	0x9D
309d522f475Smrg#define	ANSI_PM		0x9E
310d522f475Smrg#define	ANSI_APC	0x9F
311d522f475Smrg
312d522f475Smrg#define MIN_DECID  52			/* can emulate VT52 */
313d522f475Smrg#define MAX_DECID 420			/* ...through VT420 */
314d522f475Smrg
315d522f475Smrg#ifndef DFT_DECID
316d522f475Smrg#define DFT_DECID "vt100"		/* default VT100 */
317d522f475Smrg#endif
318d522f475Smrg
319d522f475Smrg#ifndef DFT_KBD_DIALECT
320d522f475Smrg#define DFT_KBD_DIALECT "B"		/* default USASCII */
321d522f475Smrg#endif
322d522f475Smrg
323d522f475Smrg/* constants used for utf8 mode */
324d522f475Smrg#define UCS_REPL	0xfffd
325d522f475Smrg#define UCS_LIMIT	0x80000000U	/* both limit and flag for non-UCS */
326d522f475Smrg
327d522f475Smrg#define TERMCAP_SIZE 1500		/* 1023 is standard; 'screen' exceeds */
328d522f475Smrg
329d522f475Smrg#define NMENUFONTS 9			/* font entries in fontMenu */
330d522f475Smrg
331d522f475Smrg#define	NBOX	5			/* Number of Points in box	*/
332d522f475Smrg#define	NPARAM	30			/* Max. parameters		*/
333d522f475Smrg
334d522f475Smrgtypedef struct {
335d522f475Smrg	char *opt;
336d522f475Smrg	char *desc;
337d522f475Smrg} OptionHelp;
338d522f475Smrg
3390d92cbfdSchristostypedef short ParmType;
3400d92cbfdSchristos
341d522f475Smrgtypedef struct {
3420d92cbfdSchristos	Char		a_type;		/* CSI, etc., see unparseq()	*/
3430d92cbfdSchristos	Char		a_pintro;	/* private-mode char, if any	*/
3440d92cbfdSchristos	Char		a_inters;	/* special (before final-char)	*/
3450d92cbfdSchristos	Char		a_final;	/* final-char			*/
3460d92cbfdSchristos	ParmType	a_nparam;	/* # of parameters		*/
3470d92cbfdSchristos	ParmType	a_param[NPARAM]; /* Parameters			*/
348d522f475Smrg} ANSI;
349d522f475Smrg
350d522f475Smrg#define TEK_FONT_LARGE 0
351d522f475Smrg#define TEK_FONT_2 1
352d522f475Smrg#define TEK_FONT_3 2
353d522f475Smrg#define TEK_FONT_SMALL 3
354d522f475Smrg#define	TEKNUMFONTS 4
355d522f475Smrg
356d522f475Smrg/* Actually there are 5 types of lines, but four are non-solid lines */
357d522f475Smrg#define	TEKNUMLINES	4
358d522f475Smrg
359d522f475Smrgtypedef struct {
360d522f475Smrg	int	x;
361d522f475Smrg	int	y;
362d522f475Smrg	int	fontsize;
363d522f475Smrg	unsigned linetype;
364d522f475Smrg} Tmodes;
365d522f475Smrg
366d522f475Smrgtypedef struct {
367d522f475Smrg	int Twidth;
368d522f475Smrg	int Theight;
369d522f475Smrg} T_fontsize;
370d522f475Smrg
371d522f475Smrgtypedef struct {
372d522f475Smrg	short *bits;
373d522f475Smrg	int x;
374d522f475Smrg	int y;
375d522f475Smrg	int width;
376d522f475Smrg	int height;
377d522f475Smrg} BitmapBits;
378d522f475Smrg
379d522f475Smrg#define	SAVELINES		64      /* default # lines to save      */
380d522f475Smrg#define SCROLLLINES 1			/* default # lines to scroll    */
381d522f475Smrg
382d522f475Smrg#define EXCHANGE(a,b,tmp) tmp = a; a = b; b = tmp
383d522f475Smrg
384d522f475Smrg/***====================================================================***/
385d522f475Smrg
386d522f475Smrg#if (XtSpecificationRelease < 6)
387d522f475Smrg#ifndef NO_ACTIVE_ICON
388d522f475Smrg#define NO_ACTIVE_ICON 1 /* Note: code relies on an X11R6 function */
389d522f475Smrg#endif
390d522f475Smrg#endif
391d522f475Smrg
392d522f475Smrg#ifndef OPT_AIX_COLORS
393d522f475Smrg#define OPT_AIX_COLORS  1 /* true if xterm is configured with AIX (16) colors */
394d522f475Smrg#endif
395d522f475Smrg
396d522f475Smrg#ifndef OPT_BLINK_CURS
397d522f475Smrg#define OPT_BLINK_CURS  1 /* true if xterm has blinking cursor capability */
398d522f475Smrg#endif
399d522f475Smrg
400d522f475Smrg#ifndef OPT_BLINK_TEXT
401d522f475Smrg#define OPT_BLINK_TEXT  OPT_BLINK_CURS /* true if xterm has blinking text capability */
402d522f475Smrg#endif
403d522f475Smrg
404d522f475Smrg#ifndef OPT_BOX_CHARS
405d522f475Smrg#define OPT_BOX_CHARS	1 /* true if xterm can simulate box-characters */
406d522f475Smrg#endif
407d522f475Smrg
408d522f475Smrg#ifndef OPT_BROKEN_OSC
409d522f475Smrg#ifdef linux
410d522f475Smrg#define OPT_BROKEN_OSC	1 /* man console_codes, 1st paragraph - cf: ECMA-48 */
411d522f475Smrg#else
412d522f475Smrg#define OPT_BROKEN_OSC	0 /* true if xterm allows Linux's broken OSC parsing */
413d522f475Smrg#endif
414d522f475Smrg#endif
415d522f475Smrg
416d522f475Smrg#ifndef OPT_BROKEN_ST
417d522f475Smrg#define OPT_BROKEN_ST	1 /* true if xterm allows old/broken OSC parsing */
418d522f475Smrg#endif
419d522f475Smrg
420d522f475Smrg#ifndef OPT_C1_PRINT
421d522f475Smrg#define OPT_C1_PRINT	1 /* true if xterm allows C1 controls to be printable */
422d522f475Smrg#endif
423d522f475Smrg
424d522f475Smrg#ifndef OPT_CLIP_BOLD
425d522f475Smrg#define OPT_CLIP_BOLD	1 /* true if xterm uses clipping to avoid bold-trash */
426d522f475Smrg#endif
427d522f475Smrg
428d522f475Smrg#ifndef OPT_COLOR_CLASS
429d522f475Smrg#define OPT_COLOR_CLASS 1 /* true if xterm uses separate color-resource classes */
430d522f475Smrg#endif
431d522f475Smrg
432d522f475Smrg#ifndef OPT_COLOR_RES
433d522f475Smrg#define OPT_COLOR_RES   1 /* true if xterm delays color-resource evaluation */
434d522f475Smrg#undef  OPT_COLOR_RES2
435d522f475Smrg#endif
436d522f475Smrg
437d522f475Smrg#ifndef OPT_COLOR_RES2
438d522f475Smrg#define OPT_COLOR_RES2 OPT_COLOR_RES /* true to avoid using extra resources */
439d522f475Smrg#endif
440d522f475Smrg
441d522f475Smrg#ifndef OPT_DABBREV
442d522f475Smrg#define OPT_DABBREV 0	/* dynamic abbreviations */
443d522f475Smrg#endif
444d522f475Smrg
445d522f475Smrg#ifndef OPT_DEC_CHRSET
446d522f475Smrg#define OPT_DEC_CHRSET  1 /* true if xterm is configured for DEC charset */
447d522f475Smrg#endif
448d522f475Smrg
449d522f475Smrg#ifndef OPT_DEC_LOCATOR
450d522f475Smrg#define	OPT_DEC_LOCATOR 0 /* true if xterm supports VT220-style mouse events */
451d522f475Smrg#endif
452d522f475Smrg
453d522f475Smrg#ifndef OPT_DEC_RECTOPS
454d522f475Smrg#define OPT_DEC_RECTOPS 0 /* true if xterm is configured for VT420 rectangles */
455d522f475Smrg#endif
456d522f475Smrg
457d522f475Smrg#ifndef OPT_DEC_SOFTFONT
458d522f475Smrg#define OPT_DEC_SOFTFONT 0 /* true if xterm is configured for VT220 softfonts */
459d522f475Smrg#endif
460d522f475Smrg
461d522f475Smrg#ifndef OPT_EBCDIC
462d522f475Smrg#ifdef __MVS__
463d522f475Smrg#define OPT_EBCDIC 1
464d522f475Smrg#else
465d522f475Smrg#define OPT_EBCDIC 0
466d522f475Smrg#endif
467d522f475Smrg#endif
468d522f475Smrg
469d522f475Smrg#ifndef OPT_EXEC_XTERM
470d522f475Smrg#define OPT_EXEC_XTERM 0 /* true if xterm can fork/exec copies of itself */
471d522f475Smrg#endif
472d522f475Smrg
473d522f475Smrg#ifndef OPT_EXTRA_PASTE
474d522f475Smrg#define OPT_EXTRA_PASTE 1
475d522f475Smrg#endif
476d522f475Smrg
477d522f475Smrg#ifndef OPT_FOCUS_EVENT
478d522f475Smrg#define OPT_FOCUS_EVENT	1 /* focus in/out events */
479d522f475Smrg#endif
480d522f475Smrg
481d522f475Smrg#ifndef OPT_HP_FUNC_KEYS
482d522f475Smrg#define OPT_HP_FUNC_KEYS 0 /* true if xterm supports HP-style function keys */
483d522f475Smrg#endif
484d522f475Smrg
485d522f475Smrg#ifndef OPT_I18N_SUPPORT
486d522f475Smrg#if (XtSpecificationRelease >= 5)
487d522f475Smrg#define OPT_I18N_SUPPORT 1 /* true if xterm uses internationalization support */
488d522f475Smrg#else
489d522f475Smrg#define OPT_I18N_SUPPORT 0
490d522f475Smrg#endif
491d522f475Smrg#endif
492d522f475Smrg
493d522f475Smrg#ifndef OPT_INITIAL_ERASE
494d522f475Smrg#define OPT_INITIAL_ERASE 1 /* use pty's erase character if it's not 128 */
495d522f475Smrg#endif
496d522f475Smrg
497d522f475Smrg#ifndef OPT_INPUT_METHOD
498d522f475Smrg#if (XtSpecificationRelease >= 6)
499d522f475Smrg#define OPT_INPUT_METHOD 1 /* true if xterm uses input-method support */
500d522f475Smrg#else
501d522f475Smrg#define OPT_INPUT_METHOD 0
502d522f475Smrg#endif
503d522f475Smrg#endif
504d522f475Smrg
505d522f475Smrg#ifndef OPT_ISO_COLORS
506d522f475Smrg#define OPT_ISO_COLORS  1 /* true if xterm is configured with ISO colors */
507d522f475Smrg#endif
508d522f475Smrg
509d522f475Smrg#ifndef OPT_256_COLORS
510d522f475Smrg#define OPT_256_COLORS  0 /* true if xterm is configured with 256 colors */
511d522f475Smrg#endif
512d522f475Smrg
513d522f475Smrg#ifndef OPT_88_COLORS
514d522f475Smrg#define OPT_88_COLORS	0 /* true if xterm is configured with 88 colors */
515d522f475Smrg#endif
516d522f475Smrg
517d522f475Smrg#ifndef OPT_HIGHLIGHT_COLOR
518d522f475Smrg#define OPT_HIGHLIGHT_COLOR 1 /* true if xterm supports color highlighting */
519d522f475Smrg#endif
520d522f475Smrg
521d522f475Smrg#ifndef OPT_LOAD_VTFONTS
522d522f475Smrg#define OPT_LOAD_VTFONTS 0 /* true if xterm has load-vt-fonts() action */
523d522f475Smrg#endif
524d522f475Smrg
525d522f475Smrg#ifndef OPT_LUIT_PROG
526d522f475Smrg#define OPT_LUIT_PROG   0 /* true if xterm supports luit */
527d522f475Smrg#endif
528d522f475Smrg
529d522f475Smrg#ifndef OPT_MAXIMIZE
530d522f475Smrg#define OPT_MAXIMIZE	1 /* add actions for iconify ... maximize */
531d522f475Smrg#endif
532d522f475Smrg
533d522f475Smrg#ifndef OPT_MINI_LUIT
534d522f475Smrg#define OPT_MINI_LUIT   0 /* true if xterm supports built-in mini-luit */
535d522f475Smrg#endif
536d522f475Smrg
537d522f475Smrg#ifndef OPT_MOD_FKEYS
538d522f475Smrg#define OPT_MOD_FKEYS	1 /* modify cursor- and function-keys in normal mode */
539d522f475Smrg#endif
540d522f475Smrg
541d522f475Smrg#ifndef OPT_NUM_LOCK
542d522f475Smrg#define OPT_NUM_LOCK	1 /* use NumLock key only for numeric-keypad */
543d522f475Smrg#endif
544d522f475Smrg
545d522f475Smrg#ifndef OPT_PASTE64
546d522f475Smrg#define OPT_PASTE64	0 /* program control of select/paste via base64 */
547d522f475Smrg#endif
548d522f475Smrg
549d522f475Smrg#ifndef OPT_PC_COLORS
550d522f475Smrg#define OPT_PC_COLORS   1 /* true if xterm supports PC-style (bold) colors */
551d522f475Smrg#endif
552d522f475Smrg
553d522f475Smrg#ifndef OPT_PTY_HANDSHAKE
554d522f475Smrg#define OPT_PTY_HANDSHAKE USE_HANDSHAKE	/* avoid pty races on older systems */
555d522f475Smrg#endif
556d522f475Smrg
557d522f475Smrg#ifndef OPT_PRINT_COLORS
558d522f475Smrg#define OPT_PRINT_COLORS 1 /* true if we print color information */
559d522f475Smrg#endif
560d522f475Smrg
561d522f475Smrg#ifndef OPT_READLINE
562d522f475Smrg#define OPT_READLINE	0 /* mouse-click/paste support for readline */
563d522f475Smrg#endif
564d522f475Smrg
565d522f475Smrg#ifndef OPT_RENDERFONT
566d522f475Smrg#ifdef XRENDERFONT
567d522f475Smrg#define OPT_RENDERFONT 1
568d522f475Smrg#else
569d522f475Smrg#define OPT_RENDERFONT 0
570d522f475Smrg#endif
571d522f475Smrg#endif
572d522f475Smrg
573d522f475Smrg#ifndef OPT_RENDERWIDE
574d522f475Smrg#if OPT_RENDERFONT && OPT_WIDE_CHARS && defined(HAVE_TYPE_XFTCHARSPEC)
575d522f475Smrg#define OPT_RENDERWIDE 1
576d522f475Smrg#else
577d522f475Smrg#define OPT_RENDERWIDE 0
578d522f475Smrg#endif
579d522f475Smrg#endif
580d522f475Smrg
581d522f475Smrg#ifndef OPT_SAME_NAME
582d522f475Smrg#define OPT_SAME_NAME   1 /* suppress redundant updates of title, icon, etc. */
583d522f475Smrg#endif
584d522f475Smrg
585d522f475Smrg#ifndef OPT_SCO_FUNC_KEYS
586d522f475Smrg#define OPT_SCO_FUNC_KEYS 0 /* true if xterm supports SCO-style function keys */
587d522f475Smrg#endif
588d522f475Smrg
589d522f475Smrg#ifndef OPT_SUN_FUNC_KEYS
590d522f475Smrg#define OPT_SUN_FUNC_KEYS 1 /* true if xterm supports Sun-style function keys */
591d522f475Smrg#endif
592d522f475Smrg
593d522f475Smrg#ifndef OPT_SELECT_REGEX
594d522f475Smrg#define OPT_SELECT_REGEX 0 /* true if xterm supports regular-expression selects */
595d522f475Smrg#endif
596d522f475Smrg
597d522f475Smrg#ifndef OPT_SESSION_MGT
598d522f475Smrg#if defined(XtNdieCallback) && defined(XtNsaveCallback)
599d522f475Smrg#define OPT_SESSION_MGT 1
600d522f475Smrg#else
601d522f475Smrg#define OPT_SESSION_MGT 0
602d522f475Smrg#endif
603d522f475Smrg#endif
604d522f475Smrg
605d522f475Smrg#ifndef OPT_SHIFT_FONTS
606781b53c7Schristos#define OPT_SHIFT_FONTS 0 /* true if xterm interprets fontsize-shifting */
607d522f475Smrg#endif
608d522f475Smrg
609d522f475Smrg#ifndef OPT_SUNPC_KBD
610d522f475Smrg#define OPT_SUNPC_KBD	1 /* true if xterm supports Sun/PC keyboard map */
611d522f475Smrg#endif
612d522f475Smrg
613d522f475Smrg#ifndef OPT_TCAP_FKEYS
614d522f475Smrg#define OPT_TCAP_FKEYS	0 /* true for experimental termcap function-keys */
615d522f475Smrg#endif
616d522f475Smrg
617d522f475Smrg#ifndef OPT_TCAP_QUERY
618d522f475Smrg#define OPT_TCAP_QUERY	0 /* true for experimental termcap query */
619d522f475Smrg#endif
620d522f475Smrg
621d522f475Smrg#ifndef OPT_TEK4014
622d522f475Smrg#define OPT_TEK4014     1 /* true if we're using tek4014 emulation */
623d522f475Smrg#endif
624d522f475Smrg
625d522f475Smrg#ifndef OPT_TOOLBAR
626d522f475Smrg#define OPT_TOOLBAR	0 /* true if xterm supports toolbar menus */
627d522f475Smrg#endif
628d522f475Smrg
629d522f475Smrg#ifndef OPT_TRACE
630d522f475Smrg#define OPT_TRACE       0 /* true if we're using debugging traces */
631d522f475Smrg#endif
632d522f475Smrg
633d522f475Smrg#ifndef OPT_TRACE_FLAGS
634d522f475Smrg#define OPT_TRACE_FLAGS 0 /* additional tracing used for SCRN_BUF_FLAGS */
635d522f475Smrg#endif
636d522f475Smrg
637d522f475Smrg#ifndef OPT_VT52_MODE
638d522f475Smrg#define OPT_VT52_MODE   1 /* true if xterm supports VT52 emulation */
639d522f475Smrg#endif
640d522f475Smrg
641d522f475Smrg#ifndef OPT_WIDE_CHARS
642d522f475Smrg#define OPT_WIDE_CHARS  0 /* true if xterm supports 16-bit characters */
643d522f475Smrg#endif
644d522f475Smrg
645d522f475Smrg#ifndef OPT_XMC_GLITCH
646d522f475Smrg#define OPT_XMC_GLITCH	0 /* true if xterm supports xmc (magic cookie glitch) */
647d522f475Smrg#endif
648d522f475Smrg
649d522f475Smrg#ifndef OPT_ZICONBEEP
650d522f475Smrg#define OPT_ZICONBEEP   1 /* true if xterm supports "-ziconbeep" option */
651d522f475Smrg#endif
652d522f475Smrg
653d522f475Smrg/***====================================================================***/
654d522f475Smrg
655d522f475Smrg#if OPT_AIX_COLORS && !OPT_ISO_COLORS
656d522f475Smrg/* You must have ANSI/ISO colors to support AIX colors */
657d522f475Smrg#undef  OPT_AIX_COLORS
658d522f475Smrg#define OPT_AIX_COLORS 0
659d522f475Smrg#endif
660d522f475Smrg
661d522f475Smrg#if OPT_COLOR_RES && !OPT_ISO_COLORS
662d522f475Smrg/* You must have ANSI/ISO colors to support ColorRes logic */
663d522f475Smrg#undef  OPT_COLOR_RES
664d522f475Smrg#define OPT_COLOR_RES 0
665d522f475Smrg#endif
666d522f475Smrg
667d522f475Smrg#if OPT_COLOR_RES2 && !(OPT_256_COLORS || OPT_88_COLORS)
668d522f475Smrg/* You must have 88/256 colors to need fake-resource logic */
669d522f475Smrg#undef  OPT_COLOR_RES2
670d522f475Smrg#define OPT_COLOR_RES2 0
671d522f475Smrg#endif
672d522f475Smrg
673d522f475Smrg#if OPT_PASTE64 && !OPT_READLINE
674d522f475Smrg/* OPT_PASTE64 uses logic from OPT_READLINE */
675d522f475Smrg#undef  OPT_READLINE
676d522f475Smrg#define OPT_READLINE 1
677d522f475Smrg#endif
678d522f475Smrg
679d522f475Smrg#if OPT_PC_COLORS && !OPT_ISO_COLORS
680d522f475Smrg/* You must have ANSI/ISO colors to support PC colors */
681d522f475Smrg#undef  OPT_PC_COLORS
682d522f475Smrg#define OPT_PC_COLORS 0
683d522f475Smrg#endif
684d522f475Smrg
685d522f475Smrg#if OPT_PRINT_COLORS && !OPT_ISO_COLORS
686d522f475Smrg/* You must have ANSI/ISO colors to be able to print them */
687d522f475Smrg#undef  OPT_PRINT_COLORS
688d522f475Smrg#define OPT_PRINT_COLORS 0
689d522f475Smrg#endif
690d522f475Smrg
691d522f475Smrg#if OPT_256_COLORS && !OPT_ISO_COLORS
692d522f475Smrg/* You must have ANSI/ISO colors to support 256 colors */
693d522f475Smrg#undef  OPT_256_COLORS
694d522f475Smrg#define OPT_256_COLORS 0
695d522f475Smrg#endif
696d522f475Smrg
697d522f475Smrg#if OPT_88_COLORS && !OPT_ISO_COLORS
698d522f475Smrg/* You must have ANSI/ISO colors to support 88 colors */
699d522f475Smrg#undef  OPT_88_COLORS
700d522f475Smrg#define OPT_88_COLORS 0
701d522f475Smrg#endif
702d522f475Smrg
703d522f475Smrg#if OPT_88_COLORS && OPT_256_COLORS
704d522f475Smrg/* 256 colors supersedes 88 colors */
705d522f475Smrg#undef  OPT_88_COLORS
706d522f475Smrg#define OPT_88_COLORS 0
707d522f475Smrg#endif
708d522f475Smrg
709d522f475Smrg/***====================================================================***/
710d522f475Smrg
711d522f475Smrg/*
712d522f475Smrg * Indices for menu_font_names[][]
713d522f475Smrg */
714d522f475Smrgtypedef enum {
715d522f475Smrg    fNorm = 0			/* normal font */
716d522f475Smrg    , fBold			/* bold font */
717d522f475Smrg#if OPT_WIDE_CHARS
718d522f475Smrg    , fWide			/* double-width font */
719d522f475Smrg    , fWBold			/* double-width bold font */
720d522f475Smrg#endif
721d522f475Smrg    , fMAX
722d522f475Smrg} VTFontEnum;
723d522f475Smrg
724d522f475Smrg/*
725d522f475Smrg * Indices for cachedGCs.c (unrelated to VTFontEnum).
726d522f475Smrg */
727d522f475Smrgtypedef enum {
728d522f475Smrg    gcNorm = 0
729d522f475Smrg    , gcBold
730d522f475Smrg    , gcNormReverse
731d522f475Smrg    , gcBoldReverse
732d522f475Smrg#if OPT_BOX_CHARS
733d522f475Smrg    , gcLine
734d522f475Smrg    , gcDots
735d522f475Smrg#endif
736d522f475Smrg#if OPT_DEC_CHRSET
737d522f475Smrg    , gcCNorm
738d522f475Smrg    , gcCBold
739d522f475Smrg#endif
740d522f475Smrg#if OPT_WIDE_CHARS
741d522f475Smrg    , gcWide
742d522f475Smrg    , gcWBold
743d522f475Smrg    , gcWideReverse
744d522f475Smrg    , gcWBoldReverse
745d522f475Smrg#endif
746d522f475Smrg    , gcVTcursNormal
747d522f475Smrg    , gcVTcursFilled
748d522f475Smrg    , gcVTcursReverse
749d522f475Smrg    , gcVTcursOutline
750d522f475Smrg#if OPT_TEK4014
751d522f475Smrg    , gcTKcurs
752d522f475Smrg#endif
753d522f475Smrg    , gcMAX
754d522f475Smrg} CgsEnum;
755d522f475Smrg
756d522f475Smrg#define for_each_text_gc(n) for (n = gcNorm; n < gcVTcursNormal; ++n)
757d522f475Smrg#define for_each_curs_gc(n) for (n = gcVTcursNormal; n <= gcVTcursOutline; ++n)
758d522f475Smrg#define for_each_gc(n)      for (n = gcNorm; n < gcMAX; ++n)
759d522f475Smrg
760d522f475Smrg/* indices for the normal terminal colors in screen.Tcolors[] */
761d522f475Smrgtypedef enum {
762d522f475Smrg    TEXT_FG = 0			/* text foreground */
763d522f475Smrg    , TEXT_BG			/* text background */
764d522f475Smrg    , TEXT_CURSOR		/* text cursor */
765d522f475Smrg    , MOUSE_FG			/* mouse foreground */
766d522f475Smrg    , MOUSE_BG			/* mouse background */
767d522f475Smrg#if OPT_TEK4014
768d522f475Smrg    , TEK_FG			/* tektronix foreground */
769d522f475Smrg    , TEK_BG			/* tektronix background */
770d522f475Smrg    , TEK_CURSOR		/* tektronix cursor */
771d522f475Smrg#endif
772d522f475Smrg#if OPT_HIGHLIGHT_COLOR
773d522f475Smrg    , HIGHLIGHT_BG		/* highlight background */
774d522f475Smrg    , HIGHLIGHT_FG		/* highlight foreground */
775d522f475Smrg#endif
776d522f475Smrg    , NCOLORS			/* total number of colors */
777d522f475Smrg} TermColors;
778d522f475Smrg
779d522f475Smrg/* indices for mapping multiple clicks to selection types */
780d522f475Smrgtypedef enum {
781d522f475Smrg    Select_CHAR=0
782d522f475Smrg    ,Select_WORD
783d522f475Smrg    ,Select_LINE
784d522f475Smrg    ,Select_GROUP
785d522f475Smrg    ,Select_PAGE
786d522f475Smrg    ,Select_ALL
787d522f475Smrg#if OPT_SELECT_REGEX
788d522f475Smrg    ,Select_REGEX
789d522f475Smrg#endif
790d522f475Smrg    ,NSELECTUNITS
791d522f475Smrg} SelectUnit;
792d522f475Smrg
793d522f475Smrg#define	COLOR_DEFINED(s,w)	((s)->which & (1<<(w)))
794d522f475Smrg#define	COLOR_VALUE(s,w)	((s)->colors[w])
795d522f475Smrg#define	SET_COLOR_VALUE(s,w,v)	(((s)->colors[w] = (v)), ((s)->which |= (1<<(w))))
796d522f475Smrg
797d522f475Smrg#define	COLOR_NAME(s,w)		((s)->names[w])
798d522f475Smrg#define	SET_COLOR_NAME(s,w,v)	(((s)->names[w] = (v)), ((s)->which |= (1<<(w))))
799d522f475Smrg
800d522f475Smrg#define	UNDEFINE_COLOR(s,w)	((s)->which &= (~((w)<<1)))
801d522f475Smrg
802d522f475Smrg/***====================================================================***/
803d522f475Smrg
804d522f475Smrg#if OPT_ISO_COLORS
805d522f475Smrg#define if_OPT_ISO_COLORS(screen, code) if(screen->colorMode) code
806d522f475Smrg#define TERM_COLOR_FLAGS(xw)	((xw)->flags & (FG_COLOR|BG_COLOR))
807d522f475Smrg#define COLOR_0		0
808d522f475Smrg#define COLOR_1		1
809d522f475Smrg#define COLOR_2		2
810d522f475Smrg#define COLOR_3		3
811d522f475Smrg#define COLOR_4		4
812d522f475Smrg#define COLOR_5		5
813d522f475Smrg#define COLOR_6		6
814d522f475Smrg#define COLOR_7		7
815d522f475Smrg#define COLOR_8		8
816d522f475Smrg#define COLOR_9		9
817d522f475Smrg#define COLOR_10	10
818d522f475Smrg#define COLOR_11	11
819d522f475Smrg#define COLOR_12	12
820d522f475Smrg#define COLOR_13	13
821d522f475Smrg#define COLOR_14	14
822d522f475Smrg#define COLOR_15	15
823d522f475Smrg#define MIN_ANSI_COLORS 16
824d522f475Smrg
825d522f475Smrg#if OPT_256_COLORS
826d522f475Smrg# define NUM_ANSI_COLORS 256
827d522f475Smrg#elif OPT_88_COLORS
828d522f475Smrg# define NUM_ANSI_COLORS 88
829d522f475Smrg#else
830d522f475Smrg# define NUM_ANSI_COLORS MIN_ANSI_COLORS
831d522f475Smrg#endif
832d522f475Smrg
833d522f475Smrg#if NUM_ANSI_COLORS > MIN_ANSI_COLORS
834d522f475Smrg# define OPT_EXT_COLORS  1
835d522f475Smrg#else
836d522f475Smrg# define OPT_EXT_COLORS  0
837d522f475Smrg#endif
838d522f475Smrg
839d522f475Smrg#define COLOR_BD	(NUM_ANSI_COLORS)	/* BOLD */
840d522f475Smrg#define COLOR_UL	(NUM_ANSI_COLORS+1)	/* UNDERLINE */
841d522f475Smrg#define COLOR_BL	(NUM_ANSI_COLORS+2)	/* BLINK */
842d522f475Smrg#define COLOR_RV	(NUM_ANSI_COLORS+3)	/* REVERSE */
843d522f475Smrg#define MAXCOLORS	(NUM_ANSI_COLORS+4)
844d522f475Smrg#ifndef DFT_COLORMODE
845d522f475Smrg#define DFT_COLORMODE True	/* default colorMode resource */
846d522f475Smrg#endif
847d522f475Smrg
848d522f475Smrg#define ReverseOrHilite(screen,flags,hilite) \
849d522f475Smrg		(( screen->colorRVMode && hilite ) || \
850d522f475Smrg		    ( !screen->colorRVMode && \
851d522f475Smrg		      (( (flags & INVERSE) && !hilite) || \
852d522f475Smrg		       (!(flags & INVERSE) &&  hilite)) ))
853d522f475Smrg
854d522f475Smrg/* Define a fake XK code, we need it for the fake color response in
855d522f475Smrg * xtermcapKeycode(). */
856d522f475Smrg#if OPT_TCAP_QUERY && OPT_ISO_COLORS
857d522f475Smrg# define XK_COLORS 0x0003
858d522f475Smrg#endif
859d522f475Smrg
860d522f475Smrg#else	/* !OPT_ISO_COLORS */
861d522f475Smrg
862d522f475Smrg#define if_OPT_ISO_COLORS(screen, code) /* nothing */
863d522f475Smrg#define TERM_COLOR_FLAGS(xw) 0
864d522f475Smrg
865d522f475Smrg#define ReverseOrHilite(screen,flags,hilite) \
866d522f475Smrg		      (( (flags & INVERSE) && !hilite) || \
867d522f475Smrg		       (!(flags & INVERSE) &&  hilite))
868d522f475Smrg
869d522f475Smrg#endif	/* OPT_ISO_COLORS */
870d522f475Smrg
871d522f475Smrg#if OPT_AIX_COLORS
872d522f475Smrg#define if_OPT_AIX_COLORS(screen, code) if(screen->colorMode) code
873d522f475Smrg#else
874d522f475Smrg#define if_OPT_AIX_COLORS(screen, code) /* nothing */
875d522f475Smrg#endif
876d522f475Smrg
877d522f475Smrg#if OPT_256_COLORS || OPT_88_COLORS
878d522f475Smrg# define if_OPT_EXT_COLORS(screen, code) if(screen->colorMode) code
879d522f475Smrg# define if_OPT_ISO_TRADITIONAL_COLORS(screen, code) /* nothing */
880d522f475Smrg#elif OPT_ISO_COLORS
881d522f475Smrg# define if_OPT_EXT_COLORS(screen, code) /* nothing */
882d522f475Smrg# define if_OPT_ISO_TRADITIONAL_COLORS(screen, code) if(screen->colorMode) code
883d522f475Smrg#else
884d522f475Smrg# define if_OPT_EXT_COLORS(screen, code) /* nothing */
885d522f475Smrg# define if_OPT_ISO_TRADITIONAL_COLORS(screen, code) /*nothing*/
886d522f475Smrg#endif
887d522f475Smrg
888d522f475Smrg#define COLOR_RES_NAME(root) "color" root
889d522f475Smrg
890d522f475Smrg#if OPT_COLOR_CLASS
891d522f475Smrg#define COLOR_RES_CLASS(root) "Color" root
892d522f475Smrg#else
893d522f475Smrg#define COLOR_RES_CLASS(root) XtCForeground
894d522f475Smrg#endif
895d522f475Smrg
896d522f475Smrg#if OPT_COLOR_RES
897d522f475Smrg#define COLOR_RES(root,offset,value) Sres(COLOR_RES_NAME(root), COLOR_RES_CLASS(root), offset.resource, value)
898d522f475Smrg#define COLOR_RES2(name,class,offset,value) Sres(name, class, offset.resource, value)
899d522f475Smrg#else
900d522f475Smrg#define COLOR_RES(root,offset,value) Cres(COLOR_RES_NAME(root), COLOR_RES_CLASS(root), offset, value)
901d522f475Smrg#define COLOR_RES2(name,class,offset,value) Cres(name, class, offset, value)
902d522f475Smrg#endif
903d522f475Smrg
904d522f475Smrg#define CLICK_RES_NAME(count)  "on" count "Clicks"
905d522f475Smrg#define CLICK_RES_CLASS(count) "On" count "Clicks"
906d522f475Smrg#define CLICK_RES(count,offset,value) Sres(CLICK_RES_NAME(count), CLICK_RES_CLASS(count), offset, value)
907d522f475Smrg
908d522f475Smrg/***====================================================================***/
909d522f475Smrg
910d522f475Smrg#if OPT_DEC_CHRSET
911d522f475Smrg#define if_OPT_DEC_CHRSET(code) code
912d522f475Smrg	/* Use 2 bits for encoding the double high/wide sense of characters */
913d522f475Smrg#define CSET_SWL        0
914d522f475Smrg#define CSET_DHL_TOP    1
915d522f475Smrg#define CSET_DHL_BOT    2
916d522f475Smrg#define CSET_DWL        3
917d522f475Smrg#define NUM_CHRSET      8	/* normal/bold and 4 CSET_xxx values */
918d522f475Smrg	/* Use remaining bits for encoding the other character-sets */
919d522f475Smrg#define CSET_NORMAL(code)  ((code) == CSET_SWL)
920d522f475Smrg#define CSET_DOUBLE(code)  (!CSET_NORMAL(code) && !CSET_EXTEND(code))
921d522f475Smrg#define CSET_EXTEND(code)  ((code) > CSET_DWL)
922d522f475Smrg	/* for doublesize characters, the first cell in a row holds the info */
923d522f475Smrg#define SCRN_ROW_CSET(screen,row) (SCRN_BUF_CSETS((screen), row)[0])
924d522f475Smrg#define CurMaxCol(screen, row) \
925d522f475Smrg	(CSET_DOUBLE(SCRN_ROW_CSET(screen, row)) \
926d522f475Smrg	? (screen->max_col / 2) \
927d522f475Smrg	: (screen->max_col))
928d522f475Smrg#define CurCursorX(screen, row, col) \
929d522f475Smrg	(CSET_DOUBLE(SCRN_ROW_CSET(screen, row)) \
930d522f475Smrg	? CursorX(screen, 2*(col)) \
931d522f475Smrg	: CursorX(screen, (col)))
932d522f475Smrg#define CurFontWidth(screen, row) \
933d522f475Smrg	(CSET_DOUBLE(SCRN_ROW_CSET(screen, row)) \
934d522f475Smrg	? 2*FontWidth(screen) \
935d522f475Smrg	: FontWidth(screen))
936d522f475Smrg#else
937d522f475Smrg#define if_OPT_DEC_CHRSET(code) /*nothing*/
938d522f475Smrg#define CurMaxCol(screen, row) screen->max_col
939d522f475Smrg#define CurCursorX(screen, row, col) CursorX(screen, col)
940d522f475Smrg#define CurFontWidth(screen, row) FontWidth(screen)
941d522f475Smrg#endif
942d522f475Smrg
943d522f475Smrg#if OPT_LUIT_PROG && !OPT_WIDE_CHARS
944d522f475Smrg#error Luit requires the wide-chars configuration
945d522f475Smrg#endif
946d522f475Smrg
947d522f475Smrg	/* the number of pointers per row in 'ScrnBuf' */
948d522f475Smrg#if OPT_WIDE_CHARS
949d522f475Smrg#define MAX_PTRS term->num_ptrs
950d522f475Smrg#else
951d522f475Smrg#define MAX_PTRS (OFF_FINAL)
952d522f475Smrg#endif
953d522f475Smrg
954d522f475Smrg#define BUF_HEAD 1
955d522f475Smrg	/* the number that point to Char data */
956d522f475Smrg#define BUF_PTRS (MAX_PTRS - BUF_HEAD)
957d522f475Smrg
958d522f475Smrg/***====================================================================***/
959d522f475Smrg
960d522f475Smrg#if OPT_EBCDIC
961d522f475Smrgextern int E2A(int);
962d522f475Smrgextern int A2E(int);
963d522f475Smrg#else
964d522f475Smrg#define E2A(a) (a)
965d522f475Smrg#define A2E(a) (a)
966d522f475Smrg#endif
967d522f475Smrg
968d522f475Smrg#define CONTROL(a) (A2E(E2A(a)&037))
969d522f475Smrg
970d522f475Smrg/***====================================================================***/
971d522f475Smrg
972d522f475Smrg#if OPT_TEK4014
973d522f475Smrg#define TEK4014_ACTIVE(xw)      ((xw)->misc.TekEmu)
974d522f475Smrg#define TEK4014_SHOWN(xw)       ((xw)->misc.Tshow)
975d522f475Smrg#define CURRENT_EMU_VAL(tek,vt) (TEK4014_ACTIVE(term) ? tek : vt)
976d522f475Smrg#define CURRENT_EMU()           CURRENT_EMU_VAL((Widget)tekWidget, (Widget)term)
977d522f475Smrg#else
978d522f475Smrg#define TEK4014_ACTIVE(screen)  0
979d522f475Smrg#define TEK4014_SHOWN(xw)       0
980d522f475Smrg#define CURRENT_EMU_VAL(tek,vt) (vt)
981d522f475Smrg#define CURRENT_EMU()           ((Widget)term)
982d522f475Smrg#endif
983d522f475Smrg
984d522f475Smrg/***====================================================================***/
985d522f475Smrg
986d522f475Smrg#if OPT_TOOLBAR
987d522f475Smrg#define SHELL_OF(widget) XtParent(XtParent(widget))
988d522f475Smrg#else
989d522f475Smrg#define SHELL_OF(widget) XtParent(widget)
990d522f475Smrg#endif
991d522f475Smrg
992d522f475Smrg/***====================================================================***/
993d522f475Smrg
994d522f475Smrg#if OPT_VT52_MODE
995d522f475Smrg#define if_OPT_VT52_MODE(screen, code) if(screen->vtXX_level == 0) code
996d522f475Smrg#else
997d522f475Smrg#define if_OPT_VT52_MODE(screen, code) /* nothing */
998d522f475Smrg#endif
999d522f475Smrg
1000d522f475Smrg/***====================================================================***/
1001d522f475Smrg
1002d522f475Smrg#if OPT_XMC_GLITCH
1003d522f475Smrg#define if_OPT_XMC_GLITCH(screen, code) if(screen->xmc_glitch) code
1004d522f475Smrg#define XMC_GLITCH 1	/* the character we'll show */
1005d522f475Smrg#define XMC_FLAGS (INVERSE|UNDERLINE|BOLD|BLINK)
1006d522f475Smrg#else
1007d522f475Smrg#define if_OPT_XMC_GLITCH(screen, code) /* nothing */
1008d522f475Smrg#endif
1009d522f475Smrg
1010d522f475Smrg/***====================================================================***/
1011d522f475Smrg
10120d92cbfdSchristos#define LO_BYTE(ch) CharOf((ch) & 0xff)
10130d92cbfdSchristos#define HI_BYTE(ch) CharOf((ch) >> 8)
10140d92cbfdSchristos
10150d92cbfdSchristos#define PACK_FGBG(screen, row, col) \
10160d92cbfdSchristos	    (unsigned) ((SCRN_BUF_FGRND(screen, row)[col] << 8) \
10170d92cbfdSchristos		      | (SCRN_BUF_BGRND(screen, row)[col]))
1018d522f475Smrg
1019d522f475Smrg#if OPT_WIDE_CHARS
1020d522f475Smrg#define if_OPT_WIDE_CHARS(screen, code) if(screen->wide_chars) code
1021d522f475Smrg#define if_WIDE_OR_NARROW(screen, wide, narrow) if(screen->wide_chars) wide else narrow
1022d522f475Smrg#define PAIRED_CHARS(lo,hi)	lo,hi
1023d522f475Smrg#define PACK_PAIR(lo,hi,n)	(lo[n] | (hi ? (hi[n] << 8) : 0))
1024d522f475Smrgtypedef unsigned IChar;		/* for 8 or 16-bit characters, plus flag */
1025d522f475Smrg#else
1026d522f475Smrg#define if_OPT_WIDE_CHARS(screen, code) /* nothing */
1027d522f475Smrg#define if_WIDE_OR_NARROW(screen, wide, narrow) narrow
1028d522f475Smrg#define PAIRED_CHARS(lo,hi)	lo
1029d522f475Smrg#define PACK_PAIR(lo,hi,n)	lo[n]
1030d522f475Smrgtypedef unsigned char IChar;	/* for 8-bit characters */
1031d522f475Smrg#endif
1032d522f475Smrg
1033d522f475Smrg/***====================================================================***/
1034d522f475Smrg
1035d522f475Smrg#ifndef RES_OFFSET
1036d522f475Smrg#define RES_OFFSET(offset) XtOffsetOf(XtermWidgetRec, offset)
1037d522f475Smrg#endif
1038d522f475Smrg
1039d522f475Smrg#define RES_NAME(name) name
1040d522f475Smrg#define RES_CLASS(name) name
1041d522f475Smrg
1042d522f475Smrg#define Bres(name, class, offset, dftvalue) \
1043d522f475Smrg	{RES_NAME(name), RES_CLASS(class), XtRBoolean, sizeof(Boolean), \
1044d522f475Smrg	 RES_OFFSET(offset), XtRImmediate, (XtPointer) dftvalue}
1045d522f475Smrg
1046d522f475Smrg#define Cres(name, class, offset, dftvalue) \
1047d522f475Smrg	{RES_NAME(name), RES_CLASS(class), XtRPixel, sizeof(Pixel), \
1048d522f475Smrg	 RES_OFFSET(offset), XtRString, (XtPointer) dftvalue}
1049d522f475Smrg
1050d522f475Smrg#define Tres(name, class, offset, dftvalue) \
1051d522f475Smrg	COLOR_RES2(name, class, screen.Tcolors[offset], dftvalue) \
1052d522f475Smrg
1053d522f475Smrg#define Fres(name, class, offset, dftvalue) \
1054d522f475Smrg	{RES_NAME(name), RES_CLASS(class), XtRFontStruct, sizeof(XFontStruct *), \
1055d522f475Smrg	 RES_OFFSET(offset), XtRString, (XtPointer) dftvalue}
1056d522f475Smrg
1057d522f475Smrg#define Ires(name, class, offset, dftvalue) \
1058d522f475Smrg	{RES_NAME(name), RES_CLASS(class), XtRInt, sizeof(int), \
1059d522f475Smrg	 RES_OFFSET(offset), XtRImmediate, (XtPointer) dftvalue}
1060d522f475Smrg
1061d522f475Smrg#define Dres(name, class, offset, dftvalue) \
1062d522f475Smrg	{RES_NAME(name), RES_CLASS(class), XtRFloat, sizeof(float), \
1063d522f475Smrg	 RES_OFFSET(offset), XtRString, (XtPointer) dftvalue}
1064d522f475Smrg
1065d522f475Smrg#define Sres(name, class, offset, dftvalue) \
1066d522f475Smrg	{RES_NAME(name), RES_CLASS(class), XtRString, sizeof(char *), \
1067d522f475Smrg	 RES_OFFSET(offset), XtRString, (XtPointer) dftvalue}
1068d522f475Smrg
1069d522f475Smrg#define Wres(name, class, offset, dftvalue) \
1070d522f475Smrg	{RES_NAME(name), RES_CLASS(class), XtRWidget, sizeof(Widget), \
1071d522f475Smrg	 RES_OFFSET(offset), XtRWidget, (XtPointer) dftvalue}
1072d522f475Smrg
1073d522f475Smrg/***====================================================================***/
1074d522f475Smrg
1075d522f475Smrg#define FRG_SIZE resource.minBufSize
1076d522f475Smrg#define BUF_SIZE resource.maxBufSize
1077d522f475Smrg
1078d522f475Smrgtypedef struct {
1079d522f475Smrg	Char *	next;
1080d522f475Smrg	Char *	last;
1081d522f475Smrg	int	update;		/* HandleInterpret */
1082d522f475Smrg#if OPT_WIDE_CHARS
1083d522f475Smrg	IChar	utf_data;	/* resulting character */
1084d522f475Smrg	int	utf_size;	/* ...number of bytes decoded */
1085d522f475Smrg	Char	*write_buf;
1086d522f475Smrg	unsigned write_len;
1087d522f475Smrg#endif
1088d522f475Smrg	Char	buffer[1];
1089d522f475Smrg} PtyData;
1090d522f475Smrg
1091d522f475Smrg/***====================================================================***/
1092d522f475Smrg
1093d522f475Smrg/* The order of ifdef's matches the logic for num_ptrs in VTInitialize */
1094d522f475Smrgtypedef enum {
1095d522f475Smrg	OFF_FLAGS = 0		/* BUF_HEAD */
1096d522f475Smrg	, OFF_ATTRS		/* video attributes */
1097d522f475Smrg#if OPT_ISO_COLORS
1098d522f475Smrg#if OPT_256_COLORS || OPT_88_COLORS
1099d522f475Smrg	, OFF_FGRND		/* foreground color number */
1100d522f475Smrg	, OFF_BGRND		/* background color number */
1101d522f475Smrg#else
1102d522f475Smrg	, OFF_COLOR		/* foreground+background color numbers */
1103d522f475Smrg#endif
1104d522f475Smrg#endif
1105d522f475Smrg#if OPT_DEC_CHRSET
1106d522f475Smrg	, OFF_CSETS		/* DEC character-set */
1107d522f475Smrg#endif
1108d522f475Smrg	/* wide (16-bit) characters begin here */
1109d522f475Smrg	, OFF_CHARS		/* first (or only) byte of cell's character */
1110d522f475Smrg#if OPT_WIDE_CHARS
1111d522f475Smrg	, OFF_WIDEC		/* second byte of first wide-character */
1112d522f475Smrg#endif
1113d522f475Smrg	, OFF_FINAL		/* first enum past fixed-offsets */
1114d522f475Smrg} BufOffsets;
1115d522f475Smrg
1116d522f475Smrg	/*
1117d522f475Smrg	 * A "row" is the index within the visible part of the screen, and an
1118d522f475Smrg	 * "inx" is the index within the whole set of scrollable lines.
1119d522f475Smrg	 */
1120d522f475Smrg#define ROW2INX(screen, row)	((row) + (screen)->topline)
1121d522f475Smrg#define INX2ROW(screen, inx)	((inx) - (screen)->topline)
1122d522f475Smrg
1123d522f475Smrg#define ROW2ABS(screen, row)	((row) + (screen)->savedlines)
1124d522f475Smrg#define INX2ABS(screen, inx)	ROW2ABS(screen, INX2ROW(screen, inx))
1125d522f475Smrg
1126d522f475Smrg#define okScrnRow(screen, row) \
1127d522f475Smrg	((row) <= (screen)->max_row \
1128d522f475Smrg      && (row) >= -((screen)->savedlines))
1129d522f475Smrg
1130d522f475Smrg	/* ScrnBuf-level macros */
1131d522f475Smrg#define BUFFER_PTR(buf, row, off) (buf[MAX_PTRS * (row) + off])
1132d522f475Smrg
1133d522f475Smrg#define BUF_FLAGS(buf, row) BUFFER_PTR(buf, row, OFF_FLAGS)
1134d522f475Smrg#define BUF_CHARS(buf, row) BUFFER_PTR(buf, row, OFF_CHARS)
1135d522f475Smrg#define BUF_ATTRS(buf, row) BUFFER_PTR(buf, row, OFF_ATTRS)
1136d522f475Smrg#define BUF_COLOR(buf, row) BUFFER_PTR(buf, row, OFF_COLOR)
1137d522f475Smrg#define BUF_FGRND(buf, row) BUFFER_PTR(buf, row, OFF_FGRND)
1138d522f475Smrg#define BUF_BGRND(buf, row) BUFFER_PTR(buf, row, OFF_BGRND)
1139d522f475Smrg#define BUF_CSETS(buf, row) BUFFER_PTR(buf, row, OFF_CSETS)
1140d522f475Smrg#define BUF_WIDEC(buf, row) BUFFER_PTR(buf, row, OFF_WIDEC)
1141d522f475Smrg
1142d522f475Smrg	/* TScreen-level macros */
1143d522f475Smrg#define SCREEN_PTR(screen, row, off) BUFFER_PTR(screen->visbuf, row, off)
1144d522f475Smrg
1145d522f475Smrg#define SCRN_BUF_FLAGS(screen, row) SCREEN_PTR(screen, row, OFF_FLAGS)
1146d522f475Smrg#define SCRN_BUF_CHARS(screen, row) SCREEN_PTR(screen, row, OFF_CHARS)
1147d522f475Smrg#define SCRN_BUF_ATTRS(screen, row) SCREEN_PTR(screen, row, OFF_ATTRS)
1148d522f475Smrg#define SCRN_BUF_COLOR(screen, row) SCREEN_PTR(screen, row, OFF_COLOR)
1149d522f475Smrg#define SCRN_BUF_FGRND(screen, row) SCREEN_PTR(screen, row, OFF_FGRND)
1150d522f475Smrg#define SCRN_BUF_BGRND(screen, row) SCREEN_PTR(screen, row, OFF_BGRND)
1151d522f475Smrg#define SCRN_BUF_CSETS(screen, row) SCREEN_PTR(screen, row, OFF_CSETS)
1152d522f475Smrg#define SCRN_BUF_WIDEC(screen, row) SCREEN_PTR(screen, row, OFF_WIDEC)
1153d522f475Smrg
1154d522f475Smrgtypedef struct {
1155d522f475Smrg	unsigned	chrset;
1156d522f475Smrg	unsigned	flags;
1157d522f475Smrg	XFontStruct *	fs;
1158d522f475Smrg	char *		fn;
1159d522f475Smrg} XTermFonts;
1160d522f475Smrg
1161d522f475Smrgtypedef struct {
1162d522f475Smrg	int		top;
1163d522f475Smrg	int		left;
1164d522f475Smrg	int		bottom;
1165d522f475Smrg	int		right;
1166d522f475Smrg} XTermRect;
1167d522f475Smrg
1168d522f475Smrg	/* indices into save_modes[] */
1169d522f475Smrgtypedef enum {
1170d522f475Smrg	DP_CRS_VISIBLE,
1171d522f475Smrg	DP_DECANM,
1172d522f475Smrg	DP_DECARM,
1173d522f475Smrg	DP_DECAWM,
1174d522f475Smrg	DP_DECBKM,
1175d522f475Smrg	DP_DECCKM,
1176d522f475Smrg	DP_DECCOLM,	/* IN132COLUMNS */
1177d522f475Smrg	DP_DECOM,
1178d522f475Smrg	DP_DECPEX,
1179d522f475Smrg	DP_DECPFF,
1180d522f475Smrg	DP_DECSCLM,
1181d522f475Smrg	DP_DECSCNM,
1182d522f475Smrg	DP_DECTCEM,
1183d522f475Smrg	DP_DECTEK,
1184d522f475Smrg	DP_PRN_EXTENT,
1185d522f475Smrg	DP_PRN_FORMFEED,
1186d522f475Smrg	DP_X_ALTSCRN,
1187d522f475Smrg	DP_X_DECCOLM,
1188d522f475Smrg	DP_X_LOGGING,
1189d522f475Smrg	DP_X_MARGIN,
1190d522f475Smrg	DP_X_MORE,
1191d522f475Smrg	DP_X_MOUSE,
1192d522f475Smrg	DP_X_REVWRAP,
1193d522f475Smrg	DP_X_X10MSE,
1194d522f475Smrg#if OPT_BLINK_CURS
1195d522f475Smrg	DP_CRS_BLINK,
1196d522f475Smrg#endif
1197d522f475Smrg#if OPT_FOCUS_EVENT
1198d522f475Smrg	DP_X_FOCUS,
1199d522f475Smrg#endif
1200d522f475Smrg#if OPT_TOOLBAR
1201d522f475Smrg	DP_TOOLBAR,
1202d522f475Smrg#endif
1203d522f475Smrg	DP_LAST
1204d522f475Smrg} SaveModes;
1205d522f475Smrg
12060d92cbfdSchristos#define DoSM(code,value)  screen->save_modes[code] = (unsigned) (value)
12070d92cbfdSchristos#define DoRM(code,value)  value = (Boolean) screen->save_modes[code]
12080d92cbfdSchristos#define DoRM0(code,value) value = screen->save_modes[code]
1209d522f475Smrg
1210d522f475Smrg	/* index into vt_shell[] or tek_shell[] */
1211d522f475Smrgtypedef enum {
1212d522f475Smrg	noMenu = -1,
1213d522f475Smrg	mainMenu,
1214d522f475Smrg	vtMenu,
1215d522f475Smrg	fontMenu,
1216d522f475Smrg	tekMenu
1217d522f475Smrg} MenuIndex;
1218d522f475Smrg
1219d522f475Smrg#define NUM_POPUP_MENUS 4
1220d522f475Smrg
1221d522f475Smrg#if OPT_COLOR_RES
1222d522f475Smrgtypedef struct {
1223d522f475Smrg	String		resource;
1224d522f475Smrg	Pixel		value;
1225d522f475Smrg	int		mode;
1226d522f475Smrg} ColorRes;
1227d522f475Smrg#else
1228d522f475Smrg#define ColorRes Pixel
1229d522f475Smrg#endif
1230d522f475Smrg
1231d522f475Smrgtypedef struct {
1232d522f475Smrg	unsigned	which;		/* must have NCOLORS bits */
1233d522f475Smrg	Pixel		colors[NCOLORS];
1234d522f475Smrg	char		*names[NCOLORS];
1235d522f475Smrg} ScrnColors;
1236d522f475Smrg
1237d522f475Smrgtypedef struct {
1238d522f475Smrg	Boolean		saved;
1239d522f475Smrg	int		row;
1240d522f475Smrg	int		col;
1241d522f475Smrg	unsigned	flags;		/* VTxxx saves graphics rendition */
12420d92cbfdSchristos	Char		curgl;
12430d92cbfdSchristos	Char		curgr;
12440d92cbfdSchristos	Char		gsets[4];
1245d522f475Smrg#if OPT_ISO_COLORS
1246d522f475Smrg	int		cur_foreground; /* current foreground color	*/
1247d522f475Smrg	int		cur_background; /* current background color	*/
1248d522f475Smrg	int		sgr_foreground; /* current SGR foreground color */
1249d522f475Smrg	int		sgr_background; /* current SGR background color */
1250d522f475Smrg	Boolean		sgr_extended;	/* SGR set with extended codes? */
1251d522f475Smrg#endif
1252d522f475Smrg} SavedCursor;
1253d522f475Smrg
1254d522f475Smrg#define SAVED_CURSORS 2
1255d522f475Smrg
1256d522f475Smrgtypedef struct {
1257d522f475Smrg	int		width;		/* if > 0, width of scrollbar,	*/
1258d522f475Smrg					/* and scrollbar is showing	*/
1259d522f475Smrg	Boolean		rv_cached;	/* see ScrollBarReverseVideo	*/
1260d522f475Smrg	int		rv_active;	/* ...current reverse-video	*/
1261d522f475Smrg	Pixel		bg;		/* ...cached background color	*/
1262d522f475Smrg	Pixel		fg;		/* ...cached foreground color	*/
1263d522f475Smrg	Pixel		bdr;		/* ...cached border color	*/
1264d522f475Smrg	Pixmap		bdpix;		/* ...cached border pixmap	*/
1265d522f475Smrg} SbInfo;
1266d522f475Smrg
1267d522f475Smrg#if OPT_TOOLBAR
1268d522f475Smrgtypedef struct {
1269d522f475Smrg	Widget		menu_bar;	/* toolbar, if initialized	*/
1270d522f475Smrg	Dimension	menu_height;	/* ...and its height		*/
1271d522f475Smrg	Dimension	menu_border;	/* ...and its border		*/
1272d522f475Smrg} TbInfo;
1273d522f475Smrg#define VT100_TB_INFO(name) screen.fullVwin.tb_info.name
1274d522f475Smrg#endif
1275d522f475Smrg
1276d522f475Smrgtypedef struct {
1277d522f475Smrg	Window		window;		/* X window id			*/
1278d522f475Smrg	int		width;		/* width of columns		*/
1279d522f475Smrg	int		height;		/* height of rows		*/
1280d522f475Smrg	Dimension	fullwidth;	/* full width of window		*/
1281d522f475Smrg	Dimension	fullheight;	/* full height of window	*/
1282d522f475Smrg	int		f_width;	/* width of fonts in pixels	*/
1283d522f475Smrg	int		f_height;	/* height of fonts in pixels	*/
1284d522f475Smrg	int		f_ascent;	/* ascent of font in pixels	*/
1285d522f475Smrg	int		f_descent;	/* descent of font in pixels	*/
1286d522f475Smrg	SbInfo		sb_info;
1287d522f475Smrg#if OPT_TOOLBAR
1288d522f475Smrg	Boolean		active;		/* true if toolbars are used	*/
1289d522f475Smrg	TbInfo		tb_info;	/* toolbar information		*/
1290d522f475Smrg#endif
1291d522f475Smrg} VTwin;
1292d522f475Smrg
1293d522f475Smrgtypedef struct {
1294d522f475Smrg	Window		window;		/* X window id			*/
1295d522f475Smrg	int		width;		/* width of columns		*/
1296d522f475Smrg	int		height;		/* height of rows		*/
1297d522f475Smrg	Dimension	fullwidth;	/* full width of window		*/
1298d522f475Smrg	Dimension	fullheight;	/* full height of window	*/
1299d522f475Smrg	double		tekscale;	/* scale factor Tek -> vs100	*/
1300d522f475Smrg} TKwin;
1301d522f475Smrg
1302d522f475Smrgtypedef struct {
1303d522f475Smrg/* These parameters apply to both windows */
1304d522f475Smrg	Display		*display;	/* X display for screen		*/
1305d522f475Smrg	int		respond;	/* socket for responses
1306d522f475Smrg					   (position report, etc.)	*/
1307d522f475Smrg/* These parameters apply to VT100 window */
1308d522f475Smrg	IChar		unparse_bfr[256];
1309d522f475Smrg	unsigned	unparse_len;
1310d522f475Smrg
1311d522f475Smrg#if OPT_TCAP_QUERY
1312d522f475Smrg	int		tc_query_code;
1313d522f475Smrg	Bool		tc_query_fkey;
1314d522f475Smrg#endif
1315d522f475Smrg	pid_t		pid;		/* pid of process on far side   */
1316d522f475Smrg	uid_t		uid;		/* user id of actual person	*/
1317d522f475Smrg	gid_t		gid;		/* group id of actual person	*/
1318d522f475Smrg	ColorRes	Tcolors[NCOLORS]; /* terminal colors		*/
1319d522f475Smrg#if OPT_HIGHLIGHT_COLOR
1320d522f475Smrg	Boolean		hilite_color;	/* hilite colors override	*/
1321d522f475Smrg	Boolean		hilite_reverse;	/* hilite overrides reverse	*/
1322d522f475Smrg#endif
1323d522f475Smrg#if OPT_ISO_COLORS
1324d522f475Smrg	ColorRes	Acolors[MAXCOLORS]; /* ANSI color emulation	*/
1325d522f475Smrg	int		veryBoldColors;	/* modifier for boldColors	*/
1326d522f475Smrg	Boolean		boldColors;	/* can we make bold colors?	*/
1327d522f475Smrg	Boolean		colorMode;	/* are we using color mode?	*/
1328d522f475Smrg	Boolean		colorULMode;	/* use color for underline?	*/
1329d522f475Smrg	Boolean		italicULMode;	/* italic font for underline?	*/
1330d522f475Smrg	Boolean		colorBDMode;	/* use color for bold?		*/
1331d522f475Smrg	Boolean		colorBLMode;	/* use color for blink?		*/
1332d522f475Smrg	Boolean		colorRVMode;	/* use color for reverse?	*/
1333d522f475Smrg	Boolean		colorAttrMode;	/* prefer colorUL/BD to SGR	*/
1334d522f475Smrg#endif
1335d522f475Smrg#if OPT_DEC_CHRSET
1336d522f475Smrg	Boolean		font_doublesize;/* enable font-scaling		*/
1337d522f475Smrg	int		cache_doublesize;/* limit of our cache		*/
1338d522f475Smrg	Char		cur_chrset;	/* character-set index & code	*/
1339d522f475Smrg	int		fonts_used;	/* count items in double_fonts	*/
1340d522f475Smrg	XTermFonts	double_fonts[NUM_CHRSET];
1341d522f475Smrg#endif
1342d522f475Smrg#if OPT_DEC_RECTOPS
1343d522f475Smrg	int		cur_decsace;	/* parameter for DECSACE	*/
1344d522f475Smrg#endif
1345d522f475Smrg#if OPT_WIDE_CHARS
1346d522f475Smrg	Boolean		wide_chars;	/* true when 16-bit chars	*/
1347d522f475Smrg	Boolean		vt100_graphics;	/* true to allow vt100-graphics	*/
1348d522f475Smrg	Boolean		utf8_inparse;	/* true to enable UTF-8 parser	*/
1349d522f475Smrg	int		utf8_mode;	/* use UTF-8 decode/encode: 0-2	*/
1350d522f475Smrg	int		max_combining;	/* maximum # of combining chars	*/
1351d522f475Smrg	Boolean		utf8_latin1;	/* use UTF-8 with Latin-1 bias	*/
1352d522f475Smrg	Boolean		utf8_title;	/* use UTF-8 titles		*/
1353d522f475Smrg	int		latin9_mode;	/* poor man's luit, latin9	*/
1354d522f475Smrg	int		unicode_font;	/* font uses unicode encoding	*/
1355d522f475Smrg	int		utf_count;	/* state of utf_char		*/
1356d522f475Smrg	IChar		utf_char;	/* in-progress character	*/
1357d522f475Smrg	int		last_written_col;
1358d522f475Smrg	int		last_written_row;
1359d522f475Smrg	XChar2b		*draw_buf;	/* drawXtermText() data		*/
1360d522f475Smrg	Cardinal	draw_len;	/* " " "			*/
1361d522f475Smrg#endif
1362d522f475Smrg#if OPT_BROKEN_OSC
1363d522f475Smrg	Boolean		brokenLinuxOSC; /* true to ignore Linux palette ctls */
1364d522f475Smrg#endif
1365d522f475Smrg#if OPT_BROKEN_ST
1366d522f475Smrg	Boolean		brokenStringTerm; /* true to match old OSC parse */
1367d522f475Smrg#endif
1368d522f475Smrg#if OPT_C1_PRINT || OPT_WIDE_CHARS
1369d522f475Smrg	Boolean		c1_printable;	/* true if we treat C1 as print	*/
1370d522f475Smrg#endif
1371d522f475Smrg	int		border;		/* inner border			*/
1372d522f475Smrg	int		scrollBarBorder; /* scrollBar border		*/
13730d92cbfdSchristos	long		event_mask;
13740d92cbfdSchristos	unsigned	send_mouse_pos;	/* user wants mouse transition  */
1375d522f475Smrg					/* and position information	*/
1376d522f475Smrg	Boolean		send_focus_pos; /* user wants focus in/out info */
1377d522f475Smrg	Boolean		quiet_grab;	/* true if no cursor change on focus */
1378d522f475Smrg#if OPT_PASTE64
1379d522f475Smrg	int		base64_paste;	/* set to send paste in base64	*/
1380d522f475Smrg	int		base64_final;	/* string-terminator for paste	*/
1381d522f475Smrg	/* _qWriteSelectionData expects these to be initialized to zero.
1382d522f475Smrg	 * base64_flush() is the last step of the conversion, it clears these
1383d522f475Smrg	 * variables.
1384d522f475Smrg	 */
13850d92cbfdSchristos	unsigned	base64_accu;
13860d92cbfdSchristos	unsigned	base64_count;
13870d92cbfdSchristos	unsigned	base64_pad;
1388d522f475Smrg#endif
1389d522f475Smrg#if OPT_READLINE
1390d522f475Smrg	unsigned	click1_moves;
1391d522f475Smrg	unsigned	paste_moves;
1392d522f475Smrg	unsigned	dclick3_deletes;
1393d522f475Smrg	unsigned	paste_brackets;
1394d522f475Smrg	unsigned	paste_quotes;
1395d522f475Smrg	unsigned	paste_literal_nl;
1396d522f475Smrg#endif	/* OPT_READLINE */
1397d522f475Smrg#if OPT_DEC_LOCATOR
1398d522f475Smrg	Boolean		locator_reset;	/* turn mouse off after 1 report? */
1399d522f475Smrg	Boolean		locator_pixels;	/* report in pixels?		*/
1400d522f475Smrg					/* if false, report in cells	*/
14010d92cbfdSchristos	unsigned	locator_events;	/* what events to report	*/
1402d522f475Smrg	Boolean		loc_filter;	/* is filter rectangle active?	*/
1403d522f475Smrg	int		loc_filter_top;	/* filter rectangle for DEC Locator */
1404d522f475Smrg	int		loc_filter_left;
1405d522f475Smrg	int		loc_filter_bottom;
1406d522f475Smrg	int		loc_filter_right;
1407d522f475Smrg#endif	/* OPT_DEC_LOCATOR */
1408d522f475Smrg	int		mouse_button;	/* current button pressed	*/
1409d522f475Smrg	int		mouse_row;	/* ...and its row		*/
1410d522f475Smrg	int		mouse_col;	/* ...and its column		*/
1411d522f475Smrg	int		select;		/* xterm selected		*/
1412d522f475Smrg	Boolean		bellOnReset;	/* bellOnReset			*/
1413d522f475Smrg	Boolean		visualbell;	/* visual bell mode		*/
1414d522f475Smrg	Boolean		poponbell;	/* pop on bell mode		*/
14150d92cbfdSchristos
14160d92cbfdSchristos	Boolean		allowFontOps;	/* FontOps mode			*/
1417d522f475Smrg	Boolean		allowSendEvents;/* SendEvent mode		*/
14180d92cbfdSchristos	Boolean		allowTcapOps;	/* TcapOps mode			*/
1419d522f475Smrg	Boolean		allowTitleOps;	/* TitleOps mode		*/
1420d522f475Smrg	Boolean		allowWindowOps;	/* WindowOps mode		*/
14210d92cbfdSchristos
14220d92cbfdSchristos	Boolean		allowFontOp0;	/* initial FontOps mode		*/
1423d522f475Smrg	Boolean		allowSendEvent0;/* initial SendEvent mode	*/
14240d92cbfdSchristos	Boolean		allowTcapOp0;	/* initial TcapOps mode		*/
1425d522f475Smrg	Boolean		allowTitleOp0;	/* initial TitleOps mode	*/
1426d522f475Smrg	Boolean		allowWindowOp0;	/* initial WindowOps mode	*/
14270d92cbfdSchristos
1428d522f475Smrg	Boolean		awaitInput;	/* select-timeout mode		*/
1429d522f475Smrg	Boolean		grabbedKbd;	/* keyboard is grabbed		*/
1430d522f475Smrg#ifdef ALLOWLOGGING
1431d522f475Smrg	int		logging;	/* logging mode			*/
1432d522f475Smrg	int		logfd;		/* file descriptor of log	*/
1433d522f475Smrg	char		*logfile;	/* log file name		*/
1434d522f475Smrg	Char		*logstart;	/* current start of log buffer	*/
1435d522f475Smrg#endif
1436d522f475Smrg	int		inhibit;	/* flags for inhibiting changes	*/
1437d522f475Smrg
1438d522f475Smrg/* VT window parameters */
1439d522f475Smrg	Boolean		Vshow;		/* VT window showing		*/
1440d522f475Smrg	VTwin		fullVwin;
1441d522f475Smrg#ifndef NO_ACTIVE_ICON
1442d522f475Smrg	VTwin		iconVwin;
1443d522f475Smrg	VTwin		*whichVwin;
1444d522f475Smrg#endif /* NO_ACTIVE_ICON */
1445d522f475Smrg
1446d522f475Smrg	int		pointer_mode;	/* when to use hidden_cursor	*/
1447d522f475Smrg	Boolean 	hide_pointer;	/* true to use "hidden_cursor"  */
1448d522f475Smrg	Cursor		pointer_cursor;	/* pointer cursor in window	*/
1449d522f475Smrg	Cursor		hidden_cursor;	/* hidden cursor in window	*/
1450d522f475Smrg
1451d522f475Smrg	String	answer_back;		/* response to ENQ		*/
1452d522f475Smrg	String	printer_command;	/* pipe/shell command string	*/
1453d522f475Smrg	Boolean printer_autoclose;	/* close printer when offline	*/
1454d522f475Smrg	Boolean printer_extent;		/* print complete page		*/
1455d522f475Smrg	Boolean printer_formfeed;	/* print formfeed per function	*/
1456d522f475Smrg	int	printer_controlmode;	/* 0=off, 1=auto, 2=controller	*/
1457d522f475Smrg	int	print_attributes;	/* 0=off, 1=normal, 2=color	*/
1458d522f475Smrg
1459d522f475Smrg	Boolean		fnt_prop;	/* true if proportional fonts	*/
1460d522f475Smrg	Boolean		fnt_boxes;	/* true if font has box-chars	*/
1461d522f475Smrg#if OPT_BOX_CHARS
1462d522f475Smrg	Boolean		force_box_chars;/* true if we assume that	*/
1463d522f475Smrg	Boolean		force_all_chars;/* true to outline missing chars*/
1464d522f475Smrg#endif
1465d522f475Smrg	Dimension	fnt_wide;
1466d522f475Smrg	Dimension	fnt_high;
1467d522f475Smrg	XTermFonts	fnts[fMAX];	/* normal/bold/etc for terminal	*/
1468d522f475Smrg	Boolean		free_bold_box;	/* same_font_size's austerity	*/
1469d522f475Smrg#ifndef NO_ACTIVE_ICON
1470d522f475Smrg	XTermFonts	fnt_icon;	/* icon font */
1471d522f475Smrg#endif /* NO_ACTIVE_ICON */
1472d522f475Smrg	int		enbolden;	/* overstrike for bold font	*/
1473d522f475Smrg	XPoint		*box;		/* draw unselected cursor	*/
1474d522f475Smrg
1475d522f475Smrg	int		cursor_state;	/* ON, OFF, or BLINKED_OFF	*/
1476d522f475Smrg	int		cursor_busy;	/* do not redraw...		*/
14770d92cbfdSchristos	Boolean		cursor_underline; /* true if cursor is in underline mode */
1478d522f475Smrg#if OPT_BLINK_CURS
1479d522f475Smrg	Boolean		cursor_blink;	/* cursor blink enable		*/
1480d522f475Smrg	Boolean		cursor_blink_res; /* initial cursor blink value	*/
1481d522f475Smrg	Boolean		cursor_blink_esc; /* cursor blink escape-state	*/
1482d522f475Smrg#endif
1483d522f475Smrg#if OPT_BLINK_TEXT
1484d522f475Smrg	Boolean		blink_as_bold;	/* text blink disable		*/
1485d522f475Smrg#endif
1486d522f475Smrg#if OPT_BLINK_CURS || OPT_BLINK_TEXT
1487d522f475Smrg	int		blink_state;	/* ON, OFF, or BLINKED_OFF	*/
1488d522f475Smrg	int		blink_on;	/* cursor on time (msecs)	*/
1489d522f475Smrg	int		blink_off;	/* cursor off time (msecs)	*/
1490d522f475Smrg	XtIntervalId	blink_timer;	/* timer-id for cursor-proc	*/
1491d522f475Smrg#endif
1492d522f475Smrg#if OPT_ZICONBEEP
1493d522f475Smrg	Boolean		zIconBeep_flagged; /* True if icon name was changed */
1494d522f475Smrg#endif /* OPT_ZICONBEEP */
1495d522f475Smrg	int		cursor_GC;	/* see ShowCursor()		*/
1496d522f475Smrg	int		cursor_set;	/* requested state		*/
1497d522f475Smrg	CELL		cursorp;	/* previous cursor row/column	*/
1498d522f475Smrg	int		cur_col;	/* current cursor column	*/
1499d522f475Smrg	int		cur_row;	/* current cursor row		*/
1500d522f475Smrg	int		max_col;	/* rightmost column		*/
1501d522f475Smrg	int		max_row;	/* bottom row			*/
1502d522f475Smrg	int		top_marg;	/* top line of scrolling region */
1503d522f475Smrg	int		bot_marg;	/* bottom line of  "	    "	*/
1504d522f475Smrg	Widget		scrollWidget;	/* pointer to scrollbar struct	*/
1505d522f475Smrg	/*
1506d522f475Smrg	 * Indices used to keep track of the top of the vt100 window and
1507d522f475Smrg	 * the saved lines, taking scrolling into account.
1508d522f475Smrg	 */
1509d522f475Smrg	int		topline;	/* line number of top, <= 0	*/
1510d522f475Smrg	int		savedlines;     /* number of lines that've been saved */
1511d522f475Smrg	int		savelines;	/* number of lines off top to save */
1512d522f475Smrg	int		scroll_amt;	/* amount to scroll		*/
1513d522f475Smrg	int		refresh_amt;	/* amount to refresh		*/
1514d522f475Smrg	/*
1515d522f475Smrg	 * Pointer to the current visible buffer, e.g., allbuf or altbuf.
1516d522f475Smrg	 */
1517d522f475Smrg	ScrnBuf		visbuf;		/* ptr to visible screen buf (main) */
1518d522f475Smrg	/*
1519d522f475Smrg	 * Data for the normal buffer, which may have saved lines to which
1520d522f475Smrg	 * the user can scroll.
1521d522f475Smrg	 */
1522d522f475Smrg	ScrnBuf		allbuf;		/* screen buffer (may include
1523d522f475Smrg					   lines scrolled off top)	*/
1524d522f475Smrg	Char		*sbuf_address;	/* main screen memory address   */
1525d522f475Smrg	Boolean		is_running;	/* true when buffers are legal	*/
1526d522f475Smrg	/*
1527d522f475Smrg	 * Data for the alternate buffer.
1528d522f475Smrg	 */
1529d522f475Smrg	ScrnBuf		altbuf;		/* alternate screen buffer	*/
1530d522f475Smrg	Char		*abuf_address;	/* alternate screen memory address */
1531d522f475Smrg	Boolean		alternate;	/* true if using alternate buf	*/
1532d522f475Smrg	/*
1533d522f475Smrg	 * Workspace used for screen operations.
1534d522f475Smrg	 */
1535d522f475Smrg	Char		**save_ptr;	/* workspace for save-pointers  */
1536d522f475Smrg	size_t		save_len;	/* ...and its length		*/
1537d522f475Smrg
1538d522f475Smrg	int		scrolllines;	/* number of lines to button scroll */
1539d522f475Smrg	Boolean		scrollttyoutput; /* scroll to bottom on tty output */
1540d522f475Smrg	Boolean		scrollkey;	/* scroll to bottom on key	*/
1541d522f475Smrg	Boolean		cursor_moved;	/* scrolling makes cursor move	*/
1542d522f475Smrg
15430d92cbfdSchristos	Boolean		do_wrap;	/* true if cursor in last column
1544d522f475Smrg					    and character just output    */
1545d522f475Smrg
1546d522f475Smrg	int		incopy;		/* 0 idle; 1 XCopyArea issued;
1547d522f475Smrg					    -1 first GraphicsExpose seen,
1548d522f475Smrg					    but last not seen		*/
1549d522f475Smrg	int		copy_src_x;	/* params from last XCopyArea ... */
1550d522f475Smrg	int		copy_src_y;
1551d522f475Smrg	unsigned int	copy_width;
1552d522f475Smrg	unsigned int	copy_height;
1553d522f475Smrg	int		copy_dest_x;
1554d522f475Smrg	int		copy_dest_y;
1555d522f475Smrg
1556d522f475Smrg	Boolean		c132;		/* allow change to 132 columns	*/
1557d522f475Smrg	Boolean		curses;		/* kludge line wrap for more	*/
1558d522f475Smrg	Boolean		hp_ll_bc;	/* kludge HP-style ll for xdb	*/
1559d522f475Smrg	Boolean		marginbell;	/* true if margin bell on	*/
1560d522f475Smrg	int		nmarginbell;	/* columns from right margin	*/
1561d522f475Smrg	int		bellarmed;	/* cursor below bell margin	*/
1562d522f475Smrg	Boolean		multiscroll;	/* true if multi-scroll		*/
1563d522f475Smrg	int		scrolls;	/* outstanding scroll count,
1564d522f475Smrg					    used only with multiscroll	*/
1565d522f475Smrg	SavedCursor	sc[SAVED_CURSORS]; /* data for restore cursor	*/
15660d92cbfdSchristos	unsigned 	save_modes[DP_LAST]; /* save dec/xterm private modes */
1567d522f475Smrg
1568d522f475Smrg	/* Improved VT100 emulation stuff.				*/
1569d522f475Smrg	String		keyboard_dialect; /* default keyboard dialect	*/
15700d92cbfdSchristos	Char		gsets[4];	/* G0 through G3.		*/
1571d522f475Smrg	Char		curgl;		/* Current GL setting.		*/
1572d522f475Smrg	Char		curgr;		/* Current GR setting.		*/
1573d522f475Smrg	Char		curss;		/* Current single shift.	*/
1574d522f475Smrg	String		term_id;	/* resource for terminal_id	*/
1575d522f475Smrg	int		terminal_id;	/* 100=vt100, 220=vt220, etc.	*/
1576d522f475Smrg	int		vtXX_level;	/* 0=vt52, 1,2,3 = vt100 ... vt320 */
1577d522f475Smrg	int		ansi_level;	/* levels 1,2,3			*/
1578d522f475Smrg	int		protected_mode;	/* 0=off, 1=DEC, 2=ISO		*/
1579d522f475Smrg	Boolean		always_bold_mode; /* compare normal/bold font	*/
1580d522f475Smrg	Boolean		always_highlight; /* whether to highlight cursor */
1581d522f475Smrg	Boolean		bold_mode;	/* use bold font or overstrike	*/
1582d522f475Smrg	Boolean		delete_is_del;	/* true for compatible Delete key */
1583d522f475Smrg	Boolean		jumpscroll;	/* whether we should jumpscroll */
1584d522f475Smrg	Boolean		old_fkeys;	/* true for compatible fkeys	*/
1585d522f475Smrg	Boolean		underline;	/* whether to underline text	*/
1586d522f475Smrg
1587d522f475Smrg#if OPT_MAXIMIZE
1588d522f475Smrg	Boolean		restore_data;
1589d522f475Smrg	int		restore_x;
1590d522f475Smrg	int		restore_y;
1591d522f475Smrg	unsigned	restore_width;
1592d522f475Smrg	unsigned	restore_height;
1593d522f475Smrg#endif
1594d522f475Smrg
1595d522f475Smrg#if OPT_VT52_MODE
1596d522f475Smrg	int		vt52_save_level; /* save-area for DECANM	*/
15970d92cbfdSchristos	Char		vt52_save_curgl;
15980d92cbfdSchristos	Char		vt52_save_curgr;
15990d92cbfdSchristos	Char		vt52_save_curss;
16000d92cbfdSchristos	Char		vt52_save_gsets[4];
1601d522f475Smrg#endif
1602d522f475Smrg	/* Testing */
1603d522f475Smrg#if OPT_XMC_GLITCH
1604d522f475Smrg	unsigned	xmc_glitch;	/* # of spaces to pad on SGR's	*/
1605d522f475Smrg	int		xmc_attributes;	/* attrs that make a glitch	*/
1606d522f475Smrg	Boolean		xmc_inline;	/* SGR's propagate only to eol	*/
1607d522f475Smrg	Boolean		move_sgr_ok;	/* SGR is reset on move		*/
1608d522f475Smrg#endif
1609d522f475Smrg
1610d522f475Smrg	/*
1611d522f475Smrg	 * Bell
1612d522f475Smrg	 */
1613d522f475Smrg	int		visualBellDelay; /* msecs to delay for visibleBell */
1614d522f475Smrg	int		bellSuppressTime; /* msecs after Bell before another allowed */
1615d522f475Smrg	Boolean		bellInProgress; /* still ringing/flashing prev bell? */
1616d522f475Smrg	Boolean		bellIsUrgent;	/* set XUrgency WM hint on bell */
1617d522f475Smrg	/*
1618d522f475Smrg	 * Select/paste state.
1619d522f475Smrg	 */
1620d522f475Smrg	Boolean		selectToClipboard; /* primary vs clipboard */
1621d522f475Smrg	String		*mappedSelect;	/* mapping for "SELECT" to "PRIMARY" */
1622d522f475Smrg
1623d522f475Smrg	Boolean		waitingForTrackInfo;
1624d522f475Smrg	int		numberOfClicks;
1625d522f475Smrg	int		maxClicks;
1626d522f475Smrg	int		multiClickTime;	/* time between multiclick selects */
1627d522f475Smrg	SelectUnit	selectUnit;
1628d522f475Smrg	SelectUnit	selectMap[NSELECTUNITS];
1629d522f475Smrg	String		onClick[NSELECTUNITS + 1];
1630d522f475Smrg
1631d522f475Smrg	char		*charClass;	/* for overriding word selection */
1632d522f475Smrg	Boolean		cutNewline;	/* whether or not line cut has \n */
1633d522f475Smrg	Boolean		cutToBeginningOfLine;  /* line cuts to BOL? */
1634d522f475Smrg	Boolean		highlight_selection; /* controls appearance of selection */
1635d522f475Smrg	Boolean		trim_selection; /* controls trimming of selection */
1636d522f475Smrg	Boolean		i18nSelections;
1637d522f475Smrg	Boolean		brokenSelections;
1638d522f475Smrg	Boolean		keepSelection;	/* do not lose selection on output */
1639d522f475Smrg	Boolean		replyToEmacs;	/* Send emacs escape code when done selecting or extending? */
1640d522f475Smrg	Char		*selection_data; /* the current selection */
1641d522f475Smrg	int		selection_size; /* size of allocated buffer */
16420d92cbfdSchristos	unsigned long	selection_length; /* number of significant bytes */
1643d522f475Smrg	EventMode	eventMode;
1644d522f475Smrg	Time		selection_time;	/* latest event timestamp */
1645d522f475Smrg	Time		lastButtonUpTime;
1646d522f475Smrg	unsigned	lastButton;
1647d522f475Smrg
1648d522f475Smrg	CELL		rawPos;		/* raw position for selection start */
1649d522f475Smrg	CELL		startRaw;	/* area before selectUnit processing */
1650d522f475Smrg	CELL		endRaw;		/* " " */
1651d522f475Smrg	CELL		startSel;	/* area after selectUnit processing */
1652d522f475Smrg	CELL		endSel;		/* " " */
1653d522f475Smrg	CELL		startH;		/* start highlighted text */
1654d522f475Smrg	CELL		endH;		/* end highlighted text */
1655d522f475Smrg	CELL		saveStartW;	/* saved WORD state, for LINE */
1656d522f475Smrg	CELL		startExt;	/* Start, end of extension */
1657d522f475Smrg	CELL		endExt;		/* " " */
1658d522f475Smrg	CELL		saveStartR;	/* Saved values of raw selection for extend to restore to */
1659d522f475Smrg	CELL		saveEndR;	/* " " */
1660d522f475Smrg	int		startHCoord, endHCoord;
1661d522f475Smrg	int		firstValidRow;	/* Valid rows for selection clipping */
1662d522f475Smrg	int		lastValidRow;	/* " " */
1663d522f475Smrg
1664d522f475Smrg	Atom*		selection_atoms; /* which selections we own */
1665d522f475Smrg	Cardinal	sel_atoms_size;	/*  how many atoms allocated */
1666d522f475Smrg	Cardinal	selection_count; /* how many atoms in use */
1667d522f475Smrg#if OPT_SELECT_REGEX
1668d522f475Smrg	char *		selectExpr[NSELECTUNITS];
1669d522f475Smrg#endif
1670d522f475Smrg	/*
1671d522f475Smrg	 * Input/output state.
1672d522f475Smrg	 */
1673d522f475Smrg	Boolean		input_eight_bits;/* use 8th bit instead of ESC prefix */
1674d522f475Smrg	Boolean		output_eight_bits; /* honor all bits or strip */
1675d522f475Smrg	Boolean		control_eight_bits; /* send CSI as 8-bits */
1676d522f475Smrg	Boolean		backarrow_key;		/* backspace/delete */
1677d522f475Smrg	Boolean		alt_is_not_meta;	/* use both Alt- and Meta-key */
1678d522f475Smrg	Boolean		alt_sends_esc;		/* Alt-key sends ESC prefix */
1679d522f475Smrg	Boolean		meta_sends_esc;		/* Meta-key sends ESC prefix */
1680d522f475Smrg	/*
1681d522f475Smrg	 * Fonts
1682d522f475Smrg	 */
1683d522f475Smrg	Pixmap		menu_item_bitmap;	/* mask for checking items */
1684d522f475Smrg	String		initial_font;
1685d522f475Smrg	String		menu_font_names[NMENUFONTS][fMAX];
1686d522f475Smrg#define MenuFontName(n) menu_font_names[n][fNorm]
1687d522f475Smrg	long		menu_font_sizes[NMENUFONTS];
1688d522f475Smrg	int		menu_font_number;
1689d522f475Smrg#if OPT_CLIP_BOLD
1690d522f475Smrg	Boolean		use_clipping;
1691d522f475Smrg#endif
1692d522f475Smrg	void *		main_cgs_cache;
1693d522f475Smrg#ifndef NO_ACTIVE_ICON
1694d522f475Smrg	void *		icon_cgs_cache;
1695d522f475Smrg#endif
1696d522f475Smrg#if OPT_RENDERFONT
1697d522f475Smrg	XftFont *	renderFontNorm[NMENUFONTS];
1698d522f475Smrg	XftFont *	renderFontBold[NMENUFONTS];
1699d522f475Smrg	XftFont *	renderFontItal[NMENUFONTS];
1700d522f475Smrg	XftFont *	renderWideNorm[NMENUFONTS];
1701d522f475Smrg	XftFont *	renderWideBold[NMENUFONTS];
1702d522f475Smrg	XftFont *	renderWideItal[NMENUFONTS];
1703d522f475Smrg	XftDraw *	renderDraw;
1704d522f475Smrg#endif
1705d522f475Smrg#if OPT_INPUT_METHOD
1706d522f475Smrg	XIM		xim;
1707d522f475Smrg	XFontSet	fs;		/* fontset for XIM preedit */
1708d522f475Smrg	int		fs_ascent;	/* ascent of fs */
1709d522f475Smrg#endif
1710d522f475Smrg	XIC		xic;		/* this is used even without XIM */
1711d522f475Smrg#if OPT_DABBREV
1712d522f475Smrg	int		dabbrev_working;	/* nonzero during dabbrev process */
1713d522f475Smrg	unsigned char	dabbrev_erase_char;	/* used for deleting inserted completion */
1714d522f475Smrg#endif
1715d522f475Smrg	char		tcapbuf[TERMCAP_SIZE];
1716d522f475Smrg#if OPT_TCAP_FKEYS
1717d522f475Smrg	char **		tcap_fkeys;
1718d522f475Smrg	char		tcap_area[TERMCAP_SIZE];
1719d522f475Smrg#endif
1720d522f475Smrg} TScreen;
1721d522f475Smrg
1722d522f475Smrgtypedef struct _TekPart {
1723d522f475Smrg	XFontStruct *	Tfont[TEKNUMFONTS];
1724d522f475Smrg	int		tobaseline[TEKNUMFONTS]; /* top-baseline, each font */
1725d522f475Smrg	char *		initial_font;		/* large, 2, 3, small */
1726d522f475Smrg	char *		gin_terminator_str;	/* ginTerminator resource */
1727d522f475Smrg#if OPT_TOOLBAR
1728d522f475Smrg	TbInfo		tb_info;	/* toolbar information		*/
1729d522f475Smrg#endif
1730d522f475Smrg} TekPart;
1731d522f475Smrg
1732d522f475Smrg/* Tektronix window parameters */
1733d522f475Smrgtypedef struct _TekScreen {
1734d522f475Smrg	GC		TnormalGC;	/* normal painting		*/
1735d522f475Smrg	GC		TcursorGC;	/* normal cursor painting	*/
1736d522f475Smrg
1737d522f475Smrg	Boolean		waitrefresh;	/* postpone refresh		*/
1738d522f475Smrg	TKwin		fullTwin;
1739d522f475Smrg#ifndef NO_ACTIVE_ICON
1740d522f475Smrg	TKwin		iconTwin;
1741d522f475Smrg	TKwin		*whichTwin;
1742d522f475Smrg#endif /* NO_ACTIVE_ICON */
1743d522f475Smrg
1744d522f475Smrg	Cursor		arrow;		/* arrow cursor			*/
1745d522f475Smrg	GC		linepat[TEKNUMLINES]; /* line patterns		*/
1746d522f475Smrg	int		cur_X;		/* current x			*/
1747d522f475Smrg	int		cur_Y;		/* current y			*/
1748d522f475Smrg	Tmodes		cur;		/* current tek modes		*/
1749d522f475Smrg	Tmodes		page;		/* starting tek modes on page	*/
1750d522f475Smrg	int		margin;		/* 0 -> margin 1, 1 -> margin 2	*/
1751d522f475Smrg	int		pen;		/* current Tektronix pen 0=up, 1=dn */
1752d522f475Smrg	char		*TekGIN;	/* nonzero if Tektronix GIN mode*/
1753d522f475Smrg	int		gin_terminator; /* Tek strap option */
1754d522f475Smrg	char		tcapbuf[TERMCAP_SIZE];
1755d522f475Smrg} TekScreen;
1756d522f475Smrg
1757d522f475Smrg#if OPT_READLINE
1758d522f475Smrg#define SCREEN_FLAG(screenp,f)		(1&(screenp)->f)
1759d522f475Smrg#define SCREEN_FLAG_set(screenp,f)	((screenp)->f |= 1)
1760d522f475Smrg#define SCREEN_FLAG_unset(screenp,f)	((screenp)->f &= ~1L)
1761d522f475Smrg#define SCREEN_FLAG_save(screenp,f)	\
1762d522f475Smrg	((screenp)->f = (((screenp)->f)<<1) | SCREEN_FLAG(screenp,f))
1763d522f475Smrg#define SCREEN_FLAG_restore(screenp,f)	((screenp)->f = (((screenp)->f)>>1))
1764d522f475Smrg#else
1765d522f475Smrg#define SCREEN_FLAG(screenp,f)		(0)
1766d522f475Smrg#endif
1767d522f475Smrg
1768d522f475Smrg/* meaning of bits in screen.select flag */
1769d522f475Smrg#define	INWINDOW	01	/* the mouse is in one of the windows */
1770d522f475Smrg#define	FOCUS		02	/* one of the windows is the focus window */
1771d522f475Smrg
1772d522f475Smrg#define MULTICLICKTIME 250	/* milliseconds */
1773d522f475Smrg
1774d522f475Smrgtypedef enum {
1775d522f475Smrg    keyboardIsLegacy,		/* bogus vt220 codes for F1-F4, etc. */
1776d522f475Smrg    keyboardIsDefault,
1777d522f475Smrg    keyboardIsHP,
1778d522f475Smrg    keyboardIsSCO,
1779d522f475Smrg    keyboardIsSun,
1780d522f475Smrg    keyboardIsTermcap,
1781d522f475Smrg    keyboardIsVT220
1782d522f475Smrg} xtermKeyboardType;
1783d522f475Smrg
1784d522f475Smrgtypedef enum {			/* legal values for screen.pointer_mode */
1785d522f475Smrg    pNever = 0,
1786d522f475Smrg    pNoMouse = 1,
1787d522f475Smrg    pAlways = 2
1788d522f475Smrg} pointerModeTypes;
1789d522f475Smrg
1790d522f475Smrgtypedef enum {			/* legal values for screen.utf8_mode */
1791d522f475Smrg    uFalse = 0,
1792d522f475Smrg    uTrue = 1,
1793d522f475Smrg    uAlways = 2,
1794d522f475Smrg    uDefault = 3
1795d522f475Smrg} utf8ModeTypes;
1796d522f475Smrg
1797d522f475Smrg#if OPT_HP_FUNC_KEYS
1798d522f475Smrg#define NAME_HP_KT " hp"
1799d522f475Smrg#else
1800d522f475Smrg#define NAME_HP_KT /*nothing*/
1801d522f475Smrg#endif
1802d522f475Smrg
1803d522f475Smrg#if OPT_SCO_FUNC_KEYS
1804d522f475Smrg#define NAME_SCO_KT " sco"
1805d522f475Smrg#else
1806d522f475Smrg#define NAME_SCO_KT /*nothing*/
1807d522f475Smrg#endif
1808d522f475Smrg
1809d522f475Smrg#if OPT_SUN_FUNC_KEYS
1810d522f475Smrg#define NAME_SUN_KT " sun"
1811d522f475Smrg#else
1812d522f475Smrg#define NAME_SUN_KT /*nothing*/
1813d522f475Smrg#endif
1814d522f475Smrg
1815d522f475Smrg#if OPT_SUNPC_KBD
1816d522f475Smrg#define NAME_VT220_KT " vt220"
1817d522f475Smrg#else
1818d522f475Smrg#define NAME_VT220_KT /*nothing*/
1819d522f475Smrg#endif
1820d522f475Smrg
1821d522f475Smrg#if OPT_TCAP_FKEYS
1822d522f475Smrg#define NAME_TCAP_KT " tcap"
1823d522f475Smrg#else
1824d522f475Smrg#define NAME_TCAP_KT /*nothing*/
1825d522f475Smrg#endif
1826d522f475Smrg
1827d522f475Smrg#define KEYBOARD_TYPES NAME_TCAP_KT NAME_HP_KT NAME_SCO_KT NAME_SUN_KT NAME_VT220_KT
1828d522f475Smrg
1829d522f475Smrg#if OPT_TRACE
1830d522f475Smrgextern	const char * visibleKeyboardType(xtermKeyboardType);
1831d522f475Smrg#endif
1832d522f475Smrg
1833d522f475Smrgtypedef struct
1834d522f475Smrg{
1835d522f475Smrg    int cursor_keys;		/* how to handle cursor-key modifiers */
1836d522f475Smrg    int function_keys;		/* how to handle function-key modifiers */
1837d522f475Smrg    int keypad_keys;		/* how to handle keypad key-modifiers */
1838d522f475Smrg    int other_keys;		/* how to handle other key-modifiers */
1839d522f475Smrg    int string_keys;		/* how to handle string() modifiers */
1840d522f475Smrg} TModify;
1841d522f475Smrg
1842d522f475Smrgtypedef struct
1843d522f475Smrg{
1844d522f475Smrg    xtermKeyboardType type;
1845d522f475Smrg    unsigned flags;
1846d522f475Smrg    char *shell_translations;
1847d522f475Smrg    char *xterm_translations;
1848d522f475Smrg    char *extra_translations;
1849d522f475Smrg#if OPT_INITIAL_ERASE
1850d522f475Smrg    int	reset_DECBKM;		/* reset should set DECBKM */
1851d522f475Smrg#endif
1852d522f475Smrg#if OPT_MOD_FKEYS
1853d522f475Smrg    TModify modify_now;		/* current modifier value */
1854d522f475Smrg    TModify modify_1st;		/* original modifier value, for resets */
1855d522f475Smrg    int format_keys;		/* format of modifyOtherKeys */
1856d522f475Smrg#endif
1857d522f475Smrg} TKeyboard;
1858d522f475Smrg
1859d522f475Smrgtypedef struct {
1860d522f475Smrg    char *f_n;			/* the normal font */
1861d522f475Smrg    char *f_b;			/* the bold font */
1862d522f475Smrg#if OPT_WIDE_CHARS
1863d522f475Smrg    char *f_w;			/* the normal wide font */
1864d522f475Smrg    char *f_wb;			/* the bold wide font */
1865d522f475Smrg#endif
1866d522f475Smrg} VTFontNames;
1867d522f475Smrg
1868d522f475Smrgtypedef struct _Misc {
1869d522f475Smrg    VTFontNames default_font;
1870d522f475Smrg    char *geo_metry;
1871d522f475Smrg    char *T_geometry;
1872d522f475Smrg#if OPT_WIDE_CHARS
1873d522f475Smrg    Boolean cjk_width;		/* true for built-in CJK wcwidth() */
1874d522f475Smrg    Boolean mk_width;		/* true for simpler built-in wcwidth() */
1875d522f475Smrg    int mk_samplesize;
1876d522f475Smrg    int mk_samplepass;
1877d522f475Smrg#endif
1878d522f475Smrg#if OPT_LUIT_PROG
1879d522f475Smrg    Boolean callfilter;		/* true to invoke luit */
1880d522f475Smrg    Boolean use_encoding;	/* true to use -encoding option for luit */
1881d522f475Smrg    char *locale_str;		/* "locale" resource */
1882d522f475Smrg    char *localefilter;		/* path for luit */
1883d522f475Smrg#endif
1884d522f475Smrg#if OPT_INPUT_METHOD
1885d522f475Smrg    char *f_x;			/* font for XIM */
1886d522f475Smrg#endif
1887d522f475Smrg    int limit_resize;
1888d522f475Smrg#ifdef ALLOWLOGGING
1889d522f475Smrg    Boolean log_on;
1890d522f475Smrg#endif
1891d522f475Smrg    Boolean login_shell;
1892d522f475Smrg    Boolean re_verse;
1893d522f475Smrg    Boolean re_verse0;		/* initial value of "-rv" */
1894d522f475Smrg    XtGravity resizeGravity;
1895d522f475Smrg    Boolean reverseWrap;
1896d522f475Smrg    Boolean autoWrap;
1897d522f475Smrg    Boolean logInhibit;
1898d522f475Smrg    Boolean signalInhibit;
1899d522f475Smrg#if OPT_TEK4014
1900d522f475Smrg    Boolean tekInhibit;
1901d522f475Smrg    Boolean tekSmall;		/* start tek window in small size */
1902d522f475Smrg    Boolean TekEmu;		/* true if Tektronix emulation	*/
1903d522f475Smrg    Boolean Tshow;		/* Tek window showing		*/
1904d522f475Smrg#endif
1905d522f475Smrg    Boolean scrollbar;
1906d522f475Smrg#ifdef SCROLLBAR_RIGHT
1907d522f475Smrg    Boolean useRight;
1908d522f475Smrg#endif
1909d522f475Smrg    Boolean titeInhibit;
1910d522f475Smrg    Boolean tiXtraScroll;
1911d522f475Smrg    Boolean appcursorDefault;
1912d522f475Smrg    Boolean appkeypadDefault;
1913d522f475Smrg#if OPT_INPUT_METHOD
1914d522f475Smrg    char* input_method;
1915d522f475Smrg    char* preedit_type;
1916d522f475Smrg    Boolean open_im;
1917d522f475Smrg    Boolean cannot_im;		/* true if we cannot use input-method */
1918d522f475Smrg#endif
1919d522f475Smrg    Boolean dynamicColors;
1920d522f475Smrg    Boolean shared_ic;
1921d522f475Smrg#ifndef NO_ACTIVE_ICON
1922d522f475Smrg    Boolean active_icon;	/* use application icon window  */
1923d522f475Smrg    unsigned icon_border_width;
1924d522f475Smrg    Pixel icon_border_pixel;
1925d522f475Smrg#endif /* NO_ACTIVE_ICON */
1926d522f475Smrg#if OPT_DEC_SOFTFONT
1927d522f475Smrg    Boolean font_loadable;
1928d522f475Smrg#endif
1929d522f475Smrg#if OPT_SHIFT_FONTS
1930d522f475Smrg    Boolean shift_fonts;	/* true if we interpret fontsize-shifting */
1931d522f475Smrg#endif
1932d522f475Smrg#if OPT_SUNPC_KBD
1933d522f475Smrg    int ctrl_fkeys;		/* amount to add to XK_F1 for ctrl modifier */
1934d522f475Smrg#endif
1935d522f475Smrg#if OPT_NUM_LOCK
1936d522f475Smrg    Boolean real_NumLock;	/* true if we treat NumLock key specially */
1937d522f475Smrg    Boolean alwaysUseMods;	/* true if we always want f-key modifiers */
1938d522f475Smrg    unsigned long num_lock;	/* modifier for Num_Lock */
1939d522f475Smrg    unsigned long alt_mods;	/* modifier for Alt_L or Alt_R */
1940d522f475Smrg    unsigned long meta_mods;	/* modifier for Meta_L or Meta_R */
1941d522f475Smrg    unsigned long other_mods;	/* conflicting modifiers, e.g., Mode_Switch */
1942d522f475Smrg#endif
1943d522f475Smrg#if OPT_RENDERFONT
1944d522f475Smrg    char *face_name;
1945d522f475Smrg    char *face_wide_name;
1946d522f475Smrg    float face_size[NMENUFONTS];
1947d522f475Smrg    Boolean render_font;
1948d522f475Smrg#endif
1949d522f475Smrg} Misc;
1950d522f475Smrg
1951d522f475Smrgtypedef struct {int foo;} XtermClassPart, TekClassPart;
1952d522f475Smrg
1953d522f475Smrgtypedef struct _XtermClassRec {
1954d522f475Smrg    CoreClassPart  core_class;
1955d522f475Smrg    XtermClassPart xterm_class;
1956d522f475Smrg} XtermClassRec;
1957d522f475Smrg
1958d522f475Smrgextern WidgetClass xtermWidgetClass;
1959d522f475Smrg
1960d522f475Smrg#define IsXtermWidget(w) (XtClass(w) == xtermWidgetClass)
1961d522f475Smrg
1962d522f475Smrg#if OPT_TEK4014
1963d522f475Smrgtypedef struct _TekClassRec {
1964d522f475Smrg    CoreClassPart core_class;
1965d522f475Smrg    TekClassPart tek_class;
1966d522f475Smrg} TekClassRec;
1967d522f475Smrg
1968d522f475Smrgextern WidgetClass tekWidgetClass;
1969d522f475Smrg
1970d522f475Smrg#define IsTekWidget(w) (XtClass(w) == tekWidgetClass)
1971d522f475Smrg
1972d522f475Smrg#endif
1973d522f475Smrg
1974d522f475Smrg/* define masks for keyboard.flags */
1975d522f475Smrg#define MODE_KAM	xBIT(0)	/* keyboard action mode */
1976d522f475Smrg#define MODE_DECKPAM	xBIT(1)	/* keypad application mode */
1977d522f475Smrg#define MODE_DECCKM	xBIT(2)	/* cursor keys */
1978d522f475Smrg#define MODE_SRM	xBIT(3)	/* send-receive mode */
1979d522f475Smrg#define MODE_DECBKM	xBIT(4)	/* backarrow */
1980d522f475Smrg
1981d522f475Smrg
1982d522f475Smrg#define N_MARGINBELL	10
1983d522f475Smrg
1984d522f475Smrg#define TAB_BITS_SHIFT	5	/* FIXME: 2**5 == 32 (should derive) */
1985d522f475Smrg#define TAB_BITS_WIDTH	(1 << TAB_BITS_SHIFT)
1986d522f475Smrg#define TAB_ARRAY_SIZE	(1024 / TAB_BITS_WIDTH)
1987d522f475Smrg#define MAX_TABS	(TAB_BITS_WIDTH * TAB_ARRAY_SIZE)
1988d522f475Smrg
1989d522f475Smrgtypedef unsigned Tabs [TAB_ARRAY_SIZE];
1990d522f475Smrg
1991d522f475Smrgtypedef struct _XtermWidgetRec {
1992d522f475Smrg    CorePart	core;
1993d522f475Smrg    XSizeHints	hints;
1994d522f475Smrg    Bool	init_menu;
1995d522f475Smrg    TKeyboard	keyboard;	/* terminal keyboard		*/
1996d522f475Smrg    TScreen	screen;		/* terminal screen		*/
1997d522f475Smrg    unsigned	flags;		/* mode flags			*/
1998d522f475Smrg    int		cur_foreground; /* current foreground color	*/
1999d522f475Smrg    int		cur_background; /* current background color	*/
2000d522f475Smrg    Pixel	dft_foreground; /* default foreground color	*/
2001d522f475Smrg    Pixel	dft_background; /* default background color	*/
2002d522f475Smrg#if OPT_ISO_COLORS
2003d522f475Smrg    int		sgr_foreground; /* current SGR foreground color */
2004d522f475Smrg    int		sgr_background; /* current SGR background color */
2005d522f475Smrg    Boolean	sgr_extended;	/* SGR set with extended codes? */
2006d522f475Smrg#endif
2007d522f475Smrg#if OPT_ISO_COLORS || OPT_DEC_CHRSET || OPT_WIDE_CHARS
2008d522f475Smrg    int		num_ptrs;	/* number of pointers per row in 'ScrnBuf' */
2009d522f475Smrg#endif
2010d522f475Smrg    unsigned	initflags;	/* initial mode flags		*/
2011d522f475Smrg    Tabs	tabs;		/* tabstops of the terminal	*/
2012d522f475Smrg    Misc	misc;		/* miscellaneous parameters	*/
2013d522f475Smrg} XtermWidgetRec, *XtermWidget;
2014d522f475Smrg
2015d522f475Smrg#if OPT_TEK4014
2016d522f475Smrgtypedef struct _TekWidgetRec {
2017d522f475Smrg    CorePart	core;
2018d522f475Smrg    TekPart	tek;		/* contains resources */
2019d522f475Smrg    TekScreen	screen;		/* contains working data (no resources) */
2020d522f475Smrg    Bool	init_menu;
2021d522f475Smrg    XSizeHints	hints;
2022d522f475Smrg} TekWidgetRec, *TekWidget;
2023d522f475Smrg#endif /* OPT_TEK4014 */
2024d522f475Smrg
2025d522f475Smrg/*
2026d522f475Smrg * terminal flags
2027d522f475Smrg * There are actually two namespaces mixed together here.
2028d522f475Smrg * One is the set of flags that can go in screen->visbuf attributes
2029d522f475Smrg * and which must fit in a char (see OFF_ATTRS).
2030d522f475Smrg * The other is the global setting stored in
2031d522f475Smrg * term->flags and screen->save_modes.  This need only fit in an unsigned.
2032d522f475Smrg */
2033d522f475Smrg
2034d522f475Smrg#define AttrBIT(n)	xBIT(n)		/* text-attributes */
2035d522f475Smrg#define DrawBIT(n)	xBIT(n + 8)	/* drawXtermText flags */
2036d522f475Smrg#define MiscBIT(n)	xBIT(n + 16)	/* miscellaneous state flags */
2037d522f475Smrg
2038d522f475Smrg/* global flags and character flags (visible character attributes) */
2039d522f475Smrg#define INVERSE		AttrBIT(0)	/* invert the characters to be output */
2040d522f475Smrg#define UNDERLINE	AttrBIT(1)	/* true if underlining */
2041d522f475Smrg#define BOLD		AttrBIT(2)
2042d522f475Smrg#define BLINK		AttrBIT(3)
2043d522f475Smrg/* global flags (also character attributes) */
2044d522f475Smrg#define BG_COLOR	AttrBIT(4)	/* true if background set */
2045d522f475Smrg#define FG_COLOR	AttrBIT(5)	/* true if foreground set */
2046d522f475Smrg
2047d522f475Smrg/* character flags (internal attributes) */
2048d522f475Smrg#define PROTECTED	AttrBIT(6)	/* a character that cannot be erased */
2049d522f475Smrg#define CHARDRAWN	AttrBIT(7)	/* a character has been drawn here on
2050d522f475Smrg					   the screen.  Used to distinguish
2051d522f475Smrg					   blanks from empty parts of the
2052d522f475Smrg					   screen when selecting */
2053d522f475Smrg
2054d522f475Smrg/* The following attributes are used in the argument of drawXtermText()  */
2055d522f475Smrg#define NOBACKGROUND	DrawBIT(0)	/* Used for overstrike */
2056d522f475Smrg#define NOTRANSLATION	DrawBIT(1)	/* No scan for chars missing in font */
2057d522f475Smrg#define DOUBLEWFONT	DrawBIT(2)	/* The actual X-font is double-width */
2058d522f475Smrg#define DOUBLEHFONT	DrawBIT(3)	/* The actual X-font is double-height */
2059d522f475Smrg#define CHARBYCHAR	DrawBIT(4)	/* Draw chars one-by-one */
2060d522f475Smrg
2061d522f475Smrg/* The following attribute is used in the argument of xtermSpecialFont etc */
2062d522f475Smrg#define NORESOLUTION	DrawBIT(5)	/* find the font without resolution */
2063d522f475Smrg
2064d522f475Smrg/*
2065d522f475Smrg * Other flags
2066d522f475Smrg */
2067d522f475Smrg#define WRAPAROUND	MiscBIT(0)	/* true if auto wraparound mode */
2068d522f475Smrg#define	REVERSEWRAP	MiscBIT(1)	/* true if reverse wraparound mode */
2069d522f475Smrg#define REVERSE_VIDEO	MiscBIT(2)	/* true if screen white on black */
2070d522f475Smrg#define LINEFEED	MiscBIT(3)	/* true if in auto linefeed mode */
2071d522f475Smrg#define ORIGIN		MiscBIT(4)	/* true if in origin mode */
2072d522f475Smrg#define INSERT		MiscBIT(5)	/* true if in insert mode */
2073d522f475Smrg#define SMOOTHSCROLL	MiscBIT(6)	/* true if in smooth scroll mode */
2074d522f475Smrg#define IN132COLUMNS	MiscBIT(7)	/* true if in 132 column mode */
2075d522f475Smrg#define INVISIBLE	MiscBIT(8)	/* true if writing invisible text */
2076d522f475Smrg#define NATIONAL        MiscBIT(9)	/* true if writing national charset */
2077d522f475Smrg
2078d522f475Smrg/*
2079d522f475Smrg * Groups of attributes
2080d522f475Smrg */
2081d522f475Smrg			/* mask for video-attributes only */
2082d522f475Smrg#define SGR_MASK	(BOLD | BLINK | UNDERLINE | INVERSE)
2083d522f475Smrg
2084d522f475Smrg			/* mask: user-visible attributes */
2085d522f475Smrg#define	ATTRIBUTES	(SGR_MASK | BG_COLOR | FG_COLOR | INVISIBLE | PROTECTED)
2086d522f475Smrg
2087d522f475Smrg/* The toplevel-call to drawXtermText() should have text-attributes guarded: */
2088d522f475Smrg#define DRAWX_MASK	(ATTRIBUTES | CHARDRAWN)
2089d522f475Smrg
2090d522f475Smrg#if OPT_BLINK_TEXT
2091d522f475Smrg#define BOLDATTR(screen) (BOLD | ((screen)->blink_as_bold ? BLINK : 0))
2092d522f475Smrg#else
2093d522f475Smrg#define BOLDATTR(screen) (BOLD | BLINK)
2094d522f475Smrg#endif
2095d522f475Smrg
2096d522f475Smrg/*
2097d522f475Smrg * Per-line flags
2098d522f475Smrg */
2099d522f475Smrg#define LINEWRAPPED	0x01	/* used once per line to indicate that it wraps
2100d522f475Smrg				 * onto the next line so we can tell the
2101d522f475Smrg				 * difference between lines that have wrapped
2102d522f475Smrg				 * around and lines that have ended naturally
2103d522f475Smrg				 * with a CR at column max_col.
2104d522f475Smrg				 */
2105d522f475Smrg
2106d522f475Smrg#if OPT_ZICONBEEP || OPT_TOOLBAR
2107d522f475Smrg#define HANDLE_STRUCT_NOTIFY 1
2108d522f475Smrg#else
2109d522f475Smrg#define HANDLE_STRUCT_NOTIFY 0
2110d522f475Smrg#endif
2111d522f475Smrg
2112d522f475Smrg/*
2113d522f475Smrg * If we've set protected attributes with the DEC-style DECSCA, then we'll have
2114d522f475Smrg * to use DECSED or DECSEL to erase preserving protected text.  (The normal ED,
2115d522f475Smrg * EL won't preserve protected-text).  If we've used SPA, then normal ED and EL
2116d522f475Smrg * will preserve protected-text.  To keep things simple, just remember the last
2117d522f475Smrg * control that was used to begin protected-text, and use that to determine how
2118d522f475Smrg * erases are performed (otherwise we'd need 2 bits per protected character).
2119d522f475Smrg */
2120d522f475Smrg#define OFF_PROTECT 0
2121d522f475Smrg#define DEC_PROTECT 1
2122d522f475Smrg#define ISO_PROTECT 2
2123d522f475Smrg
2124d522f475Smrg#define TScreenOf(xw)	(&(xw)->screen)
2125d522f475Smrg#define TekScreenOf(tw) (&(tw)->screen)
2126d522f475Smrg
2127d522f475Smrg#ifdef SCROLLBAR_RIGHT
2128d522f475Smrg#define OriginX(screen) (((term->misc.useRight)?0:ScrollbarWidth(screen)) + screen->border)
2129d522f475Smrg#else
2130d522f475Smrg#define OriginX(screen) (ScrollbarWidth(screen) + screen->border)
2131d522f475Smrg#endif
2132d522f475Smrg
2133d522f475Smrg#define OriginY(screen) (screen->border)
2134d522f475Smrg
2135d522f475Smrg#define CursorMoved(screen) \
2136d522f475Smrg		((screen)->cursor_moved || \
2137d522f475Smrg		    ((screen)->cursorp.col != (screen)->cur_col || \
2138d522f475Smrg		     (screen)->cursorp.row != (screen)->cur_row))
2139d522f475Smrg
2140d522f475Smrg#define CursorX(screen,col) ((col) * FontWidth(screen) + OriginX(screen))
2141d522f475Smrg#define CursorY(screen,row) ((INX2ROW(screen, row) * FontHeight(screen)) \
2142d522f475Smrg			+ screen->border)
2143d522f475Smrg
2144d522f475Smrg/*
2145d522f475Smrg * These definitions depend on whether xterm supports active-icon.
2146d522f475Smrg */
2147d522f475Smrg#ifndef NO_ACTIVE_ICON
2148d522f475Smrg#define IsIconWin(screen,win)	((win) == &(screen)->iconVwin)
2149d522f475Smrg#define IsIcon(screen)		(WhichVWin(screen) == &(screen)->iconVwin)
2150d522f475Smrg#define WhichVWin(screen)	((screen)->whichVwin)
2151d522f475Smrg#define WhichTWin(screen)	((screen)->whichTwin)
2152d522f475Smrg
2153d522f475Smrg#define WhichVFont(screen,name)	(IsIcon(screen) ? (screen)->fnt_icon.fs \
2154d522f475Smrg						: (screen)->name)
2155d522f475Smrg#define FontAscent(screen)	(IsIcon(screen) ? (screen)->fnt_icon.fs->ascent \
2156d522f475Smrg						: WhichVWin(screen)->f_ascent)
2157d522f475Smrg#define FontDescent(screen)	(IsIcon(screen) ? (screen)->fnt_icon.fs->descent \
2158d522f475Smrg						: WhichVWin(screen)->f_descent)
2159d522f475Smrg#else /* NO_ACTIVE_ICON */
2160d522f475Smrg
2161d522f475Smrg#define IsIconWin(screen,win)	(False)
2162d522f475Smrg#define IsIcon(screen)		(False)
2163d522f475Smrg#define WhichVWin(screen)	(&((screen)->fullVwin))
2164d522f475Smrg#define WhichTWin(screen)	(&((screen)->fullTwin))
2165d522f475Smrg
2166d522f475Smrg#define WhichVFont(screen,name)	((screen)->name)
2167d522f475Smrg#define FontAscent(screen)	WhichVWin(screen)->f_ascent
2168d522f475Smrg#define FontDescent(screen)	WhichVWin(screen)->f_descent
2169d522f475Smrg
2170d522f475Smrg#endif /* NO_ACTIVE_ICON */
2171d522f475Smrg
2172d522f475Smrg#define okFont(font) ((font) != 0 && (font)->fid != 0)
2173d522f475Smrg
2174d522f475Smrg/*
2175d522f475Smrg * Macro to check if we are iconified; do not use render for that case.
2176d522f475Smrg */
2177d522f475Smrg#define UsingRenderFont(xw)	((xw)->misc.render_font && !IsIcon(&((xw)->screen)))
2178d522f475Smrg
2179d522f475Smrg/*
2180d522f475Smrg * These definitions do not depend on whether xterm supports active-icon.
2181d522f475Smrg */
2182d522f475Smrg#define VWindow(screen)		WhichVWin(screen)->window
2183d522f475Smrg#define VShellWindow		XtWindow(SHELL_OF(term))
2184d522f475Smrg#define TWindow(screen)		WhichTWin(screen)->window
2185d522f475Smrg#define TShellWindow		XtWindow(SHELL_OF(tekWidget))
2186d522f475Smrg
2187d522f475Smrg#define Width(screen)		WhichVWin(screen)->width
2188d522f475Smrg#define Height(screen)		WhichVWin(screen)->height
2189d522f475Smrg#define FullWidth(screen)	WhichVWin(screen)->fullwidth
2190d522f475Smrg#define FullHeight(screen)	WhichVWin(screen)->fullheight
2191d522f475Smrg#define FontWidth(screen)	WhichVWin(screen)->f_width
2192d522f475Smrg#define FontHeight(screen)	WhichVWin(screen)->f_height
2193d522f475Smrg
2194d522f475Smrg#define NormalFont(screen)	WhichVFont(screen, fnts[fNorm].fs)
2195d522f475Smrg#define BoldFont(screen)	WhichVFont(screen, fnts[fBold].fs)
2196d522f475Smrg
2197d522f475Smrg#if OPT_WIDE_CHARS
2198d522f475Smrg#define NormalWFont(screen)	WhichVFont(screen, fnts[fWide].fs)
2199d522f475Smrg#define BoldWFont(screen)	WhichVFont(screen, fnts[fWBold].fs)
2200d522f475Smrg#endif
2201d522f475Smrg
2202d522f475Smrg#define ScrollbarWidth(screen)	WhichVWin(screen)->sb_info.width
2203d522f475Smrg
2204d522f475Smrg#define NormalGC(w,sp)		getCgsGC(w, WhichVWin(sp), gcNorm)
2205d522f475Smrg#define ReverseGC(w,sp)		getCgsGC(w, WhichVWin(sp), gcNormReverse)
2206d522f475Smrg#define NormalBoldGC(w,sp)	getCgsGC(w, WhichVWin(sp), gcBold)
2207d522f475Smrg#define ReverseBoldGC(w,sp)	getCgsGC(w, WhichVWin(sp), gcBoldReverse)
2208d522f475Smrg
2209d522f475Smrg#define TWidth(screen)		WhichTWin(screen)->width
2210d522f475Smrg#define THeight(screen)		WhichTWin(screen)->height
2211d522f475Smrg#define TFullWidth(screen)	WhichTWin(screen)->fullwidth
2212d522f475Smrg#define TFullHeight(screen)	WhichTWin(screen)->fullheight
2213d522f475Smrg#define TekScale(screen)	WhichTWin(screen)->tekscale
2214d522f475Smrg
2215d522f475Smrg#define BorderWidth(w)		((w)->core.border_width)
2216d522f475Smrg#define BorderPixel(w)		((w)->core.border_pixel)
2217d522f475Smrg
2218d522f475Smrg#if OPT_TOOLBAR
2219d522f475Smrg#define ToolbarHeight(w)	((resource.toolBar) \
2220d522f475Smrg				 ? (term->VT100_TB_INFO(menu_height) \
2221d522f475Smrg				  + term->VT100_TB_INFO(menu_border) * 2) \
2222d522f475Smrg				 : 0)
2223d522f475Smrg#else
2224d522f475Smrg#define ToolbarHeight(w) 0
2225d522f475Smrg#endif
2226d522f475Smrg
2227d522f475Smrg#if OPT_TEK4014
2228d522f475Smrg#define TEK_LINK_BLOCK_SIZE 1024
2229d522f475Smrg
2230d522f475Smrgtypedef struct Tek_Link
2231d522f475Smrg{
2232d522f475Smrg	struct Tek_Link	*next;	/* pointer to next TekLink in list
2233d522f475Smrg				   NULL <=> this is last TekLink */
2234d522f475Smrg	unsigned short fontsize;/* character size, 0-3 */
2235d522f475Smrg	unsigned short count;	/* number of chars in data */
2236d522f475Smrg	char *ptr;		/* current pointer into data */
2237d522f475Smrg	char data [TEK_LINK_BLOCK_SIZE];
2238d522f475Smrg} TekLink;
2239d522f475Smrg#endif /* OPT_TEK4014 */
2240d522f475Smrg
2241d522f475Smrg/* flags for cursors */
2242d522f475Smrg#define	OFF		0
2243d522f475Smrg#define	ON		1
2244d522f475Smrg#define	BLINKED_OFF	2
2245d522f475Smrg#define	CLEAR		0
2246d522f475Smrg#define	TOGGLE		1
2247d522f475Smrg
2248d522f475Smrg/* flags for inhibit */
2249d522f475Smrg#ifdef ALLOWLOGGING
2250d522f475Smrg#define	I_LOG		0x01
2251d522f475Smrg#endif
2252d522f475Smrg#define	I_SIGNAL	0x02
2253d522f475Smrg#define	I_TEK		0x04
2254d522f475Smrg
2255d522f475Smrg/***====================================================================***/
2256d522f475Smrg
2257d522f475Smrg#if OPT_TRACE
2258d522f475Smrg#undef NDEBUG			/* turn on assert's */
2259d522f475Smrg#else
2260d522f475Smrg#ifndef NDEBUG
2261d522f475Smrg#define NDEBUG			/* not debugging, don't do assert's */
2262d522f475Smrg#endif
2263d522f475Smrg#endif
2264d522f475Smrg
22650d92cbfdSchristos#include <trace.h>
22660d92cbfdSchristos
2267d522f475Smrg#ifndef TRACE
2268d522f475Smrg#define TRACE(p) /*nothing*/
2269d522f475Smrg#endif
2270d522f475Smrg
2271d522f475Smrg#ifndef TRACE_ARGV
2272d522f475Smrg#define TRACE_ARGV(tag,argv) /*nothing*/
2273d522f475Smrg#endif
2274d522f475Smrg
2275d522f475Smrg#ifndef TRACE_CHILD
2276d522f475Smrg#define TRACE_CHILD /*nothing*/
2277d522f475Smrg#endif
2278d522f475Smrg
2279d522f475Smrg#ifndef TRACE_HINTS
2280d522f475Smrg#define TRACE_HINTS(hints) /*nothing*/
2281d522f475Smrg#endif
2282d522f475Smrg
2283d522f475Smrg#ifndef TRACE_IDS
2284d522f475Smrg#define TRACE_IDS /*nothing*/
2285d522f475Smrg#endif
2286d522f475Smrg
2287d522f475Smrg#ifndef TRACE_OPTS
2288d522f475Smrg#define TRACE_OPTS(opts,ress,lens) /*nothing*/
2289d522f475Smrg#endif
2290d522f475Smrg
2291d522f475Smrg#ifndef TRACE_TRANS
2292d522f475Smrg#define TRACE_TRANS(name,w) /*nothing*/
2293d522f475Smrg#endif
2294d522f475Smrg
2295d522f475Smrg#ifndef TRACE_WM_HINTS
2296d522f475Smrg#define TRACE_WM_HINTS(w) /*nothing*/
2297d522f475Smrg#endif
2298d522f475Smrg
2299d522f475Smrg#ifndef TRACE_XRES
2300d522f475Smrg#define TRACE_XRES() /*nothing*/
2301d522f475Smrg#endif
2302d522f475Smrg
2303d522f475Smrg#ifndef TRACE2
2304d522f475Smrg#define TRACE2(p) /*nothing*/
2305d522f475Smrg#endif
2306d522f475Smrg
2307d522f475Smrg#endif /* included_ptyx_h */
2308