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

Revision 88, 2.8 kB (checked in by naoya_t, 16 years ago)

cabocha-gauche: added signature

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