summaryrefslogtreecommitdiff
path: root/generic/Main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'generic/Main.cpp')
-rw-r--r--generic/Main.cpp45
1 files changed, 45 insertions, 0 deletions
diff --git a/generic/Main.cpp b/generic/Main.cpp
new file mode 100644
index 0000000..774cf08
--- /dev/null
+++ b/generic/Main.cpp
@@ -0,0 +1,45 @@
+#include "Main.h"
+#include "generic.h"
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+Main::Main() : setted(false) {}
+
+Main::~Main() {}
+
+extern Main * Application;
+
+void Main::set_args(int a_argc, char ** a_argv, char ** a_enve) {
+ if (setted) {
+ return;
+ }
+ argc = a_argc;
+ argv = a_argv;
+ enve = a_enve;
+ setted = true;
+}
+
+int main(int argc, char ** argv, char ** enve) {
+ int r;
+
+ try {
+ Application->set_args(argc, argv, enve);
+ r = Application->startup();
+ }
+ catch (Exit e) {
+ r = e.GetCode();
+ }
+ catch (GeneralException e) {
+ printm(M_ERROR, "The application caused an exception: %s\n", e.GetMsg());
+ delete Application;
+ exit(-1);
+ }
+ catch (...) {
+ printm(M_ERROR, "The application caused an unknow exception\n");
+ delete Application;
+ exit(-1);
+ }
+ delete Application;
+ exit(r);
+}