Wed, 19 Dec 2012 22:01:42 +0200
So it turns out that the functions I thought were taking float are actually taking int. So, with the only reason for float removed, the float type is removed as well. I'd rather have fixed point anyway.
23
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
1 | /* |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
2 | * botc source code |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
3 | * Copyright (C) 2012 Santeri `Dusk` Piippo |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
4 | * All rights reserved. |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
5 | * |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
6 | * Redistribution and use in source and binary forms, with or without |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
7 | * modification, are permitted provided that the following conditions are met: |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
8 | * |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
9 | * 1. Redistributions of source code must retain the above copyright notice, |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
10 | * this list of conditions and the following disclaimer. |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
11 | * 2. Redistributions in binary form must reproduce the above copyright notice, |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
12 | * this list of conditions and the following disclaimer in the documentation |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
13 | * and/or other materials provided with the distribution. |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
14 | * 3. Neither the name of the developer nor the names of its contributors may |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
15 | * be used to endorse or promote products derived from this software without |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
16 | * specific prior written permission. |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
17 | * 4. Redistributions in any form must be accompanied by information on how to |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
18 | * obtain complete source code for the software and any accompanying |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
19 | * software that uses the software. The source code must either be included |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
20 | * in the distribution or be available for no more than the cost of |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
21 | * distribution plus a nominal fee, and must be freely redistributable |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
22 | * under reasonable conditions. For an executable file, complete source |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
23 | * code means the source code for all modules it contains. It does not |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
24 | * include source code for modules or files that typically accompany the |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
25 | * major components of the operating system on which the executable file |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
26 | * runs. |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
27 | * |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
28 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
29 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
30 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
31 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
32 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
33 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
34 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
35 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
36 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
37 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
38 | * POSSIBILITY OF SUCH DAMAGE. |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
39 | */ |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
40 | |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
41 | #define __VARIABLES_CXX__ |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
42 | #include <stdio.h> |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
43 | #include <stdlib.h> |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
44 | #include <string.h> |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
45 | #include "common.h" |
67
0a202714eea4
Some rework on variables
Teemu Piippo <crimsondusk64@gmail.com>
parents:
36
diff
changeset
|
46 | #include "array.h" |
23
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
47 | #include "bots.h" |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
48 | #include "botcommands.h" |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
49 | #include "objwriter.h" |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
50 | #include "stringtable.h" |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
51 | #include "variables.h" |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
52 | #include "scriptreader.h" |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
53 | |
67
0a202714eea4
Some rework on variables
Teemu Piippo <crimsondusk64@gmail.com>
parents:
36
diff
changeset
|
54 | array<ScriptVar> g_GlobalVariables; |
0a202714eea4
Some rework on variables
Teemu Piippo <crimsondusk64@gmail.com>
parents:
36
diff
changeset
|
55 | array<ScriptVar> g_LocalVariables; |
23
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
56 | |
36
a8838b5f1213
Parser can now read expressions 100% properly and can perform variable assignment. I'd call this a milestone!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
32
diff
changeset
|
57 | // ============================================================================ |
23
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
58 | // Tries to declare a new global-scope variable. Returns pointer |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
59 | // to new global variable, NULL if declaration failed. |
67
0a202714eea4
Some rework on variables
Teemu Piippo <crimsondusk64@gmail.com>
parents:
36
diff
changeset
|
60 | ScriptVar* DeclareGlobalVariable (ScriptReader* r, type_e type, str name) { |
0a202714eea4
Some rework on variables
Teemu Piippo <crimsondusk64@gmail.com>
parents:
36
diff
changeset
|
61 | // Unfortunately the VM does not support string variables so yeah. |
0a202714eea4
Some rework on variables
Teemu Piippo <crimsondusk64@gmail.com>
parents:
36
diff
changeset
|
62 | if (type == TYPE_STRING) |
0a202714eea4
Some rework on variables
Teemu Piippo <crimsondusk64@gmail.com>
parents:
36
diff
changeset
|
63 | r->ParserError ("variables cannot be string\n"); |
0a202714eea4
Some rework on variables
Teemu Piippo <crimsondusk64@gmail.com>
parents:
36
diff
changeset
|
64 | |
0a202714eea4
Some rework on variables
Teemu Piippo <crimsondusk64@gmail.com>
parents:
36
diff
changeset
|
65 | // Check that the variable is valid |
36
a8838b5f1213
Parser can now read expressions 100% properly and can perform variable assignment. I'd call this a milestone!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
32
diff
changeset
|
66 | if (FindCommand (name)) |
a8838b5f1213
Parser can now read expressions 100% properly and can perform variable assignment. I'd call this a milestone!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
32
diff
changeset
|
67 | r->ParserError ("name of variable-to-be `%s` conflicts with that of a command", name.chars()); |
a8838b5f1213
Parser can now read expressions 100% properly and can perform variable assignment. I'd call this a milestone!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
32
diff
changeset
|
68 | |
a8838b5f1213
Parser can now read expressions 100% properly and can perform variable assignment. I'd call this a milestone!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
32
diff
changeset
|
69 | if (IsKeyword (name)) |
a8838b5f1213
Parser can now read expressions 100% properly and can perform variable assignment. I'd call this a milestone!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
32
diff
changeset
|
70 | r->ParserError ("name of variable-to-be `%s` is a keyword", name.chars()); |
a8838b5f1213
Parser can now read expressions 100% properly and can perform variable assignment. I'd call this a milestone!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
32
diff
changeset
|
71 | |
67
0a202714eea4
Some rework on variables
Teemu Piippo <crimsondusk64@gmail.com>
parents:
36
diff
changeset
|
72 | if (g_GlobalVariables.size() >= MAX_SCRIPT_VARIABLES) |
23
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
73 | r->ParserError ("too many global variables!"); |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
74 | |
67
0a202714eea4
Some rework on variables
Teemu Piippo <crimsondusk64@gmail.com>
parents:
36
diff
changeset
|
75 | for (uint i = 0; i < g_GlobalVariables.size(); i++) |
0a202714eea4
Some rework on variables
Teemu Piippo <crimsondusk64@gmail.com>
parents:
36
diff
changeset
|
76 | if (g_GlobalVariables[i].name == name) |
0a202714eea4
Some rework on variables
Teemu Piippo <crimsondusk64@gmail.com>
parents:
36
diff
changeset
|
77 | r->ParserError ("attempted redeclaration of global variable `%s`", name.chars()); |
23
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
78 | |
67
0a202714eea4
Some rework on variables
Teemu Piippo <crimsondusk64@gmail.com>
parents:
36
diff
changeset
|
79 | ScriptVar g; |
0a202714eea4
Some rework on variables
Teemu Piippo <crimsondusk64@gmail.com>
parents:
36
diff
changeset
|
80 | g.index = g_GlobalVariables.size(); |
0a202714eea4
Some rework on variables
Teemu Piippo <crimsondusk64@gmail.com>
parents:
36
diff
changeset
|
81 | g.name = name; |
0a202714eea4
Some rework on variables
Teemu Piippo <crimsondusk64@gmail.com>
parents:
36
diff
changeset
|
82 | g.statename = ""; |
0a202714eea4
Some rework on variables
Teemu Piippo <crimsondusk64@gmail.com>
parents:
36
diff
changeset
|
83 | g.value = 0; |
0a202714eea4
Some rework on variables
Teemu Piippo <crimsondusk64@gmail.com>
parents:
36
diff
changeset
|
84 | g.type = type; |
0a202714eea4
Some rework on variables
Teemu Piippo <crimsondusk64@gmail.com>
parents:
36
diff
changeset
|
85 | |
0a202714eea4
Some rework on variables
Teemu Piippo <crimsondusk64@gmail.com>
parents:
36
diff
changeset
|
86 | g_GlobalVariables << g; |
0a202714eea4
Some rework on variables
Teemu Piippo <crimsondusk64@gmail.com>
parents:
36
diff
changeset
|
87 | return &g_GlobalVariables[g.index]; |
23
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
88 | } |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
89 | |
36
a8838b5f1213
Parser can now read expressions 100% properly and can perform variable assignment. I'd call this a milestone!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
32
diff
changeset
|
90 | // ============================================================================ |
23
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
91 | // Find a global variable by name |
24
7dcc8419dbdb
Variables can now be assigned values, unfortunately not at top level.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
23
diff
changeset
|
92 | ScriptVar* FindGlobalVariable (str name) { |
67
0a202714eea4
Some rework on variables
Teemu Piippo <crimsondusk64@gmail.com>
parents:
36
diff
changeset
|
93 | for (uint i = 0; i < g_GlobalVariables.size(); i++) { |
0a202714eea4
Some rework on variables
Teemu Piippo <crimsondusk64@gmail.com>
parents:
36
diff
changeset
|
94 | ScriptVar* g = &g_GlobalVariables[i]; |
0a202714eea4
Some rework on variables
Teemu Piippo <crimsondusk64@gmail.com>
parents:
36
diff
changeset
|
95 | if (g->name == name) |
23
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
96 | return g; |
24
7dcc8419dbdb
Variables can now be assigned values, unfortunately not at top level.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
23
diff
changeset
|
97 | } |
23
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
98 | |
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
99 | return NULL; |
24
7dcc8419dbdb
Variables can now be assigned values, unfortunately not at top level.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
23
diff
changeset
|
100 | } |
23
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
101 | |
36
a8838b5f1213
Parser can now read expressions 100% properly and can perform variable assignment. I'd call this a milestone!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
32
diff
changeset
|
102 | // ============================================================================ |
a8838b5f1213
Parser can now read expressions 100% properly and can perform variable assignment. I'd call this a milestone!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
32
diff
changeset
|
103 | // Count all declared global variables |
67
0a202714eea4
Some rework on variables
Teemu Piippo <crimsondusk64@gmail.com>
parents:
36
diff
changeset
|
104 | uint CountGlobalVars () { |
0a202714eea4
Some rework on variables
Teemu Piippo <crimsondusk64@gmail.com>
parents:
36
diff
changeset
|
105 | return g_GlobalVariables.size(); |
23
ba351235688e
Forgot the actual new code files out of previous commit
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
106 | } |