# 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
# endif
# undef exception
# define exception builtin_exception
# if HAVE_GPP_BUILTIN_H
# include
# elif HAVE_GXX_BUILTIN_H
# include
# else
# include
# endif
# undef exception
# endif
#elif defined (__SUNPRO_CC)
# include
#endif
#include
extern "C" {
#if HAVE_VALUES_H
# include
#endif
#include
#include
#include
}
// Language features
#if CPP_HAS_PARAM_INIT
#define NCURSES_PARAM_INIT(value) = value
#else
#define NCURSES_PARAM_INIT(value) /*nothing*/
#endif
#if CPP_HAS_STATIC_CAST
#define STATIC_CAST(s) static_cast
#else
#define STATIC_CAST(s) (s)
#endif
// Forward Declarations
class NCURSES_IMPEXP NCursesPanel;
class NCURSES_IMPEXP NCursesMenu;
class NCURSES_IMPEXP NCursesForm;
class NCURSES_IMPEXP NCursesException
{
public:
const char *message;
int errorno;
NCursesException (const char* msg, int err)
: message(msg), errorno (err)
{};
NCursesException (const char* msg)
: message(msg), errorno (E_SYSTEM_ERROR)
{};
NCursesException& operator=(const NCursesException& rhs)
{
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_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)
{};
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 {
return "NCursesPanel";
}
virtual ~NCursesPanelException()
{
}
};
class NCURSES_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)
{};
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 {
return "NCursesMenu";
}
virtual ~NCursesMenuException()
{
}
};
class NCURSES_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)
{};
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 {
return "NCursesForm";
}
virtual ~NCursesFormException()
{
}
};
#if !((defined(__GNUG__) && defined(__EXCEPTIONS)) || defined(__SUNPRO_CC))
# if HAVE_IOSTREAM
# include
# if IOSTREAM_NAMESPACE
using std::cerr;
using std::endl;
# endif
# else
# include
# endif
extern "C" void exit(int);
#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 : "");
#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 /* nothing */
#define NCURSES_CPP_CATCH(e) if (false)
#define THROWS(s) /* nothing */
#define THROW2(s,t) /* nothing */
#elif CPP_HAS_TRY_CATCH
throw *e;
#define NCURSES_CPP_TRY try
#define NCURSES_CPP_CATCH(e) catch(e)
#define THROWS(s) throw(s)
#define THROW2(s,t) throw(s,t)
#endif
}
#endif /* NCURSES_ETIP_H_incl */