123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849 |
- /*
- * 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: ActionP.h /main/3 1995/10/26 14:59:56 rswiston $ */
- /************************************<+>*************************************
- ****************************************************************************
- **
- ** File: ActionP.h
- **
- ** Project: DT
- **
- ** Description: Private include file for the Action Library.
- **
- **
- ** (c) Copyright 1993, 1994 Hewlett-Packard Company
- ** (c) Copyright 1993, 1994 International Business Machines Corp.
- ** (c) Copyright 1993, 1994 Sun Microsystems, Inc.
- ** (c) Copyright 1993, 1994 Novell, Inc.
- ****************************************************************************
- ************************************<+>*************************************/
- #ifndef _ActionP_h
- #define _ActionP_h
- #include <Dt/DtP.h>
- #include <Dt/DbReader.h>
- #include <Dt/ActionDb.h>
- #include <Dt/Action.h>
- #include <Tt/tttk.h>
- #include <Dt/DtShmDb.h>
- /*
- * Environment Variable Names
- */
- #define ENV_SESSION_SVR "SESSION_SVR"
- /*
- * Define maximum static buffer size for action code.
- */
- #define _DtAct_MAX_BUF_SIZE 1024
- /*
- * Data-type field which contains the template for producing filenames
- * of a given type.
- */
- #define _DtActNAME_TEMPLATE "NAME_TEMPLATE"
- #define _DtActIS_EXECUTABLE "IS_EXECUTABLE"
- /******************************************************************************
- *
- * MASK LAYOUT:
- *
- * The same layout is used for all the masks (defined herein);, independent of
- * the data structure in which they are defined. That is, all bit fields for
- * all masks are non-overlapping. In general, the mask in any given structure
- * should ONLY contain information in the field appropriate for that structure.
- *
- * The action bit mask is broken into the following fields
- *
- * --------------------------------------------------------------------------
- * |act'n |arg |arg |arg | win |args| request | object |treat| not |
- * |type |class|count|typ | type | | status | status | as | |
- * |bits |bits |bits |bit | bits |used| bits | bits |file |used |
- * --------------------------------------------------------------------------
- * 0 - 4,5 - 8,9 - 12, 13 ,14 - 17,18-19,20 ------- 22,23 ---- 28, 29 ,30-31
- * | | | | | |
- * |<-- action mask -->| |<- request->|<- obj. ->|< - >|
- * mask data |
- * mask msgCcomp.
- * mask
- ******************************************************************************/
- /*
- * generic bit manipulation macros
- */
- #define SET_ANY_BITS(mask,bits) ( mask |= (bits) )
- #define RESET_ANY_BITS(mask,bits) ( mask &= ~(bits) )
- #define TST_ANY_BITS(mask,bits) ( mask & (bits) )
- /*
- * Action type bits
- */
- #define _DtAct_CMD_BIT (1<<0)
- #define _DtAct_MAP_BIT (1<<1)
- #define _DtAct_TT_MSG_BIT (1<<2)
- #ifdef _DT_ALLOW_DT_MSGS
- #define _DtAct_DT_REQ_MSG_BIT (1<<3)
- #define _DtAct_DT_NTFY_MSG_BIT (1<<4)
- #endif /* _DT_ALLOW_DT_MSGS */
- /*
- * Action structure mask bits
- */
- #define _DtAct_ARG_CLASS_FILE_BIT (1<<5)
- #define _DtAct_ARG_CLASS_STRING_BIT (1<<6)
- #define _DtAct_ARG_CLASS_BUFFER_BIT (1<<7)
- #define _DtAct_ARG_CLASS_WILD_BIT (1<<8)
- #define _DtAct_ARG_COUNT_LT_BIT (1<<9)
- #define _DtAct_ARG_COUNT_GT_BIT (1<<10)
- #define _DtAct_ARG_COUNT_EQ_BIT (1<<11)
- #define _DtAct_ARG_COUNT_WILD_BIT (1<<12)
- #define _DtAct_ARG_TYPE_WILD_BIT (1<<13)
- #define _DtAct_NO_STDIO_BIT (1<<14)
- #define _DtAct_TERMINAL_BIT (1<<15)
- #define _DtAct_PERM_TERM_BIT (1<<16)
- /*
- * Defines which reflect the actual number
- * of %ARGn% instances found in the action definition
- * NOTE: Is this JUST in the EXEC_STRING? or the total number of %ARGn%'s
- * referenced in all parssed definitions?
- *
- */
- #define _DtAct_SINGLE_ARG_BIT (1<<18)
- #define _DtAct_MULTI_ARG_BIT (1<<19)
- #ifdef _DT_ALLOW_DT_MSGS
- #define _DtAct_ACTION_TYPE_BITS ( _DtAct_CMD_BIT \
- | _DtAct_MAP_BIT \
- | _DtAct_DT_NTFY_MSG_BIT \
- | _DtAct_DT_REQ_MSG_BIT \
- | _DtAct_TT_MSG_BIT )
- #else
- #define _DtAct_ACTION_TYPE_BITS ( _DtAct_CMD_BIT \
- | _DtAct_MAP_BIT \
- | _DtAct_TT_MSG_BIT )
- #endif /* _DT_ALLOW_DT_MSGS */
- #define _DtAct_ARG_CLASS_BITS ( _DtAct_ARG_CLASS_FILE_BIT \
- | _DtAct_ARG_CLASS_STRING_BIT\
- | _DtAct_ARG_CLASS_BUFFER_BIT \
- | _DtAct_ARG_CLASS_WILD_BIT )
- #define _DtAct_ARG_TYPE_BITS ( _DtAct_ARG_TYPE_WILD_BIT )
- #define _DtAct_ARG_COUNT_BITS ( _DtAct_ARG_COUNT_LT_BIT \
- | _DtAct_ARG_COUNT_GT_BIT \
- | _DtAct_ARG_COUNT_EQ_BIT \
- | _DtAct_ARG_COUNT_WILD_BIT )
- #define _DtAct_WINTYPE_BITS ( _DtAct_NO_STDIO_BIT \
- | _DtAct_TERMINAL_BIT \
- | _DtAct_PERM_TERM_BIT )
- #define _DtAct_ARGS_USED_BITS ( _DtAct_SINGLE_ARG \
- | _DtAct_MULTI_ARG )
- #define _DtAct_ACTION_BITS ( _DtAct_ACTION_TYPE_BITS \
- | _DtAct_ARG_CLASS_BITS \
- | _DtAct_ARG_TYPE_BITS \
- | _DtAct_ARG_COUNT_BITS \
- | _DtAct_WINTYPE_BITS \
- | _DtAct_ARGS_USED_BITS )
- #define IS_CMD(mask) ( mask & _DtAct_CMD_BIT )
- #define IS_MAP(mask) ( mask & _DtAct_MAP_BIT )
- #define IS_TT_MSG(mask) ( mask & _DtAct_TT_MSG_BIT )
- #ifdef _DT_ALLOW_DT_MSGS
- #define IS_DT_REQ_MSG(mask) ( mask & _DtAct_DT_REQ_MSG_BIT )
- #define IS_DT_NOTIFY_MSG(mask) ( mask & _DtAct_DT_NTFY_MSG_BIT )
- #endif /* _DT_ALLOW_DT_MSGS */
- #define SET_CMD_ACTION(mask) ( mask |= _DtAct_CMD_BIT )
- #define SET_MAP_ACTION(mask) ( mask |= _DtAct_MAP_BIT )
- #define SET_TT_MSG(mask) ( mask |= _DtAct_TT_MSG_BIT )
- #ifdef _DT_ALLOW_DT_MSGS
- #define SET_DT_REQUEST_MSG(mask) ( mask |= _DtAct_DT_REQ_MSG_BIT)
- #define SET_DT_NOTIFY_MSG(mask) ( mask |= _DtAct_DT_NTFY_MSG_BIT)
- #endif /* _DT_ALLOW_DT_MSGS */
- #define RESET_CMD_ACTION(mask) ( mask &= ~(_DtAct_CMD_BIT))
- #define RESET_MAP_ACTION(mask) ( mask &= ~(_DtAct_MAP_BIT))
- #define RESET_TT_MSG(mask) ( mask &= ~(_DtAct_TT_MSG_BIT))
- #ifdef _DT_ALLOW_DT_MSGS
- #define RESET_DT_REQ_MSG(mask) ( mask &= ~(_DtAct_DT_REQ_MSG_BIT))
- #define RESET_DT_NOTIFY_MSG(mask) ( mask &= ~(_DtAct_DT_NTFY_MSG_BIT))
- #endif /* _DT_ALLOW_DT_MSGS */
- #define IS_NO_STDIO(mask) ( mask & _DtAct_NO_STDIO_BIT )
- #define IS_TERMINAL(mask) ( mask & _DtAct_TERMINAL_BIT )
- #define IS_PERM_TERM(mask) ( mask & _DtAct_PERM_TERM_BIT)
- #define SET_NO_STDIO(mask) ( mask |= _DtAct_NO_STDIO_BIT )
- #define SET_TERMINAL(mask) ( mask |= _DtAct_TERMINAL_BIT )
- #define SET_PERM_TERM(mask) ( mask |= _DtAct_PERM_TERM_BIT )
- #define RESET_NO_STDIO(mask) ( mask &= ~(_DtAct_NO_STDIO_BIT ))
- #define RESET_TERMINAL(mask) ( mask &= ~(_DtAct_TERMINAL_BIT ))
- #define RESET_PERM_TERM(mask) ( mask &= ~(_DtAct_PERM_TERM_BIT ))
- #define IS_ARG_CLASS_FILE(mask) ( mask & _DtAct_ARG_CLASS_FILE_BIT )
- #define IS_ARG_CLASS_STRING(mask) ( mask & _DtAct_ARG_CLASS_STRING_BIT )
- #define IS_ARG_CLASS_BUFFER(mask) ( mask & _DtAct_ARG_CLASS_BUFFER_BIT )
- #define IS_ARG_CLASS_WILD(mask) ( mask & _DtAct_ARG_CLASS_WILD_BIT )
- #define SET_ARG_CLASS_FILE(mask) ( mask |= _DtAct_ARG_CLASS_FILE_BIT )
- #define SET_ARG_CLASS_STRING(mask) ( mask |= _DtAct_ARG_CLASS_STRING_BIT)
- #define SET_ARG_CLASS_BUFFER(mask) ( mask |= _DtAct_ARG_CLASS_BUFFER_BIT)
- #define SET_ARG_CLASS_WILD(mask) ( mask |= _DtAct_ARG_CLASS_WILD_BIT )
- #define RESET_ARG_CLASS_FILE(mask) (mask &= ~(_DtAct_ARG_CLASS_FILE_BIT))
- #define RESET_ARG_CLASS_STRING(mask) (mask &= ~(_DtAct_ARG_CLASS_STRING_BIT))
- #define RESET_ARG_CLASS_BUFFER(mask) (mask &= ~(_DtAct_ARG_CLASS_BUFFER_BIT))
- #define RESET_ARG_CLASS_WILD(mask) (mask &= ~(_DtAct_ARG_CLASS_WILD_BIT))
- #define IS_ARG_TYPE_WILD(mask) ( mask & _DtAct_ARG_TYPE_WILD_BIT )
- #define SET_ARG_TYPE_WILD(mask) ( mask |= _DtAct_ARG_TYPE_WILD_BIT )
- #define RESET_ARG_TYPE_WILD(mask) ( mask &= ~(_DtAct_ARG_TYPE_WILD_BIT))
- #define IS_ARG_COUNT_GT(mask) ( mask & _DtAct_ARG_COUNT_GT_BIT )
- #define IS_ARG_COUNT_LT(mask) ( mask & _DtAct_ARG_COUNT_LT_BIT )
- #define IS_ARG_COUNT_EQ(mask) ( mask & _DtAct_ARG_COUNT_EQ_BIT )
- #define IS_ARG_COUNT_WILD(mask) ( mask & _DtAct_ARG_COUNT_WILD_BIT )
- #define SET_ARG_COUNT_GT(mask) ( mask |= _DtAct_ARG_COUNT_GT_BIT )
- #define SET_ARG_COUNT_LT(mask) ( mask |= _DtAct_ARG_COUNT_LT_BIT )
- #define SET_ARG_COUNT_EQ(mask) ( mask |= _DtAct_ARG_COUNT_EQ_BIT )
- #define SET_ARG_COUNT_WILD(mask) ( mask |= _DtAct_ARG_COUNT_WILD_BIT )
- #define RESET_ARG_COUNT_GT(mask) ( mask &= ~(_DtAct_ARG_COUNT_GT_BIT ))
- #define RESET_ARG_COUNT_LT(mask) ( mask &= ~(_DtAct_ARG_COUNT_LT_BIT ))
- #define RESET_ARG_COUNT_EQ(mask) ( mask &= ~(_DtAct_ARG_COUNT_EQ_BIT ))
- #define RESET_ARG_COUNT_WILD(mask) ( mask &= ~(_DtAct_ARG_COUNT_WILD_BIT ))
- /*
- * Use of the logical "NOT" operator(!) instead of the bitwise negation
- * operator(~) is intentional in IS_ARG_NONE_FOUND.
- */
- #define IS_ARG_NONE_FOUND(mask) !( mask & ( _DtAct_SINGLE_ARG_BIT \
- | _DtAct_MULTI_ARG_BIT ))
- #define IS_ARG_SINGLE_ARG(mask) ( mask & _DtAct_SINGLE_ARG_BIT )
- #define IS_ARG_MULTI_ARG(mask) ( mask & _DtAct_MULTI_ARG_BIT )
- #define SET_ARG_NONE_FOUND(mask) ( mask &= ~( _DtAct_SINGLE_ARG_BIT \
- | _DtAct_MULTI_ARG_BIT ))
- #define SET_ARG_SINGLE_ARG(mask) ((mask |= _DtAct_SINGLE_ARG_BIT), \
- ( mask &= ~(_DtAct_MULTI_ARG_BIT)))
- #define SET_ARG_MULTI_ARG(mask) ((mask |= _DtAct_MULTI_ARG_BIT), \
- ( mask &= ~(_DtAct_SINGLE_ARG_BIT)))
- #define RESET_ARG_SINGLE_ARG(mask) ( mask &= ~(_DtAct_SINGLE_ARG_BIT))
- #define RESET_ARG_MULTI_ARG(mask) ( mask &= ~(_DtAct_MULTI_ARG_BIT))
- /*
- * ActionRequest structure mask bits
- */
- #define _DtAct_REPROCESSING_BIT (1<<20)
- #define _DtAct_TOO_MANY_MAPS_BIT (1<<21)
- #define _DtAct_CLONED_REQUEST_BIT (1<<22)
- #define _DtAct_ACTION_REQUEST_BITS ( _DtAct_REPROCESSING_BIT \
- | _DtAct_TOO_MANY_MAPS_BIT \
- | _DtAct_CLONED_REQUEST_BIT )
- #define IS_REPROCESSING(mask) ( mask & _DtAct_REPROCESSING_BIT )
- #define IS_TOO_MANY_MAPS(mask) ( mask & _DtAct_TOO_MANY_MAPS_BIT )
- #define IS_CLONED_REQUEST(mask) ( mask & _DtAct_CLONED_REQUEST_BIT )
- #define SET_REPROCESSING(mask) ( mask |= _DtAct_REPROCESSING_BIT )
- #define SET_TOO_MANY_MAPS(mask) ( mask |= _DtAct_TOO_MANY_MAPS_BIT )
- #define SET_CLONED_REQUEST(mask) ( mask |= _DtAct_CLONED_REQUEST_BIT )
- #define RESET_REPROCESSING(mask) ( mask &= ~(_DtAct_REPROCESSING_BIT))
- #define RESET_TOO_MANY_MAPS(mask) ( mask &= ~(_DtAct_TOO_MANY_MAPS_BIT))
- #define RESET_CLONED_REQUEST(mask) ( mask &= ~(_DtAct_CLONED_REQUEST_BIT))
- /*
- * ObjectData structure mask bits
- *
- */
- #define _DtAct_WRITE_OBJ_BIT (1<<23)
- #define _DtAct_FILE_OBJ_BIT (1<<24)
- #define _DtAct_BUFFER_OBJ_BIT (1<<25)
- #define _DtAct_STRING_OBJ_BIT (1<<26)
- #define _DtAct_DIR_OBJ_BIT (1<<27)
- #define _DtAct_UNKNOWN_IF_DIR_BIT (1<<28)
- #define _DtAct_OBJ_DATA_BITS ( _DtAct_WRITE_OBJ_BIT \
- | _DtAct_FILE_OBJ_BIT \
- | _DtAct_DIR_OBJ_BIT \
- | _DtAct_BUFFER_OBJ_BIT \
- | _DtAct_STRING_OBJ_BIT \
- | _DtAct_UNKNOWN_IF_DIR_BIT )
- #define IS_WRITE_OBJ(mask) ( mask & _DtAct_WRITE_OBJ_BIT )
- #define IS_FILE_OBJ(mask) ( mask & _DtAct_FILE_OBJ_BIT )
- #define IS_BUFFER_OBJ(mask) ( mask & _DtAct_BUFFER_OBJ_BIT )
- #define IS_STRING_OBJ(mask) ( mask & _DtAct_STRING_OBJ_BIT )
- #define IS_UNKNOWN_IF_DIR(mask) ( mask & _DtAct_UNKNOWN_IF_DIR_BIT )
- #define IS_DIR_OBJ(mask) ( mask & \
- ( _DtAct_UNKNOWN_IF_DIR_BIT \
- | _DtAct_DIR_OBJ_BIT ) \
- == _DtAct_DIR_OBJ_BIT)
- #define SET_WRITE_OBJ(mask) ( mask |= _DtAct_WRITE_OBJ_BIT )
- #define SET_FILE_OBJ(mask) ( mask |= _DtAct_FILE_OBJ_BIT )
- #define SET_BUFFER_OBJ(mask) ( mask |= _DtAct_BUFFER_OBJ_BIT )
- #define SET_STRING_OBJ(mask) ( mask |= _DtAct_STRING_OBJ_BIT )
- #define SET_DIR_OBJ(mask) ( mask |= _DtAct_DIR_OBJ_BIT )
- #define SET_UNKNOWN_IF_DIR(mask) ( mask |= _DtAct_UNKNOWN_IF_DIR_BIT)
- #define RESET_WRITE_OBJ(mask) ( mask &= ~(_DtAct_WRITE_OBJ_BIT))
- #define RESET_FILE_OBJ(mask) ( mask &= ~(_DtAct_FILE_OBJ_BIT))
- #define RESET_BUFFER_OBJ(mask) ( mask &= ~(_DtAct_BUFFER_OBJ_BIT))
- #define RESET_STRING_OBJ(mask) ( mask &= ~(_DtAct_STRING_OBJ_BIT))
- #define RESET_DIR_OBJ(mask) ( mask &= ~(_DtAct_DIR_OBJ_BIT))
- #define RESET_UNKNOWN_IF_DIR(mask) ( mask &= ~(_DtAct_UNKNOWN_IF_DIR_BIT))
- /*
- * MsgComponent structure mask bits (shared with Object Data?)
- */
- #define _DtAct_TREAT_AS_FILE_BIT (1<<29)
- #define _DtAct_MSG_COMP_BITS ( _DtAct_TREAT_AS_FILE_BIT )
- #define IS_TREAT_AS_FILE(mask) ( mask & _DtAct_TREAT_AS_FILE_BIT )
- #define SET_TREAT_AS_FILE(mask) ( mask |= _DtAct_TREAT_AS_FILE_BIT)
- #define RESET_TREAT_AS_FILE(mask) ( mask &= ~(_DtAct_TREAT_AS_FILE_BIT))
- /* Keyword defines */
- #define NO_KEYWORD -1
- #define LOCAL_HOST 0
- #define DATA_HOST 1
- #define DATABASE_HOST 2
- #define ARG 3
- #define DISPLAY_HOST 4
- #define LABEL 5
- #define SESSION_HOST 6
- /* Special argNum values */
- #define NO_ARG -1
- #define ALL_ARGS 0
- /*
- * ToolTalk base representation type ( tt_argn_rep_type ) values
- */
- #define DtACT_TT_REP_UNDEFINED 0
- #define DtACT_TT_REP_INT 1
- #define DtACT_TT_REP_BUFFER 2
- #define DtACT_TT_REP_STRING 3
- /*
- * Resource name and class for the EXEC-HOST resource.
- */
- #define DtEXEC_HOSTS_NAME "executionHosts"
- #define DtEXEC_HOSTS_CLASS "ExecutionHosts"
- #define DtEXEC_HOSTS_DEFAULT _DtACT_EXEC_HOST_DFLT
- /* Flags to force special processing of filenames */
- #define _DTAct_TT_VTYPE 1 << 0
- #define _DTAct_TT_ARG 1 << 1
- /* Structure used to hold the components of a message */
- typedef struct {
- char *precedingText;
- char *prompt;
- int keyword;
- int argNum;
- unsigned long mask; /* replaces isFile, isBuffer, isString boolean */
- } MsgComponent;
- typedef struct {
- MsgComponent *parsedMessage;
- int numMsgParts;
- char *compiledMessage;
- int msgLen;
- } parsedMsg;
- /******************************************************************************
- *
- * Structs used during the invocation of an action. Once DtActionInvoke()
- * exits, these structs are generally freed.
- *
- *****************************************************************************/
- typedef struct {
- /*int winMask; ---> moved into the action mask*/
- parsedMsg execString;
- parsedMsg termOpts;
- char *contextDir;
- char *contextHost;
- parsedMsg execHosts;
- char **execHostArray;
- int execHostCount;
- } cmdAttr;
- typedef struct {
- DtShmBoson map_action;
- } mapAttr;
- typedef struct {
- int tt_class;
- int tt_scope;
- parsedMsg tt_op;
- parsedMsg tt_file; /* must be a single file name */
- int *tt_argn_mode;
- int mode_count;
- parsedMsg *tt_argn_vtype;
- int vtype_count;
- parsedMsg *tt_argn_value;
- int value_count;
- int *tt_argn_rep_type; /* INT, STRING, BUFFER or UNDEFINED */
- int rep_type_count;
- } tt_msgAttr;
- #ifdef _DT_ALLOW_DT_MSGS
- typedef struct {
- parsedMsg service; /* ICCCM service name */
- parsedMsg request; /* request name string */
- parsedMsg *argn_value;
- int value_count;
- } dt_reqAttr;
- typedef struct {
- parsedMsg ngroup; /* ICCCM notification group */
- parsedMsg notify; /* notification to be sent */
- parsedMsg *argn_value;
- int value_count;
- } dt_notifyAttr;
- #endif /* _DT_ALLOW_DT_MSGS */
- typedef struct {
- DtShmBoson action; /* Might just use a char * here? */
- DtDbPathId file_name_id; /* id of file wherein the action is defined */
- char *label; /* localizable action label string */
- char *description;
- DtShmBoson *arg_types;
- int type_count;
- int arg_count; /* Number of arguments accepted by the action */
- unsigned long mask; /* action mask -- class/type/arg info */
- union { /* attributes for the different action kinds */
- cmdAttr cmd;
- mapAttr map;
- tt_msgAttr tt_msg;
- #ifdef _DT_ALLOW_DT_MSGS
- dt_reqAttr dt_req;
- dt_notifyAttr dt_notify;
- #endif /* _DT_ALLOW_DT_MSGS */
- } u;
- } Action, *ActionPtr; /* new action structure and pointer */
- /* Structure used to hold each of the object components */
- typedef struct {
- char * origFilename;
- char * baseFilename;
- char * origHostname;
- int hostIndex;
- int dirIndex;
- void * bp; /* pointer to original buffer -- tmp files only */
- int sizebp; /* size of original buf -- for tmp files only */
- } fileAttr;
-
- typedef struct {
- char * string;
- } stringAttr;
-
- typedef struct {
- int size;
- void *bp;
- } bufferAttr;
-
-
- typedef struct {
- DtShmBoson type;
- unsigned long mask;
- union {
- fileAttr file;
- stringAttr string;
- bufferAttr buffer;
- } u;
- } ObjectData;
- /*
- * Structure attached to the button callbacks in the
- * dialog used to collect missing parameters.
- *
- */
- typedef struct {
- char *actionName;
- int objOffset;
- int objsUsed;
- int numObjects;
- ObjectData *objects;
- int numPromptInputs;
- char **promptInputs;
- int numHostNames;
- char **hostNames;
- int numDirNames;
- char **dirNames;
- char *termOpts;
- char *cwdHost;
- char *cwdDir;
- ActionPtr clonedAction;
- unsigned long mask;
- char *badHostList;
- char *currentHost;
- int hostIndex;
- char *execHost;
- DtActionInvocationID invocId;
- unsigned long childId;
- } ActionRequest;
- /******************************************************************************
- *
- * Structs used to maintain information on invoked actions until they
- * exit. A few select elements of the ActionRequest and Action structs
- * will be copied into these strcuts.
- *
- *****************************************************************************/
- /******************************************************************************
- ******************************************************************************
- **
- ** Major data-structure diagram for the DtAction invocation layer:
- **
- ** _DtActInvRec <=== _DtActInvRecArray[ actInvRecArraySize ]
- ** ------------------
- ** | info per |
- ** | DtActionInvoke |
- ** |----------------|
- ** | numChildren |
- ** |----------------|
- ** | childRecs[] | ===> _DtActChildRec
- ** ------------------ ------------------
- ** | info per |
- ** | child request |
- ** |----------------|
- ** | *request | ===> ActionRequest
- ** ------------------ ------------------
- ** | info on users |
- ** | action request |
- ** |----------------|
- ** Action <=== | *clonedAction |
- ** ------------------ ------------------
- ** |info on matching|
- ** | actionDB entry |
- ** |----------------|
- ** | cmd/map/tt/dt |
- ** | attributes of |
- ** | resulting msg |
- ** ------------------
- **
- ** "ActionRequest" and "Action" were present in VUE 3.0, and have a
- ** scratch-pad like function within DtActionInvoke() to get actions
- ** started. They are not good long-term retainers of information.
- ** Action and ActionRequest are in fact freed when DtActionInvoke()
- ** exits.
- **
- ** "_DtActInvRec" and "_DtActChildRec" have been introduced to retain
- ** information for the entire life of the actions. Some of the
- ** information from ActionRequest and Action will be copied (mirrored)
- ** up to these structures.
- **
- ******************************************************************************
- *****************************************************************************/
- /******************************************************************************
- *
- * Child Status Macro Definitions -- These values are used in
- * the status word of the _DtActChildRec child record.
- *
- * ****** IMPORTANT NOTE *** IMPORTANT NOTE *** IMPORTANT NOTE ******
- *
- * The _DtActCHILD_ macros are also used in cde1/dtexec/Main.c
- * in the _DtActDtexecDone(Request) message, so in effect they
- * are also protocol constants that should *never* be changed.
- * If changed, libDtSvc and dtexec may mis-communicate status.
- *
- *****************************************************************************/
- #define _DtActCHILD_UNKNOWN (1<<0) /* 1 - child status unknown */
- #define _DtActCHILD_PENDING_START (1<<1) /* 2 - child start pending */
- #define _DtActCHILD_ALIVE_UNKNOWN (1<<2) /* 4 - child alive but unknown*/
- #define _DtActCHILD_ALIVE (1<<3) /* 8 - child alive and well */
- #define _DtActCHILD_DONE (1<<4) /* 16 - child done */
- #define _DtActCHILD_FAILED (1<<5) /* 32 - child failed */
- #define _DtActCHILD_CANCELED (1<<6) /* 64 - child canceled */
- #define _DtActCHILD_DONE_BITS ( (_DtActCHILD_DONE) | \
- (_DtActCHILD_FAILED) | \
- (_DtActCHILD_CANCELED) )
- /*** IMPORTANT NOTE ABOVE *** IMPORTANT NOTE ABOVE *** IMPORTANT NOTE ABOVE ***/
- #define ARE_CHILDREN_DONE(mask) ( (mask) & _DtActCHILD_DONE_BITS )
- #define IS_CHILD_UNKNOWN(mask) ( (mask) == _DtActCHILD_UNKNOWN )
- #define IS_CHILD_PENDING_START(mask) ( (mask) & _DtActCHILD_PENDING_START )
- #define IS_CHILD_DONE(mask) ( (mask) & _DtActCHILD_DONE)
- #define IS_CHILD_FAILED(mask) ( (mask) & _DtActCHILD_FAILED)
- #define IS_CHILD_CANCELED(mask) ( (mask) & _DtActCHILD_CANCELED)
- #define IS_CHILD_ALIVE(mask) ( (mask) & _DtActCHILD_ALIVE)
- #define IS_CHILD_ALIVE_UNKOWN(mask) ( (mask) & _DtActCHILD_ALIVE_UNKNOWN)
- /******************************************************************************
- *
- * Information per child of DtActionInvoke()
- *
- *****************************************************************************/
- /*
- * Structure useed to map returnable arguments to the child argument list.
- */
- typedef struct {
- int argN; /* Nth returned value (0 based for tooltalk) */
- int argIdx; /* Nth child argument */
- } _DtActArgMap;
- typedef struct {
- unsigned long childId; /* serial # with DtActInvId */
- unsigned long childState; /* child state */
- /*
- * Information cloned from "ActionRequest *req"
- */
- int numObjects; /* number of child args */
- _DtActArgMap *argMap; /* map of returnable args to chd args */
- /*
- * Information cloned from "ActionPtr clonedAction"
- */
- unsigned long mask; /* action type - IS_xxx() */
- /* a list of tmp file names 5/11/94 --tomg */
- union {
- struct { /* COMMAND elements */
- char *TTProcId; /* TT procID handle to child */
- Tt_message reqMessage; /* Initiator TT Request */
- Tt_pattern magic_cookie; /* dtexec to libDtSvc cookie */
- } cmd;
- struct { /* TT_MSG elements */
- char *TTProcId; /* TT procID handle to child */
- Tt_message reqMessage; /* Initiator TT Request */
- int isTtMedia; /* handled by ttmedia_load ? */
- Tttk_op TtMediaOp; /* if ttmedia_load, the op */
- Tt_pattern *subConPats; /* for subcontract_manage */
- } tt;
- } u;
- } _DtActChildRecT;
- /******************************************************************************
- *
- * Invocation Status Macro Definitions -- These values are used in
- * the state word of the _DtActInvRec invocation record.
- *
- *****************************************************************************/
- #define _DtActINV_UNKNOWN 0 /* unknown invocation status */
- #define _DtActINV_ERROR (1<<0) /* invocation error detected */
- #define _DtActINV_CANCEL (1<<1) /* trying to cancel invocation*/
- #define _DtActINV_PENDING (1<<2) /* invocation pending */
- #define _DtActINV_WORKING (1<<3) /* invocation in process */
- #define _DtActINV_DONE (1<<4) /* invocation step done */
- #define _DtActINV_COMPLETE (1<<5) /* invocation steps all done */
- #define _DtActINV_CB_CALLED (1<<6) /* invocation callback called */
- #define _DtActINV_ID_RETURNED (1<<7) /* invocation id has returned */
- #define _DtActINV_CMD_QUEUED (1<<8) /* command has been queued */
- #define _DtActINV_INDICATOR_ON (1<<9) /* busy indicator active bit */
- #define SET_INV_UNKNOWN(mask) (mask = 0)
- #define SET_INV_ERROR(mask) (mask |= _DtActINV_ERROR)
- #define SET_INV_CANCEL(mask) (mask |= _DtActINV_CANCEL)
- #define SET_INV_PENDING(mask) (mask |= _DtActINV_PENDING)
- #define SET_INV_WORKING(mask) (mask |= _DtActINV_WORKING)
- #define SET_INV_DONE(mask) (mask |= _DtActINV_DONE)
- #define SET_INV_COMPLETE(mask) (mask |= _DtActINV_COMPLETE)
- #define SET_INV_CB_CALLED(mask) (mask |= _DtActINV_CB_CALLED)
- #define SET_INV_ID_RETURNED(mask) (mask |= _DtActINV_ID_RETURNED)
- #define SET_INV_CMD_QUEUED(mask) (mask |= _DtActINV_CMD_QUEUED)
- #define SET_INV_INDICATOR_ON(mask) (mask |= _DtActINV_INDICATOR_ON)
- #define RESET_INV_ERROR(mask) (mask &= ~(_DtActINV_ERROR))
- #define RESET_INV_CANCEL(mask) (mask &= ~(_DtActINV_CANCEL))
- #define RESET_INV_PENDING(mask) (mask &= ~(_DtActINV_PENDING))
- #define RESET_INV_WORKING(mask) (mask &= ~(_DtActINV_WORKING))
- #define RESET_INV_COMPLETE(mask) (mask &= ~(_DtActINV_COMPLETE))
- #define RESET_INV_DONE(mask) (mask &= ~(_DtActINV_DONE))
- #define RESET_INV_CB_CALLED(mask) (mask &= ~(_DtActINV_CB_CALLED))
- #define RESET_INV_ID_RETURNED(mask) (mask &= ~(_DtActINV_ID_RETURNED))
- #define RESET_INV_CMD_QUEUED(mask) (mask &= ~(_DtActINV_CMD_QUEUED))
- #define RESET_INV_INDICATOR_ON(mask) (mask &= ~(_DtActINV_INDICATOR_ON))
- #define IS_INV_FINISHED(mask) ( !((mask) & _DtActINV_CMD_QUEUED) \
- && ((mask) & (_DtActINV_COMPLETE \
- | _DtActINV_CANCEL)) )
- #define IS_INV_UNKNOWN(mask) ( (mask) == _DtActINV_UNKNOWN )
- #define IS_INV_ERROR(mask) ((mask) & _DtActINV_ERROR )
- #define IS_INV_CANCEL(mask) ((mask) & _DtActINV_CANCEL )
- #define IS_INV_PENDING(mask) ((mask) & _DtActINV_PENDING )
- #define IS_INV_WORKING(mask) ((mask) & _DtActINV_WORKING )
- #define IS_INV_DONE(mask) ((mask) & _DtActINV_DONE )
- #define IS_INV_COMPLETE(mask) ((mask) & _DtActINV_COMPLETE )
- #define IS_INV_CB_CALLED(mask) ((mask) & _DtActINV_CB_CALLED )
- #define IS_INV_ID_RETURNED(mask) ((mask) & _DtActINV_ID_RETURNED )
- #define IS_INV_CMD_QUEUED(mask) ((mask) & _DtActINV_CMD_QUEUED )
- #define IS_INV_INDICATOR_ON(mask) ((mask) & _DtActINV_INDICATOR_ON )
- #define CALL_INV_CB(mask) ((IS_INV_FINISHED(mask)) && \
- (IS_INV_ID_RETURNED(mask)) && \
- !(IS_INV_CB_CALLED(mask)))
- /******************************************************************************
- *
- * Information per DtActionInvoke()
- *
- * Note: For TT_MSG(NOTICE)'s during CDE 1.0, this struct will disappear
- * immediately after the NOTICEs are sent.
- *
- *****************************************************************************/
- typedef struct {
- unsigned long mask; /* encodes object class and writable flag */
- int size; /* original size (buffers only) */
- char *type; /* original type (buffers only) */
- char *name; /* encodes (tmp) file name associated with the
- object (if any) */
- } _DtActArgInfo;
- typedef struct {
- DtActionStatus userStatus;
- DtActionArg *newArgp;
- int newArgc;
- } _DtActUpdateCache;
- typedef struct _DtActInvRec {
- unsigned long state; /* invocation state */
- DtActionInvocationID id; /* identifying invocation ID */
- Widget w; /* users widget id */
- DtActionCallbackProc cb; /* users callback */
- XtPointer client_data; /* users client data for cb */
- _DtActArgInfo *info; /* template w/ .argClass info */
- int ac; /* original # of arguments */
- int numChildren; /* number of childRec's. */
- _DtActChildRecT **childRec; /* array of child Rec's */
- int cachedUploadCnt;/* cached callback updates */
- _DtActUpdateCache *cachedUploads; /* data for */
- } _DtActInvRecT;
- /******************************************************************************
- *
- * Structs for dialogs/prompts
- *
- *****************************************************************************/
- /* Structure used to hold a prompt string destined for a dialog */
- typedef struct {
- int argIndex;
- char *prompt;
- } PromptEntry;
- /* Structure used to contain prompt dialog information */
- typedef struct {
- int argIndex;
- Widget promptWidget;
- } DialogPromptEntry;
- typedef struct {
- ActionRequest * request;
- Widget topLevel;
- Widget associatedWidget;
- int numPrompts;
- DialogPromptEntry * prompts;
- } PromptDialog;
- /* Structure used to contain abort/continue dialog information */
- typedef struct {
- ActionRequest * request;
- Widget topLevel;
- Widget associatedWidget;
- int numPrompts;
- PromptEntry * prompts;
- } ContinueDialog;
- /* Structure passed to request passed/failed callbacks */
- typedef struct {
- Widget associatedWidget;
- char *actionLabel;
- int offset;
- ActionPtr actionPtr; /* Ptr to the action that
- was invoked. */
- ActionRequest *requestPtr;
- DtActionInvocationID actInvId; /* A standard invocation id */
- unsigned long childId; /* An id to further identify
- children of actInvId */
- } CallbackData;
- /******************************************************************************
- *
- * Private External Function Declarations -- not for public consumption
- *
- ******************************************************************************/
- extern void _DtFreeActionStruct( ActionPtr action) ;
- #endif /* _ActionP_h */
- /* DON'T ADD ANYTHING AFTER THIS #endif */
|