/* * cabocha.c */ #include #include #include #include "cabocha.h" // cabocha_t cabocha_t* unwrap_cabocha_t(ScmObj obj) { return SCM_CABOCHA(obj)->c; } ScmObj wrap_cabocha_t(cabocha_t *c) { ScmCaboCha *obj = SCM_NEW(ScmCaboCha); SCM_SET_CLASS(obj, SCM_CLASS_CABOCHA); obj->c = c; return SCM_OBJ(obj); } /* APIs with (int argc, char **argv) */ #define cabocha_call_func(result_type,fn,args) do{ \ result_type result; \ if (SCM_NULLP(args)) { \ char *argv[] = {""}; \ result = (fn)(1,argv); \ } else { \ int argc, i=0; \ ScmObj argl; \ char **argv = NULL; \ if (SCM_INTEGERP(Scm_Car(args))) { \ argc = SCM_INT_VALUE(Scm_Car(args)); argl = Scm_Cadr(args); \ } else { \ argc = 1 + Scm_Length(args); i++; argl = args; \ } \ argv = (char**)malloc(sizeof(char*) * argc); \ if (i) argv[0] = ""; \ if (argv) { \ if (SCM_VECTORP(argl)) { \ for (;i