File: command.h

package info (click to toggle)
littlewizard 1.2.2-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 3,436 kB
  • sloc: sh: 9,389; cpp: 7,685; xml: 420; makefile: 380; awk: 40; ansic: 38
file content (78 lines) | stat: -rw-r--r-- 1,777 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/* (C) Marcin Kwadrans <quarter@users.sourceforge.net> */

/*! \file command.h 
	\brief Obsługa poleceń
*/
#ifndef __LW_COMMAND_H
#define __LW_COMMAND_H

#include "symbol.h"
#include "value.h"
#include "wizard.h"

enum LWLink {
LW_LINK_LEFT=0,
LW_LINK_RIGHT=1
};

enum LWResume {
LW_RESUME_IDLE=1,
LW_RESUME_TIMEOUT=2,
LW_RESUME_KEYPRESS=4
};


/*! \struct LWContext
	\brief Struktura kontekstu

	Zawiera wskaźniki do bierzącej instrukcji, stosu i obiektu czarodzieja
	w środowisku z niej dziedziczy.
*/
struct LWContext {
GNode *instrPtr;
GQueue *stack;
GQueue *queue_keys;
LWWizard *wizard;
guint wait_time;
guint wait_for;
gboolean resume;
};

/*! \class LWCommand
	\brief Klasa polecenia

	Abstrakcyjna klasa polecenia. Każde polecenie zdefiniowane
	w środowisku z niej dziedziczy.
*/
class LWCommand: public LWSymbol {
private:
LWValue *arg[2];
guint argc;
void getArguments (LWValue *args[], GQueue *stack);
void pushArguments (LWValue *args[], GQueue *stack);
void freeArguments (LWValue *args[]);
void setReturn (LWValue *value, GQueue *stack);
protected:
LWCommand ();
virtual void checkArgument (guint n, LWValue *value);
virtual void checkArgc (guint argc);
virtual LWValue *execute1 (LWContext *context, guint argc, LWValue *args[]) = 0;
virtual LWValue *resume1 (LWContext *context, guint argc, LWValue *args[]);
virtual void reset1 ();
public:
void reset();
void execute (LWContext *context, gboolean resume);
void setArgument (guint n, LWValue *value);
void setArgc (guint n);
virtual gboolean hasReturn ();
virtual gboolean isLoop();
virtual gboolean isSegment();
virtual gboolean canBeSkiped ();
virtual gboolean requiresLogicBlock ();
virtual guint getPriority ();
virtual LWLink getLinkType ();
gboolean canClone ();
gboolean isCommand ();
};

#endif