Mercurial > repos > rhope
annotate number.c @ 177:e57c151f351e
Get bytecode engine working well enough for naive fib
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 12 Jun 2011 03:49:51 -0700 |
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 |