CommandHandler.hpp
Go to the documentation of this file.
1 /*----------------------------------------------------------------------------*/
2 /* */
3 /* Copyright (c) 1995, 2004 IBM Corporation. All rights reserved. */
4 /* Copyright (c) 2005-2006 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 command handler callback */
42 /* */
43 /******************************************************************************/
44 #ifndef Included_CommandHandler_hpp
45 #define Included_CommandHandler_hpp
46 
47 #include "RexxCore.h"
48 #include "CallbackDispatcher.hpp"
49 
50 class RexxActivity;
51 
53 {
54 public:
55  inline void *operator new(size_t size, void *ptr) { return ptr; }
56  void *operator new(size_t size);
57  inline void operator delete(void *) { ; }
58  inline void operator delete(void *, void *) { ; }
59 
60  inline CommandHandler(RESTORETYPE restoreType) { ; };
62  inline CommandHandler(const char *n) : entryPoint(NULL) { type = UNRESOLVED; resolve(n); }
63 
64  void call(RexxActivity *activity, RexxActivation *activation, RexxString *address, RexxString *command, ProtectedObject &rc, ProtectedObject &condition);
65  void resolve(const char *name);
66  inline bool isResolved() { return type != UNRESOLVED; }
67 
68 protected:
69 
70  typedef enum
71  {
74  DIRECT
76 
77  REXXPFN entryPoint; // resolved exit entry point
78  HandlerType type; // the type of call
79 };
80 
81 
83 {
84 public:
86  virtual ~CommandHandlerDispatcher() { ; }
87 
88  virtual void run();
89  void complete(RexxString *command, ProtectedObject &result, ProtectedObject &condition);
90 
91  RexxActivity *activity; // the activity we're dispatching on
92  REXXPFN entryPoint; // resolved exit entry point
93  CONSTRXSTRING rxstrcmd; // invoked command
94  RXSTRING retstr; // passed back result
95  wholenumber_t sbrc; // direct numeric return code
97  unsigned short flags; // command status flags
98 };
99 
100 
102 {
103 public:
105  entryPoint(e), address(a), command(c), result(r), condition(co) { }
107 
108  virtual void run();
109  virtual void handleError(RexxDirectory *);
110 
111  REXXPFN entryPoint; // the installed command handler
112  RexxString *address; // the address environment
113  RexxString *command; // the command to invoke
114  ProtectedObject &result; // the handled result
115  ProtectedObject &condition; // any raised condition
116 };
117 
118 #endif
119 
RESTORETYPE
Definition: ObjectClass.hpp:80
CommandHandlerDispatcher(RexxActivity *a, REXXPFN e, RexxString *c)
char default_return_buffer[DEFRXSTRING]
void complete(RexxString *command, ProtectedObject &result, ProtectedObject &condition)
void call(RexxActivity *activity, RexxActivation *activation, RexxString *address, RexxString *command, ProtectedObject &rc, ProtectedObject &condition)
CommandHandler(RESTORETYPE restoreType)
HandlerType type
void resolve(const char *name)
CommandHandler(const char *n)
CommandHandler(REXXPFN e)
virtual void handleError(RexxDirectory *)
ContextCommandHandlerDispatcher(REXXPFN e, RexxString *a, RexxString *c, ProtectedObject &r, ProtectedObject &co)
ssize_t wholenumber_t
Definition: rexx.h:230
#define DEFRXSTRING
void * REXXPFN