🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

3 total messages Started by John Franks Mon, 12 Jun 1989 21:42
Problems with TERMCAP in 0.99
#66
Author: John Franks
Date: Mon, 12 Jun 1989 21:42
139 lines
4484 bytes
In subst.c the function sv_terminal() calls 
rl_reset_terminal(get_string_value (name)).
If the TERMCAP variable has just been changed then 
name is "TERMCAP" and the name of a termcap file or 
a termcap entry is passed.  rl_reset_terminal()  passes
it on to init_terminal_io( ) (in readline.c ) which
tries to use it as a terminal name which of course it
isn't.  I see no reason for rl_reset_terminal( ) and
init_terminal_io( )to have any argument at all.

Even after this is fixed there seems to be another bug
I can't track down.  It may be a Sun problem (I'm using
a Sun3, SunOs4.0).  Here's what seems to happen: If I
change the value of TERMCAP, rl_reset_terminal() gets
called as it should, but the old value of TERMCAP 
continues to  be used as the termcap file in that invocation
of bash.  If a new bash is invoked the new termcap file 
is used.  I don't see why this happens.  If anybody 
figurest this out please let me know.

Here is a diff with version 0.99.  It includes some previous changes
to fix the way term_backspace is set.  I posted this 
fix earlier.

*** readline.c.orig.).99	Mon Jun 12 15:58:04 1989
--- readline.c	Mon Jun 12 15:58:03 1989
***************
*** 232,235 ****
--- 231,235 ----
  
  #ifdef SIGWINCH
+ static int
  rl_handle_sigwinch (sig, code, scp)
       int sig, code;
