aboutsummaryrefslogtreecommitdiff
path: root/nx-X11/include/DPS/dpsexcept.h
diff options
context:
space:
mode:
Diffstat (limited to 'nx-X11/include/DPS/dpsexcept.h')
-rw-r--r--nx-X11/include/DPS/dpsexcept.h257
1 files changed, 0 insertions, 257 deletions
diff --git a/nx-X11/include/DPS/dpsexcept.h b/nx-X11/include/DPS/dpsexcept.h
deleted file mode 100644
index 7daf70195..000000000
--- a/nx-X11/include/DPS/dpsexcept.h
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- * dpsexcept.h -- exception handling for the DPS client library
- *
- * (c) Copyright 1984-1994 Adobe Systems Incorporated.
- * All rights reserved.
- *
- * Permission to use, copy, modify, distribute, and sublicense this software
- * and its documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notices appear in all copies and that
- * both those copyright notices and this permission notice appear in
- * supporting documentation and that the name of Adobe Systems Incorporated
- * not be used in advertising or publicity pertaining to distribution of the
- * software without specific, written prior permission. No trademark license
- * to use the Adobe trademarks is hereby granted. If the Adobe trademark
- * "Display PostScript"(tm) is used to describe this software, its
- * functionality or for any other purpose, such use shall be limited to a
- * statement that this software works in conjunction with the Display
- * PostScript system. Proper trademark attribution to reflect Adobe's
- * ownership of the trademark shall be given whenever any such reference to
- * the Display PostScript system is made.
- *
- * ADOBE MAKES NO REPRESENTATIONS ABOUT THE SUITABILITY OF THE SOFTWARE FOR
- * ANY PURPOSE. IT IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY.
- * ADOBE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NON- INFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL ADOBE BE LIABLE
- * TO YOU OR ANY OTHER PARTY FOR ANY SPECIAL, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER WHETHER IN AN ACTION OF CONTRACT,
- * NEGLIGENCE, STRICT LIABILITY OR ANY OTHER ACTION ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ADOBE WILL NOT
- * PROVIDE ANY TRAINING OR OTHER SUPPORT FOR THE SOFTWARE.
- *
- * Adobe, PostScript, and Display PostScript are trademarks of Adobe Systems
- * Incorporated which may be registered in certain jurisdictions
- *
- * Author: Adobe Systems Incorporated
- */
-/* $XFree86$ */
-
-/*
-Original version: Jeffrey Mogul, Stanford, 18 February 1983
-*/
-
-#ifndef DPSEXCEPT_H
-#define DPSEXCEPT_H
-
-/* If the macro setjmp_h is defined, it is the #include path to be used
- instead of <setjmp.h>
- */
-#ifdef setjmp_h
-#include setjmp_h
-#else /* setjmp_h */
-#ifdef VAXC
-#include setjmp
-#else /* VAXC */
-#include <setjmp.h>
-#endif /* VAXC */
-#endif /* setjmp_h */
-
-/*
- This interface defines a machine-independent exception handling
- facility. It depends only on the availability of setjmp and longjmp.
- Note that we depend on native setjmp and longjmp facilities; it's
- not possible to interpose a veneer due to the way setjmp works.
- (In fact, in ANSI C, setjmp is a macro, not a procedure.)
-
- The exception handler is largely defined by a collection of macros
- that provide some additional "syntax". A stretch of code that needs
- to handle exceptions is written thus:
-
- DURING
- statement1;
- statement2;
- ...
- HANDLER
- statement3
- statement4;
- ...
- END_HANDLER
-
- The meaning of this is as follows. Normally, the statements between
- DURING and HANDLER are executed. If no exception occurs, the statements
- between HANDLER and END_HANDLER are bypassed; execution resumes at the
- statement after END_HANDLER.
-
- If an exception is raised while executing the statements between
- DURING and HANDLER (including any procedure called from those statements),
- execution of those statements is aborted and control passes to the
- statements between HANDLER and END_HANDLER. These statements
- comprise the "exception handler" for exceptions occurring between
- the DURING and the HANDLER.
-
- The exception handler has available to it two local variables,
- Exception.Code and Exception.Message, which are the values passed
- to the call to RAISE that generated the exception (see below).
- These variables have valid contents only between HANDLER and
- END_HANDLER.
-
- If the exception handler simply falls off the end (or returns, or
- whatever), propagation of the exception ceases. However, if the
- exception handler executes RERAISE, the exception is propagated to
- the next outer dynamically enclosing occurrence of DURING ... HANDLER.
-
- There are two usual reasons for wanting to handle exceptions:
-
- 1. To clean up any local state (e.g., deallocate dynamically allocated
- storage), then allow the exception to propagate further. In this
- case, the handler should perform its cleanup, then execute RERAISE.
-
- 2. To recover from certain exceptions that might occur, then continue
- normal execution. In this case, the handler should perform a
- "switch" on Exception.Code to determine whether the exception
- is one it is prepared to recover from. If so, it should perform
- the recovery and just fall through; if not, it should execute
- RERAISE to propagate the exception to a higher-level handler.
-
- It is ILLEGAL to execute a statement between DURING and HANDLER
- that would transfer control outside of those statements. In particular,
- "return" is illegal (an unspecified malfunction will occur).
- To perform a "return", execute E_RETURN_VOID; to perform a "return(x)",
- execute E_RETURN(x). This restriction does not apply to the statements
- between HANDLER and END_HANDLER.
-
- Note that in an environment with multiple contexts (i.e., multiple
- coroutines), each context has its own stack of nested exception
- handlers. An exception is raised within the currently executing
- context and transfers control to a handler in the same context; the
- exception does not propagate across context boundaries.
- */
-
-
-/* Data structures */
-
-typedef struct _Exc_buf_x {
- struct _Exc_buf_x *Prev; /* exception chain back-pointer */
- jmp_buf Environ; /* saved environment */
- char *Message; /* Human-readable cause */
- int Code; /* Exception code */
-} _Exc_Buf;
-
-extern _Exc_Buf *_Exc_Header; /* global exception chain header */
-
-
-/* Macros defining the exception handler "syntax":
- DURING statements HANDLER statements END_HANDLER
- (see the description above)
- */
-
-#define _E_RESTORE _Exc_Header = Exception.Prev
-
-#define DURING {_Exc_Buf Exception;\
- Exception.Prev=_Exc_Header;\
- _Exc_Header= &Exception;\
- if (! setjmp(Exception.Environ)) {
-
-#define HANDLER _E_RESTORE;} else {
-
-#define END_HANDLER }}
-
-#define E_RETURN(x) {_E_RESTORE; return(x);}
-
-#define E_RTRN_VOID {_E_RESTORE; return;}
-
-
-/* Exported Procedures */
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-extern void DPSRaise(int Code, char *Message);
-/* Initiates an exception; always called via the RAISE macro.
- This procedure never returns; instead, the stack is unwound and
- control passes to the beginning of the exception handler statements
- for the innermost dynamically enclosing occurrence of
- DURING ... HANDLER. The Code and Message arguments are passed to
- that handler as described above.
-
- It is legal to call DPSRaise from within a "signal" handler for a
- synchronous event such as floating point overflow. It is not reasonable
- to do so from within a "signal" handler for an asynchronous event
- (e.g., interrupt), since the exception handler's data structures
- are not updated atomically with respect to asynchronous events.
-
- If there is no dynamically enclosing exception handler, DPSRaise
- writes an error message to os_stderr and aborts with DPSCantHappen.
- */
-
-extern void DPSCantHappen(void);
-/* Calls abort. This is used only to handle "impossible" errors;
- there is no recovery, and DPSCantHappen does not return.
- */
-
-
-/* The following two operations are invoked only from the exception
- handler macros and from the DPSRaise procedure. Note that they are
- not actually declared here but in <setjmp.h> (or a substitute
- specified by the macro SETJMP, above).
-
- Note that the exception handler facility uses setjmp/longjmp in
- a stylized way that may not require the full generality of the
- standard setjmp/longjmp mechanism. In particular, setjmp is never
- called during execution of a signal handler; thus, the signal
- mask saved by setjmp can be constant rather than obtained from
- the operating system on each call. This can have considerable
- performance consequences.
- */
-
-#if 0
-extern int setjmp(jmp_buf buf);
-/* Saves the caller's environment in the buffer (which is an array
- type and therefore passed by pointer), then returns the value zero.
- It may return again if longjmp is executed subsequently (see below).
- */
-
-extern void longjmp(jmp_buf buf, int value);
-/* Restores the environment saved by an earlier call to setjmp,
- unwinding the stack and causing setjmp to return again with
- value as its return value (which must be non-zero).
- The procedure that called setjmp must not have returned or
- otherwise terminated. The saved environment must be at an earlier
- place on the same stack as the call to longjmp (in other words,
- it must not be in a different coroutine). It is legal to call
- longjmp in a signal handler and to restore an environment
- outside the signal handler; longjmp must be able to unwind
- the signal cleanly in such a case.
- */
-#endif /* 0 */
-
-#if defined(__cplusplus) || defined(c_plusplus)
-}
-#endif
-
-/* In-line Procedures */
-
-#define RAISE DPSRaise
-/* See DPSRaise above; defined as a macro simply for consistency */
-
-#define RERAISE RAISE(Exception.Code, Exception.Message)
-/* Called from within an exception handler (between HANDLER and
- END_HANDLER), propagates the same exception to the next outer
- dynamically enclosing exception handler; does not return.
- */
-
-/*
- Error code enumerations
-
- By convention, error codes are divided into blocks belonging to
- different components of the Display PostScript system.
-
- Negative error codes and the codes between 0 and 999 (inclusive) are
- reserved for use by the Display PostScript system.
- */
-
-#define dps_err_base 1000
-
-#endif /* DPSEXCEPT_H */