This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[RFA] Patch to imported readline to allow DJGPP build


The current imported readline is broken for DJGPP.  The following
patch is needed to allow GDB to build the DJGPP port.  Okay to commit?

Btw, I don't understand what is going on with Readline: I looked at
its official home page (to figure out how to submit the patches below
to the Readline maintainer) and found there an old version 4.3 of
Readline where the DJGPP-specific code is ripped out.  The version
that we have in the GDB repository seems a newer one, but it also has
the DJGPP-specific code in it.  Can someone please tell me what is the
story behind this?  TIA

2003-12-28  Eli Zaretskii  <eliz@elta.co.il>

	* readline.c (rl_save_state, rl_restore_state): Support systems
	that don't define SIGWINCH.

	* terminal.c (_rl_get_screen_size) [__DJGPP__]: Compute the
	screen width and height using console I/O.
	(_rl_init_terminal_io) [__MSDOS__]: Zero out all the _rl_term_*
	variables.  Convert to _rl_* naming scheme.
	(_rl_set_cursor) [__MSDOS__]: Ifdef away this function.

	* display.c (_rl_move_vert) [__MSDOS__]: Don't use undeclared
	variable `l'.  Use `delta' instead recomputing its value anew.
	Assign -delta to i instead of the other way around.

--- readline/readline.c~0	2002-12-08 22:31:36.000000000 +0000
+++ readline/readline.c	2003-12-28 10:33:08.000000000 +0000
@@ -933,7 +933,9 @@ rl_save_state (sp)
   sp->macro = rl_executing_macro;
 
   sp->catchsigs = rl_catch_signals;
+#if defined (SIGWINCH)
   sp->catchsigwinch = rl_catch_sigwinch;
+#endif
 
   return (0);
 }
@@ -967,7 +969,9 @@ rl_restore_state (sp)
   rl_executing_macro = sp->macro;
 
   rl_catch_signals = sp->catchsigs;
+#if defined (SIGWINCH)
   rl_catch_sigwinch = sp->catchsigwinch;
+#endif
 
   return (0);
 }
--- readline/terminal.c~0	2002-12-08 22:31:36.000000000 +0000
+++ readline/terminal.c	2003-12-28 10:34:46.000000000 +0000
@@ -220,7 +220,10 @@ _rl_get_screen_size (tty, ignore_env)
       if (ignore_env == 0 && (ss = sh_get_env_value ("COLUMNS")))
 	_rl_screenwidth = atoi (ss);
 
-#if !defined (__DJGPP__)
+#if defined (__DJGPP__)
+      if (_rl_screenwidth <= 0)
+	_rl_screenwidth = ScreenCols ();
+#else
       if (_rl_screenwidth <= 0 && term_string_buffer)
 	_rl_screenwidth = tgetnum ("co");
 #endif
@@ -233,7 +236,10 @@ _rl_get_screen_size (tty, ignore_env)
       if (ignore_env == 0 && (ss = sh_get_env_value ("LINES")))
 	_rl_screenheight = atoi (ss);
 
-#if !defined (__DJGPP__)
+#if defined (__DJGPP__)
+      if (_rl_screenheight <= 0)
+	_rl_screenheight = ScreenRows ();
+#else
       if (_rl_screenheight <= 0 && term_string_buffer)
 	_rl_screenheight = tgetnum ("li");
 #endif
@@ -382,12 +388,19 @@ _rl_init_terminal_io (terminal_name)
     term = "dumb";
 
 #ifdef __MSDOS__
-  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;
-  terminal_can_insert = term_has_meta = _rl_term_autowrap = 0;
-  term_cr = "\r";
+  _rl_term_im = _rl_term_ei = _rl_term_ic = _rl_term_IC = (char *)NULL;
+  _rl_term_up = _rl_term_dc = _rl_term_DC = _rl_visible_bell = (char *)NULL;
+  _rl_term_ku = _rl_term_kd = _rl_term_kl = _rl_term_kr = (char *)NULL;
+  _rl_term_mm = _rl_term_mo = (char *)NULL;
+  _rl_terminal_can_insert = term_has_meta = _rl_term_autowrap = 0;
+  _rl_term_cr = "\r";
+  _rl_term_clreol = _rl_term_clrpag = _rl_term_backspace = (char *)NULL;
+  _rl_term_goto = _rl_term_pc = _rl_term_ip = (char *)NULL;
+  _rl_term_ks = _rl_term_ke =_rl_term_vs = _rl_term_ve = (char *)NULL;
+  _rl_term_kh = _rl_term_kH = _rl_term_at7 = _rl_term_kI = (char *)NULL;
+#if defined(HACK_TERMCAP_MOTION)
+  _rl_term_forward_char = (char *)NULL;
+#endif
 
   _rl_get_screen_size (tty, 0);
 #else  /* !__MSDOS__ */
@@ -677,6 +690,7 @@ void
 _rl_set_cursor (im, force)
      int im, force;
 {
+#ifndef __MSDOS__
   if (_rl_term_ve && _rl_term_vs)
     {
       if (force || im != rl_insert_mode)
@@ -687,4 +701,5 @@ _rl_set_cursor (im, force)
 	    tputs (_rl_term_ve, 1, _rl_output_character_function);
 	}
     }
+#endif
 }
--- readline/display.c~0	2003-01-11 00:43:52.000000000 +0000
+++ readline/display.c	2003-12-23 18:47:36.000000000 +0000
@@ -1642,10 +1642,10 @@ _rl_move_vert (to)
 #ifdef __MSDOS__
       int row, col;
 
-      l = fflush (rl_outstream); /* make sure the cursor pos is current! */
+      fflush (rl_outstream); /* make sure the cursor pos is current! */
       ScreenGetCursor (&row, &col);
-      ScreenSetCursor ((row + to - _rl_last_v_pos), col);
-      delta = i;
+      ScreenSetCursor (row + delta, col);
+      i = -delta;    /* in case someone wants to use it after the loop */
 #else /* !__MSDOS__ */
       if (_rl_term_up && *_rl_term_up)
 	for (i = 0; i < -delta; i++)


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]