[comp.sources.x] v02i078: X11 Release 3, Patch4

mikew@wyse.wyse.com (Mike Wexler) (01/07/89)

Submitted-by: Xstuff service <xstuff@EXPO.LCS.MIT.EDU>
Posting-number: Volume 2, Issue 78
Archive-name: x11.3/patch4

[I had some problems applying this patch.  Some of the SCCS headers
didn't match.  Also the patch to xterm.man didn't work very well.
Your mileage may vary. -mcw]

This patch fixes problems in the following files:

  clients/xterm/Imakefile	add comment about -DWTMP and -DLASTLOG
  clients/xterm/Tekproc.c	fix menu action problems that abort xterm
  clients/xterm/VTPrsTbl.c	added support for DECID sequence ESC Z
  clients/xterm/VTparse.def	added support for DECID sequence ESC Z
  clients/xterm/VTparse.h	added support for DECID sequence ESC Z
  clients/xterm/button.c	fixed extend selection bugs and core dump
  clients/xterm/charproc.c	ESC Z and pointer escape sequences
  clients/xterm/main.c		utmp bug and optional WTMP and LASTLOG
  clients/xterm/misc.c		fix error message and cleanup
  clients/xterm/screen.c	fix resizing window with selection bug
  clients/xterm/xterm.man	no longer using vtsingle or vtbold


Apply these fixes from the top of your X sources as follows:

	%  patch -p0 <fix4


*** /tmp/,RCSt1a11316		Fri Jan  6 10:48:49 1989
--- clients/xterm/Imakefile	Wed Jan  4 14:33:17 1989
***************
*** 24,29 ****
--- 24,30 ----
  #else
  #define GettyProgram /* as nothing */
  #endif
+ /* add -DWTMP and -DLASTLOG if you want them */
          DEFINES = -DMODEMENU -DUTMP -DBcopy=bcopy GettyProgram
            SRCS1 = button.c charproc.c cursor.c data.c input.c \
  		  main.c menu.c misc.c screen.c scrollbar.c tabs.c \
*** /tmp/,RCSt1a11350		Fri Jan  6 10:49:02 1989
--- clients/xterm/Tekproc.c	Wed Jan  4 12:01:42 1989
***************
*** 1,5 ****
  /*
!  * $XConsortium: Tekproc.c,v 1.44 88/11/16 13:45:06 rws Exp $
   *
   * Warning, there be crufty dragons here.
   */
--- 1,5 ----
  /*
!  * $XConsortium: Tekproc.c,v 1.47 89/01/04 12:01:34 jim Exp $
   *
   * Warning, there be crufty dragons here.
   */
***************
*** 121,127 ****
  #define	unput(c)	*Tpushback++ = c
  
  #ifndef lint
