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