root/lang/gauche/cabocha-gauche-0.60pre4/cabocha.c @ 86

Revision 86, 2.7 kB (checked in by naoya_t, 16 years ago)

cabocha-gauche

RevLine 
[86]1/*
2 * cabocha.c
3 */
4
5#include <gauche.h>
6#include <gauche/extend.h>
7
8#include <cabocha.h>
9#include "cabocha.h"
10
11// cabocha_t
12cabocha_t* unwrap_cabocha_t(ScmObj obj)
13{
14  return SCM_CABOCHA(obj)->c;
15}
16ScmObj wrap_cabocha_t(cabocha_t *c)
17{
18  ScmCaboCha *obj = SCM_NEW(ScmCaboCha);
19  SCM_SET_CLASS(obj, SCM_CLASS_CABOCHA);
20  obj->c = c;
21  return SCM_OBJ(obj);
22}
23
24
25/* APIs with (int argc, char **argv) */
26#define cabocha_call_func(result_type,fn,args) do{  \
27  result_type result;         \
28  if (SCM_NULLP(args)) {      \
29    char *argv[] = {""};      \
30    result = (fn)(1,argv);    \
31  } else {                    \
32    int argc, i=0;              \
33    ScmObj argl;                \
34    char **argv = NULL;         \
35    if (SCM_INTEGERP(Scm_Car(args))) {                              \
36      argc = SCM_INT_VALUE(Scm_Car(args)); argl = Scm_Cadr(args);   \
37    } else {                                                        \
38      argc = 1 + Scm_Length(args); i++; argl = args;                \
39    }                                                               \
40    argv = (char**)malloc(sizeof(char*) * argc);                    \
41    if (i) argv[0] = "";                                                \
42    if (argv) {                                                         \
43      if (SCM_VECTORP(argl)) {                                          \
44        for (;i<argc;i++)                                        \
45          argv[i] = (char *)Scm_GetStringConst((ScmString *)SCM_VECTOR_ELEMENT(argl,i)); \
46      } else {                                                          \
47        for (;i<argc && !SCM_NULLP(argl); argl=Scm_Cdr(argl),i++) \
48          argv[i] = (char *)Scm_GetStringConst((ScmString *)Scm_Car(argl)); \
49      }                                                                 \
50      result = (fn)(argc,argv);                                         \
51    }                                                                   \
52    free((void *)argv);                                                 \
53  }                                                                     \
54  return result;                                                        \
55} while(0)
56
57cabocha_t *cabocha_call_cabocha_func(cabocha_func_with_args fn, ScmObj args)
58{
59  cabocha_call_func(cabocha_t*,fn,args);
60}
61int cabocha_call_int_func(int_func_with_args fn, ScmObj args)
62{
63  cabocha_call_func(int,fn,args);
64}
65
66/*
67 * Module initialization function.
68 */
69extern void Scm_Init_cabochalib(ScmModule*);
70
71void Scm_Init_cabocha(void)
72{
73    ScmModule *mod;
74
75    /* Register this DSO to Gauche */
76    SCM_INIT_EXTENSION(cabocha);
77
78    /* Create the module if it doesn't exist yet. */
79    mod = SCM_MODULE(SCM_FIND_MODULE("cabocha", TRUE));
80
81    /* Register stub-generated procedures */
82    Scm_Init_cabochalib(mod);
83}
Note: See TracBrowser for help on using the browser.