! static char rcs_id[] = "$XConsortium: Tekproc.c,v 1.44 88/11/16 13:45:06 rws Exp $";
  #endif	/* lint */
  
  static XPoint *T_box[TEKNUMFONTS] = {
--- 121,127 ----
  #define	unput(c)	*Tpushback++ = c
  
  #ifndef lint
! static char rcs_id[] = "$XConsortium: Tekproc.c,v 1.47 89/01/04 12:01:34 jim Exp $";
  #endif	/* lint */
  
  static XPoint *T_box[TEKNUMFONTS] = {
***************
*** 679,685 ****
      register int border = 2 * screen->border;
      register double d;
  
!     XClearWindow(screen->display, TWindow(screen));
      TWidth(screen) = w->core.width - border;
      THeight(screen) = w->core.height - border;
      TekScale(screen) = (double)TWidth(screen) / TEKWIDTH;
--- 679,685 ----
      register int border = 2 * screen->border;
      register double d;
  
!     if (TWindow(screen)) XClearWindow(screen->display, TWindow(screen));
      TWidth(screen) = w->core.width - border;
      THeight(screen) = w->core.height - border;
      TekScale(screen) = (double)TWidth(screen) / TEKWIDTH;
***************
*** 1166,1173 ****
      if ((XValue&pr) || (YValue&pr))
        sizehints.flags |= USSize|USPosition;
      else sizehints.flags |= PSize|PPosition;
!     tw->core.width = sizehints.width = width;
!     tw->core.height = sizehints.height = height;
      if ((WidthValue&pr) || (HeightValue&pr))
        sizehints.flags |= USSize;
      else sizehints.flags |= PSize;
--- 1166,1173 ----
      if ((XValue&pr) || (YValue&pr))
        sizehints.flags |= USSize|USPosition;
      else sizehints.flags |= PSize|PPosition;
!     sizehints.width = width;
!     sizehints.height = height;
      if ((WidthValue&pr) || (HeightValue&pr))
        sizehints.flags |= USSize;
      else sizehints.flags |= PSize;
***************
*** 1305,1310 ****
--- 1305,1311 ----
      tek->count = 0;
      tek->ptr = tek->data;
      Tpushback = Tpushb;
+     Tbptr = Tbuffer;
      screen->cur_X = 0;
      screen->cur_Y = TEKHOME;
      line_pt = Tline;
*** /tmp/,RCSt1a11362		Fri Jan  6 10:49:06 1989
--- clients/xterm/VTPrsTbl.c	Wed Jan  4 13:37:47 1989
***************
*** 1,5 ****
  /*
!  *	$XConsortium: VTPrsTbl.c,v 1.2 88/09/06 17:07:40 jim Exp $
   */
  
  
--- 1,5 ----
  /*
!  *	$XConsortium: VTPrsTbl.c,v 1.3 89/01/04 13:37:41 jim Exp $
   */
  
  
***************
*** 29,41 ****
   */
  
  #ifndef lint
! static char *rcsid_VTparsetable_c = "$XConsortium: VTPrsTbl.c,v 1.2 88/09/06 17:07:40 jim Exp $";
  #endif	/* lint */
  
  #include "VTparse.h"
  #ifndef lint
! static char rcs_id[] = "$XConsortium: VTPrsTbl.c,v 1.2 88/09/06 17:07:40 jim Exp $";
  #endif	/* lint */
  /*
   * Stupid Apollo C preprocessor can't handle long lines.  So... To keep
   * it happy, we put each onto a seperate line....  Sigh...
--- 29,42 ----
   */
  
  #ifndef lint
! static char *rcsid_VTparsetable_c = "$XConsortium: VTPrsTbl.c,v 1.3 89/01/04 13:37:41 jim Exp $";
  #endif	/* lint */
  
  #include "VTparse.h"
  #ifndef lint
! static char rcs_id[] = "$XConsortium: VTPrsTbl.c,v 1.3 89/01/04 13:37:41 jim Exp $";
  #endif	/* lint */
+ 
  /*
   * Stupid Apollo C preprocessor can't handle long lines.  So... To keep
   * it happy, we put each onto a seperate line....  Sigh...
***************
*** 807,813 ****
  /*	X		Y		Z		[	*/
  CASE_GROUND_STATE,
  CASE_GROUND_STATE,
! CASE_GROUND_STATE,
  CASE_CSI_STATE,
  /*	\		]		^		_	*/
  CASE_GROUND_STATE,
--- 808,814 ----
  /*	X		Y		Z		[	*/
  CASE_GROUND_STATE,
  CASE_GROUND_STATE,
! CASE_DECID,
  CASE_CSI_STATE,
  /*	\		]		^		_	*/
  CASE_GROUND_STATE,
*** /tmp/,RCSt1a11371		Fri Jan  6 10:49:10 1989
--- clients/xterm/VTparse.def	Wed Jan  4 13:37:49 1989
***************
*** 1,5 ****
  #
! # $XConsortium: VTparse.def,v 1.2 88/09/06 14:35:13 jim Exp $
  #
  # List of symbols that need to be defined for VTparse.h.  If you need to 
  # change any of the CASE_ macros, make the change here and rerun the command
--- 1,5 ----
  #
! # $XConsortium: VTparse.def,v 1.3 89/01/04 13:37:48 jim Exp $
  #
  # List of symbols that need to be defined for VTparse.h.  If you need to 
  # change any of the CASE_ macros, make the change here and rerun the command
***************
*** 73,75 ****
--- 73,76 ----
  CASE_XTERM_SAVE
  CASE_XTERM_RESTORE
  CASE_XTERM_TITLE
+ CASE_DECID
*** /tmp/,RCSt1a11377		Fri Jan  6 10:49:12 1989
--- clients/xterm/VTparse.h	Wed Jan  4 13:37:50 1989
***************
*** 1,5 ****
  /*
!  *	$XConsortium: VTparse.h,v 1.3 88/09/06 17:07:45 jim Exp $
   */
  
  
--- 1,5 ----
  /*
!  *	$XConsortium: VTparse.h,v 1.4 89/01/04 13:37:49 jim Exp $
   */
  
  
***************
*** 109,111 ****
--- 109,112 ----
  #define CASE_XTERM_SAVE 64
  #define CASE_XTERM_RESTORE 65
  #define CASE_XTERM_TITLE 66
+ #define CASE_DECID 67
*** /tmp/,RCSt1a11389		Fri Jan  6 10:49:21 1989
--- clients/xterm/button.c	Thu Jan  5 12:49:10 1989
***************
*** 1,5 ****
  /*
!  *	$XConsortium: button.c,v 1.24 88/11/16 13:48:39 rws Exp $
   */
  
  
--- 1,5 ----
  /*
!  *	$XConsortium: button.c,v 1.32 89/01/05 12:47:45 swick Exp $
   */
  
  
***************
*** 35,41 ****
  				J. Gettys.
  */
  #ifndef lint
! static char rcs_id[] = "$XConsortium: button.c,v 1.24 88/11/16 13:48:39 rws Exp $";
  #endif	/* lint */
  #include <X11/Xos.h>
  #include <X11/Xlib.h>
--- 35,41 ----
  				J. Gettys.
  */
  #ifndef lint
! static char rcs_id[] = "$XConsortium: button.c,v 1.32 89/01/05 12:47:45 swick Exp $";
  #endif	/* lint */
  #include <X11/Xos.h>
  #include <X11/Xlib.h>
***************
*** 130,143 ****
  static int replyToEmacs;
  
  
! static Boolean SendMousePosition(w, event)
  Widget w;
! XEvent* event;			/* must be XButtonEvent* */
  {
      register TScreen *screen = &((XtermWidget)w)->screen;
      
      if (screen->send_mouse_pos == 0) return False;
  
  #define KeyModifiers \
      (event->xbutton.state & (ShiftMask | LockMask | ControlMask | Mod1Mask | \
  			     Mod2Mask | Mod3Mask | Mod4Mask | Mod5Mask ))
--- 130,146 ----
  static int replyToEmacs;
  
  
! Boolean SendMousePosition(w, event)
  Widget w;
! XEvent* event;
  {
      register TScreen *screen = &((XtermWidget)w)->screen;
      
      if (screen->send_mouse_pos == 0) return False;
  
+     if (event->type != ButtonPress && event->type != ButtonRelease)
+ 	return False;
+ 
  #define KeyModifiers \
      (event->xbutton.state & (ShiftMask | LockMask | ControlMask | Mod1Mask | \
  			     Mod2Mask | Mod3Mask | Mod4Mask | Mod5Mask ))
***************
*** 149,156 ****
      switch (screen->send_mouse_pos) {
        case 1: /* X10 compatibility sequences */
  
! 	if (event->type == ButtonPress && KeyModifiers == 0) {
! 	    EditorButton(event);
  	    return True;
  	}
  	return False;
--- 152,160 ----
      switch (screen->send_mouse_pos) {
        case 1: /* X10 compatibility sequences */
  
! 	if (KeyModifiers == 0) {
! 	    if (event->type == ButtonPress)
! 		EditorButton(event);
  	    return True;
  	}
  	return False;
***************
*** 196,206 ****
  		case RIGHTEXTENSION :
  			ExtendExtend(event->xmotion.x, event->xmotion.y);
  			break;
! 		default :
! 			/* Should get here rarely when everything
! 			   fixed with windows and the event mgr */
! /*			fprintf(stderr, "Race mouse motion\n");
! */			break;
  	}
  }
  
--- 200,208 ----
  		case RIGHTEXTENSION :
  			ExtendExtend(event->xmotion.x, event->xmotion.y);
  			break;
! 		case NORMAL :
! 			/* will get here if send_mouse_pos != 0 */
! 		        break;
  	}
  }
  
***************
*** 344,349 ****
--- 346,352 ----
  String *params;			/* selections in precedence order */
  Cardinal *num_params;
  {
+     if (SendMousePosition(w, event)) return;
      _GetSelection(w, event->xbutton.time, params, *num_params);
  }
  
***************
*** 503,508 ****
--- 506,512 ----
  	TScreen *screen = &((XtermWidget)w)->screen;
  	int row, col, coord;
  
+ 	if (SendMousePosition(w, event)) return;
  	firstValidRow = 0;
  	lastValidRow  = screen->max_row;
  	SetSelectUnit(event->xbutton.time, selectUnit);
***************
*** 576,595 ****
  
  ScrollSelection(screen, amount)
  register TScreen* screen;
! int amount;
  {
      /* Sent by scrollbar stuff, so amount never takes selection out of
         saved text */
  
      startRRow += amount; endRRow += amount;
      startSRow += amount; endSRow += amount;
      rawRow += amount;
      screen->startHRow += amount;
      screen->endHRow += amount;
  }
  
  
! PointToRowCol(y, x, r, c)
  register int y, x;
  int *r, *c;
  /* Convert pixel coordinates to character coordinates.
--- 580,656 ----
  
  ScrollSelection(screen, amount)
  register TScreen* screen;
! register int amount;
  {
+     register int minrow = -screen->savedlines;
+ 
      /* Sent by scrollbar stuff, so amount never takes selection out of
         saved text */
  
+     /* XXX - the preceeding is false; cat /etc/termcap (or anything
+        larger than the number of saved lines plus the screen height) and then
+        hit extend select */
+ 
      startRRow += amount; endRRow += amount;
      startSRow += amount; endSRow += amount;
      rawRow += amount;
      screen->startHRow += amount;
      screen->endHRow += amount;
+ 
+     if (startRRow < minrow) {
+ 	startRRow = minrow;
+ 	startRCol = 0;
+     }
+     if (endRRow < minrow) {
+ 	endRRow = minrow;
+         endRCol = 0;
+     }
+     if (startSRow < minrow) {
+ 	startSRow = minrow;
+ 	startSCol = 0;
+     }
+     if (endSRow < minrow) {
+ 	endSRow = minrow;
+ 	endSCol = 0;
+     }
+     if (rawRow < minrow) {
+ 	rawRow = minrow;
+ 	rawCol = 0;
+     }
+     if (screen->startHRow < minrow) {
+ 	screen->startHRow = minrow;
+ 	screen->startHCol = 0;
+     }
+     if (screen->endHRow < minrow) {
+ 	screen->endHRow = minrow;
+ 	screen->endHCol = 0;
+     }
+     screen->startHCoord = Coordinate (screen->startHRow, screen->startHCol);
+     screen->endHCoord = Coordinate (screen->endHRow, screen->endHCol);
  }
  
  
! ResizeSelection (screen, rows, cols)
!     TScreen *screen;
!     int rows, cols;
! {
!     rows--;				/* decr to get 0-max */
!     cols--;
! 
!     if (startRRow > rows) startRRow = rows;
!     if (startSRow > rows) startSRow = rows;
!     if (endRRow > rows) endRRow = rows;
!     if (endSRow > rows) endSRow = rows;
!     if (rawRow > rows) rawRow = rows;
! 
!     if (startRCol > cols) startRCol = cols;
!     if (startSCol > cols) startSCol = cols;
!     if (endRCol > cols) endRCol = cols;
!     if (endSCol > cols) endSCol = cols;
!     if (rawCol > cols) rawCol = cols;
! }
! 
! static PointToRowCol(y, x, r, c)
  register int y, x;
  int *r, *c;
  /* Convert pixel coordinates to character coordinates.
***************
*** 820,829 ****
  	register int i, j;
  	GC tempgc;
  
! 	if (frow < 0) frow = 0;
! 	if (trow < 0) trow = 0;
! 	if (frow > screen->max_row) frow = screen->max_row;
! 	if (trow > screen->max_row) trow = screen->max_row;
  	if (frow == trow && fcol == tcol)
  		return;
  
--- 881,897 ----
  	register int i, j;
  	GC tempgc;
  
! 	if (frow < 0)
! 	    frow = fcol = 0;
! 	else if (frow > screen->max_row)
! 	    return;		/* nothing to do, since trow >= frow */
! 
! 	if (trow < 0)
! 	    return;		/* nothing to do, since frow <= trow */
! 	else if (trow > screen->max_row) {
! 	    trow = screen->max_row;
! 	    tcol = screen->max_col+1;
! 	}
  	if (frow == trow && fcol == tcol)
  		return;
  
*** /tmp/,RCSt1a11409		Fri Jan  6 10:49:31 1989
--- clients/xterm/charproc.c	Wed Jan  4 15:49:55 1989
***************
*** 1,5 ****
  /*
!  * $XConsortium: charproc.c,v 1.62 88/11/16 18:15:34 rws Exp $
   */
  
  
--- 1,5 ----
  /*
!  * $XConsortium: charproc.c,v 1.64 89/01/04 13:37:50 jim Exp $
   */
  
  
***************
*** 134,140 ****
  #define	doinput()		(bcnt-- > 0 ? *bptr++ : in_put())
  
  #ifndef lint
! static char rcs_id[] = "$XConsortium: charproc.c,v 1.62 88/11/16 18:15:34 rws Exp $";
  #endif	/* lint */
  
  static long arg;
--- 134,140 ----
  #define	doinput()		(bcnt-- > 0 ? *bptr++ : in_put())
  
  #ifndef lint
! static char rcs_id[] = "$XConsortium: charproc.c,v 1.64 89/01/04 13:37:50 jim Exp $";
  #endif	/* lint */
  
  static long arg;
***************
*** 646,651 ****
--- 646,654 ----
  			 param[3]-1, param[4]-2);
  			break;
  
