diff -rc client.2.3p3/Makefile client/Makefile
*** client.2.3p3/Makefile	Fri Apr 22 11:24:27 1994
--- client/Makefile	Sun Apr 24 14:36:40 1994
***************
*** 5,25 ****
  
  BIN = ../bin.udp
  
! #comment out if you aren't compiling an authorizing client.
  
- # if you DO have the MP library:
- #MPLIBS= -lmp
- #AUTH_OBJS = expire.o reserved.o rsa-client.o rsa_utilmp.o
  
- # if you don't have the MP library:
- #AUTH_OBJS = expire.o reserved.o rsa-client.o rsa_util.o
  
! # if you're using the new BRMish key making facilities:
! #MPLIBS= -lmp
! #AUTH_OBJS = expire.o reserved.o rsa-client.o rsa_clientutil.o
  
- # for any authorizing client
- #AUTH_DEFS = -DAUTHORIZE
  
  # slightly better hiding of the RSA key when the object files are linked in a
  # random order.
--- 5,26 ----
  
  BIN = ../bin.udp
  
! #
! # AUTHORIZATION defines
! #
! #leave commented if you aren't compiling an authorizing client.
! #ARCH=sparc
! #MPLIBS= ${HOME}/src/paradise/gmp-1.3.2/${ARCH}/libgmp.a
! #KEYDIR=${HOME}/src/paradise/keys/${ARCH}
! #AUTH_OBJS = expire.o ${KEYDIR}/rsa_box*.o
! #AUTH_DEFS = -DAUTHORIZE
  
  
  
! # If you're using the time lord
! #TL_OBJS = limitplay.o
! #TL_FLAGS=-DTIMELORD
  
  
  # slightly better hiding of the RSA key when the object files are linked in a
  # random order.
***************
*** 65,74 ****
  # FEATURE	-- turns on feature packets (Joe Rumsey)
  #
  # Must have -DATM, 
! CDEFS = -DATM -DGODMESSAGE -DTCURSORS -DRFCURSORS -DROTATERACE -DNOWARP -DSHORT_PACKETS -DMETASERVER -DVARY_HULL -DMACROS -DTIMER -DCONTINUOUS_MOUSE -DXTREKRC_HELP -DPACKET_LIGHTS -DWIDE_PLIST -DSIZE_LOGGING -DFEATURE $(AUTH_DEFS) $(SYSDEFS)
       
  
  R_OBJS =    ${AUTH_OBJS} \
  	colors.o \
  	dashboard.o \
  	data.o \
--- 66,80 ----
  # FEATURE	-- turns on feature packets (Joe Rumsey)
  #
  # Must have -DATM, 
! CDEFS = -DATM -DGODMESSAGE -DTCURSORS -DRFCURSORS -DROTATERACE -DNOWARP \
! 	-DSHORT_PACKETS -DMETASERVER -DVARY_HULL -DMACROS -DTIMER \
! 	-DCONTINUOUS_MOUSE -DXTREKRC_HELP -DPACKET_LIGHTS -DWIDE_PLIST \
! 	-DSIZE_LOGGING -DFEATURE \
! 	$(AUTH_DEFS) ${TL_FLAGS} $(SYSDEFS)
       
  
  R_OBJS =    ${AUTH_OBJS} \
+ 	${TL_OBJS} \
  	colors.o \
  	dashboard.o \
  	data.o \
***************
*** 114,121 ****
  	shortcomm.o spopt.o \
  	ping.o pingstats.o \
  	wide_plist.o \
! 	feature.o 
! #	/usr/lib/debug/malloc.o
  
  
  R_FILES =   colors.c \
--- 120,126 ----
  	shortcomm.o spopt.o \
  	ping.o pingstats.o \
  	wide_plist.o \
! 	feature.o
  
  
  R_FILES =   colors.c \
***************
*** 188,209 ****
  GLLIB = -lgl_s
  GLOBJS = glwindow.o
  
  LIBS = $(SYSLIBS) $(MPLIBS) -lm
  
  #CC = cc
  #CC = cc -pipe
- #CC = gcc-2.3.3
  LINKSTATIC=-Bstatic
  
  # for gcc, it has a different static linking convention
  #CC = gcc ${GCCOPT} -W -Wreturn-type -Wunused -Wswitch -Wtrigraphs -Wformat \
  #            -Wchar-subscripts -Wparentheses
  #LINKSTATIC=-static
  
  CDEBUGFLAGS=-O
  #CDEBUGFLAGS=-g
  #gcc can optimize and emit debug symbols at the same time
- GCCOPT=-O -Wuninitialized
  
  CFLAGS =  $(CDEFS) $(SYSCFLAGS) $(CDEBUGFLAGS) -I/local/include $(INCLUDEDIRS)
  
--- 193,215 ----
  GLLIB = -lgl_s
  GLOBJS = glwindow.o
  
+ #mplibs must come before -lm
  LIBS = $(SYSLIBS) $(MPLIBS) -lm
  
  #CC = cc
  #CC = cc -pipe
  LINKSTATIC=-Bstatic
  
  # for gcc, it has a different static linking convention
+ #CC = gcc-2.3.3
  #CC = gcc ${GCCOPT} -W -Wreturn-type -Wunused -Wswitch -Wtrigraphs -Wformat \
  #            -Wchar-subscripts -Wparentheses
+ #GCCOPT=-O -Wuninitialized
  #LINKSTATIC=-static
  
  CDEBUGFLAGS=-O
  #CDEBUGFLAGS=-g
  #gcc can optimize and emit debug symbols at the same time
  
  CFLAGS =  $(CDEFS) $(SYSCFLAGS) $(CDEBUGFLAGS) -I/local/include $(INCLUDEDIRS)
  
***************
*** 332,337 ****
--- 345,351 ----
  enter.o : enter.c copyright.h Wlib.h copyright2.h defs.h struct.h data.h proto.h \
    packets.h 
  expire.o : expire.c 
+ feature.o : feature.c 
  findslot.o : findslot.c copyright2.h Wlib.h defs.h copyright.h struct.h data.h \
    proto.h 
  gameconf.o : gameconf.c gameconf.h Wlib.h copyright2.h proto.h defaultlogos.h \
***************
*** 348,353 ****
--- 362,368 ----
  interface.o : interface.c copyright.h Wlib.h copyright2.h defs.h struct.h data.h \
    packets.h proto.h 
  keymap.o : keymap.c copyright.h Wlib.h copyright2.h defs.h struct.h data.h proto.h 
+ limitplay.o : limitplay.c 
  macros.o : macros.c 
  macrowin.o : macrowin.c 
  main.o : main.c copyright.h Wlib.h copyright2.h defs.h struct.h data.h packets.h \
***************
*** 355,363 ****
  motdwin.o : motdwin.c Wlib.h copyright2.h defs.h copyright.h struct.h data.h 
  newwin.o : newwin.c copyright.h Wlib.h copyright2.h defs.h struct.h data.h gameconf.h \
    proto.h oldbitmaps.h bitmaps_pr.h bitmaps3.h hullbitmaps.h planetbitmaps.h rabbitbitmaps.h \
!   packets.h 
  option.o : option.c copyright.h Wlib.h copyright2.h defs.h struct.h data.h packets.h \
    proto.h 
  parsemeta.o : parsemeta.c 
  ping.o : ping.c copyright2.h Wlib.h defs.h copyright.h struct.h data.h packets.h \
    proto.h 
--- 370,379 ----
  motdwin.o : motdwin.c Wlib.h copyright2.h defs.h copyright.h struct.h data.h 
  newwin.o : newwin.c copyright.h Wlib.h copyright2.h defs.h struct.h data.h gameconf.h \
    proto.h oldbitmaps.h bitmaps_pr.h bitmaps3.h hullbitmaps.h planetbitmaps.h rabbitbitmaps.h \
!   starbitmaps.h packets.h 
  option.o : option.c copyright.h Wlib.h copyright2.h defs.h struct.h data.h packets.h \
    proto.h 
+ packets.o : packets.c defs.h copyright.h packets.h gppackets.h wtext.h 
  parsemeta.o : parsemeta.c 
  ping.o : ping.c copyright2.h Wlib.h defs.h copyright.h struct.h data.h packets.h \
    proto.h 
***************
*** 368,374 ****
  planets.o : planets.c copyright2.h Wlib.h defs.h copyright.h struct.h data.h \
    proto.h 
  playerlist.o : playerlist.c copyright.h Wlib.h copyright2.h defs.h struct.h \
!   data.h proto.h gameconf.h 
  ranklist.o : ranklist.c copyright2.h Wlib.h defs.h copyright.h struct.h data.h \
    proto.h 
  ratings.o : ratings.c copyright.h Wlib.h copyright2.h defs.h struct.h data.h \
--- 384,390 ----
  planets.o : planets.c copyright2.h Wlib.h defs.h copyright.h struct.h data.h \
    proto.h 
  playerlist.o : playerlist.c copyright.h Wlib.h copyright2.h defs.h struct.h \
!   data.h proto.h gameconf.h packets.h 
  ranklist.o : ranklist.c copyright2.h Wlib.h defs.h copyright.h struct.h data.h \
    proto.h 
  ratings.o : ratings.c copyright.h Wlib.h copyright2.h defs.h struct.h data.h \
