Mercurial > repos > rhope
comparison string.c @ 3:94c885692eb5
Partial set of fixes and enhancements from Linux box
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Wed, 29 Apr 2009 03:21:23 -0400 |
parents | 76568becd6d6 |
children | 3cc5e4a42344 |
comparison
equal
deleted
inserted
replaced
2:73e978d590c7 | 3:94c885692eb5 |
---|---|
139 { | 139 { |
140 datum * output; | 140 datum * output; |
141 if(len < 0) | 141 if(len < 0) |
142 len = strlen(string); | 142 len = strlen(string); |
143 output = new_datum(BUILTIN_TYPE_STRING, 1, len+1, prog); | 143 output = new_datum(BUILTIN_TYPE_STRING, 1, len+1, prog); |
144 memcpy(output->c.generic.data, string, len); | 144 if(string) |
145 memcpy(output->c.generic.data, string, len); | |
145 ((char *)output->c.generic.data)[len] = '\0'; | 146 ((char *)output->c.generic.data)[len] = '\0'; |
146 return output; | 147 return output; |
147 } | 148 } |
148 | 149 |
149 int vis_string_split(datum ** inputlist, queue_entry * worker_entry) | 150 int vis_string_split(datum ** inputlist, queue_entry * worker_entry) |
311 num_delims = 1; | 312 num_delims = 1; |
312 } | 313 } |
313 else | 314 else |
314 { | 315 { |
315 ERRORPUTS("Second argument to Get DString@String must be either a String or a List"); | 316 ERRORPUTS("Second argument to Get DString@String must be either a String or a List"); |
317 print_stack_trace(worker_entry->instance); | |
316 release_ref(inputlist[0]); | 318 release_ref(inputlist[0]); |
317 release_ref(inputlist[1]); | 319 release_ref(inputlist[1]); |
318 return -1; | 320 return -1; |
319 } | 321 } |
320 current = inputlist[0]->c.generic.data; | 322 current = inputlist[0]->c.generic.data; |
356 inputlist[3] = new_datum(BUILTIN_TYPE_YESNO, 2, 0, worker_entry->instance->def->program); | 358 inputlist[3] = new_datum(BUILTIN_TYPE_YESNO, 2, 0, worker_entry->instance->def->program); |
357 inputlist[3]->c.integers.num_a = 0; | 359 inputlist[3]->c.integers.num_a = 0; |
358 } | 360 } |
359 return 0; | 361 return 0; |
360 } | 362 } |
363 | |
364 int vis_string_lefttrim(datum ** params, queue_entry * entry) | |
365 { | |
366 BOOL isatrimchar; | |
367 int i,j; | |
368 char *string,*trim_chars; | |
369 string = params[0]->c.generic.data; | |
370 trim_chars = params[1]->c.generic.data; | |
371 isatrimchar = TRUE; | |
372 for(i = 0; i < params[0]->c.generic.len-1; ++i) | |
373 { | |
374 isatrimchar = FALSE; | |
375 for(j = 0; j < params[1]->c.generic.len-1; ++j) | |
376 if(string[i] == trim_chars[j]) | |
377 { | |
378 isatrimchar = TRUE; | |
379 break; | |
380 } | |
381 if(!isatrimchar) | |
382 break; | |
383 } | |
384 release_ref(params[1]); | |
385 params[1] = params[0]; | |
386 params[0] = make_string(string+i, params[1]->c.generic.len-1-i, entry->instance->def->program); | |
387 release_ref(params[1]); | |
388 return 0; | |
389 } | |
390 | |
391 int vis_string_righttrim(datum ** params, queue_entry * entry) | |
392 { | |
393 BOOL isatrimchar; | |
394 int i,j; | |
395 char *string,*trim_chars; | |
396 string = params[0]->c.generic.data; | |
397 trim_chars = params[1]->c.generic.data; | |
398 isatrimchar = TRUE; | |
399 for(i = params[0]->c.generic.len-2; i >= 0 ; --i) | |
400 { | |
401 isatrimchar = FALSE; | |
402 for(j = 0; j < params[1]->c.generic.len-1; ++j) | |
403 if(string[i] == trim_chars[j]) | |
404 { | |
405 isatrimchar = TRUE; | |
406 break; | |
407 } | |
408 if(!isatrimchar) | |
409 break; | |
410 } | |
411 release_ref(params[1]); | |
412 params[1] = params[0]; | |
413 params[0] = make_string(string, i+1, entry->instance->def->program); | |
414 release_ref(params[1]); | |
415 return 0; | |
416 } |