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