***************
*** 377,386 ****
    proto.h gameconf.h 
  reserved.o : reserved.c copyright2.h defs.h copyright.h packets.h 
  rotate.o : rotate.c copyright2.h Wlib.h defs.h copyright.h struct.h data.h packets.h 
- rsa-client.o : rsa-client.c copyright2.h defs.h copyright.h packets.h Wlib.h \
-   struct.h data.h keys.h 
- rsa_util.o : rsa_util.c 
- rsa_utilmp.o : rsa_utilmp.c 
  senddist.o : senddist.c copyright.h Wlib.h copyright2.h defs.h struct.h data.h 
  shipbitmaps.o : shipbitmaps.c Wlib.h copyright2.h defs.h copyright.h struct.h \
    data.h gameconf.h proto.h bitmaps_NEW.h 
--- 393,398 ----
diff -rc client.2.3p3/bitmaps3.h client/bitmaps3.h
*** client.2.3p3/bitmaps3.h	Fri Apr 22 11:24:28 1994
--- client/bitmaps3.h	Fri Apr 22 10:48:36 1994
***************
*** 459,470 ****
      0x0f, 0x3e, 0xf8, 0x80, 0x01, 0x00, 0xe0, 0xdc, 0x85, 0x73, 0x17, 0xce,
      0xdd, 0xc0, 0x01, 0x62, 0x88, 0x81, 0x01, 0x00, 0xe0, 0xdc, 0x8d, 0x63,
      0x37, 0x8e, 0xdd, 0xc1, 0x0f, 0x60, 0x80, 0x81, 0x01, 0x00, 0xe0, 0xd8,
!     0x89, 0x33, 0x27, 0x8e, 0x9d, 0xc3, 0x07, 0x30, 0xc0, 0x80, 0x01, 0x00,
!     0xe0, 0xcf, 0x9d, 0x3f, 0x77, 0x8e, 0x1d, 0xc7, 0x01, 0x18, 0x60, 0x80,
      0x01, 0x00, 0xe0, 0xc0, 0x97, 0x73, 0x5f, 0x8e, 0x1d, 0xce, 0x01, 0x0c,
!     0x30, 0x80, 0x01, 0x00, 0xe0, 0xc0, 0xb3, 0x63, 0xcf, 0xce, 0x1d, 0x9c,
      0x1f, 0x7e, 0xfb, 0x81, 0x01, 0x00, 0xe0, 0xc0, 0xb1, 0x63, 0xc7, 0xfe,
!     0xdc, 0x0f, 0x0f, 0x7e, 0xfb, 0x81, 0x01, 0x00, 0xe0, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
--- 459,470 ----
      0x0f, 0x3e, 0xf8, 0x80, 0x01, 0x00, 0xe0, 0xdc, 0x85, 0x73, 0x17, 0xce,
      0xdd, 0xc0, 0x01, 0x62, 0x88, 0x81, 0x01, 0x00, 0xe0, 0xdc, 0x8d, 0x63,
      0x37, 0x8e, 0xdd, 0xc1, 0x0f, 0x60, 0x80, 0x81, 0x01, 0x00, 0xe0, 0xd8,
!     0x89, 0x33, 0x27, 0x8e, 0x9d, 0xc3, 0x07, 0x30, 0xe0, 0x80, 0x01, 0x00,
!     0xe0, 0xcf, 0x9d, 0x3f, 0x77, 0x8e, 0x1d, 0xc7, 0x01, 0x18, 0xe0, 0x80,
      0x01, 0x00, 0xe0, 0xc0, 0x97, 0x73, 0x5f, 0x8e, 0x1d, 0xce, 0x01, 0x0c,
!     0x88, 0x81, 0x01, 0x00, 0xe0, 0xc0, 0xb3, 0x63, 0xcf, 0xce, 0x1d, 0x9c,
      0x1f, 0x7e, 0xfb, 0x81, 0x01, 0x00, 0xe0, 0xc0, 0xb1, 0x63, 0xc7, 0xfe,
!     0xdc, 0x0f, 0x0f, 0x7e, 0xf3, 0x80, 0x01, 0x00, 0xe0, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
***************
*** 526,532 ****
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
      0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0xf8, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
! 0xff, 0xff, 0xff, 0x7f};
  #define header1_width 300
  #define header1_height 79
  #define header1_x_hot 0
--- 526,533 ----
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
      0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0xf8, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
!     0xff, 0xff, 0xff, 0x7f};
! 
  #define header1_width 300
  #define header1_height 79
  #define header1_x_hot 0
diff -rc client.2.3p3/data.c client/data.c
*** client.2.3p3/data.c	Fri Apr 22 11:24:29 1994
--- client/data.c	Sun Apr 24 14:37:26 1994
***************
*** 152,160 ****
  #endif				/* ATM */
  struct plupdate pl_update[MAX_PLANETS];	/* should be jammed into struct
  					   planet */
- /* there are places that explicitly access buttonmap[3] */
- char    buttonmap[12] =
- {'\0', '\0', '\0', '\0'};
  int     currentship;
  int     lastm;
  int     delay;			/* delay for decaring war */
--- 152,157 ----
***************
*** 417,422 ****
  long    packets_received = 0;	/* # all packets received */
  W_Window pStats;
  
! char    CLIENTVERS[] = "2.3 patch 3";
  int     cloakerMaxWarp = 0;	/* server reports cloaker's speed as 15. */
  int     F_feature_packets = 0;	/* whether to use them or not */
--- 414,419 ----
  long    packets_received = 0;	/* # all packets received */
  W_Window pStats;
  
! char    CLIENTVERS[] = "2.3 patch 4";
  int     cloakerMaxWarp = 0;	/* server reports cloaker's speed as 15. */
  int     F_feature_packets = 0;	/* whether to use them or not */
diff -rc client.2.3p3/data.h client/data.h
*** client.2.3p3/data.h	Fri Apr 22 11:24:29 1994
--- client/data.h	Sun Apr 24 14:37:25 1994
***************
*** 169,175 ****
  				   ?? */
  extern int cloakcharslen;
  extern struct plupdate pl_update[];
- extern char buttonmap[];
  extern int currentship;
  extern int messpend;
  extern int lastcount;
--- 169,174 ----
diff -rc client.2.3p3/defs.h client/defs.h
*** client.2.3p3/defs.h	Thu Mar 10 10:06:51 1994
--- client/defs.h	Fri Apr 22 06:40:02 1994
***************
*** 38,44 ****
  #define NO_UPDATE	0
  #define SMALL_UPDATE	1	/* update non-blk_bozo players */
  #define LARGE_UPDATE	2	/* update blk_bozo players     */
! #define ALL_UPDATE	3	/* update both		       */
  
  /* defs for timer [BDyess] */
  #define T_NONE		0	/* no timer */
--- 38,44 ----
  #define NO_UPDATE	0
  #define SMALL_UPDATE	1	/* update non-blk_bozo players */
  #define LARGE_UPDATE	2	/* update blk_bozo players     */
! #define ALL_UPDATE	(SMALL_UPDATE|LARGE_UPDATE)	/* update both */
  
  /* defs for timer [BDyess] */
  #define T_NONE		0	/* no timer */
diff -rc client.2.3p3/dmessage.c client/dmessage.c
*** client.2.3p3/dmessage.c	Fri Apr 22 11:24:30 1994
--- client/dmessage.c	Sat Apr 23 17:49:23 1994
***************
*** 137,143 ****
  	return;
  
      if (evt->type == W_EV_KEY) {
! 	if (key == 'E') {	/* erase window [BDyess] */
  	    W_ClearWindow(window);
  	} else if (window == messWin[WALL].window) {
  	    smessage_ahead('A', key);
--- 137,143 ----
  	return;
  
      if (evt->type == W_EV_KEY) {
! 	if (key == ('e'+128)) {	/* erase window [BDyess] */
  	    W_ClearWindow(window);
  	} else if (window == messWin[WALL].window) {
  	    smessage_ahead('A', key);
diff -rc client.2.3p3/feature.c client/feature.c
*** client.2.3p3/feature.c	Fri Apr 22 11:24:40 1994
--- client/feature.c	Fri Apr 22 11:30:39 1994
***************
*** 66,72 ****
--- 66,74 ----
      {0, 0, 0, 0, 0, 0}
  };
  
+ void sendFeature();
  
+ 
  void
  checkFeature(packet)
      struct feature_spacket *packet;
***************
*** 121,126 ****
--- 123,129 ----
      }
  }
  
+ void
  sendFeature(name, feature_type, value, arg1, arg2)
      char   *name;
      char    feature_type;
diff -rc client.2.3p3/getname.c client/getname.c
*** client.2.3p3/getname.c	Tue Mar 15 15:29:11 1994
--- client/getname.c	Sun Apr 24 14:38:16 1994
***************
*** 83,92 ****
  
      bzero(mystats, sizeof(struct stats));
      mystats->st_tticks = 1;
-     for (j = 0; j < 256; j++) {
- 	mystats->st_keymap[j] = j;
-     }
-     /* mystats->st_keymap[95]=0; */
      mystats->st_flags =
  	(ST_NOBITMAPS * (!sendmotdbitmaps) +
  	 ST_KEEPPEACE * keeppeace +
--- 83,88 ----
diff -rc client.2.3p3/getship.c client/getship.c
*** client.2.3p3/getship.c	Sat Apr  9 13:20:44 1994
--- client/getship.c	Fri Apr 22 06:40:02 1994
***************
*** 357,360 ****
--- 357,361 ----
  	shipp->s_bitmap = PATROL;
  	break;
      }
+     buildShipKeymap(shipp);
  }
