/* ------------------------------------------------------------
 * --- Argc & Argv ---
 * ------------------------------------------------------------
 *
 *  Use it as follow:
 *
 *    %apply (int ARGC, char **ARGV) { (size_t argc, const char **argv) }
 *    extern int mainApp(size_t argc, const char **argv);
 *
 *  then in the lua:
 *
 *    args = { "arg0", "arg1" }
 *    mainApp(args);
 *
 * ------------------------------------------------------------ */

%{
SWIGINTERN int SWIG_argv_size(lua_State* L, int index) {
  int n=0;
  while(1){
    lua_rawgeti(L,index,n+1);
    if (lua_isnil(L,-1))
      break;
    ++n;
    lua_pop(L,1);
  }
  lua_pop(L,1);
  return n;
}
%}

%typemap(in) (int ARGC, char **ARGV) {
  if (lua_istable(L,$input)) {
    int i, size = SWIG_argv_size(L,$input);
    $1 = ($1_ltype) size;
    $2 = (char **) malloc((size+1)*sizeof(char *));
    for (i = 0; i < size; i++) {
      lua_rawgeti(L,$input,i+1);
      if (lua_isnil(L,-1))
   break;
      $2[i] = (char *)lua_tostring(L, -1);
      lua_pop(L,1);
    }
    $2[i]=NULL;
  } else {
    $1 = 0; $2 = 0;
    lua_pushstring(L,"Expecting argv array");
    lua_error(L);
  }
}

%typemap(typecheck, precedence=SWIG_TYPECHECK_STRING_ARRAY) (int ARGC, char **ARGV) {
  $1 = lua_istable(L,$input);
}

%typemap(freearg) (int ARGC, char **ARGV) {
  free((char *) $2);
}
