Mercurial > LightClone
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 | 1 /* |
2 * Program | |
3 */ | |
4 | |
5 #include "Program.h" | |
6 | |
7 /* | |
8 * Program | |
9 */ | |
10 Program::Program() | |
11 { | |
12 } | |
13 | |
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 | 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 | 30 * SetAction |
31 */ | |
32 void Program::SetAction(uint32 nFunction, uint32 nIndex, uint32 nAction) | |
33 { | |
34 if(nFunction < FunctionCount && nIndex < Function::MaximumInstructionCount) | |
35 { | |
36 kFunction[nFunction].nInstruction[nIndex] = nAction; | |
37 } | |
38 } | |
39 | |
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 | 45 for(uint32 i = 0; i < FunctionCount; ++i) |
46 { | |
47 for(uint32 j = 0; j < Function::MaximumInstructionCount; ++j) | |
48 { | |
49 kFunction[i].nInstruction[j] = Action_Default; | |
50 } | |
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 | 55 * Upload |
56 */ | |
38 | 57 ErrorCode Program::Upload(VirtualMachine& kMachine) const |
36 | 58 { |
59 ErrorCode eCode = Error_Success; | |
60 | |
61 kMachine.Reset(); | |
62 kMachine.ClearMemory(); | |
63 kMachine.RemoveAllFunctions(); | |
64 | |
38 | 65 for(uint32 i = 0; i < FunctionCount && eCode == Error_Success; ++i) |
36 | 66 { |
67 kMachine.AddFunction(i, kFunction[i].CalculateSize()); | |
68 | |
69 uint32 nSize = kMachine.GetFunctionSize(i); | |
70 uint8* pData = kMachine.GetFunctionMemory(i); | |
71 | |
72 eCode = Compile(i, pData, nSize); | |
73 } | |
74 | |
75 return eCode; | |
76 } | |
77 | |
78 /* | |
79 * Compile | |
80 */ | |
38 | 81 ErrorCode Program::Compile(uint32 nIndex, uint8* pData, uint32 nSize) const |
36 | 82 { |
83 for(uint32 i = 0; i < Function::MaximumInstructionCount; ++i) | |
84 { | |
85 const uint32 nAction = kFunction[nIndex].nInstruction[i]; | |
86 | |
87 if(Action_Forward <= nAction && nAction <= Action_Light) | |
88 { | |
89 if(nSize < 2) | |
90 return Error_Fail; | |
91 | |
92 *pData++ = Instruction_Action; | |
93 *pData++ = nAction; | |
94 | |
95 nSize -= 2; | |
96 } | |
97 else | |
98 | |
99 if(Action_FunctionA <= nAction && nAction <= Action_FunctionB) | |
100 { | |
101 if(nSize < 2) | |
102 return Error_Fail; | |
103 | |
104 *pData++ = Instruction_Call; | |
105 *pData++ = nAction - Action_FunctionA + 1; | |
106 | |
107 nSize -= 2; | |
108 } | |
109 } | |
110 | |
111 return Error_Success; | |
112 } |