]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - c++/cursesmain.cc
ncurses 6.2 - patch 20200404
[ncurses.git] / c++ / cursesmain.cc
index 7382600b986bd7db982d77d5c90b793d89bb71da..9c11c9932638d51d349acbb6d98be6ca4c5358f4 100644 (file)
@@ -1,6 +1,7 @@
 // * this is for making emacs happy: -*-Mode: C++;-*-
 /****************************************************************************
- * Copyright (c) 1998-2003,2007 Free Software Foundation, Inc.              *
+ * Copyright 2019,2020 Thomas E. Dickey                                     *
+ * Copyright 1998-2007,2013 Free Software Foundation, Inc.                  *
  *                                                                          *
  * Permission is hereby granted, free of charge, to any person obtaining a  *
  * copy of this software and associated documentation files (the            *
 #include "internal.h"
 #include "cursesapp.h"
 
-MODULE_ID("$Id: cursesmain.cc,v 1.13 2007/01/27 20:29:27 tom Exp $")
+#if CPP_HAS_TRY_CATCH && HAVE_IOSTREAM
+#pragma GCC diagnostic ignored "-Weffc++"
+#include <iostream>
+#pragma GCC diagnostic warning "-Weffc++"
+#else
+#undef CPP_HAS_TRY_CATCH
+#define CPP_HAS_TRY_CATCH 0
+#endif
+
+MODULE_ID("$Id: cursesmain.cc,v 1.18 2020/04/04 23:25:34 tom Exp $")
 
 #if HAVE_LOCALE_H
 #include <locale.h>
@@ -50,7 +60,7 @@ MODULE_ID("$Id: cursesmain.cc,v 1.13 2007/01/27 20:29:27 tom Exp $")
  * You only have to instantiate a static NCursesApplication object in your
  * main application source file and link this module with your application.
  */
-int main(int argc, char* argv[])
+NCURSES_EXPORT(int) main(int argc, char* argv[])
 {
   setlocale(LC_ALL, "");
 
@@ -62,11 +72,23 @@ int main(int argc, char* argv[])
 
     A->handleArgs(argc,argv);
     ::endwin();
+#if CPP_HAS_TRY_CATCH
+    try {
+      res = (*A)();
+      ::endwin();
+    }
+    catch(const NCursesException &e) {
+      ::endwin();
+      std::cerr << e.message << std::endl;
+      res = e.errorno;
+    }
+#else
     res = (*A)();
     ::endwin();
+#endif
 #if NO_LEAKS
     delete A;
-    _nc_free_and_exit(res);
+    exit_curses(res);
 #else
     return(res);
 #endif