diff -rc client.2.3p3/helpwin.c client/helpwin.c
*** client.2.3p3/helpwin.c	Fri Apr 22 11:24:31 1994
--- client/helpwin.c	Fri Apr 22 10:48:38 1994
***************
*** 240,246 ****
  	return;
      }
      for (i = 0; i < 256; i++) {
! 	if (mystats->st_keymap[i] != key)
  	    continue;
  	if (i == key)
  	    continue;		/* it's already there!  don't add it! */
--- 240,246 ----
  	return;
      }
      for (i = 0; i < 256; i++) {
! 	if (myship->s_keymap[i] != key)
  	    continue;
  	if (i == key)
  	    continue;		/* it's already there!  don't add it! */
diff -rc client.2.3p3/inform.c client/inform.c
*** client.2.3p3/inform.c	Fri Apr 22 11:24:31 1994
--- client/inform.c	Fri Apr 22 10:48:39 1994
***************
*** 244,250 ****
  	(void) sprintf(buf, "%s %s %s   %s",
  		       (k->pl_flags & PLREPAIR ? "RPR" : "      "),
  		       (k->pl_flags & PLFUEL ? "FUEL" : "    "),
! 		       (k->pl_flags & PLAGRI ? "HIVE" : "    "),
  		       team_bit_string(k->pl_info));
  	W_WriteText(infow, W_Textwidth, W_Textheight * line++,
  		    planetColor(k), buf, strlen(buf), W_RegularFont);
--- 244,250 ----
  	(void) sprintf(buf, "%s %s %s   %s",
  		       (k->pl_flags & PLREPAIR ? "RPR" : "      "),
  		       (k->pl_flags & PLFUEL ? "FUEL" : "    "),
! 		       (k->pl_flags & PLAGRI ? "AGRI" : "    "),
  		       team_bit_string(k->pl_info));
  	W_WriteText(infow, W_Textwidth, W_Textheight * line++,
  		    planetColor(k), buf, strlen(buf), W_RegularFont);
***************
*** 294,300 ****
  	(void) sprintf(buf, "%s %s %s %s",
  		       (k->pl_flags & PLREPAIR ? "RPR" : "      "),
  		       (k->pl_flags & PLFUEL ? "FUEL" : "    "),
! 		       (k->pl_flags & PLAGRI ? "HIVE" : "    "),
  		       (k->pl_flags & PLSHIPYARD ? "SHPYD" : "     "));
  	W_WriteText(infow, W_Textwidth, W_Textheight * line++,
  		    planetColor(k), buf, strlen(buf), W_RegularFont);
--- 294,300 ----
  	(void) sprintf(buf, "%s %s %s %s",
  		       (k->pl_flags & PLREPAIR ? "RPR" : "      "),
  		       (k->pl_flags & PLFUEL ? "FUEL" : "    "),
! 		       (k->pl_flags & PLAGRI ? "AGRI" : "    "),
  		       (k->pl_flags & PLSHIPYARD ? "SHPYD" : "     "));
  	W_WriteText(infow, W_Textwidth, W_Textheight * line++,
  		    planetColor(k), buf, strlen(buf), W_RegularFont);
diff -rc client.2.3p3/input.c client/input.c
*** client.2.3p3/input.c	Fri Apr 22 11:24:31 1994
--- client/input.c	Sun Apr 24 14:40:22 1994
***************
*** 62,67 ****
--- 62,76 ----
  	     evt->Window == messagew ||
  	     evt->Window == tstatw ||
  	     evt->Window == warnw) {
+ 	/* if it was a control key, convert it to a representation
+            we're more familiar with. */
+         if(evt->key > 128) {
+             evt->key -= 128;
+             if(evt->key >= 0x60 && evt->key < 0x80)
+                 evt->key -= 0x60;
+             else if(evt->key >= 0x40 && evt->key < 0x60)
+                 evt->key -= 0x40;
+         }
  	smessage(evt->key);
  #ifdef SHORT_PACKETS
      } else if (evt->Window == spWin) {
***************
*** 203,208 ****
--- 212,222 ----
  	   me->p_status == PDEAD ||
  	   me->p_status == POBSERVE) {
  
+ #ifdef TIMELORD
+ 	/* we're playing.  Count the seconds */
+ 	update_timelord(0);
+ #endif
+ 
  	if (keepInfo > 0) {
  	    if (infowin_up >= 0 &&
  		--infowin_up == -1 &&
***************
*** 215,228 ****
  	while (W_EventsPending() && !exitInputLoop) {
  
  	    fastQuit = 0;	/* any event cancel fastquit */
- 	    /*
- 	       beep if tmode status changes.  Idea from Roger Books. [BDyess]
- 	    */
- 	    new_tourn = paradise ? status2->tourn : status->tourn;
- 	    if (old_tourn != new_tourn) {
- 		W_Beep();
- 		old_tourn = new_tourn;
- 	    }
  	    W_NextEvent(&data);
  	    dispatch_W_event(&data);
  	    /*
--- 229,234 ----
***************
*** 271,276 ****
--- 277,290 ----
  		connectToServer(nextSocket);
  		printf("Yea!  We've been resurrected!\n");
  	    }
+ 	    /*
+ 	       beep if tmode status changes.  Idea from Roger Books. [BDyess]
+ 	    */
+ 	    new_tourn = paradise ? status2->tourn : status->tourn;
+ 	    if (old_tourn != new_tourn) {
+ 		W_Beep();
+ 		old_tourn = new_tourn;
+ 	    }
  	    continue;
  	}
      }
***************
*** 447,452 ****
--- 461,472 ----
  	timeBank[T_USER] = time(NULL);
  	timerType = T_USER;
  	break;
+     case control('t'):
+     case control('T'):
+ 	timerType++;
+ 	if (timerType >= T_TOTAL)
+ 	    timerType = 0;
+ 	break;
  #endif				/* TIMER */
  #ifdef WIDE_PLIST
      case 'K':			/* cycle playerlist [BDyess] */
***************
*** 639,645 ****
  		}
  	    }
  	    if (i == len)
! 		showlocal = *showLocalSequence;
  	}
  	if (optionWin)
  	    optionredrawoption(&showlocal);
--- 659,669 ----
  		}
  	    }
  	    if (i == len)
! 		showlocal = (*showLocalSequence) - '0';
! 	    if(showlocal>4)
! 		showlocal = 4;
! 	    else if(showlocal<0)
! 		showlocal = 0;
  	}
  	if (optionWin)
  	    optionredrawoption(&showlocal);
***************
*** 655,661 ****
  		}
  	    }
  	    if (i == len)
! 		showgalactic = *showGalacticSequence;
  	}
  	redrawall = 1;
  	if (optionWin)
--- 679,691 ----
  		}
  	    }
  	    if (i == len)
! 		showgalactic = (*showGalacticSequence) - '0';
! 	    if(!paradise && showgalactic==3) 
! 		showgalactic=5; /* force scout ages -> MOO */
! 	    if(showgalactic>5)
! 		showgalactic = 5;
! 	    else if(showgalactic<0)
! 		showgalactic = 0;
  	}
  	redrawall = 1;
  	if (optionWin)
***************
*** 848,853 ****
--- 878,884 ----
  #endif				/* ATM */
  
      case 9:			/* tab */
+     case control('m'):          /* because you can't remap to tab */
  	blk_zoom = !blk_zoom;	/* zoom */
  	redrawall = 1;
  	if (optionWin)
