[comp.sources.x] v09i075: Xmon, Patch2, Part01/01

gregm@otc.otca.oz.au (Greg McFarlane) (10/09/90)

Submitted-by: Greg McFarlane <gregm@otc.otca.oz.au>
Posting-number: Volume 9, Issue 75
Archive-name: xmon/patch2
Patch-To: xmon: Volume 9, Issue 15-19 (9/4/90)
Patch-To: xmon: Volume 9, Issue 30 (9/12/90: patch1)

This patch fixes the following problems:

1. Synthetic events (events sent by XSendEvent) are handled correctly.
2. There was a bug in version 1 when a client exited.
3. Byte swapping is now handled correctly.

---- Cut Here and unpack ----
#!/bin/sh
# This is xmon, a shell archive (shar 3.32)
# made 10/08/1990 09:03 UTC by gregm@otc.otca.oz.au
# Source directory /u/projects/multi/xmux/xmon
#
# existing files will NOT be overwritten
#
# This shar contains:
# length  mode       name
# ------ ---------- ------------------------------------------
#  25407 -rw-rw-r-- xmon.patch2
#
if touch 2>&1 | fgrep 'amc' > /dev/null
 then TOUCH=touch
 else TOUCH=true
fi
# ============= xmon.patch2 ==============
if test X"$1" != X"-c" -a -f 'xmon.patch2'; then
	echo "File already exists: skipping 'xmon.patch2'"
