xterm.h revision 492d43a5
1/* $XTermId: xterm.h,v 1.635 2010/10/12 08:55:47 tom Exp $ */
2
3/************************************************************
4
5Copyright 1999-2009,2010 by Thomas E. Dickey
6
7                        All Rights Reserved
8
9Permission is hereby granted, free of charge, to any person obtaining a
10copy of this software and associated documentation files (the
11"Software"), to deal in the Software without restriction, including
12without limitation the rights to use, copy, modify, merge, publish,
13distribute, sublicense, and/or sell copies of the Software, and to
14permit persons to whom the Software is furnished to do so, subject to
15the following conditions:
16
17The above copyright notice and this permission notice shall be included
18in all copies or substantial portions of the Software.
19
20THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
21OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
23IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
24CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
25TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
26SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27
28Except as contained in this notice, the name(s) of the above copyright
29holders shall not be used in advertising or otherwise to promote the
30sale, use or other dealings in this Software without prior written
31authorization.
32
33********************************************************/
34
35/*
36 * Common/useful definitions for XTERM application.
37 *
38 * This is also where we put the fallback definitions if we do not build using
39 * the configure script.
40 */
41#ifndef included_xterm_h
42#define included_xterm_h
43
44#ifdef HAVE_CONFIG_H
45#include <xtermcfg.h>
46#endif
47
48#ifndef GCC_UNUSED
49#define GCC_UNUSED		/* nothing */
50#endif
51
52#ifndef GCC_NORETURN
53#define GCC_NORETURN		/* nothing */
54#endif
55
56#if defined(__GNUC__) && defined(_FORTIFY_SOURCE)
57#define USE_IGNORE_RC
58#define IGNORE_RC(func) ignore_unused = (int) func
59#else
60#define IGNORE_RC(func) (void) func
61#endif /* gcc workarounds */
62
63#include <X11/Xos.h>
64
65#ifndef HAVE_CONFIG_H
66
67#define HAVE_LIB_XAW 1
68
69#ifdef CSRG_BASED
70/* Get definition of BSD */
71#include <sys/param.h>
72#endif
73
74#ifndef DFT_TERMTYPE
75#define DFT_TERMTYPE "xterm"
76#endif
77
78#ifndef X_NOT_POSIX
79#define HAVE_WAITPID 1
80#define HAVE_SYS_WAIT_H 1
81#define HAVE_UNISTD_H 1
82#endif
83
84#define HAVE_STDLIB_H 1
85
86#if defined(sun)
87/* errno is declared in <errno.h> */
88#else
89#define DECL_ERRNO 1
90#endif
91
92#undef DECL_PTSNAME		/* ptsname() is normally in stdlib.h */
93
94#ifndef NOPUTENV
95#define HAVE_PUTENV 1
96#endif
97
98#if defined(CSRG_BASED) || defined(__GNU__)
99#define USE_POSIX_TERMIOS 1
100#endif
101
102#ifdef __NetBSD__
103#if __NetBSD_Version__ >= 106030000	/* 1.6C */
104#define BSD_UTMPX 1
105#define ut_xtime ut_tv.tv_sec
106#endif
107#endif
108
109#if defined(hpux) && !defined(__hpux)
110#define __hpux 1		/* HPUX 11.0 does not define this */
111#endif
112
113#if !defined(__SCO__) && (defined(SCO) || defined(sco) || defined(SCO325))
114#define __SCO__ 1
115#endif
116
117#ifdef USE_POSIX_TERMIOS
118#define HAVE_TERMIOS_H 1
119#define HAVE_TCGETATTR 1
120#endif
121
122#if defined(__UNIXOS2__) || defined(__SCO__) || defined(__UNIXWARE__)
123#define USE_TERMCAP 1
124#endif
125
126#if defined(UTMP)
127#define HAVE_UTMP 1
128#endif
129
130#if (defined(__MVS__) || defined(SVR4) || defined(__SCO__) || defined(BSD_UTMPX)) && !defined(__CYGWIN__)
131#define UTMPX_FOR_UTMP 1
132#endif
133
134#if !defined(ISC) && !defined(__QNX__)
135#define HAVE_UTMP_UT_HOST 1
136#endif
137
138#if defined(UTMPX_FOR_UTMP) && !(defined(__MVS__) || defined(__hpux))
139#define HAVE_UTMP_UT_SESSION 1
140#endif
141
142#if !(defined(linux) && (!defined(__GLIBC__) || (__GLIBC__ < 2))) && !defined(SVR4)
143#define ut_xstatus ut_exit.e_exit
144#endif
145
146#if defined(SVR4) || defined(__SCO__) || defined(BSD_UTMPX) || (defined(linux) && defined(__GLIBC__) && (__GLIBC__ >= 2) && !(defined(__powerpc__) && (__GLIBC__ == 2) && (__GLIBC_MINOR__ == 0)))
147#define HAVE_UTMP_UT_XTIME 1
148#endif
149
150#if defined(linux) || defined(__CYGWIN__)
151#define USE_LASTLOG
152#define HAVE_LASTLOG_H
153#define USE_STRUCT_LASTLOG
154#elif defined(BSD) && (BSD >= 199103)
155#ifdef BSD_UTMPX
156#define USE_LASTLOGX
157#else
158#define USE_LASTLOG
159#define USE_STRUCT_LASTLOG
160#endif
161#endif
162
163#if defined(__OpenBSD__)
164#define DEFDELETE_DEL True
165#define DEF_BACKARO_ERASE True
166#define DEF_INITIAL_ERASE True
167#endif
168
169#if defined(__SCO__) || defined(__UNIXWARE__)
170#define DEFDELETE_DEL True
171#define OPT_SCO_FUNC_KEYS 1
172#endif
173
174#if defined(__SCO__) || defined(SVR4) || defined(_POSIX_SOURCE) || defined(__QNX__) || defined(__hpux) || (defined(BSD) && (BSD >= 199103)) || defined(__CYGWIN__)
175#define USE_POSIX_WAIT
176#endif
177
178#if defined(AIXV3) || defined(CRAY) || defined(__SCO__) || defined(SVR4) || (defined(SYSV) && defined(i386)) || defined(__MVS__) || defined(__hpux) || defined(__osf__) || defined(linux) || defined(macII) || defined(BSD_UTMPX)
179#define USE_SYSV_UTMP
180#endif
181
182#if defined(__GNU__) || defined(__MVS__) || defined(__osf__)
183#define USE_TTY_GROUP
184#endif
185
186#if defined(__CYGWIN__)
187#define HAVE_NCURSES_TERM_H 1
188#endif
189
190#ifdef __osf__
191#define TTY_GROUP_NAME "terminal"
192#endif
193
194#if defined(__MVS__)
195#undef ut_xstatus
196#define ut_name ut_user
197#define ut_xstatus ut_exit.ut_e_exit
198#define ut_xtime ut_tv.tv_sec
199#endif
200
201#if defined(ut_xstatus)
202#define HAVE_UTMP_UT_XSTATUS 1
203#endif
204
205#if defined(XKB)
206#define HAVE_XKB_BELL_EXT 1
207#endif
208
209#if (defined(SVR4) && !defined(__CYGWIN__)) || defined(linux) || (defined(BSD) && (BSD >= 199103))
210#define HAVE_POSIX_SAVED_IDS
211#endif
212
213#endif /* HAVE_CONFIG_H */
214
215#ifndef HAVE_X11_DECKEYSYM_H
216#define HAVE_X11_DECKEYSYM_H 1
217#endif
218
219#ifndef HAVE_X11_SUNKEYSYM_H
220#define HAVE_X11_SUNKEYSYM_H 1
221#endif
222
223#ifndef HAVE_X11_XF86KEYSYM_H
224#define HAVE_X11_XF86KEYSYM_H 0
225#endif
226
227/***====================================================================***/
228
229/* if compiling with gcc -ansi -pedantic, we must fix POSIX definitions */
230#if defined(SVR4) && defined(sun)
231#ifndef __EXTENSIONS__
232#define __EXTENSIONS__ 1
233#endif
234#ifndef _POSIX_C_SOURCE
235#define _POSIX_C_SOURCE 1
236#endif
237#endif
238
239/***====================================================================***/
240
241#ifdef HAVE_STDLIB_H
242#include <stdlib.h>
243#else
244extern char *calloc();
245extern char *getenv();
246extern char *malloc();
247extern char *realloc();
248extern void exit();
249extern void free();
250#endif
251
252#ifdef HAVE_UNISTD_H
253#include <unistd.h>
254#endif
255
256#ifdef HAVE_SYS_WAIT_H
257#include <sys/wait.h>
258#endif
259
260#include <errno.h>
261#if defined(DECL_ERRNO) && !defined(errno)
262extern int errno;
263#endif
264
265/*
266 * FIXME:  Toggling logging from xterm hangs under Linux 2.0.29 with libc5 if
267 * we use 'waitpid()', while 'wait()' seems to work properly.
268 */
269#ifdef linux
270#undef HAVE_WAITPID
271#endif
272
273#ifndef OPT_WIDE_CHARS
274#define OPT_WIDE_CHARS 0
275#endif
276
277#if OPT_WIDE_CHARS
278#define HIDDEN_CHAR 0xffff
279#endif
280
281/***====================================================================***/
282
283#include <proto.h>
284#include <ptyx.h>
285
286#if (XtSpecificationRelease >= 6) && !defined(NO_XPOLL_H) && !defined(sun)
287#include <X11/Xpoll.h>
288#define USE_XPOLL_H 1
289#else
290#define Select(n,r,w,e,t) select(n,(fd_set*)r,(fd_set*)w,(fd_set*)e,(struct timeval *)t)
291#define XFD_COPYSET(src,dst) memcpy((dst)->fds_bits, (src)->fds_bits, sizeof(fd_set))
292#if defined(__MVS__) && !defined(TIME_WITH_SYS_TIME)
293#define TIME_WITH_SYS_TIME
294#endif
295#endif
296
297#ifdef TIME_WITH_SYS_TIME
298# include <sys/time.h>
299# include <time.h>
300#else
301# ifdef HAVE_SYS_TIME_H
302#  include <sys/time.h>
303# else
304#  include <time.h>
305# endif
306#endif
307
308/* these may be needed for sig_atomic_t */
309#include <sys/types.h>
310#include <signal.h>
311
312#ifdef USE_SYS_SELECT_H
313
314#if defined(USE_XPOLL_H) && defined(AIXV3) && defined(NFDBITS)
315#undef NFDBITS			/* conflict between X11/Xpoll.h and sys/select.h */
316#endif
317
318#include <sys/select.h>
319
320#endif /* USE_SYS_SELECT_H */
321
322#include <setjmp.h>
323
324#if defined(__UNIXOS2__) && !defined(XTERM_MAIN)
325#define environ gblenvp		/* circumvent a bug */
326#endif
327
328#if !defined(VMS) && !(defined(linux) && defined(__USE_GNU)) && !defined(__hpux) && !defined(_ALL_SOURCE) && !defined(__osf__)
329extern char **environ;
330#endif
331
332#define XK_Fn(n)	(XK_F1 + (n) - 1)
333
334#define Maybe		2
335
336/***====================================================================***/
337
338#define XtNallowC1Printable	"allowC1Printable"
339#define XtNallowColorOps	"allowColorOps"
340#define XtNallowFontOps		"allowFontOps"
341#define XtNallowScrollLock	"allowScrollLock"
342#define XtNallowSendEvents	"allowSendEvents"
343#define XtNallowTcapOps		"allowTcapOps"
344#define XtNallowTitleOps	"allowTitleOps"
345#define XtNallowWindowOps	"allowWindowOps"
346#define XtNaltIsNotMeta		"altIsNotMeta"
347#define XtNaltSendsEscape	"altSendsEscape"
348#define XtNalwaysBoldMode	"alwaysBoldMode"
349#define XtNalwaysHighlight	"alwaysHighlight"
350#define XtNalwaysUseMods	"alwaysUseMods"
351#define XtNanswerbackString	"answerbackString"
352#define XtNappcursorDefault	"appcursorDefault"
353#define XtNappkeypadDefault	"appkeypadDefault"
354#define XtNautoWrap		"autoWrap"
355#define XtNawaitInput		"awaitInput"
356#define XtNbackarrowKey		"backarrowKey"
357#define XtNbellIsUrgent		"bellIsUrgent"
358#define XtNbellOnReset		"bellOnReset"
359#define XtNbellSuppressTime	"bellSuppressTime"
360#define XtNboldColors		"boldColors"
361#define XtNboldFont		"boldFont"
362#define XtNboldMode		"boldMode"
363#define XtNbrokenLinuxOSC	"brokenLinuxOSC"
364#define XtNbrokenSelections	"brokenSelections"
365#define XtNbrokenStringTerm	"brokenStringTerm"
366#define XtNc132			"c132"
367#define XtNcacheDoublesize	"cacheDoublesize"
368#define XtNcharClass		"charClass"
369#define XtNcjkWidth		"cjkWidth"
370#define XtNcolorAttrMode	"colorAttrMode"
371#define XtNcolorBDMode		"colorBDMode"
372#define XtNcolorBLMode		"colorBLMode"
373#define XtNcolorMode		"colorMode"
374#define XtNcolorRVMode		"colorRVMode"
375#define XtNcolorULMode		"colorULMode"
376#define XtNcombiningChars	"combiningChars"
377#define XtNctrlFKeys		"ctrlFKeys"
378#define XtNcurses		"curses"
379#define XtNcursorBlink		"cursorBlink"
380#define XtNcursorColor		"cursorColor"
381#define XtNcursorOffTime	"cursorOffTime"
382#define XtNcursorOnTime		"cursorOnTime"
383#define XtNcursorUnderline	"cursorUnderLine"
384#define XtNcutNewline		"cutNewline"
385#define XtNcutToBeginningOfLine	"cutToBeginningOfLine"
386#define XtNdecTerminalID	"decTerminalID"
387#define XtNdefaultString	"defaultString"
388#define XtNdeleteIsDEL		"deleteIsDEL"
389#define XtNdisallowedColorOps	"disallowedColorOps"
390#define XtNdisallowedFontOps	"disallowedFontOps"
391#define XtNdisallowedTcapOps	"disallowedTcapOps"
392#define XtNdisallowedWindowOps	"disallowedWindowOps"
393#define XtNdynamicColors	"dynamicColors"
394#define XtNeightBitControl	"eightBitControl"
395#define XtNeightBitInput	"eightBitInput"
396#define XtNeightBitOutput	"eightBitOutput"
397#define XtNeightBitSelectTypes	"eightBitSelectTypes"
398#define XtNfaceName		"faceName"
399#define XtNfaceNameDoublesize	"faceNameDoublesize"
400#define XtNfaceSize		"faceSize"
401#define XtNfastScroll		"fastScroll"
402#define XtNfont1		"font1"
403#define XtNfont2		"font2"
404#define XtNfont3		"font3"
405#define XtNfont4		"font4"
406#define XtNfont5		"font5"
407#define XtNfont6		"font6"
408#define XtNfontDoublesize	"fontDoublesize"
409#define XtNfontStyle		"fontStyle"
410#define XtNfontWarnings		"fontWarnings"
411#define XtNforceBoxChars	"forceBoxChars"
412#define XtNforcePackedFont	"forcePackedFont"
413#define XtNformatOtherKeys	"formatOtherKeys"
414#define XtNfreeBoldBox		"freeBoldBox"
415#define XtNhighlightColor	"highlightColor"
416#define XtNhighlightColorMode	"highlightColorMode"
417#define XtNhighlightReverse	"highlightReverse"
418#define XtNhighlightSelection	"highlightSelection"
419#define XtNhighlightTextColor	"highlightTextColor"
420#define XtNhpLowerleftBugCompat	"hpLowerleftBugCompat"
421#define XtNi18nSelections	"i18nSelections"
422#define XtNinitialFont		"initialFont"
423#define XtNinternalBorder	"internalBorder"
424#define XtNitalicULMode		"italicULMode"
425#define XtNjumpScroll		"jumpScroll"
426#define XtNkeepSelection	"keepSelection"
427#define XtNkeyboardDialect	"keyboardDialect"
428#define XtNlimitResize		"limitResize"
429#define XtNlocale		"locale"
430#define XtNlocaleFilter		"localeFilter"
431#define XtNlogFile		"logFile"
432#define XtNlogInhibit		"logInhibit"
433#define XtNlogging		"logging"
434#define XtNloginShell		"loginShell"
435#define XtNmarginBell		"marginBell"
436#define XtNmaximized		"maximized"
437#define XtNmenuBar		"menuBar"
438#define XtNmenuHeight		"menuHeight"
439#define XtNmetaSendsEscape	"metaSendsEscape"
440#define XtNmkSamplePass		"mkSamplePass"
441#define XtNmkSampleSize		"mkSampleSize"
442#define XtNmkWidth		"mkWidth"
443#define XtNmodifyCursorKeys	"modifyCursorKeys"
444#define XtNmodifyFunctionKeys	"modifyFunctionKeys"
445#define XtNmodifyKeypadKeys	"modifyKeypadKeys"
446#define XtNmodifyOtherKeys	"modifyOtherKeys"
447#define XtNmodifyStringKeys	"modifyStringKeys"
448#define XtNmultiClickTime	"multiClickTime"
449#define XtNmultiScroll		"multiScroll"
450#define XtNnMarginBell		"nMarginBell"
451#define XtNnumLock		"numLock"
452#define XtNoldXtermFKeys	"oldXtermFKeys"
453#define XtNpointerColor		"pointerColor"
454#define XtNpointerColorBackground "pointerColorBackground"
455#define XtNpointerMode		"pointerMode"
456#define XtNpointerShape		"pointerShape"
457#define XtNpopOnBell		"popOnBell"
458#define XtNprintAttributes	"printAttributes"
459#define XtNprinterAutoClose	"printerAutoClose"
460#define XtNprinterCommand	"printerCommand"
461#define XtNprinterControlMode	"printerControlMode"
462#define XtNprinterExtent	"printerExtent"
463#define XtNprinterFormFeed	"printerFormFeed"
464#define XtNprinterNewLine	"printerNewLine"
465#define XtNquietGrab		"quietGrab"
466#define XtNrenderFont		"renderFont"
467#define XtNresizeGravity	"resizeGravity"
468#define XtNretryInputMethod     "retryInputMethod"
469#define XtNreverseWrap		"reverseWrap"
470#define XtNrightScrollBar	"rightScrollBar"
471#define XtNsaveLines		"saveLines"
472#define XtNscrollBar		"scrollBar"
473#define XtNscrollBarBorder	"scrollBarBorder"
474#define XtNscrollKey		"scrollKey"
475#define XtNscrollLines		"scrollLines"
476#define XtNscrollPos		"scrollPos"
477#define XtNscrollTtyOutput	"scrollTtyOutput"
478#define XtNselectToClipboard	"selectToClipboard"
479#define XtNshiftFonts		"shiftFonts"
480#define XtNshowBlinkAsBold	"showBlinkAsBold"
481#define XtNshowMissingGlyphs	"showMissingGlyphs"
482#define XtNshowWrapMarks	"showWrapMarks"
483#define XtNsignalInhibit	"signalInhibit"
484#define XtNtekGeometry		"tekGeometry"
485#define XtNtekInhibit		"tekInhibit"
486#define XtNtekSmall		"tekSmall"
487#define XtNtekStartup		"tekStartup"
488#define XtNtiXtraScroll		"tiXtraScroll"
489#define XtNtiteInhibit		"titeInhibit"
490#define XtNtitleModes		"titleModes"
491#define XtNtoolBar		"toolBar"
492#define XtNtrimSelection	"trimSelection"
493#define XtNunderLine		"underLine"
494#define XtNuseClipping		"useClipping"
495#define XtNutf8			"utf8"
496#define XtNutf8Latin1		"utf8Latin1"
497#define XtNutf8SelectTypes	"utf8SelectTypes"
498#define XtNutf8Title		"utf8Title"
499#define XtNveryBoldColors	"veryBoldColors"
500#define XtNvisualBell		"visualBell"
501#define XtNvisualBellDelay	"visualBellDelay"
502#define XtNvt100Graphics	"vt100Graphics"
503#define XtNwideBoldFont		"wideBoldFont"
504#define XtNwideChars		"wideChars"
505#define XtNwideFont		"wideFont"
506#define XtNximFont		"ximFont"
507#define XtNxmcAttributes	"xmcAttributes"
508#define XtNxmcGlitch		"xmcGlitch"
509#define XtNxmcInline		"xmcInline"
510#define XtNxmcMoveSGR		"xmcMoveSGR"
511
512#define XtCAllowC1Printable	"AllowC1Printable"
513#define XtCAllowColorOps	"AllowColorOps"
514#define XtCAllowFontOps		"AllowFontOps"
515#define XtCAllowScrollLock	"AllowScrollLock"
516#define XtCAllowSendEvents	"AllowSendEvents"
517#define XtCAllowTcapOps		"AllowTcapOps"
518#define XtCAllowTitleOps	"AllowTitleOps"
519#define XtCAllowWindowOps	"AllowWindowOps"
520#define XtCAltIsNotMeta		"AltIsNotMeta"
521#define XtCAltSendsEscape	"AltSendsEscape"
522#define XtCAlwaysBoldMode	"AlwaysBoldMode"
523#define XtCAlwaysHighlight	"AlwaysHighlight"
524#define XtCAlwaysUseMods	"AlwaysUseMods"
525#define XtCAnswerbackString	"AnswerbackString"
526#define XtCAppcursorDefault	"AppcursorDefault"
527#define XtCAppkeypadDefault	"AppkeypadDefault"
528#define XtCAutoWrap		"AutoWrap"
529#define XtCAwaitInput		"AwaitInput"
530#define XtCBackarrowKey		"BackarrowKey"
531#define XtCBellIsUrgent		"BellIsUrgent"
532#define XtCBellOnReset		"BellOnReset"
533#define XtCBellSuppressTime	"BellSuppressTime"
534#define XtCBoldFont		"BoldFont"
535#define XtCBoldMode		"BoldMode"
536#define XtCBrokenLinuxOSC	"BrokenLinuxOSC"
537#define XtCBrokenSelections	"BrokenSelections"
538#define XtCBrokenStringTerm	"BrokenStringTerm"
539#define XtCC132			"C132"
540#define XtCCacheDoublesize	"CacheDoublesize"
541#define XtCCharClass		"CharClass"
542#define XtCCjkWidth 		"CjkWidth"
543#define XtCColorAttrMode	"ColorAttrMode"
544#define XtCColorMode		"ColorMode"
545#define XtCColumn		"Column"
546#define XtCCombiningChars	"CombiningChars"
547#define XtCCtrlFKeys		"CtrlFKeys"
548#define XtCCurses		"Curses"
549#define XtCCursorBlink		"CursorBlink"
550#define XtCCursorOffTime	"CursorOffTime"
551#define XtCCursorOnTime		"CursorOnTime"
552#define XtCCursorUnderline	"CursorUnderLine"
553#define XtCCutNewline		"CutNewline"
554#define XtCCutToBeginningOfLine	"CutToBeginningOfLine"
555#define XtCDecTerminalID	"DecTerminalID"
556#define XtCDefaultString	"DefaultString"
557#define XtCDeleteIsDEL		"DeleteIsDEL"
558#define XtCDisallowedColorOps	"DisallowedColorOps"
559#define XtCDisallowedFontOps	"DisallowedFontOps"
560#define XtCDisallowedTcapOps	"DisallowedTcapOps"
561#define XtCDisallowedWindowOps	"DisallowedWindowOps"
562#define XtCDynamicColors	"DynamicColors"
563#define XtCEightBitControl	"EightBitControl"
564#define XtCEightBitInput	"EightBitInput"
565#define XtCEightBitOutput	"EightBitOutput"
566#define XtCEightBitSelectTypes	"EightBitSelectTypes"
567#define XtCFaceName		"FaceName"
568#define XtCFaceNameDoublesize	"FaceNameDoublesize"
569#define XtCFaceSize		"FaceSize"
570#define XtCFastScroll		"FastScroll"
571#define XtCFont1		"Font1"
572#define XtCFont2		"Font2"
573#define XtCFont3		"Font3"
574#define XtCFont4		"Font4"
575#define XtCFont5		"Font5"
576#define XtCFont6		"Font6"
577#define XtCFontDoublesize	"FontDoublesize"
578#define XtCFontStyle		"FontStyle"
579#define XtCFontWarnings		"FontWarnings"
580#define XtCForceBoxChars	"ForceBoxChars"
581#define XtCForcePackedFont	"ForcePackedFont"
582#define XtCFormatOtherKeys	"FormatOtherKeys"
583#define XtCFreeBoldBox		"FreeBoldBox"
584#define XtCHighlightColorMode	"HighlightColorMode"
585#define XtCHighlightReverse	"HighlightReverse"
586#define XtCHighlightSelection	"HighlightSelection"
587#define XtCHpLowerleftBugCompat	"HpLowerleftBugCompat"
588#define XtCI18nSelections	"I18nSelections"
589#define XtCInitialFont		"InitialFont"
590#define XtCJumpScroll		"JumpScroll"
591#define XtCKeepSelection	"KeepSelection"
592#define XtCKeyboardDialect	"KeyboardDialect"
593#define XtCLimitResize		"LimitResize"
594#define XtCLocale		"Locale"
595#define XtCLocaleFilter		"LocaleFilter"
596#define XtCLogInhibit		"LogInhibit"
597#define XtCLogfile		"Logfile"
598#define XtCLogging		"Logging"
599#define XtCLoginShell		"LoginShell"
600#define XtCMarginBell		"MarginBell"
601#define XtCMaximized		"Maximized"
602#define XtCMenuBar		"MenuBar"
603#define XtCMenuHeight		"MenuHeight"
604#define XtCMetaSendsEscape	"MetaSendsEscape"
605#define XtCMkSamplePass 	"MkSamplePass"
606#define XtCMkSampleSize 	"MkSampleSize"
607#define XtCMkWidth 		"MkWidth"
608#define XtCModifyCursorKeys	"ModifyCursorKeys"
609#define XtCModifyFunctionKeys	"ModifyFunctionKeys"
610#define XtCModifyKeypadKeys	"ModifyKeypadKeys"
611#define XtCModifyOtherKeys	"ModifyOtherKeys"
612#define XtCModifyStringKeys	"ModifyStringKeys"
613#define XtCMultiClickTime	"MultiClickTime"
614#define XtCMultiScroll		"MultiScroll"
615#define XtCNumLock		"NumLock"
616#define XtCOldXtermFKeys	"OldXtermFKeys"
617#define XtCPointerMode		"PointerMode"
618#define XtCPopOnBell		"PopOnBell"
619#define XtCPrintAttributes	"PrintAttributes"
620#define XtCPrinterAutoClose	"PrinterAutoClose"
621#define XtCPrinterCommand	"PrinterCommand"
622#define XtCPrinterControlMode	"PrinterControlMode"
623#define XtCPrinterExtent	"PrinterExtent"
624#define XtCPrinterFormFeed	"PrinterFormFeed"
625#define XtCPrinterNewLine	"PrinterNewLine"
626#define XtCQuietGrab		"QuietGrab"
627#define XtCRenderFont		"RenderFont"
628#define XtCResizeGravity	"ResizeGravity"
629#define XtCRetryInputMethod     "RetryInputMethod"
630#define XtCReverseWrap		"ReverseWrap"
631#define XtCRightScrollBar	"RightScrollBar"
632#define XtCSaveLines		"SaveLines"
633#define XtCScrollBar		"ScrollBar"
634#define XtCScrollBarBorder	"ScrollBarBorder"
635#define XtCScrollCond		"ScrollCond"
636#define XtCScrollLines		"ScrollLines"
637#define XtCScrollPos		"ScrollPos"
638#define XtCSelectToClipboard	"SelectToClipboard"
639#define XtCShiftFonts		"ShiftFonts"
640#define XtCShowBlinkAsBold	"ShowBlinkAsBold"
641#define XtCShowMissingGlyphs	"ShowMissingGlyphs"
642#define XtCShowWrapMarks	"ShowWrapMarks"
643#define XtCSignalInhibit	"SignalInhibit"
644#define XtCTekInhibit		"TekInhibit"
645#define XtCTekSmall		"TekSmall"
646#define XtCTekStartup		"TekStartup"
647#define XtCTiXtraScroll		"TiXtraScroll"
648#define XtCTiteInhibit		"TiteInhibit"
649#define XtCTitleModes		"TitleModes"
650#define XtCToolBar		"ToolBar"
651#define XtCTrimSelection	"TrimSelection"
652#define XtCUnderLine		"UnderLine"
653#define XtCUseClipping		"UseClipping"
654#define XtCUtf8			"Utf8"
655#define XtCUtf8Latin1		"Utf8Latin1"
656#define XtCUtf8SelectTypes	"Utf8SelectTypes"
657#define XtCUtf8Title		"Utf8Title"
658#define XtCVT100Graphics	"VT100Graphics"
659#define XtCVeryBoldColors	"VeryBoldColors"
660#define XtCVisualBell		"VisualBell"
661#define XtCVisualBellDelay	"VisualBellDelay"
662#define XtCWideBoldFont		"WideBoldFont"
663#define XtCWideChars		"WideChars"
664#define XtCWideFont		"WideFont"
665#define XtCXimFont		"XimFont"
666#define XtCXmcAttributes	"XmcAttributes"
667#define XtCXmcGlitch		"XmcGlitch"
668#define XtCXmcInline		"XmcInline"
669#define XtCXmcMoveSGR		"XmcMoveSGR"
670
671#if defined(NO_ACTIVE_ICON) && !defined(XtNgeometry)
672#define XtNgeometry		"geometry"
673#define XtCGeometry		"Geometry"
674#endif
675
676#if OPT_COLOR_CLASS
677#define XtCCursorColor		"CursorColor"
678#define XtCPointerColor		"PointerColor"
679#define XtCHighlightColor	"HighlightColor"
680#define XtCHighlightTextColor	"HighlightTextColor"
681#else
682#define XtCCursorColor		XtCForeground
683#define XtCPointerColor		XtCForeground
684#define XtCHighlightColor	XtCForeground
685#define XtCHighlightTextColor	XtCBackground
686#endif
687
688/***====================================================================***/
689
690#ifdef __cplusplus
691extern "C" {
692#endif
693
694struct XTERM_RESOURCE;
695
696/* Tekproc.c */
697#if OPT_TEK4014
698extern TekWidget getTekWidget(Widget /* w */);
699extern int TekGetFontSize (const char * /* param */);
700extern int TekInit (void);
701extern int TekPtyData(void);
702extern void ChangeTekColors (TekWidget /* tw */, TScreen * /* screen */, ScrnColors * /* pNew */);
703extern void HandleGINInput             PROTO_XT_ACTIONS_ARGS;
704extern void TCursorToggle (TekWidget /* tw */, int /* toggle */);
705extern void TekCopy (TekWidget /* tw */);
706extern void TekEnqMouse (TekWidget /* tw */, int /* c */);
707extern void TekExpose (Widget  /* w */, XEvent * /* event */, Region  /* region */);
708extern void TekGINoff (TekWidget /* tw */);
709extern void TekRefresh (TekWidget /* tw */);
710extern void TekRepaint (TekWidget /* xw */);
711extern void TekReverseVideo (TekWidget /* tw */);
712extern void TekRun (void);
713extern void TekSetFontSize (TekWidget /* tw */, Bool /* fromMenu */, int  /* newitem */);
714extern void TekSimulatePageButton (TekWidget /* tw */, Bool /* reset */);
715#endif
716
717/* button.c */
718#define	MotionOff( s, t ) if (!(screen->hide_pointer)) {		\
719	    (s)->event_mask |= ButtonMotionMask;			\
720	    (s)->event_mask &= ~PointerMotionMask;			\
721	    XSelectInput(XtDisplay((t)), XtWindow((t)), (long) (s)->event_mask); }
722
723#define	MotionOn( s, t ) {						\
724	    (s)->event_mask &= ~ButtonMotionMask;			\
725	    (s)->event_mask |= PointerMotionMask;			\
726	    XSelectInput(XtDisplay((t)), XtWindow((t)), (long) (s)->event_mask); }
727
728extern Bool SendMousePosition (XtermWidget  /* w */, XEvent*  /* event */);
729extern void DiredButton                PROTO_XT_ACTIONS_ARGS;
730extern void DisownSelection (XtermWidget  /* termw */);
731extern void UnhiliteSelection (XtermWidget  /* termw */);
732extern void HandleInsertSelection      PROTO_XT_ACTIONS_ARGS;
733extern void HandleKeyboardSelectEnd    PROTO_XT_ACTIONS_ARGS;
734extern void HandleKeyboardSelectExtend PROTO_XT_ACTIONS_ARGS;
735extern void HandleKeyboardSelectStart  PROTO_XT_ACTIONS_ARGS;
736extern void HandleKeyboardSelectStop   PROTO_XT_ACTIONS_ARGS;
737extern void HandleKeyboardStartExtend  PROTO_XT_ACTIONS_ARGS;
738extern void HandleSelectEnd            PROTO_XT_ACTIONS_ARGS;
739extern void HandleSelectExtend         PROTO_XT_ACTIONS_ARGS;
740extern void HandleSelectSet            PROTO_XT_ACTIONS_ARGS;
741extern void HandleSelectStart          PROTO_XT_ACTIONS_ARGS;
742extern void HandleSelectStop           PROTO_XT_ACTIONS_ARGS;
743extern void HandleStartExtend          PROTO_XT_ACTIONS_ARGS;
744extern void ResizeSelection (TScreen * /* screen */, int  /* rows */, int  /* cols */);
745extern void ScrollSelection (TScreen * /* screen */, int  /* amount */,  Bool /* always */);
746extern void TrackMouse (XtermWidget /* xw */, int /* func */, CELL * /* start */, int /* firstrow */, int /* lastrow */);
747extern void ViButton                   PROTO_XT_ACTIONS_ARGS;
748
749extern int xtermUtf8ToTextList(XtermWidget /* xw */, XTextProperty * /* text_prop */, char *** /* text_list */, int * /* text_list_count */);
750
751#if OPT_DEC_LOCATOR
752extern void GetLocatorPosition (XtermWidget  /* w */);
753extern void InitLocatorFilter (XtermWidget  /* w */);
754#endif	/* OPT_DEC_LOCATOR */
755
756#if OPT_FOCUS_EVENT
757extern void SendFocusButton(XtermWidget /* xw */, XFocusChangeEvent * /* event */);
758#else
759#define SendFocusBotton(xw, event) /* nothing */
760#endif
761
762#if OPT_PASTE64
763extern void AppendToSelectionBuffer (TScreen * /* screen */, unsigned  /* c */);
764extern void ClearSelectionBuffer (TScreen * /* screen */);
765extern void CompleteSelection (XtermWidget  /* xw */, String * /* args */, Cardinal  /* len */);
766extern void xtermGetSelection (Widget  /* w */, Time  /* ev_time */, String * /* params */, Cardinal  /* num_params */, Atom * /* targets */);
767#endif
768
769#if OPT_READLINE
770extern void ReadLineButton             PROTO_XT_ACTIONS_ARGS;
771#endif
772
773#if OPT_WIDE_CHARS
774extern Bool iswide(int  /* i */);
775#define WideCells(n) (((IChar)(n) >= first_widechar) ? my_wcwidth((wchar_t) (n)) : 1)
776#define isWide(n)    (((IChar)(n) >= first_widechar) && iswide(n))
777#else
778#define WideCells(n) 1
779#endif
780
781/* cachedCgs.c */
782extern CgsEnum getCgsId(XtermWidget /*xw*/, VTwin * /*cgsWin*/, GC /*gc*/);
783extern GC freeCgs(XtermWidget /*xw*/, VTwin * /*cgsWin*/, CgsEnum /*cgsId*/);
784extern GC getCgsGC(XtermWidget /*xw*/, VTwin * /*cgsWin*/, CgsEnum /*cgsId*/);
785extern Pixel getCgsBack(XtermWidget /*xw*/, VTwin * /*cgsWin*/, GC /*gc*/);
786extern Pixel getCgsFore(XtermWidget /*xw*/, VTwin * /*cgsWin*/, GC /*gc*/);
787extern XTermFonts * getCgsFont(XtermWidget /*xw*/, VTwin * /*cgsWin*/, GC /*gc*/);
788extern void clrCgsFonts(XtermWidget /*xw*/, VTwin * /*cgsWin*/, XTermFonts * /*font*/);
789extern void copyCgs(XtermWidget /*xw*/, VTwin * /*cgsWin*/, CgsEnum /*dstCgsId*/, CgsEnum /*srcCgsId*/);
790extern void redoCgs(XtermWidget /*xw*/, Pixel /*fg*/, Pixel /*bg*/, CgsEnum /*cgsId*/);
791extern void setCgsBack(XtermWidget /*xw*/, VTwin * /*cgsWin*/, CgsEnum /*cgsId*/, Pixel /*bg*/);
792extern void setCgsCSet(XtermWidget /*xw*/, VTwin * /*cgsWin*/, CgsEnum /*cgsId*/, unsigned /*cset*/);
793extern void setCgsFont(XtermWidget /*xw*/, VTwin * /*cgsWin*/, CgsEnum /*cgsId*/, XTermFonts * /*font*/);
794extern void setCgsFore(XtermWidget /*xw*/, VTwin * /*cgsWin*/, CgsEnum /*cgsId*/, Pixel /*fg*/);
795extern void swapCgs(XtermWidget /*xw*/, VTwin * /*cgsWin*/, CgsEnum /*dstCgsId*/, CgsEnum /*srcCgsId*/);
796
797#ifdef NO_LEAKS
798extern void noleaks_cachedCgs (XtermWidget /* xw */);
799#endif
800
801/* charproc.c */
802extern Bool CheckBufPtrs (TScreen * /* screen */);
803extern Bool set_cursor_gcs (XtermWidget /* xw */);
804extern int VTInit (XtermWidget /* xw */);
805extern void FindFontSelection (XtermWidget /* xw */, const char * /* atom_name */, Bool  /* justprobe */);
806extern void HideCursor (void);
807extern void RestartBlinking(TScreen * /* screen */);
808extern void ShowCursor (void);
809extern void SwitchBufPtrs (TScreen * /* screen */, int /* toBuf */);
810extern void ToggleAlternate (XtermWidget /* xw */);
811extern void VTReset (XtermWidget /* xw */, int /* full */, int /* saved */);
812extern void VTRun (XtermWidget /* xw */);
813extern void dotext (XtermWidget /* xw */, int  /* charset */, IChar * /* buf */, Cardinal  /* len */);
814extern void releaseCursorGCs(XtermWidget /*xw*/);
815extern void releaseWindowGCs(XtermWidget /*xw*/, VTwin * /*win*/);
816extern void resetCharsets (TScreen * /* screen */);
817extern void set_max_col(TScreen *  /* screen */, int  /* cols */);
818extern void set_max_row(TScreen *  /* screen */, int  /* rows */);
819extern void set_tb_margins (TScreen * /* screen */, int  /* top */, int  /* bottom */);
820extern void unparse_end (XtermWidget /* xw */);
821extern void unparseputc (XtermWidget /* xw */, int  /* c */);
822extern void unparseputc1 (XtermWidget /* xw */, int  /* c */);
823extern void unparseputn (XtermWidget /* xw */, unsigned /* n */);
824extern void unparseputs (XtermWidget /* xw */, const char * /* s */);
825extern void unparseseq (XtermWidget /* xw */, ANSI * /* ap */);
826extern void v_write (int  /* f */, const Char * /* d */, unsigned  /* len */);
827extern void xtermAddInput(Widget  /* w */);
828
829#if OPT_BLINK_CURS
830extern void ToggleCursorBlink(TScreen * /* screen */);
831#endif
832
833#if OPT_ISO_COLORS
834extern void SGR_Background (XtermWidget /* xw */, int  /* color */);
835extern void SGR_Foreground (XtermWidget /* xw */, int  /* color */);
836#endif
837
838#ifdef NO_LEAKS
839extern void noleaks_charproc (void);
840#endif
841
842/* charsets.c */
843extern unsigned xtermCharSetIn (unsigned  /* code */, int  /* charset */);
844extern int xtermCharSetOut (XtermWidget /* xw */, IChar * /* buf */, IChar * /* ptr */, int  /* charset */);
845
846/* cursor.c */
847extern void AdjustSavedCursor (XtermWidget /* xw */, int /* adjust */);
848extern void CarriageReturn (TScreen * /* screen */);
849extern void CursorBack (XtermWidget /* xw */, int   /* n */);
850extern void CursorDown (TScreen * /* screen */, int   /* n */);
851extern void CursorForward (TScreen * /* screen */, int   /* n */);
852extern void CursorNextLine (TScreen * /* screen */, int  /* count */);
853extern void CursorPrevLine (TScreen * /* screen */, int  /* count */);
854extern void CursorRestore (XtermWidget  /* xw */);
855extern void CursorSave (XtermWidget  /* xw */);
856extern void CursorSet (TScreen * /* screen */, int  /* row */, int  /* col */, unsigned  /* flags */);
857extern void CursorUp (TScreen * /* screen */, int   /* n */);
858extern void RevIndex (XtermWidget /* xw */, int  /* amount */);
859extern void xtermIndex (XtermWidget /* xw */, int  /* amount */);
860
861#if OPT_TRACE
862extern int set_cur_col(TScreen * /* screen */, int  /* value */);
863extern int set_cur_row(TScreen * /* screen */, int  /* value */);
864#else
865#define set_cur_col(screen, value) screen->cur_col = value
866#define set_cur_row(screen, value) screen->cur_row = value
867#endif
868
869/* doublechr.c */
870extern void xterm_DECDHL (XtermWidget /* xw */, Bool  /* top */);
871extern void xterm_DECSWL (XtermWidget /* xw */);
872extern void xterm_DECDWL (XtermWidget /* xw */);
873#if OPT_DEC_CHRSET
874extern int xterm_Double_index(XtermWidget /* xw */, unsigned  /* chrset */, unsigned  /* flags */);
875extern GC xterm_DoubleGC(XtermWidget /* xw */, unsigned  /* chrset */, unsigned  /* flags */, GC  /* old_gc */, int * /* inxp */);
876#endif
877
878/* input.c */
879extern unsigned xtermParamToState (XtermWidget /* xw */, unsigned /* param */);
880extern unsigned xtermStateToParam (XtermWidget /* xw */, unsigned /* state */);
881extern Bool xtermDeleteIsDEL (XtermWidget /* xw */);
882extern void Input (XtermWidget /* xw */, XKeyEvent */* event */, Bool /* eightbit */);
883extern void StringInput (XtermWidget /* xw */, const Char * /* string */, size_t  /* nbytes */);
884
885#if OPT_NUM_LOCK
886extern void VTInitModifiers(XtermWidget /* xw */);
887#endif
888
889/* linedata.c */
890extern LineData *getLineData(TScreen * /* screen */, int /* row */);
891extern void copyLineData(LineData * /* dst */, LineData * /* src */);
892extern void initLineData(XtermWidget /* xw */);
893
894extern CellData *newCellData(XtermWidget /* xw */, Cardinal /* count */);
895extern void saveCellData(TScreen * /* screen */, CellData * /* data */, Cardinal /* cell */, LineData * /* ld */, int /* column */);
896extern void restoreCellData(TScreen * /* screen */, CellData * /* data */, Cardinal /* cell */, LineData * /* ld */, int /* column */);
897
898/* main.c */
899#ifndef __UNIXOS2__
900#define ENVP_ARG /**/
901#else
902#define ENVP_ARG , char ** /* envp */
903#endif
904
905extern int main (int  /* argc */, char ** /* argv */ ENVP_ARG);
906extern int GetBytesAvailable (int  /* fd */);
907extern int kill_process_group (int  /* pid */, int  /* sig */);
908extern int nonblocking_wait (void);
909
910#if OPT_PTY_HANDSHAKE
911extern void first_map_occurred (void);
912#else
913#define first_map_occurred() /* nothing */
914#endif
915
916#ifdef SIGNAL_T
917extern SIGNAL_T Exit (int  /* n */);
918#endif
919
920#ifndef SIG_ATOMIC_T
921#define SIG_ATOMIC_T int
922#endif
923
924#if OPT_WIDE_CHARS
925extern unsigned first_widechar;
926extern int (*my_wcwidth)(wchar_t);
927#endif
928
929/* menu.c */
930extern void do_hangup          PROTO_XT_CALLBACK_ARGS;
931extern void repairSizeHints    (void);
932extern void show_8bit_control  (Bool  /* value */);
933
934/* misc.c */
935extern Bool AllocateTermColor(XtermWidget, ScrnColors *, int, const char *, Bool);
936extern Cursor make_colored_cursor (unsigned /* cursorindex */, unsigned long  /* fg */, unsigned long  /* bg */);
937extern OptionHelp * sortedOpts(OptionHelp *, XrmOptionDescRec *, Cardinal);
938extern Window WMFrameWindow(XtermWidget /* termw */);
939extern XrmOptionDescRec * sortedOptDescs(XrmOptionDescRec *, Cardinal);
940extern XtermWidget getXtermWidget(Widget /* w */);
941extern char *udk_lookup (int /* keycode */, int * /* len */);
942extern char *xtermEnvEncoding (void);
943extern char *xtermEnvLocale (void);
944extern char *xtermFindShell(char * /* leaf */, Bool  /* warning */);
945extern char *xtermVersion(void);
946extern const char *SysErrorMsg (int /* n */);
947extern const char *SysReasonMsg (int /* n */);
948extern int ResetAnsiColorRequest(XtermWidget, char *, int);
949extern int XStrCmp (char * /* s1 */, char * /* s2 */);
950extern int creat_as (uid_t  /* uid */, gid_t  /* gid */, Bool  /* append */, char * /* pathname */, int  /* mode */);
951extern int open_userfile (uid_t  /* uid */, gid_t  /* gid */, char * /* path */, Bool  /* append */);
952extern int xerror (Display * /* d */, XErrorEvent * /* ev */);
953extern int xioerror (Display * /* dpy */);
954extern int xtermResetIds(TScreen *  /* screen */);
955extern void Bell (XtermWidget /* xw */, int  /* which */, int  /* percent */);
956extern void ChangeIconName (XtermWidget /* xw */, char * /* name */);
957extern void ChangeTitle (XtermWidget /* xw */, char * /* name */);
958extern void ChangeXprop (char * /* name */);
959extern void Cleanup (int  /* code */);
960extern void HandleBellPropertyChange   PROTO_XT_EV_HANDLER_ARGS;
961extern void HandleEightBitKeyPressed   PROTO_XT_ACTIONS_ARGS;
962extern void HandleEnterWindow          PROTO_XT_EV_HANDLER_ARGS;
963extern void HandleFocusChange          PROTO_XT_EV_HANDLER_ARGS;
964extern void HandleInterpret            PROTO_XT_ACTIONS_ARGS;
965extern void HandleKeyPressed           PROTO_XT_ACTIONS_ARGS;
966extern void HandleLeaveWindow          PROTO_XT_EV_HANDLER_ARGS;
967extern void HandleSpawnTerminal        PROTO_XT_ACTIONS_ARGS;
968extern void HandleStringEvent          PROTO_XT_ACTIONS_ARGS;
969extern void Panic (const char * /* s */, int  /* a */);
970extern void Redraw (void);
971extern void ReverseOldColors (void);
972extern void SysError (int  /* i */) GCC_NORETURN;
973extern void VisualBell (void);
974extern void do_dcs (XtermWidget /* xw */, Char * /* buf */, size_t  /* len */);
975extern void do_decrpm (XtermWidget /* xw */, int /* nparam */, int *  /* params */);
976extern void do_osc (XtermWidget /* xw */, Char * /* buf */, size_t  /* len */, int  /* final */);
977extern void do_rpm (XtermWidget /* xw */, int /* nparam */, int *  /* params */);
978extern void do_xevents (void);
979extern void end_tek_mode (void);
980extern void end_vt_mode (void);
981extern void hide_tek_window (void);
982extern void hide_vt_window (void);
983extern void reset_decudk (void);
984extern void set_tek_visibility (Bool  /* on */);
985extern void set_vt_visibility (Bool  /* on */);
986extern void switch_modes (Bool  /* tovt */);
987extern void timestamp_filename(char * /* dst */, const char * /* src */);
988extern void xevents (void);
989extern void xt_error (String  /* message */);
990extern void xtermBell(XtermWidget /* xw */, int /* which */, int /* percent */);
991extern void xtermCopyEnv (char ** /* oldenv */);
992extern void xtermDisplayCursor (XtermWidget /* xw */);
993extern void xtermSetenv (const char * /* var */, const char * /* value */);
994extern void xtermShowPointer (XtermWidget /* xw */, Bool /* enable */);
995
996#if OPT_DABBREV
997extern void HandleDabbrevExpand        PROTO_XT_ACTIONS_ARGS;
998#endif
999
1000#if OPT_MAXIMIZE
1001extern int QueryMaximize (XtermWidget  /* termw */, unsigned * /* width */, unsigned * /* height */);
1002extern void HandleDeIconify            PROTO_XT_ACTIONS_ARGS;
1003extern void HandleIconify              PROTO_XT_ACTIONS_ARGS;
1004extern void HandleMaximize             PROTO_XT_ACTIONS_ARGS;
1005extern void HandleRestoreSize          PROTO_XT_ACTIONS_ARGS;
1006extern void RequestMaximize (XtermWidget  /* termw */, int  /* maximize */);
1007#endif
1008
1009#if OPT_SCROLL_LOCK
1010extern void GetScrollLock (TScreen * /* screen */);
1011extern void HandleScrollLock           PROTO_XT_ACTIONS_ARGS;
1012extern void ShowScrollLock (TScreen * /* screen */, Bool /* enable */);
1013extern void SetScrollLock (TScreen * /* screen */, Bool /* enable */);
1014extern void xtermShowLED (TScreen * /* screen */, Cardinal /* led_number */, Bool /* enable */);
1015extern void xtermClearLEDs (TScreen * /* screen */);
1016#else
1017#define ShowScrollLock(screen, enable) /* nothing */
1018#define SetScrollLock(screen, enable) /* nothing */
1019#define GetScrollLock(screen) /* nothing */
1020#endif
1021
1022#if OPT_WIDE_CHARS
1023extern Bool xtermEnvUTF8(void);
1024#else
1025#define xtermEnvUTF8() False
1026#endif
1027
1028#ifdef ALLOWLOGGING
1029extern void StartLog (XtermWidget /* xw */);
1030extern void CloseLog (XtermWidget /* xw */);
1031extern void FlushLog (XtermWidget /* xw */);
1032#else
1033#define FlushLog(xw) /*nothing*/
1034#endif
1035
1036/* print.c */
1037extern Bool xtermHasPrinter (XtermWidget /* xw */);
1038extern PrinterFlags *getPrinterFlags(XtermWidget /* xw */, String * /* params */, Cardinal * /* param_count */);
1039extern int xtermPrinterControl (XtermWidget /* xw */, int /* chr */);
1040extern void setPrinterControlMode (XtermWidget /* xw */, int /* mode */);
1041extern void xtermAutoPrint (XtermWidget /* xw */, unsigned /* chr */);
1042extern void xtermMediaControl (XtermWidget /* xw */, int  /* param */, int  /* private_seq */);
1043extern void xtermPrintScreen (XtermWidget /* xw */, Bool  /* use_DECPEX */, PrinterFlags * /* p */);
1044extern void xtermPrintEverything (XtermWidget /* xw */, PrinterFlags * /* p */);
1045
1046/* ptydata.c */
1047#ifdef VMS
1048#define PtySelect int
1049#else
1050#define PtySelect fd_set
1051#endif
1052
1053extern Bool decodeUtf8 (PtyData * /* data */);
1054extern int readPtyData (XtermWidget /* xw */, PtySelect * /* select_mask */, PtyData * /* data */);
1055extern void fillPtyData (XtermWidget /* xw */, PtyData * /* data */, const char * /* value */, int  /* length */);
1056extern void initPtyData (PtyData ** /* data */);
1057extern void trimPtyData (XtermWidget /* xw */, PtyData * /* data */);
1058
1059#ifdef NO_LEAKS
1060extern void noleaks_ptydata ( void );
1061#endif
1062
1063#if OPT_WIDE_CHARS
1064extern Char *convertToUTF8 (Char * /* lp */, unsigned  /* c */);
1065extern IChar nextPtyData (TScreen * /* screen */, PtyData * /* data */);
1066extern IChar skipPtyData (PtyData * /* data */);
1067extern PtyData * fakePtyData(PtyData * /* result */, Char * /* next */, Char * /* last */);
1068extern void switchPtyData (TScreen * /* screen */, int  /* f */);
1069extern void writePtyData (int  /* f */, IChar * /* d */, unsigned  /* len */);
1070
1071#define morePtyData(screen,data) \
1072	(((data)->last > (data)->next) \
1073	 ? (((screen)->utf8_inparse && !(data)->utf_size) \
1074	    ? decodeUtf8(data) \
1075	    : True) \
1076	 : False)
1077#else
1078#define morePtyData(screen, data) ((data)->last > (data)->next)
1079#define nextPtyData(screen, data) (*((data)->next++) & \
1080					(screen->output_eight_bits \
1081					? 0xff \
1082					: 0x7f))
1083#define writePtyData(f,d,len) v_write(f,d,len)
1084#endif
1085
1086/* screen.c */
1087extern Bool non_blank_line (TScreen */* screen */, int  /* row */, int  /* col */, int  /* len */);
1088extern Char * allocScrnData(TScreen * /* screen */, unsigned /* nrow */, unsigned /* ncol */);
1089extern ScrnBuf allocScrnBuf (XtermWidget /* xw */, unsigned  /* nrow */, unsigned  /* ncol */, ScrnPtr * /* addr */);
1090extern ScrnBuf scrnHeadAddr (TScreen * /* screen */, ScrnBuf /* base */, unsigned /* offset */);
1091extern int ScreenResize (XtermWidget /* xw */, int  /* width */, int  /* height */, unsigned * /* flags */);
1092extern size_t ScrnPointers (TScreen * /* screen */, size_t  /* len */);
1093extern void ClearBufRows (XtermWidget /* xw */, int  /* first */, int  /* last */);
1094extern void ClearCells (XtermWidget /* xw */, int /* flags */, unsigned /* len */, int /* row */, int /* col */);
1095extern void ScrnAllocBuf (XtermWidget /* xw */);
1096extern void ScrnClearCells (XtermWidget /* xw */, int /* row */, int /* col */, unsigned /* len */);
1097extern void ScrnDeleteChar (XtermWidget /* xw */, unsigned  /* n */);
1098extern void ScrnDeleteLine (XtermWidget /* xw */, ScrnBuf  /* sb */, int  /* n */, int  /* last */, unsigned /* where */);
1099extern void ScrnDisownSelection (XtermWidget /* xw */);
1100extern void ScrnFillRectangle (XtermWidget /* xw */, XTermRect *,  int ,  unsigned /* flags */, Bool /* keepColors */);
1101extern void ScrnInsertChar (XtermWidget /* xw */, unsigned  /* n */);
1102extern void ScrnInsertLine (XtermWidget /* xw */, ScrnBuf /* sb */, int  /* last */, int  /* where */, unsigned  /* n */);
1103extern void ScrnRefresh (XtermWidget /* xw */, int  /* toprow */, int  /* leftcol */, int  /* nrows */, int  /* ncols */, Bool  /* force */);
1104extern void ScrnUpdate (XtermWidget /* xw */, int  /* toprow */, int  /* leftcol */, int  /* nrows */, int  /* ncols */, Bool  /* force */);
1105extern void ScrnWriteText (XtermWidget /* xw */, IChar * /* str */, unsigned  /* flags */, unsigned /* cur_fg_bg */, unsigned  /* length */);
1106extern void ShowWrapMarks (XtermWidget /* xw */, int /* row */, LineData * /* ld */);
1107extern void setupLineData (TScreen * /* screen */, ScrnBuf /* base */, Char * /* data */, unsigned /* nrow */, unsigned /* ncol */);
1108extern void xtermParseRect (XtermWidget /* xw */, int, int *, XTermRect *);
1109
1110#if OPT_TRACE && OPT_TRACE_FLAGS
1111extern int  LineTstFlag(LineData /* ld */, int /* flag */);
1112extern void LineClrFlag(LineData /* ld */, int /* flag */);
1113extern void LineSetFlag(LineData /* ld */, int /* flag */);
1114#else
1115
1116#define LineFlags(ld)         GetLineFlags(ld)
1117
1118#define LineClrFlag(ld, flag) SetLineFlags(ld, (GetLineFlags(ld) & ~ (flag)))
1119#define LineSetFlag(ld, flag) SetLineFlags(ld, (GetLineFlags(ld) | (flag)))
1120#define LineTstFlag(ld, flag) ((GetLineFlags(ld) & flag) != 0)
1121
1122#endif /* OPT_TRACE && OPT_TRACE_FLAGS */
1123
1124#define LineClrBlinked(ld) LineClrFlag(ld, LINEBLINKED)
1125#define LineSetBlinked(ld) LineSetFlag(ld, LINEBLINKED)
1126#define LineTstBlinked(ld) LineTstFlag(ld, LINEBLINKED)
1127
1128#define LineClrWrapped(ld) LineClrFlag(ld, LINEWRAPPED)
1129#define LineSetWrapped(ld) LineSetFlag(ld, LINEWRAPPED)
1130#define LineTstWrapped(ld) LineTstFlag(ld, LINEWRAPPED)
1131
1132#define ScrnHaveSelection(screen) \
1133			((screen)->startH.row != (screen)->endH.row \
1134			|| (screen)->startH.col != (screen)->endH.col)
1135
1136#define ScrnAreLinesInSelection(screen, first, last) \
1137	((last) >= (screen)->startH.row && (first) <= (screen)->endH.row)
1138
1139#define ScrnIsLineInSelection(screen, line) \
1140	((line) >= (screen)->startH.row && (line) <= (screen)->endH.row)
1141
1142#define ScrnHaveLineMargins(screen) \
1143			((screen)->top_marg != 0 \
1144			|| ((screen)->bot_marg != screen->max_row))
1145
1146#define ScrnIsLineInMargins(screen, line) \
1147	((line) >= (screen)->top_marg && (line) <= (screen)->bot_marg)
1148
1149#if OPT_DEC_RECTOPS
1150extern void ScrnCopyRectangle (XtermWidget /* xw */, XTermRect *, int, int *);
1151extern void ScrnMarkRectangle (XtermWidget /* xw */, XTermRect *, Bool, int, int *);
1152extern void ScrnWipeRectangle (XtermWidget /* xw */, XTermRect *);
1153#endif
1154
1155#if OPT_WIDE_CHARS
1156extern void ChangeToWide(XtermWidget /* xw */);
1157#endif
1158
1159/* scrollback.c */
1160extern LineData *getScrollback (TScreen * /* screen */, int /* row */);
1161extern LineData *addScrollback (TScreen * /* screen */);
1162extern void deleteScrollback (TScreen * /* screen */, int /* row */);
1163
1164/* scrollbar.c */
1165extern void DoResizeScreen (XtermWidget /* xw */);
1166extern void HandleScrollBack           PROTO_XT_ACTIONS_ARGS;
1167extern void HandleScrollForward        PROTO_XT_ACTIONS_ARGS;
1168extern void ResizeScrollBar (XtermWidget  /* xw */);
1169extern void ScrollBarDrawThumb (Widget  /* scrollWidget */);
1170extern void ScrollBarOff (XtermWidget  /* xw */);
1171extern void ScrollBarOn (XtermWidget  /* xw */, Bool /* init */);
1172extern void ScrollBarReverseVideo (Widget  /* scrollWidget */);
1173extern void ToggleScrollBar (XtermWidget  /* xw */);
1174extern void WindowScroll (XtermWidget /* xw */, int  /* top */, Bool /* always */);
1175
1176#ifdef SCROLLBAR_RIGHT
1177extern void updateRightScrollbar(XtermWidget  /* xw */);
1178#else
1179#define updateRightScrollbar(xw) /* nothing */
1180#endif
1181
1182/* tabs.c */
1183extern Bool TabToNextStop (XtermWidget /* xw */);
1184extern Bool TabToPrevStop (XtermWidget /* xw */);
1185extern void TabClear (Tabs  /* tabs */, int  /* col */);
1186extern void TabReset (Tabs  /* tabs */);
1187extern void TabSet (Tabs  /* tabs */, int  /* col */);
1188extern void TabZonk (Tabs  /* tabs */);
1189
1190/* util.c */
1191extern Boolean isDefaultBackground(const char * /* name */);
1192extern Boolean isDefaultForeground(const char * /* name */);
1193extern GC updatedXtermGC (XtermWidget /* xw */, unsigned  /* flags */, unsigned /* fg_bg */, Bool  /* hilite */);
1194extern int AddToRefresh (XtermWidget /* xw */);
1195extern int ClearInLine (XtermWidget /* xw */, int /* row */, int /* col */, unsigned /* len */);
1196extern int HandleExposure (XtermWidget /* xw */, XEvent * /* event */);
1197extern int drawXtermText (XtermWidget /* xw */, unsigned /* flags */, GC /* gc */, int /* x */, int /* y */, int /* chrset */, IChar * /* text */, Cardinal /* len */, int /* on_wide */);
1198extern void ChangeColors (XtermWidget  /* xw */, ScrnColors * /* pNew */);
1199extern void ClearRight (XtermWidget /* xw */, int /* n */);
1200extern void ClearScreen (XtermWidget /* xw */);
1201extern void DeleteChar (XtermWidget /* xw */, unsigned /* n */);
1202extern void DeleteLine (XtermWidget /* xw */, int /* n */);
1203extern void FlushScroll (XtermWidget /* xw */);
1204extern void GetColors (XtermWidget  /* xw */, ScrnColors * /* pColors */);
1205extern void InsertChar (XtermWidget /* xw */, unsigned /* n */);
1206extern void InsertLine (XtermWidget /* xw */, int  /* n */);
1207extern void RevScroll (XtermWidget /* xw */, int  /* amount */);
1208extern void ReverseVideo (XtermWidget  /* termw */);
1209extern void WriteText (XtermWidget /* xw */, IChar * /* str */, Cardinal /* len */);
1210extern void decode_keyboard_type (XtermWidget /* xw */, struct XTERM_RESOURCE * /* rp */);
1211extern void decode_wcwidth (XtermWidget  /* xw */);
1212extern void do_erase_display (XtermWidget /* xw */, int  /* param */, int  /* mode */);
1213extern void do_erase_line (XtermWidget /* xw */, int  /* param */, int  /* mode */);
1214extern void getXtermSizeHints (XtermWidget /* xw */);
1215extern void init_keyboard_type (XtermWidget /* xw */, xtermKeyboardType /* type */, Bool  /* set */);
1216extern void recolor_cursor (TScreen * /* screen */, Cursor  /* cursor */, unsigned long  /* fg */, unsigned long  /* bg */);
1217extern void resetXtermGC (XtermWidget /* xw */, unsigned  /* flags */, Bool  /* hilite */);
1218extern void scrolling_copy_area (XtermWidget /* xw */, int  /* firstline */, int  /* nlines */, int  /* amount */);
1219extern void set_keyboard_type (XtermWidget /* xw */, xtermKeyboardType  /* type */, Bool  /* set */);
1220extern void toggle_keyboard_type (XtermWidget /* xw */, xtermKeyboardType  /* type */);
1221extern void update_keyboard_type (void);
1222extern void xtermClear (XtermWidget /* xw */);
1223extern void xtermRepaint (XtermWidget /* xw */);
1224extern void xtermScroll (XtermWidget /* xw */, int /* amount */);
1225extern void xtermSizeHints (XtermWidget  /* xw */, int /* scrollbarWidth */);
1226
1227#if OPT_ISO_COLORS
1228
1229extern unsigned extract_fg (XtermWidget /* xw */, unsigned  /* color */, unsigned  /* flags */);
1230extern unsigned extract_bg (XtermWidget /* xw */, unsigned  /* color */, unsigned  /* flags */);
1231extern CellColor makeColorPair (int  /* fg */, int  /* bg */);
1232extern void ClearCurBackground (XtermWidget /* xw */, int  /* top */, int  /* left */, unsigned  /* height */, unsigned  /* width */);
1233
1234#define xtermColorPair(xw) makeColorPair(xw->sgr_foreground, xw->sgr_background)
1235
1236#define getXtermForeground(xw, flags, color) \
1237	(((flags) & FG_COLOR) && ((int)(color) >= 0 && (color) < MAXCOLORS) \
1238			? GET_COLOR_RES(xw, TScreenOf(xw)->Acolors[color]) \
1239			: T_COLOR(TScreenOf(xw), TEXT_FG))
1240
1241#define getXtermBackground(xw, flags, color) \
1242	(((flags) & BG_COLOR) && ((int)(color) >= 0 && (color) < MAXCOLORS) \
1243			? GET_COLOR_RES(xw, TScreenOf(xw)->Acolors[color]) \
1244			: T_COLOR(TScreenOf(xw), TEXT_BG))
1245
1246#if OPT_COLOR_RES
1247#define GET_COLOR_RES(xw, res) xtermGetColorRes(xw, &(res))
1248#define SET_COLOR_RES(res,color) (res)->value = color
1249#define EQL_COLOR_RES(res,color) (res)->value == color
1250#define T_COLOR(v,n) (v)->Tcolors[n].value
1251extern Pixel xtermGetColorRes(XtermWidget /* xw */, ColorRes * /* res */);
1252#else
1253#define GET_COLOR_RES(xw, res) res
1254#define SET_COLOR_RES(res,color) *res = color
1255#define EQL_COLOR_RES(res,color) *res == color
1256#define T_COLOR(v,n) (v)->Tcolors[n]
1257#endif
1258
1259#define ExtractForeground(color) (unsigned) GetCellColorFG(color)
1260#define ExtractBackground(color) (unsigned) GetCellColorBG(color)
1261
1262#define MapToColorMode(fg, screen, flags) \
1263	(((screen)->colorBLMode && ((flags) & BLINK)) \
1264	 ? COLOR_BL \
1265	 : (((screen)->colorULMode && ((flags) & UNDERLINE)) \
1266	    ? COLOR_UL \
1267	    : (((screen)->colorBDMode && ((flags) & BOLD)) \
1268	       ? COLOR_BD \
1269	       : fg)))
1270
1271#define checkVeryBoldAttr(flags, fg, code, attr) \
1272	if ((flags & FG_COLOR) != 0 \
1273	 && (screen->veryBoldColors & attr) == 0 \
1274	 && (flags & attr) != 0 \
1275	 && (fg == code)) \
1276		 UIntClr(flags, attr)
1277
1278#define checkVeryBoldColors(flags, fg) \
1279	checkVeryBoldAttr(flags, fg, COLOR_RV, INVERSE); \
1280	checkVeryBoldAttr(flags, fg, COLOR_UL, UNDERLINE); \
1281	checkVeryBoldAttr(flags, fg, COLOR_BD, BOLD); \
1282	checkVeryBoldAttr(flags, fg, COLOR_BL, BLINK)
1283
1284#else /* !OPT_ISO_COLORS */
1285
1286#define MapToColorMode(fg, screen, flags) fg
1287
1288#define ClearDFtBackground(xw, top, left, height, width) \
1289	ClearCurBackground(xw, top, left, height, width)
1290
1291#define ClearCurBackground(xw, top, left, height, width) \
1292	XClearArea (TScreenOf(xw)->display, VWindow(TScreenOf(xw)), \
1293		left, top, width, height, False)
1294
1295#define extract_fg(xw, color, flags) (xw)->cur_foreground
1296#define extract_bg(xw, color, flags) (xw)->cur_background
1297
1298		/* FIXME: Reverse-Video? */
1299#define T_COLOR(v,n) (v)->Tcolors[n]
1300#define getXtermBackground(xw, flags, color) T_COLOR(TScreenOf(xw), TEXT_BG)
1301#define getXtermForeground(xw, flags, color) T_COLOR(TScreenOf(xw), TEXT_FG)
1302#define makeColorPair(fg, bg) 0
1303#define xtermColorPair(xw) 0
1304
1305#define checkVeryBoldColors(flags, fg) /* nothing */
1306
1307#endif	/* OPT_ISO_COLORS */
1308
1309#define XTERM_CELL(row,col)    getXtermCell(screen,     ROW2INX(screen, row), col)
1310
1311extern unsigned getXtermCell (TScreen * /* screen */, int  /* row */, int  /* col */);
1312extern void putXtermCell (TScreen * /* screen */, int  /* row */, int  /* col */, int  /* ch */);
1313
1314#if OPT_HIGHLIGHT_COLOR
1315#define isNotForeground(xw, fg, bg, sel) \
1316		(Boolean) ((sel) != T_COLOR(TScreenOf(xw), TEXT_FG) \
1317			   && (sel) != (fg) \
1318			   && (sel) != (bg) \
1319			   && (sel) != (xw)->dft_foreground)
1320#define isNotBackground(xw, fg, bg, sel) \
1321		(Boolean) ((sel) != T_COLOR(TScreenOf(xw), TEXT_BG) \
1322			   && (sel) != (fg) \
1323			   && (sel) != (bg) \
1324			   && (sel) != (xw)->dft_background)
1325#endif
1326
1327#if OPT_WIDE_CHARS
1328extern Boolean isWideControl(unsigned /* ch */);
1329extern int DamagedCells(TScreen * /* screen */, unsigned /* n */, int * /* klp */, int * /* krp */, int /* row */, int /* col */);
1330extern int DamagedCurCells(TScreen * /* screen */, unsigned /* n */, int * /* klp */, int * /* krp */);
1331extern unsigned AsciiEquivs(unsigned /* ch */);
1332extern void addXtermCombining (TScreen * /* screen */, int  /* row */, int  /* col */, unsigned  /* ch */);
1333extern void allocXtermChars(ScrnPtr * /* buffer */, Cardinal /* length */);
1334#endif
1335
1336#if OPT_XMC_GLITCH
1337extern void Mark_XMC (XtermWidget /* xw */, int  /* param */);
1338extern void Jump_XMC (XtermWidget /* xw */);
1339extern void Resolve_XMC (XtermWidget /* xw */);
1340#endif
1341
1342#if OPT_WIDE_CHARS
1343unsigned visual_width(IChar * /* str */, Cardinal  /* len */);
1344#else
1345#define visual_width(a, b) (b)
1346#endif
1347
1348#define BtoS(b)    (((b) == Maybe) ? "maybe" : ((b) ? "on" : "off"))
1349#define NonNull(s) ((s) ? (s) : "<null>")
1350
1351#define UIntSet(dst,bits) dst = dst | (unsigned) (bits)
1352#define UIntClr(dst,bits) dst = dst & (unsigned) ~(bits)
1353
1354#ifdef __cplusplus
1355	}
1356#endif
1357
1358#endif	/* included_xterm_h */
1359