***************
*** 917,928 ****
  
      data->key--;
      if (data->key >= 0 && data->key < 12) {
! 	if (buttonmap[data->key] != '\0') {
! 	    data->key = buttonmap[data->key];
! 	    /*
! 	       data->key += 256;	/* simulate alt key so keymap is
! 	       bypassed [BDyess]
! 	    */
  	    keyaction(data);
  	    return;
  	} else
--- 948,959 ----
  
      data->key--;
      if (data->key >= 0 && data->key < 12) {
! 	if (myship->s_buttonmap[data->key] != '\0') {
! 	    data->key = myship->s_buttonmap[data->key];
! #if 0				/* do NOT bypass keymap */
! 	    data->key += 256;	/* simulate alt key so keymap is bypassed
! 				   [BDyess] */
! #endif
  	    keyaction(data);
  	    return;
  	} else
diff -rc client.2.3p3/keymap.c client/keymap.c
*** client.2.3p3/keymap.c	Fri Apr 22 11:24:31 1994
--- client/keymap.c	Fri Apr 22 10:48:40 1994
***************
*** 29,37 ****
  #ifdef MACROS
      if (macroState) {		/* macro needed a destination or in macro
  				   mode */
! 	if (key > 256) {	/* an alt-key will exit the macro mode */
  	    warning("             ");
  	} else {
  	    doMacro(data);
  	    return -1;
  	}
--- 29,44 ----
  #ifdef MACROS
      if (macroState) {		/* macro needed a destination or in macro
  				   mode */
! 	if (key > 256 && data->type != W_EV_BUTTON) {	/* an alt-key will exit
! 							   the macro mode */
! 	    /*
! 	       but let mouse buttons do macros! button conversion is done by
! 	       calling function.
! 	    */
  	    warning("             ");
  	} else {
+ 	    if (key > 256)
+ 		data->key -= 256;
  	    doMacro(data);
  	    return -1;
  	}
***************
*** 39,45 ****
  #endif				/* MACROS */
  
      if (key < 256) {		/* not alt key */
! 	key = mystats->st_keymap[key];
  
  #ifdef MACROS
  	if (macrotable[key] && macrotable[key]->isSingleMacro) {
--- 46,52 ----
  #endif				/* MACROS */
  
      if (key < 256) {		/* not alt key */
! 	key = myship->s_keymap[key];
  
  #ifdef MACROS
  	if (macrotable[key] && macrotable[key]->isSingleMacro) {
***************
*** 54,120 ****
      return key;
  }
  
  void 
  initkeymap(type)
      int     type;
  {
      char    keybuf[40], ckeybuf[40], buttonbuf[40], cbuttonbuf[40];
!     struct ship *sh;
!     int     i;
      struct stringlist *l;
  
      keybuf[0] = ckeybuf[0] = buttonbuf[0] = cbuttonbuf[0] = 0;
  
!     if (type >= 0) {
! 	sh = getship(type);
! 	sprintf(keybuf, "keymap.%c%c", sh->s_desig[0], sh->s_desig[1]);
! 	sprintf(ckeybuf, "ckeymap.%c%c", sh->s_desig[0], sh->s_desig[1]);
! 	sprintf(buttonbuf, "buttonmap.%c%c", sh->s_desig[0], sh->s_desig[1]);
! 	sprintf(cbuttonbuf, "cbuttonmap.%c%c", sh->s_desig[0], sh->s_desig[1]);
!     }
!     for (i = 0; i < 32; i++)
! 	mystats->st_keymap[i] = i;
!     for (i = 128; i < 256; i++)
! 	mystats->st_keymap[i] = i;
!     if (booleanDefault("clearMap", 0) || paradise) {
! 	for (i = 32; i < 128; i++)
! 	    mystats->st_keymap[i] = i;
!     }
      for (l = defaults; l; l = l->next) {
  	if (!strcmpi("keymap", l->string))
! 	    keymapAdd(l->value);
  	else if (!strcmpi("ckeymap", l->string))
! 	    ckeymapAdd(l->value);
  	else if (!strcmpi("buttonmap", l->string))
! 	    buttonmapAdd(l->value);
  	else if (!strcmpi("cbuttonmap", l->string))
! 	    cbuttonmapAdd(l->value);
      }
!     /*
!        run through the list twice.  The second time, look for keymap.<ship>.
!        This way, the keymap.<ship> lines have higher priority. [BDyess]
!     */
!     for (l = defaults; l; l = l->next) {
! 	if (!strcmpi(keybuf, l->string))
! 	    keymapAdd(l->value);
! 	else if (!strcmpi(ckeybuf, l->string))
! 	    ckeymapAdd(l->value);
! 	else if (!strcmpi(buttonbuf, l->string))
! 	    buttonmapAdd(l->value);
! 	else if (!strcmpi(cbuttonbuf, l->string))
! 	    cbuttonmapAdd(l->value);
      }
  }
  
  void
! keymapAdd(str)
!     char   *str;
  {
      if (str) {
  	/* parse non-control char keymap */
  	while (*str != '\0' && *(str + 1) != '\0') {
  	    if (*str >= 32 && *str < 127) {
! 		mystats->st_keymap[(int) *str] = *(str + 1);
  	    }
  	    str += 2;
  	}
--- 61,136 ----
      return key;
  }
  
+ unsigned char def_keymap[256];
+ unsigned char def_buttonmap[12];
+ void
+ buildShipKeymap(shipp)
+      struct ship *shipp;
+ {
+     char    keybuf[40], ckeybuf[40], buttonbuf[40], cbuttonbuf[40];
+     struct stringlist *l;
+ 
+     bcopy(def_keymap,shipp->s_keymap,256);
+     bcopy(def_buttonmap, shipp->s_buttonmap, 12);
+ 
+     sprintf(keybuf, "keymap.%c%c", shipp->s_desig[0], shipp->s_desig[1]);
+     sprintf(ckeybuf, "ckeymap.%c%c", shipp->s_desig[0], shipp->s_desig[1]);
+     sprintf(buttonbuf, "buttonmap.%c%c", shipp->s_desig[0], shipp->s_desig[1]);
+     sprintf(cbuttonbuf, "cbuttonmap.%c%c", shipp->s_desig[0], shipp->s_desig[1]);
+     
+     for (l = defaults; l; l = l->next) {
+ 	if (!strcmpi(keybuf, l->string))
+ 	    keymapAdd(l->value, shipp->s_keymap);
+ 	else if (!strcmpi(ckeybuf, l->string))
+ 	    ckeymapAdd(l->value, shipp->s_keymap);
+ 	else if (!strcmpi(buttonbuf, l->string))
+ 	    buttonmapAdd(l->value, shipp->s_buttonmap);
+ 	else if (!strcmpi(cbuttonbuf, l->string))
+ 	    cbuttonmapAdd(l->value, shipp->s_buttonmap);
+     }
+ }
+ 
  void 
  initkeymap(type)
      int     type;
  {
      char    keybuf[40], ckeybuf[40], buttonbuf[40], cbuttonbuf[40];
!     /*struct ship *sh;*/
!     int     i, j;
      struct stringlist *l;
  
      keybuf[0] = ckeybuf[0] = buttonbuf[0] = cbuttonbuf[0] = 0;
  
!     if (type < 0) {
! 	for (i = 0; i < 256; i++)
! 	    def_keymap[i] = i;
! 
      for (l = defaults; l; l = l->next) {
  	if (!strcmpi("keymap", l->string))
!                 keymapAdd(l->value, def_keymap);
  	else if (!strcmpi("ckeymap", l->string))
!                 ckeymapAdd(l->value, def_keymap);
  	else if (!strcmpi("buttonmap", l->string))
!                 buttonmapAdd(l->value, def_buttonmap);
  	else if (!strcmpi("cbuttonmap", l->string))
!                 cbuttonmapAdd(l->value, def_buttonmap);
      }
! 
! 	for (j = 0; j < nshiptypes; j++) {
!             buildShipKeymap(getship(j));
!         }
      }
  }
  
  void
! keymapAdd(str, map)
!     char   *str, *map; 
  {
      if (str) {
  	/* parse non-control char keymap */
  	while (*str != '\0' && *(str + 1) != '\0') {
  	    if (*str >= 32 && *str < 127) {
! 		map[(int) *str] = *(str + 1);
  	    }
  	    str += 2;
  	}
***************
*** 122,129 ****
  }
  
  void
! ckeymapAdd(cstr)
!     char   *cstr;
  {
      unsigned char key[2];
      short   state = 0;
--- 138,145 ----
  }
  
  void
! ckeymapAdd(cstr, map)
!     char   *cstr, *map;
  {
      unsigned char key[2];
      short   state = 0;
***************
*** 146,160 ****
  	    if (*cstr)
  		cstr++;
  	    if (state)
! 		mystats->st_keymap[key[0]] = key[1];
! 	    state = !state;
  	}
      }
  }
  
  void
! buttonmapAdd(str)
!     char   *str;
  {
      unsigned char button, ch;
  
--- 162,176 ----
  	    if (*cstr)
  		cstr++;
  	    if (state)
! 		map[key[0]] = key[1];
! 	    state = 1 - state;
  	}
      }
  }
  
  void
! buttonmapAdd(str, map)
!     char   *str, *map;
  {
      unsigned char button, ch;
  
***************
*** 168,174 ****
  		fprintf(stderr, "%c ignored in buttonmap\n", *(str - 1));
  	    else {
  		ch = *str++;
! 		buttonmap[button] = ch;
  	    }
  	}
      }
--- 184,190 ----
  		fprintf(stderr, "%c ignored in buttonmap\n", *(str - 1));
  	    else {
  		ch = *str++;
! 		map[button] = ch;
  	    }
  	}
      }
***************
*** 175,182 ****
  }
  
  void
! cbuttonmapAdd(cstr)
!     char   *cstr;
  {
      unsigned char button, ch;
  
--- 191,198 ----
  }
  
  void
! cbuttonmapAdd(cstr, map)
!     char   *cstr, *map;
  {
      unsigned char button, ch;
  
***************
*** 199,205 ****
  		    if (ch != '^')
  			ch += 128;
  		}
! 		buttonmap[button] = ch;
  	    }
  	}
      }
--- 215,221 ----
  		    if (ch != '^')
  			ch += 128;
  		}
! 		map[button] = ch;
  	    }
  	}
      }
***************
*** 215,222 ****
  	printf("%3d %c : %3d %c\n",
  	       i,
  	       isprint(i) ? i : '_',
! 	       mystats->st_keymap[i],
! 	       isprint(mystats->st_keymap[i]) ? mystats->st_keymap[i] : '_');
      }
  }
  #endif				/* KEYMAP_DEBUG */
--- 231,238 ----
  	printf("%3d %c : %3d %c\n",
  	       i,
  	       isprint(i) ? i : '_',
! 	       myship->s_keymap[i],
! 	       isprint(myship->s_keymap[i]) ? myship->s_keymap[i] : '_');
      }
  }
  #endif				/* KEYMAP_DEBUG */
