🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

1 total messages Started by Chris Siebenmann Fri, 11 Aug 1989 00:11
Suggested speedup in readline.c
#458
Author: Chris Siebenmann
Date: Fri, 11 Aug 1989 00:11
116 lines
3755 bytes
 As it stands, readline.c tries to re-read your termcap entry every
time TERM or TERMCAP changes, when it only really needs to do this
right before it starts line editing. Since my .profile plus .bashrc
change them a total of seven times I decided to fix this. The
following context diffs are relative to bash 1.01. They don't QUITE
preserve all the facets of readline.c behavior; in particular,
rl_reset_terminal()'s argument is now ignored (since I didn't feel
like doing yet more malloc()'s to store it away). This doesn't cause
problems in bash, but may in some environments readline is used in.

 For free, you also get a patch to avoid a problem with Ultrix 2.2's
termcap routines (they ignore the tty window size fields). If you
don't want this, delete the last context diff before patching.

*** /tmp/,RCSt1017603	Thu Aug 10 17:37:22 1989
--- readline.c	Wed Jul  5 17:49:25 1989
***************
*** 469,472 ****
--- 469,475 ----
  }
  
+ /* This flags whether we need to reinitialize terminal stuff. */
+ static int redo_init_term = 1;
+ 
  /* Initliaze readline (and terminal if not already). */
  rl_initialize ()
***************
*** 474,477 ****
--- 477,486 ----
    extern char *rl_display_prompt;
  
+   if (redo_init_term)
+     {
+       init_terminal_io ((char *) NULL);
+       redo_init_term = 0;
+     }
+   
    /* If we have never been called before, initialize the
       terminal and data structures. */
***************
*** 520,524 ****
  
    /* Initialize the terminal interface. */
!   init_terminal_io ((char *)NULL);
  
    /* Initialize default key bindings. */
--- 529,533 ----
  
    /* Initialize the terminal interface. */
!   /* init_terminal_io ((char *)NULL); */
  
    /* Initialize default key bindings. */
***************
*** 1279,1283 ****
       char *terminal_name;
  {
!   init_terminal_io (terminal_name);
  }
  
--- 1288,1293 ----
       char *terminal_name;
  {
!   redo_init_term = 1;
!   /* init_terminal_io (terminal_name); */
  }
  
***************
*** 1325,1328 ****
--- 1335,1360 ----
  #endif  /* HACK_TERMCAP_MOTION */
  
+ #ifdef	TIOCGWINSZ
+   {
+     struct winsize	winsize;
+     
+     /* Oh HI, oh Brain Dead Ultrix Termcap! */
+     screenwidth = tgetnum ("co");
+     screenheight = tgetnum ("li");
+     if (ioctl(0, TIOCGWINSZ, (char *) &winsize) >= 0)
+       {
+ 	if (winsize.ws_row > 0)
+ 	  screenheight = winsize.ws_row;
+ 	if (winsize.ws_col > 0)
+ 	  screenwidth = winsize.ws_col;
+       }
+     if (screenwidth <= 0)
+       screenwidth = 80;
+     screenwidth--;		/* PWP: avoid autowrap bugs */
+ 
+     if (screenheight <= 0)
+       screenheight = 24;
+   }
+ #else
    screenwidth = tgetnum ("co");
    if (screenwidth <= 0)
***************
*** 1333,1337 ****
    if (screenheight <= 0)
      screenheight = 24;
! 
    term_im = tgetstr ("im", &buffer);
    term_ei = tgetstr ("ei", &buffer);
--- 1365,1370 ----
    if (screenheight <= 0)
      screenheight = 24;
! #endif
!   
    term_im = tgetstr ("im", &buffer);
    term_ei = tgetstr ("ei", &buffer);

-- 
	"I shall clasp my hands together and bow to the corners of the world."
			Number Ten Ox, "Bridge of Birds"
Chris Siebenmann		...!utgpu!{ncrcan,ontmoh!moore}!ziebmef!cks
cks@white.toronto.edu	     or ...!utgpu!{,csri!}cks
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