// * this is for making emacs happy: -*-Mode: C++;-*-
/****************************************************************************
- * Copyright (c) 1998 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 *
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1997 *
+ * Author: Juergen Pfeifer, 1997 *
****************************************************************************/
-#include "cursesapp.h"
#include "internal.h"
+#include "cursesapp.h"
+
+#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.20 2020/07/18 19:57:11 anonymous.maarten Exp $")
-MODULE_ID("$Id: cursesmain.cc,v 1.5 1999/05/16 17:31:22 juergen Exp $")
+#if HAVE_LOCALE_H
+#include <locale.h>
+#else
+#define setlocale(name,string) /* nothing */
+#endif
+
+#if NO_LEAKS
+#include <nc_alloc.h>
+#endif
/* This is the default implementation of main() for a NCursesApplication.
* 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[])
+ */
+int NCURSES_CXX_MAIN_NAME(int argc, char* argv[])
{
+ setlocale(LC_ALL, "");
+
NCursesApplication* A = NCursesApplication::getApplication();
if (!A)
return(1);
- A->handleArgs(argc,argv);
- ::endwin();
- return((*A)());
+ else {
+ int res;
+
+ 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;
+ exit_curses(res);
+#else
+ return(res);
+#endif
+ }
}