+ 		 case CASE_DECID:
+ 			param[0] = -1;		/* Default ID parameter */
+ 			/* Fall through into ... */
  		 case CASE_DA1:
  			/* DA1 */
  			if (param[0] <= 0) {	/* less than means DEFAULT */
***************
*** 2908,2912 ****
      String *params;		/* unused */
      Cardinal *param_count;	/* unused */
  {
!     /* do nothing */
  }
--- 2911,2916 ----
      String *params;		/* unused */
      Cardinal *param_count;	/* unused */
  {
!     /* do nothing, but check for funny escape sequences */
!     (void) SendMousePosition(w, event);
  }
*** /tmp/,RCSt1a11505		Fri Jan  6 10:50:12 1989
--- clients/xterm/main.c	Wed Jan  4 14:33:58 1989
***************
*** 1,5 ****
  #ifndef lint
! static char rcs_id[] = "$XConsortium: main.c,v 1.97 88/11/07 11:16:34 jim Exp $";
  #endif	/* lint */
  
  /*
--- 1,5 ----
  #ifndef lint
! static char rcs_id[] = "$XConsortium: main.c,v 1.99 89/01/04 14:33:47 jim Exp $";
  #endif	/* lint */
  
  /*
***************
*** 102,109 ****
--- 102,126 ----
  #endif /* apollo */
  
  #include <utmp.h>
+ #ifdef LASTLOG
+ #include <lastlog.h>
+ #endif
  #include <sys/param.h>	/* for NOFILE */
  
+ #ifndef UTMP_FILENAME
+ #define UTMP_FILENAME "/etc/utmp"
+ #endif
+ #ifndef LASTLOG_FILENAME
+ #define LASTLOG_FILENAME "/usr/adm/lastlog"  /* only on BSD systems */
+ #endif
+ #ifndef WTMP_FILENAME
+ #if defined(SYSV) || defined(macII)
+ #define WTMP_FILENAME "/etc/wtmp"
+ #else
+ #define WTMP_FILENAME "/usr/adm/wtmp"
+ #endif
+ #endif
+ 
  #include "ptyx.h"
  #include "data.h"
  #include "error.h"
***************
*** 220,226 ****
  extern void endpwent();
  extern struct passwd *fgetpwent();
  #else	/* not USE_SYSV_UTMP */
! static char etc_utmp[] = "/etc/utmp";
  #endif	/* USE_SYSV_UTMP */
  
  static char *get_ty;
--- 237,249 ----
  extern void endpwent();
  extern struct passwd *fgetpwent();
  #else	/* not USE_SYSV_UTMP */
! static char etc_utmp[] = UTMP_FILENAME;
! #ifdef LASTLOG
! static char etc_lastlog[] = LASTLOG_FILENAME;
! #endif 
! #ifdef WTMP
! static char etc_wtmp[] = WTMP_FILENAME;
! #endif
  #endif	/* USE_SYSV_UTMP */
  
  static char *get_ty;
***************
*** 1130,1135 ****
--- 1153,1161 ----
  	struct passwd *pw = NULL;
  #ifdef UTMP
  	struct utmp utmp;
+ #ifdef LASTLOG
+ 	struct lastlog lastlog;
+ #endif	/* LASTLOG */
  #endif	/* UTMP */
  	extern int Exit();
  	char *getenv();
***************
*** 1704,1718 ****
  			    (pw = getpwuid(screen->uid)) &&
  			    (i = open(etc_utmp, O_WRONLY)) >= 0) {
  				bzero((char *)&utmp, sizeof(struct utmp));
! 				(void) strcpy(utmp.ut_line, ttydev + strlen("/dev/"));
! 				(void) strcpy(utmp.ut_name, pw->pw_name);
! 				(void) strcpy(utmp.ut_host, 
! 					      XDisplayString (screen->display));
  				time(&utmp.ut_time);
  				lseek(i, (long)(tslot * sizeof(struct utmp)), 0);
  				write(i, (char *)&utmp, sizeof(struct utmp));
  				added_utmp_entry = True;
  				close(i);
  			} else
  				tslot = -tslot;
  		}
