00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include <stdio.h>
00023
00024 #include "BaseActions.h"
00025 #include "Actions.h"
00026 #include "BaseClasses.h"
00027 #include "ParseNode.h"
00028 #include "ASN1Codes.h"
00029 #include "Ingredients.h"
00030 #include "Engine.h"
00031 #include "Variables.h"
00032 #include "Programs.h"
00033 #include "Bitmap.h"
00034 #include "Visible.h"
00035 #include "Text.h"
00036 #include "DynamicLineArt.h"
00037 #include "Link.h"
00038 #include "TokenGroup.h"
00039 #include "Stream.h"
00040 #include "Logging.h"
00041
00042
00043
00044 class MHUnimplementedAction: public MHElemAction
00045 {
00046 public:
00047 MHUnimplementedAction(int nTag): MHElemAction("") { m_nTag = nTag; }
00048 virtual void Initialise(MHParseNode *, MHEngine *) {}
00049 virtual void PrintMe(FILE *fd, int ) const { fprintf(fd, "****Missing action %d\n", m_nTag); }
00050 virtual void Perform(MHEngine *) { MHERROR(QString("Unimplemented action %1").arg(m_nTag)); }
00051 protected:
00052 int m_nTag;
00053 };
00054
00055
00056
00057
00058 void MHActionSequence::Initialise(MHParseNode *p, MHEngine *engine)
00059 {
00060
00061 for (int i = 0; i < p->GetArgCount(); i++) {
00062 MHParseNode *pElemAction = p->GetArgN(i);
00063 MHElemAction *pAction;
00064 switch (pElemAction->GetTagNo()) {
00065 case C_ACTIVATE: pAction = new MHActivate(":Activate", true); break;
00066 case C_ADD: pAction = new MHAdd; break;
00067 case C_ADD_ITEM: pAction = new MHAddItem; break;
00068 case C_APPEND: pAction = new MHAppend; break;
00069 case C_BRING_TO_FRONT: pAction = new MHBringToFront; break;
00070 case C_CALL: pAction = new MHCall(":Call", false); break;
00071 case C_CALL_ACTION_SLOT: pAction = new MHCallActionSlot; break;
00072 case C_CLEAR: pAction = new MHClear; break;
00073 case C_CLONE: pAction = new MHClone; break;
00074 case C_CLOSE_CONNECTION: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break;
00075 case C_DEACTIVATE: pAction = new MHActivate(":Deactivate", false); break;
00076 case C_DEL_ITEM: pAction = new MHDelItem; break;
00077 case C_DESELECT: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break;
00078 case C_DESELECT_ITEM: pAction = new MHDeselectItem; break;
00079 case C_DIVIDE: pAction = new MHDivide; break;
00080 case C_DRAW_ARC: pAction = new MHDrawArcSector(":DrawArc", false); break;
00081 case C_DRAW_LINE: pAction = new MHDrawLine; break;
00082 case C_DRAW_OVAL: pAction = new MHDrawOval; break;
00083 case C_DRAW_POLYGON: pAction = new MHDrawPoly(":DrawPolygon", true); break;
00084 case C_DRAW_POLYLINE: pAction = new MHDrawPoly(":DrawPolyline", false); break;
00085 case C_DRAW_RECTANGLE: pAction = new MHDrawRectangle; break;
00086 case C_DRAW_SECTOR: pAction = new MHDrawArcSector(":DrawSector", true); break;
00087 case C_FORK: pAction = new MHCall(":Fork", true); break;
00088 case C_GET_AVAILABILITY_STATUS: pAction = new MHGetAvailabilityStatus; break;
00089 case C_GET_BOX_SIZE: pAction = new MHGetBoxSize; break;
00090 case C_GET_CELL_ITEM: pAction = new MHGetCellItem; break;
00091 case C_GET_CURSOR_POSITION: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break;
00092 case C_GET_ENGINE_SUPPORT: pAction = new MHGetEngineSupport; break;
00093 case C_GET_ENTRY_POINT: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break;
00094 case C_GET_FILL_COLOUR: pAction = new MHGetFillColour; break;
00095 case C_GET_FIRST_ITEM: pAction = new MHGetFirstItem; break;
00096 case C_GET_HIGHLIGHT_STATUS: pAction = new MHGetHighlightStatus; break;
00097 case C_GET_INTERACTION_STATUS: pAction = new MHGetInteractionStatus; break;
00098 case C_GET_ITEM_STATUS: pAction = new MHGetItemStatus; break;
00099 case C_GET_LABEL: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break;
00100 case C_GET_LAST_ANCHOR_FIRED: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break;
00101 case C_GET_LINE_COLOUR: pAction = new MHGetLineColour; break;
00102 case C_GET_LINE_STYLE: pAction = new MHGetLineStyle; break;
00103 case C_GET_LINE_WIDTH: pAction = new MHGetLineWidth; break;
00104 case C_GET_LIST_ITEM: pAction = new MHGetListItem; break;
00105 case C_GET_LIST_SIZE: pAction = new MHGetListSize; break;
00106 case C_GET_OVERWRITE_MODE: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break;
00107 case C_GET_PORTION: pAction = new MHGetPortion; break;
00108 case C_GET_POSITION: pAction = new MHGetPosition; break;
00109 case C_GET_RUNNING_STATUS: pAction = new MHGetRunningStatus; break;
00110 case C_GET_SELECTION_STATUS: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break;
00111 case C_GET_SLIDER_VALUE: pAction = new MHGetSliderValue; break;
00112 case C_GET_TEXT_CONTENT: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break;
00113 case C_GET_TEXT_DATA: pAction = new MHGetTextData; break;
00114 case C_GET_TOKEN_POSITION: pAction = new MHGetTokenPosition; break;
00115 case C_GET_VOLUME: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break;
00116 case C_LAUNCH: pAction = new MHLaunch; break;
00117 case C_LOCK_SCREEN: pAction = new MHLockScreen; break;
00118 case C_MODULO: pAction = new MHModulo; break;
00119 case C_MOVE: pAction = new MHMove; break;
00120 case C_MOVE_TO: pAction = new MHMoveTo; break;
00121 case C_MULTIPLY: pAction = new MHMultiply; break;
00122 case C_OPEN_CONNECTION: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break;
00123 case C_PRELOAD: pAction = new MHPreload; break;
00124 case C_PUT_BEFORE: pAction = new MHPutBefore; break;
00125 case C_PUT_BEHIND: pAction = new MHPutBehind; break;
00126 case C_QUIT: pAction = new MHQuit; break;
00127 case C_READ_PERSISTENT: pAction = new MHPersistent(":ReadPersistent", true); break;
00128 case C_RUN: pAction = new MHRun; break;
00129 case C_SCALE_BITMAP: pAction = new MHScaleBitmap; break;
00130 case C_SCALE_VIDEO: pAction = new MHScaleVideo; break;
00131 case C_SCROLL_ITEMS: pAction = new MHScrollItems; break;
00132 case C_SELECT: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break;
00133 case C_SELECT_ITEM: pAction = new MHSelectItem; break;
00134 case C_SEND_EVENT: pAction = new MHSendEvent; break;
00135 case C_SEND_TO_BACK: pAction = new MHSendToBack; break;
00136 case C_SET_BOX_SIZE: pAction = new MHSetBoxSize; break;
00137 case C_SET_CACHE_PRIORITY: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break;
00138 case C_SET_COUNTER_END_POSITION: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break;
00139 case C_SET_COUNTER_POSITION: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break;
00140 case C_SET_COUNTER_TRIGGER: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break;
00141 case C_SET_CURSOR_POSITION: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break;
00142 case C_SET_CURSOR_SHAPE: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break;
00143 case C_SET_DATA: pAction = new MHSetData; break;
00144 case C_SET_ENTRY_POINT: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break;
00145 case C_SET_FILL_COLOUR: pAction = new MHSetFillColour; break;
00146 case C_SET_FIRST_ITEM: pAction = new MHSetFirstItem; break;
00147 case C_SET_FONT_REF: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break;
00148 case C_SET_HIGHLIGHT_STATUS: pAction = new MHSetHighlightStatus; break;
00149 case C_SET_INTERACTION_STATUS: pAction = new MHSetInteractionStatus; break;
00150 case C_SET_LABEL: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break;
00151 case C_SET_LINE_COLOUR: pAction = new MHSetLineColour; break;
00152 case C_SET_LINE_STYLE: pAction = new MHSetLineStyle; break;
00153 case C_SET_LINE_WIDTH: pAction = new MHSetLineWidth; break;
00154 case C_SET_OVERWRITE_MODE: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break;
00155 case C_SET_PALETTE_REF: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break;
00156 case C_SET_PORTION: pAction = new MHSetPortion; break;
00157 case C_SET_POSITION: pAction = new MHSetPosition; break;
00158 case C_SET_SLIDER_VALUE: pAction = new MHSetSliderValue; break;
00159 case C_SET_SPEED: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break;
00160 case C_SET_TIMER: pAction = new MHSetTimer; break;
00161 case C_SET_TRANSPARENCY: pAction = new MHSetTransparency; break;
00162 case C_SET_VARIABLE: pAction = new MHSetVariable; break;
00163 case C_SET_VOLUME: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break;
00164 case C_SPAWN: pAction = new MHSpawn; break;
00165 case C_STEP: pAction = new MHStep; break;
00166 case C_STOP: pAction = new MHStop; break;
00167 case C_STORE_PERSISTENT: pAction = new MHPersistent(":StorePersistent", false); break;
00168 case C_SUBTRACT: pAction = new MHSubtract; break;
00169 case C_TEST_VARIABLE: pAction = new MHTestVariable; break;
00170 case C_TOGGLE: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break;
00171 case C_TOGGLE_ITEM: pAction = new MHToggleItem; break;
00172 case C_TRANSITION_TO: pAction = new MHTransitionTo; break;
00173 case C_UNLOAD: pAction = new MHUnload; break;
00174 case C_UNLOCK_SCREEN: pAction = new MHUnlockScreen; break;
00175
00176 case C_SET_BACKGROUND_COLOUR: pAction = new MHSetBackgroundColour; break;
00177 case C_SET_CELL_POSITION: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break;
00178 case C_SET_INPUT_REGISTER: pAction = new MHSetInputRegister; break;
00179 case C_SET_TEXT_COLOUR: pAction = new MHSetTextColour; break;
00180 case C_SET_FONT_ATTRIBUTES: pAction = new MHSetFontAttributes; break;
00181 case C_SET_VIDEO_DECODE_OFFSET: pAction = new MHSetVideoDecodeOffset; break;
00182 case C_GET_VIDEO_DECODE_OFFSET: pAction = new MHGetVideoDecodeOffset; break;
00183 case C_GET_FOCUS_POSITION: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break;
00184 case C_SET_FOCUS_POSITION: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break;
00185 case C_SET_BITMAP_DECODE_OFFSET: pAction = new MHSetBitmapDecodeOffset; break;
00186 case C_GET_BITMAP_DECODE_OFFSET: pAction = new MHGetBitmapDecodeOffset; break;
00187 case C_SET_SLIDER_PARAMETERS: pAction = new MHSetSliderParameters; break;
00188
00189 default:
00190 MHLOG(MHLogWarning, QString("Unknown action %1").arg(pElemAction->GetTagNo()));
00191
00192
00193 pAction = NULL;
00194 }
00195 if (pAction) {
00196 Append(pAction);
00197 pAction->Initialise(pElemAction, engine);
00198 }
00199 }
00200 }
00201
00202 void MHActionSequence::PrintMe(FILE *fd, int nTabs) const
00203 {
00204 for (int i = 0; i < Size(); i++) {
00205 GetAt(i)->PrintMe(fd, nTabs);
00206 }
00207 }