示例#1
0
static uim_lisp
c_file_poll(uim_lisp fds_, uim_lisp timeout_)
{
  struct pollfd *fds;
  int timeout = C_INT(timeout_);
  int nfds = uim_scm_length(fds_);
  uim_lisp fd_ = uim_scm_f();
  int i;
  int ret;
  uim_lisp ret_;
  struct c_file_poll_args args;

  fds = uim_calloc(nfds, sizeof(struct pollfd));

  for (i = 0; i < nfds; i++) {
    fd_ = CAR(fds_);
    fds[i].fd = C_INT(CAR(fd_));
    fds[i].events = C_INT(CDR(fd_));
    fds_ = CDR(fds_);
  }

  ret = poll(fds, nfds, timeout);
  if (ret == -1)
    return uim_scm_f();
  else if (ret == 0)
    return uim_scm_null();

  args.fds = fds;
  args.nfds = nfds;
  ret_ = (uim_lisp)uim_scm_call_with_gc_ready_stack((uim_gc_gate_func_ptr)c_file_poll_internal,
						    (void *)&args);
  free(fds);
  return uim_scm_callf("reverse", "o", ret_);
}
示例#2
0
const char *
create_context(const char *args)
{
    char *method;
    char *lang;
    ic_t *ic;

    if (!vp_iobuf_get_args(iobuf, args, "ss", &method, &lang))
        return vp_iobuf_return(iobuf);

    ic = malloc(sizeof(ic_t));
    if (ic == NULL)
        return "malloc error";
    ic->cand_index = 0;
    ic->cand_nr = 0;
    ic->cand_limit = 0;
    ic->cx = uim_create_context(ic, "UTF-8", lang, method, NULL, commit_cb);
    if (ic->cx == NULL) {
        free(ic);
        return "uim_create_context error";
    }

    /* Install callback functions */
    uim_set_preedit_cb(ic->cx,
                       preedit_clear_cb,
                       preedit_pushback_cb,
                       preedit_update_cb);
    uim_set_candidate_selector_cb(ic->cx,
                                  candidate_activate_cb,
                                  candidate_select_cb,
                                  candidate_shift_page_cb,
                                  candidate_deactivate_cb);
    uim_set_prop_list_update_cb(ic->cx, property_list_update_cb);

    /*
     * Turn on Input Mode.
     * TODO: Use proper method.  "action" can be used?
     */
    uim_scm_call_with_gc_ready_stack(
            (uim_gc_gate_func_ptr)uim_scm_eval_c_string,
            (void*)
            "(if (and (symbol-bound? 'generic-on-key) generic-on-key)"
            "  (let* ((id (context-id (car context-list)))"
            "         (parsed (parse-key-str (car generic-on-key) () -1 0))"
            "         (key (list-ref parsed 2))"
            "         (mod (list-ref parsed 3)))"
            "    (key-press-handler id key mod)"
            "    (key-release-handler id key mod)"
            "  ))"
            );

    vp_iobuf_put_str(iobuf, "create_context");
    vp_iobuf_put_ptr(iobuf,  ic);

    return vp_iobuf_return(iobuf);
}
示例#3
0
文件: curl.c 项目: NgoHuy/uim
static uim_lisp
uim_curl_post(uim_lisp url_, uim_lisp post_)
{
  struct uim_curl_post_args args;

  args.url = url_;
  args.post = post_;
  return (uim_lisp)uim_scm_call_with_gc_ready_stack((uim_gc_gate_func_ptr)uim_curl_post_internal,
						    &args);
}
示例#4
0
文件: expat.c 项目: DirtYiCE/uim
static uim_lisp
uim_xml_parse(uim_lisp ctx_, uim_lisp s_, uim_lisp isFinal_)
{
  struct uim_xml_parse_args args;

  args.ctx_ = ctx_;
  args.s_ = s_;
  args.isFinal_ = isFinal_;

  return uim_scm_call_with_gc_ready_stack((uim_gc_gate_func_ptr)uim_xml_parse_internal, (void *)&args);
}
示例#5
0
static uim_lisp
dynlib_unbind(uim_lisp lib_ptr,
	      uim_lisp init_proc,
	      uim_lisp quit_proc)
{
  struct dynlib_unbind_args args;
  args.lib_ptr = lib_ptr;
  args.init_proc = init_proc;
  args.quit_proc = quit_proc;

  return uim_scm_call_with_gc_ready_stack((uim_gc_gate_func_ptr)dynlib_unbind_internal, (void *)&args);
}
示例#6
0
文件: ffi.c 项目: NgoHuy/uim
static uim_lisp
make_arg_list(const opt_args *list)
{
  uim_lisp ret_;
  int i = 0;

  ret_ = uim_scm_null();
  while (list[i].arg != 0) {
    ret_ = CONS((uim_lisp)uim_scm_call_with_gc_ready_stack((uim_gc_gate_func_ptr)make_arg_cons,
                                                           (void *)&list[i]), ret_);
    i++;
  }
  return ret_;
}
示例#7
0
文件: expat.c 项目: DirtYiCE/uim
static void
xml_start_element_handler(void *userData, const XML_Char *name, const XML_Char *atts[])
{
  uim_xml_userdata *data = (uim_xml_userdata *)userData;

  if (data && data->start_) {
    uim_lisp atts_;

    atts_ = (uim_lisp)uim_scm_call_with_gc_ready_stack((uim_gc_gate_func_ptr)xml_start_element_handler_internal,
						       (void *)atts);

    atts_ = uim_scm_callf("reverse", "o", atts_);

    uim_scm_call(data->start_, LIST2(MAKE_STR(name), atts_));
  }
}
示例#8
0
文件: look.c 项目: DirtYiCE/uim
static uim_lisp
uim_look_look(uim_lisp isdict_, uim_lisp iscase_, uim_lisp words_, uim_lisp dict_, uim_lisp str_)
{
  const char *dict = REFER_C_STR(dict_);
  const char *str = REFER_C_STR(str_);
  uim_look_ctx *ctx;
  char *dict_str;
  uim_lisp ret_ = uim_scm_f();
  int words = -1;

  ctx = uim_look_init();

  uim_look_set_option_dictionary_order(C_BOOL(isdict_), ctx);
  uim_look_set_option_ignore_case(C_BOOL(iscase_), ctx);

  if (!ctx)
    uim_fatal_error("uim_look_init() failed");

  if (!uim_look_open_dict(dict, ctx))
    return ret_;

  dict_str = uim_strdup(str);

  if (INTP(words_))
    words = C_INT(words_);

  ret_ = uim_scm_null();
  if (uim_look(dict_str, ctx) != 0) {
    struct uim_look_look_internal_args args;

    uim_look_set(ctx);

    args.ctx = ctx;
    args.dict_str = dict_str;
    args.words = words;
    ret_ = (uim_lisp)uim_scm_call_with_gc_ready_stack((uim_gc_gate_func_ptr)uim_look_look_internal,
						      (void *)&args);
  }

  uim_look_finish(ctx);
  free(dict_str);

  return uim_scm_callf("reverse", "o", ret_);
}
示例#9
0
static uim_lisp
c_file_read(uim_lisp d_, uim_lisp nbytes_)
{
  unsigned char *buf;
  uim_lisp ret_;
  int nbytes = C_INT(nbytes_);
  int nr;
  struct c_file_read_args args;

  buf = uim_malloc(nbytes);
  if ((nr = read(C_INT(d_), buf, nbytes)) == 0)
    return uim_scm_eof();
  if (nr < 0)
    return uim_scm_f();

  args.buf = buf;
  args.nr = nr;
  ret_ = (uim_lisp)uim_scm_call_with_gc_ready_stack((uim_gc_gate_func_ptr)c_file_read_internal,
						    (void *)&args);
  free(buf);
  return uim_scm_callf("reverse", "o", ret_);
}
示例#10
0
static void
save_default_im(const char *im)
{
    if (custom_enabled)
        uim_scm_call_with_gc_ready_stack((uim_gc_gate_func_ptr)save_default_im_internal, (void *)im);
}
示例#11
0
static uim_lisp
dynlib_unbind_all(uim_lisp plugin_alist_)
{
  return uim_scm_call_with_gc_ready_stack((uim_gc_gate_func_ptr)dynlib_unbind_all_internal, plugin_alist_);
}
示例#12
0
static uim_lisp
dynlib_bind(uim_lisp name)
{
  return uim_scm_call_with_gc_ready_stack((uim_gc_gate_func_ptr)dynlib_bind_internal, (void *)name);
}
示例#13
0
文件: curl.c 项目: NgoHuy/uim
static uim_lisp
uim_curl_url_unescape(uim_lisp url_)
{
  return (uim_lisp)uim_scm_call_with_gc_ready_stack((uim_gc_gate_func_ptr)uim_curl_url_unescape_internal,
						    (void *)url_);
}
示例#14
0
static uim_lisp
notify_get_plugins(void)
{
  return (uim_lisp)uim_scm_call_with_gc_ready_stack((uim_gc_gate_func_ptr)notify_get_plugins_internal,
						    NULL);
}