| 45 #include "common.h" |
45 #include "common.h" |
| 46 #include "scriptreader.h" |
46 #include "scriptreader.h" |
| 47 #include "str.h" |
47 #include "str.h" |
| 48 #include "commands.h" |
48 #include "commands.h" |
| 49 |
49 |
| |
50 // ============================================================================ |
| |
51 // Reads command definitions from commands.def and stores them to memory. |
| 50 void ReadCommands () { |
52 void ReadCommands () { |
| 51 ScriptReader* r = new ScriptReader ("commands.def"); |
53 ScriptReader* r = new ScriptReader ("commands.def"); |
| 52 g_CommDef = NULL; |
54 g_CommDef = NULL; |
| 53 CommandDef* curdef = g_CommDef; |
55 CommandDef* curdef = g_CommDef; |
| 54 unsigned int numCommDefs = 0; |
56 unsigned int numCommDefs = 0; |
| 140 curdef = comm; |
144 curdef = comm; |
| 141 } |
145 } |
| 142 numCommDefs++; |
146 numCommDefs++; |
| 143 } |
147 } |
| 144 |
148 |
| |
149 if (!numCommDefs) |
| |
150 r->ParserError ("no commands defined!\n"); |
| |
151 |
| 145 r->CloseFile (); |
152 r->CloseFile (); |
| 146 delete r; |
153 delete r; |
| 147 |
|
| 148 if (!numCommDefs) |
|
| 149 error ("no commands defined!\n"); |
|
| 150 printf ("%d command definitions read.\n", numCommDefs); |
154 printf ("%d command definitions read.\n", numCommDefs); |
| 151 } |
155 } |
| 152 |
156 |
| |
157 // ============================================================================ |
| |
158 // Get command type by name |
| 153 int GetCommandType (str t) { |
159 int GetCommandType (str t) { |
| 154 // "float" is for now just int. |
160 // "float" is for now just int. |
| 155 // TODO: find out how BotScript floats work |
161 // TODO: find out how BotScript floats work |
| 156 // (are they real floats or fixed? how are they |
162 // (are they real floats or fixed? how are they |
| 157 // stored?) and add proper floating point support. |
163 // stored?) and add proper floating point number support. |
| 158 // NOTE: Also, shouldn't use RETURNVAL for data types.. |
|
| 159 t = t.tolower(); |
164 t = t.tolower(); |
| 160 return !t.compare ("int") ? TYPE_INT : |
165 return !t.compare ("int") ? TYPE_INT : |
| 161 !t.compare ("float") ? TYPE_INT : |
166 !t.compare ("float") ? TYPE_INT : |
| 162 !t.compare ("str") ? TYPE_STRING : |
167 !t.compare ("str") ? TYPE_STRING : |
| 163 !t.compare ("void") ? TYPE_VOID : |
168 !t.compare ("void") ? TYPE_VOID : |
| 164 !t.compare ("bool") ? TYPE_INT : -1; |
169 !t.compare ("bool") ? TYPE_INT : -1; |
| 165 } |
170 } |
| 166 |
171 |
| 167 // Inverse operation |
172 // ============================================================================ |
| |
173 // Inverse operation - type name by value |
| 168 str GetReturnTypeName (int r) { |
174 str GetReturnTypeName (int r) { |
| 169 switch (r) { |
175 switch (r) { |
| 170 case RETURNVAL_INT: return "int"; break; |
176 case RETURNVAL_INT: return "int"; break; |
| 171 case RETURNVAL_STRING: return "str"; break; |
177 case RETURNVAL_STRING: return "str"; break; |
| 172 case RETURNVAL_VOID: return "void"; break; |
178 case RETURNVAL_VOID: return "void"; break; |
| 174 } |
180 } |
| 175 |
181 |
| 176 return ""; |
182 return ""; |
| 177 } |
183 } |
| 178 |
184 |
| |
185 // ============================================================================ |
| |
186 // Finds a command by name |
| 179 CommandDef* FindCommand (str fname) { |
187 CommandDef* FindCommand (str fname) { |
| 180 CommandDef* comm; |
188 CommandDef* comm; |
| 181 ITERATE_COMMANDS (comm) { |
189 ITERATE_COMMANDS (comm) { |
| 182 if (!fname.icompare (comm->name)) |
190 if (!fname.icompare (comm->name)) |
| 183 return comm; |
191 return comm; |
| 184 } |
192 } |
| 185 |
193 |
| 186 return NULL; |
194 return NULL; |
| 187 } |
195 } |
| 188 |
196 |
| |
197 // ============================================================================ |
| |
198 // Returns the prototype of the command |
| 189 str GetCommandPrototype (CommandDef* comm) { |
199 str GetCommandPrototype (CommandDef* comm) { |
| 190 str text; |
200 str text; |
| 191 text += GetReturnTypeName (comm->returnvalue); |
201 text += GetReturnTypeName (comm->returnvalue); |
| 192 text += ' '; |
202 text += ' '; |
| 193 text += comm->name; |
203 text += comm->name; |