/* * 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); }