***************
*** 236,242 ****
       struct sigcontext *scp;
  {
    if (readline_echoing_p)
      {
!       rl_reset_terminal (get_string_value ("TERM"));
        putc ('\r', out_stream);
        rl_forced_update_display ();
--- 236,243 ----
       struct sigcontext *scp;
  {
+ 	char *get_string_value( );
    if (readline_echoing_p)
      {
!       rl_reset_terminal ();
        putc ('\r', out_stream);
        rl_forced_update_display ();
***************
*** 495,499 ****
  
    /* Initialize the terminal interface. */
!   init_terminal_io ((char *)NULL);
  
    /* Initialize default key bindings. */
--- 496,500 ----
  
    /* Initialize the terminal interface. */
!   init_terminal_io( );
  
    /* Initialize default key bindings. */
***************
*** 714,717 ****
--- 715,721 ----
  static int line_size = 1024;
  
+ static void move_cursor_relative();
+ static void output_some_chars();
+ 
  /* Non-zero means to always use horizontal scrolling in line display. */
  int horizontal_scroll_mode = 0;
***************
*** 722,726 ****
    register int in, out, c, linenum;
    register char *line = invisible_line;
-   static void move_cursor_relative ();
    int c_pos = 0, v_pos = 0;
    int inv_botlin = 0;		/* Number of lines in newly drawn buffer. */
--- 726,729 ----
***************
*** 1213,1226 ****
  /* Re-initialize the terminal considering that the TERM/TERMCAP variable
     has changed. */
! rl_reset_terminal (terminal_name)
!      char *terminal_name;
  {
!   init_terminal_io (terminal_name);
  }
  
! init_terminal_io (terminal_name)
!      char *terminal_name;
  {
!   char *term = (terminal_name? terminal_name : (char *)getenv ("TERM"));
    char *tgetstr (), *buffer = term_string_buffer;
  
--- 1216,1227 ----
  /* Re-initialize the terminal considering that the TERM/TERMCAP variable
     has changed. */
! rl_reset_terminal ( )
  {
!   init_terminal_io ( );
  }
  
! init_terminal_io( )
  {
!   char *term = (char *)getenv ("TERM");
    char *tgetstr (), *buffer = term_string_buffer;
  
***************
*** 1234,1244 ****
      return;
    }
! 
!   buffer = (char *)xmalloc (2048);
!   BC = tgetstr ("pc", &buffer);
!   PC = buffer ? *buffer : 0;
!   BC = tgetstr ("le", &buffer);
! 
!   term_backspace = tgetstr ("bw", &buffer);
  
    term_cr = tgetstr ("cr", &buffer);
--- 1235,1240 ----
      return;
    }
!   PC = (tgetstr( "pc", &buffer) ? *buffer : 0);
!   BC = term_backspace = tgetstr( "le", &buffer);
  
    term_cr = tgetstr ("cr", &buffer);



John Franks 	Dept of Math. Northwestern University
		Internet	john@math.nwu.edu
		Bitnet		j_franks@nuacc
Re: Problems with TERMCAP in 0.99
#70
Author: john John Franks
Date: Tue, 13 Jun 1989 19:39
142 lines
4273 bytes
In article <767@accuvax.nwu.edu> john@hopf.math.nwu.edu (John Franks) writes:
>Here is a diff with version 0.99.  It includes some previous changes
>to fix the way term_backspace is set.  I posted this 
>fix earlier.

Unfortunately the previous posting got lost. 
Hope that doesn't confuse things too much.  I am
including my most recent diffs deal with the problem that a termcap
file name is sometimes sent to init_terminal_io() instead of a 
file name (see <767@accuvax.nwu.edu>) as well as the backspace 
problem.  Here are quotes from the original posting:

I believe that there is a bug in redline.c where the termcap backspace
string is read.  It seems this string "term_backspace"  is never actually
set to the correct value.  

Also I had to add a couple of declartions to get it to compile with the
Sun C compiler (SunOS 4.0) on Sun 3's and 4's.  Here are the diffs.


*** readline.c.orig.0.99	Mon Jun 12 15:58:04 1989
--- readline.c	Mon Jun 12 15:58:03 1989
***************
*** 233,234 ****
--- 232,234 ----
  #ifdef SIGWINCH
+ static int
  rl_handle_sigwinch (sig, code, scp)
***************
*** 237,238 ****
--- 237,239 ----
  {
+ 	char *get_string_value( );
    if (readline_echoing_p)
***************
*** 239,241 ****
      {
!       rl_reset_terminal (get_string_value ("TERM"));
        putc ('\r', out_stream);
--- 240,242 ----
      {
!       rl_reset_terminal ();
        putc ('\r', out_stream);
***************
*** 496,498 ****
    /* Initialize the terminal interface. */
!   init_terminal_io ((char *)NULL);
  
--- 497,499 ----
    /* Initialize the terminal interface. */
!   init_terminal_io( );
  
***************
*** 715,716 ****
--- 716,720 ----
  
+ static void move_cursor_relative();
+ static void output_some_chars();
+ 
  /* Non-zero means to always use horizontal scrolling in line display. */
***************
*** 723,725 ****
    register char *line = invisible_line;
-   static void move_cursor_relative ();
    int c_pos = 0, v_pos = 0;
--- 727,728 ----
***************
*** 1214,1219 ****
     has changed. */
! rl_reset_terminal (terminal_name)
!      char *terminal_name;
  {
!   init_terminal_io (terminal_name);
  }
--- 1217,1221 ----
     has changed. */
! rl_reset_terminal ( )
  {
!   init_terminal_io ( );
  }
***************
*** 1220,1225 ****
  
! init_terminal_io (terminal_name)
!      char *terminal_name;
  {
!   char *term = (terminal_name? terminal_name : (char *)getenv ("TERM"));
    char *tgetstr (), *buffer = term_string_buffer;
--- 1222,1226 ----
  
! init_terminal_io( )
  {
!   char *term = (char *)getenv ("TERM");
    char *tgetstr (), *buffer = term_string_buffer;
***************
*** 1235,1243 ****
    }
! 
!   buffer = (char *)xmalloc (2048);
!   BC = tgetstr ("pc", &buffer);
!   PC = buffer ? *buffer : 0;
!   BC = tgetstr ("le", &buffer);
! 
!   term_backspace = tgetstr ("bw", &buffer);
  
--- 1236,1239 ----
    }
!   PC = (tgetstr( "pc", &buffer) ? *buffer : 0);
!   BC = term_backspace = tgetstr( "le", &buffer);
  

###################################################################
  
In builtins.c there are some embedded newlines in strings which the
Sun cc doesn't like:

diff builtins.c builtins.c.orig.0.99
363c363,364
< 	command name.\n\n\
---
> 	command name.
> 
367c368,369
< 	respectively.\n\n\
---
> 	respectively.
> 

##################################################################
In shell.c the two functions termination_unwind_protect() and 
throw_to_top_level()  must be declared sighandler for the Sun cc.

diff shell.c shell.c.orig.0.99
768d767
< sighandler
778d776
< sighandler


John Franks 	Dept of Math. Northwestern University
		Internet	john@math.nwu.edu
		Bitnet		j_franks@nuacc
Problems with TERMCAP in 0.99
#87
Author: Brian Fox
Date: Tue, 13 Jun 1989 23:27
29 lines
1628 bytes
   Date: 12 Jun 89 21:42:05 GMT
   From: john@hopf.math.nwu.edu  (John Franks)
   Organization: Northwestern Univ. Evanston, Il.
   Sender: bug-bash-request@prep.ai.mit.edu


   Even after this is fixed there seems to be another bug
   I can't track down.  It may be a Sun problem (I'm using
   a Sun3, SunOs4.0).  Here's what seems to happen: If I
   change the value of TERMCAP, rl_reset_terminal() gets
   called as it should, but the old value of TERMCAP 
   continues to  be used as the termcap file in that invocation
   of bash.  If a new bash is invoked the new termcap file 
   is used.  I don't see why this happens.  If anybody 
   figurest this out please let me know.

The problem should happen on any Unix system.

The environment that is given to the shell is the one that the termcap
library will use when looking for the value of TERMCAP.  In fact, any
call to getenv() will produce the value of the environment passed into
the shell instead of the environment that the shell passes out to
programs that it starts.

Perhaps the shell should supply its own getenv () function which would
know how to do the right thing.

Brian Fox
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads