Amit Daniel Kachhap | e6a01f5 | 2011-07-20 11:45:59 +0530 | [diff] [blame] | 1 | // * This makes emacs happy -*-Mode: C++;-*- |
| 2 | /**************************************************************************** |
Steve Kondik | ae271bc | 2015-11-15 02:50:53 +0100 | [diff] [blame] | 3 | * Copyright (c) 1998-2011,2012 Free Software Foundation, Inc. * |
Amit Daniel Kachhap | e6a01f5 | 2011-07-20 11:45:59 +0530 | [diff] [blame] | 4 | * * |
| 5 | * Permission is hereby granted, free of charge, to any person obtaining a * |
| 6 | * copy of this software and associated documentation files (the * |
| 7 | * "Software"), to deal in the Software without restriction, including * |
| 8 | * without limitation the rights to use, copy, modify, merge, publish, * |
| 9 | * distribute, distribute with modifications, sublicense, and/or sell * |
| 10 | * copies of the Software, and to permit persons to whom the Software is * |
| 11 | * furnished to do so, subject to the following conditions: * |
| 12 | * * |
| 13 | * The above copyright notice and this permission notice shall be included * |
| 14 | * in all copies or substantial portions of the Software. * |
| 15 | * * |
| 16 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * |
| 17 | * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * |
| 18 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * |
| 19 | * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * |
| 20 | * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * |
| 21 | * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * |
| 22 | * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * |
| 23 | * * |
| 24 | * Except as contained in this notice, the name(s) of the above copyright * |
| 25 | * holders shall not be used in advertising or otherwise to promote the * |
| 26 | * sale, use or other dealings in this Software without prior written * |
| 27 | * authorization. * |
| 28 | ****************************************************************************/ |
| 29 | |
| 30 | /**************************************************************************** |
| 31 | * Author: Juergen Pfeifer, 1997 * |
| 32 | ****************************************************************************/ |
| 33 | |
Steve Kondik | ae271bc | 2015-11-15 02:50:53 +0100 | [diff] [blame] | 34 | // $Id: etip.h.in,v 1.39 2012/12/29 21:50:44 tom Exp $ |
Amit Daniel Kachhap | e6a01f5 | 2011-07-20 11:45:59 +0530 | [diff] [blame] | 35 | |
| 36 | #ifndef NCURSES_ETIP_H_incl |
| 37 | #define NCURSES_ETIP_H_incl 1 |
| 38 | |
| 39 | // These are substituted at configure/build time |
| 40 | #ifndef HAVE_BUILTIN_H |
| 41 | #define HAVE_BUILTIN_H 0 |
| 42 | #endif |
| 43 | |
| 44 | #ifndef HAVE_GXX_BUILTIN_H |
| 45 | #define HAVE_GXX_BUILTIN_H 0 |
| 46 | #endif |
| 47 | |
| 48 | #ifndef HAVE_GPP_BUILTIN_H |
| 49 | #define HAVE_GPP_BUILTIN_H 0 |
| 50 | #endif |
| 51 | |
| 52 | #ifndef HAVE_IOSTREAM |
| 53 | #define HAVE_IOSTREAM 0 |
| 54 | #endif |
| 55 | |
| 56 | #ifndef HAVE_TYPEINFO |
| 57 | #define HAVE_TYPEINFO 0 |
| 58 | #endif |
| 59 | |
| 60 | #ifndef HAVE_VALUES_H |
| 61 | #define HAVE_VALUES_H 0 |
| 62 | #endif |
| 63 | |
| 64 | #ifndef ETIP_NEEDS_MATH_H |
| 65 | #define ETIP_NEEDS_MATH_H 0 |
| 66 | #endif |
| 67 | |
| 68 | #ifndef ETIP_NEEDS_MATH_EXCEPTION |
| 69 | #define ETIP_NEEDS_MATH_EXCEPTION 0 |
| 70 | #endif |
| 71 | |
| 72 | #ifndef CPP_HAS_PARAM_INIT |
| 73 | #define CPP_HAS_PARAM_INIT 0 |
| 74 | #endif |
| 75 | |
| 76 | #ifndef CPP_HAS_STATIC_CAST |
| 77 | #define CPP_HAS_STATIC_CAST 0 // workaround for g++ 2.95.3 |
| 78 | #endif |
| 79 | |
| 80 | #ifndef IOSTREAM_NAMESPACE |
| 81 | #define IOSTREAM_NAMESPACE 0 |
| 82 | #endif |
| 83 | |
| 84 | #ifdef __GNUG__ |
| 85 | # if ((__GNUG__ <= 2) && (__GNUC_MINOR__ < 8)) |
| 86 | # if HAVE_TYPEINFO |
| 87 | # include <typeinfo> |
| 88 | # endif |
| 89 | # endif |
| 90 | #endif |
| 91 | |
| 92 | #if defined(__GNUG__) |
| 93 | # if HAVE_BUILTIN_H || HAVE_GXX_BUILTIN_H || HAVE_GPP_BUILTIN_H |
| 94 | # if ETIP_NEEDS_MATH_H |
| 95 | # if ETIP_NEEDS_MATH_EXCEPTION |
| 96 | # undef exception |
| 97 | # define exception math_exception |
| 98 | # endif |
| 99 | # include <math.h> |
| 100 | # endif |
| 101 | # undef exception |
| 102 | # define exception builtin_exception |
| 103 | # if HAVE_GPP_BUILTIN_H |
| 104 | # include <gpp/builtin.h> |
| 105 | # elif HAVE_GXX_BUILTIN_H |
| 106 | # include <g++/builtin.h> |
| 107 | # else |
| 108 | # include <builtin.h> |
| 109 | # endif |
| 110 | # undef exception |
| 111 | # endif |
| 112 | #elif defined (__SUNPRO_CC) |
| 113 | # include <generic.h> |
| 114 | #endif |
| 115 | |
| 116 | #include <ncurses_dll.h> |
| 117 | |
| 118 | extern "C" { |
| 119 | #if HAVE_VALUES_H |
| 120 | # include <values.h> |
| 121 | #endif |
| 122 | |
| 123 | #include <assert.h> |
| 124 | #include <eti.h> |
| 125 | #include <errno.h> |
| 126 | } |
| 127 | |
| 128 | // Language features |
| 129 | #if CPP_HAS_PARAM_INIT |
| 130 | #define NCURSES_PARAM_INIT(value) = value |
| 131 | #else |
| 132 | #define NCURSES_PARAM_INIT(value) /*nothing*/ |
| 133 | #endif |
| 134 | |
| 135 | #if CPP_HAS_STATIC_CAST |
| 136 | #define STATIC_CAST(s) static_cast<s> |
| 137 | #else |
| 138 | #define STATIC_CAST(s) (s) |
| 139 | #endif |
| 140 | |
| 141 | // Forward Declarations |
| 142 | class NCURSES_IMPEXP NCursesPanel; |
| 143 | class NCURSES_IMPEXP NCursesMenu; |
| 144 | class NCURSES_IMPEXP NCursesForm; |
| 145 | |
| 146 | class NCURSES_IMPEXP NCursesException |
| 147 | { |
| 148 | public: |
| 149 | const char *message; |
| 150 | int errorno; |
| 151 | |
| 152 | NCursesException (const char* msg, int err) |
| 153 | : message(msg), errorno (err) |
| 154 | {}; |
| 155 | |
| 156 | NCursesException (const char* msg) |
| 157 | : message(msg), errorno (E_SYSTEM_ERROR) |
| 158 | {}; |
| 159 | |
| 160 | NCursesException& operator=(const NCursesException& rhs) |
| 161 | { |
| 162 | errorno = rhs.errorno; |
| 163 | return *this; |
| 164 | } |
| 165 | |
| 166 | NCursesException(const NCursesException& rhs) |
| 167 | : message(rhs.message), errorno(rhs.errorno) |
| 168 | { |
| 169 | } |
| 170 | |
| 171 | virtual const char *classname() const { |
| 172 | return "NCursesWindow"; |
| 173 | } |
| 174 | |
| 175 | virtual ~NCursesException() |
| 176 | { |
| 177 | } |
| 178 | }; |
| 179 | |
| 180 | class NCURSES_IMPEXP NCursesPanelException : public NCursesException |
| 181 | { |
| 182 | public: |
| 183 | const NCursesPanel* p; |
| 184 | |
| 185 | NCursesPanelException (const char *msg, int err) : |
| 186 | NCursesException (msg, err), |
Steve Kondik | ae271bc | 2015-11-15 02:50:53 +0100 | [diff] [blame] | 187 | p (0) |
Amit Daniel Kachhap | e6a01f5 | 2011-07-20 11:45:59 +0530 | [diff] [blame] | 188 | {}; |
| 189 | |
| 190 | NCursesPanelException (const NCursesPanel* panel, |
| 191 | const char *msg, |
| 192 | int err) : |
| 193 | NCursesException (msg, err), |
| 194 | p (panel) |
| 195 | {}; |
| 196 | |
| 197 | NCursesPanelException (int err) : |
| 198 | NCursesException ("panel library error", err), |
Steve Kondik | ae271bc | 2015-11-15 02:50:53 +0100 | [diff] [blame] | 199 | p (0) |
Amit Daniel Kachhap | e6a01f5 | 2011-07-20 11:45:59 +0530 | [diff] [blame] | 200 | {}; |
| 201 | |
| 202 | NCursesPanelException (const NCursesPanel* panel, |
| 203 | int err) : |
| 204 | NCursesException ("panel library error", err), |
| 205 | p (panel) |
| 206 | {}; |
| 207 | |
| 208 | NCursesPanelException& operator=(const NCursesPanelException& rhs) |
| 209 | { |
| 210 | if (this != &rhs) { |
| 211 | NCursesException::operator=(rhs); |
| 212 | p = rhs.p; |
| 213 | } |
| 214 | return *this; |
| 215 | } |
| 216 | |
| 217 | NCursesPanelException(const NCursesPanelException& rhs) |
| 218 | : NCursesException(rhs), p(rhs.p) |
| 219 | { |
| 220 | } |
| 221 | |
| 222 | virtual const char *classname() const { |
| 223 | return "NCursesPanel"; |
| 224 | } |
| 225 | |
| 226 | virtual ~NCursesPanelException() |
| 227 | { |
| 228 | } |
| 229 | }; |
| 230 | |
| 231 | class NCURSES_IMPEXP NCursesMenuException : public NCursesException |
| 232 | { |
| 233 | public: |
| 234 | const NCursesMenu* m; |
| 235 | |
| 236 | NCursesMenuException (const char *msg, int err) : |
| 237 | NCursesException (msg, err), |
Steve Kondik | ae271bc | 2015-11-15 02:50:53 +0100 | [diff] [blame] | 238 | m (0) |
Amit Daniel Kachhap | e6a01f5 | 2011-07-20 11:45:59 +0530 | [diff] [blame] | 239 | {}; |
| 240 | |
| 241 | NCursesMenuException (const NCursesMenu* menu, |
| 242 | const char *msg, |
| 243 | int err) : |
| 244 | NCursesException (msg, err), |
| 245 | m (menu) |
| 246 | {}; |
| 247 | |
| 248 | NCursesMenuException (int err) : |
| 249 | NCursesException ("menu library error", err), |
Steve Kondik | ae271bc | 2015-11-15 02:50:53 +0100 | [diff] [blame] | 250 | m (0) |
Amit Daniel Kachhap | e6a01f5 | 2011-07-20 11:45:59 +0530 | [diff] [blame] | 251 | {}; |
| 252 | |
| 253 | NCursesMenuException (const NCursesMenu* menu, |
| 254 | int err) : |
| 255 | NCursesException ("menu library error", err), |
| 256 | m (menu) |
| 257 | {}; |
| 258 | |
| 259 | NCursesMenuException& operator=(const NCursesMenuException& rhs) |
| 260 | { |
| 261 | if (this != &rhs) { |
| 262 | NCursesException::operator=(rhs); |
| 263 | m = rhs.m; |
| 264 | } |
| 265 | return *this; |
| 266 | } |
| 267 | |
| 268 | NCursesMenuException(const NCursesMenuException& rhs) |
| 269 | : NCursesException(rhs), m(rhs.m) |
| 270 | { |
| 271 | } |
| 272 | |
| 273 | virtual const char *classname() const { |
| 274 | return "NCursesMenu"; |
| 275 | } |
| 276 | |
| 277 | virtual ~NCursesMenuException() |
| 278 | { |
| 279 | } |
| 280 | }; |
| 281 | |
| 282 | class NCURSES_IMPEXP NCursesFormException : public NCursesException |
| 283 | { |
| 284 | public: |
| 285 | const NCursesForm* f; |
| 286 | |
| 287 | NCursesFormException (const char *msg, int err) : |
| 288 | NCursesException (msg, err), |
Steve Kondik | ae271bc | 2015-11-15 02:50:53 +0100 | [diff] [blame] | 289 | f (0) |
Amit Daniel Kachhap | e6a01f5 | 2011-07-20 11:45:59 +0530 | [diff] [blame] | 290 | {}; |
| 291 | |
| 292 | NCursesFormException (const NCursesForm* form, |
| 293 | const char *msg, |
| 294 | int err) : |
| 295 | NCursesException (msg, err), |
| 296 | f (form) |
| 297 | {}; |
| 298 | |
| 299 | NCursesFormException (int err) : |
| 300 | NCursesException ("form library error", err), |
Steve Kondik | ae271bc | 2015-11-15 02:50:53 +0100 | [diff] [blame] | 301 | f (0) |
Amit Daniel Kachhap | e6a01f5 | 2011-07-20 11:45:59 +0530 | [diff] [blame] | 302 | {}; |
| 303 | |
| 304 | NCursesFormException (const NCursesForm* form, |
| 305 | int err) : |
| 306 | NCursesException ("form library error", err), |
| 307 | f (form) |
| 308 | {}; |
| 309 | |
| 310 | NCursesFormException& operator=(const NCursesFormException& rhs) |
| 311 | { |
| 312 | if (this != &rhs) { |
| 313 | NCursesException::operator=(rhs); |
| 314 | f = rhs.f; |
| 315 | } |
| 316 | return *this; |
| 317 | } |
| 318 | |
| 319 | NCursesFormException(const NCursesFormException& rhs) |
| 320 | : NCursesException(rhs), f(rhs.f) |
| 321 | { |
| 322 | } |
| 323 | |
| 324 | virtual const char *classname() const { |
| 325 | return "NCursesForm"; |
| 326 | } |
| 327 | |
| 328 | virtual ~NCursesFormException() |
| 329 | { |
| 330 | } |
| 331 | }; |
| 332 | |
| 333 | #if !((defined(__GNUG__) && defined(__EXCEPTIONS)) || defined(__SUNPRO_CC)) |
| 334 | # if HAVE_IOSTREAM |
| 335 | # include <iostream> |
| 336 | # if IOSTREAM_NAMESPACE |
| 337 | using std::cerr; |
| 338 | using std::endl; |
| 339 | # endif |
| 340 | # else |
| 341 | # include <iostream.h> |
| 342 | # endif |
| 343 | extern "C" void exit(int); |
| 344 | #endif |
| 345 | |
| 346 | inline void THROW(const NCursesException *e) { |
| 347 | #if defined(__GNUG__) && defined(__EXCEPTIONS) |
| 348 | # if ((__GNUG__ <= 2) && (__GNUC_MINOR__ < 8)) |
| 349 | (*lib_error_handler)(e ? e->classname() : "", e ? e->message : ""); |
| 350 | #else |
| 351 | #define CPP_HAS_TRY_CATCH 1 |
| 352 | #endif |
| 353 | #elif defined(__SUNPRO_CC) |
| 354 | # if !defined(__SUNPRO_CC_COMPAT) || (__SUNPRO_CC_COMPAT < 5) |
| 355 | genericerror(1, ((e != 0) ? (char *)(e->message) : "")); |
| 356 | #else |
| 357 | #define CPP_HAS_TRY_CATCH 1 |
| 358 | #endif |
| 359 | #else |
| 360 | if (e) |
| 361 | cerr << e->message << endl; |
| 362 | exit(0); |
| 363 | #endif |
| 364 | |
| 365 | #ifndef CPP_HAS_TRY_CATCH |
| 366 | #define CPP_HAS_TRY_CATCH 0 |
| 367 | #define NCURSES_CPP_TRY /* nothing */ |
| 368 | #define NCURSES_CPP_CATCH(e) if (false) |
| 369 | #define THROWS(s) /* nothing */ |
Steve Kondik | ae271bc | 2015-11-15 02:50:53 +0100 | [diff] [blame] | 370 | #define THROW2(s,t) /* nothing */ |
Amit Daniel Kachhap | e6a01f5 | 2011-07-20 11:45:59 +0530 | [diff] [blame] | 371 | #elif CPP_HAS_TRY_CATCH |
| 372 | throw *e; |
| 373 | #define NCURSES_CPP_TRY try |
| 374 | #define NCURSES_CPP_CATCH(e) catch(e) |
| 375 | #define THROWS(s) throw(s) |
Steve Kondik | ae271bc | 2015-11-15 02:50:53 +0100 | [diff] [blame] | 376 | #define THROW2(s,t) throw(s,t) |
Amit Daniel Kachhap | e6a01f5 | 2011-07-20 11:45:59 +0530 | [diff] [blame] | 377 | #endif |
| 378 | } |
| 379 | |
| 380 | #endif /* NCURSES_ETIP_H_incl */ |