Only in client: limitplay.c
diff -rc client.2.3p3/main.c client/main.c
*** client.2.3p3/main.c	Fri Apr 22 11:24:32 1994
--- client/main.c	Fri Apr 22 10:48:40 1994
***************
*** 313,318 ****
--- 313,322 ----
  	/* this creates the necessary x windows for the game */
  	newwin(dpyname, name);
  
+ #ifdef TIMELORD
+     start_timelord();
+ #endif
+ 
      /* open memory...? */
      openmem();
      if (!passive) {
***************
*** 503,511 ****
--- 507,526 ----
  	case PDEAD:
  	case POBSERVE:
  
+ #ifdef TIMELORD
+ 	    /* reading the MOTD doesn't count against your playing time */
+ 	    update_timelord_notcount();
+ #endif
+ 
+             moncontrol(1);
  	    /* Get input until the player quits or dies */
  	    input();
  	    W_ClearWindow(mapw);
+             moncontrol(0);
+ #ifdef TIMELORD
+             /* get any fractional minutes we missed */
+ 	    update_timelord(1);
+ #endif
  	    break;
  	default:
  	    printf("client has p_status=%d.  how strange\n", me->p_status);
Only in client: netrek.paradise
diff -rc client.2.3p3/newwin.c client/newwin.c
*** client.2.3p3/newwin.c	Fri Apr 22 11:24:32 1994
--- client/newwin.c	Sun Apr 24 10:50:40 1994
***************
*** 722,731 ****
  
  		if (startTime == -1) {	/* we were on the tqueue */
  		    /* I hate this [BDyess] */
! 		    /*
  		    W_Deiconify(baseWin);	/* we changed status.  alert
! 		       the user
! 		    */
  		    startTime = time(0);
  		    spareTime = 480;	/* Allow them extra time, as long */
  		    /* as they are active */
--- 722,731 ----
  
  		if (startTime == -1) {	/* we were on the tqueue */
  		    /* I hate this [BDyess] */
! #if 1
  		    W_Deiconify(baseWin);	/* we changed status.  alert
! 						   the user */
! #endif
  		    startTime = time(0);
  		    spareTime = 480;	/* Allow them extra time, as long */
  		    /* as they are active */
***************
*** 829,834 ****
--- 829,841 ----
  {
      int     lastTime;
  
+ #ifdef TIMELORD
+     if (!allowed_to_keep_playing()) {
+ 	warning("You've played enough for today.  Get back to work!");
+ 	return 0;
+     }
+ #endif
+ 
      pickOk = -1;
      sendTeamReq(team, ship);
      lastTime = time(NULL);
***************
*** 867,873 ****
  	}
      }
  
! #if 0				/* this is redundant */
      if (pickOk)
  	me->p_status = PALIVE;	/* we got a ship.  We must be alive */
  #endif
--- 874,880 ----
  	}
      }
  
! #if 1				/* this is not redundant? */
      if (pickOk)
  	me->p_status = PALIVE;	/* we got a ship.  We must be alive */
  #endif
diff -rc client.2.3p3/option.c client/option.c
*** client.2.3p3/option.c	Fri Apr 22 11:24:33 1994
--- client/option.c	Fri Apr 22 10:48:42 1994
***************
*** 637,646 ****
      W_UnmapWindow(optionWin);
  
      /* update keymap and buttonmap [Bdyess] */
!     keymapAdd(newkeys);
!     ckeymapAdd(newckeys);
!     buttonmapAdd(newbuttons);
!     cbuttonmapAdd(newcbuttons);
  
      /* optionrefresh(&(option[KEYMAP])); Not sure why this is really needed */
  
--- 637,646 ----
      W_UnmapWindow(optionWin);
  
      /* update keymap and buttonmap [Bdyess] */
!     keymapAdd(newkeys, myship->s_keymap);
!     ckeymapAdd(newckeys, myship->s_keymap);
!     buttonmapAdd(newbuttons, myship->s_buttonmap);
!     cbuttonmapAdd(newcbuttons, myship->s_buttonmap);
  
      /* optionrefresh(&(option[KEYMAP])); Not sure why this is really needed */
  
diff -rc client.2.3p3/packets.c client/packets.c
*** client.2.3p3/packets.c	Fri Apr 22 11:24:33 1994
--- client/packets.c	Sun Apr 24 14:48:27 1994
***************
*** 64,73 ****
    0,
    0,
    0,
!     0,				/* 47 */
  #endif
    0,				/* 48 */
    0,
    0,
    0,
    0,
--- 64,74 ----
    0,
    0,
    0,
!   0,
  #endif
    0,				/* 48 */
    0,
+   0,				/* 50 */
    0,
    0,
    0,
***************
*** 76,94 ****
    0,
    0,
    0,
!   0,
!     0,
  #ifdef FEATURE
!     sizeof(struct feature_cpacket)
  #else
!   0
  #endif
  };
  
  #define num_cpacket_sizes	sizeof(client_packet_sizes)/sizeof(*client_packet_sizes)
  
! int 
! size_of_cpacket(pkt)
       void	*pkt;
  {
      CARD8	type;
--- 77,94 ----
    0,
    0,
    0,
!   0,				/* 59 */
  #ifdef FEATURE
!   sizeof(struct feature_cpacket),
  #else
!   0,
  #endif
+   0
  };
  
  #define num_cpacket_sizes	sizeof(client_packet_sizes)/sizeof(*client_packet_sizes)
  
! int size_of_cpacket(pkt)
       void	*pkt;
  {
      CARD8	type;
***************
*** 192,197 ****
--- 192,211 ----
      -1,					/* SP_S_PLANET */
      -1,					/* SP_GPARAM */
      -1,					/* SP_PARADISE_EXT1 */
+     -1,
+     -1,
+     -1,
+     -1,
+     -1,
+     -1,
+     -1,
+     /* 60 v */
+ #ifdef FEATURE
+     sizeof(struct feature_spacket),
+ #else
+     -1,
+ #endif
+     -1
  };
  
  #define num_spacket_sizes (sizeof(server_packet_sizes) / sizeof(server_packet_sizes[0]) - 1)
diff -rc client.2.3p3/planetlist.c client/planetlist.c
*** client.2.3p3/planetlist.c	Fri Apr 22 11:24:34 1994
--- client/planetlist.c	Sat Apr 23 11:11:37 1994
***************
*** 74,80 ****
  		    j->pl_armies,
  		    (j->pl_flags & PLREPAIR ? "REPR " : "     "),
  		    (j->pl_flags & PLFUEL ? "FUEL " : "     "),
! 		    (j->pl_flags & PLAGRI ? "HIVE " : "     "),
  		    team_bit_string(j->pl_info));
  	    W_WriteText(wind, 2, k, planetColor(j), buf1, strlen(buf1),
  			planetFont(j));
--- 74,80 ----
  		    j->pl_armies,
  		    (j->pl_flags & PLREPAIR ? "REPR " : "     "),
  		    (j->pl_flags & PLFUEL ? "FUEL " : "     "),
! 		    (j->pl_flags & PLAGRI ? "AGRI " : "     "),
  		    team_bit_string(j->pl_info));
  	    W_WriteText(wind, 2, k, planetColor(j), buf1, strlen(buf1),
  			planetFont(j));
***************
*** 136,142 ****
  
  		j = team_p[i][team_pnum];
  		/* (nplanets+13)/2 is the height of window; from newwin.c */
! 		if (k == 0 || k == ((nplanets + 13) / 2)) {
  		    if (k != 0)
  			wind = planetw2;
  		    sprintf(buf, "Planet name      sctr own armies RESOURCES  SURFC  ATMOS    VISIT    TIME");
--- 136,142 ----
  
  		j = team_p[i][team_pnum];
  		/* (nplanets+13)/2 is the height of window; from newwin.c */
! 		if (k == 0 || k >= ((nplanets + 13) / 2)) {
  		    if (k != 0)
  			wind = planetw2;
  		    sprintf(buf, "Planet name      sctr own armies RESOURCES  SURFC  ATMOS    VISIT    TIME");
diff -rc client.2.3p3/playerlist.c client/playerlist.c
*** client.2.3p3/playerlist.c	Fri Apr 22 11:24:35 1994
--- client/playerlist.c	Fri Apr 22 10:48:43 1994
***************
*** 66,72 ****
      W_WriteText(playerw, 0, 20, textColor, buf, strlen(buf), W_RegularFont);
  
      for (i = 0; i < nplayers; i++)
! 	updatePlayer[i] = ALL_UPDATE;
  
      playerlist2();
  }
--- 66,72 ----
      W_WriteText(playerw, 0, 20, textColor, buf, strlen(buf), W_RegularFont);
  
      for (i = 0; i < nplayers; i++)
! 	updatePlayer[i] |= ALL_UPDATE;
  
      playerlist2();
  }
