blob: 9f642ee6d0008b4be25cde0970aa42bce74bc055 [file] [log] [blame]
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301// * This makes emacs happy -*-Mode: C++;-*-
2/****************************************************************************
Steve Kondikae271bc2015-11-15 02:50:53 +01003 * Copyright (c) 1998-2011,2012 Free Software Foundation, Inc. *
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05304 * *
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 Kondikae271bc2015-11-15 02:50:53 +010034// $Id: etip.h.in,v 1.39 2012/12/29 21:50:44 tom Exp $
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +053035
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
118extern "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
142class NCURSES_IMPEXP NCursesPanel;
143class NCURSES_IMPEXP NCursesMenu;
144class NCURSES_IMPEXP NCursesForm;
145
146class NCURSES_IMPEXP NCursesException
147{
148public:
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
180class NCURSES_IMPEXP NCursesPanelException : public NCursesException
181{
182public:
183 const NCursesPanel* p;
184
185 NCursesPanelException (const char *msg, int err) :
186 NCursesException (msg, err),
Steve Kondikae271bc2015-11-15 02:50:53 +0100187 p (0)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530188 {};
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 Kondikae271bc2015-11-15 02:50:53 +0100199 p (0)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530200 {};
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
231class NCURSES_IMPEXP NCursesMenuException : public NCursesException
232{
233public:
234 const NCursesMenu* m;
235
236 NCursesMenuException (const char *msg, int err) :
237 NCursesException (msg, err),
Steve Kondikae271bc2015-11-15 02:50:53 +0100238 m (0)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530239 {};
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 Kondikae271bc2015-11-15 02:50:53 +0100250 m (0)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530251 {};
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
282class NCURSES_IMPEXP NCursesFormException : public NCursesException
283{
284public:
285 const NCursesForm* f;
286
287 NCursesFormException (const char *msg, int err) :
288 NCursesException (msg, err),
Steve Kondikae271bc2015-11-15 02:50:53 +0100289 f (0)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530290 {};
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 Kondikae271bc2015-11-15 02:50:53 +0100301 f (0)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530302 {};
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
337using std::cerr;
338using std::endl;
339# endif
340# else
341# include <iostream.h>
342# endif
343 extern "C" void exit(int);
344#endif
345
346inline 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 Kondikae271bc2015-11-15 02:50:53 +0100370#define THROW2(s,t) /* nothing */
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530371#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 Kondikae271bc2015-11-15 02:50:53 +0100376#define THROW2(s,t) throw(s,t)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530377#endif
378}
379
380#endif /* NCURSES_ETIP_H_incl */