dtpad: emit error on catopen() failure
[oweals/cde.git] / cde / programs / dtsession / Sm.h
1 /*
2  * CDE - Common Desktop Environment
3  *
4  * Copyright (c) 1993-2012, The Open Group. All rights reserved.
5  *
6  * These libraries and programs are free software; you can
7  * redistribute them and/or modify them under the terms of the GNU
8  * Lesser General Public License as published by the Free Software
9  * Foundation; either version 2 of the License, or (at your option)
10  * any later version.
11  *
12  * These libraries and programs are distributed in the hope that
13  * they will be useful, but WITHOUT ANY WARRANTY; without even the
14  * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15  * PURPOSE. See the GNU Lesser General Public License for more
16  * details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with these libraries and programs; if not, write
20  * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
21  * Floor, Boston, MA 02110-1301 USA
22  */
23 /* $XConsortium: Sm.h /main/15 1996/09/14 14:48:18 drk $ */
24 /*************************************<+>*************************************
25  *****************************************************************************
26  **
27  **  File:        Sm.h
28  **
29  **  Project:     HP DT Session Manager (dtsession)
30  **
31  **  Description:
32  **  -----------
33  **  Contains all general, global variables used by the session manager
34  **
35  **
36  **
37  *****************************************************************************
38  *************************************<+>*************************************/
39 /*                                                                 
40  * (c) Copyright 1996 Digital Equipment Corporation.
41  * (c) Copyright 1990, 1993, 1994, 1996 Hewlett-Packard Company          
42  * (c) Copyright 1993, 1994, 1996 International Business Machines Corp. 
43  * (c) Copyright 1993, 1994, 1996 Sun Microsystems, Inc.                
44  * (c) Copyright 1993, 1994, 1996 Novell, Inc.                      
45  * (c) Copyright 1996 FUJITSU LIMITED.
46  * (c) Copyright 1996 Hitachi.
47  */
48
49 #ifndef _sm_h
50 #define _sm_h
51
52 /*
53  * #include statements
54  */
55
56 #include <signal.h>
57 #include <sys/param.h>
58 #include <X11/Xlib.h>
59 #include <Dt/DtP.h>
60 #include <Dt/UserMsg.h>
61 #include <Tt/tt_c.h>
62 #include "SmError.h"
63
64 #ifdef USE_XINERAMA
65 # include <DtXinerama.h>
66 #endif
67
68 /* 
69  *  #define statements 
70  */
71
72 #define HELPVIEW_COMMAND_LINE  CDE_INSTALLATION_TOP "/bin/dthelpview -helpVolume Dtintro"
73
74
75 /*
76  * Wrappers for system calls
77  */
78 #define         SM_MALLOC(SIZE)                 XtMalloc(SIZE)
79 #define         SM_REALLOC(PTR, SIZE)   XtRealloc(PTR, SIZE)
80 #define         SM_FREE(PTR)                    XtFree(PTR)
81 #define         SM_EXIT(STATUS)                 SmExit(STATUS)
82
83 #ifdef __hpux
84 #define         SM_SETEUID(EUID)        setresuid(-1, EUID, -1)
85 #define         SM_SETESUID(UID)        setresuid(-1, UID, UID)
86 #else
87 #ifndef SVR4
88 #define         SM_SETEUID(EUID)        seteuid(EUID)
89 #define         SM_SETESUID(UID)        setreuid(UID, UID)
90 #else
91 #define         SM_SETEUID(EUID)        seteuid(EUID)
92 #define         SM_SETESUID(UID)        (setuid(UID), seteuid(UID))
93 #endif
94 #endif
95
96 /*
97  * Types of states the session manager can be in
98  */
99 #define         READY                   0
100 #define         IN_PROCESS              1
101
102 /*
103  *  session types .. home or current or default
104  */
105 #define         DEFAULT_SESSION         0
106 #define         HOME_SESSION            1
107 #define         CURRENT_SESSION         2
108
109 /*
110  * The lower bounds for each resolution of display - caculated
111  * as Y Resolution - which is pixels/meter
112  */
113 #define                 HIGH_RES_Y_RES                  3583
114 #define                 MED_RES_Y_RES                   3150
115 #define                 LOW_RES_Y_RES                   1
116
117 /*
118  * Maximum number of screens saved during a session
119  */
120 #define         MAX_SCREENS_SAVED       10
121
122 /* contention management definitions */
123 #define SM_CM_SYSTEM       (1L << 0)
124 #define SM_CM_HANDSHAKE    (1L << 1)
125
126 #define SM_CM_ALL          (SM_CM_SYSTEM  | SM_CM_HANDSHAKE)
127 #define SM_CM_NONE         0
128
129 #define SM_CM_DEFAULT      SM_CM_NONE
130
131 #ifndef NO_MESSAGE_CATALOG
132 # define _CLIENT_CAT_NAME "dtsession"
133 extern char *_DtGetMessage(char *filename, int set, int n, char *s);
134 # define GETMESSAGE(set, number, string)\
135     (_DtGetMessage(_CLIENT_CAT_NAME, set, number, string))
136 #else
137 # define GETMESSAGE(set, number, string)\
138     string
139 #endif
140
141 typedef int (*IOErrorHandlerProc)(
142         Display *
143 );
144
145 /* 
146  * typedef statements 
147  */
148
149 /*
150  * Pointer to hold information returned by session settings
151  */
152 typedef struct
153 {
154     int                 accelNum;           /* Pointer Control Information */
155     int                 accelDenom;
156     int                 threshold;
157
158     int                 timeout;            /*Screen Saver Information */
159     int                 interval;
160     int                 preferBlank;
161     int                 allowExp;
162
163     char                *fontDirs;          /*Font path Information */
164     
165     XKeyboardState      kbdState;           /* Keyboard Control Information */
166     char                *autoRepeats;
167     
168     char                *buttonMap;         /*Button Mapping Information */
169     
170     int                 numKeyCode;         /*Key Mapping information */
171     int                 keySymPerCode;
172     char                *keySyms;
173
174     int                 maxKeyPerMod;       /*Modifier Mapping Information */
175     char                *modSyms;
176
177     Boolean             didQuery;       /*Was this information queried for*/
178
179     int                 confirmMode;
180     int                 startState;
181 } SessionSettings, *SessionSettingsPtr;
182
183 /*
184  * Structure to save all of the session manager resources
185  */
186 typedef struct
187 {
188     char        *wmStartup;
189     Boolean     querySettings;
190     char        *keyholders;
191     int         alarmTime;
192     int         memThreshold;
193     char        *sessionVersion;
194     int         displayResolution;
195     char        *sessionLang;
196     long        contManagement;
197     int         waitClientTimeout;
198     int         waitWmTimeout;
199     Boolean     useBMS;
200     Boolean     saveFontPath;
201     int         saveYourselfTimeout;
202     Boolean     mergeXdefaults;
203     int         numSessionsBackedup;
204     char        *ignoreEnvironment;
205 #if defined(USE_XINERAMA)
206     int         xineramaPreferredScreen; /* prefered xinerama screen */
207 #endif
208 } SessionResources, *SessionResourcesPtr;
209
210 /*
211  * Screen saver resources.
212  */
213 typedef struct
214 {
215     int         cycleTimeout;
216     int         saverTimeout;
217     int         lockTimeout;
218     Boolean     random;
219     char        *saverList;
220 } SaverResources, *SaverResourcesPtr;
221
222 /*
223  * Structure to hold global state settings
224  */
225 typedef struct
226 {
227     Boolean                     audioChange;
228     Boolean                     pointerChange;
229     Boolean                     pointerMapChange;
230     char                        pointerMap[5];
231     int                         numButton;
232     Boolean                     keyboardChange;
233     Boolean                     screenSavChange;
234     char                        dClickBuf[50];
235 } SettingsSet;
236
237 typedef struct
238 {
239         Boolean         audioChange;
240         Boolean         pointerChange;
241         Boolean         keyboardChange;
242         Boolean         screenSavChange;
243         Boolean         dClickChange;
244         Boolean         fontChange;
245         Boolean         preeditChange;
246 } SettingsCust;
247
248
249 /*
250  * Structure to hold general information needed to be shared by
251  * different modules in the session manager
252  */
253 typedef struct
254 {
255     Display             *display;
256     Widget              topLevelWid;
257     Window              topLevelWindow;
258     XtAppContext        appCon;
259     char                *programName;           /* main()'s argv[0] */
260     int                 numSavedScreens;
261     int                 screen;
262     int                 lockedState;
263     int                 smState;
264     short               sessionType;
265     unsigned long       blackPixel;
266     unsigned long       whitePixel;
267     unsigned long       foregroundPix;
268     unsigned long       backgroundPix;
269     Cursor              lockCursor, padlockCursor, blankCursor;
270     Cursor              waitCursor;
271     char                resourcePath[MAXPATHLEN + 1];
272     char                settingPath[MAXPATHLEN + 1];
273     char                clientPath[MAXPATHLEN + 1];
274     char                fontPath[MAXPATHLEN + 1];
275     char                exitPath[MAXPATHLEN + 1];
276     char                etcPath[MAXPATHLEN + 1]; /*
277                                                   * Used for sessionEtc on
278                                                   * the way up and for
279                                                   * moving current to
280                                                   * current.old on the way
281                                                   * down
282                                                   */
283     char                *savePath;
284     char                *restoreSession;
285     Boolean             dtwmRunning;
286     Boolean             bmsDead;
287     Tt_pattern          requests2Handle;
288     Tt_pattern          events2Watch;
289     Boolean             compatMode;
290     Boolean             lockOnTimeoutStatus;
291     gid_t               runningGID, conMgmtGID;
292     uid_t               runningUID, unLockUID;
293     Boolean             secureSystem;
294     Boolean             screenSaver;  /* obsolete */
295     Boolean             screenSaverRunning; /* obsolete */
296     Boolean             userSetWaitWmTimeout;
297     int                 savedWaitWmTimeout;
298     /*
299      * These strings are for our copy once we
300      * fetch resources with XtGetApplicationResources.
301      * These string returned can be overwritten anytime
302      * another Xrm call is made as in MergeCoeResources (libXv3.0)
303      * or in our own calls to XrmGetFileDatabase.
304      */
305
306     /*
307      * This set is the for smRes
308      */
309     char        *wmStartup;
310     char        *keyholders;
311     char        *sessionVersion;
312     char        *sessionLang;
313
314     /*
315      * This set is the for smSettings
316      */
317     char        *fontDirs;          /*Font path Information */
318     char        *autoRepeats;
319     char        *buttonMap;         /*Button Mapping Information */
320     char        *keySyms;
321     char        *modSyms;
322    
323     char        *saverList; /* Current screen saver list */
324     void        *saverListParse; /* Current parsed screen saver list */
325
326     Boolean     coverScreen; /* full screen cover */
327     char        *SmNextension; /* screen saver extension name */
328     char        *SmCextension; /* screen saver extension class */
329     char        *extensionSpec; /* sprintf specification */
330 #if defined (USE_X11SSEXT)
331     int         ssEventType; /* screen saver event type */
332 #endif /* USE_X11SSEXT */
333     struct sigaction childvec;
334     struct sigaction defvec;
335
336     Boolean     homeSave;        /* True if the save is via the Style
337                                     Manager's Save Home Session button. */
338     Boolean     displaySpecific; /* Is Ture if the session is for a
339                                     specific display, otherwise False */
340     Boolean     loggingOut;     /* Is True if the current save is for
341                                    a logout; False otherwise. */
342
343 #ifdef USE_XINERAMA             /* JET - Xinerama.  Schwiing!  */
344   DtXineramaInfoPtr_t DtXineramaInfo;
345 #endif
346
347     Boolean ExitComplete;       /* JET - don't exit before we are ready... */
348
349 } GeneralData;
350
351
352 /*
353  * External variables
354  */
355 extern  char    *_dtsessionMG();
356
357 /*
358  * Files that the session manager saves sessions to and restores sessions
359  * from.  allocated in SmStrDef.c
360  */
361 extern char SM_CLIENT_FILE[];
362 extern char SM_CLIENT_FILE2[];
363 extern char SM_RESOURCE_FILE[];
364 extern char SM_FONT_FILE[];
365 extern char SM_LOW_RES_EXT[];
366 extern char SM_MED_RES_EXT[];
367 extern char SM_HIGH_RES_EXT[];
368 extern char SM_SETTING_FILE[];
369 extern char SM_CONVERSION_FILE[];
370 extern char SM_SYSTEM_CLIENT_FILE[];
371 extern char SM_SYSTEM_RESOURCE_FILE[];
372 extern char SM_SYSTEM_FONT_FILE[];
373
374 extern char SM_SYSTEM_PATH[];
375 extern char SM_SECURE_PATH[];
376
377 extern char SM_CURRENT_DIRECTORY[];
378 extern char SM_CURRENT_FONT_DIRECTORY[];
379 extern char SM_HOME_DIRECTORY[];
380 extern char SM_HOME_FONT_DIRECTORY[];
381 extern char SM_OLD_EXTENSION[];
382 extern char SM_SYSTEM_DIRECTORY[];
383 extern char smEtcFile[];
384 extern char smExitFile[];
385
386 /*
387  * Session manager name and class used to get resources allocated in SmStrDef.c
388  */
389 extern char SM_RESOURCE_CLASS[];
390 extern char SM_RESOURCE_NAME[];
391 extern char SM_HELP_VOLUME[];
392
393
394 /*
395  * Name of the lock the session manager has to make sure it's the only
396  * session manager running
397  */
398 extern char     SM_RUNNING_LOCK[];
399
400 /*
401  * Location and name of the screen saver program
402  */
403 extern char     SM_SCREEN_SAVER_LOC[];
404 extern char     SM_SCREEN_SAVER_NAME[];
405
406 /*
407  * Global resource settings. These settings determine program behavior
408  * wrt settings restoration, lock behavior, window manager startup etc
409  */
410 extern SessionResources         smRes;
411 extern SaverResources           smSaverRes;
412 extern SettingsSet              smToSet;
413 extern SettingsCust             smCust;
414 extern SessionSettings          smSettings;
415 extern GeneralData              smGD;
416
417
418 /*  
419  *  External Interface  
420  */
421
422 #endif /* __sm_h*/