Mercurial > repos > rhope
annotate number.c @ 75:0083b2f7b3c7
Partially working implementation of List. Modified build scripts to allow use of other compilers. Fixed some bugs involving method implementations on different types returning different numbers of outputs. Added Fold to the 'builtins' in the comipler.
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Tue, 06 Jul 2010 07:52:59 -0400 |
parents | 429b5f441381 |
children |
rev | line source |
---|---|
3
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
1 #include <math.h> |
0 | 2 #include <stdlib.h> |
3 #include "datum.h" | |
4 #include "structs.h" | |
5 #ifdef SEGA | |
6 long atol(const char * string) | |
7 { | |
8 int i = 0; | |
9 BOOL neg_flag = FALSE; | |
10 long value = 0.0; | |
11 while(string[i] != '\0') | |
12 { | |
13 if(string[i] >= '0' && string[i] <= '9') | |
14 { | |
15 value *= 10; | |
16 value += string[i] - '0'; | |
17 } | |
18 else if(string[i] == '-') | |
19 neg_flag = TRUE; | |
20 else if(string[i] != ' ' && string[i] != '\n' && string[i] != '\r' && string[i] != '\t') | |
21 { | |
22 break; | |
23 } | |
24 ++i; | |
25 } | |
26 if(neg_flag) | |
27 value = 0-value; | |
28 return value; | |
29 } | |
30 #endif | |
31 | |
32 int vis_stringtoint(datum ** inputlist, queue_entry * worker_entry) | |
33 { | |
34 datum * output; | |
35 int result = atol(inputlist[0]->c.generic.data); | |
36 VIS_EnterCriticalSection(inputlist[0]->lock); | |
37 if(inputlist[0]->ref_count == 1) | |
38 { | |
39 VIS_LeaveCriticalSection(inputlist[0]->lock); | |
40 VIS_FREE(inputlist[0]->c.generic.data, "<String@Whole Number, Freeing string for reuse as integer object"); | |
41 inputlist[0]->company = worker_entry->instance->def->program->companylist + BUILTIN_TYPE_WHOLE; | |
42 inputlist[0]->union_type = 2; | |
43 } | |
44 else | |
45 { | |
46 VIS_LeaveCriticalSection(inputlist[0]->lock); | |
47 release_ref(inputlist[0]); | |
48 inputlist[0] = new_datum(BUILTIN_TYPE_WHOLE, 2, 0, worker_entry->instance->def->program); | |
49 } | |
50 inputlist[0]->c.integers.num_a = result; | |
51 return 0; | |
52 } | |
53 | |
54 int vis_whole_fromhex(datum ** inputlist, queue_entry * worker_entry) | |
55 { | |
56 int i; | |
57 int result = 0; | |
58 char * data = inputlist[0]->c.generic.data; | |
59 for(i = 0; i < inputlist[0]->c.generic.len-1; ++i) | |
60 { | |
61 result <<= 4; | |
62 if(data[i] >= '0' && data[i] <= '9') | |
63 result |= data[i] - '0'; | |
64 else if(data[i] >= 'A' && data[i] <= 'F') | |
65 result |= data[i] - 'A' + 0xA; | |
66 else if(data[i] >= 'a' && data[i] <= 'f') | |
67 result |= data[i] - 'a' + 0xA; | |
68 } | |
69 release_ref(inputlist[0]); | |
70 inputlist[0] = new_datum(BUILTIN_TYPE_WHOLE, 2, 0, worker_entry->instance->def->program); | |
71 inputlist[0]->c.integers.num_a = result; | |
72 return 0; | |
73 } | |
74 | |
75 int vis_whole_add(datum ** inputlist, queue_entry * worker_entry) | |
76 { | |
77 datum * output; | |
78 int ref_count; | |
79 //VIS_PROFILE_START(PROF_ADDWHOLE); | |
80 VIS_EnterCriticalSection(inputlist[0]->lock); | |
81 ref_count = inputlist[0]->ref_count; | |
82 VIS_LeaveCriticalSection(inputlist[0]->lock); | |
83 if(ref_count == 1) | |
84 output = inputlist[0]; | |
85 else | |
86 { | |
87 VIS_EnterCriticalSection(inputlist[1]->lock); | |
88 ref_count = inputlist[1]->ref_count; | |
89 VIS_LeaveCriticalSection(inputlist[1]->lock); | |
90 if(ref_count == 1) | |
91 output = inputlist[1]; | |
92 else | |
93 output = new_datum(BUILTIN_TYPE_WHOLE, 2, 0, worker_entry->instance->def->program); | |
94 } | |
95 | |
96 output->c.integers.num_a = inputlist[0]->c.integers.num_a + inputlist[1]->c.integers.num_a; | |
97 if(output == inputlist[0]) | |
98 release_ref(inputlist[1]); | |
99 else if(output == inputlist[1]) | |
100 release_ref(inputlist[0]); | |
101 else | |
102 { | |
103 release_ref(inputlist[0]); | |
104 release_ref(inputlist[1]); | |
105 } | |
106 inputlist[0] = output; | |
107 //VIS_PROFILE_END(PROF_ADDWHOLE); | |
108 return 0; | |
109 } | |
110 | |
111 int vis_whole_subtract(datum ** inputlist, queue_entry * worker_entry) | |
112 { | |
113 datum * output; | |
114 output = new_datum(BUILTIN_TYPE_WHOLE, 2, 0, worker_entry->instance->def->program); | |
115 output->c.integers.num_a = inputlist[0]->c.integers.num_a - inputlist[1]->c.integers.num_a; | |
116 release_ref(inputlist[0]); | |
117 release_ref(inputlist[1]); | |
118 inputlist[0] = output; | |
119 return 0; | |
120 } | |
121 | |
122 int vis_whole_mult(datum ** inputlist, queue_entry * worker_entry) | |
123 { | |
124 inputlist[0] = copy_datum(inputlist[0], 0); | |
125 inputlist[0]->c.integers.num_a *= inputlist[1]->c.integers.num_a; | |
126 release_ref(inputlist[1]); | |
127 return 0; | |
128 } | |
129 | |
130 int vis_whole_div(datum ** inputlist, queue_entry * worker_entry) | |
131 { | |
132 inputlist[0] = copy_datum(inputlist[0], 0); | |
133 inputlist[0]->c.integers.num_a /= inputlist[1]->c.integers.num_a; | |
134 release_ref(inputlist[1]); | |
135 return 0; | |
136 } | |
137 | |
138 int vis_wholeequal(datum ** inputlist, queue_entry * worker_entry) | |
139 { | |
140 datum * output; | |
141 //VIS_PROFILE_START(PROF_EQUALWHOLE); | |
142 output = new_datum(BUILTIN_TYPE_YESNO, 2, 0, worker_entry->instance->def->program); | |
143 datum_set_yesno(output, inputlist[0]->c.integers.num_a == inputlist[1]->c.integers.num_a); | |
144 release_ref(inputlist[0]); | |
145 release_ref(inputlist[1]); | |
146 //VIS_PROFILE_END(PROF_EQUALWHOLE); | |
147 inputlist[0] = output; | |
148 return 0; | |
149 } | |
150 | |
151 int vis_whole_or(datum ** inputlist, queue_entry * worker_entry) | |
152 { | |
153 inputlist[0] = copy_datum(inputlist[0], 0); | |
154 inputlist[0]->c.integers.num_a |= inputlist[1]->c.integers.num_a; | |
155 release_ref(inputlist[1]); | |
156 return 0; | |
157 } | |
158 | |
159 int vis_whole_and(datum ** inputlist, queue_entry * worker_entry) | |
160 { | |
161 inputlist[0] = copy_datum(inputlist[0], 0); | |
162 inputlist[0]->c.integers.num_a &= inputlist[1]->c.integers.num_a; | |
163 release_ref(inputlist[1]); | |
164 return 0; | |
165 } | |
166 | |
167 int vis_whole_lsh(datum ** inputlist, queue_entry * worker_entry) | |
168 { | |
169 inputlist[0] = copy_datum(inputlist[0], 0); | |
170 inputlist[0]->c.integers.num_a <<= inputlist[1]->c.integers.num_a; | |
171 release_ref(inputlist[1]); | |
172 return 0; | |
173 } | |
174 | |
175 int vis_whole_rsh(datum ** inputlist, queue_entry * worker_entry) | |
176 { | |
177 inputlist[0] = copy_datum(inputlist[0], 0); | |
178 inputlist[0]->c.integers.num_a >>= inputlist[1]->c.integers.num_a; | |
179 release_ref(inputlist[1]); | |
180 return 0; | |
181 } | |
182 | |
46 | 183 int vis_whole_modulus(datum ** inputlist, queue_entry * worker_entry) |
184 { | |
185 inputlist[0] = copy_datum(inputlist[0], 0); | |
186 inputlist[0]->c.integers.num_a %= inputlist[1]->c.integers.num_a; | |
187 release_ref(inputlist[1]); | |
188 return 0; | |
189 } | |
190 | |
0 | 191 |
192 int vis_greaterint(datum ** inputlist, queue_entry * worker_entry) | |
193 { | |
194 int result; | |
195 if(inputlist[0]->c.integers.num_a > inputlist[1]->c.integers.num_a) | |
196 result = 1; | |
197 else | |
198 result = 0; | |
199 | |
200 release_ref(inputlist[0]); | |
201 release_ref(inputlist[1]); | |
202 inputlist[0] = new_datum(BUILTIN_TYPE_YESNO, 2, 0, worker_entry->instance->def->program); | |
203 datum_set_yesno(inputlist[0], result); | |
204 return 0; | |
205 } | |
206 | |
207 int vis_lesserint(datum ** inputlist, queue_entry * worker_entry) | |
208 { | |
209 int result, ref_count; | |
210 //VIS_PROFILE_START(PROF_LESSERWHOLE); | |
211 if(inputlist[0]->c.integers.num_a < inputlist[1]->c.integers.num_a) | |
212 result = 1; | |
213 else | |
214 result = 0; | |
215 VIS_EnterCriticalSection(inputlist[0]->lock); | |
216 ref_count = inputlist[0]->ref_count; | |
217 VIS_LeaveCriticalSection(inputlist[0]->lock); | |
218 if(ref_count == 1) | |
219 { | |
220 release_ref(inputlist[1]); | |
221 inputlist[0]->company = worker_entry->instance->def->program->companylist + BUILTIN_TYPE_YESNO; | |
222 inputlist[0]->union_type = 2; | |
223 } | |
224 else | |
225 { | |
226 VIS_EnterCriticalSection(inputlist[1]->lock); | |
227 ref_count = inputlist[1]->ref_count; | |
228 VIS_LeaveCriticalSection(inputlist[1]->lock); | |
229 if(ref_count == 1) | |
230 { | |
231 release_ref(inputlist[0]); | |
232 inputlist[0] = inputlist[1]; | |
233 inputlist[0]->company = worker_entry->instance->def->program->companylist + BUILTIN_TYPE_YESNO; | |
234 inputlist[0]->union_type = 2; | |
235 } | |
236 else | |
237 { | |
238 release_ref(inputlist[0]); | |
239 release_ref(inputlist[1]); | |
240 inputlist[0] = new_datum(BUILTIN_TYPE_YESNO, 2, 0, worker_entry->instance->def->program); | |
241 } | |
242 } | |
243 //datum_set_yesno(inputlist[0], result); | |
244 inputlist[0]->c.integers.num_a = result; | |
245 //VIS_PROFILE_END(PROF_LESSERWHOLE); | |
246 return 0; | |
247 } | |
248 #ifndef WIN32 | |
249 double atof(const char * string) | |
250 { | |
251 int i = 0; | |
252 BOOL neg_flag = FALSE; | |
253 double value = 0.0; | |
254 double divisor = 10; | |
255 while(string[i] != '\0' && string[i] != '.') | |
256 { | |
257 if(string[i] >= '0' && string[i] <= '9') | |
258 { | |
259 value *= 10.0; | |
260 value += string[i] - '0'; | |
261 } | |
262 else if(string[i] == '-') | |
263 neg_flag = TRUE; | |
264 else if(string[i] != ' ' && string[i] != '\n' && string[i] != '\r' && string[i] != '\t') | |
265 return value; | |
266 ++i; | |
267 } | |
268 if(string[i] != '\0') | |
269 { | |
270 ++i; | |
3
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
271 while(string[i] != '\0' && string[i] >= '0' && string[i] <= '9') |
0 | 272 { |
273 value += ((double)(string[i] - '0'))/divisor; | |
274 divisor *= 10; | |
3
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
275 ++i; |
0 | 276 } |
277 } | |
3
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
278 if(neg_flag) |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
279 value = 0.0-value; |
0 | 280 return value; |
281 } | |
282 #endif | |
283 | |
284 int vis_stringtoreal(datum ** inputlist, queue_entry * worker_entry) | |
285 { | |
286 datum * output; | |
287 output = new_datum(BUILTIN_TYPE_REAL, 3, 0, worker_entry->instance->def->program); | |
288 output->c.real = atof(inputlist[0]->c.generic.data); | |
289 release_ref(inputlist[0]); | |
290 inputlist[0] = output; | |
291 return 0; | |
292 } | |
293 | |
294 int vis_real_add(datum ** inputlist, queue_entry * worker_entry) | |
295 { | |
296 datum * output; | |
297 output = new_datum(BUILTIN_TYPE_REAL, 3, 0, worker_entry->instance->def->program); | |
298 output->c.real = inputlist[0]->c.real + inputlist[1]->c.real; | |
299 release_ref(inputlist[0]); | |
300 release_ref(inputlist[1]); | |
301 inputlist[0] = output; | |
302 return 0; | |
303 } | |
304 | |
305 int vis_real_subtract(datum ** inputlist, queue_entry * worker_entry) | |
306 { | |
307 datum * output; | |
308 output = new_datum(BUILTIN_TYPE_REAL, 3, 0, worker_entry->instance->def->program); | |
309 output->c.real = inputlist[0]->c.real - inputlist[1]->c.real; | |
310 release_ref(inputlist[0]); | |
311 release_ref(inputlist[1]); | |
312 inputlist[0] = output; | |
313 return 0; | |
314 } | |
315 | |
316 | |
317 int vis_realequal(datum ** inputlist, queue_entry * worker_entry) | |
318 { | |
319 datum * output = new_datum(BUILTIN_TYPE_YESNO, 2, 0, worker_entry->instance->def->program); | |
320 datum_set_yesno(output, inputlist[0]->c.real == inputlist[1]->c.real); | |
321 release_ref(inputlist[0]); | |
322 release_ref(inputlist[1]); | |
323 inputlist[0] = output; | |
324 return 0; | |
325 } | |
326 | |
327 int vis_greaterreal(datum ** inputlist, queue_entry * worker_entry) | |
328 { | |
329 int result; | |
330 if(inputlist[0]->c.real > inputlist[1]->c.real) | |
331 result = 1; | |
332 else | |
333 result = 0; | |
334 release_ref(inputlist[0]); | |
335 release_ref(inputlist[1]); | |
336 inputlist[0] = new_datum(BUILTIN_TYPE_YESNO, 2, 0, worker_entry->instance->def->program); | |
337 datum_set_yesno(inputlist[0], result); | |
338 return 0; | |
339 } | |
340 | |
341 int vis_lesserreal(datum ** inputlist, queue_entry * worker_entry) | |
342 { | |
343 int result; | |
344 if(inputlist[0]->c.real < inputlist[1]->c.real) | |
345 result = 1; | |
346 else | |
347 result = 0; | |
348 release_ref(inputlist[0]); | |
349 release_ref(inputlist[1]); | |
350 inputlist[0] = new_datum(BUILTIN_TYPE_YESNO, 2, 0, worker_entry->instance->def->program); | |
351 datum_set_yesno(inputlist[0], result); | |
352 return 0; | |
353 } | |
354 | |
355 int vis_real_div(datum ** inputlist, queue_entry * worker_entry) | |
356 { | |
357 inputlist[0] = copy_datum(inputlist[0], 0); | |
358 inputlist[0]->c.real /= inputlist[1]->c.real; | |
359 release_ref(inputlist[1]); | |
360 return 0; | |
361 } | |
362 | |
3
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
363 int vis_real_mult(datum ** inputlist, queue_entry * worker_entry) |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
364 { |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
365 inputlist[0] = copy_datum(inputlist[0], 0); |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
366 inputlist[0]->c.real *= inputlist[1]->c.real; |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
367 release_ref(inputlist[1]); |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
368 return 0; |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
369 } |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
370 #define PI 3.14159265 |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
371 int vis_real_cos(datum ** inputlist, queue_entry * worker_entry) |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
372 { |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
373 inputlist[0] = copy_datum(inputlist[0], 0); |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
374 inputlist[0]->c.real = cos(inputlist[0]->c.real * PI/180.0); |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
375 return 0; |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
376 } |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
377 |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
378 int vis_real_sin(datum ** inputlist, queue_entry * worker_entry) |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
379 { |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
380 inputlist[0] = copy_datum(inputlist[0], 0); |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
381 inputlist[0]->c.real = sin(inputlist[0]->c.real * PI/180.0); |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
382 return 0; |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
383 } |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
384 |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
385 int vis_real_tan(datum ** inputlist, queue_entry * worker_entry) |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
386 { |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
387 inputlist[0] = copy_datum(inputlist[0], 0); |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
388 inputlist[0]->c.real = tan(inputlist[0]->c.real * PI/180.0); |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
389 return 0; |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
390 } |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
391 |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
392 int vis_real_arccos(datum ** inputlist, queue_entry * worker_entry) |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
393 { |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
394 inputlist[0] = copy_datum(inputlist[0], 0); |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
395 inputlist[0]->c.real = acos(inputlist[0]->c.real)*180.0/PI; |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
396 return 0; |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
397 } |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
398 |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
399 int vis_real_arcsin(datum ** inputlist, queue_entry * worker_entry) |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
400 { |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
401 inputlist[0] = copy_datum(inputlist[0], 0); |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
402 inputlist[0]->c.real = asin(inputlist[0]->c.real)*180.0/PI; |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
403 return 0; |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
404 } |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
405 |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
406 int vis_real_arctan(datum ** inputlist, queue_entry * worker_entry) |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
407 { |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
408 inputlist[0] = copy_datum(inputlist[0], 0); |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
409 inputlist[0]->c.real = atan(inputlist[0]->c.real)*180.0/PI; |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
410 return 0; |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
411 } |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
412 |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
413 int vis_real_exp(datum ** inputlist, queue_entry * worker_entry) |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
414 { |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
415 inputlist[0] = copy_datum(inputlist[0], 0); |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
416 inputlist[0]->c.real = pow(inputlist[0]->c.real, inputlist[1]->c.real); |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
417 release_ref(inputlist[1]); |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
418 return 0; |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
419 } |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
420 |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
421 int vis_real_sqrt(datum ** inputlist, queue_entry * worker_entry) |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
422 { |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
423 inputlist[0] = copy_datum(inputlist[0], 0); |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
424 inputlist[0]->c.real = sqrt(inputlist[0]->c.real); |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
425 return 0; |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
426 } |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
427 |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
428 int vis_whole_fromreal(datum ** inputlist, queue_entry * worker_entry) |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
429 { |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
430 datum * output = new_datum(BUILTIN_TYPE_WHOLE, 2, 0, worker_entry->instance->def->program); |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
431 output->c.integers.num_a = inputlist[0]->c.real; |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
432 release_ref(inputlist[0]); |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
433 inputlist[0] = output; |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
434 return 0; |
46 | 435 } |
436 | |
437 int vis_real_fromwhole(datum ** inputlist, queue_entry * worker_entry) | |
438 { | |
439 datum * output = new_datum(BUILTIN_TYPE_REAL, 3, 0, worker_entry->instance->def->program); | |
440 output->c.real = inputlist[0]->c.integers.num_a; | |
441 release_ref(inputlist[0]); | |
442 inputlist[0] = output; | |
443 return 0; | |
444 } | |
445 |