else
echo "x - extracting xmon.patch2 (Text)"
sed 's/^X//' << 'SHAR_EOF' > xmon.patch2 &&
Xxmon patch 2
X
XThis patch fixes the following problems:
X
X1. Synthetic events (events sent by XSendEvent) are handled correctly.
X2. There was a bug in version 1 when a client exited.
X3. Byte swapping is now handled correctly.
X
XPlus some minor code clean up.
X
XIt makes patches to the following files:
Xpatchlevel.h
Xdecode11.c
Xlinkl.c
Xlinkl.h
Xmain.c
Xprint11.c
Xserver.c
Xtable11.c
X
Xdiff -c version1/patchlevel.h version2/patchlevel.h
X*** version1/patchlevel.h	Mon Sep 10 15:33:48 1990
X--- version2/patchlevel.h	Thu Sep 27 17:03:30 1990
X***************
X*** 1 ****
X! #define PATCHLEVEL 1
X--- 1 ----
X! #define PATCHLEVEL 2
XOnly in version2: Makefile.bak
Xdiff -c version1/decode11.c version2/decode11.c
X*** version1/decode11.c	Mon Sep 10 14:31:16 1990
X--- version2/decode11.c	Thu Sep 27 17:15:50 1990
X***************
X*** 1002,1008 ****
X  	long					n;
X  {
X  	int						fd = server->fdd->fd;
X! 	short					Event = IByte (&buf[0]);
X  
X  	if (CountEvents)
X  	{
X--- 1002,1008 ----
X  	long					n;
X  {
X  	int						fd = server->fdd->fd;
X! 	short					Event = IByte (&buf[0]) & 0x7f;
X  
X  	if (CountEvents)
X  	{
Xdiff -c version1/linkl.c version2/linkl.c
X*** version1/linkl.c	Mon Sep 10 14:31:16 1990
X--- version2/linkl.c	Thu Sep 27 17:20:23 1990
X***************
X*** 145,150 ****
X--- 145,158 ----
X  }
X  
X  Global void
X+ deleteList(list)
X+ 	LinkList  *list;
X+ {
X+ 	while (!ListIsEmpty(list))
X+ 		deleteFirst(list);
X+ }
X+ 
X+ Global void
X  freeList(list)
X  	LinkList  *list;
X  {
X***************
X*** 157,162 ****
X--- 165,256 ----
X  	LinkList  *list;
X  {
X  	Tfree(deleteCurrent(list));
X+ }
X+ 
X+ Global Bool
X+ freeMatchingLeaf(list, contents)
X+ 	LinkList		*list;
X+ 	Pointer			contents;
X+ {
X+ 	LinkLeaf		*leaf;
X+ 
X+ 	for(leaf = list->top; leaf != (LinkLeaf *)list; leaf = leaf->next)
X+ 		if (leaf->contents == contents)
X+ 		{
X+ 			freeLeaf(list, leaf);
X+ 			return True;
X+ 		}
X+ 	return False;
X+ }
X+ 
X+ Global LinkLeaf*
X+ findMatchingLeaf(list, contents)
X+ 	LinkList		*list;
X+ 	Pointer			contents;
X+ {
X+ 	LinkLeaf		*leaf;
X+ 
X+ 	for(leaf = list->top; leaf != (LinkLeaf *)list; leaf = leaf->next)
X+ 		if (leaf->contents == contents)
X+ 			return leaf;
X+ 	return (LinkLeaf *)NULL;
X+ }
X+ 
X+ Global int
X+ indexOfContents(list, contents)
X+ 	LinkList		*list;
X+ 	Pointer			contents;
X+ {
X+ 	LinkLeaf		*leaf;
X+ 	int				index = 0;
X+ 
X+ 	for(leaf = list->top; leaf != (LinkLeaf *)list; leaf = leaf->next, index++)
X+ 		if (leaf->contents == contents)
X+ 			return index;
X+ 	return -1;
X+ }
X+ 
X+ Global Pointer
X+ getIndexedContents(list, index)
X+ 	LinkList		*list;
X+ 	int				index;
X+ {
X+ 	LinkLeaf		*leaf;
X+ 	int				count = 0;
X+ 
X+ 	for(leaf = list->top; leaf != (LinkLeaf *)list; leaf = leaf->next, count++)
X+ 		if (count == index)
X+ 			return leaf->contents;
X+ 	return (Pointer)-1;
X+ }
X+ 
X+ Global void
X+ freeLeaf(list, leaf)
X+ 	LinkList		*list;
X+ 	LinkLeaf		*leaf;
X+ {
X+ 	Tfree(deleteLeaf(list, leaf));
X+ }
X+ 
X+ Global Pointer
X+ deleteLeaf(list, leaf)
X+ 	LinkList		*list;
X+ 	LinkLeaf		*leaf;
X+ {
X+ 	Pointer			contents;
X+ 	
X+ 	if (leaf == (LinkLeaf *)list)
X+ 		return ((Pointer)NULL);
X+ 	else if (leaf == list->current)
X+ 		return deleteCurrent(list);
X+ 	else
X+ 	{
X+ 		leaf->prev->next = leaf->next;
X+ 		leaf->next->prev = leaf->prev;
X+ 		contents = leaf->contents;
X+ 		Tfree(leaf);
X+ 		return(contents);
X+ 	}
X  }
X  
X  static void
Xdiff -c version1/linkl.h version2/linkl.h
X*** version1/linkl.h	Mon Sep 10 14:31:16 1990
X--- version2/linkl.h	Thu Sep 27 17:42:15 1990
X***************
X*** 46,53 ****
X--- 46,60 ----
X  Global Pointer deleteCurrent P((LinkList *list ));
X  Global void AppendToCurrent P((LinkList *list , Pointer contents ));
X  Global void PrependToCurrent P((LinkList *list , Pointer contents ));
X+ Global void deleteList P((LinkList *list ));
X  Global void freeList P((LinkList *list ));
X  Global void freeCurrent P((LinkList *list ));
X+ Global Bool freeMatchingLeaf P((LinkList *list , Pointer contents ));
X+ Global LinkLeaf *findMatchingLeaf P((LinkList *list , Pointer contents ));
X+ Global int indexOfContents P((LinkList *list , Pointer contents ));
X+ Global Pointer getIndexedContents P((LinkList *list , int index ));
X+ Global void freeLeaf P((LinkList *list , LinkLeaf *leaf ));
X+ Global Pointer deleteLeaf P((LinkList *list , LinkLeaf *leaf ));
X  
X  /* end function prototypes */
X  
Xdiff -c version1/main.c version2/main.c
X*** version1/main.c	Mon Sep 10 15:30:57 1990
X--- version2/main.c	Thu Sep 27 17:00:51 1990
X***************
X*** 140,145 ****
X--- 140,155 ----
X  		Tfree(server->fdd->inBuffer.data);
X  	close(server->fdd->fd);
X  	NotUsingFD(server->fdd->fd);
X+ 	freeList(&client->server_list);
X+ 	freeMatchingLeaf(&client_list, (Pointer *)client);
X+ 	debug
X+ 	(
X+ 		1,
X+ 		(
X+ 			stderr, "CloseConnection: client = %d, server = %d\n",
X+ 			client->fdd->fd, server->fdd->fd
X+ 		)
X+ 	);
X  }
X  
X  static void
X***************
X*** 392,404 ****
X  				}
X  			}
X  		}
X! 		ForAllInList(&client_list)
X  		{
X  			client = (Client *)CurrentContentsOfList(&client_list);
X- 			if (!SendBuffer(client->fdd->fd, &client->fdd->outBuffer))
X- 				CloseConnection(client);
X  			server = (Server *)(TopOfList(&client->server_list));
X! 			if (!SendBuffer(server->fdd->fd, &server->fdd->outBuffer))
X  				CloseConnection(client);
X  		}
X  	}
X--- 402,420 ----
X  				}
X  			}
X  		}
X! 		client_list.current = client_list.top;
X! 		while (client_list.current != (LinkLeaf *)(&client_list))
X  		{
X  			client = (Client *)CurrentContentsOfList(&client_list);
X  			server = (Server *)(TopOfList(&client->server_list));
X! 			if
X! 			(
X! 				SendBuffer(client->fdd->fd, &client->fdd->outBuffer)
X! 				&&
X! 				SendBuffer(server->fdd->fd, &server->fdd->outBuffer)
X! 			)
X! 				client_list.current = client_list.current->next;
X! 			else
X  				CloseConnection(client);
X  		}
X  	}
X***************
X*** 1082,1088 ****
X  #if (mskcnt>4)
X  static Bool
X  ANYSET(src)
X! long src[];
X  {
X  	int cri;
X  
X--- 1098,1104 ----
X  #if (mskcnt>4)
X  static Bool
X  ANYSET(src)
X! long *src;
X  {
X  	int cri;
X  
Xdiff -c version1/print11.c version2/print11.c
X*** version1/print11.c	Mon Sep 10 14:31:17 1990
X--- version2/print11.c	Mon Oct  8 18:28:53 1990
X***************
X*** 46,51 ****
X--- 46,52 ----
X  
X  static char *REQUESTHEADER = "............REQUEST";
X  static char *EVENTHEADER = "..............EVENT";
X+ static char *SYNTHETIC_EVENTHEADER = "....SYNTHETIC EVENT";
X  static char *ERRORHEADER = "..............ERROR";
X  static char *REPLYHEADER = "..............REPLY";
X  
X***************
X*** 307,317 ****
X   * Event Printing procedures
X   */
X  
X  Global void
X  KeyPressEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* KeyPress */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	PrintField(buf, 1, 1, KEYCODE, "detail");
X--- 308,328 ----
X   * Event Printing procedures
X   */
X  
X+ static void
X+ PrintEventName(buf)
X+ 		unsigned char *buf;
X+ {
X+ 	if (IByte(&buf[0]) & 0x80)
X+ 		PrintField(buf, 0, 1, EVENT, SYNTHETIC_EVENTHEADER);
X+ 	else
X+ 		PrintField(buf, 0, 1, EVENT, EVENTHEADER);
X+ }
X+ 
X  Global void
X  KeyPressEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintEventName(buf) /* KeyPress */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	PrintField(buf, 1, 1, KEYCODE, "detail");
X***************
X*** 332,338 ****
X  KeyReleaseEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* KeyRelease */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	PrintField(buf, 1, 1, KEYCODE, "detail");
X--- 343,349 ----
X  KeyReleaseEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintEventName(buf) /* KeyRelease */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	PrintField(buf, 1, 1, KEYCODE, "detail");
X***************
X*** 353,359 ****
X  ButtonPressEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* ButtonPress */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	PrintField(buf, 1, 1, BUTTON, "detail");
X--- 364,370 ----
X  ButtonPressEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintEventName(buf) /* ButtonPress */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	PrintField(buf, 1, 1, BUTTON, "detail");
X***************
X*** 374,380 ****
X  ButtonReleaseEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* ButtonRelease */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	PrintField(buf, 1, 1, BUTTON, "detail");
X--- 385,391 ----
X  ButtonReleaseEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintEventName(buf) /* ButtonRelease */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	PrintField(buf, 1, 1, BUTTON, "detail");
X***************
X*** 395,401 ****
X  MotionNotifyEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* MotionNotify */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	PrintField(buf, 1, 1, MOTIONDETAIL, "detail");
X--- 406,412 ----
X  MotionNotifyEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintEventName(buf) /* MotionNotify */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	PrintField(buf, 1, 1, MOTIONDETAIL, "detail");
X***************
X*** 416,422 ****
X  EnterNotifyEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* EnterNotify */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	PrintField(buf, 1, 1, ENTERDETAIL, "detail");
X--- 427,433 ----
X  EnterNotifyEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintEventName(buf) /* EnterNotify */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	PrintField(buf, 1, 1, ENTERDETAIL, "detail");
X***************
X*** 438,444 ****
X  LeaveNotifyEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* LeaveNotify */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	PrintField(buf, 1, 1, ENTERDETAIL, "detail");
X--- 449,455 ----
X  LeaveNotifyEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintEventName(buf) /* LeaveNotify */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	PrintField(buf, 1, 1, ENTERDETAIL, "detail");
X***************
X*** 460,466 ****
X  FocusInEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* FocusIn */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	PrintField(buf, 1, 1, ENTERDETAIL, "detail");
X--- 471,477 ----
X  FocusInEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintEventName(buf) /* FocusIn */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	PrintField(buf, 1, 1, ENTERDETAIL, "detail");
X***************
X*** 473,479 ****
X  FocusOutEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* FocusOut */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	PrintField(buf, 1, 1, ENTERDETAIL, "detail");
X--- 484,490 ----
X  FocusOutEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintEventName(buf) /* FocusOut */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	PrintField(buf, 1, 1, ENTERDETAIL, "detail");
X***************
X*** 486,492 ****
X  KeymapNotifyEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* KeymapNotify */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	PrintBytes(&buf[1], (long)31,"keys");
X--- 497,503 ----
X  KeymapNotifyEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintEventName(buf) /* KeymapNotify */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	PrintBytes(&buf[1], (long)31,"keys");
X***************
X*** 496,502 ****
X  ExposeEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* Expose */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	printfield(buf, 2, 2, CARD16, "sequence number");
X--- 507,513 ----
X  ExposeEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintEventName(buf) /* Expose */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	printfield(buf, 2, 2, CARD16, "sequence number");
X***************
X*** 512,518 ****
X  GraphicsExposureEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* GraphicsExposure */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	printfield(buf, 2, 2, CARD16, "sequence number");
X--- 523,529 ----
X  GraphicsExposureEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintEventName(buf) /* GraphicsExposure */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	printfield(buf, 2, 2, CARD16, "sequence number");
X***************
X*** 530,536 ****
X  NoExposureEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* NoExposure */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	printfield(buf, 2, 2, CARD16, "sequence number");
X--- 541,547 ----
X  NoExposureEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintEventName(buf) /* NoExposure */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	printfield(buf, 2, 2, CARD16, "sequence number");
X***************
X*** 543,549 ****
X  VisibilityNotifyEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* VisibilityNotify */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	printfield(buf, 2, 2, CARD16, "sequence number");
X--- 554,560 ----
X  VisibilityNotifyEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintEventName(buf) /* VisibilityNotify */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	printfield(buf, 2, 2, CARD16, "sequence number");
X***************
X*** 555,561 ****
X  CreateNotifyEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* CreateNotify */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	printfield(buf, 2, 2, CARD16, "sequence number");
X--- 566,572 ----
X  CreateNotifyEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintEventName(buf) /* CreateNotify */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	printfield(buf, 2, 2, CARD16, "sequence number");
X***************
X*** 573,579 ****
X  DestroyNotifyEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* DestroyNotify */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	printfield(buf, 2, 2, CARD16, "sequence number");
X--- 584,590 ----
X  DestroyNotifyEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintEventName(buf) /* DestroyNotify */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	printfield(buf, 2, 2, CARD16, "sequence number");
X***************
X*** 585,591 ****
X  UnmapNotifyEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* UnmapNotify */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	printfield(buf, 2, 2, CARD16, "sequence number");
X--- 596,602 ----
X  UnmapNotifyEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintEventName(buf) /* UnmapNotify */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	printfield(buf, 2, 2, CARD16, "sequence number");
X***************
X*** 598,604 ****
X  MapNotifyEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* MapNotify */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	printfield(buf, 2, 2, CARD16, "sequence number");
X--- 609,615 ----
X  MapNotifyEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintEventName(buf) /* MapNotify */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	printfield(buf, 2, 2, CARD16, "sequence number");
X***************
X*** 611,617 ****
X  MapRequestEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* MapRequest */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	printfield(buf, 2, 2, CARD16, "sequence number");
X--- 622,628 ----
X  MapRequestEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintEventName(buf) /* MapRequest */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	printfield(buf, 2, 2, CARD16, "sequence number");
X***************
X*** 623,629 ****
X  ReparentNotifyEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* ReparentNotify */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	printfield(buf, 2, 2, CARD16, "sequence number");
X--- 634,640 ----
X  ReparentNotifyEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintEventName(buf) /* ReparentNotify */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	printfield(buf, 2, 2, CARD16, "sequence number");
X***************
X*** 639,645 ****
X  ConfigureNotifyEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* ConfigureNotify */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	printfield(buf, 2, 2, CARD16, "sequence number");
X--- 650,656 ----
X  ConfigureNotifyEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintEventName(buf) /* ConfigureNotify */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	printfield(buf, 2, 2, CARD16, "sequence number");
X***************
X*** 658,664 ****
X  ConfigureRequestEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* ConfigureRequest */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	PrintField(buf, 1, 1, STACKMODE, "stack-mode");
X--- 669,675 ----
X  ConfigureRequestEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintEventName(buf) /* ConfigureRequest */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	PrintField(buf, 1, 1, STACKMODE, "stack-mode");
X***************
X*** 678,684 ****
X  GravityNotifyEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* GravityNotify */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	printfield(buf, 2, 2, CARD16, "sequence number");
X--- 689,695 ----
X  GravityNotifyEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintEventName(buf) /* GravityNotify */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	printfield(buf, 2, 2, CARD16, "sequence number");
X***************
X*** 692,698 ****
X  ResizeRequestEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* ResizeRequest */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	printfield(buf, 2, 2, CARD16, "sequence number");
X--- 703,709 ----
X  ResizeRequestEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintEventName(buf) /* ResizeRequest */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	printfield(buf, 2, 2, CARD16, "sequence number");
X***************
X*** 705,711 ****
X  CirculateNotifyEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* CirculateNotify */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	printfield(buf, 2, 2, CARD16, "sequence number");
X--- 716,722 ----
X  CirculateNotifyEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintEventName(buf) /* CirculateNotify */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	printfield(buf, 2, 2, CARD16, "sequence number");
X***************
X*** 719,725 ****
X  CirculateRequestEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* CirculateRequest */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	printfield(buf, 2, 2, CARD16, "sequence number");
X--- 730,736 ----
X  CirculateRequestEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintEventName(buf) /* CirculateRequest */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	printfield(buf, 2, 2, CARD16, "sequence number");
X***************
X*** 732,738 ****
X  PropertyNotifyEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* PropertyNotify */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	printfield(buf, 2, 2, CARD16, "sequence number");
X--- 743,749 ----
X  PropertyNotifyEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintEventName(buf) /* PropertyNotify */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	printfield(buf, 2, 2, CARD16, "sequence number");
X***************
X*** 746,752 ****
X  SelectionClearEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* SelectionClear */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	printfield(buf, 2, 2, CARD16, "sequence number");
X--- 757,763 ----
X  SelectionClearEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintEventName(buf) /* SelectionClear */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	printfield(buf, 2, 2, CARD16, "sequence number");
X***************
X*** 759,765 ****
X  SelectionRequestEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* SelectionRequest */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	printfield(buf, 2, 2, CARD16, "sequence number");
X--- 770,776 ----
X  SelectionRequestEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintEventName(buf) /* SelectionRequest */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	printfield(buf, 2, 2, CARD16, "sequence number");
X***************
X*** 775,781 ****
X  SelectionNotifyEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* SelectionNotify */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	printfield(buf, 2, 2, CARD16, "sequence number");
X--- 786,792 ----
X  SelectionNotifyEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintEventName(buf) /* SelectionNotify */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	printfield(buf, 2, 2, CARD16, "sequence number");
X***************
X*** 790,796 ****
X  ColormapNotifyEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* ColormapNotify */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	printfield(buf, 2, 2, CARD16, "sequence number");
X--- 801,807 ----
X  ColormapNotifyEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintEventName(buf) /* ColormapNotify */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	printfield(buf, 2, 2, CARD16, "sequence number");
X***************
X*** 804,810 ****
X  ClientMessageEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* ClientMessage */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	PrintField(buf, 1, 1, CARD8, "format");
X--- 815,821 ----
X  ClientMessageEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintEventName(buf) /* ClientMessage */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	PrintField(buf, 1, 1, CARD8, "format");
X***************
X*** 818,824 ****
X  MappingNotifyEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* MappingNotify */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	printfield(buf, 2, 2, CARD16, "sequence number");
X--- 829,835 ----
X  MappingNotifyEvent(buf)
X  		unsigned char *buf;
X  {
X! 	PrintEventName(buf) /* MappingNotify */ ;
X  	if (CurrentVerbose < 2)
X  		return;
X  	printfield(buf, 2, 2, CARD16, "sequence number");
Xdiff -c version1/server.c version2/server.c
X*** version1/server.c	Mon Sep 10 14:31:17 1990
X--- version2/server.c	Thu Sep 27 17:36:46 1990
X***************
X*** 31,38 ****
X  /* server.c: */
X  static void ProcessBuffer P((int fd , unsigned char *buf , long n , int
X  WriteFD ));
X- static void WriteBuffer P((Client *client , long n , char *buf , int
X- WriteFD ));
X  static long StartSetUpMessage P((Pointer private_data , unsigned char
X  *buf , long n ));
X  static long FinishSetUpMessage P((Pointer private_data , unsigned char
X--- 31,36 ----
X***************
X*** 189,225 ****
X  	server->fdd->inBuffer.num_Needed = 8;
X  }
X  
X- static void
X- WriteBuffer(client, n, buf, WriteFD)
X- 	Client					*client;
X- 	long					n;
X- 	char					*buf;
X- 	int						WriteFD;
X- {
X- 	int						BytesToWrite = n;
X- 	int						num_written;
X- 
X- 	while (BytesToWrite > 0)
X- 	{
X- 		num_written = write (WriteFD, buf, BytesToWrite);
X- 		if (num_written > 0)
X- 		{
X- 			BytesToWrite -= num_written;
X- 			buf += num_written;
X- 		}
X- 		else
X- 		{
X- 			if (errno == EWOULDBLOCK)
X- 				printf("WriteBuffer: write would block (TODO)\n");
X- 			if (errno == EINTR)
X- 				printf("WriteBuffer: write interrupted (TODO)\n");
X- 			perror("Error on write to Client/Server");
X- 			CloseConnection(client);
X- 			BytesToWrite = 0;
X- 		}
X- 	}
X- }
X- 
X  /*
X   * StartSetUpMessage:
X   *
X--- 187,192 ----
X***************
X*** 238,243 ****
X--- 205,214 ----
X  	short					namelength;
X  	short					datalength;
X  
X+ 	littleEndian = client->fdd->littleEndian = (buf[0] == 'l');
X+ 	((Server *)(TopOfList(&client->server_list)))->fdd->littleEndian
X+ 		= littleEndian;
X+ 
X  	namelength = IShort(&buf[6]);
X  	datalength = IShort(&buf[8]);
X  	client->fdd->ByteProcessing = FinishSetUpMessage;
X***************
X*** 253,260 ****
X  	long					n;
X  {
X  	Client					*client = (Client *) private_data;
X- 
X- 	littleEndian = client->fdd->littleEndian = (buf[0] == 'l');
X  
X  	CurrentVerbose = ErrorVerbose;
X  	PrintSetUpMessage(buf);
X--- 224,229 ----
Xdiff -c version1/table11.c version2/table11.c
X*** version1/table11.c	Mon Sep 10 14:31:18 1990
X--- version2/table11.c	Mon Oct  8 18:29:18 1990
X***************
X*** 428,433 ****
X--- 428,466 ----
X  	DefineEValue(p, 33L, "ClientMessage");
X  	DefineEValue(p, 34L, "MappingNotify");
X  
X+ 	DefineEValue(p, 128L + 2L, "KeyPress");
X+ 	DefineEValue(p, 128L + 3L, "KeyRelease");
X+ 	DefineEValue(p, 128L + 4L, "ButtonPress");
X+ 	DefineEValue(p, 128L + 5L, "ButtonRelease");
X+ 	DefineEValue(p, 128L + 6L, "MotionNotify");
X+ 	DefineEValue(p, 128L + 7L, "EnterNotify");
X+ 	DefineEValue(p, 128L + 8L, "LeaveNotify");
X+ 	DefineEValue(p, 128L + 9L, "FocusIn");
X+ 	DefineEValue(p, 128L + 10L, "FocusOut");
X+ 	DefineEValue(p, 128L + 11L, "KeymapNotify");
X+ 	DefineEValue(p, 128L + 12L, "Expose");
X+ 	DefineEValue(p, 128L + 13L, "GraphicsExposure");
X+ 	DefineEValue(p, 128L + 14L, "NoExposure");
X+ 	DefineEValue(p, 128L + 15L, "VisibilityNotify");
X+ 	DefineEValue(p, 128L + 16L, "CreateNotify");
X+ 	DefineEValue(p, 128L + 17L, "DestroyNotify");
X+ 	DefineEValue(p, 128L + 18L, "UnmapNotify");
X+ 	DefineEValue(p, 128L + 19L, "MapNotify");
X+ 	DefineEValue(p, 128L + 20L, "MapRequest");
X+ 	DefineEValue(p, 128L + 21L, "ReparentNotify");
X+ 	DefineEValue(p, 128L + 22L, "ConfigureNotify");
X+ 	DefineEValue(p, 128L + 23L, "ConfigureRequest");
X+ 	DefineEValue(p, 128L + 24L, "GravityNotify");
X+ 	DefineEValue(p, 128L + 25L, "ResizeRequest");
X+ 	DefineEValue(p, 128L + 26L, "CirculateNotify");
X+ 	DefineEValue(p, 128L + 27L, "CirculateRequest");
X+ 	DefineEValue(p, 128L + 28L, "PropertyNotify");
X+ 	DefineEValue(p, 128L + 29L, "SelectionClear");
X+ 	DefineEValue(p, 128L + 30L, "SelectionRequest");
X+ 	DefineEValue(p, 128L + 31L, "SelectionNotify");
X+ 	DefineEValue(p, 128L + 32L, "ColormapNotify");
X+ 	DefineEValue(p, 128L + 33L, "ClientMessage");
X+ 	DefineEValue(p, 128L + 34L, "MappingNotify");
X  
X  	p = DefineType(BITGRAVITY, ENUMERATED, "BITGRAVITY", PrintENUMERATED);
X  	DefineEValue(p, 0L, "Forget");
SHAR_EOF
$TOUCH -am 1008190090 xmon.patch2 &&
chmod 0664 xmon.patch2 ||
echo "restore of xmon.patch2 failed"
set `wc -c xmon.patch2`;Wc_c=$1
if test "$Wc_c" != "25407"; then
	echo original size 25407, current size $Wc_c
fi
fi
exit 0

                    Greg McFarlane
                    |||| OTC ||

                ACSnet:  gregm@otc.otca.oz.au
                  UUCP:  {uunet,mcvax}!otc.otca.oz.au!gregm
                 Snail:  GPO Box 7000, Sydney 2001, Australia
                 Phone:  +61 2 287 3139    Fax: +61 2 287 3299

dan
----------------------------------------------------
O'Reilly && Associates   argv@sun.com / argv@ora.com
Opinions expressed reflect those of the author only.