| /* ------------------------------------------------------------- |
| * SWIG library containing argc and argv multi-argument typemaps |
| * ------------------------------------------------------------- */ |
| |
| %typemap(in) (int ARGC, char **ARGV) { |
| $1_ltype i, len; |
| Scheme_Object **elems; |
| SWIG_contract_assert($input != (Scheme_Object *)NULL && |
| $input != scheme_null && |
| SCHEME_TYPE($input) == scheme_vector_type, "null array"); |
| len = SCHEME_VEC_SIZE($input); |
| $1 = len; |
| $2 = ($2_ltype) SWIG_MzScheme_Malloc((size_t)(len+1)*sizeof($*2_ltype), FUNC_NAME); |
| elems = SCHEME_VEC_ELS($input); |
| for (i = 0; i < len; i++) { |
| SWIG_contract_assert(SCHEME_TYPE(elems[i]) == scheme_char_string_type, |
| "elements in array must be strings"); |
| $2[i] = ($*2_ltype)SCHEME_STR_VAL(elems[i]); |
| } |
| $2[i] = NULL; |
| } |
| |
| %typemap(typecheck, precedence=SWIG_TYPECHECK_STRING_ARRAY) (int ARGC, char **ARGV) { |
| if ($input != (Scheme_Object *)NULL && $input != scheme_null && |
| SCHEME_TYPE($input) == scheme_vector_type) { |
| size_t len = SCHEME_VEC_SIZE($input); |
| size_t i; |
| Scheme_Object **elems = SCHEME_VEC_ELS($input); |
| for (i = 0; i < len; i++) { |
| if (SCHEME_TYPE(elems[i]) != scheme_char_string_type) { |
| break; |
| } |
| } |
| /* All elements are strings! */ |
| $1 = (i == len); |
| } |
| } |
| |
| %typemap(freearg) (int ARGC, char **ARGV) { |
| SWIG_free((void *)$2); |
| } |