00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #if !defined(PROGRAMS_H)
00024 #define PROGRAMS_H
00025
00026 #include "Ingredients.h"
00027 #include "BaseActions.h"
00028
00029 #include "Root.h"
00030 #include "BaseClasses.h"
00031
00032 class MHEngine;
00033
00034
00035 class MHProgram : public MHIngredient
00036 {
00037 public:
00038 MHProgram();
00039 virtual void Initialise(MHParseNode *p, MHEngine *engine);
00040 virtual void PrintMe(FILE *fd, int nTabs) const;
00041 virtual bool InitiallyAvailable() { return m_fInitiallyAvailable; }
00042 virtual void Activation(MHEngine *engine);
00043 virtual void Deactivation(MHEngine *engine);
00044
00045
00046 virtual void Stop(MHEngine *engine) { Deactivation(engine); }
00047 protected:
00048 MHOctetString m_Name;
00049 bool m_fInitiallyAvailable;
00050 };
00051
00052
00053 class MHResidentProgram : public MHProgram
00054 {
00055 public:
00056 MHResidentProgram() {}
00057 virtual const char *ClassName() { return "ResidentProgram"; }
00058 virtual void PrintMe(FILE *fd, int nTabs) const;
00059 virtual void CallProgram(bool fIsFork, const MHObjectRef &success,
00060 const MHSequence<MHParameter *> &args, MHEngine *engine);
00061 };
00062
00063
00064 class MHRemoteProgram : public MHProgram
00065 {
00066 public:
00067 MHRemoteProgram();
00068 virtual const char *ClassName() { return "RemoteProgram"; }
00069 virtual ~MHRemoteProgram();
00070 virtual void Initialise(MHParseNode *p, MHEngine *engine);
00071 virtual void PrintMe(FILE *fd, int nTabs) const;
00072 };
00073
00074
00075 class MHInterChgProgram : public MHProgram
00076 {
00077 public:
00078 MHInterChgProgram();
00079 virtual const char *ClassName() { return "InterChgProgram"; }
00080 virtual ~MHInterChgProgram();
00081 virtual void Initialise(MHParseNode *p, MHEngine *engine);
00082 virtual void PrintMe(FILE *fd, int nTabs) const;
00083 };
00084
00085
00086 class MHCall: public MHElemAction
00087 {
00088 public:
00089 MHCall(const char *name, bool fIsFork): MHElemAction(name), m_fIsFork(fIsFork) {}
00090 virtual void Initialise(MHParseNode *p, MHEngine *engine);
00091 virtual void Perform(MHEngine *engine);
00092 protected:
00093 virtual void PrintArgs(FILE *fd, int nTabs) const;
00094 bool m_fIsFork;
00095 MHObjectRef m_Succeeded;
00096 MHOwnPtrSequence<MHParameter> m_Parameters;
00097 };
00098
00099 #endif