00001
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00033
00034 #ifndef GROOVX_TCL_SCRIPTAPP_H_UTC20050628162420_DEFINED
00035 #define GROOVX_TCL_SCRIPTAPP_H_UTC20050628162420_DEFINED
00036
00037 #include "rutz/fstring.h"
00038 #include "rutz/trace.h"
00039
00040 #include <exception>
00041 #include <tcl.h>
00042
00043 namespace tcl
00044 {
00045 class script_app;
00046
00047 struct package_info
00048 {
00049 const char* name;
00050 Tcl_PackageInitProc* init_proc;
00051 const char* version;
00052 bool requires_gui;
00053 };
00054 }
00055
00057 class tcl::script_app
00058 {
00059 public:
00060 script_app(const char* appname_, int argc_, char** argv_) throw();
00061 ~script_app() throw();
00062
00064
00065 void no_gui() { m_nowindow = true; }
00066
00068
00074 void splash(const char* msg) { m_splashmsg = msg; }
00075
00077 void pkg_dir(const char* dir) { m_pkgdir = dir; }
00078
00079 void packages(const package_info* pkgs_) { m_pkgs = pkgs_; }
00080
00081 void run();
00082
00083 int exit_status() const { return m_exitcode; }
00084
00085 static void init_in_macro_only();
00086
00087 static void handle_exception_in_macro_only(const std::exception* e);
00088
00089 private:
00090 script_app(const script_app&);
00091 script_app& operator=(const script_app&);
00092
00093 rutz::fstring const m_appname;
00094 int m_script_argc;
00095 char** m_script_argv;
00096 bool m_minimal;
00097 bool m_nowindow;
00098 rutz::fstring m_splashmsg;
00099 rutz::fstring m_pkgdir;
00100 const package_info* m_pkgs;
00101 int m_exitcode;
00102 };
00103
00105
00107 #define GVX_SCRIPT_PROG_BEGIN(app, name, argc, argv) \
00108 try \
00109 { \
00110 GVX_TRACE(name); \
00111 \
00112 tcl::script_app::init_in_macro_only(); \
00113 \
00114 tcl::script_app app(name, argc, argv);
00115
00116
00118 #define GVX_SCRIPT_PROG_END(app) \
00119 return app.exit_status(); \
00120 } \
00121 catch (std::exception& err) \
00122 { \
00123 tcl::script_app::handle_exception_in_macro_only(&err); \
00124 } \
00125 catch (...) \
00126 { \
00127 tcl::script_app::handle_exception_in_macro_only(0); \
00128 } \
00129 return -1;
00130
00131 static const char __attribute__((used)) vcid_groovx_tcl_scriptapp_h_utc20050628162420[] = "$Id: scriptapp.h 10065 2007-04-12 05:54:56Z rjpeters $ $HeadURL: file:
00132 #endif // !GROOVX_TCL_SCRIPTAPP_H_UTC20050628162420_DEFINED