Mercurial > repos > rhope
annotate string.c @ 160:f97a7d499182
Optimize _Partition@Pattern using a byte iterator
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Fri, 07 Jan 2011 03:18:33 -0500 |
parents | 3cc5e4a42344 |
children |
rev | line source |
---|---|
0 | 1 #include "datum.h" |
2 #include "structs.h" | |
3 #include "interp.h" | |
4 #include <string.h> | |
5 #include <stdlib.h> | |
6 | |
7 | |
8 int vis_inttostring(datum ** inputlist, queue_entry * worker_entry) | |
9 { | |
10 int i,j,val; | |
11 char temp_buf[12]; | |
12 datum * output; | |
13 char * out_buf; | |
14 //sprintf(temp_buf, "%d", inputlist[0]->c.integers.num_a); | |
15 val = (inputlist[0]->c.integers.num_a >= 0 ? inputlist[0]->c.integers.num_a : 0-inputlist[0]->c.integers.num_a); | |
16 i = 0; | |
17 if(!val) | |
18 temp_buf[i++] = '0'; | |
19 | |
20 while(val > 0) | |
21 { | |
22 temp_buf[i] = (val % 10) + '0'; | |
23 val /= 10; | |
24 ++i; | |
25 } | |
26 if(inputlist[0]->c.integers.num_a < 0) | |
27 { | |
28 temp_buf[i] = '-'; | |
29 ++i; | |
30 } | |
31 release_ref(inputlist[0]); | |
32 inputlist[0] = new_datum(BUILTIN_TYPE_STRING, 1, i+1, worker_entry->instance->def->program); | |
33 out_buf = inputlist[0]->c.generic.data; | |
34 out_buf[i] = '\0'; | |
35 j = 0; | |
36 --i; | |
37 while(i >= 0) | |
38 { | |
39 out_buf[j] = temp_buf[i]; | |
40 ++j; | |
41 --i; | |
42 } | |
43 //strcpy(inputlist[0]->c.generic.data, temp_buf); | |
44 return 0; | |
45 | |
46 } | |
47 | |
48 #ifndef SEGA | |
49 int vis_realtostring(datum ** inputlist, queue_entry * worker_entry) | |
50 { | |
29
3cc5e4a42344
Missed registration for *@Real Number in previous commit
Mike Pavone <pavone@retrodev.com>
parents:
3
diff
changeset
|
51 char temp_buf[512];//Is this enough? |
0 | 52 datum * output; |
53 sprintf(temp_buf, "%f", inputlist[0]->c.real); | |
54 release_ref(inputlist[0]); | |
55 inputlist[0] = new_datum(BUILTIN_TYPE_STRING, 1, strlen(temp_buf)+1, worker_entry->instance->def->program); | |
56 strcpy(inputlist[0]->c.generic.data, temp_buf); | |
57 return 0; | |
58 | |
59 } | |
60 #endif | |
61 | |
62 int vis_stringequal(datum ** inputlist, queue_entry * worker_entry) | |
63 { | |
64 int result = strcmp(inputlist[0]->c.generic.data, inputlist[1]->c.generic.data); | |
65 release_ref(inputlist[0]); | |
66 release_ref(inputlist[1]); | |
67 inputlist[0] = new_datum(BUILTIN_TYPE_YESNO, 2, 0, worker_entry->instance->def->program); | |
68 datum_set_yesno(inputlist[0], (result == 0 ? 1 : 0)); | |
69 return 0; | |
70 } | |
71 | |
72 int vis_append(datum ** inputlist, queue_entry * worker_entry) | |
73 { | |
74 datum * output; | |
75 int temp_size = inputlist[0]->c.generic.len; | |
76 DEBUGPUTS("Begin vis_append\n"); | |
77 | |
78 DEBUGPRINTF("Left: %s(%d)\n", inputlist[0]->c.generic.data, inputlist[0]->c.generic.len); | |
79 DEBUGPRINTF("Right: %s(%d)\n", inputlist[1]->c.generic.data, inputlist[1]->c.generic.len); | |
80 output = new_datum(BUILTIN_TYPE_STRING, 1, temp_size+inputlist[1]->c.generic.len-1, worker_entry->instance->def->program); | |
81 memcpy(output->c.generic.data, inputlist[0]->c.generic.data, temp_size-1); | |
82 memcpy(((char *)output->c.generic.data)+temp_size-1, inputlist[1]->c.generic.data, inputlist[1]->c.generic.len-1); | |
83 ((char *)output->c.generic.data)[temp_size + inputlist[1]->c.generic.len-2]='\0'; | |
84 DEBUGPRINTF("Appended string: %s(%d)\n", output->c.generic.data, output->c.generic.len); | |
85 release_ref(inputlist[0]); | |
86 release_ref(inputlist[1]); | |
87 inputlist[0] = output; | |
88 DEBUGPUTS("End vis_append\n"); | |
89 | |
90 return 0; | |
91 } | |
92 | |
93 int vis_yesnotostring(datum ** inputlist, queue_entry * worker_entry) | |
94 { | |
95 int result = inputlist[0]->c.integers.num_a; | |
96 release_ref(inputlist[0]); | |
97 if(result) | |
98 { | |
99 inputlist[0] = new_datum(BUILTIN_TYPE_STRING, 1, 4, worker_entry->instance->def->program); | |
100 strcpy(inputlist[0]->c.generic.data, "Yes"); | |
101 } | |
102 else | |
103 { | |
104 inputlist[0] = new_datum(BUILTIN_TYPE_STRING, 1, 3, worker_entry->instance->def->program); | |
105 strcpy(inputlist[0]->c.generic.data, "No"); | |
106 } | |
107 return 0; | |
108 } | |
109 | |
110 int vis_greaterstring(datum ** inputlist, queue_entry * worker_entry) | |
111 { | |
112 int result; | |
113 if(strcmp(inputlist[0]->c.generic.data, inputlist[1]->c.generic.data) > 0) | |
114 result = 1; | |
115 else | |
116 result = 0; | |
117 release_ref(inputlist[0]); | |
118 release_ref(inputlist[1]); | |
119 inputlist[0] = new_datum(BUILTIN_TYPE_YESNO, 2, 0, worker_entry->instance->def->program); | |
120 datum_set_yesno(inputlist[0], result); | |
121 return 0; | |
122 } | |
123 | |
124 int vis_lesserstring(datum ** inputlist, queue_entry * worker_entry) | |
125 { | |
126 int result; | |
127 if(strcmp(inputlist[0]->c.generic.data, inputlist[1]->c.generic.data) < 0) | |
128 result = 1; | |
129 else | |
130 result = 0; | |
131 release_ref(inputlist[0]); | |
132 release_ref(inputlist[1]); | |
133 inputlist[0] = new_datum(BUILTIN_TYPE_YESNO, 2, 0, worker_entry->instance->def->program); | |
134 datum_set_yesno(inputlist[0], result); | |
135 return 0; | |
136 } | |
137 | |
138 datum * make_string(const char * string, int len, program * prog) | |
139 { | |
140 datum * output; | |
141 if(len < 0) | |
142 len = strlen(string); | |
143 output = new_datum(BUILTIN_TYPE_STRING, 1, len+1, prog); | |
3
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
144 if(string) |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
145 memcpy(output->c.generic.data, string, len); |
0 | 146 ((char *)output->c.generic.data)[len] = '\0'; |
147 return output; | |
148 } | |
149 | |
150 int vis_string_split(datum ** inputlist, queue_entry * worker_entry) | |
151 { | |
152 int i, start=0, len = inputlist[0]->c.generic.len-1; | |
153 char * string = inputlist[0]->c.generic.data; | |
154 char * delim = inputlist[1]->c.generic.data; | |
155 int delimlen = inputlist[1]->c.generic.len-1; | |
156 int search_offset = 0; | |
157 datum * params[2]; | |
158 params[0] = create_list(worker_entry->instance->def->program); | |
159 DEBUGPRINTF("Split@String: delim(%s) string(%s)\n", delim, string); | |
160 for(i = 0; i < len; ++i) | |
161 { | |
162 if(string[i] == delim[search_offset]) | |
163 { | |
164 if(search_offset == (delimlen-1)) | |
165 { | |
166 params[1] = make_string(string + start, i-start-(delimlen-1), worker_entry->instance->def->program); | |
167 DEBUGPRINTF("Appending %s(%d) to list\n", params[1]->c.generic.data, params[1]->c.generic.len); | |
168 vis_list_append(params, worker_entry); | |
169 start = i+1; | |
170 search_offset = 0; | |
171 } | |
172 else | |
173 ++search_offset; | |
174 } | |
175 else if(search_offset > 0) | |
176 { | |
177 i = (i-search_offset+1); | |
178 search_offset = 0; | |
179 } | |
180 } | |
181 if(len) | |
182 { | |
183 params[1] = make_string(string + start, i-start, worker_entry->instance->def->program); | |
184 vis_list_append(params, worker_entry); | |
185 } | |
186 DEBUGPUTS("End Split@String\n"); | |
187 | |
188 release_ref(inputlist[0]); | |
189 release_ref(inputlist[1]); | |
190 inputlist[0] = params[0]; | |
191 return 0; | |
192 } | |
193 | |
194 int vis_string_put_raw(datum ** inputlist, queue_entry * worker_entry) | |
195 { | |
196 int old_len = inputlist[0]->c.generic.len; | |
197 char * data; | |
198 inputlist[0] = copy_datum(inputlist[0], old_len + inputlist[1]->c.generic.len); | |
199 data = inputlist[0]->c.generic.data; | |
200 memcpy(data + old_len - 1, inputlist[1]->c.generic.data, inputlist[1]->c.generic.len); | |
201 release_ref(inputlist[1]); | |
202 data[inputlist[0]->c.generic.len-1] = '\0'; | |
203 return 0; | |
204 } | |
205 | |
206 int vis_string_get_raw(datum ** inputlist, queue_entry * worker_entry) | |
207 { | |
208 char * data = inputlist[0]->c.generic.data; | |
209 datum * output; | |
210 inputlist[1] = copy_datum(inputlist[1], 0); | |
211 memcpy(inputlist[1]->c.generic.data, data, inputlist[1]->c.generic.len); | |
212 output = make_string(data + inputlist[1]->c.generic.len, inputlist[0]->c.generic.len - inputlist[1]->c.generic.len - 1, worker_entry->instance->def->program); | |
213 release_ref(inputlist[0]); | |
214 inputlist[0] = output; | |
215 return 0; | |
216 } | |
217 | |
218 int vis_string_slice(datum ** inputlist, queue_entry * worker_entry) | |
219 { | |
220 char * string; | |
221 int index = inputlist[1]->c.integers.num_a; | |
222 release_ref(inputlist[1]); | |
223 if(index < (inputlist[0]->c.generic.len-1)) | |
224 { | |
225 inputlist[1] = new_datum_comp(inputlist[0]->company, 1, inputlist[0]->c.generic.len-index); | |
226 memcpy(inputlist[1]->c.generic.data, (char *)(inputlist[0]->c.generic.data) + index, inputlist[0]->c.generic.len-index); | |
227 inputlist[0] = copy_datum(inputlist[0], index+1); | |
228 string = inputlist[0]->c.generic.data; | |
229 string[index] = '\0'; | |
230 } | |
231 else | |
232 { | |
233 inputlist[1] = new_datum_comp(inputlist[0]->company, 1, 1); | |
234 string = inputlist[1]->c.generic.data; | |
235 string[0] = '\0'; | |
236 } | |
237 return 0; | |
238 } | |
239 | |
240 int vis_string_reverse(datum ** inputlist, queue_entry * worker_entry) | |
241 { | |
242 int ref_count, i,j; | |
243 datum * output; | |
244 char *source, *dest, tmp; | |
245 VIS_EnterCriticalSection(inputlist[0]->lock); | |
246 ref_count = inputlist[0]->ref_count; | |
247 VIS_LeaveCriticalSection(inputlist[0]->lock); | |
248 | |
249 if(ref_count > 1) | |
250 output = new_datum_comp(inputlist[0]->company, 1, inputlist[0]->c.generic.len); | |
251 else | |
252 output = inputlist[0]; | |
253 source = inputlist[0]->c.generic.data; | |
254 | |
255 if(ref_count > 1) | |
256 { | |
257 dest = output->c.generic.data; | |
258 i = 0; | |
259 for(j = output->c.generic.len-2; j >= 0; --j) | |
260 dest[j] = source[i++]; | |
261 release_ref(inputlist[0]); | |
262 inputlist[0] = output; | |
263 } | |
264 else | |
265 { | |
266 i = 0; | |
267 for(j = output->c.generic.len-2; j > i; --j) | |
268 { | |
269 tmp = source[i]; | |
270 source[i++] = source[j]; | |
271 source[j] = tmp; | |
272 } | |
273 } | |
274 return 0; | |
275 } | |
276 | |
277 int vis_string_length(datum ** inputlist, queue_entry * worker_entry) | |
278 { | |
279 int len = inputlist[0]->c.generic.len-1; | |
280 release_ref(inputlist[0]); | |
281 inputlist[0] = new_datum(BUILTIN_TYPE_WHOLE, 2, 0, worker_entry->instance->def->program); | |
282 inputlist[0]->c.integers.num_a = len; | |
283 return 0; | |
284 } | |
285 | |
286 int vis_string_put_byte(datum ** inputlist, queue_entry * worker_entry) | |
287 { | |
288 inputlist[0] = copy_datum(inputlist[0], inputlist[0]->c.generic.len + 1); | |
289 ((unsigned char *)(inputlist[0]->c.generic.data))[inputlist[0]->c.generic.len - 2] = (unsigned char)inputlist[1]->c.integers.num_a; | |
290 ((unsigned char *)(inputlist[0]->c.generic.data))[inputlist[0]->c.generic.len - 1] = '\0'; | |
291 release_ref(inputlist[1]); | |
292 return 0; | |
293 } | |
294 | |
295 int vis_string_get_dstring(datum ** inputlist, queue_entry * worker_entry) | |
296 { | |
297 datum ** delimlist; | |
298 int num_delims; | |
299 int i,len,delimlen; | |
300 char *current; | |
301 BOOL match=FALSE; | |
302 datum * temp; | |
303 if(inputlist[1]->company->type_id == BUILTIN_TYPE_LIST) | |
304 { | |
305 delimlist = ((list_data *)inputlist[1]->c.generic.data)->entries; | |
306 num_delims = ((list_data *)inputlist[1]->c.generic.data)->num_entries; | |
307 //TODO: check to make sure that all of the list entries are strings | |
308 } | |
309 else if(inputlist[1]->company->type_id == BUILTIN_TYPE_STRING) | |
310 { | |
311 delimlist = inputlist+1; | |
312 num_delims = 1; | |
313 } | |
314 else | |
315 { | |
316 ERRORPUTS("Second argument to Get DString@String must be either a String or a List"); | |
3
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
317 print_stack_trace(worker_entry->instance); |
0 | 318 release_ref(inputlist[0]); |
319 release_ref(inputlist[1]); | |
320 return -1; | |
321 } | |
322 current = inputlist[0]->c.generic.data; | |
323 len = inputlist[0]->c.generic.len - 1; | |
324 while(len && !match) | |
325 { | |
326 for(i = 0; i < num_delims; ++i) | |
327 { | |
328 delimlen = delimlist[i]->c.generic.len-1; | |
329 if(len >= delimlen && !memcmp(current, delimlist[i]->c.generic.data, delimlen)) | |
330 { | |
331 match = TRUE; | |
332 //deal with the fact that we're going to adjust current and len even though we're done | |
333 --current; | |
334 ++len; | |
335 break; | |
336 } | |
337 } | |
338 ++current; | |
339 --len; | |
340 } | |
341 if(match) | |
342 { | |
343 inputlist[2] = add_ref(delimlist[i]); | |
344 release_ref(inputlist[1]); | |
345 inputlist[1] = make_string(inputlist[0]->c.generic.data, current - ((char *)inputlist[0]->c.generic.data), worker_entry->instance->def->program); | |
346 delimlen = inputlist[2]->c.generic.len-1; | |
347 temp = make_string(current+delimlen, len-delimlen, worker_entry->instance->def->program); | |
348 release_ref(inputlist[0]); | |
349 inputlist[0] = temp; | |
350 inputlist[3] = NULL; | |
351 } | |
352 else | |
353 { | |
354 release_ref(inputlist[1]); | |
355 inputlist[1] = inputlist[0]; | |
356 inputlist[0] = NULL; | |
357 inputlist[2] = NULL; | |
358 inputlist[3] = new_datum(BUILTIN_TYPE_YESNO, 2, 0, worker_entry->instance->def->program); | |
359 inputlist[3]->c.integers.num_a = 0; | |
360 } | |
361 return 0; | |
362 } | |
3
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
363 |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
364 int vis_string_lefttrim(datum ** params, queue_entry * entry) |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
365 { |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
366 BOOL isatrimchar; |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
367 int i,j; |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
368 char *string,*trim_chars; |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
369 string = params[0]->c.generic.data; |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
370 trim_chars = params[1]->c.generic.data; |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
371 isatrimchar = TRUE; |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
372 for(i = 0; i < params[0]->c.generic.len-1; ++i) |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
373 { |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
374 isatrimchar = FALSE; |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
375 for(j = 0; j < params[1]->c.generic.len-1; ++j) |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
376 if(string[i] == trim_chars[j]) |
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 isatrimchar = TRUE; |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
379 break; |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
380 } |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
381 if(!isatrimchar) |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
382 break; |
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 release_ref(params[1]); |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
385 params[1] = params[0]; |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
386 params[0] = make_string(string+i, params[1]->c.generic.len-1-i, entry->instance->def->program); |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
387 release_ref(params[1]); |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
388 return 0; |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
389 } |
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 int vis_string_righttrim(datum ** params, queue_entry * entry) |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
392 { |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
393 BOOL isatrimchar; |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
394 int i,j; |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
395 char *string,*trim_chars; |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
396 string = params[0]->c.generic.data; |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
397 trim_chars = params[1]->c.generic.data; |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
398 isatrimchar = TRUE; |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
399 for(i = params[0]->c.generic.len-2; i >= 0 ; --i) |
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 isatrimchar = FALSE; |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
402 for(j = 0; j < params[1]->c.generic.len-1; ++j) |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
403 if(string[i] == trim_chars[j]) |
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 isatrimchar = TRUE; |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
406 break; |
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 if(!isatrimchar) |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
409 break; |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
410 } |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
411 release_ref(params[1]); |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
412 params[1] = params[0]; |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
413 params[0] = make_string(string, i+1, entry->instance->def->program); |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
414 release_ref(params[1]); |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
415 return 0; |
94c885692eb5
Partial set of fixes and enhancements from Linux box
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
416 } |