--- 1730,1775 ----
  			    (pw = getpwuid(screen->uid)) &&
  			    (i = open(etc_utmp, O_WRONLY)) >= 0) {
  				bzero((char *)&utmp, sizeof(struct utmp));
! 				(void) strncpy(utmp.ut_line,
! 					       ttydev + strlen("/dev/"),
! 					       sizeof(utmp.ut_line));
! 				(void) strncpy(utmp.ut_name, pw->pw_name,
! 					       sizeof(utmp.ut_name));
! 				(void) strncpy(utmp.ut_host, 
! 					       XDisplayString (screen->display),
! 					       sizeof(utmp.ut_host));
  				time(&utmp.ut_time);
  				lseek(i, (long)(tslot * sizeof(struct utmp)), 0);
  				write(i, (char *)&utmp, sizeof(struct utmp));
+ 				close(i);
  				added_utmp_entry = True;
+ #ifdef WTMP
+ 				if (term->misc.login_shell &&
+ 				(i = open(etc_wtmp, O_WRONLY|O_APPEND)) >= 0) {
+ 				    write(i, (char *)&utmp,
+ 					sizeof(struct utmp));
  				close(i);
+ 				}
+ #endif /* WTMP */
+ #ifdef LASTLOG
+ 				if (term->misc.login_shell &&
+ 				(i = open(etc_lastlog, O_WRONLY)) >= 0) {
+ 				    bzero((char *)&lastlog,
+ 					sizeof (struct lastlog));
+ 				    (void) strncpy(lastlog.ll_line, ttydev +
+ 					sizeof("/dev"),
+ 					sizeof (lastlog.ll_line));
+ 				    (void) strncpy(lastlog.ll_host, 
+ 					  XDisplayString (screen->display),
+ 					  sizeof (lastlog.ll_host));
+ 				    time(&lastlog.ll_time);
+ 				    lseek(i, (long)(screen->uid *
+ 					sizeof (struct lastlog)), 0);
+ 				    write(i, (char *)&lastlog,
+ 					sizeof (struct lastlog));
+ 				    close(i);
+ 				}
+ #endif /* LASTLOG */
  			} else
  				tslot = -tslot;
  		}
