| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| |
| |
| |
|
|
| |
|
|
| #ifndef NCURSES_ETIP_H_incl |
| #define NCURSES_ETIP_H_incl 1 |
|
|
| |
| #ifndef HAVE_BUILTIN_H |
| #define HAVE_BUILTIN_H 0 |
| #endif |
|
|
| #ifndef HAVE_GXX_BUILTIN_H |
| #define HAVE_GXX_BUILTIN_H 0 |
| #endif |
|
|
| #ifndef HAVE_GPP_BUILTIN_H |
| #define HAVE_GPP_BUILTIN_H 0 |
| #endif |
|
|
| #ifndef HAVE_IOSTREAM |
| #define HAVE_IOSTREAM 1 |
| #endif |
|
|
| #ifndef HAVE_TYPEINFO |
| #define HAVE_TYPEINFO 1 |
| #endif |
|
|
| #ifndef HAVE_VALUES_H |
| #define HAVE_VALUES_H 0 |
| #endif |
|
|
| #ifndef ETIP_NEEDS_MATH_H |
| #define ETIP_NEEDS_MATH_H 0 |
| #endif |
|
|
| #ifndef ETIP_NEEDS_MATH_EXCEPTION |
| #define ETIP_NEEDS_MATH_EXCEPTION 0 |
| #endif |
|
|
| #ifndef CPP_HAS_OVERRIDE |
| #define CPP_HAS_OVERRIDE 0 |
| #endif |
|
|
| #ifndef CPP_HAS_PARAM_INIT |
| #define CPP_HAS_PARAM_INIT 0 |
| #endif |
|
|
| #ifndef CPP_HAS_STATIC_CAST |
| #define CPP_HAS_STATIC_CAST 1 |
| #endif |
|
|
| #ifndef IOSTREAM_NAMESPACE |
| #define IOSTREAM_NAMESPACE 1 |
| #endif |
|
|
| #ifdef __GNUG__ |
| # if ((__GNUG__ <= 2) && (__GNUC_MINOR__ < 8)) |
| # if HAVE_TYPEINFO |
| # include <typeinfo> |
| # endif |
| # endif |
| #endif |
|
|
| #if defined(__GNUG__) |
| # if HAVE_BUILTIN_H || HAVE_GXX_BUILTIN_H || HAVE_GPP_BUILTIN_H |
| # if ETIP_NEEDS_MATH_H |
| # if ETIP_NEEDS_MATH_EXCEPTION |
| # undef exception |
| # define exception math_exception |
| # endif |
| # include <math.h> |
| # endif |
| # undef exception |
| # define exception builtin_exception |
| # if HAVE_GPP_BUILTIN_H |
| # include <gpp/builtin.h> |
| # elif HAVE_GXX_BUILTIN_H |
| # include <g++/builtin.h> |
| # else |
| # include <builtin.h> |
| # endif |
| # undef exception |
| # endif |
| #elif defined (__SUNPRO_CC) |
| # include <generic.h> |
| #endif |
|
|
| #include <ncursesw/curses.h> |
|
|
| extern "C" { |
| #if HAVE_VALUES_H |
| # include <values.h> |
| #endif |
|
|
| #include <assert.h> |
| #include <ncursesw/eti.h> |
| #include <errno.h> |
| } |
|
|
| |
| #if CPP_HAS_OVERRIDE |
| #define NCURSES_OVERRIDE override |
| #else |
| #define NCURSES_OVERRIDE |
| #endif |
|
|
| #if CPP_HAS_PARAM_INIT |
| #define NCURSES_PARAM_INIT(value) = value |
| #else |
| #define NCURSES_PARAM_INIT(value) |
| #endif |
|
|
| #if CPP_HAS_STATIC_CAST |
| #define STATIC_CAST(s) static_cast<s> |
| #else |
| #define STATIC_CAST(s) (s) |
| #endif |
|
|
| #ifndef NCURSES_CXX_IMPEXP |
| #define NCURSES_CXX_IMPEXP |
| #endif |
|
|
| |
| class NCURSES_CXX_IMPEXP NCursesPanel; |
| class NCURSES_CXX_IMPEXP NCursesMenu; |
| class NCURSES_CXX_IMPEXP NCursesForm; |
|
|
| class NCURSES_CXX_IMPEXP NCursesException |
| { |
| public: |
| const char *message; |
| int errorno; |
|
|
| NCursesException (const char* msg, int err) |
| : message(msg), errorno (err) |
| {}; |
|
|
| explicit NCursesException (const char* msg) |
| : message(msg), errorno (E_SYSTEM_ERROR) |
| {}; |
|
|
| NCursesException& operator=(const NCursesException& rhs) |
| { |
| message = rhs.message; |
| errorno = rhs.errorno; |
| return *this; |
| } |
|
|
| NCursesException(const NCursesException& rhs) |
| : message(rhs.message), errorno(rhs.errorno) |
| { |
| } |
|
|
| virtual const char *classname() const { |
| return "NCursesWindow"; |
| } |
|
|
| virtual ~NCursesException() |
| { |
| } |
| }; |
|
|
| class NCURSES_CXX_IMPEXP NCursesPanelException : public NCursesException |
| { |
| public: |
| const NCursesPanel* p; |
|
|
| NCursesPanelException (const char *msg, int err) : |
| NCursesException (msg, err), |
| p (0) |
| {}; |
|
|
| NCursesPanelException (const NCursesPanel* panel, |
| const char *msg, |
| int err) : |
| NCursesException (msg, err), |
| p (panel) |
| {}; |
|
|
| explicit NCursesPanelException (int err) : |
| NCursesException ("panel library error", err), |
| p (0) |
| {}; |
|
|
| NCursesPanelException (const NCursesPanel* panel, |
| int err) : |
| NCursesException ("panel library error", err), |
| p (panel) |
| {}; |
|
|
| NCursesPanelException& operator=(const NCursesPanelException& rhs) |
| { |
| if (this != &rhs) { |
| NCursesException::operator=(rhs); |
| p = rhs.p; |
| } |
| return *this; |
| } |
|
|
| NCursesPanelException(const NCursesPanelException& rhs) |
| : NCursesException(rhs), p(rhs.p) |
| { |
| } |
|
|
| virtual const char *classname() const NCURSES_OVERRIDE { |
| return "NCursesPanel"; |
| } |
|
|
| virtual ~NCursesPanelException() |
| { |
| } |
| }; |
|
|
| class NCURSES_CXX_IMPEXP NCursesMenuException : public NCursesException |
| { |
| public: |
| const NCursesMenu* m; |
|
|
| NCursesMenuException (const char *msg, int err) : |
| NCursesException (msg, err), |
| m (0) |
| {}; |
|
|
| NCursesMenuException (const NCursesMenu* menu, |
| const char *msg, |
| int err) : |
| NCursesException (msg, err), |
| m (menu) |
| {}; |
|
|
| explicit NCursesMenuException (int err) : |
| NCursesException ("menu library error", err), |
| m (0) |
| {}; |
|
|
| NCursesMenuException (const NCursesMenu* menu, |
| int err) : |
| NCursesException ("menu library error", err), |
| m (menu) |
| {}; |
|
|
| NCursesMenuException& operator=(const NCursesMenuException& rhs) |
| { |
| if (this != &rhs) { |
| NCursesException::operator=(rhs); |
| m = rhs.m; |
| } |
| return *this; |
| } |
|
|
| NCursesMenuException(const NCursesMenuException& rhs) |
| : NCursesException(rhs), m(rhs.m) |
| { |
| } |
|
|
| virtual const char *classname() const NCURSES_OVERRIDE { |
| return "NCursesMenu"; |
| } |
|
|
| virtual ~NCursesMenuException() |
| { |
| } |
| }; |
|
|
| class NCURSES_CXX_IMPEXP NCursesFormException : public NCursesException |
| { |
| public: |
| const NCursesForm* f; |
|
|
| NCursesFormException (const char *msg, int err) : |
| NCursesException (msg, err), |
| f (0) |
| {}; |
|
|
| NCursesFormException (const NCursesForm* form, |
| const char *msg, |
| int err) : |
| NCursesException (msg, err), |
| f (form) |
| {}; |
|
|
| explicit NCursesFormException (int err) : |
| NCursesException ("form library error", err), |
| f (0) |
| {}; |
|
|
| NCursesFormException (const NCursesForm* form, |
| int err) : |
| NCursesException ("form library error", err), |
| f (form) |
| {}; |
|
|
| NCursesFormException& operator=(const NCursesFormException& rhs) |
| { |
| if (this != &rhs) { |
| NCursesException::operator=(rhs); |
| f = rhs.f; |
| } |
| return *this; |
| } |
|
|
| NCursesFormException(const NCursesFormException& rhs) |
| : NCursesException(rhs), f(rhs.f) |
| { |
| } |
|
|
| virtual const char *classname() const NCURSES_OVERRIDE { |
| return "NCursesForm"; |
| } |
|
|
| virtual ~NCursesFormException() |
| { |
| } |
| }; |
|
|
| #if !((defined(__GNUG__) && defined(__EXCEPTIONS) && (__GNUG__ < 7)) || defined(__SUNPRO_CC)) |
| # if HAVE_IOSTREAM |
| # include <iostream> |
| # if IOSTREAM_NAMESPACE |
| using std::cerr; |
| using std::endl; |
| # endif |
| # else |
| # include <iostream.h> |
| # endif |
| #endif |
|
|
| inline void THROW(const NCursesException *e) { |
| #if defined(__GNUG__) && defined(__EXCEPTIONS) |
| # if ((__GNUG__ <= 2) && (__GNUC_MINOR__ < 8)) |
| (*lib_error_handler)(e ? e->classname() : "", e ? e->message : ""); |
| # elif (__GNUG__ >= 7) |
| |
| ::endwin(); |
| std::cerr << "Found a problem - goodbye" << std::endl; |
| exit(EXIT_FAILURE); |
| # else |
| # define CPP_HAS_TRY_CATCH 1 |
| # endif |
| #elif defined(__SUNPRO_CC) |
| # if !defined(__SUNPRO_CC_COMPAT) || (__SUNPRO_CC_COMPAT < 5) |
| genericerror(1, ((e != 0) ? (char *)(e->message) : "")); |
| # else |
| # define CPP_HAS_TRY_CATCH 1 |
| # endif |
| #else |
| if (e) |
| cerr << e->message << endl; |
| exit(0); |
| #endif |
|
|
| #ifndef CPP_HAS_TRY_CATCH |
| #define CPP_HAS_TRY_CATCH 0 |
| #define NCURSES_CPP_TRY |
| #define NCURSES_CPP_CATCH(e) if (false) |
| #define THROWS(s) |
| #define THROW2(s,t) |
| #elif CPP_HAS_TRY_CATCH |
| throw *e; |
| #define NCURSES_CPP_TRY try |
| #define NCURSES_CPP_CATCH(e) catch(e) |
| #if defined(__cpp_noexcept_function_type) && (__cpp_noexcept_function_type >= 201510) |
| |
| #define THROWS(s) |
| #define THROW2(s,t) |
| #else |
| #define THROWS(s) throw(s) |
| #define THROW2(s,t) throw(s,t) |
| #endif |
| #endif |
| } |
|
|
| #endif |
|
|