if (term == 0)
if (term == 0 || *term == '\0')
_rl_init_terminal_io (terminal_name)     char *terminal_name;{  char *term, *buffer;  int tty, tgetent_ret;  Keymap xkeymap;  term = terminal_name ? terminal_name : get_env_value ("TERM");  term_clrpag = term_cr = term_clreol = (char *)NULL;  tty = rl_instream ? fileno (rl_instream) : 0;  screenwidth = screenheight = 0;  if (term == 0)    term = "dumb";  /* I've separated this out for later work on not calling tgetent at all     if the calling application has supplied a custom redisplay function,     (and possibly if the application has supplied a custom input function). */  if (CUSTOM_REDISPLAY_FUNC())    {      tgetent_ret = -1;    }  else    {      if (term_string_buffer == 0)	term_string_buffer = xmalloc(2032);      if (term_buffer == 0)	term_buffer = xmalloc(4080);      buffer = term_string_buffer;      tgetent_ret = tgetent (term_buffer, term);    }  if (tgetent_ret <= 0)    {      FREE (term_string_buffer);      FREE (term_buffer);      buffer = term_buffer = term_string_buffer = (char *)NULL;      dumb_term = 1;      _rl_term_autowrap = 0;	/* used by _rl_get_screen_size */#if defined (__EMX__)      _emx_get_screensize (&screenwidth, &screenheight);      screenwidth--;#else /* !__EMX__ */      _rl_get_screen_size (tty, 0);#endif /* !__EMX__ */      /* Defaults. */      if (screenwidth <= 0 || screenheight <= 0)        {	  screenwidth = 79;	  screenheight = 24;        }      /* Everything below here is used by the redisplay code (tputs). */      screenchars = screenwidth * screenheight;      term_cr = "\r";      term_im = term_ei = term_ic = term_IC = (char *)NULL;      term_up = term_dc = term_DC = visible_bell = (char *)NULL;      term_ku = term_kd = term_kl = term_kr = (char *)NULL;      term_mm = term_mo = (char *)NULL;#if defined (HACK_TERMCAP_MOTION)      term_forward_char = (char *)NULL;#endif      terminal_can_insert = term_has_meta = 0;      /* Reasonable defaults for tgoto().  Readline currently only uses         tgoto if term_IC or term_DC is defined, but just in case we         change that later... */      PC = '\0';      BC = term_backspace = "\b";      UP = term_up;      return 0;    }  get_term_capabilities (&buffer);  /* Set up the variables that the termcap library expects the application     to provide. */  PC = term_pc ? *term_pc : 0;  BC = term_backspace;  UP = term_up;  if (!term_cr)    term_cr = "\r";  _rl_term_autowrap = tgetflag ("am") && tgetflag ("xn");  _rl_get_screen_size (tty, 0);  /* "An application program can assume that the terminal can do      character insertion if *any one of* the capabilities `IC',      `im', `ic' or `ip' is provided."  But we can't do anything if      only `ip' is provided, so... */  terminal_can_insert = (term_IC || term_im || term_ic);  /* Check to see if this terminal has a meta key and clear the capability     variables if there is none. */  term_has_meta = (tgetflag ("km") || tgetflag ("MT"));  if (!term_has_meta)    term_mm = term_mo = (char *)NULL;  /* Attempt to find and bind the arrow keys.  Do not override already     bound keys in an overzealous attempt, however. */  xkeymap = _rl_keymap;  _rl_keymap = emacs_standard_keymap;  _rl_bind_if_unbound (term_ku, rl_get_previous_history);  _rl_bind_if_unbound (term_kd, rl_get_next_history);  _rl_bind_if_unbound (term_kr, rl_forward);  _rl_bind_if_unbound (term_kl, rl_backward);  _rl_bind_if_unbound (term_kh, rl_beg_of_line);	/* Home */  _rl_bind_if_unbound (term_kH, rl_end_of_line);	/* End */#if defined (VI_MODE)  _rl_keymap = vi_movement_keymap;  _rl_bind_if_unbound (term_ku, rl_get_previous_history);  _rl_bind_if_unbound (term_kd, rl_get_next_history);  _rl_bind_if_unbound (term_kr, rl_forward);  _rl_bind_if_unbound (term_kl, rl_backward);  _rl_bind_if_unbound (term_kh, rl_beg_of_line);	/* Home */  _rl_bind_if_unbound (term_kH, rl_end_of_line);	/* End */#endif /* VI_MODE */  _rl_keymap = xkeymap;  return 0;}