42 lines
1.4 KiB
OpenEdge ABL
42 lines
1.4 KiB
OpenEdge ABL
/* -------------------------------------------------------------
|
|
* 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);
|
|
}
|