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