/tags/rel-1.3.35/Lib/ruby/argcargv.i
Swig | 48 lines | 22 code | 4 blank | 22 comment | 0 complexity | c53598d53736458d041f15338f2f62ad MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
- /* ------------------------------------------------------------
- * --- Argc & Argv ---
- * ------------------------------------------------------------ */
-
- /* ------------------------------------------------------------
- Use it as follow:
- %apply (int ARGC, char **ARGV) { (size_t argc, const char **argv) }
- %inline %{
- int mainApp(size_t argc, const char **argv)
- {
- return argc;
- }
- then in the ruby side:
- args = ["asdf", "asdf2"]
- mainApp(args);
- * ------------------------------------------------------------ */
- %typemap(in) (int ARGC, char **ARGV) {
- if (rb_obj_is_kind_of($input,rb_cArray)) {
- int i;
- int size = RARRAY_LEN($input);
- $1 = ($1_ltype) size;
- $2 = (char **) malloc((size+1)*sizeof(char *));
- VALUE *ptr = RARRAY_PTR($input);
- for (i=0; i < size; i++, ptr++) {
- $2[i]= STR2CSTR(*ptr);
- }
- $2[i]=NULL;
- } else {
- $1 = 0; $2 = 0;
- %argument_fail(SWIG_TypeError, "int ARGC, char **ARGV", $symname, $argnum);
- }
- }
- %typemap(typecheck, precedence=SWIG_TYPECHECK_STRING_ARRAY) (int ARGC, char **ARGV) {
- $1 = rb_obj_is_kind_of($input,rb_cArray);
- }
- %typemap(freearg) (int ARGC, char **ARGV) {
- free((char *) $2);
- }