windows/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 Windows 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 
55 class RexxDateTime;
56 class RexxBuffer;
57 
59 {
60 public:
61  static void live(size_t);
62  static void liveGeneral(int reason);
63 
64  static void processStartup(HINSTANCE mod);
65  static void processShutdown();
66 
67  static void startInterpreter();
68  static void terminateInterpreter();
69 
70  static void initializeInstance(InterpreterInstance *instance);
71  static void terminateInstance(InterpreterInstance *instance);
72 
73  static void startTimeSlice();
74  static void stopTimeSlice();
75  static inline void setTimeSliceTimerThread(HANDLE h) { timeSliceTimerThread = h; }
76  static bool loadMessage(wholenumber_t code, char *buffer, size_t bufferLength);
77 
80  static void restoreEnvironment(void *CurrentEnv);
82  static void getCurrentTime(RexxDateTime *Date );
86  static RexxString *getSourceString(RexxString *callType, RexxString * programName);
87  static void releaseResultMemory(void *);
91  static RexxString *getUserid();
92  static bool valueFunction(RexxString *name, RexxObject *newValue, RexxString *selector, RexxObject *&result);
95  static void validateAddressName(RexxString *name );
96  static void loadImage(char **imageBuffer, size_t *imageSize);
97  static RexxBuffer *readProgram(const char *file_name);
98  static bool processSignal(DWORD dwCtrlType);
99 
101  static HANDLE exceptionHostProcess;
102  static bool exceptionConsole;
103  static bool explicitConsole;
104  static int signalCount;
105 
106 protected:
107 
108  static HINSTANCE moduleHandle; // handle to the interpeter DLL
109  static HANDLE timeSliceTimerThread; // handle of the time slice thread
110 };
111 
112 #endif
static RexxString * getInternalSystemName()
static void terminateInterpreter()
static void live(size_t)
static bool processSignal(DWORD dwCtrlType)
static RexxObject * pushEnvironment(RexxActivation *context)
static void * allocateResultMemory(sizeB_t)
static void releaseResultMemory(void *)
static void getCurrentTime(RexxDateTime *Date)
static bool loadMessage(wholenumber_t code, char *buffer, size_t bufferLength)
static void startTimeSlice()
static void loadImage(char **imageBuffer, size_t *imageSize)
static void processShutdown()
static RexxString * getDefaultAddressName()
static RexxString * getUserid()
static RexxString * getSystemName()
static RexxString * getMessageText(wholenumber_t code)
static RexxObject * popEnvironment(RexxActivation *context)
static void validateAddressName(RexxString *name)
static void setTimeSliceTimerThread(HANDLE h)
static RexxString * getSystemVersion()
static RexxString * qualifyFileSystemName(RexxString *name)
static RexxString * getSourceString(RexxString *callType, RexxString *programName)
static RexxString * getMessageHeader(wholenumber_t code)
static void terminateInstance(InterpreterInstance *instance)
static void liveGeneral(int reason)
static void initializeInstance(InterpreterInstance *instance)
static void restoreEnvironment(void *CurrentEnv)
static void startInterpreter()
static bool valueFunction(RexxString *name, RexxObject *newValue, RexxString *selector, RexxObject *&result)
static bool invokeExternalFunction(RexxActivation *, RexxActivity *, RexxString *, RexxObject **, size_t, size_t, RexxString *, ProtectedObject &)
static RexxBuffer * readProgram(const char *file_name)
ssize_t wholenumber_t
Definition: rexx.h:230
stringsizeB_t sizeB_t
Definition: rexx.h:248