***************
*** 2020,2025 ****
--- 2077,2092 ----
  		lseek(i, (long)(tslot * sizeof(struct utmp)), 0);
  		write(i, (char *)&utmp, sizeof(struct utmp));
  		close(i);
+ #ifdef WTMP
+ 		if (term->misc.login_shell &&
+ 		    (i = open(etc_wtmp, O_WRONLY | O_APPEND)) >= 0) {
+ 			(void) strncpy(utmp.ut_line, ttydev +
+ 			    sizeof("/dev"), sizeof (utmp.ut_line));
+ 			time(&utmp.ut_time);
+ 			write(i, (char *)&utmp, sizeof(struct utmp));
+ 			close(i);
+ 		}
+ #endif /* WTMP */
  	}
  #endif	/* USE_SYSV_UTMP */
  #endif	/* UTMP */
*** /tmp/,RCSt1a11555		Fri Jan  6 10:50:27 1989
--- clients/xterm/misc.c	Wed Jan  4 12:25:20 1989
***************
*** 1,5 ****
  /*
!  *	$XConsortium: misc.c,v 1.28 88/11/17 16:07:46 rws Exp $
   */
  
  
--- 1,5 ----
  /*
!  *	$XConsortium: misc.c,v 1.29 89/01/04 12:25:17 jim Exp $
   */
  
  
