xterm.h revision 20d2c4d2
1/* $XTermId: xterm.h,v 1.628 2010/06/20 21:34:48 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 XtNsignalInhibit	"signalInhibit"
483#define XtNtekGeometry		"tekGeometry"
484#define XtNtekInhibit		"tekInhibit"
485#define XtNtekSmall		"tekSmall"
486#define XtNtekStartup		"tekStartup"
487#define XtNtiXtraScroll		"tiXtraScroll"
488#define XtNtiteInhibit		"titeInhibit"
489#define XtNtitleModes		"titleModes"
490#define XtNtoolBar		"toolBar"
491#define XtNtrimSelection	"trimSelection"
492#define XtNunderLine		"underLine"
493#define XtNuseClipping		"useClipping"
494#define XtNutf8			"utf8"
495#define XtNutf8Latin1		"utf8Latin1"
496#define XtNutf8SelectTypes	"utf8SelectTypes"
497#define XtNutf8Title		"utf8Title"
498#define XtNveryBoldColors	"veryBoldColors"
499#define XtNvisualBell		"visualBell"
500#define XtNvisualBellDelay	"visualBellDelay"
501#define XtNvt100Graphics	"vt100Graphics"
502#define XtNwideBoldFont		"wideBoldFont"
503#define XtNwideChars		"wideChars"
504#define XtNwideFont		"wideFont"
505#define XtNximFont		"ximFont"
506#define XtNxmcAttributes	"xmcAttributes"
507#define XtNxmcGlitch		"xmcGlitch"
508#define XtNxmcInline		"xmcInline"
509#define XtNxmcMoveSGR		"xmcMoveSGR"
510
511#define XtCAllowC1Printable	"AllowC1Printable"
512#define XtCAllowColorOps	"AllowColorOps"
513#define XtCAllowFontOps		"AllowFontOps"
514#define XtCAllowScrollLock	"AllowScrollLock"
515#define XtCAllowSendEvents	"AllowSendEvents"
516#define XtCAllowTcapOps		"AllowTcapOps"
517#define XtCAllowTitleOps	"AllowTitleOps"
518#define XtCAllowWindowOps	"AllowWindowOps"
519#define XtCAltIsNotMeta		"AltIsNotMeta"
520#define XtCAltSendsEscape	"AltSendsEscape"
521#define XtCAlwaysBoldMode	"AlwaysBoldMode"
522#define XtCAlwaysHighlight	"AlwaysHighlight"
523#define XtCAlwaysUseMods	"AlwaysUseMods"
524#define XtCAnswerbackString	"AnswerbackString"
525#define XtCAppcursorDefault	"AppcursorDefault"
526#define XtCAppkeypadDefault	"AppkeypadDefault"
527#define XtCAutoWrap		"AutoWrap"
528#define XtCAwaitInput		"AwaitInput"
529#define XtCBackarrowKey		"BackarrowKey"
530#define XtCBellIsUrgent		"BellIsUrgent"
531#define XtCBellOnReset		"BellOnReset"
532#define XtCBellSuppressTime	"BellSuppressTime"
533#define XtCBoldFont		"BoldFont"
534#define XtCBoldMode		"BoldMode"
535#define XtCBrokenLinuxOSC	"BrokenLinuxOSC"
536#define XtCBrokenSelections	"BrokenSelections"
537#define XtCBrokenStringTerm	"BrokenStringTerm"
538#define XtCC132			"C132"
539#define XtCCacheDoublesize	"CacheDoublesize"
540#define XtCCharClass		"CharClass"
541#define XtCCjkWidth 		"CjkWidth"
542#define XtCColorAttrMode	"ColorAttrMode"
543#define XtCColorMode		"ColorMode"
544#define XtCColumn		"Column"
545#define XtCCombiningChars	"CombiningChars"
546#define XtCCtrlFKeys		"CtrlFKeys"
547#define XtCCurses		"Curses"
548#define XtCCursorBlink		"CursorBlink"
549#define XtCCursorOffTime	"CursorOffTime"
550#define XtCCursorOnTime		"CursorOnTime"
551#define XtCCursorUnderline	"CursorUnderLine"
552#define XtCCutNewline		"CutNewline"
553#define XtCCutToBeginningOfLine	"CutToBeginningOfLine"
554#define XtCDecTerminalID	"DecTerminalID"
555#define XtCDefaultString	"DefaultString"
556#define XtCDeleteIsDEL		"DeleteIsDEL"
557#define XtCDisallowedColorOps	"DisallowedColorOps"
558#define XtCDisallowedFontOps	"DisallowedFontOps"
559#define XtCDisallowedTcapOps	"DisallowedTcapOps"
560#define XtCDisallowedWindowOps	"DisallowedWindowOps"
561#define XtCDynamicColors	"DynamicColors"
562#define XtCEightBitControl	"EightBitControl"
563#define XtCEightBitInput	"EightBitInput"
564#define XtCEightBitOutput	"EightBitOutput"
565#define XtCEightBitSelectTypes	"EightBitSelectTypes"
566#define XtCFaceName		"FaceName"
567#define XtCFaceNameDoublesize	"FaceNameDoublesize"
568#define XtCFaceSize		"FaceSize"
569#define XtCFastScroll		"FastScroll"
570#define XtCFont1		"Font1"
571#define XtCFont2		"Font2"
572#define XtCFont3		"Font3"
573#define XtCFont4		"Font4"
574#define XtCFont5		"Font5"
575#define XtCFont6		"Font6"
576#define XtCFontDoublesize	"FontDoublesize"
577#define XtCFontStyle		"FontStyle"
578#define XtCFontWarnings		"FontWarnings"
579#define XtCForceBoxChars	"ForceBoxChars"
580#define XtCForcePackedFont	"ForcePackedFont"
581#define XtCFormatOtherKeys	"FormatOtherKeys"
582#define XtCFreeBoldBox		"FreeBoldBox"
583#define XtCHighlightColorMode	"HighlightColorMode"
584#define XtCHighlightReverse	"HighlightReverse"
585#define XtCHighlightSelection	"HighlightSelection"
586#define XtCHpLowerleftBugCompat	"HpLowerleftBugCompat"
587#define XtCI18nSelections	"I18nSelections"
588#define XtCInitialFont		"InitialFont"
589#define XtCJumpScroll		"JumpScroll"
590#define XtCKeepSelection	"KeepSelection"
591#define XtCKeyboardDialect	"KeyboardDialect"
592#define XtCLimitResize		"LimitResize"
593#define XtCLocale		"Locale"
594#define XtCLocaleFilter		"LocaleFilter"
595#define XtCLogInhibit		"LogInhibit"
596#define XtCLogfile		"Logfile"
597#define XtCLogging		"Logging"
598#define XtCLoginShell		"LoginShell"
599#define XtCMarginBell		"MarginBell"
600#define XtCMaximized		"Maximized"
601#define XtCMenuBar		"MenuBar"
602#define XtCMenuHeight		"MenuHeight"
603#define XtCMetaSendsEscape	"MetaSendsEscape"
604#define XtCMkSamplePass 	"MkSamplePass"
605#define XtCMkSampleSize 	"MkSampleSize"
606#define XtCMkWidth 		"MkWidth"
607#define XtCModifyCursorKeys	"ModifyCursorKeys"
608#define XtCModifyFunctionKeys	"ModifyFunctionKeys"
609#define XtCModifyKeypadKeys	"ModifyKeypadKeys"
610#define XtCModifyOtherKeys	"ModifyOtherKeys"
611#define XtCModifyStringKeys	"ModifyStringKeys"
612#define XtCMultiClickTime	"MultiClickTime"
613#define XtCMultiScroll		"MultiScroll"
614#define XtCNumLock		"NumLock"
615#define XtCOldXtermFKeys	"OldXtermFKeys"
616#define XtCPointerMode		"PointerMode"
617#define XtCPopOnBell		"PopOnBell"
618#define XtCPrintAttributes	"PrintAttributes"
619#define XtCPrinterAutoClose	"PrinterAutoClose"
620#define XtCPrinterCommand	"PrinterCommand"
621#define XtCPrinterControlMode	"PrinterControlMode"
622#define XtCPrinterExtent	"PrinterExtent"
623#define XtCPrinterFormFeed	"PrinterFormFeed"
624#define XtCPrinterNewLine	"PrinterNewLine"
625#define XtCQuietGrab		"QuietGrab"
626#define XtCRenderFont		"RenderFont"
627#define XtCResizeGravity	"ResizeGravity"
628#define XtCRetryInputMethod     "RetryInputMethod"
629#define XtCReverseWrap		"ReverseWrap"
630#define XtCRightScrollBar	"RightScrollBar"
631#define XtCSaveLines		"SaveLines"
632#define XtCScrollBar		"ScrollBar"
633#define XtCScrollBarBorder	"ScrollBarBorder"
634#define XtCScrollCond		"ScrollCond"
635#define XtCScrollLines		"ScrollLines"
636#define XtCScrollPos		"ScrollPos"
637#define XtCSelectToClipboard	"SelectToClipboard"
638#define XtCShiftFonts		"ShiftFonts"
639#define XtCShowBlinkAsBold	"ShowBlinkAsBold"
640#define XtCShowMissingGlyphs	"ShowMissingGlyphs"
641#define XtCSignalInhibit	"SignalInhibit"
642#define XtCTekInhibit		"TekInhibit"
643#define XtCTekSmall		"TekSmall"
644#define XtCTekStartup		"TekStartup"
645#define XtCTiXtraScroll		"TiXtraScroll"
646#define XtCTiteInhibit		"TiteInhibit"
647#define XtCTitleModes		"TitleModes"
648#define XtCToolBar		"ToolBar"
649#define XtCTrimSelection	"TrimSelection"
650#define XtCUnderLine		"UnderLine"
651#define XtCUseClipping		"UseClipping"
652#define XtCUtf8			"Utf8"
653#define XtCUtf8Latin1		"Utf8Latin1"
654#define XtCUtf8SelectTypes	"Utf8SelectTypes"
655#define XtCUtf8Title		"Utf8Title"
656#define XtCVT100Graphics	"VT100Graphics"
657#define XtCVeryBoldColors	"VeryBoldColors"
658#define XtCVisualBell		"VisualBell"
659#define XtCVisualBellDelay	"VisualBellDelay"
660#define XtCWideBoldFont		"WideBoldFont"
661#define XtCWideChars		"WideChars"
662#define XtCWideFont		"WideFont"
663#define XtCXimFont		"XimFont"
664#define XtCXmcAttributes	"XmcAttributes"
665#define XtCXmcGlitch		"XmcGlitch"
666#define XtCXmcInline		"XmcInline"
667#define XtCXmcMoveSGR		"XmcMoveSGR"
668
669#if defined(NO_ACTIVE_ICON) && !defined(XtNgeometry)
670#define XtNgeometry		"geometry"
671#define XtCGeometry		"Geometry"
672#endif
673
674#if OPT_COLOR_CLASS
675#define XtCCursorColor		"CursorColor"
676#define XtCPointerColor		"PointerColor"
677#define XtCHighlightColor	"HighlightColor"
678#define XtCHighlightTextColor	"HighlightTextColor"
679#else
680#define XtCCursorColor		XtCForeground
681#define XtCPointerColor		XtCForeground
682#define XtCHighlightColor	XtCForeground
683#define XtCHighlightTextColor	XtCBackground
684#endif
685
686/***====================================================================***/
687
688#ifdef __cplusplus
689extern "C" {
690#endif
691
692struct XTERM_RESOURCE;
693
694/* Tekproc.c */
695#if OPT_TEK4014
696extern TekWidget getTekWidget(Widget /* w */);
697extern int TekGetFontSize (const char * /* param */);
698extern int TekInit (void);
699extern int TekPtyData(void);
700extern void ChangeTekColors (TekWidget /* tw */, TScreen * /* screen */, ScrnColors * /* pNew */);
701extern void HandleGINInput             PROTO_XT_ACTIONS_ARGS;
702extern void TCursorToggle (TekWidget /* tw */, int /* toggle */);
703extern void TekCopy (TekWidget /* tw */);
704extern void TekEnqMouse (TekWidget /* tw */, int /* c */);
705extern void TekExpose (Widget  /* w */, XEvent * /* event */, Region  /* region */);
706extern void TekGINoff (TekWidget /* tw */);
707extern void TekRefresh (TekWidget /* tw */);
708extern void TekRepaint (TekWidget /* xw */);
709extern void TekReverseVideo (TekWidget /* tw */);
710extern void TekRun (void);
711extern void TekSetFontSize (TekWidget /* tw */, Bool /* fromMenu */, int  /* newitem */);
712extern void TekSimulatePageButton (TekWidget /* tw */, Bool /* reset */);
713#endif
714
715/* button.c */
716#define	MotionOff( s, t ) {						\
717	    (s)->event_mask |= ButtonMotionMask;			\
718	    (s)->event_mask &= ~PointerMotionMask;			\
719	    XSelectInput(XtDisplay((t)), XtWindow((t)), (long) (s)->event_mask); }
720
721#define	MotionOn( s, t ) {						\
722	    (s)->event_mask &= ~ButtonMotionMask;			\
723	    (s)->event_mask |= PointerMotionMask;			\
724	    XSelectInput(XtDisplay((t)), XtWindow((t)), (long) (s)->event_mask); }
725
726extern Bool SendMousePosition (XtermWidget  /* w */, XEvent*  /* event */);
727extern void DiredButton                PROTO_XT_ACTIONS_ARGS;
728extern void DisownSelection (XtermWidget  /* termw */);
729extern void UnhiliteSelection (XtermWidget  /* termw */);
730extern void HandleInsertSelection      PROTO_XT_ACTIONS_ARGS;
731extern void HandleKeyboardSelectEnd    PROTO_XT_ACTIONS_ARGS;
732extern void HandleKeyboardSelectExtend PROTO_XT_ACTIONS_ARGS;
733extern void HandleKeyboardSelectStart  PROTO_XT_ACTIONS_ARGS;
734extern void HandleKeyboardStartExtend  PROTO_XT_ACTIONS_ARGS;
735extern void HandleSelectEnd            PROTO_XT_ACTIONS_ARGS;
736extern void HandleSelectExtend         PROTO_XT_ACTIONS_ARGS;
737extern void HandleSelectSet            PROTO_XT_ACTIONS_ARGS;
738extern void HandleSelectStart          PROTO_XT_ACTIONS_ARGS;
739extern void HandleStartExtend          PROTO_XT_ACTIONS_ARGS;
740extern void ResizeSelection (TScreen * /* screen */, int  /* rows */, int  /* cols */);
741extern void ScrollSelection (TScreen * /* screen */, int  /* amount */,  Bool /* always */);
742extern void TrackMouse (XtermWidget /* xw */, int /* func */, CELL * /* start */, int /* firstrow */, int /* lastrow */);
743extern void ViButton                   PROTO_XT_ACTIONS_ARGS;
744
745extern int xtermUtf8ToTextList(XtermWidget /* xw */, XTextProperty * /* text_prop */, char *** /* text_list */, int * /* text_list_count */);
746
747#if OPT_DEC_LOCATOR
748extern void GetLocatorPosition (XtermWidget  /* w */);
749extern void InitLocatorFilter (XtermWidget  /* w */);
750#endif	/* OPT_DEC_LOCATOR */
751
752#if OPT_FOCUS_EVENT
753extern void SendFocusButton(XtermWidget /* xw */, XFocusChangeEvent * /* event */);
754#else
755#define SendFocusBotton(xw, event) /* nothing */
756#endif
757
758#if OPT_PASTE64
759extern void AppendToSelectionBuffer (TScreen * /* screen */, unsigned  /* c */);
760extern void ClearSelectionBuffer (TScreen * /* screen */);
761extern void CompleteSelection (XtermWidget  /* xw */, String * /* args */, Cardinal  /* len */);
762extern void xtermGetSelection (Widget  /* w */, Time  /* ev_time */, String * /* params */, Cardinal  /* num_params */, Atom * /* targets */);
763#endif
764
765#if OPT_READLINE
766extern void ReadLineButton             PROTO_XT_ACTIONS_ARGS;
767#endif
768
769#if OPT_WIDE_CHARS
770extern Bool iswide(int  /* i */);
771#define WideCells(n) (((IChar)(n) >= first_widechar) ? my_wcwidth((wchar_t) (n)) : 1)
772#define isWide(n)    (((IChar)(n) >= first_widechar) && iswide(n))
773#else
774#define WideCells(n) 1
775#endif
776
777/* cachedCgs.c */
778extern CgsEnum getCgsId(XtermWidget /*xw*/, VTwin * /*cgsWin*/, GC /*gc*/);
779extern GC freeCgs(XtermWidget /*xw*/, VTwin * /*cgsWin*/, CgsEnum /*cgsId*/);
780extern GC getCgsGC(XtermWidget /*xw*/, VTwin * /*cgsWin*/, CgsEnum /*cgsId*/);
781extern Pixel getCgsBack(XtermWidget /*xw*/, VTwin * /*cgsWin*/, GC /*gc*/);
782extern Pixel getCgsFore(XtermWidget /*xw*/, VTwin * /*cgsWin*/, GC /*gc*/);
783extern XTermFonts * getCgsFont(XtermWidget /*xw*/, VTwin * /*cgsWin*/, GC /*gc*/);
784extern void clrCgsFonts(XtermWidget /*xw*/, VTwin * /*cgsWin*/, XTermFonts * /*font*/);
785extern void copyCgs(XtermWidget /*xw*/, VTwin * /*cgsWin*/, CgsEnum /*dstCgsId*/, CgsEnum /*srcCgsId*/);
786extern void redoCgs(XtermWidget /*xw*/, Pixel /*fg*/, Pixel /*bg*/, CgsEnum /*cgsId*/);
787extern void setCgsBack(XtermWidget /*xw*/, VTwin * /*cgsWin*/, CgsEnum /*cgsId*/, Pixel /*bg*/);
788extern void setCgsCSet(XtermWidget /*xw*/, VTwin * /*cgsWin*/, CgsEnum /*cgsId*/, unsigned /*cset*/);
789extern void setCgsFont(XtermWidget /*xw*/, VTwin * /*cgsWin*/, CgsEnum /*cgsId*/, XTermFonts * /*font*/);
790extern void setCgsFore(XtermWidget /*xw*/, VTwin * /*cgsWin*/, CgsEnum /*cgsId*/, Pixel /*fg*/);
791extern void swapCgs(XtermWidget /*xw*/, VTwin * /*cgsWin*/, CgsEnum /*dstCgsId*/, CgsEnum /*srcCgsId*/);
792
793#ifdef NO_LEAKS
794extern void noleaks_cachedCgs (XtermWidget /* xw */);
795#endif
796
797/* charproc.c */
798extern Bool CheckBufPtrs (TScreen * /* screen */);
799extern int VTInit (XtermWidget /* xw */);
800extern void FindFontSelection (XtermWidget /* xw */, const char * /* atom_name */, Bool  /* justprobe */);
801extern void HideCursor (void);
802extern void RestartBlinking(TScreen * /* screen */);
803extern void ShowCursor (void);
804extern void SwitchBufPtrs (TScreen * /* screen */, int /* toBuf */);
805extern void ToggleAlternate (XtermWidget /* xw */);
806extern void VTReset (XtermWidget /* xw */, int /* full */, int /* saved */);
807extern void VTRun (XtermWidget /* xw */);
808extern void dotext (XtermWidget /* xw */, int  /* charset */, IChar * /* buf */, Cardinal  /* len */);
809extern void releaseCursorGCs(XtermWidget /*xw*/);
810extern void releaseWindowGCs(XtermWidget /*xw*/, VTwin * /*win*/);
811extern void resetCharsets (TScreen * /* screen */);
812extern void set_cursor_gcs (XtermWidget /* xw */);
813extern void set_max_col(TScreen *  /* screen */, int  /* cols */);
814extern void set_max_row(TScreen *  /* screen */, int  /* rows */);
815extern void set_tb_margins (TScreen * /* screen */, int  /* top */, int  /* bottom */);
816extern void unparse_end (XtermWidget /* xw */);
817extern void unparseputc (XtermWidget /* xw */, int  /* c */);
818extern void unparseputc1 (XtermWidget /* xw */, int  /* c */);
819extern void unparseputn (XtermWidget /* xw */, unsigned /* n */);
820extern void unparseputs (XtermWidget /* xw */, const char * /* s */);
821extern void unparseseq (XtermWidget /* xw */, ANSI * /* ap */);
822extern void v_write (int  /* f */, Char * /* d */, unsigned  /* len */);
823extern void xtermAddInput(Widget  /* w */);
824
825#if OPT_BLINK_CURS
826extern void ToggleCursorBlink(TScreen * /* screen */);
827#endif
828
829#if OPT_ISO_COLORS
830extern void SGR_Background (XtermWidget /* xw */, int  /* color */);
831extern void SGR_Foreground (XtermWidget /* xw */, int  /* color */);
832#endif
833
834#ifdef NO_LEAKS
835extern void noleaks_charproc (void);
836#endif
837
838/* charsets.c */
839extern unsigned xtermCharSetIn (unsigned  /* code */, int  /* charset */);
840extern int xtermCharSetOut (XtermWidget /* xw */, IChar * /* buf */, IChar * /* ptr */, int  /* charset */);
841
842/* cursor.c */
843extern void AdjustSavedCursor (XtermWidget /* xw */, int /* adjust */);
844extern void CarriageReturn (TScreen * /* screen */);
845extern void CursorBack (XtermWidget /* xw */, int   /* n */);
846extern void CursorDown (TScreen * /* screen */, int   /* n */);
847extern void CursorForward (TScreen * /* screen */, int   /* n */);
848extern void CursorNextLine (TScreen * /* screen */, int  /* count */);
849extern void CursorPrevLine (TScreen * /* screen */, int  /* count */);
850extern void CursorRestore (XtermWidget  /* xw */);
851extern void CursorSave (XtermWidget  /* xw */);
852extern void CursorSet (TScreen * /* screen */, int  /* row */, int  /* col */, unsigned  /* flags */);
853extern void CursorUp (TScreen * /* screen */, int   /* n */);
854extern void RevIndex (XtermWidget /* xw */, int  /* amount */);
855extern void xtermIndex (XtermWidget /* xw */, int  /* amount */);
856
857#if OPT_TRACE
858extern int set_cur_col(TScreen * /* screen */, int  /* value */);
859extern int set_cur_row(TScreen * /* screen */, int  /* value */);
860#else
861#define set_cur_col(screen, value) screen->cur_col = value
862#define set_cur_row(screen, value) screen->cur_row = value
863#endif
864
865/* doublechr.c */
866extern void xterm_DECDHL (XtermWidget /* xw */, Bool  /* top */);
867extern void xterm_DECSWL (XtermWidget /* xw */);
868extern void xterm_DECDWL (XtermWidget /* xw */);
869#if OPT_DEC_CHRSET
870extern int xterm_Double_index(XtermWidget /* xw */, unsigned  /* chrset */, unsigned  /* flags */);
871extern GC xterm_DoubleGC(XtermWidget /* xw */, unsigned  /* chrset */, unsigned  /* flags */, GC  /* old_gc */, int * /* inxp */);
872#endif
873
874/* input.c */
875extern unsigned xtermParamToState (XtermWidget /* xw */, unsigned /* param */);
876extern unsigned xtermStateToParam (XtermWidget /* xw */, unsigned /* state */);
877extern Bool xtermDeleteIsDEL (XtermWidget /* xw */);
878extern void Input (XtermWidget /* xw */, XKeyEvent */* event */, Bool /* eightbit */);
879extern void StringInput (XtermWidget /* xw */, const Char * /* string */, size_t  /* nbytes */);
880
881#if OPT_NUM_LOCK
882extern void VTInitModifiers(XtermWidget /* xw */);
883#endif
884
885/* linedata.c */
886extern LineData *getLineData(TScreen * /* screen */, int /* row */);
887extern void copyLineData(LineData * /* dst */, LineData * /* src */);
888extern void initLineData(XtermWidget /* xw */);
889
890extern CellData *newCellData(XtermWidget /* xw */, Cardinal /* count */);
891extern void saveCellData(TScreen * /* screen */, CellData * /* data */, Cardinal /* cell */, LineData * /* ld */, int /* column */);
892extern void restoreCellData(TScreen * /* screen */, CellData * /* data */, Cardinal /* cell */, LineData * /* ld */, int /* column */);
893
894/* main.c */
895#ifndef __UNIXOS2__
896#define ENVP_ARG /**/
897#else
898#define ENVP_ARG , char ** /* envp */
899#endif
900
901extern int main (int  /* argc */, char ** /* argv */ ENVP_ARG);
902extern int GetBytesAvailable (int  /* fd */);
903extern int kill_process_group (int  /* pid */, int  /* sig */);
904extern int nonblocking_wait (void);
905
906#if OPT_PTY_HANDSHAKE
907extern void first_map_occurred (void);
908#else
909#define first_map_occurred() /* nothing */
910#endif
911
912#ifdef SIGNAL_T
913extern SIGNAL_T Exit (int  /* n */);
914#endif
915
916#ifndef SIG_ATOMIC_T
917#define SIG_ATOMIC_T int
918#endif
919
920#if OPT_WIDE_CHARS
921extern unsigned first_widechar;
922extern int (*my_wcwidth)(wchar_t);
923#endif
924
925/* menu.c */
926extern void do_hangup          PROTO_XT_CALLBACK_ARGS;
927extern void repairSizeHints    (void);
928extern void show_8bit_control  (Bool  /* value */);
929
930/* misc.c */
931extern Bool AllocateTermColor(XtermWidget, ScrnColors *, int, const char *, Bool);
932extern Cursor make_colored_cursor (unsigned /* cursorindex */, unsigned long  /* fg */, unsigned long  /* bg */);
933extern OptionHelp * sortedOpts(OptionHelp *, XrmOptionDescRec *, Cardinal);
934extern Window WMFrameWindow(XtermWidget /* termw */);
935extern XrmOptionDescRec * sortedOptDescs(XrmOptionDescRec *, Cardinal);
936extern XtermWidget getXtermWidget(Widget /* w */);
937extern char *udk_lookup (int /* keycode */, int * /* len */);
938extern char *xtermEnvEncoding (void);
939extern char *xtermEnvLocale (void);
940extern char *xtermFindShell(char * /* leaf */, Bool  /* warning */);
941extern char *xtermVersion(void);
942extern const char *SysErrorMsg (int /* n */);
943extern const char *SysReasonMsg (int /* n */);
944extern int ResetAnsiColorRequest(XtermWidget, char *, int);
945extern int XStrCmp (char * /* s1 */, char * /* s2 */);
946extern int creat_as (uid_t  /* uid */, gid_t  /* gid */, Bool  /* append */, char * /* pathname */, int  /* mode */);
947extern int open_userfile (uid_t  /* uid */, gid_t  /* gid */, char * /* path */, Bool  /* append */);
948extern int xerror (Display * /* d */, XErrorEvent * /* ev */);
949extern int xioerror (Display * /* dpy */);
950extern int xtermResetIds(TScreen *  /* screen */);
951extern void Bell (XtermWidget /* xw */, int  /* which */, int  /* percent */);
952extern void ChangeIconName (XtermWidget /* xw */, char * /* name */);
953extern void ChangeTitle (XtermWidget /* xw */, char * /* name */);
954extern void ChangeXprop (char * /* name */);
955extern void Cleanup (int  /* code */);
956extern void HandleBellPropertyChange   PROTO_XT_EV_HANDLER_ARGS;
957extern void HandleEightBitKeyPressed   PROTO_XT_ACTIONS_ARGS;
958extern void HandleEnterWindow          PROTO_XT_EV_HANDLER_ARGS;
959extern void HandleFocusChange          PROTO_XT_EV_HANDLER_ARGS;
960extern void HandleInterpret            PROTO_XT_ACTIONS_ARGS;
961extern void HandleKeyPressed           PROTO_XT_ACTIONS_ARGS;
962extern void HandleLeaveWindow          PROTO_XT_EV_HANDLER_ARGS;
963extern void HandleSpawnTerminal        PROTO_XT_ACTIONS_ARGS;
964extern void HandleStringEvent          PROTO_XT_ACTIONS_ARGS;
965extern void Panic (const char * /* s */, int  /* a */);
966extern void Redraw (void);
967extern void ReverseOldColors (void);
968extern void SysError (int  /* i */) GCC_NORETURN;
969extern void VisualBell (void);
970extern void do_dcs (XtermWidget /* xw */, Char * /* buf */, size_t  /* len */);
971extern void do_osc (XtermWidget /* xw */, Char * /* buf */, size_t  /* len */, int  /* final */);
972extern void do_xevents (void);
973extern void end_tek_mode (void);
974extern void end_vt_mode (void);
975extern void hide_tek_window (void);
976extern void hide_vt_window (void);
977extern void reset_decudk (void);
978extern void set_tek_visibility (Bool  /* on */);
979extern void set_vt_visibility (Bool  /* on */);
980extern void switch_modes (Bool  /* tovt */);
981extern void timestamp_filename(char * /* dst */, const char * /* src */);
982extern void xevents (void);
983extern void xt_error (String  /* message */);
984extern void xtermBell(XtermWidget /* xw */, int /* which */, int /* percent */);
985extern void xtermCopyEnv (char ** /* oldenv */);
986extern void xtermDisplayCursor (XtermWidget /* xw */);
987extern void xtermSetenv (const char * /* var */, const char * /* value */);
988extern void xtermShowPointer (XtermWidget /* xw */, Bool /* enable */);
989
990#if OPT_DABBREV
991extern void HandleDabbrevExpand        PROTO_XT_ACTIONS_ARGS;
992#endif
993
994#if OPT_MAXIMIZE
995extern int QueryMaximize (XtermWidget  /* termw */, unsigned * /* width */, unsigned * /* height */);
996extern void HandleDeIconify            PROTO_XT_ACTIONS_ARGS;
997extern void HandleIconify              PROTO_XT_ACTIONS_ARGS;
998extern void HandleMaximize             PROTO_XT_ACTIONS_ARGS;
999extern void HandleRestoreSize          PROTO_XT_ACTIONS_ARGS;
1000extern void RequestMaximize (XtermWidget  /* termw */, int  /* maximize */);
1001#endif
1002
1003#if OPT_SCROLL_LOCK
1004extern void GetScrollLock (TScreen * /* screen */);
1005extern void HandleScrollLock           PROTO_XT_ACTIONS_ARGS;
1006extern void ShowScrollLock (TScreen * /* screen */, Bool /* enable */);
1007extern void SetScrollLock (TScreen * /* screen */, Bool /* enable */);
1008extern void xtermShowLED (TScreen * /* screen */, Cardinal /* led_number */, Bool /* enable */);
1009extern void xtermClearLEDs (TScreen * /* screen */);
1010#else
1011#define ShowScrollLock(screen, enable) /* nothing */
1012#define SetScrollLock(screen, enable) /* nothing */
1013#define GetScrollLock(screen) /* nothing */
1014#endif
1015
1016#if OPT_WIDE_CHARS
1017extern Bool xtermEnvUTF8(void);
1018#else
1019#define xtermEnvUTF8() False
1020#endif
1021
1022#ifdef ALLOWLOGGING
1023extern void StartLog (XtermWidget /* xw */);
1024extern void CloseLog (XtermWidget /* xw */);
1025extern void FlushLog (XtermWidget /* xw */);
1026#else
1027#define FlushLog(xw) /*nothing*/
1028#endif
1029
1030/* print.c */
1031extern Bool xtermHasPrinter (XtermWidget /* xw */);
1032extern PrinterFlags *getPrinterFlags(XtermWidget /* xw */, String * /* params */, Cardinal * /* param_count */);
1033extern int xtermPrinterControl (XtermWidget /* xw */, int /* chr */);
1034extern void setPrinterControlMode (XtermWidget /* xw */, int /* mode */);
1035extern void xtermAutoPrint (XtermWidget /* xw */, unsigned /* chr */);
1036extern void xtermMediaControl (XtermWidget /* xw */, int  /* param */, int  /* private_seq */);
1037extern void xtermPrintScreen (XtermWidget /* xw */, Bool  /* use_DECPEX */, PrinterFlags * /* p */);
1038extern void xtermPrintEverything (XtermWidget /* xw */, PrinterFlags * /* p */);
1039
1040/* ptydata.c */
1041#ifdef VMS
1042#define PtySelect int
1043#else
1044#define PtySelect fd_set
1045#endif
1046
1047extern Bool decodeUtf8 (PtyData * /* data */);
1048extern int readPtyData (XtermWidget /* xw */, PtySelect * /* select_mask */, PtyData * /* data */);
1049extern void fillPtyData (XtermWidget /* xw */, PtyData * /* data */, const char * /* value */, int  /* length */);
1050extern void initPtyData (PtyData ** /* data */);
1051extern void trimPtyData (XtermWidget /* xw */, PtyData * /* data */);
1052
1053#ifdef NO_LEAKS
1054extern void noleaks_ptydata ( void );
1055#endif
1056
1057#if OPT_WIDE_CHARS
1058extern Char *convertToUTF8 (Char * /* lp */, unsigned  /* c */);
1059extern IChar nextPtyData (TScreen * /* screen */, PtyData * /* data */);
1060extern IChar skipPtyData (PtyData * /* data */);
1061extern PtyData * fakePtyData(PtyData * /* result */, Char * /* next */, Char * /* last */);
1062extern void switchPtyData (TScreen * /* screen */, int  /* f */);
1063extern void writePtyData (int  /* f */, IChar * /* d */, unsigned  /* len */);
1064
1065#define morePtyData(screen,data) \
1066	(((data)->last > (data)->next) \
1067	 ? (((screen)->utf8_inparse && !(data)->utf_size) \
1068	    ? decodeUtf8(data) \
1069	    : True) \
1070	 : False)
1071#else
1072#define morePtyData(screen, data) ((data)->last > (data)->next)
1073#define nextPtyData(screen, data) (*((data)->next++) & \
1074					(screen->output_eight_bits \
1075					? 0xff \
1076					: 0x7f))
1077#define writePtyData(f,d,len) v_write(f,d,len)
1078#endif
1079
1080/* screen.c */
1081extern Bool non_blank_line (TScreen */* screen */, int  /* row */, int  /* col */, int  /* len */);
1082extern Char * allocScrnData(TScreen * /* screen */, unsigned /* nrow */, unsigned /* ncol */);
1083extern ScrnBuf allocScrnBuf (XtermWidget /* xw */, unsigned  /* nrow */, unsigned  /* ncol */, ScrnPtr * /* addr */);
1084extern ScrnBuf scrnHeadAddr (TScreen * /* screen */, ScrnBuf /* base */, unsigned /* offset */);
1085extern int ScreenResize (XtermWidget /* xw */, int  /* width */, int  /* height */, unsigned * /* flags */);
1086extern size_t ScrnPointers (TScreen * /* screen */, size_t  /* len */);
1087extern void ClearBufRows (XtermWidget /* xw */, int  /* first */, int  /* last */);
1088extern void ClearCells (XtermWidget /* xw */, int /* flags */, unsigned /* len */, int /* row */, int /* col */);
1089extern void ScrnAllocBuf (XtermWidget /* xw */);
1090extern void ScrnClearCells (XtermWidget /* xw */, int /* row */, int /* col */, unsigned /* len */);
1091extern void ScrnDeleteChar (XtermWidget /* xw */, unsigned  /* n */);
1092extern void ScrnDeleteLine (XtermWidget /* xw */, ScrnBuf  /* sb */, int  /* n */, int  /* last */, unsigned /* where */);
1093extern void ScrnDisownSelection (XtermWidget /* xw */);
1094extern void ScrnFillRectangle (XtermWidget /* xw */, XTermRect *,  int ,  unsigned /* flags */, Bool /* keepColors */);
1095extern void ScrnInsertChar (XtermWidget /* xw */, unsigned  /* n */);
1096extern void ScrnInsertLine (XtermWidget /* xw */, ScrnBuf /* sb */, int  /* last */, int  /* where */, unsigned  /* n */);
1097extern void ScrnRefresh (XtermWidget /* xw */, int  /* toprow */, int  /* leftcol */, int  /* nrows */, int  /* ncols */, Bool  /* force */);
1098extern void ScrnUpdate (XtermWidget /* xw */, int  /* toprow */, int  /* leftcol */, int  /* nrows */, int  /* ncols */, Bool  /* force */);
1099extern void ScrnWriteText (XtermWidget /* xw */, IChar * /* str */, unsigned  /* flags */, unsigned /* cur_fg_bg */, unsigned  /* length */);
1100extern void setupLineData (TScreen * /* screen */, ScrnBuf /* base */, Char * /* data */, unsigned /* nrow */, unsigned /* ncol */);
1101extern void xtermParseRect (XtermWidget /* xw */, int, int *, XTermRect *);
1102
1103#if OPT_TRACE && OPT_TRACE_FLAGS
1104extern int  LineTstFlag(LineData /* ld */, int /* flag */);
1105extern void LineClrFlag(LineData /* ld */, int /* flag */);
1106extern void LineSetFlag(LineData /* ld */, int /* flag */);
1107#else
1108
1109#define LineFlags(ld)         GetLineFlags(ld)
1110
1111#define LineClrFlag(ld, flag) SetLineFlags(ld, (GetLineFlags(ld) & ~ (flag)))
1112#define LineSetFlag(ld, flag) SetLineFlags(ld, (GetLineFlags(ld) | (flag)))
1113#define LineTstFlag(ld, flag) ((GetLineFlags(ld) & flag) != 0)
1114
1115#endif /* OPT_TRACE && OPT_TRACE_FLAGS */
1116
1117#define LineClrBlinked(ld) LineClrFlag(ld, LINEBLINKED)
1118#define LineSetBlinked(ld) LineSetFlag(ld, LINEBLINKED)
1119#define LineTstBlinked(ld) LineTstFlag(ld, LINEBLINKED)
1120
1121#define LineClrWrapped(ld) LineClrFlag(ld, LINEWRAPPED)
1122#define LineSetWrapped(ld) LineSetFlag(ld, LINEWRAPPED)
1123#define LineTstWrapped(ld) LineTstFlag(ld, LINEWRAPPED)
1124
1125#define ScrnHaveSelection(screen) \
1126			((screen)->startH.row != (screen)->endH.row \
1127			|| (screen)->startH.col != (screen)->endH.col)
1128
1129#define ScrnAreLinesInSelection(screen, first, last) \
1130	((last) >= (screen)->startH.row && (first) <= (screen)->endH.row)
1131
1132#define ScrnIsLineInSelection(screen, line) \
1133	((line) >= (screen)->startH.row && (line) <= (screen)->endH.row)
1134
1135#define ScrnHaveLineMargins(screen) \
1136			((screen)->top_marg != 0 \
1137			|| ((screen)->bot_marg != screen->max_row))
1138
1139#define ScrnIsLineInMargins(screen, line) \
1140	((line) >= (screen)->top_marg && (line) <= (screen)->bot_marg)
1141
1142#if OPT_DEC_RECTOPS
1143extern void ScrnCopyRectangle (XtermWidget /* xw */, XTermRect *, int, int *);
1144extern void ScrnMarkRectangle (XtermWidget /* xw */, XTermRect *, Bool, int, int *);
1145extern void ScrnWipeRectangle (XtermWidget /* xw */, XTermRect *);
1146#endif
1147
1148#if OPT_WIDE_CHARS
1149extern void ChangeToWide(XtermWidget /* xw */);
1150#endif
1151
1152/* scrollback.c */
1153extern LineData *getScrollback (TScreen * /* screen */, int /* row */);
1154extern LineData *addScrollback (TScreen * /* screen */);
1155extern void deleteScrollback (TScreen * /* screen */, int /* row */);
1156
1157/* scrollbar.c */
1158extern void DoResizeScreen (XtermWidget /* xw */);
1159extern void HandleScrollBack           PROTO_XT_ACTIONS_ARGS;
1160extern void HandleScrollForward        PROTO_XT_ACTIONS_ARGS;
1161extern void ResizeScrollBar (XtermWidget  /* xw */);
1162extern void ScrollBarDrawThumb (Widget  /* scrollWidget */);
1163extern void ScrollBarOff (XtermWidget  /* xw */);
1164extern void ScrollBarOn (XtermWidget  /* xw */, Bool /* init */);
1165extern void ScrollBarReverseVideo (Widget  /* scrollWidget */);
1166extern void ToggleScrollBar (XtermWidget  /* xw */);
1167extern void WindowScroll (XtermWidget /* xw */, int  /* top */, Bool /* always */);
1168
1169#ifdef SCROLLBAR_RIGHT
1170extern void updateRightScrollbar(XtermWidget  /* xw */);
1171#else
1172#define updateRightScrollbar(xw) /* nothing */
1173#endif
1174
1175/* tabs.c */
1176extern Bool TabToNextStop (XtermWidget /* xw */);
1177extern Bool TabToPrevStop (XtermWidget /* xw */);
1178extern void TabClear (Tabs  /* tabs */, int  /* col */);
1179extern void TabReset (Tabs  /* tabs */);
1180extern void TabSet (Tabs  /* tabs */, int  /* col */);
1181extern void TabZonk (Tabs  /* tabs */);
1182
1183/* util.c */
1184extern Boolean isDefaultBackground(const char * /* name */);
1185extern Boolean isDefaultForeground(const char * /* name */);
1186extern GC updatedXtermGC (XtermWidget /* xw */, unsigned  /* flags */, unsigned /* fg_bg */, Bool  /* hilite */);
1187extern int AddToRefresh (XtermWidget /* xw */);
1188extern int ClearInLine (XtermWidget /* xw */, int /* row */, int /* col */, unsigned /* len */);
1189extern int HandleExposure (XtermWidget /* xw */, XEvent * /* event */);
1190extern int drawXtermText (XtermWidget /* xw */, unsigned /* flags */, GC /* gc */, int /* x */, int /* y */, int /* chrset */, IChar * /* text */, Cardinal /* len */, int /* on_wide */);
1191extern void ChangeColors (XtermWidget  /* xw */, ScrnColors * /* pNew */);
1192extern void ClearRight (XtermWidget /* xw */, int /* n */);
1193extern void ClearScreen (XtermWidget /* xw */);
1194extern void DeleteChar (XtermWidget /* xw */, unsigned /* n */);
1195extern void DeleteLine (XtermWidget /* xw */, int /* n */);
1196extern void FlushScroll (XtermWidget /* xw */);
1197extern void GetColors (XtermWidget  /* xw */, ScrnColors * /* pColors */);
1198extern void InsertChar (XtermWidget /* xw */, unsigned /* n */);
1199extern void InsertLine (XtermWidget /* xw */, int  /* n */);
1200extern void RevScroll (XtermWidget /* xw */, int  /* amount */);
1201extern void ReverseVideo (XtermWidget  /* termw */);
1202extern void WriteText (XtermWidget /* xw */, IChar * /* str */, Cardinal /* len */);
1203extern void decode_keyboard_type (XtermWidget /* xw */, struct XTERM_RESOURCE * /* rp */);
1204extern void decode_wcwidth (XtermWidget  /* xw */);
1205extern void do_erase_display (XtermWidget /* xw */, int  /* param */, int  /* mode */);
1206extern void do_erase_line (XtermWidget /* xw */, int  /* param */, int  /* mode */);
1207extern void getXtermSizeHints (XtermWidget /* xw */);
1208extern void init_keyboard_type (XtermWidget /* xw */, xtermKeyboardType /* type */, Bool  /* set */);
1209extern void recolor_cursor (TScreen * /* screen */, Cursor  /* cursor */, unsigned long  /* fg */, unsigned long  /* bg */);
1210extern void resetXtermGC (XtermWidget /* xw */, unsigned  /* flags */, Bool  /* hilite */);
1211extern void scrolling_copy_area (XtermWidget /* xw */, int  /* firstline */, int  /* nlines */, int  /* amount */);
1212extern void set_keyboard_type (XtermWidget /* xw */, xtermKeyboardType  /* type */, Bool  /* set */);
1213extern void toggle_keyboard_type (XtermWidget /* xw */, xtermKeyboardType  /* type */);
1214extern void update_keyboard_type (void);
1215extern void xtermClear (XtermWidget /* xw */);
1216extern void xtermRepaint (XtermWidget /* xw */);
1217extern void xtermScroll (XtermWidget /* xw */, int /* amount */);
1218extern void xtermSizeHints (XtermWidget  /* xw */, int /* scrollbarWidth */);
1219
1220#if OPT_ISO_COLORS
1221
1222extern unsigned extract_fg (XtermWidget /* xw */, unsigned  /* color */, unsigned  /* flags */);
1223extern unsigned extract_bg (XtermWidget /* xw */, unsigned  /* color */, unsigned  /* flags */);
1224extern CellColor makeColorPair (int  /* fg */, int  /* bg */);
1225extern void ClearCurBackground (XtermWidget /* xw */, int  /* top */, int  /* left */, unsigned  /* height */, unsigned  /* width */);
1226
1227#define xtermColorPair(xw) makeColorPair(xw->sgr_foreground, xw->sgr_background)
1228
1229#define getXtermForeground(xw, flags, color) \
1230	(((flags) & FG_COLOR) && ((int)(color) >= 0 && (color) < MAXCOLORS) \
1231			? GET_COLOR_RES(xw, TScreenOf(xw)->Acolors[color]) \
1232			: T_COLOR(TScreenOf(xw), TEXT_FG))
1233
1234#define getXtermBackground(xw, flags, color) \
1235	(((flags) & BG_COLOR) && ((int)(color) >= 0 && (color) < MAXCOLORS) \
1236			? GET_COLOR_RES(xw, TScreenOf(xw)->Acolors[color]) \
1237			: T_COLOR(TScreenOf(xw), TEXT_BG))
1238
1239#if OPT_COLOR_RES
1240#define GET_COLOR_RES(xw, res) xtermGetColorRes(xw, &(res))
1241#define SET_COLOR_RES(res,color) (res)->value = color
1242#define EQL_COLOR_RES(res,color) (res)->value == color
1243#define T_COLOR(v,n) (v)->Tcolors[n].value
1244extern Pixel xtermGetColorRes(XtermWidget /* xw */, ColorRes * /* res */);
1245#else
1246#define GET_COLOR_RES(xw, res) res
1247#define SET_COLOR_RES(res,color) *res = color
1248#define EQL_COLOR_RES(res,color) *res == color
1249#define T_COLOR(v,n) (v)->Tcolors[n]
1250#endif
1251
1252#define ExtractForeground(color) (unsigned) GetCellColorFG(color)
1253#define ExtractBackground(color) (unsigned) GetCellColorBG(color)
1254
1255#define MapToColorMode(fg, screen, flags) \
1256	(((screen)->colorBLMode && ((flags) & BLINK)) \
1257	 ? COLOR_BL \
1258	 : (((screen)->colorULMode && ((flags) & UNDERLINE)) \
1259	    ? COLOR_UL \
1260	    : (((screen)->colorBDMode && ((flags) & BOLD)) \
1261	       ? COLOR_BD \
1262	       : fg)))
1263
1264#define checkVeryBoldAttr(flags, fg, code, attr) \
1265	if ((flags & FG_COLOR) != 0 \
1266	 && (screen->veryBoldColors & attr) == 0 \
1267	 && (flags & attr) != 0 \
1268	 && (fg == code)) \
1269		 UIntClr(flags, attr)
1270
1271#define checkVeryBoldColors(flags, fg) \
1272	checkVeryBoldAttr(flags, fg, COLOR_RV, INVERSE); \
1273	checkVeryBoldAttr(flags, fg, COLOR_UL, UNDERLINE); \
1274	checkVeryBoldAttr(flags, fg, COLOR_BD, BOLD); \
1275	checkVeryBoldAttr(flags, fg, COLOR_BL, BLINK)
1276
1277#else /* !OPT_ISO_COLORS */
1278
1279#define MapToColorMode(fg, screen, flags) fg
1280
1281#define ClearDFtBackground(xw, top, left, height, width) \
1282	ClearCurBackground(xw, top, left, height, width)
1283
1284#define ClearCurBackground(xw, top, left, height, width) \
1285	XClearArea (TScreenOf(xw)->display, VWindow(TScreenOf(xw)), \
1286		left, top, width, height, False)
1287
1288#define extract_fg(xw, color, flags) (xw)->cur_foreground
1289#define extract_bg(xw, color, flags) (xw)->cur_background
1290
1291		/* FIXME: Reverse-Video? */
1292#define T_COLOR(v,n) (v)->Tcolors[n]
1293#define getXtermBackground(xw, flags, color) T_COLOR(TScreenOf(xw), TEXT_BG)
1294#define getXtermForeground(xw, flags, color) T_COLOR(TScreenOf(xw), TEXT_FG)
1295#define makeColorPair(fg, bg) 0
1296#define xtermColorPair(xw) 0
1297
1298#define checkVeryBoldColors(flags, fg) /* nothing */
1299
1300#endif	/* OPT_ISO_COLORS */
1301
1302#define XTERM_CELL(row,col)    getXtermCell(screen,     ROW2INX(screen, row), col)
1303
1304extern unsigned getXtermCell (TScreen * /* screen */, int  /* row */, int  /* col */);
1305extern void putXtermCell (TScreen * /* screen */, int  /* row */, int  /* col */, int  /* ch */);
1306
1307#if OPT_HIGHLIGHT_COLOR
1308#define isNotForeground(xw, fg, bg, sel) \
1309		(Boolean) ((sel) != T_COLOR(TScreenOf(xw), TEXT_FG) \
1310			   && (sel) != (fg) \
1311			   && (sel) != (bg) \
1312			   && (sel) != (xw)->dft_foreground)
1313#define isNotBackground(xw, fg, bg, sel) \
1314		(Boolean) ((sel) != T_COLOR(TScreenOf(xw), TEXT_BG) \
1315			   && (sel) != (fg) \
1316			   && (sel) != (bg) \
1317			   && (sel) != (xw)->dft_background)
1318#endif
1319
1320#if OPT_WIDE_CHARS
1321extern Boolean isWideControl(unsigned /* ch */);
1322extern int DamagedCells(TScreen * /* screen */, unsigned /* n */, int * /* klp */, int * /* krp */, int /* row */, int /* col */);
1323extern int DamagedCurCells(TScreen * /* screen */, unsigned /* n */, int * /* klp */, int * /* krp */);
1324extern unsigned AsciiEquivs(unsigned /* ch */);
1325extern void addXtermCombining (TScreen * /* screen */, int  /* row */, int  /* col */, unsigned  /* ch */);
1326extern void allocXtermChars(ScrnPtr * /* buffer */, Cardinal /* length */);
1327#endif
1328
1329#if OPT_XMC_GLITCH
1330extern void Mark_XMC (XtermWidget /* xw */, int  /* param */);
1331extern void Jump_XMC (XtermWidget /* xw */);
1332extern void Resolve_XMC (XtermWidget /* xw */);
1333#endif
1334
1335#if OPT_WIDE_CHARS
1336unsigned visual_width(IChar * /* str */, Cardinal  /* len */);
1337#else
1338#define visual_width(a, b) (b)
1339#endif
1340
1341#define BtoS(b)    (((b) == Maybe) ? "maybe" : ((b) ? "on" : "off"))
1342#define NonNull(s) ((s) ? (s) : "<null>")
1343
1344#define UIntSet(dst,bits) dst = dst | (unsigned) (bits)
1345#define UIntClr(dst,bits) dst = dst & (unsigned) ~(bits)
1346
1347#ifdef __cplusplus
1348	}
1349#endif
1350
1351#endif	/* included_xterm_h */
1352