diff options
Diffstat (limited to 'kturtle/src/executer.h')
-rw-r--r-- | kturtle/src/executer.h | 186 |
1 files changed, 186 insertions, 0 deletions
diff --git a/kturtle/src/executer.h b/kturtle/src/executer.h new file mode 100644 index 00000000..ac9a1f1b --- /dev/null +++ b/kturtle/src/executer.h @@ -0,0 +1,186 @@ +/* + Copyright (C) 2003 by Walter Schreppers + Copyright (C) 2004 by Cies Breijs + + This program is free software; you can redistribute it and/or + modify it under the terms of version 2 of the GNU General Public + License as published by the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef _EXECUTER_H_ +#define _EXECUTER_H_ + +#include <stack> +#include <map> + +#include "token.h" +#include "treenode.h" + + +typedef map<QString,Value> symtable; +typedef map<QString,TreeNode*> functable; + +typedef stack<Value> runstack; + + +class Executer : public QObject +{ + Q_OBJECT + + public: + Executer(TreeNode*); + virtual ~Executer(); + + bool run(); + void pause(); + void abort(); + + + signals: + void Finished(); + void ErrorMsg(Token&, const QString&, uint code); + void setSelection(uint, uint, uint, uint); + + void InputDialog(QString& value); + void MessageDialog(QString text); + + void Clear(); + void Go(double x, double y); + void GoX(double x); + void GoY(double y); + void Forward(double x); + void Backward(double x); + void Direction(double x); + void TurnLeft(double x); + void TurnRight(double x); + void Center(); + void SetPenWidth(int w); + void PenUp(); + void PenDown(); + void SetFgColor(int r, int g, int b); + void SetBgColor(int r, int g, int b); + void ResizeCanvas(int x, int y); + void SpriteShow(); + void SpriteHide(); + void SpritePress(); + void SpriteChange(int x); + void Print(QString text); + void FontType(QString family, QString extra); + void FontSize(int px); + void WrapOn(); + void WrapOff(); + void Reset(); + + + private: + void execute (TreeNode*); + + void execBlock (TreeNode*); + void execFor (TreeNode*); + void execForEach (TreeNode*); + void execWhile (TreeNode*); + void execIf (TreeNode*); + void execAssign (TreeNode*); + void execExpression (/*TreeNode*/); + void execId (TreeNode*); + void execConstant (/*TreeNode*/); + + void createFunction (TreeNode*); + void execFunction (TreeNode*); + void execRetFunction (TreeNode*); + void execReturn (TreeNode*); + void execBreak (/*TreeNode*/); + + void execAdd (TreeNode*); + void execMul (TreeNode*); + void execDiv (TreeNode*); + void execSub (TreeNode*); + void execNot (TreeNode*); + + void execGE (TreeNode*); + void execGT (TreeNode*); + void execLE (TreeNode*); + void execLT (TreeNode*); + void execNE (TreeNode*); + void execEQ (TreeNode*); + + void execAnd (TreeNode*); + void execOr (TreeNode*); + void execMinus (TreeNode*); + + void execRun (TreeNode*); + + void execClear (TreeNode*); + void execGo (TreeNode*); + void execGoX (TreeNode*); + void execGoY (TreeNode*); + void execForward (TreeNode*); + void execBackward (TreeNode*); + void execDirection (TreeNode*); + void execTurnLeft (TreeNode*); + void execTurnRight (TreeNode*); + void execCenter (TreeNode*); + void execSetPenWidth (TreeNode*); + void execPenUp (TreeNode*); + void execPenDown (TreeNode*); + void execSetFgColor (TreeNode*); + void execSetBgColor (TreeNode*); + void execResizeCanvas (TreeNode*); + void execSpriteShow (TreeNode*); + void execSpriteHide (TreeNode*); + void execSpritePress (TreeNode*); + void execSpriteChange (TreeNode*); + + void execMessage (TreeNode*); + void execInputWindow (TreeNode*); + void execPrint (TreeNode*); + void execFontType (TreeNode*); + void execFontSize (TreeNode*); + void execRepeat (TreeNode*); + void execRandom (TreeNode*); + void execWait (TreeNode*); + void execWrapOn (TreeNode*); + void execWrapOff (TreeNode*); + void execReset (TreeNode*); + + Value exec2getValue (TreeNode*); + + QString runCommand(const QString&); + + bool checkParameterQuantity(TreeNode*, uint quantity, int errorCode); + bool checkParameterType(TreeNode*, int valueType, int errorCode); + + void slowDown(TreeNode*); + void startWaiting(int msec); + void startPausing(); + + // private locals + TreeNode* tree; + stack<symtable> symbolTables; + functable functionTable; // keep track of functionNode's + runstack runStack; // stores parameters and return value of functions + + int runSpeed; + bool bReturn; // used for return statements + bool bBreak; // used for break statement + bool bPause; // used to pause execution + bool bAbort; // used to abort execution + bool bStopWaiting; // used for wait-command + + + private slots: + void slotStopWaiting(); + void slotChangeSpeed(int speed); + void slotStopPausing(); +}; + +#endif // _EXECUTER_H_ |