***************
*** 45,50 ****
--- 45,51 ----
  #include "wait.ic"
  #include "waitmask.ic"
  #include <X11/Shell.h>
+ #include <X11/Xmu.h>
  
  extern char *malloc();
  extern char *mktemp();
***************
*** 53,59 ****
  extern void abort();
  
  #ifndef lint
! static char rcs_id[] = "$XConsortium: misc.c,v 1.28 88/11/17 16:07:46 rws Exp $";
  #endif	/* lint */
  
  xevents()
--- 54,60 ----
  extern void abort();
  
  #ifndef lint
! static char rcs_id[] = "$XConsortium: misc.c,v 1.29 89/01/04 12:25:17 jim Exp $";
  #endif	/* lint */
  
  xevents()
***************
*** 880,893 ****
  Display *d;
  register XErrorEvent *ev;
  {
!         char buffer[BUFSIZ];
! 	XGetErrorText(d, ev->error_code, buffer, BUFSIZ);
! 	fprintf(stderr, "%s: %s\n", xterm_name, buffer);
! 	fprintf(stderr, "Request code %d, minor code %d, serial #%ld, resource id %ld\n",
! 	 ev->request_code, ev->minor_code, ev->serial, (long)ev->resourceid);
!     	_cleanup();
!     	abort();
! /*	Exit(ERROR_XERROR); */
  }
  
  /*ARGSUSED*/
