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