***************
*** 489,495 ****
  {
      int     width, slotnum;
  
!     if (*playerList)
  	return;
      width = W_WindowWidth(data->Window);
      if (data->key == W_RBUTTON || data->key == W_LBUTTON || data->key == W_MBUTTON)
--- 489,496 ----
  {
      int     width, slotnum;
  
!     if (*playerList
! 	&& *playerList!=',')
  	return;
      width = W_WindowWidth(data->Window);
      if (data->key == W_RBUTTON || data->key == W_LBUTTON || data->key == W_MBUTTON)
diff -rc client.2.3p3/proto.h client/proto.h
*** client.2.3p3/proto.h	Thu Mar 10 10:06:58 1994
--- client/proto.h	Fri Apr 22 11:21:33 1994
***************
*** 109,118 ****
  
  /* keymap.c */
  void initkeymap P((int type));
! void keymapAdd P((char *str));
! void ckeymapAdd P((char *cstr));
! void buttonmapAdd P((char *str));
! void cbuttonmapAdd P((char *cstr));
  void dumpKeymap P((void));
  
  /* main.c */
--- 109,118 ----
  
  /* keymap.c */
  void initkeymap P((int type));
! void keymapAdd P((char *str, char *map));
! void ckeymapAdd P((char *cstr, char *map));
! void buttonmapAdd P((char *str, char *map));
! void cbuttonmapAdd P((char *cstr, char *map));
  void dumpKeymap P((void));
  
  /* main.c */
diff -rc client.2.3p3/redraw.c client/redraw.c
*** client.2.3p3/redraw.c	Fri Apr 22 11:24:35 1994
--- client/redraw.c	Sun Apr 24 14:49:11 1994
***************
*** 221,227 ****
      if (showgalactic == 2) {
  	return (mbplanets[0]);
      } else if (showgalactic == 4) {
! 	int     infoage = 2;
  	if (!(p->pl_info & idx_to_mask(me->p_teami)))
  	    return mbplanetsA[NSCOUTAGES - 1];
  	if (p->pl_owner == idx_to_mask(me->p_teami))
--- 221,227 ----
      if (showgalactic == 2) {
  	return (mbplanets[0]);
      } else if (showgalactic == 4) {
! 	int     infoage = 4;
  	if (!(p->pl_info & idx_to_mask(me->p_teami)))
  	    return mbplanetsA[NSCOUTAGES - 1];
  	if (p->pl_owner == idx_to_mask(me->p_teami))
***************
*** 229,235 ****
  
  	for (i = 0;
  	   i < NSCOUTAGES - 1 && infoage < status2->clock - p->pl_timestamp;
! 	     i++, infoage <<= 1) {
  	}
  	return mbplanetsA[i];
      } else if (p->pl_info & idx_to_mask(me->p_teami)) {
--- 229,235 ----
  
  	for (i = 0;
  	   i < NSCOUTAGES - 1 && infoage < status2->clock - p->pl_timestamp;
! 	     i++, infoage = infoage*5/3) {
  	}
  	return mbplanetsA[i];
      } else if (p->pl_info & idx_to_mask(me->p_teami)) {
***************
*** 770,776 ****
  static void
  local()
  {
!     register int h, i;
      register struct player *j;
      register struct phaser *php;
      struct _clearzone *cz;
--- 770,776 ----
  static void
  local()
  {
!     register int i;
      register struct player *j;
      register struct phaser *php;
      struct _clearzone *cz;
***************
*** 1421,1432 ****
  			backColor, buf, 3, planetFont(l));
  
  	    pl_update[l->pl_no].plu_update = 0;
! 	} else {
  	    /* XFIX */
  	    W_ClearArea(mapw, dx - (mplanet_width / 2), dy - (mplanet_height / 2),
  			mplanet_width, mplanet_height);
  	}
! 
  	color = ((paradise) && (l->pl_flags & PLSTAR)) ?
  	    textColor : planetColor(l);
  
--- 1421,1435 ----
  			backColor, buf, 3, planetFont(l));
  
  	    pl_update[l->pl_no].plu_update = 0;
! 	}
! #if 1
! /* pl_update is now always set when a planet should be erased. -JR */
! 	else {
  	    /* XFIX */
  	    W_ClearArea(mapw, dx - (mplanet_width / 2), dy - (mplanet_height / 2),
  			mplanet_width, mplanet_height);
  	}
! #endif
  	color = ((paradise) && (l->pl_flags & PLSTAR)) ?
  	    textColor : planetColor(l);
  
diff -rc client.2.3p3/shortcomm.c client/shortcomm.c
*** client.2.3p3/shortcomm.c	Fri Apr 22 11:24:37 1994
--- client/shortcomm.c	Fri Apr 22 10:48:46 1994
***************
*** 727,744 ****
  	sprefresh(SPK_VFIELD);
  
  	spwinside = (CARD16)ntohs(packet->winside);
  	if (paradise) {
  	    spgwidth = (INT32)ntohl(packet->gwidth);
  
! 	    /*
! 	       bug in server-side SP code, wrong-endian machines confuse a
! 	       client with normal byte order
! 	       */
! 	    if (spwinside == 0xf401)
! 		spwinside = 0x01f4;
  	    if (spgwidth == 0xa0860100)
  		spgwidth = 0x000186a0;
  	}
  	break;
      case SPK_MOFF:
  	recv_mesg = 0;
--- 727,748 ----
  	sprefresh(SPK_VFIELD);
  
  	spwinside = (CARD16)ntohs(packet->winside);
+ 	/* bug in server-side SP code, wrong-endian machines
+ 	   confuse a client with normal byte order */
+ 	if (spwinside == 0xf401)
+ 	    spwinside = 0x01f4;
+ 
  	if (paradise) {
  	    spgwidth = (INT32)ntohl(packet->gwidth);
  
! 	    /* bug in server-side SP code, wrong-endian machines
! 	       confuse a client with normal byte order */
  	    if (spgwidth == 0xa0860100)
  		spgwidth = 0x000186a0;
+ 	    if (spgwidth == 0x0100)
+ 		spgwidth = 0x000186a0;
  	}
+ 
  	break;
      case SPK_MOFF:
  	recv_mesg = 0;
***************
*** 956,963 ****
  	    plan->pl_owner = NOBODY;
  	}
  #ifdef ATM
! 	if (redraw)
  	    plan->pl_flags |= PLREDRAW;
  #endif				/* ATM */
  
      }				/* FOR */
--- 960,969 ----
  	    plan->pl_owner = NOBODY;
  	}
  #ifdef ATM
! 	if (redraw) {
  	    plan->pl_flags |= PLREDRAW;
+ 	    pl_update[packet->pnum].plu_update = 1;
+ 	}
  #endif				/* ATM */
  
      }				/* FOR */