--- 881,889 ----
  Display *d;
  register XErrorEvent *ev;
  {
!     fprintf (stderr, "%s:  warning, error event receieved:\n", xterm_name);
!     (void) XmuPrintDefaultErrorMessage (d, ev, stderr);
!     Exit (ERROR_XERROR);
  }
  
  /*ARGSUSED*/
*** /tmp/,RCSt1a11588		Fri Jan  6 10:50:37 1989
--- clients/xterm/screen.c	Tue Jan  3 16:18:12 1989
***************
*** 1,5 ****
  /*
!  *	$XConsortium: screen.c,v 1.9 88/11/07 11:34:48 jim Exp $
   */
  
  #include <X11/copyright.h>
--- 1,5 ----
  /*
!  *	$XConsortium: screen.c,v 1.10 89/01/03 16:18:06 jim Exp $
   */
  
  #include <X11/copyright.h>
***************
*** 30,36 ****
  /* screen.c */
  
  #ifndef lint
! static char rcs_id[] = "$XConsortium: screen.c,v 1.9 88/11/07 11:34:48 jim Exp $";
  #endif	/* lint */
  
  #include <X11/Xlib.h>
--- 30,36 ----
  /* screen.c */
  
  #ifndef lint
! static char rcs_id[] = "$XConsortium: screen.c,v 1.10 89/01/03 16:18:06 jim Exp $";
  #endif	/* lint */
  
  #include <X11/Xlib.h>
