annotate LightClone/Source/Program.cpp @ 38:2caa7c7e2cb5

Refactored program; Added dialog
author koryspansel
date Wed, 21 Sep 2011 21:40:19 -0700
parents 58a16d529d95
children 8cefb65577cc
rev   line source
36
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
1 /*
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
2 * Program
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
3 */
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
4
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
5 #include "Program.h"
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
6
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
7 /*
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
8 * Program
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
9 */
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
10 Program::Program()
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
11 {
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
12 }
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
13
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
14 /*
37
58a16d529d95 Refactoring code and adding events for drag and drop
koryspansel <koryspansel@bendbroadband.com>
parents: 36
diff changeset
15 * Initialize
58a16d529d95 Refactoring code and adding events for drag and drop
koryspansel <koryspansel@bendbroadband.com>
parents: 36
diff changeset
16 */
58a16d529d95 Refactoring code and adding events for drag and drop
koryspansel <koryspansel@bendbroadband.com>
parents: 36
diff changeset
17 ErrorCode Program::Initialize()
58a16d529d95 Refactoring code and adding events for drag and drop
koryspansel <koryspansel@bendbroadband.com>
parents: 36
diff changeset
18 {
38
2caa7c7e2cb5 Refactored program; Added dialog
koryspansel
parents: 37
diff changeset
19 return Clear(), Error_Success;
37
58a16d529d95 Refactoring code and adding events for drag and drop
koryspansel <koryspansel@bendbroadband.com>
parents: 36
diff changeset
20 }
58a16d529d95 Refactoring code and adding events for drag and drop
koryspansel <koryspansel@bendbroadband.com>
parents: 36
diff changeset
21
58a16d529d95 Refactoring code and adding events for drag and drop
koryspansel <koryspansel@bendbroadband.com>
parents: 36
diff changeset
22 /*
58a16d529d95 Refactoring code and adding events for drag and drop
koryspansel <koryspansel@bendbroadband.com>
parents: 36
diff changeset
23 * Terminate
58a16d529d95 Refactoring code and adding events for drag and drop
koryspansel <koryspansel@bendbroadband.com>
parents: 36
diff changeset
24 */
58a16d529d95 Refactoring code and adding events for drag and drop
koryspansel <koryspansel@bendbroadband.com>
parents: 36
diff changeset
25 void Program::Terminate()
58a16d529d95 Refactoring code and adding events for drag and drop
koryspansel <koryspansel@bendbroadband.com>
parents: 36
diff changeset
26 {
58a16d529d95 Refactoring code and adding events for drag and drop
koryspansel <koryspansel@bendbroadband.com>
parents: 36
diff changeset
27 }
58a16d529d95 Refactoring code and adding events for drag and drop
koryspansel <koryspansel@bendbroadband.com>
parents: 36
diff changeset
28
58a16d529d95 Refactoring code and adding events for drag and drop
koryspansel <koryspansel@bendbroadband.com>
parents: 36
diff changeset
29 /*
38
2caa7c7e2cb5 Refactored program; Added dialog
koryspansel
parents: 37
diff changeset
30 * SetAction
2caa7c7e2cb5 Refactored program; Added dialog
koryspansel
parents: 37
diff changeset
31 */
2caa7c7e2cb5 Refactored program; Added dialog
koryspansel
parents: 37
diff changeset
32 void Program::SetAction(uint32 nFunction, uint32 nIndex, uint32 nAction)
2caa7c7e2cb5 Refactored program; Added dialog
koryspansel
parents: 37
diff changeset
33 {
2caa7c7e2cb5 Refactored program; Added dialog
koryspansel
parents: 37
diff changeset
34 if(nFunction < FunctionCount && nIndex < Function::MaximumInstructionCount)
2caa7c7e2cb5 Refactored program; Added dialog
koryspansel
parents: 37
diff changeset
35 {
2caa7c7e2cb5 Refactored program; Added dialog
koryspansel
parents: 37
diff changeset
36 kFunction[nFunction].nInstruction[nIndex] = nAction;
2caa7c7e2cb5 Refactored program; Added dialog
koryspansel
parents: 37
diff changeset
37 }
2caa7c7e2cb5 Refactored program; Added dialog
koryspansel
parents: 37
diff changeset
38 }
2caa7c7e2cb5 Refactored program; Added dialog
koryspansel
parents: 37
diff changeset
39
2caa7c7e2cb5 Refactored program; Added dialog
koryspansel
parents: 37
diff changeset
40 /*
37
58a16d529d95 Refactoring code and adding events for drag and drop
koryspansel <koryspansel@bendbroadband.com>
parents: 36
diff changeset
41 * Clear
58a16d529d95 Refactoring code and adding events for drag and drop
koryspansel <koryspansel@bendbroadband.com>
parents: 36
diff changeset
42 */
58a16d529d95 Refactoring code and adding events for drag and drop
koryspansel <koryspansel@bendbroadband.com>
parents: 36
diff changeset
43 void Program::Clear()
58a16d529d95 Refactoring code and adding events for drag and drop
koryspansel <koryspansel@bendbroadband.com>
parents: 36
diff changeset
44 {
38
2caa7c7e2cb5 Refactored program; Added dialog
koryspansel
parents: 37
diff changeset
45 for(uint32 i = 0; i < FunctionCount; ++i)
2caa7c7e2cb5 Refactored program; Added dialog
koryspansel
parents: 37
diff changeset
46 {
2caa7c7e2cb5 Refactored program; Added dialog
koryspansel
parents: 37
diff changeset
47 for(uint32 j = 0; j < Function::MaximumInstructionCount; ++j)
2caa7c7e2cb5 Refactored program; Added dialog
koryspansel
parents: 37
diff changeset
48 {
2caa7c7e2cb5 Refactored program; Added dialog
koryspansel
parents: 37
diff changeset
49 kFunction[i].nInstruction[j] = Action_Default;
2caa7c7e2cb5 Refactored program; Added dialog
koryspansel
parents: 37
diff changeset
50 }
2caa7c7e2cb5 Refactored program; Added dialog
koryspansel
parents: 37
diff changeset
51 }
37
58a16d529d95 Refactoring code and adding events for drag and drop
koryspansel <koryspansel@bendbroadband.com>
parents: 36
diff changeset
52 }
58a16d529d95 Refactoring code and adding events for drag and drop
koryspansel <koryspansel@bendbroadband.com>
parents: 36
diff changeset
53
58a16d529d95 Refactoring code and adding events for drag and drop
koryspansel <koryspansel@bendbroadband.com>
parents: 36
diff changeset
54 /*
36
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
55 * Upload
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
56 */
38
2caa7c7e2cb5 Refactored program; Added dialog
koryspansel
parents: 37
diff changeset
57 ErrorCode Program::Upload(VirtualMachine& kMachine) const
36
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
58 {
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
59 ErrorCode eCode = Error_Success;
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
60
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
61 kMachine.Reset();
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
62 kMachine.ClearMemory();
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
63 kMachine.RemoveAllFunctions();
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
64
38
2caa7c7e2cb5 Refactored program; Added dialog
koryspansel
parents: 37
diff changeset
65 for(uint32 i = 0; i < FunctionCount && eCode == Error_Success; ++i)
36
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
66 {
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
67 kMachine.AddFunction(i, kFunction[i].CalculateSize());
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
68
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
69 uint32 nSize = kMachine.GetFunctionSize(i);
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
70 uint8* pData = kMachine.GetFunctionMemory(i);
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
71
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
72 eCode = Compile(i, pData, nSize);
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
73 }
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
74
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
75 return eCode;
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
76 }
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
77
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
78 /*
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
79 * Compile
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
80 */
38
2caa7c7e2cb5 Refactored program; Added dialog
koryspansel
parents: 37
diff changeset
81 ErrorCode Program::Compile(uint32 nIndex, uint8* pData, uint32 nSize) const
36
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
82 {
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
83 for(uint32 i = 0; i < Function::MaximumInstructionCount; ++i)
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
84 {
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
85 const uint32 nAction = kFunction[nIndex].nInstruction[i];
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
86
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
87 if(Action_Forward <= nAction && nAction <= Action_Light)
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
88 {
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
89 if(nSize < 2)
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
90 return Error_Fail;
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
91
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
92 *pData++ = Instruction_Action;
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
93 *pData++ = nAction;
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
94
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
95 nSize -= 2;
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
96 }
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
97 else
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
98
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
99 if(Action_FunctionA <= nAction && nAction <= Action_FunctionB)
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
100 {
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
101 if(nSize < 2)
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
102 return Error_Fail;
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
103
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
104 *pData++ = Instruction_Call;
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
105 *pData++ = nAction - Action_FunctionA + 1;
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
106
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
107 nSize -= 2;
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
108 }
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
109 }
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
110
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
111 return Error_Success;
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
112 }