#ifndef _XSM_H_
#define _XSM_H_
#include <X11/Xos.h>
#include <X11/Xfuncs.h>
#ifndef X_NOT_POSIX
#ifdef _POSIX_SOURCE
#include <limits.h>
#else
#define _POSIX_SOURCE
#include <limits.h>
#undef _POSIX_SOURCE
#endif
#endif
#ifndef PATH_MAX
#include <sys/param.h>
#ifndef PATH_MAX
#ifdef MAXPATHLEN
#define PATH_MAX MAXPATHLEN
#else
#define PATH_MAX 1024
#endif
#endif
#endif
#ifndef _POSIX_SOURCE
#define _POSIX_SOURCE
#include <stdio.h>
#undef _POSIX_SOURCE
#else
#include <stdio.h>
#endif
#include <ctype.h>
#include <stdlib.h>
#include <X11/StringDefs.h>
#include <X11/Intrinsic.h>
#include <X11/SM/SMlib.h>
#include "list.h"
#define SAVEFILE_VERSION 3
#define DEFAULT_SESSION_NAME "Default"
#define FAILSAFE_SESSION_NAME "Fail Safe"
#define RESTART_MANAGERS 1
#define RESTART_REST_OF_CLIENTS 2
typedef struct _ClientRec {
SmsConn smsConn;
IceConn ice_conn;
char *clientId;
char *clientHostname;
List *props;
char *discardCommand;
char *saveDiscardCommand;
unsigned int restarted : 1;
unsigned int userIssuedCheckpoint : 1;
unsigned int restartHint : 2;
unsigned int receivedDiscardCommand : 1;
unsigned int freeAfterBadSavePopup : 1;
} ClientRec;
typedef struct _PendingClient {
char *clientId;
char *clientHostname;
List *props;
} PendingClient;
typedef struct _Prop {
char *name;
char *type;
List *values;
} Prop;
typedef struct _PropValue {
XtPointer value;
int length;
} PropValue;
extern int Argc;
extern char **Argv;
extern char *display_env, *non_local_display_env;
extern char *session_env, *non_local_session_env;
extern char *audio_env;
extern Bool need_to_name_session;
extern Bool remote_allowed;
extern Bool verbose;
extern char *sm_id;
extern char *networkIds;
extern char *session_name;
extern List *RunningList;
extern List *PendingList;
extern List *RestartAnywayList;
extern List *RestartImmedList;
extern List *WaitForSaveDoneList;
extern List *FailedSaveList;
extern List *WaitForInteractList;
extern List *WaitForPhase2List;
extern Bool client_info_visible;
extern Bool client_prop_visible;
extern Bool client_log_visible;
extern String *clientListNames;
extern ClientRec **clientListRecs;
extern int numClientListNames;
extern int current_client_selected;
extern Bool shutdownInProgress;
extern Bool phase2InProgress;
extern Bool saveInProgress;
extern Bool shutdownCancelled;
extern Bool wantShutdown;
extern int sessionNameCount;
extern String *sessionNamesShort;
extern String *sessionNamesLong;
extern Bool *sessionsLocked;
extern int num_clients_in_last_session;
extern char **non_session_aware_clients;
extern int non_session_aware_count;
extern XtAppContext appContext;
extern Widget topLevel;
extern Widget mainWindow;
extern void fprintfhex(FILE *fp, unsigned int len, char *cp);
extern Status StartSession(char *name, Bool use_default);
extern void EndSession(int status);
extern void SetWM_DELETE_WINDOW(Widget widget, String delAction);
extern void SetAllSensitive(Bool on);
extern void FreeClient(ClientRec *client, Bool freeProps);
extern void CloseDownClient(ClientRec *client);
extern int strbw(char *a, char *b);
extern void nomem(void);
#define Strstr strstr
#if defined(ISC) && __STDC__
extern FILE *fdopen(int, char const *);
#endif
#if defined(sun) && defined(SVR4)
extern int System();
#define system(s) System(s)
#endif
extern void remote_start(char *restart_protocol, char *restart_machine,
char *program, char **args, char *cwd, char **env,
char *non_local_display_env,
char *non_local_session_env );
extern void sig_child_handler(void);
extern void sig_term_handler(void);
extern void sig_usr1_handler(void);
extern void register_signals(XtAppContext);
extern int execute_system_command(char *s);
#ifdef XKB
#include <X11/extensions/XKBbells.h>
#endif
#endif