unix/SystemInterpreter.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 Windows Support */
40 /* */
41 /* Main Unix interpreter control. This is the preferred location for */
42 /* all platform dependent global variables. */
43 /* The interpreter does not instantiate an instance of this */
44 /* class, so most variables and methods should be static. */
45 /* */
46 /* */
47 /*****************************************************************************/
48 
49 #ifndef SystemInterpreter_Included
50 #define SystemInterpreter_Included
51 
52 #include "RexxCore.h"
53 
54 #if defined( HAVE_SIGNAL_H )
55 # include <signal.h>
56 #endif
57 
58 #if defined( HAVE_SYS_SIGNAL_H )
59 # include <sys/signal.h>
60 #endif
61 
62 
64 class RexxActivation;
65 class RexxDateTime;
66 class RexxBuffer;
67 
69 {
70 public:
71  static void live(size_t);
72  static void liveGeneral(int reason);
73 
74  static void processStartup();
75  static void processShutdown();
76 
77  static void startInterpreter();
78  static void terminateInterpreter();
79 
80  static void initializeInstance(InterpreterInstance *instance);
81  static void terminateInstance(InterpreterInstance *instance);
82  static void getCurrentWorkingDirectory(char *);
83 
84  static RexxObject *popEnvironment(RexxActivation *context);
85  static RexxObject *pushEnvironment(RexxActivation *context);
86  static void restoreEnvironment(void *CurrentEnv);
87  static RexxObject *buildEnvlist();
89  static void getCurrentTime(RexxDateTime *Date );
90  static RexxString *getSystemName();
91  static RexxString *getSourceString(RexxString *callType, RexxString * programName);
92  static RexxString *getUserid();
93  static void releaseResultMemory(void *);
94  static void *allocateResultMemory(size_t);
97  static bool valueFunction(RexxString *name, RexxObject *newValue, RexxString *selector, RexxObject *&result);
100  static void validateAddressName(RexxString *name );
101  static void loadImage(char **imageBuffer, size_t *imageSize);
102  static RexxBuffer *readProgram(const char *file_name);
103 
104  static sigset_t oldmask; // masks used for setting signal handlers
105  static sigset_t newmask;
106 
107 };
108 
109 #endif
static RexxObject * buildEnvlist()
static RexxString * qualifyFileSystemName(RexxString *name)
static RexxBuffer * readProgram(const char *file_name)
static void getCurrentTime(RexxDateTime *Date)
static bool valueFunction(RexxString *name, RexxObject *newValue, RexxString *selector, RexxObject *&result)
static void * allocateResultMemory(size_t)
static bool invokeExternalFunction(RexxActivation *, RexxActivity *, RexxString *, RexxObject **, size_t, size_t, RexxString *, ProtectedObject &)
static void terminateInterpreter()
static void liveGeneral(int reason)
static RexxString * getDefaultAddressName()
static RexxString * getSystemName()
static RexxString * getSourceString(RexxString *callType, RexxString *programName)
static RexxString * getMessageText(wholenumber_t code)
static RexxObject * popEnvironment(RexxActivation *context)
static RexxString * getUserid()
static RexxObject * pushEnvironment(RexxActivation *context)
static void loadImage(char **imageBuffer, size_t *imageSize)
static RexxString * getMessageHeader(wholenumber_t code)
static void terminateInstance(InterpreterInstance *instance)
static void releaseResultMemory(void *)
static void initializeInstance(InterpreterInstance *instance)
static void restoreEnvironment(void *CurrentEnv)
static void getCurrentWorkingDirectory(char *)
static void validateAddressName(RexxString *name)
static void live(size_t)
ssize_t wholenumber_t
Definition: rexx.h:230