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 }