diff -rc client.2.3p3/socket.c client/socket.c
*** client.2.3p3/socket.c	Fri Apr 22 11:24:38 1994
--- client/socket.c	Sun Apr 24 16:00:24 1994
***************
*** 268,280 ****
      */
      /* ftp format [BDyess] */
      if (timeSpent < 600 /* 10 minutes */ ) {
! 	printf("%8d bytes sent     in %d seconds (%.3f Kbytes/s)\n", send_total,
! 	       timeSpent, (float) send_total / (1024.0 * timeSpent));
! 	printf("%8d bytes received in %d seconds (%.3f Kbytes/s)\n", receive_total,
! 	       timeSpent, (float) receive_total / (1024.0 * timeSpent));
      } else {			/* number too big for seconds, use minutes */
! 	printf("%8d bytes sent     in %.1f minutes (%.3f Kbytes/s)\n", send_total,
! 	       timeSpent / 60.0, (float) send_total / (1024.0 * timeSpent));
  	printf("%8d bytes received in %.1f minutes (%.3f Kbytes/s)\n",
  	       receive_total, timeSpent / 60.0,
  	       (float) receive_total / (1024.0 * timeSpent));
--- 270,285 ----
      */
      /* ftp format [BDyess] */
      if (timeSpent < 600 /* 10 minutes */ ) {
! 	printf("%8d bytes sent     in %d seconds (%.3f Kbytes/s)\n",
! 	       send_total, timeSpent,
! 	       (float) send_total / (1024.0 * timeSpent));
! 	printf("%8d bytes received in %d seconds (%.3f Kbytes/s)\n",
! 	       receive_total, timeSpent,
! 	       (float) receive_total / (1024.0 * timeSpent));
      } else {			/* number too big for seconds, use minutes */
! 	printf("%8d bytes sent     in %.1f minutes (%.3f Kbytes/s)\n",
! 	       send_total, timeSpent / 60.0,
! 	       (float) send_total / (1024.0 * timeSpent));
  	printf("%8d bytes received in %.1f minutes (%.3f Kbytes/s)\n",
  	       receive_total, timeSpent / 60.0,
  	       (float) receive_total / (1024.0 * timeSpent));
***************
*** 811,816 ****
--- 816,837 ----
      }
      bufptr = buf;
      while (bufptr < buf + count) {
+ #ifdef SHORT_PACKETS
+ computesize:
+         if((*bufptr == SP_S_MESSAGE &&  (buf + count - bufptr <= 4))
+            || (buf + count - bufptr < 4)) { /* last part may only be needed
+ 					       for DNet...I'm not so sure any more. 
+ 					       certainly doesn't hurt to have it.-JR */
+             /*printf("buf+count-bufptr=%d, *bufptr=%d\n",buf + count - bufptr,*bufptr);*/
+             size = 0; /* problem with reads breaking before size byte
+                        * for SP_S_MESSAGE has been read. Only a problem
+                        * for messages because reads break on 4 byte
+                        * boundaries,  other size bytes are always
+                        * in the first 4. -JR 
+                        */
+         } else
+ #endif
+ 	{
  	size = size_of_spacket(bufptr);
  	if (size < 1) {
  	    fprintf(stderr, "Unknown packet %d.  Faking it.\n",
***************
*** 826,832 ****
  #ifdef SIZE_LOGGING
  	receive_total += size;
  #endif				/* SIZE_LOGGING */
! 	while (size > count + (buf - bufptr)) {
  	    /*
  	       We wait for up to ten seconds for rest of packet. If we don't
  	       get it, we assume the server died.
--- 847,854 ----
  #ifdef SIZE_LOGGING
  	receive_total += size;
  #endif				/* SIZE_LOGGING */
! 	}
! 	while (size > count + (buf - bufptr) || size == 0) {
  	    /*
  	       We wait for up to ten seconds for rest of packet. If we don't
  	       get it, we assume the server died.
***************
*** 845,850 ****
--- 867,878 ----
  		serverDead = 1;
  		return (0);
  	    }
+ #ifdef SHORT_PACKETS
+             if (size == 0)
+                 /* 84=largest short packet message - the 4 we have */
+                 temp = read(asock, buf + count, 84);
+             else
+ #endif
  	    temp = read(asock, buf + count, size - (count + (buf - bufptr)));
  	    count += temp;
  	    if (temp <= 0) {
***************
*** 854,859 ****
--- 882,891 ----
  		serverDead = 1;
  		return (0);
  	    }
+ #ifdef SHORT_PACKETS
+ 	    if(size == 0)
+ 		goto computesize;
+ #endif
  	}
  	if (*bufptr>=1 &&
  	    *bufptr<NUM_HANDLERS &&
***************
*** 1445,1459 ****
  	case CP_DOCKPERM:
  	case CP_SCAN:
  	case CP_PING_RESPONSE:
! 	    /*
! 	       these are non-critical but don't expire, send with TCP
! 	       [BDyess]
! 	    */
! 	    /* case CP_CLOAK: */
! 	    /* case CP_REFIT: */
! 	    /* case CP_SHIELD: */
! 	    /* case CP_PLANLOCK: */
! 	    /* case CP_PLAYLOCK: */
  	    /* non-critical stuff, use UDP */
      send_udp:
  	    packets_sent++;	/* ping stuff */
--- 1477,1493 ----
  	case CP_DOCKPERM:
  	case CP_SCAN:
  	case CP_PING_RESPONSE:
! #if 1
! 	  /*
! 	     these are non-critical but don't expire, send with TCP
! 	     [BDyess]
! 	     */
! 	case CP_CLOAK:
! 	case CP_REFIT:
! 	case CP_SHIELD:
! 	case CP_PLANLOCK:
! 	case CP_PLAYLOCK:
! #endif
  	    /* non-critical stuff, use UDP */
      send_udp:
  	    packets_sent++;	/* ping stuff */
***************
*** 1521,1526 ****
--- 1555,1563 ----
      }
      if (redraw) {
  	plan->pl_flags |= PLREDRAW;
+ 	pl_update[packet->pnum].plu_update = 1; /* used to mean the planet had moved,
+ 						   now set as a sign we need to
+ 						   erase AND redraw. -JR */
  	if (infomapped && infotype == PLANETTYPE &&
  	    ((struct planet *) infothing)->pl_no == packet->pnum)
  	    infoupdate = 1;
***************
*** 1781,1787 ****
      if (players[packet->pnum].p_kills != ntohl(packet->kills) / 100.0) {
  	players[packet->pnum].p_kills = ntohl(packet->kills) / 100.0;
  	/* FAT: prevent redundant player update */
! 	updatePlayer[packet->pnum] = ALL_UPDATE;
  	if (infomapped && infotype == PLAYERTYPE &&
  	    ((struct player *) infothing)->p_no == packet->pnum)
  	    infoupdate = 1;
--- 1818,1824 ----
      if (players[packet->pnum].p_kills != ntohl(packet->kills) / 100.0) {
  	players[packet->pnum].p_kills = ntohl(packet->kills) / 100.0;
  	/* FAT: prevent redundant player update */
! 	updatePlayer[packet->pnum] |= ALL_UPDATE;
  	if (infomapped && infotype == PLAYERTYPE &&
  	    ((struct player *) infothing)->p_no == packet->pnum)
  	    infoupdate = 1;
***************
*** 1797,1803 ****
      }
  #else
      players[packet->pnum].p_kills = ntohl(packet->kills) / 100.0;
!     updatePlayer[packet->pnum] = ALL_UPDATE;
      if (infomapped && infotype == PLAYERTYPE &&
  	((struct player *) infothing)->p_no == packet->pnum)
  	infoupdate = 1;
--- 1834,1840 ----
      }
  #else
      players[packet->pnum].p_kills = ntohl(packet->kills) / 100.0;
!     updatePlayer[packet->pnum] |= ALL_UPDATE;
      if (infomapped && infotype == PLAYERTYPE &&
  	((struct player *) infothing)->p_no == packet->pnum)
  	infoupdate = 1;
***************
*** 1827,1833 ****
  #ifdef PLPROF
  	printf("Got handlePStatus for %d\n", packet->pnum);
  #endif				/* PLPROF */
! 	updatePlayer[packet->pnum] = ALL_UPDATE;
  	if (infomapped && infotype == PLAYERTYPE &&
  	    ((struct player *) infothing)->p_no == packet->pnum)
  	    infoupdate = 1;
--- 1864,1870 ----
  #ifdef PLPROF
  	printf("Got handlePStatus for %d\n", packet->pnum);
  #endif				/* PLPROF */
! 	updatePlayer[packet->pnum] |= ALL_UPDATE;
  	if (infomapped && infotype == PLAYERTYPE &&
  	    ((struct player *) infothing)->p_no == packet->pnum)
  	    infoupdate = 1;
***************
*** 1895,1901 ****
      /* copy the keymap and make sure no ctrl chars are sent [BDyess] */
      for (i = 32; i < 128; i++) {
  	optPacket.keymap[i - 32] =
! 	    (mystats->st_keymap[i] & 128) ? i : mystats->st_keymap[i];
      }
      /* bcopy(mystats->st_keymap+32, optPacket.keymap,96); */
      sendServerPacket((struct player_spacket *) & optPacket);
--- 1932,1938 ----
      /* copy the keymap and make sure no ctrl chars are sent [BDyess] */
      for (i = 32; i < 128; i++) {
  	optPacket.keymap[i - 32] =
! 	    (myship->s_keymap[i] & 128) ? i : myship->s_keymap[i];
      }
      /* bcopy(mystats->st_keymap+32, optPacket.keymap,96); */
      sendServerPacket((struct player_spacket *) & optPacket);
***************
*** 2012,2018 ****
  #ifdef PLPROF
      printf("Got handlPlyrLogin for %d\n", packet->pnum);
  #endif				/* PLPROF */
!     updatePlayer[packet->pnum] = ALL_UPDATE;
      pl = &players[packet->pnum];
  
      strcpy(pl->p_name, packet->name);
--- 2049,2055 ----
  #ifdef PLPROF
      printf("Got handlPlyrLogin for %d\n", packet->pnum);
  #endif				/* PLPROF */
!     updatePlayer[packet->pnum] |= ALL_UPDATE;
      pl = &players[packet->pnum];
  
      strcpy(pl->p_name, packet->name);
***************
*** 2045,2051 ****
  #ifdef PLPROF
      printf("Got handleStats for %d\n", packet->pnum);
  #endif				/* PLPROF */
!     updatePlayer[packet->pnum] = LARGE_UPDATE;
      if (infomapped && infotype == PLAYERTYPE &&
  	((struct player *) infothing)->p_no == packet->pnum)
  	infoupdate = 1;
--- 2082,2088 ----
  #ifdef PLPROF
      printf("Got handleStats for %d\n", packet->pnum);
  #endif				/* PLPROF */
!     updatePlayer[packet->pnum] |= LARGE_UPDATE;
      if (infomapped && infotype == PLAYERTYPE &&
  	((struct player *) infothing)->p_no == packet->pnum)
  	infoupdate = 1;
***************
*** 2077,2083 ****
  #ifdef PLPROF
      printf("Got PlyrInfo for %d\n", packet->pnum);
  #endif				/* PLPROF */
!     updatePlayer[packet->pnum] = ALL_UPDATE;
      if (infomapped && infotype == PLAYERTYPE &&
  	((struct player *) infothing)->p_no == packet->pnum)
  	infoupdate = 1;
--- 2114,2120 ----
  #ifdef PLPROF
      printf("Got PlyrInfo for %d\n", packet->pnum);
  #endif				/* PLPROF */
!     updatePlayer[packet->pnum] |= ALL_UPDATE;
      if (infomapped && infotype == PLAYERTYPE &&
  	((struct player *) infothing)->p_no == packet->pnum)
  	infoupdate = 1;
***************
*** 2092,2098 ****
      pl->p_mapchars[0] = teaminfo[pl->p_teami].letter;
      /* printf("team: %d, letter: %c\n",pl->p_teami,pl->p_mapchars[0]); */
      pl->p_mapchars[1] = shipnos[pl->p_no];
!     if (me == pl && lastship != me->p_ship->s_type) {
  	redrawTstats();
  	calibrate_stats();
  	redrawStats();		/* tsh */
--- 2129,2136 ----
      pl->p_mapchars[0] = teaminfo[pl->p_teami].letter;
      /* printf("team: %d, letter: %c\n",pl->p_teami,pl->p_mapchars[0]); */
      pl->p_mapchars[1] = shipnos[pl->p_no];
!     if (me == pl && lastship != currentship) {
! 	lastship = currentship;
  	redrawTstats();
  	calibrate_stats();
  	redrawStats();		/* tsh */
***************
*** 2177,2189 ****
  #ifdef AUTHORIZE
      struct reserved_cpacket response;
  
      if (RSA_Client) {		/* can use -o option for old blessing */
  	warning(RSA_VERSION);
  	strncpy(response.resp, RSA_VERSION, RESERVED_SIZE);
! 	bcopy(packet->data, response.data, RESERVED_SIZE);
! 	response.type = CP_RESERVED;
!     } else
  	encryptReservedPacket(packet, &response, serverName, me->p_no);
      sendServerPacket((struct player_spacket *) & response);
  #endif
  }
--- 2215,2236 ----
  #ifdef AUTHORIZE
      struct reserved_cpacket response;
  
+     response.type = CP_RESERVED;
      if (RSA_Client) {		/* can use -o option for old blessing */
  	warning(RSA_VERSION);
  	strncpy(response.resp, RSA_VERSION, RESERVED_SIZE);
! 	memcpy(response.data, packet->data, RESERVED_SIZE);
!     } else {
! #if 0
! 	/* if we ever go back to reserved.c checking, we'll reactivate
!            this code.  However, our reserved.c module hasn't done any
!            real computation since paradise 1. */
  	encryptReservedPacket(packet, &response, serverName, me->p_no);
+ #else
+ 	memcpy (response.data, packet->data, 16);
+ 	memcpy (response.resp, packet->data, 16);
+ #endif
+     }
      sendServerPacket((struct player_spacket *) & response);
  #endif
  }
***************
*** 2192,2198 ****
  handleRSAKey(packet)
      struct rsa_key_spacket *packet;
  {
!     struct rsa_key_cpacket response;
  
  #ifdef FEATURE
      if (F_feature_packets)
--- 2239,2252 ----
  handleRSAKey(packet)
      struct rsa_key_spacket *packet;
  {
!    struct rsa_key_cpacket response;
!    struct sockaddr_in saddr;
!    unsigned char* data;
!    int len;
! #ifdef GATEWAY
!    extern unsigned long netaddr;
!    extern int serv_port;
! #endif
  
  #ifdef FEATURE
      if (F_feature_packets)
***************
*** 2200,2210 ****
  #endif
  
  #ifdef AUTHORIZE
!     response.type = CP_RSA_KEY;
!     encryptRSAPacket(packet, &response);
  
!     sendServerPacket((struct player_spacket *) & response);
  #endif
  }
  
  #endif
--- 2254,2307 ----
  #endif
  
  #ifdef AUTHORIZE
! #ifdef GATEWAY
!    /* if we didn't get it from -H, go ahead and query the socket */
!    if (netaddr == 0) {
!        len = sizeof(saddr);
!        if (getpeername(sock,(struct sockaddr*)&saddr, &len) < 0) {
!            perror("getpeername(sock)");
!            exit(1);
!        }
!    } else {
!        saddr.sin_addr.s_addr = netaddr;
!        saddr.sin_port = htons(serv_port);
!    }
! #else
!            /* query the socket to determine the remote host (ATM) */
!     len = sizeof(saddr);
!     if (getpeername(sock,(struct sockaddr*) &saddr, &len) < 0) {
!         perror("getpeername(sock)");
!         exit(1);
!     }
! #endif
  
!    data = packet->data;
!    bcopy(&saddr.sin_addr.s_addr, data, sizeof(saddr.sin_addr.s_addr));
!    data += sizeof(saddr.sin_addr.s_addr);
!    bcopy(&saddr.sin_port, data, sizeof(saddr.sin_port));
! 
! #ifdef DEBUG
!    {
!        struct timeval start, end;
!        gettimeofday(&start, NULL);
  #endif
+        rsa_black_box(response.resp, packet->data,
+                  response.public, response.global);
+ #ifdef DEBUG
+        gettimeofday(&end, NULL);
+        printf("rsa_black_box took %d ms.\n",
+ 	      (1000 * (end.tv_sec - start.tv_sec) +
+ 	       (end.tv_usec - start.tv_usec) / 1000));
+    }
+ #endif
+ 
+    response.type = CP_RSA_KEY;
+ 
+    sendServerPacket((struct player_spacket*)&response);
+ #ifdef DEBUG
+    printf("RSA verification requested.\n");
+ #endif
+ #endif
  }
  
  #endif
***************
*** 2809,2814 ****
--- 2906,2912 ----
  	    temp->ship->s_desig[0] = packet->s_desig1;
  	    temp->ship->s_desig[1] = packet->s_desig2;
  	    temp->ship->s_bitmap = ntohs(packet->s_bitmap);
+             buildShipKeymap(temp->ship);
  /*dumpShip(temp->ship);*/
  	    return;
  	}
***************
*** 2839,2844 ****
--- 2937,2943 ----
      temp->ship->s_desig[0] = packet->s_desig1;
      temp->ship->s_desig[1] = packet->s_desig2;
      temp->ship->s_bitmap = ntohs(packet->s_bitmap);
+     buildShipKeymap(temp->ship);
  /*  dumpShip(temp->ship);*/
  }
  
***************
*** 2865,2871 ****
  
      SANITY_PNUM(packet->pnum);
  
!     updatePlayer[packet->pnum] = LARGE_UPDATE;
      if (infomapped && infotype == PLAYERTYPE &&
  	((struct player *) infothing)->p_no == packet->pnum)
  	infoupdate = 1;
--- 2964,2970 ----
  
      SANITY_PNUM(packet->pnum);
  
!     updatePlayer[packet->pnum] |= LARGE_UPDATE;
      if (infomapped && infotype == PLAYERTYPE &&
  	((struct player *) infothing)->p_no == packet->pnum)
  	infoupdate = 1;
***************
*** 2894,2900 ****
  	p->st_royal != (int) ntohl(packet->royal)) {
  	p->st_rank = (int) ntohl(packet->rank);
  	p->st_royal = (int) ntohl(packet->royal);
! 	updatePlayer[packet->pnum] = ALL_UPDATE;
      }
  }
  
--- 2993,2999 ----
  	p->st_royal != (int) ntohl(packet->royal)) {
  	p->st_rank = (int) ntohl(packet->rank);
  	p->st_royal = (int) ntohl(packet->royal);
! 	updatePlayer[packet->pnum] |= ALL_UPDATE;
      }
  }
  
