415 lines
11 KiB
C
415 lines
11 KiB
C
/*
|
|
* CDE - Common Desktop Environment
|
|
*
|
|
* Copyright (c) 1993-2012, The Open Group. All rights reserved.
|
|
*
|
|
* These libraries and programs are free software; you can
|
|
* redistribute them and/or modify them under the terms of the GNU
|
|
* Lesser General Public License as published by the Free Software
|
|
* Foundation; either version 2 of the License, or (at your option)
|
|
* any later version.
|
|
*
|
|
* These libraries and programs are distributed in the hope that
|
|
* they will be useful, but WITHOUT ANY WARRANTY; without even the
|
|
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
* PURPOSE. See the GNU Lesser General Public License for more
|
|
* details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with these libraries and programs; if not, write
|
|
* to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
|
|
* Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
/* $XConsortium: xims.h /main/6 1996/04/17 16:25:50 pascale $ */
|
|
|
|
/*
|
|
* (c) Copyright 1996 Digital Equipment Corporation.
|
|
* (c) Copyright 1996 Hewlett-Packard Company.
|
|
* (c) Copyright 1996 International Business Machines Corp.
|
|
* (c) Copyright 1996 Sun Microsystems, Inc.
|
|
* (c) Copyright 1996 Novell, Inc.
|
|
* (c) Copyright 1996 FUJITSU LIMITED.
|
|
* (c) Copyright 1996 Hitachi.
|
|
*/
|
|
|
|
#ifndef _XIMS_H_
|
|
#define _XIMS_H_ 1
|
|
|
|
#include <X11/X.h>
|
|
#include <X11/Xlib.h>
|
|
#include <X11/Intrinsic.h>
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <stdbool.h>
|
|
#include <unistd.h>
|
|
#include <string.h>
|
|
#include <sys/param.h>
|
|
#include <sys/time.h>
|
|
|
|
#include "ximspath.h"
|
|
#include "ximserr.h"
|
|
|
|
|
|
/* operation modes */
|
|
#define MODE_START 0 /* default */
|
|
#define MODE_MODE 1 /* -mode option */
|
|
#define MODE_STYLE 2 /* -style option */
|
|
#define MODE_LIST 3 /* -list option */ /* no window */
|
|
#define MODE_CURRENT 4 /* -current option */ /* no window */
|
|
#define MODE_REMCONF 5 /* -remoteconf */ /* no window */
|
|
#define MODE_LISTNAME 6 /* -listname option */
|
|
|
|
/* operation flags */
|
|
#define FLAG_ENV (1<<0) /* -env option */
|
|
#define FLAG_NOSAVE (1<<1) /* -nosave option */
|
|
#define FLAG_NOSTART (1<<2) /* -nostart option (DEBUG) */
|
|
#define FLAG_NOWAIT (1<<3) /* -nowait option */
|
|
#define FLAG_NOTIMEOUT (1<<4) /* -notimeout option */
|
|
#define FLAG_NORESOURCE (1<<5) /* -noresource option */
|
|
#define FLAG_NOREMOTE (1<<6) /* -noremote option */
|
|
#define FLAG_NOTIFY (1<<7) /* -notify option */
|
|
#define FLAG_CONNECT (1<<8) /* -connect option */
|
|
#define FLAG_REMOTERUN (1<<9) /* -remoterun option */
|
|
#define FLAG_WINDOW (1<<10) /* -window option */
|
|
#define FLAG_DT (1<<11) /* -dt option */
|
|
|
|
#define FLAG_DEFAULT (FLAG_DT)
|
|
#define USE_WINDOW_MASK (FLAG_WINDOW|FLAG_DT)
|
|
|
|
#define MAXIMSENT 32 /* max # of ims for each locale */
|
|
|
|
#define MIN_INTERVAL 100 /* msec */
|
|
#define DEFAULT_INTERVAL 1000 /* msec */
|
|
#define MIN_TIMEOUT 1 /* sec */
|
|
#define DEFAULT_TIMEOUT 180 /* sec */
|
|
#define REMOTE_TIMEOUT 60 /* sec */
|
|
|
|
#define TAG_END_CHAR ':'
|
|
#define TAG_SEP_CHAR '.'
|
|
#define LIST_SEP_CHAR ','
|
|
#define COMMENT_CHAR '!'
|
|
#define COMMENT_CHAR2 '#'
|
|
#define COMMENT_CHARS "!#"
|
|
|
|
#define NAME_NONE "none"
|
|
#define NAME_LOCAL "local"
|
|
#define NAME_BUILTIN "builtin"
|
|
#define NAME_DEFAULT "@"
|
|
#define NAME_DEFAULT_CHAR '@'
|
|
#define DUMMY_SERVER_NAME NAME_DEFAULT
|
|
|
|
#define STR_PREFIX_CHAR '@'
|
|
#define STR_DEFAULTIMS "DefaultIms"
|
|
#define STR_SELECTMODE "SelectMode"
|
|
#define STR_IMSNAME "ImsName"
|
|
#define STR_HOSTNAME "HostName"
|
|
#define STR_ICONIC "IconicMode"
|
|
#define STR_IMSOPTION "ImsOption"
|
|
#define STR_ERRORCODE "#ErrorCode"
|
|
#define STR_ERRORPATH "#ErrorPath"
|
|
#define STR_CONFDATA "#IMSSTART-CONFDATA-1.0"
|
|
#define STR_ICONIC_OPT "-iconic"
|
|
|
|
/* protocol index */
|
|
#define Proto_None 0
|
|
#define Proto_XIM 1
|
|
#define Proto_Ximp 2
|
|
#define Proto_Xsi 3
|
|
#define NUM_PROTOCOLS 4
|
|
/* protocol flag */
|
|
#define ProtoBit(i) (1<<(i))
|
|
|
|
/* window state */
|
|
#define WIN_ST_NONE 0
|
|
#define WIN_ST_INIT 1
|
|
#define WIN_ST_REMOTE_CONF 2
|
|
#define WIN_ST_REMOTE_RUN 3
|
|
#define WIN_ST_ACTION_DONE 4
|
|
|
|
/* ims server flag */
|
|
#define F_NO_SERVER (1<<0)
|
|
#define F_NO_REMOTE (1<<1)
|
|
#define F_NO_OPTION (1<<2)
|
|
#define F_HAS_WINDOW (1<<3)
|
|
#define F_TRY_CONNECT (1<<4)
|
|
#define F_BUILTIN (1<<8)
|
|
|
|
/* user selection flag */
|
|
#define F_SELECT_NONE 0
|
|
#define F_SELECT_FILE (1<<0)
|
|
#define F_SELECT_WINDOW (1<<1)
|
|
#define F_SELECT_CHANGED (1<<4)
|
|
|
|
/* select_mode */
|
|
#define NUM_SEL_MODE 2
|
|
#define SEL_MODE_NOAUTO 0
|
|
#define SEL_MODE_AUTO 1
|
|
#define SEL_MODE_ONCE 2
|
|
#define SEL_MODE_NONE -1
|
|
#define SEL_MODE_GIVEN -2
|
|
#define SEL_MODE_QUERY -3
|
|
#define SEL_MODE_WIN -4
|
|
|
|
/* host type */
|
|
#define HOST_LOCAL 0
|
|
#define HOST_REMOTE 1
|
|
#define HOST_UNKNOWN 2
|
|
|
|
/* message type for put_msg_win() */
|
|
#define MSGTYP_INFO 0
|
|
#define MSGTYP_WARN 1
|
|
#define MSGTYP_FATAL 2
|
|
#define MSGTYP_CONFIRM 3
|
|
|
|
/* help message type for ximsHelp() */
|
|
#define HELP_SELECTION 0
|
|
#define HELP_MODE 1
|
|
|
|
/* actions internally used */
|
|
#define ACT_GETREMCONF 0
|
|
#define ACT_RUNREMIMS 1
|
|
#define NUM_ACTIONS 2
|
|
#define ACTION_MASK 0xf0
|
|
|
|
|
|
/* operation states */
|
|
typedef enum {
|
|
State_None = 0,
|
|
State_Init,
|
|
State_Init_Err,
|
|
State_Init_Done,
|
|
State_Select,
|
|
State_Select_Err,
|
|
State_Select_Canceled,
|
|
State_Select_Done,
|
|
State_Start,
|
|
State_Start_Err,
|
|
State_Start_Done,
|
|
State_Wait,
|
|
State_Wait_Err,
|
|
State_Wait_Done,
|
|
State_Finish,
|
|
State_Finish_Err,
|
|
State_Finish_Defered,
|
|
State_Finish_Done,
|
|
State_Mode,
|
|
State_Mode_Canceled,
|
|
State_Mode_Done,
|
|
|
|
State_Action_Invoked,
|
|
State_Action_Waiting,
|
|
State_Action_Done,
|
|
State_Action_Err,
|
|
|
|
State_Last
|
|
} OpStateVal;
|
|
|
|
/* structure definitions */
|
|
|
|
typedef struct {
|
|
char *name;
|
|
char *value;
|
|
} EnvEnt;
|
|
|
|
typedef struct {
|
|
char *ims_name;
|
|
char *opt_str;
|
|
} ImsOpt;
|
|
|
|
typedef struct {
|
|
EnvEnt *set;
|
|
EnvEnt *unset;
|
|
} OutEnv;
|
|
|
|
typedef struct {
|
|
char *confDir; /* override /usr/dt/config */
|
|
char *userDir; /* override .dt */
|
|
char *resPath; /* path of session resource (colon separated) */
|
|
} DtEnv;
|
|
|
|
typedef struct {
|
|
bool disabled; /* disable remote execution */
|
|
bool useRemsh; /* use remsh(1) instead of action */
|
|
int timeout; /* timeout for remote execution */
|
|
char *passEnv; /* env vars passed to remote IMS */
|
|
} RemoteEnv;
|
|
|
|
typedef struct {
|
|
int flags;
|
|
int protocols;
|
|
int timeout;
|
|
int interval;
|
|
char *servername;
|
|
char *servername2;
|
|
char *classname;
|
|
char *property;
|
|
char *cmd_path;
|
|
char *cmd_param;
|
|
char *env_set;
|
|
char *env_unset;
|
|
char *env_pass;
|
|
} ImsConf;
|
|
|
|
typedef struct {
|
|
int status;
|
|
char *name;
|
|
char *fname;
|
|
char *label;
|
|
ImsConf *ims;
|
|
} ImsEnt;
|
|
|
|
typedef struct {
|
|
short status;
|
|
short default_idx;
|
|
short def_selmode;
|
|
short num_ent;
|
|
ImsEnt **elist;
|
|
} ImsList;
|
|
|
|
typedef struct {
|
|
int status;
|
|
int wait_status;
|
|
pid_t pid;
|
|
bool is_remote;
|
|
int proto;
|
|
char *im_mod;
|
|
char *atom_name;
|
|
char *cmdbuf;
|
|
Atom prop_atom;
|
|
} RunEnv;
|
|
|
|
typedef struct {
|
|
bool dpy_specific;
|
|
short select_mode;
|
|
short iconic;
|
|
char *name;
|
|
char *hostname;
|
|
char *com_opt;
|
|
ImsOpt **opts;
|
|
char *real_fname; /* actually read */
|
|
} FileSel;
|
|
|
|
typedef struct {
|
|
int flag; /* F_SELECT_* */
|
|
int status; /* error code */
|
|
int ims_idx; /* index of selected ims to list->elist[] */
|
|
int host_type; /* host type: HOST_{LOCAL|REMOTE|UNKNOWN} */
|
|
int iconic; /* iconic mode: */
|
|
char *name; /* selected ims */
|
|
char *hostname; /* current host */
|
|
ImsList *list; /* current list */
|
|
ImsEnt *ent; /* selected ims ent */
|
|
FileSel *fsel; /* original selection on file */
|
|
RunEnv *renv; /* run env used on start.c & env.c */
|
|
} UserSelection;
|
|
|
|
typedef struct {
|
|
char *hostname;
|
|
char *username;
|
|
char *locale;
|
|
char *real_locale;
|
|
char *CDE_locale;
|
|
char **locale_aliases;
|
|
char *homedir;
|
|
char *displayname;
|
|
char *displaydir;
|
|
char *xmodifiers;
|
|
short screen_num;
|
|
} UserEnv;
|
|
|
|
typedef struct {
|
|
char *DisplayName; /* override $DISPLAY */
|
|
char *LocaleName; /* override $LANG */
|
|
char *ConfPath; /* override $CONF/start.conf */
|
|
char *UserPath; /* override $HOME/.xims/<locale> */
|
|
char *LogPath; /* override $HOME/.xims/ximslog */
|
|
char *ResourceFile; /* resource file for IMS */
|
|
char *ImsName; /* IMS name */
|
|
char *ImsOption; /* IMS option */
|
|
char *HostName; /* remote host name */
|
|
char *ShellName; /* shell name */
|
|
int Timeout; /* wait timeout (sec) */
|
|
int Interval; /* check interval (msec) */
|
|
int SelectMode; /* SEL_MODE_* */
|
|
int Listname; /* Used only from dtstyle */
|
|
} CmdOpt;
|
|
|
|
typedef struct {
|
|
char *imsConfDir; /* [%I] /usr/dt/config/ims/ */
|
|
char *imsAppDir; /* [%R] /usr/dt/app-defaults/ */
|
|
char *imsLogDir; /* [%G] /var/dt/ */
|
|
char *imsLogFile; /* [%g] imslog */
|
|
char *imsDir; /* [%b] ims */
|
|
char *userImsDir; /* [%S] $HOME/.dt/ims/ */
|
|
char *userTmpDir; /* [%T] $HOME/.dt/tmp/ */
|
|
char *userAltDir; /* [%A] alt tmp /var/tmp/ */
|
|
char *xmod[NUM_PROTOCOLS]; /* format of XMODIFIERS */
|
|
char *atom[NUM_PROTOCOLS]; /* atom name to be examined */
|
|
char *action[NUM_ACTIONS]; /* actions internally used */
|
|
DtEnv *dt;
|
|
RemoteEnv *remote;
|
|
} CmdConf;
|
|
|
|
typedef struct {
|
|
int status;
|
|
Display *Dpy;
|
|
Widget TopW;
|
|
Window atom_owner;
|
|
Atom atom_main;
|
|
Atom atom_status;
|
|
Atom atom_data;
|
|
XtAppContext appC;
|
|
} WinEnv;
|
|
|
|
/* Global Variables */
|
|
|
|
extern char *ProgramRevision; /* on main.c */
|
|
extern Display *Dpy; /* display (on win.c) */
|
|
extern Widget TopW; /* toplevel-shell (on win.c) */
|
|
extern XtAppContext appC;
|
|
|
|
# ifdef _EXTERN_DEFINE_
|
|
#define Extern
|
|
# else
|
|
#define Extern extern
|
|
# endif /* _EXTERN_DEFINE_ */
|
|
|
|
Extern OpStateVal OpState;
|
|
Extern int OpMode; /* one of MODE_* */
|
|
Extern int OpFlag; /* bitOR of FLAG_* */
|
|
Extern CmdOpt Opt; /* command line options */
|
|
Extern CmdConf Conf;
|
|
Extern WinEnv winEnv;
|
|
Extern UserEnv userEnv;
|
|
Extern UserSelection userSel;
|
|
Extern ImsList *localList;
|
|
|
|
Extern char *ProgramName; /* invoked program name */
|
|
Extern int ProgramType; /* same as OpMode */
|
|
Extern int Verbose; /* verbose flag */
|
|
Extern int DebugLvl; /* debug flag */
|
|
Extern FILE *LogFp; /* log file */
|
|
Extern int Wargc; /* argc for XtAppInitialize */
|
|
Extern char **Wargv; /* argv for XtAppInitialize */
|
|
Extern bool WaitingDialogReply;
|
|
Extern bool WaitingActionDone;
|
|
Extern bool UseMsgWindow;
|
|
Extern bool IsRemote;
|
|
Extern int LastErrMsg;
|
|
|
|
#undef Extern
|
|
|
|
#define isXsession() ((OpFlag & FLAG_DT) ? True : False)
|
|
#define isVUE() (False)
|
|
#define isDT() ((OpFlag & FLAG_DT) ? True : False)
|
|
#define useWINDOW() \
|
|
(((OpFlag & USE_WINDOW_MASK) || window_env_ok()) ? True : False)
|
|
|
|
#define RemoteOn() \
|
|
(((OpFlag & FLAG_NOREMOTE) || Conf.remote->disabled) ? False : True)
|
|
|
|
#include "ximsfunc.h"
|
|
|
|
#endif /* _XIMS_H_ */
|