***************
*** 526,531 ****
--- 526,532 ----
  	
  	screen->fullVwin.fullheight = height;
  	screen->fullVwin.fullwidth = width;
+ 	ResizeSelection (screen, rows, cols);
  #ifdef sun
  #ifdef TIOCSSIZE
  	/* Set tty's idea of window size */
*** /tmp/,RCSt1a11640		Fri Jan  6 10:50:55 1989
--- clients/xterm/xterm.man	Wed Jan  4 15:51:15 1989
***************
*** 337,343 ****
  .TP 8
  .B \-fn \fIfont\fP
  This option specifies the font to be used for displaying normal text.  The
! default is ``vtsingle.''
  .TP 8
  .B \-name \fIname\fP
  This option specifies the application name under which resources are to be
--- 337,343 ----
  .TP 8
  .B \-fn \fIfont\fP
  This option specifies the font to be used for displaying normal text.  The
! default is \fIfixed\fP.
  .TP 8
  .B \-name \fIname\fP
  This option specifies the application name under which resources are to be
***************
*** 410,417 ****
  Specifies whether or not synthetic key and button events (generated using
  the X protocol SendEvent request) should be interpreted or discarded.
  The default is ``false'' meaning they are discarded.  Note that allowing
! such events creates a very large security hole (imagine someone sending
! your idle shell the key events for ``rm -fr *'').
  .sp
  .TP 8
  .B "alwaysHighlight (\fPclass\fB AlwaysHighlight)"
--- 410,416 ----
  Specifies whether or not synthetic key and button events (generated using
  the X protocol SendEvent request) should be interpreted or discarded.
  The default is ``false'' meaning they are discarded.  Note that allowing
! such events creates a very large security hole.
  .sp
  .TP 8
  .B "alwaysHighlight (\fPclass\fB AlwaysHighlight)"
***************
*** 818,823 ****
--- 817,830 ----
  correctly (in the new colors), to minimize the probability of
  spoofing.  You can also bring up the menu again and make sure that a check
  mark appears next to the entry.
+ .PP
+ \fBSecure Keyboard\fP mode will be disabled automatically if your xterm
+ window becomes iconified (or otherwise unmapped), or if you start up
+ a reparenting window manager (that places a title bar or other decoration
+ around the window) while in \fBSecure Keyboard\fP mode.  (This is a
+ feature of the X protocol not easily overcome.)  When this happens,
+ the foreground and background colors will be switched back and the bell
+ will sound in warning.
  .SH "CHARACTER CLASSES"
  Clicking the middle mouse button twice in rapid succession will cause all
  characters of the same class (e.g. letters, white space, punctuation) to be
-- 
Mike Wexler(wyse!mikew)    Phone: (408)433-1000 x1330
Moderator of comp.sources.x