ExitHandler.hpp
Go to the documentation of this file.
1
/*----------------------------------------------------------------------------*/
2
/* */
3
/* Copyright (c) 1995, 2004 IBM Corporation. All rights reserved. */
4
/* Copyright (c) 2005-2009 Rexx Language Association. All rights reserved. */
5
/* */
6
/* This program and the accompanying materials are made available under */
7
/* the terms of the Common Public License v1.0 which accompanies this */
8
/* distribution. A copy is also available at the following address: */
9
/* http://www.ibm.com/developerworks/oss/CPLv1.0.htm */
10
/* */
11
/* Redistribution and use in source and binary forms, with or */
12
/* without modification, are permitted provided that the following */
13
/* conditions are met: */
14
/* */
15
/* Redistributions of source code must retain the above copyright */
16
/* notice, this list of conditions and the following disclaimer. */
17
/* Redistributions in binary form must reproduce the above copyright */
18
/* notice, this list of conditions and the following disclaimer in */
19
/* the documentation and/or other materials provided with the distribution. */
20
/* */
21
/* Neither the name of Rexx Language Association nor the names */
22
/* of its contributors may be used to endorse or promote products */
23
/* derived from this software without specific prior written permission. */
24
/* */
25
/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */
26
/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */
27
/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */
28
/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */
29
/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */
30
/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */
31
/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */
32
/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */
33
/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */
34
/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */
35
/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
36
/* */
37
/*----------------------------------------------------------------------------*/
38
/******************************************************************************/
39
/* REXX Kernel */
40
/* */
41
/* Manage a created instance of the interpreter */
42
/* */
43
/******************************************************************************/
44
#ifndef Included_ExitHandler_hpp
45
#define Included_ExitHandler_hpp
46
47
#include "
RexxCore.h
"
48
#include "
CallbackDispatcher.hpp
"
49
50
class
RexxActivity
;
51
52
class
ExitHandler
53
{
54
public
:
55
inline
ExitHandler
() :
entryPoint
(NULL) {
type
=
UNRESOLVED
; }
56
void
setEntryPoint
(
REXXPFN
e) {
entryPoint
= e; }
57
inline
bool
isEnabled
()
58
{
59
return
entryPoint
!= NULL;
60
}
61
62
inline
void
disable
()
63
{
64
entryPoint
= NULL;
65
}
66
67
int
call
(
RexxActivity
*activity,
RexxActivation
*activation,
int
major,
int
minor,
void
*parms);
68
inline
ExitHandler
&
operator=
(
ExitHandler
&o)
69
{
70
entryPoint
= o.
entryPoint
;
71
type
= o.
type
;
72
return
*
this
;
73
}
74
75
void
resolve
(
const
char
*name);
76
void
resolve
(
RexxContextExitHandler
*handler);
77
78
protected
:
79
80
typedef
enum
{
81
UNRESOLVED
,
82
REGISTERED_NAME
,
83
DIRECT
84
}
ExitType
;
85
86
87
REXXPFN
entryPoint
;
// resolved exit entry point
88
ExitType
type
;
// the type of call
89
};
90
91
92
class
ExitHandlerDispatcher
:
public
CallbackDispatcher
93
{
94
public
:
95
inline
ExitHandlerDispatcher
(
REXXPFN
e,
int
code,
int
subcode,
void
*a) {
entryPoint
= e;
major
= code;
minor
= subcode;
parms
= a; }
96
virtual
~ExitHandlerDispatcher
() { ; }
97
98
virtual
void
run
();
99
100
int
rc
;
// handler return code
101
int
major
;
// major exit code
102
int
minor
;
// minor exit code
103
REXXPFN
entryPoint
;
// resolved exit entry point
104
void
*
parms
;
// opaque arguments passed to callback handler
105
};
106
107
108
class
ContextExitHandlerDispatcher
:
public
ExitHandlerDispatcher
109
{
110
public
:
111
inline
ContextExitHandlerDispatcher
(
REXXPFN
e,
int
code,
int
subcode,
void
*a) :
ExitHandlerDispatcher
(e, code, subcode, a) { }
112
virtual
~ContextExitHandlerDispatcher
() { ; }
113
114
virtual
void
run
();
115
};
116
117
#endif
118
CallbackDispatcher.hpp
RexxCore.h
CallbackDispatcher
Definition:
CallbackDispatcher.hpp:48
ContextExitHandlerDispatcher
Definition:
ExitHandler.hpp:109
ContextExitHandlerDispatcher::ContextExitHandlerDispatcher
ContextExitHandlerDispatcher(REXXPFN e, int code, int subcode, void *a)
Definition:
ExitHandler.hpp:111
ContextExitHandlerDispatcher::~ContextExitHandlerDispatcher
virtual ~ContextExitHandlerDispatcher()
Definition:
ExitHandler.hpp:112
ContextExitHandlerDispatcher::run
virtual void run()
Definition:
ExitHandler.cpp:121
ExitHandlerDispatcher
Definition:
ExitHandler.hpp:93
ExitHandlerDispatcher::entryPoint
REXXPFN entryPoint
Definition:
ExitHandler.hpp:103
ExitHandlerDispatcher::minor
int minor
Definition:
ExitHandler.hpp:102
ExitHandlerDispatcher::~ExitHandlerDispatcher
virtual ~ExitHandlerDispatcher()
Definition:
ExitHandler.hpp:96
ExitHandlerDispatcher::run
virtual void run()
Definition:
ExitHandler.cpp:110
ExitHandlerDispatcher::ExitHandlerDispatcher
ExitHandlerDispatcher(REXXPFN e, int code, int subcode, void *a)
Definition:
ExitHandler.hpp:95
ExitHandlerDispatcher::parms
void * parms
Definition:
ExitHandler.hpp:104
ExitHandlerDispatcher::rc
int rc
Definition:
ExitHandler.hpp:100
ExitHandlerDispatcher::major
int major
Definition:
ExitHandler.hpp:101
ExitHandler
Definition:
ExitHandler.hpp:53
ExitHandler::resolve
void resolve(const char *name)
Definition:
ExitHandler.cpp:86
ExitHandler::ExitType
ExitType
Definition:
ExitHandler.hpp:80
ExitHandler::DIRECT
@ DIRECT
Definition:
ExitHandler.hpp:83
ExitHandler::UNRESOLVED
@ UNRESOLVED
Definition:
ExitHandler.hpp:81
ExitHandler::REGISTERED_NAME
@ REGISTERED_NAME
Definition:
ExitHandler.hpp:82
ExitHandler::call
int call(RexxActivity *activity, RexxActivation *activation, int major, int minor, void *parms)
Definition:
ExitHandler.cpp:59
ExitHandler::ExitHandler
ExitHandler()
Definition:
ExitHandler.hpp:55
ExitHandler::type
ExitType type
Definition:
ExitHandler.hpp:88
ExitHandler::setEntryPoint
void setEntryPoint(REXXPFN e)
Definition:
ExitHandler.hpp:56
ExitHandler::isEnabled
bool isEnabled()
Definition:
ExitHandler.hpp:57
ExitHandler::disable
void disable()
Definition:
ExitHandler.hpp:62
ExitHandler::operator=
ExitHandler & operator=(ExitHandler &o)
Definition:
ExitHandler.hpp:68
ExitHandler::entryPoint
REXXPFN entryPoint
Definition:
ExitHandler.hpp:87
RexxActivation
Definition:
RexxActivation.hpp:164
RexxActivity
Definition:
RexxActivity.hpp:128
RexxContextExitHandler
int REXXENTRY RexxContextExitHandler(RexxExitContext *, int, int, PEXIT)
Definition:
oorexxapi.h:165
REXXPFN
void * REXXPFN
Definition:
unix/rexxapitypes.h:64
oorexx
executor
sandbox
jlf
trunk
interpreter
concurrency
ExitHandler.hpp
Generated by
1.9.2