Esempio n. 1
0
/*
 * TermInfo#setupterm(term, fd) => int
 *
 * TermInfo#setupterm initializes TermInfo object.
 *
 * term is a string of nil.
 * If nil is given, the environment variable $TERM is used.
 *
 * fd is a file descriptor for target terminal.
 */
static VALUE
rt_setupterm(VALUE self, VALUE v_term, VALUE v_fd)
{
  char *term;
  int fd;
  int err;
  int ret;
  if (check_rt(self) != NULL) { rb_raise(eTermInfoError, "terminfo object already initialized"); }

  if (v_term == Qnil)
    term = NULL;
  else
    term = StringValueCStr(v_term);
  fd = NUM2INT(v_fd);

  ret = setupterm(term, fd, &err);
  if (ret == ERR) {
    if (err == 1) rb_raise(eTermInfoError, "hardcopy terminal");
    else if (err == 0) rb_raise(eTermInfoError, "terminal could not be found");
    else if (err == -1) rb_raise(eTermInfoError, "terminfo database could not be found");
    else rb_raise(eTermInfoError, "unexpected setupterm error");
  }

  DATA_PTR(self) = cur_term;

  return INT2NUM(err);
}
Esempio n. 2
0
static void
setup(VALUE self)
{
  TERMINAL *old;
  TERMINAL *term = check_rt(self);
  if (term == NULL) { rb_raise(eTermInfoError, "terminfo object not initialized"); }
  if (cur_term == term)
    return;
  old = set_curterm(term);
}
Esempio n. 3
0
/* Warning this function assumes the lock is already taken */
rt_info_t* find_rule_by_prefix_unsafe(ptree_t *pt, ptree_node_t *noprefix,
                                      str prefix, unsigned int grp_id, unsigned int *matched_len)
{
    unsigned int rule_idx = 0;
    rt_info_t *rt_info;

    rt_info = get_prefix(pt, &prefix, grp_id,matched_len, &rule_idx);

    if (rt_info==NULL) {
        LM_DBG("no matching for prefix \"%.*s\"\n",
               prefix.len, prefix.s);

        /* try prefixless rules */
        rt_info = check_rt( noprefix, grp_id);
        if (rt_info == NULL)
            LM_DBG("no prefixless matching for "
                   "grp %d\n", grp_id);
    }
    return rt_info;
}