ARB
xcmd.hxx
Go to the documentation of this file.
1 // ========================================================= //
2 // //
3 // File : xcmd.hxx //
4 // Purpose : support to run commands in (x)terminal //
5 // //
6 // Coded by Ralf Westram (coder@reallysoft.de) in Sep 25 //
7 // http://www.arb-home.de/ //
8 // //
9 // ========================================================= //
10 
11 #ifndef XCMD_HXX
12 #define XCMD_HXX
13 
14 #ifndef ARBDB_BASE_H
15 #include <arbdb_base.h>
16 #endif
17 #ifndef AW_BASE_HXX
18 #include <aw_base.hxx>
19 #endif
20 
21 enum XCMD_TYPE {
22  // internal (do not use; use public values below):
23  _XCMD__ASYNC = 1, // run asynchronously (otherwise wait until command finishes).
24  _XCMD__WAITKEY = 2, // after command always wait for keypress (otherwise only in case of error!).
25  _XCMD__ACCESS_DB = 4, // command may access database.
26  _XCMD__HIDDEN = 8, // do not run in terminal window (never waits for key)
27 
28  // rest is public ----------------------------------------
29 
30  // the XCMD_ASYNC_... types do not block the database server, but also do not wait for the tool to finish.
31  // Has to be used if window shall remain open with command running continously (e.g. to tail a log).
35 
36  // Important note: the XCMD_SYNC_... types block the database server, if started from there.
37  // I.e. they are normally critical esp. in arb_ntree, which normally runs as server.
38  // This means: if the started tool tries to access the served database,
39  // it will not be able to do so (effectively causes a deadlock!)
40  // Use of XCMD_SYNC_...-modes is not recommended, unless you really know what you are doing!
44 
45  // the XCMD_SERVSYNC_... types do not block the database server, but wait until the command finishes.
46  //
47  // This is a compromise between the XCMD_SERVSYNC_...- and XCMD_ASYNC_...-modes, which uses the database
48  // to synchronise between running command and its caller (arb) w/o blocking communication between them.
52 };
53 
54 class XCmdType {
55  XCMD_TYPE type;
56  GBDATA *gb_main;
57 
58 public:
59  XCmdType(XCMD_TYPE type_, GBDATA *gb_main_)
60  : type(type_) , gb_main(gb_main_)
61  {}
62 
63  XCMD_TYPE get_type() const { return type; }
64  GBDATA *get_gb_main() const { return gb_main; }
65 };
66 
67 GB_ERROR ARB_system(const char *cmd, XCmdType boundExectype);
68 
69 // ---------------------------------------- see also ../../AWT/awt_misc.hxx@SHELL_INTERFACE
70 // system/shell interface (for GUI apps)
71 // Notes:
72 // - AW_window parameter is an unused callback-dummy)
73 
74 class XCmdType;
75 
76 void ARB_system_in_console_cb(AW_window*, const char *command, const XCmdType *exectype);
77 
78 // for direct calls use these:
79 inline void ARB_system_in_console(const char *command, const XCmdType& exectype) { ARB_system_in_console_cb(NULp, command, &exectype); }
80 
81 
82 #else
83 #error xcmd.hxx included twice
84 #endif // XCMD_HXX
const char * GB_ERROR
Definition: arb_core.h:25
void ARB_system_in_console(const char *command, const XCmdType &exectype)
Definition: xcmd.hxx:79
GB_ERROR ARB_system(const char *cmd, XCmdType boundExectype)
Definition: xcmd.cxx:69
void ARB_system_in_console_cb(AW_window *, const char *command, const XCmdType *exectype)
Definition: xcmd.cxx:183
XCmdType(XCMD_TYPE type_, GBDATA *gb_main_)
Definition: xcmd.hxx:59
#define NULp
Definition: cxxforward.h:116
static char * command
Definition: arb_a2ps.c:319
GBDATA * get_gb_main() const
Definition: xcmd.hxx:64
XCMD_TYPE get_type() const
Definition: xcmd.hxx:63
XCMD_TYPE
Definition: xcmd.hxx:21