***************
*** 2902,2908 ****
  handleStatus2(packet)
      struct status_spacket2 *packet;
  {
!     updatePlayer[me->p_no] = LARGE_UPDATE;
      if (infomapped && infotype == PLAYERTYPE &&
  	((struct player *) infothing)->p_no == me->p_no)
  	infoupdate = 1;
--- 3001,3007 ----
  handleStatus2(packet)
      struct status_spacket2 *packet;
  {
!     updatePlayer[me->p_no] |= LARGE_UPDATE;
      if (infomapped && infotype == PLAYERTYPE &&
  	((struct player *) infothing)->p_no == me->p_no)
  	infoupdate = 1;
***************
*** 2937,2942 ****
--- 3036,3042 ----
      planets[packet->pnum].pl_timestamp = ntohl(packet->timestamp);
      planets[packet->pnum].pl_armies = ntohl(packet->armies);
      planets[packet->pnum].pl_flags |= PLREDRAW;
+     pl_update[packet->pnum].plu_update = 1;
      if (infomapped && infotype == PLANETTYPE &&
  	((struct planet *) infothing)->pl_no == packet->pnum)
  	infoupdate = 1;
diff -rc client.2.3p3/struct.h client/struct.h
*** client.2.3p3/struct.h	Tue Mar 15 15:29:14 1994
--- client/struct.h	Fri Apr 22 06:40:03 1994
***************
*** 284,289 ****
--- 284,291 ----
      /* char s_name[16]; */
      char    s_desig[2];
      short   s_bitmap;
+     unsigned char    s_keymap[256];
+     unsigned char    s_buttonmap[12];
  };
  
  struct ship_shape {
***************
*** 312,318 ****
--- 314,322 ----
      double  st_sbmaxkills;	/* Max kills as starbase */
      long    st_lastlogin;	/* Last time this player was played */
      int     st_flags;		/* Misc option flags */
+ #if 0
      unsigned char st_keymap[256];	/* keymap for this player */
+ #endif
      int     st_rank;		/* Ranking of the player */
  };
  
diff -rc client.2.3p3/x11window.c client/x11window.c
*** client.2.3p3/x11window.c	Fri Apr 22 11:24:40 1994
--- client/x11window.c	Fri Apr 22 10:48:47 1994
***************
*** 309,317 ****
  	fprintf(stderr, "Cannot open display \"%s\"\n", str ? str : "(null)");
  	EXIT(1);
      }
      /* tmp */
!     /* XSynchronize(W_Display, True); */
!     /* XSetErrorHandler(_myerror); */
  
      W_Root = DefaultRootWindow(W_Display);
  #ifdef FOURPLANEFIX
--- 309,319 ----
  	fprintf(stderr, "Cannot open display \"%s\"\n", str ? str : "(null)");
  	EXIT(1);
      }
+ #if 0
      /* tmp */
!     XSynchronize(W_Display, True);
!     XSetErrorHandler(_myerror);
! #endif
  
      W_Root = DefaultRootWindow(W_Display);
  #ifdef FOURPLANEFIX
