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