changeset 2064:092ea2e7316e

(XTread_socket): Don't reverse the chars that XLookupString returns. Use all of them. Save last 100 chars and keysyms in temp_buffer.
author Richard M. Stallman <rms@gnu.org>
date Mon, 08 Mar 1993 05:38:53 +0000
parents 2f0555b428c4
children 32afcdd08efe
files src/xterm.c
diffstat 1 files changed, 17 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/src/xterm.c	Mon Mar 08 00:07:53 1993 +0000
+++ b/src/xterm.c	Mon Mar 08 05:38:53 1993 +0000
@@ -2435,6 +2435,11 @@
 Atom Xatom_wm_configure_denied;	  /* When our config request is denied */
 Atom Xatom_wm_window_moved;	  /* When the WM moves us. */
 
+/* Record the last 100 characters stored
+   to help debug the loss-of-chars-during-GC problem.  */
+int temp_index;
+short temp_buffer[100];
+
 /* Read events coming from the X server.
    This routine is called by the SIGIO handler.
    We return as soon as there are no more events to be read.
@@ -2749,6 +2754,9 @@
 		      || IsKeypadKey (keysym)       /* 0xff80 <= x < 0xffbe */
 		      || IsFunctionKey (keysym))    /* 0xffbe <= x < 0xffe1 */
 		    {
+		      if (temp_index == sizeof temp_buffer / sizeof (short))
+			temp_index = 0;
+		      temp_buffer[temp_index++] = keysym;
 		      bufp->kind = non_ascii_keystroke;
 		      XSET (bufp->code, Lisp_Int, (unsigned) keysym - 0xff00);
 		      XSET (bufp->frame_or_window, Lisp_Frame, f);
@@ -2762,30 +2770,27 @@
 		    {
 		      register int i;
 
-		      if (nbytes == 1)
+		      for (i = 0; i < nbytes; i++)
 			{
+			  if (temp_index == sizeof temp_buffer / sizeof (short))
+			    temp_index = 0;
+			  temp_buffer[temp_index++] = copy_buffer[i];
 			  bufp->kind = ascii_keystroke;
-			  XSET (bufp->code, Lisp_Int, *copy_buffer);
+			  XSET (bufp->code, Lisp_Int, copy_buffer[i]);
 			  XSET (bufp->frame_or_window, Lisp_Frame, f);
 			  bufp->modifiers = x_convert_modifiers (modifiers);
 			  bufp->timestamp = event.xkey.time;
 			  bufp++;
 			}
-		      else
-			for (i = nbytes - 1; i > 1; i--)
-			  {
-			    bufp->kind = ascii_keystroke;
-			    XSET (bufp->code, Lisp_Int, copy_buffer[i]);
-			    XSET (bufp->frame_or_window, Lisp_Frame, f);
-			    bufp->modifiers = x_convert_modifiers (modifiers);
-			    bufp->timestamp = event.xkey.time;
-			    bufp++;
-			  }
 
 		      count += nbytes;
 		      numchars -= nbytes;
 		    }
+		  else
+		    abort ();
 		}
+	      else
+		abort ();
 	    }
 	  break;
 #else /* ! defined (HAVE_X11) */