Rev 7567 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
7564 | pavelyakov | 1 | |
7565 | pavelyakov | 2 | :dword std_exit() |
7567 | pavelyakov | 3 | { |
4 | con_exit stdcall (1); |
||
5 | ExitProcess(); |
||
6 | } |
||
7 | |||
8 | |||
7564 | pavelyakov | 9 | { |
10 | dword name = 0; |
||
11 | dword value = 0; |
||
12 | WHILE(count > 0) |
||
7565 | pavelyakov | 13 | { |
7564 | pavelyakov | 14 | name = DSDWORD[args]; |
15 | IF (DSDWORD[name+4] == TSym) name = DSDWORD[name]; |
||
7744 | pavelyakov | 16 | ELSE |
17 | { |
||
18 | con_printf stdcall ("Error variable!"); |
||
19 | ExitProcess(); |
||
20 | } |
||
21 | args += 4; |
||
7564 | pavelyakov | 22 | value = DSDWORD[args]; |
23 | args += 4; |
||
24 | variables.set(name, value); |
||
25 | count -= 2; |
||
7565 | pavelyakov | 26 | } |
7564 | pavelyakov | 27 | } |
28 | |||
29 | |||
30 | { |
||
31 | dword name = 0; |
||
7744 | pavelyakov | 32 | IF(!count) RETURN 0; |
7565 | pavelyakov | 33 | name = DSDWORD[args]; |
7744 | pavelyakov | 34 | IF (DSDWORD[name+4] != TSym) |
35 | { |
||
36 | con_printf stdcall ("Error variable!"); |
||
37 | ExitProcess(); |
||
38 | } |
||
39 | RETURN variables.get(DSDWORD[name]); |
||
40 | } |
||
7564 | pavelyakov | 41 | |
42 | |||
7563 | pavelyakov | 43 | { |
44 | dword tmp = 0; |
||
45 | IF(!count) RETURN ""; |
||
7565 | pavelyakov | 46 | tmp = malloc(15); |
7563 | pavelyakov | 47 | itoa_(tmp,DSDWORD[args]); |
48 | RETURN tmp; |
||
49 | } |
||
50 | |||
51 | |||
7565 | pavelyakov | 52 | :dword std_add(dword count, args) |
7563 | pavelyakov | 53 | { |
54 | dword ret = 0; |
||
55 | WHILE(count) |
||
56 | { |
||
7562 | pavelyakov | 57 | ret += DSDWORD[args]; |
7563 | pavelyakov | 58 | args+=4; |
59 | count--; |
||
60 | } |
||
7562 | pavelyakov | 61 | RETURN ret; |
7563 | pavelyakov | 62 | } |
63 | |||
64 | |||
65 | { |
||
66 | dword ret = 0; |
||
67 | IF(count) |
||
68 | { |
||
69 | ret = DSDWORD[args]; |
||
70 | count--; |
||
71 | args+=4; |
||
72 | } |
||
7562 | pavelyakov | 73 | WHILE(count) |
7563 | pavelyakov | 74 | { |
7562 | pavelyakov | 75 | ret -= DSDWORD[args]; |
7563 | pavelyakov | 76 | args += 4; |
7565 | pavelyakov | 77 | count--; |
78 | } |
||
79 | RETURN ret; |
||
80 | } |
||
81 | |||
82 | |||
83 | :dword std_print(dword count, args) |
||
84 | { |
||
85 | dword ret = 0; |
||
86 | dword arg = 0; |
||
7744 | pavelyakov | 87 | dword val = 0; |
88 | consoleInit(); |
||
7566 | pavelyakov | 89 | IF (!count) con_printf stdcall ("nil"); |
7744 | pavelyakov | 90 | WHILE(count) |
7565 | pavelyakov | 91 | { |
92 | arg = DSDWORD[args]; |
||
7744 | pavelyakov | 93 | REPEAT1: |
94 | IF (DSDWORD[arg+4] == TInt) val = itoa(DSDWORD[arg]); |
||
95 | ELSE IF (DSDWORD[arg+4] == TStr) val = DSDWORD[arg]; |
||
96 | ELSE IF (DSDWORD[arg+4] == TSym) |
||
97 | { |
||
98 | arg = std_get(1, args); |
||
99 | goto REPEAT1; |
||
100 | } |
||
101 | IF(!arg) con_printf stdcall ("nil"); |
||
102 | ELSE con_printf stdcall (val); |
||
103 | args+=4; |
||
7563 | pavelyakov | 104 | count--; |
105 | } |
||
7562 | pavelyakov | 106 | RETURN ret; |
7563 | pavelyakov | 107 | } |
108 | |||
109 | |||
7744 | pavelyakov | 110 | { |
7565 | pavelyakov | 111 | dword ret = 0; |
7744 | pavelyakov | 112 | dword arg = 0; |
113 | dword val = 0; |
||
114 | ret = malloc(TLen); |
||
115 | DSDWORD[ret] = 0; |
||
116 | DSDWORD[ret+4] = TInt; |
||
117 | WHILE(count) |
||
7565 | pavelyakov | 118 | { |
119 | arg = DSDWORD[args]; |
||
7744 | pavelyakov | 120 | REPEAT1: |
121 | IF (DSDWORD[arg+4] == TStr) val = DSDWORD[arg]; |
||
122 | ELSE IF (DSDWORD[arg+4] == TSym) |
||
123 | { |
||
124 | arg = std_get(1, args); |
||
125 | goto REPEAT1; |
||
126 | } |
||
127 | ELSE return ret; |
||
128 | DSDWORD[ret] += DSDWORD[arg+8]; |
||
129 | args+=4; |
||
7565 | pavelyakov | 130 | count--; |
131 | } |
||
132 | RETURN ret; |
||
7744 | pavelyakov | 133 | } |
134 | |||
135 | |||
136 | { |
||
137 | dword ret = 0; |
||
138 | dword arg = 0; |
||
139 | dword val = 0; |
||
140 | dword tmp = 0; |
||
141 | dword x = 0; |
||
142 | dword y = 0; |
||
143 | byte start = 0; |
||
144 | ret = malloc(TLen); |
||
145 | DSDWORD[ret] = 0; |
||
146 | DSDWORD[ret+4] = TInt; |
||
147 | IF (!count) return ret; |
||
148 | while(count) |
||
149 | { |
||
150 | arg = DSDWORD[args]; |
||
151 | REPEAT2: |
||
152 | IF (DSDWORD[arg+4] == TSym) |
||
153 | { |
||
154 | arg = std_get(1, args); |
||
155 | goto REPEAT2; |
||
156 | } |
||
157 | IF (!start) |
||
158 | { |
||
159 | start = 1; |
||
160 | tmp = arg; |
||
161 | args+=4; |
||
162 | count--; |
||
163 | continue; |
||
164 | } |
||
165 | IF (DSDWORD[tmp+4] != DSDWORD[arg+4]) return ret; |
||
166 | IF (DSDWORD[tmp+4] == TInt) |
||
167 | { |
||
168 | IF (DSDWORD[tmp] != DSDWORD[arg]) return ret; |
||
169 | } |
||
170 | ELSE IF (DSDWORD[tmp+4] == TStr) |
||
171 | { |
||
172 | /*IF (!DSDWORD[tmp+8]) DSDWORD[tmp+8] = crc32(DSDWORD[tmp]); |
||
173 | IF (!DSDWORD[arg+8]) DSDWORD[arg+8] = crc32(DSDWORD[arg]); |
||
174 | IF (DSDWORD[tmp+8] != DSDWORD[arg+8]) return ret;*/ |
||
175 | IF (strcmp(DSDWORD[tmp], DSDWORD[arg])) return ret; |
||
176 | } |
||
177 | args+=4; |
||
178 | count--; |
||
179 | } |
||
180 | DSDWORD[ret] = 1; |
||
181 | return ret; |
||
182 | } |
||
183 | |||
184 | |||
185 | { |
||
186 | dword buf = 0; |
||
187 | consoleInit(); |
||
188 | buf = malloc(100); |
||
189 | IF (count) std_print(count, args); |
||
190 | con_gets stdcall(buf, 100); |
||
7565 | pavelyakov | 191 | EDX = malloc(TLen); |
7744 | pavelyakov | 192 | DSDWORD[EDX] = buf; |
193 | DSDWORD[EDX+4] = TStr; |
||
194 | RETURN EDX; |
||
195 | } |
||
7565 | pavelyakov | 196 | |
197 | |||
7563 | pavelyakov | 198 | { |
199 | functions.init(100); |
||
200 | |||
201 | |||
202 | functions.set("print", #std_print); |
||
7565 | pavelyakov | 203 | functions.set("input", #std_input); |
204 | |||
7563 | pavelyakov | 205 | |
206 | functions.set("str", #std_str); |
||
207 | functions.set("len", #std_len); |
||
7744 | pavelyakov | 208 | |
7563 | pavelyakov | 209 | |
210 | functions.set("exit", #std_exit); |
||
7567 | pavelyakov | 211 | |
7563 | pavelyakov | 212 | |
213 | functions.set("+", #std_add); |
||
214 | functions.set("-", #std_sub); |
||
215 | functions.set("==", #std_cmp); |
||
7744 | pavelyakov | 216 | |
7563 | pavelyakov | 217 | |
7564 | pavelyakov | 218 | functions.set("set", #std_set); |
219 | functions.set("get", #std_get); |
||
220 | |||
221 | |||
7563 | pavelyakov | 222 | } |
223 | |||
224 | |||
225 | { |
||
226 | functions.get(name); |
||
227 | IF(EAX) RETURN EAX(count, args); |
||
7564 | pavelyakov | 228 | RETURN 0; |
7563 | pavelyakov | 229 | } |
7564 | pavelyakov | 230 |