1// * This makes emacs happy -*-Mode: C++;-*- 2/**************************************************************************** 3 * Copyright (c) 1998-2005,2007 Free Software Foundation, Inc. * 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 34// $Id: etip.h.in,v 1.36 2007/04/07 18:56:32 tom Exp $ 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 1 54#endif 55 56#ifndef HAVE_TYPEINFO 57#define HAVE_TYPEINFO 1 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 1 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 1 78#endif 79 80#ifdef __GNUG__ 81# if ((__GNUG__ <= 2) && (__GNUC_MINOR__ < 8)) 82# if HAVE_TYPEINFO 83# include <typeinfo> 84# endif 85# endif 86#endif 87 88#if defined(__GNUG__) 89# if HAVE_BUILTIN_H || HAVE_GXX_BUILTIN_H || HAVE_GPP_BUILTIN_H 90# if ETIP_NEEDS_MATH_H 91# if ETIP_NEEDS_MATH_EXCEPTION 92# undef exception 93# define exception math_exception 94# endif 95# include <math.h> 96# endif 97# undef exception 98# define exception builtin_exception 99# if HAVE_GPP_BUILTIN_H 100# include <gpp/builtin.h> 101# elif HAVE_GXX_BUILTIN_H 102# include <g++/builtin.h> 103# else 104# include <builtin.h> 105# endif 106# undef exception 107# endif 108#elif defined (__SUNPRO_CC) 109# include <generic.h> 110#endif 111 112#include <ncurses_dll.h> 113 114extern "C" { 115#if HAVE_VALUES_H 116# include <values.h> 117#endif 118 119#include <assert.h> 120#include <eti.h> 121#include <errno.h> 122} 123 124// Language features 125#if CPP_HAS_PARAM_INIT 126#define NCURSES_PARAM_INIT(value) = value 127#else 128#define NCURSES_PARAM_INIT(value) /*nothing*/ 129#endif 130 131#if CPP_HAS_STATIC_CAST 132#define STATIC_CAST(s) static_cast<s> 133#else 134#define STATIC_CAST(s) (s) 135#endif 136 137// Forward Declarations 138class NCURSES_IMPEXP NCursesPanel; 139class NCURSES_IMPEXP NCursesMenu; 140class NCURSES_IMPEXP NCursesForm; 141 142class NCURSES_IMPEXP NCursesException 143{ 144public: 145 const char *message; 146 int errorno; 147 148 NCursesException (const char* msg, int err) 149 : message(msg), errorno (err) 150 {}; 151 152 NCursesException (const char* msg) 153 : message(msg), errorno (E_SYSTEM_ERROR) 154 {}; 155 156 NCursesException& operator=(const NCursesException& rhs) 157 { 158 errorno = rhs.errorno; 159 return *this; 160 } 161 162 NCursesException(const NCursesException& rhs) 163 : message(rhs.message), errorno(rhs.errorno) 164 { 165 } 166 167 virtual const char *classname() const { 168 return "NCursesWindow"; 169 } 170 171 virtual ~NCursesException() 172 { 173 } 174}; 175 176class NCURSES_IMPEXP NCursesPanelException : public NCursesException 177{ 178public: 179 const NCursesPanel* p; 180 181 NCursesPanelException (const char *msg, int err) : 182 NCursesException (msg, err), 183 p (NULL) 184 {}; 185 186 NCursesPanelException (const NCursesPanel* panel, 187 const char *msg, 188 int err) : 189 NCursesException (msg, err), 190 p (panel) 191 {}; 192 193 NCursesPanelException (int err) : 194 NCursesException ("panel library error", err), 195 p (NULL) 196 {}; 197 198 NCursesPanelException (const NCursesPanel* panel, 199 int err) : 200 NCursesException ("panel library error", err), 201 p (panel) 202 {}; 203 204 NCursesPanelException& operator=(const NCursesPanelException& rhs) 205 { 206 if (this != &rhs) { 207 NCursesException::operator=(rhs); 208 p = rhs.p; 209 } 210 return *this; 211 } 212 213 NCursesPanelException(const NCursesPanelException& rhs) 214 : NCursesException(rhs), p(rhs.p) 215 { 216 } 217 218 virtual const char *classname() const { 219 return "NCursesPanel"; 220 } 221 222 virtual ~NCursesPanelException() 223 { 224 } 225}; 226 227class NCURSES_IMPEXP NCursesMenuException : public NCursesException 228{ 229public: 230 const NCursesMenu* m; 231 232 NCursesMenuException (const char *msg, int err) : 233 NCursesException (msg, err), 234 m (NULL) 235 {}; 236 237 NCursesMenuException (const NCursesMenu* menu, 238 const char *msg, 239 int err) : 240 NCursesException (msg, err), 241 m (menu) 242 {}; 243 244 NCursesMenuException (int err) : 245 NCursesException ("menu library error", err), 246 m (NULL) 247 {}; 248 249 NCursesMenuException (const NCursesMenu* menu, 250 int err) : 251 NCursesException ("menu library error", err), 252 m (menu) 253 {}; 254 255 NCursesMenuException& operator=(const NCursesMenuException& rhs) 256 { 257 if (this != &rhs) { 258 NCursesException::operator=(rhs); 259 m = rhs.m; 260 } 261 return *this; 262 } 263 264 NCursesMenuException(const NCursesMenuException& rhs) 265 : NCursesException(rhs), m(rhs.m) 266 { 267 } 268 269 virtual const char *classname() const { 270 return "NCursesMenu"; 271 } 272 273 virtual ~NCursesMenuException() 274 { 275 } 276}; 277 278class NCURSES_IMPEXP NCursesFormException : public NCursesException 279{ 280public: 281 const NCursesForm* f; 282 283 NCursesFormException (const char *msg, int err) : 284 NCursesException (msg, err), 285 f (NULL) 286 {}; 287 288 NCursesFormException (const NCursesForm* form, 289 const char *msg, 290 int err) : 291 NCursesException (msg, err), 292 f (form) 293 {}; 294 295 NCursesFormException (int err) : 296 NCursesException ("form library error", err), 297 f (NULL) 298 {}; 299 300 NCursesFormException (const NCursesForm* form, 301 int err) : 302 NCursesException ("form library error", err), 303 f (form) 304 {}; 305 306 NCursesFormException& operator=(const NCursesFormException& rhs) 307 { 308 if (this != &rhs) { 309 NCursesException::operator=(rhs); 310 f = rhs.f; 311 } 312 return *this; 313 } 314 315 NCursesFormException(const NCursesFormException& rhs) 316 : NCursesException(rhs), f(rhs.f) 317 { 318 } 319 320 virtual const char *classname() const { 321 return "NCursesForm"; 322 } 323 324 virtual ~NCursesFormException() 325 { 326 } 327}; 328 329#if !((defined(__GNUG__) && defined(__EXCEPTIONS)) || defined(__SUNPRO_CC)) 330# if HAVE_IOSTREAM 331# include <iostream> 332using std::cerr; 333using std::endl; 334# else 335# include <iostream.h> 336# endif 337 extern "C" void exit(int); 338#endif 339 340inline void THROW(const NCursesException *e) { 341#if defined(__GNUG__) && defined(__EXCEPTIONS) 342# if ((__GNUG__ <= 2) && (__GNUC_MINOR__ < 8)) 343 (*lib_error_handler)(e ? e->classname() : "", e ? e->message : ""); 344#else 345#define CPP_HAS_TRY_CATCH 1 346#endif 347#elif defined(__SUNPRO_CC) 348# if !defined(__SUNPRO_CC_COMPAT) || (__SUNPRO_CC_COMPAT < 5) 349 genericerror(1, ((e != 0) ? (char *)(e->message) : "")); 350#else 351#define CPP_HAS_TRY_CATCH 1 352#endif 353#else 354 if (e) 355 cerr << e->message << endl; 356 exit(0); 357#endif 358 359#ifndef CPP_HAS_TRY_CATCH 360#define CPP_HAS_TRY_CATCH 0 361#define NCURSES_CPP_TRY /* nothing */ 362#define NCURSES_CPP_CATCH(e) if (false) 363#define THROWS(s) /* nothing */ 364#elif CPP_HAS_TRY_CATCH 365 throw *e; 366#define NCURSES_CPP_TRY try 367#define NCURSES_CPP_CATCH(e) catch(e) 368#define THROWS(s) throw(s) 369#endif 370} 371 372#endif /* NCURSES_ETIP_H_incl */ 373