| /* ------------------------------------------------------------- |
| * SWIG library containing argc and argv multi-argument typemaps |
| * ------------------------------------------------------------- */ |
| |
| %typemap(in) (int ARGC, char **ARGV) { |
| $1_ltype i, len; |
| SWIG_contract_assert($input != (SCM)0 && |
| !scm_is_null($input) && |
| scm_is_array($input), |
| "you must pass array of strings"); |
| len = scm_c_array_length($input); |
| $1 = len; |
| $2 = ($2_ltype) malloc((len+1)*sizeof($*2_ltype)); |
| if ($2 == NULL) { |
| scm_misc_error(FUNC_NAME, "fail allocating memory for array", SCM_EOL); |
| } |
| for (i = 0; i < len; i++) { |
| SCM args = scm_list_1(scm_from_long(i)); |
| SCM str = scm_array_ref($input, args); |
| SWIG_contract_assert(scm_is_string(str), "elements in array must be strings"); |
| $2[i] = ($*2_ltype)SWIG_scm2str(str); |
| } |
| $2[i] = NULL; |
| } |
| |
| %typemap(typecheck, precedence=SWIG_TYPECHECK_STRING_ARRAY) (int ARGC, char **ARGV) { |
| if ($input != (SCM)0 && !scm_is_null($input) && scm_is_array($input)) { |
| size_t len = scm_c_array_length($input); |
| size_t i; |
| for(i = 0; i < len; i++) { |
| SCM args = scm_list_1(scm_from_long(i)); |
| SCM str = scm_array_ref($input, args); |
| if (!scm_is_string(str)) { |
| break; |
| } |
| } |
| /* All elements are strings! */ |
| $1 = (i == len); |
| } |
| } |
| |
| %typemap(freearg) (int ARGC, char **ARGV) { |
| free((void *)$2); |
| } |