1/*********************************************************** 2 3Copyright 1987, 1988, 1994, 1998 The Open Group 4 5Permission to use, copy, modify, distribute, and sell this software and its 6documentation for any purpose is hereby granted without fee, provided that 7the above copyright notice appear in all copies and that both that 8copyright notice and this permission notice appear in supporting 9documentation. 10 11The above copyright notice and this permission notice shall be included in 12all copies or substantial portions of the Software. 13 14THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 18AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 19CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 20 21Except as contained in this notice, the name of The Open Group shall not be 22used in advertising or otherwise to promote the sale, use or other dealings 23in this Software without prior written authorization from The Open Group. 24 25 26Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. 27 28 All Rights Reserved 29 30Permission to use, copy, modify, and distribute this software and its 31documentation for any purpose and without fee is hereby granted, 32provided that the above copyright notice appear in all copies and that 33both that copyright notice and this permission notice appear in 34supporting documentation, and that the name of Digital not be 35used in advertising or publicity pertaining to distribution of the 36software without specific, written prior permission. 37 38DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING 39ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL 40DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR 41ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, 42WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, 43ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS 44SOFTWARE. 45 46******************************************************************/ 47 48#ifndef _XtinitialI_h 49#define _XtinitialI_h 50 51/**************************************************************** 52 * 53 * Displays 54 * 55 ****************************************************************/ 56 57#ifndef X_NOT_POSIX 58#ifdef _POSIX_SOURCE 59#include <limits.h> 60#else 61#define _POSIX_SOURCE 62#include <limits.h> 63#undef _POSIX_SOURCE 64#endif 65#endif 66#ifndef PATH_MAX 67#ifdef WIN32 68#define PATH_MAX 512 69#else 70#include <sys/param.h> 71#endif 72#ifndef PATH_MAX 73#ifdef MAXPATHLEN 74#define PATH_MAX MAXPATHLEN 75#else 76#define PATH_MAX 1024 77#endif 78#endif 79#endif 80 81#include <X11/Xos.h> 82#include <X11/Xpoll.h> 83 84_XFUNCPROTOBEGIN 85 86typedef struct _TimerEventRec { 87 struct timeval te_timer_value; 88 struct _TimerEventRec *te_next; 89 XtTimerCallbackProc te_proc; 90 XtAppContext app; 91 XtPointer te_closure; 92} TimerEventRec; 93 94typedef struct _InputEvent { 95 XtInputCallbackProc ie_proc; 96 XtPointer ie_closure; 97 struct _InputEvent *ie_next; 98 struct _InputEvent *ie_oq; 99 XtAppContext app; 100 int ie_source; 101 XtInputMask ie_condition; 102} InputEvent; 103 104typedef struct _SignalEventRec { 105 XtSignalCallbackProc se_proc; 106 XtPointer se_closure; 107 struct _SignalEventRec *se_next; 108 XtAppContext app; 109 Boolean se_notice; 110} SignalEventRec; 111 112typedef struct _WorkProcRec { 113 XtWorkProc proc; 114 XtPointer closure; 115 struct _WorkProcRec *next; 116 XtAppContext app; 117} WorkProcRec; 118 119 120typedef struct 121{ 122#ifndef USE_POLL 123 fd_set rmask; 124 fd_set wmask; 125 fd_set emask; 126#endif 127 int nfds; 128} FdStruct; 129 130typedef struct _LangProcRec { 131 XtLanguageProc proc; 132 XtPointer closure; 133} LangProcRec; 134 135typedef struct _ProcessContextRec { 136 XtAppContext defaultAppContext; 137 XtAppContext appContextList; 138 ConverterTable globalConverterTable; 139 LangProcRec globalLangProcRec; 140} ProcessContextRec, *ProcessContext; 141 142typedef struct { 143 char* start; 144 char* current; 145 int bytes_remaining; 146} Heap; 147 148typedef struct _DestroyRec DestroyRec; 149 150 151typedef struct _XtAppStruct { 152 XtAppContext next; /* link to next app in process context */ 153 ProcessContext process; /* back pointer to our process context */ 154 InternalCallbackList destroy_callbacks; 155 Display **list; 156 TimerEventRec *timerQueue; 157 WorkProcRec *workQueue; 158 InputEvent **input_list; 159 InputEvent *outstandingQueue; 160 SignalEventRec *signalQueue; 161 XrmDatabase errorDB; 162 XtErrorMsgHandler errorMsgHandler, warningMsgHandler; 163 XtErrorHandler errorHandler, warningHandler; 164 struct _ActionListRec *action_table; 165 ConverterTable converterTable; 166 unsigned long selectionTimeout; 167 FdStruct fds; 168 short count; /* num of assigned entries in list */ 169 short max; /* allocate size of list */ 170 short last; 171 short input_count; 172 short input_max; /* elts input_list init'd with */ 173 Boolean sync, being_destroyed, error_inited; 174#ifndef NO_IDENTIFY_WINDOWS 175 Boolean identify_windows; /* debugging hack */ 176#endif 177 Heap heap; 178 String * fallback_resources; /* Set by XtAppSetFallbackResources. */ 179 struct _ActionHookRec* action_hook_list; 180 struct _BlockHookRec* block_hook_list; 181 int destroy_list_size; /* state data for 2-phase destroy */ 182 int destroy_count; 183 int dispatch_level; 184 DestroyRec* destroy_list; 185 Widget in_phase2_destroy; 186 LangProcRec langProcRec; 187 struct _TMBindCacheRec * free_bindings; 188 _XtString display_name_tried; 189 Display **dpy_destroy_list; 190 int dpy_destroy_count; 191 Boolean exit_flag; 192 Boolean rebuild_fdlist; 193#ifdef XTHREADS 194 LockPtr lock_info; 195 ThreadAppProc lock; 196 ThreadAppProc unlock; 197 ThreadAppYieldLockProc yield_lock; 198 ThreadAppRestoreLockProc restore_lock; 199 ThreadAppProc free_lock; 200#endif 201} XtAppStruct; 202 203extern void _XtHeapInit(Heap* heap); 204extern void _XtHeapFree(Heap* heap); 205 206#ifdef XTTRACEMEMORY 207 208 209extern char *_XtHeapMalloc( 210 Heap* /* heap */, 211 Cardinal /* size */, 212 const char */* file */, 213 int /* line */ 214); 215 216#define _XtHeapAlloc(heap,bytes) _XtHeapMalloc(heap, bytes, __FILE__, __LINE__) 217 218#else /* XTTRACEMEMORY */ 219 220extern char* _XtHeapAlloc( 221 Heap* /* heap */, 222 Cardinal /* size */ 223); 224 225#endif /* XTTRACEMEMORY */ 226 227extern void _XtSetDefaultErrorHandlers( 228 XtErrorMsgHandler* /* errMsg */, 229 XtErrorMsgHandler* /* warnMsg */, 230 XtErrorHandler* /* err */, 231 XtErrorHandler* /* warn */ 232); 233 234extern void _XtSetDefaultSelectionTimeout( 235 unsigned long* /* timeout */ 236); 237 238extern XtAppContext _XtDefaultAppContext( 239 void 240); 241 242extern ProcessContext _XtGetProcessContext( 243 void 244); 245 246Display * 247_XtAppInit( 248 XtAppContext* /* app_context_return */, 249 String /* application_class */, 250 XrmOptionDescRec* /* options */, 251 Cardinal /* num_options */, 252 int* /* argc_in_out */, 253 _XtString** /* argv_in_out */, 254 String* /* fallback_resources */ 255); 256 257extern void _XtDestroyAppContexts( 258 void 259); 260 261extern void _XtCloseDisplays( 262 XtAppContext /* app */ 263); 264 265extern int _XtAppDestroyCount; 266 267extern int _XtWaitForSomething( 268 XtAppContext /* app */, 269 _XtBoolean /* ignoreEvents */, 270 _XtBoolean /* ignoreTimers */, 271 _XtBoolean /* ignoreInputs */, 272 _XtBoolean /* ignoreSignals */, 273 _XtBoolean /* block */, 274#ifdef XTHREADS 275 _XtBoolean /* drop_lock */, 276#endif 277 unsigned long* /* howlong */ 278); 279 280typedef struct _CaseConverterRec *CaseConverterPtr; 281typedef struct _CaseConverterRec { 282 KeySym start; /* first KeySym valid in converter */ 283 KeySym stop; /* last KeySym valid in converter */ 284 XtCaseProc proc; /* case converter function */ 285 CaseConverterPtr next; /* next converter record */ 286} CaseConverterRec; 287 288typedef struct _ExtensionSelectorRec { 289 XtExtensionSelectProc proc; 290 int min, max; 291 XtPointer client_data; 292} ExtSelectRec; 293 294typedef struct _XtPerDisplayStruct { 295 InternalCallbackList destroy_callbacks; 296 Region region; 297 CaseConverterPtr case_cvt; /* user-registered case converters */ 298 XtKeyProc defaultKeycodeTranslator; 299 XtAppContext appContext; 300 unsigned long keysyms_serial; /* for tracking MappingNotify events */ 301 KeySym *keysyms; /* keycode to keysym table */ 302 int keysyms_per_keycode; /* number of keysyms for each keycode*/ 303 int min_keycode, max_keycode; /* range of keycodes */ 304 KeySym *modKeysyms; /* keysym values for modToKeysysm */ 305 ModToKeysymTable *modsToKeysyms; /* modifiers to Keysysms index table*/ 306 unsigned char isModifier[32]; /* key-is-modifier-p bit table */ 307 KeySym lock_meaning; /* Lock modifier meaning */ 308 Modifiers mode_switch; /* keyboard group modifiers */ 309 Modifiers num_lock; /* keyboard numlock modifiers */ 310 Boolean being_destroyed; 311 Boolean rv; /* reverse_video resource */ 312 XrmName name; /* resolved app name */ 313 XrmClass class; /* application class */ 314 Heap heap; 315 struct _GCrec *GClist; /* support for XtGetGC */ 316 Drawable **pixmap_tab; /* ditto for XtGetGC */ 317 String language; /* XPG language string */ 318 XEvent last_event; /* last event dispatched */ 319 Time last_timestamp; /* from last event dispatched */ 320 int multi_click_time; /* for XtSetMultiClickTime */ 321 struct _TMKeyContextRec* tm_context; /* for XtGetActionKeysym */ 322 InternalCallbackList mapping_callbacks; /* special case for TM */ 323 XtPerDisplayInputRec pdi; /* state for modal grabs & kbd focus */ 324 struct _WWTable *WWtable; /* window to widget table */ 325 XrmDatabase *per_screen_db; /* per screen resource databases */ 326 XrmDatabase cmd_db; /* db from command line, if needed */ 327 XrmDatabase server_db; /* resource property else .Xdefaults */ 328 XtEventDispatchProc* dispatcher_list; 329 ExtSelectRec* ext_select_list; 330 int ext_select_count; 331 Widget hook_object; 332#ifndef X_NO_RESOURCE_CONFIGURATION_MANAGEMENT 333 Atom rcm_init; /* ResConfig - initialize */ 334 Atom rcm_data; /* ResConfig - data atom */ 335#endif 336} XtPerDisplayStruct, *XtPerDisplay; 337 338typedef struct _PerDisplayTable { 339 Display *dpy; 340 XtPerDisplayStruct perDpy; 341 struct _PerDisplayTable *next; 342} PerDisplayTable, *PerDisplayTablePtr; 343 344extern PerDisplayTablePtr _XtperDisplayList; 345 346extern XtPerDisplay _XtSortPerDisplayList( 347 Display* /* dpy */ 348); 349 350extern XtPerDisplay _XtGetPerDisplay( 351 Display* /* dpy */ 352); 353 354extern XtPerDisplayInputRec* _XtGetPerDisplayInput( 355 Display* /* dpy */ 356); 357 358#if 0 359#ifdef DEBUG 360#define _XtGetPerDisplay(display) \ 361 ((_XtperDisplayList != NULL && (_XtperDisplayList->dpy == (display))) \ 362 ? &_XtperDisplayList->perDpy \ 363 : _XtSortPerDisplayList(display)) 364#define _XtGetPerDisplayInput(display) \ 365 ((_XtperDisplayList != NULL && (_XtperDisplayList->dpy == (display))) \ 366 ? &_XtperDisplayList->perDpy.pdi \ 367 : &_XtSortPerDisplayList(display)->pdi) 368#else 369#define _XtGetPerDisplay(display) \ 370 ((_XtperDisplayList->dpy == (display)) \ 371 ? &_XtperDisplayList->perDpy \ 372 : _XtSortPerDisplayList(display)) 373#define _XtGetPerDisplayInput(display) \ 374 ((_XtperDisplayList->dpy == (display)) \ 375 ? &_XtperDisplayList->perDpy.pdi \ 376 : &_XtSortPerDisplayList(display)->pdi) 377#endif /*DEBUG*/ 378#endif 379 380extern void _XtDisplayInitialize( 381 Display* /* dpy */, 382 XtPerDisplay /* pd */, 383 _Xconst char* /* name */, 384 XrmOptionDescRec* /* urlist */, 385 Cardinal /* num_urs */, 386 int* /* argc */, 387 _XtString* /* argv */ 388); 389 390extern void _XtCacheFlushTag( 391 XtAppContext /* app */, 392 XtPointer /* tag */ 393); 394 395extern void _XtFreeActions( 396 struct _ActionListRec* /* action_table */ 397); 398 399extern void _XtDoPhase2Destroy( 400 XtAppContext /* app */, 401 int /* dispatch_level */ 402); 403 404extern void _XtDoFreeBindings( 405 XtAppContext /* app */ 406); 407 408extern void _XtExtensionSelect( 409 Widget /* widget */ 410); 411 412#define _XtSafeToDestroy(app) ((app)->dispatch_level == 0) 413 414extern void _XtAllocWWTable( 415 XtPerDisplay pd 416); 417 418extern void _XtFreeWWTable( 419 XtPerDisplay pd 420); 421 422extern String _XtGetUserName(_XtString dest, int len); 423extern XrmDatabase _XtPreparseCommandLine(XrmOptionDescRec *urlist, 424 Cardinal num_urs, int argc, _XtString *argv, 425 String *applName, String *displayName, 426 String *language); 427 428_XFUNCPROTOEND 429 430#endif /* _XtinitialI_h */ 431