dtcm: Coverity 88675
[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 # ifdef __ultrix
133 #  define _CLIENT_CAT_NAME "dtsession.cat"
134 # else  /* __ultrix */
135 #  define _CLIENT_CAT_NAME "dtsession"
136 # endif /* __ultrix */
137 extern char *_DtGetMessage(char *filename, int set, int n, char *s);
138 # define GETMESSAGE(set, number, string)\
139     (_DtGetMessage(_CLIENT_CAT_NAME, set, number, string))
140 #else
141 # define GETMESSAGE(set, number, string)\
142     string
143 #endif
144
145 typedef int (*IOErrorHandlerProc)(
146         Display *
147 );
148
149 /* 
150  * typedef statements 
151  */
152
153 /*
154  * Pointer to hold information returned by session settings
155  */
156 typedef struct
157 {
158     int                 accelNum;           /* Pointer Control Information */
159     int                 accelDenom;
160     int                 threshold;
161
162     int                 timeout;            /*Screen Saver Information */
163     int                 interval;
164     int                 preferBlank;
165     int                 allowExp;
166
167     char                *fontDirs;          /*Font path Information */
168     
169     XKeyboardState      kbdState;           /* Keyboard Control Information */
170     char                *autoRepeats;
171     
172     char                *buttonMap;         /*Button Mapping Information */
173     
174     int                 numKeyCode;         /*Key Mapping information */
175     int                 keySymPerCode;
176     char                *keySyms;
177
178     int                 maxKeyPerMod;       /*Modifier Mapping Information */
179     char                *modSyms;
180
181     Boolean             didQuery;       /*Was this information queried for*/
182
183     int                 confirmMode;
184     int                 startState;
185 } SessionSettings, *SessionSettingsPtr;
186
187 /*
188  * Structure to save all of the session manager resources
189  */
190 typedef struct
191 {
192     char        *wmStartup;
193     Boolean     querySettings;
194     char        *keyholders;
195     int         alarmTime;
196     int         memThreshold;
197     char        *sessionVersion;
198     int         displayResolution;
199     char        *sessionLang;
200     long        contManagement;
201     int         waitClientTimeout;
202     int         waitWmTimeout;
203     Boolean     useBMS;
204     Boolean     saveFontPath;
205     int         saveYourselfTimeout;
206     Boolean     mergeXdefaults;
207     int         numSessionsBackedup;
208     char        *ignoreEnvironment;
209 #if defined(USE_XINERAMA)
210     int         xineramaPreferredScreen; /* prefered xinerama screen */
211 #endif
212 } SessionResources, *SessionResourcesPtr;
213
214 /*
215  * Screen saver resources.
216  */
217 typedef struct
218 {
219     int         cycleTimeout;
220     int         saverTimeout;
221     int         lockTimeout;
222     Boolean     random;
223     char        *saverList;
224 } SaverResources, *SaverResourcesPtr;
225
226 /*
227  * Structure to hold global state settings
228  */
229 typedef struct
230 {
231     Boolean                     audioChange;
232     Boolean                     pointerChange;
233     Boolean                     pointerMapChange;
234     char                        pointerMap[5];
235     int                         numButton;
236     Boolean                     keyboardChange;
237     Boolean                     screenSavChange;
238     char                        dClickBuf[50];
239 } SettingsSet;
240
241 typedef struct
242 {
243         Boolean         audioChange;
244         Boolean         pointerChange;
245         Boolean         keyboardChange;
246         Boolean         screenSavChange;
247         Boolean         dClickChange;
248         Boolean         fontChange;
249         Boolean         preeditChange;
250 } SettingsCust;
251
252
253 /*
254  * Structure to hold general information needed to be shared by
255  * different modules in the session manager
256  */
257 typedef struct
258 {
259     Display             *display;
260     Widget              topLevelWid;
261     Window              topLevelWindow;
262     XtAppContext        appCon;
263     char                *programName;           /* main()'s argv[0] */
264     int                 numSavedScreens;
265     int                 screen;
266     int                 lockedState;
267     int                 smState;
268     short               sessionType;
269     unsigned long       blackPixel;
270     unsigned long       whitePixel;
271     unsigned long       foregroundPix;
272     unsigned long       backgroundPix;
273     Cursor              lockCursor, padlockCursor, blankCursor;
274     Cursor              waitCursor;
275     char                resourcePath[MAXPATHLEN + 1];
276     char                settingPath[MAXPATHLEN + 1];
277     char                clientPath[MAXPATHLEN + 1];
278     char                fontPath[MAXPATHLEN + 1];
279     char                exitPath[MAXPATHLEN + 1];
280     char                etcPath[MAXPATHLEN + 1]; /*
281                                                   * Used for sessionEtc on
282                                                   * the way up and for
283                                                   * moving current to
284                                                   * current.old on the way
285                                                   * down
286                                                   */
287     char                *savePath;
288     char                *restoreSession;
289     Boolean             dtwmRunning;
290     Boolean             bmsDead;
291     Tt_pattern          requests2Handle;
292     Tt_pattern          events2Watch;
293     Boolean             compatMode;
294     Boolean             lockOnTimeoutStatus;
295     gid_t               runningGID, conMgmtGID;
296     uid_t               runningUID, unLockUID;
297     Boolean             secureSystem;
298     Boolean             screenSaver;  /* obsolete */
299     Boolean             screenSaverRunning; /* obsolete */
300     Boolean             userSetWaitWmTimeout;
301     int                 savedWaitWmTimeout;
302     /*
303      * These strings are for our copy once we
304      * fetch resources with XtGetApplicationResources.
305      * These string returned can be overwritten anytime
306      * another Xrm call is made as in MergeCoeResources (libXv3.0)
307      * or in our own calls to XrmGetFileDatabase.
308      */
309
310     /*
311      * This set is the for smRes
312      */
313     char        *wmStartup;
314     char        *keyholders;
315     char        *sessionVersion;
316     char        *sessionLang;
317
318     /*
319      * This set is the for smSettings
320      */
321     char        *fontDirs;          /*Font path Information */
322     char        *autoRepeats;
323     char        *buttonMap;         /*Button Mapping Information */
324     char        *keySyms;
325     char        *modSyms;
326    
327     char        *saverList; /* Current screen saver list */
328     void        *saverListParse; /* Current parsed screen saver list */
329
330     Boolean     coverScreen; /* full screen cover */
331     char        *SmNextension; /* screen saver extension name */
332     char        *SmCextension; /* screen saver extension class */
333     char        *extensionSpec; /* sprintf specification */
334 #if defined (USE_X11SSEXT)
335     int         ssEventType; /* screen saver event type */
336 #endif /* USE_X11SSEXT */
337     struct sigaction childvec;
338     struct sigaction defvec;
339
340     Boolean     homeSave;        /* True if the save is via the Style
341                                     Manager's Save Home Session button. */
342     Boolean     displaySpecific; /* Is Ture if the session is for a
343                                     specific display, otherwise False */
344     Boolean     loggingOut;     /* Is True if the current save is for
345                                    a logout; False otherwise. */
346
347 #ifdef USE_XINERAMA             /* JET - Xinerama.  Schwiing!  */
348   DtXineramaInfoPtr_t DtXineramaInfo;
349 #endif
350
351     Boolean ExitComplete;       /* JET - don't exit before we are ready... */
352
353 } GeneralData;
354
355
356 /*
357  * External variables
358  */
359 extern  char    *_dtsessionMG();
360
361 /*
362  * Files that the session manager saves sessions to and restores sessions
363  * from.  allocated in SmStrDef.c
364  */
365 extern char SM_CLIENT_FILE[];
366 extern char SM_CLIENT_FILE2[];
367 extern char SM_RESOURCE_FILE[];
368 extern char SM_FONT_FILE[];
369 extern char SM_LOW_RES_EXT[];
370 extern char SM_MED_RES_EXT[];
371 extern char SM_HIGH_RES_EXT[];
372 extern char SM_SETTING_FILE[];
373 extern char SM_CONVERSION_FILE[];
374 extern char SM_SYSTEM_CLIENT_FILE[];
375 extern char SM_SYSTEM_RESOURCE_FILE[];
376 extern char SM_SYSTEM_FONT_FILE[];
377
378 extern char SM_SYSTEM_PATH[];
379 extern char SM_SECURE_PATH[];
380
381 extern char SM_CURRENT_DIRECTORY[];
382 extern char SM_CURRENT_FONT_DIRECTORY[];
383 extern char SM_HOME_DIRECTORY[];
384 extern char SM_HOME_FONT_DIRECTORY[];
385 extern char SM_OLD_EXTENSION[];
386 extern char SM_SYSTEM_DIRECTORY[];
387 extern char smEtcFile[];
388 extern char smExitFile[];
389
390 /*
391  * Session manager name and class used to get resources allocated in SmStrDef.c
392  */
393 extern char SM_RESOURCE_CLASS[];
394 extern char SM_RESOURCE_NAME[];
395 extern char SM_HELP_VOLUME[];
396
397
398 /*
399  * Name of the lock the session manager has to make sure it's the only
400  * session manager running
401  */
402 extern char     SM_RUNNING_LOCK[];
403
404 /*
405  * Location and name of the screen saver program
406  */
407 extern char     SM_SCREEN_SAVER_LOC[];
408 extern char     SM_SCREEN_SAVER_NAME[];
409
410 /*
411  * Global resource settings. These settings determine program behavior
412  * wrt settings restoration, lock behavior, window manager startup etc
413  */
414 extern SessionResources         smRes;
415 extern SaverResources           smSaverRes;
416 extern SettingsSet              smToSet;
417 extern SettingsCust             smCust;
418 extern SessionSettings          smSettings;
419 extern GeneralData              smGD;
420
421
422 /*  
423  *  External Interface  
424  */
425
426 #endif /* __sm_h*/