ACM Revision 4 Patch #1
			 Riley Rainey

APPLYING THIS PATCH:

cd to the top of the source tree (the directory that contains the "src" and
"V" subdirectories) and type:

	$ patch -p -s < PatchFilename

Then rebuild everything.

	$ ./configure
	$ make

Summary of fixes:

Ultrix and HP-UX make(1) was having problems with the $(MAKEFLAGS) directive in
V/Makefile.in.  It has been removed.  It's removal should not affect the
build process on other platforms.

The Ultrix 4.3 shell was having problems with "./configure".  The problem
has been fixed.

A problem in "./Makefile" that would cause a mis-identification of the
default target has been fixed.
 
ClipPoly.c was unused in ACM 4, but has been updated so that it compiles.
 
A problem in inventory.c that was causing the nose-wheel steering mode to
stay enabled at all times has been fixed.  This problem was pointed-out by
      _
Mats Lofkvist (d87-mal@nada.kth.se).


*** ./README@@/V4.0	Mon Oct 18 09:07:29 1993
--- ./README	Tue Nov 16 10:10:00 1993
***************
*** 1,4 ****
! ACM Flight Simulator,  revision 4.0
  
  
  What is ACM?
--- 1,4 ----
! ACM Flight Simulator,  revision 4.1
  
  
  What is ACM?
***************
*** 22,30 ****
  at client workstations can then invoke the acm program to begin play.
  
  
! Riley Rainey
! rainey@netcom.com OR riley@atria.com
! August 29, 1993
  
  
  Building ACM:
--- 22,30 ----
  at client workstations can then invoke the acm program to begin play.
  
  
! Riley Rainey (rainey@netcom.com OR riley@atria.com)
! Dallas, Texas
! November 15, 1993
  
  
  Building ACM:
***************
*** 69,74 ****
--- 69,95 ----
  as a last resort in the case that `configure' fails to work properly.
  
  
+ What's different with revision 4.1:
+ -----------------------------------
+ 
+ Ultrix and HP-UX make(1) was having problems with the $(MAKEFLAGS) directive in
+ V/Makefile.in.  It has been removed.  It's removal should not affect the
+ build process.
+ 
+ The Ultrix 4.3 shell was having problems with "./configure".  The problem
+ has been fixed.
+ 
+ A problem in "./Makefile" that would cause a mis-identification of the
+ default target has been fixed.
+ 
+ ClipPoly.c was unused in ACM 4, but has been updated so that it compiles.
+ 
+ A problem in inventory.c that was causing the nose-wheel steering mode to
+ stay enabled at all times has been fixed.  This problem was pointed-out by
+       _
+ Mats Lofkvist (d87-mal@nada.kth.se).
+ 
+ 
  What's different with revision 4.0:
  -----------------------------------
  
***************
*** 338,340 ****
--- 359,363 ----
  	* you can fly through mountains.
  
  	* engines do not flame-out.
+ 
+ README: patchlevel-4.1
*** ./V/lib/ClipPoly.c@@/V4.0	Thu May  7 09:30:31 1992
--- ./V/lib/ClipPoly.c	Mon Nov  8 16:27:08 1993
***************
*** 7,18 ****
   *  A quick and dirty 2D polygon clipping algorithm.
   */
  
! int Clip2DPolygon (w, pts, npts, clippedPts, nClippedPts)
  AWindow	*w;
  Point	*pts;
  int	npts;
  Point	*clippedPts;
! int	*nClippedPts; {
  
  	register int	numPts, j, lastj, inside, lastInside;
  	int		x1, y1, x2, y2;
--- 7,20 ----
   *  A quick and dirty 2D polygon clipping algorithm.
   */
  
! void
! Clip2DPolygon (w, pts, npts, clippedPts, nClippedPts)
  AWindow	*w;
  Point	*pts;
  int	npts;
  Point	*clippedPts;
! int	*nClippedPts;
! {
  
  	register int	numPts, j, lastj, inside, lastInside;
  	int		x1, y1, x2, y2;
***************
*** 20,31 ****
  	lastj = npts - 1;
  	numPts = 0;
  
! 	lastInside = (IsInside (w, pts[lastj]) ? 1 : 0;
  
! 	for (j=0; j < *npts; ++j) {
  
! 		if (lastInside == 1)
  			clippedPts[numPts++] = pts[lastj];
  
  		inside = (IsInside (w, pts[j])) ? 1 : 0;
  
--- 22,34 ----
  	lastj = npts - 1;
  	numPts = 0;
  
! 	lastInside = IsInside (w, pts[lastj]) ? 1 : 0;
  
! 	for (j=0; j < npts; ++j) {
  
! 		if (lastInside == 1) {
  			clippedPts[numPts++] = pts[lastj];
+ 		}
  
  		inside = (IsInside (w, pts[j])) ? 1 : 0;
  
***************
*** 54,60 ****
  		lastj = j;
  	}
  
! 	*nCLippedPts = numPts;
! 
  }
  
--- 57,62 ----
  		lastj = j;
  	}
  
! 	*nClippedPts = numPts;
  }
  
*** ./V/lib/VOpenVp.c@@/V4.0	Fri Oct 15 14:39:01 1993
--- ./V/lib/VOpenVp.c	Tue Nov 16 14:30:44 1993
***************
*** 115,121 ****
  			    RootWindow(dpy, screen), width, height, planes);
  			v->flags |= VPPixmap;
  		}
! 		if (planes == 1)
  			v->flags |= VPMono;
  		v->mask = AllPlanes;
  	}
--- 115,121 ----
  			    RootWindow(dpy, screen), width, height, planes);
  			v->flags |= VPPixmap;
  		}
! 		if (planes == 1 || usePixmaps != 0)
  			v->flags |= VPMono;
  		v->mask = AllPlanes;
  	}
*** ./V/Makefile.in@@/V4.0	Thu Sep  2 14:53:28 1993
--- ./V/Makefile.in	Tue Nov 16 10:10:50 1993
***************
*** 4,11 ****
  # If you wish to debug or test Vlib, uncomment this definition ...
  #SUBDIRS = lib test
  
! all install uninstall clean distclean mostlyclean realclean tags info dvi dist check:
  	@for i in $(SUBDIRS) ; do \
  		echo Making $@ in ./$${i} ... ; \
! 		( cd $$i ; $(MAKE) $(MAKEFLAGS) $@ ) ; \
  	done
--- 4,20 ----
  # If you wish to debug or test Vlib, uncomment this definition ...
  #SUBDIRS = lib test
  
! defaulttarget: all
! 
! all install uninstall clean mostlyclean realclean tags info dvi dist check:
  	@for i in $(SUBDIRS) ; do \
  		echo Making $@ in ./$${i} ... ; \
! 		( cd $$i ; $(MAKE) $@ ) ; \
  	done
+ 
+ distclean:
+ 	@for i in $(SUBDIRS) ; do \
+ 		echo Making $@ in ./$${i} ... ; \
+ 		( cd $$i ; $(MAKE) $@ ) ; \
+ 	done
+ 	rm -f Makefile
*** ./src/inventory.c@@/V4.0	Fri Oct 15 14:39:15 1993
--- ./src/inventory.c	Tue Nov 16 10:00:04 1993
***************
*** 41,46 ****
--- 41,47 ----
  	LONG,
  	ANGLE,
  	NMILES,
+ 	KNOTS,
  	TABLE,
  	POINT,
  	STRING,
***************
*** 227,233 ****
  	{ "MuBKinetic",		DOUBLE,	MuBKinetic,	A(&c.muBKinetic) },
  	{ "MaxNWDef",		ANGLE,	MaxNWDef,	A(&c.maxNWDef) },
  	{ "NWIncr",		ANGLE,	NWincr,		A(&c.NWIncr) },
! 	{ "MaxNWS",		NMILES,	MaxNWS,		A(&c.maxNWS) },
  	{ "Rm",			POINT,	Rm,		A(&c.rm) },
  	{ "Rn",			POINT,	Rn,		A(&c.rn) },
  	{ "Dm",			DOUBLE,	Dm,		A(&c.Dm) },
--- 228,234 ----
  	{ "MuBKinetic",		DOUBLE,	MuBKinetic,	A(&c.muBKinetic) },
  	{ "MaxNWDef",		ANGLE,	MaxNWDef,	A(&c.maxNWDef) },
  	{ "NWIncr",		ANGLE,	NWincr,		A(&c.NWIncr) },
! 	{ "MaxNWS",		KNOTS,	MaxNWS,		A(&c.maxNWS) },
  	{ "Rm",			POINT,	Rm,		A(&c.rm) },
  	{ "Rn",			POINT,	Rn,		A(&c.rn) },
  	{ "Dm",			DOUBLE,	Dm,		A(&c.Dm) },
***************
*** 637,646 ****
--- 638,650 ----
  
  			case DOUBLE:
  			case NMILES:
+ 			case KNOTS:
  				if ((n = ParseValue (p)) == 0) {
  				    d = pop_value (p, double_value);
  				    if (kw->type == NMILES)
  					d *= NM;
+ 				    else if (kw->type == KNOTS)
+ 					d *= NM / 3600;
  				    *((double *) kw->ptr) = d;
  				}
  				break;
*** ./src/patchlevel.h@@/V4.0	Fri Oct  8 16:23:03 1993
--- ./src/patchlevel.h	Tue Nov  9 17:19:58 1993
***************
*** 1,4 ****
  #define REVISION	4
! #define PATCHLEVEL	0
  
! #define REVISION_STRING "4.0"
--- 1,4 ----
  #define REVISION	4
! #define PATCHLEVEL	1
  
! #define REVISION_STRING "4.1"
*** ./src/newPlayer.c@@/V4.0	Tue Nov  2 16:58:07 1993
--- ./src/newPlayer.c	Tue Nov 16 15:21:42 1993
***************
*** 63,68 ****
--- 63,69 ----
  #define SW_DEFAULT_VISUAL 9
  #define SW_PLANE	10
  #define SW_LIST_PLAYER	11
+ #define SW_MONOCHROME	12
  
  struct {
  	char	*sw;
***************
*** 77,82 ****
--- 78,84 ----
  	"-chase",    SW_CHASE,
  	"-observe",  SW_OBSERVE,
  	"-cmap",     SW_DEFAULT_VISUAL,
+ 	"-mono",     SW_MONOCHROME,
  	"-plane",    SW_PLANE,
  	"-list",     SW_LIST_PLAYER,
  	NULL, 0}, *swp;
***************
*** 200,206 ****
      int		chaser = -1;
      int		width, height;	/* dimensions of main window */
      double	scale;
!     int		depth;
      long	win_attr_mask;
      Visual	*theVisual;
      XSetWindowAttributes window_attributes;
--- 202,208 ----
      int		chaser = -1;
      int		width, height;	/* dimensions of main window */
      double	scale;
!     int		depth, mono = 0;
      long	win_attr_mask;
      Visual	*theVisual;
      XSetWindowAttributes window_attributes;
***************
*** 259,264 ****
--- 261,270 ----
  				plane = *(++c);
  				break;
  
+ 			case SW_MONOCHROME:
+ 				mono = 1;
+ 				break;
+ 
  			case SW_LIST_PLAYER:
  				sprintf (err, "\nname\t\tnumber\n");
  				write (s, err, strlen(err));
***************
*** 592,597 ****
--- 598,605 ----
      if (depth != 1)
  	usePixmaps = 1;
  #endif
+ 
+     usePixmaps = mono ? 1 : 0;
  
      if (chaser == -1) {
        u->v = VOpenViewport (u->dpy, screen, u->win, cmap, theVisual,
*** ./src/update.c@@/V4.0	Tue Oct  5 16:46:18 1993
--- ./src/update.c	Tue Nov 16 15:03:43 1993
***************
*** 122,128 ****
   *  make it one update interval.
   */
  
! 	if (deltaT > (double)((UPDATE_INTERVAL / 1000000.0) * 16)) {
  		deltaT = UPDATE_INTERVAL / 1000000.0;
  	}
  
--- 122,128 ----
   *  make it one update interval.
   */
  
! 	if (deltaT > (double)((UPDATE_INTERVAL / 1000000.0) * 4)) {
  		deltaT = UPDATE_INTERVAL / 1000000.0;
  	}
  
*** ./src/manifest.h@@/V4.0	Tue Nov  2 16:58:03 1993
--- ./src/manifest.h	Tue Nov 16 15:07:46 1993
***************
*** 222,231 ****
   *  at the acms server's tty.
   */
  
- #ifndef REAL_DELTA_T
- #define REAL_DELTA_T
  /* #define WATCH_FRAME_RATE */
- #endif
  
  /*
   *  MAX_GAME_IDLE_SECONDS defines the amount of time that a server is allowed
--- 222,228 ----
*** ./src/server.c@@/V4.0	Fri Oct 15 14:39:21 1993
--- ./src/server.c	Thu Nov 18 16:22:31 1993
***************
*** 16,22 ****
   *  Foundation, Inc., 675 Mass Ave., Cambridge, MA 02139, USA.
   */
  
! #ifdef SOLARIS
  #include "/usr/ucbinclude/sys/signal.h"
  #include <sys/filio.h>
  #endif
--- 16,22 ----
   *  Foundation, Inc., 675 Mass Ave., Cambridge, MA 02139, USA.
   */
  
! #if defined(SVR4)
  #include "/usr/ucbinclude/sys/signal.h"
  #include <sys/filio.h>
  #endif
*** ./Makefile.in@@/V4.0	Thu Oct 21 09:45:58 1993
--- ./Makefile.in	Thu Nov 18 15:34:38 1993
***************
*** 3,12 ****
    SHELL = /bin/sh
  SUBDIRS = V src objects
  
  all install uninstall clean mostlyclean realclean tags info dvi dist check:
  	@for i in $(SUBDIRS) ; do \
  		echo Making $@ in ./$${i} ... ; \
! 		( cd $$i ; $(MAKE) $(MAKEFLAGS) $@ ) ; \
  	done
  
  Makefile: Makefile.in config.status
--- 3,16 ----
    SHELL = /bin/sh
  SUBDIRS = V src objects
  
+ # This line is needed to force BSD-style makes to do the right target
+ # by default -- they get confused by the following target.
+ defaulttarget: all
+ 
  all install uninstall clean mostlyclean realclean tags info dvi dist check:
  	@for i in $(SUBDIRS) ; do \
  		echo Making $@ in ./$${i} ... ; \
! 		( cd $$i ; $(MAKE) $@ ) ; \
  	done
  
  Makefile: Makefile.in config.status
***************
*** 21,26 ****
  distclean:
  	@for i in $(SUBDIRS) ; do \
  		echo Making $@ in ./$${i} ... ; \
! 		( cd $$i ; $(MAKE) $(MAKEFLAGS) $@ ) ; \
  	done
  	rm -f Makefile config.status
--- 25,30 ----
  distclean:
  	@for i in $(SUBDIRS) ; do \
  		echo Making $@ in ./$${i} ... ; \
! 		( cd $$i ; $(MAKE) $@ ) ; \
  	done
  	rm -f Makefile config.status
*** ./configure@@/V4.0	Fri Oct 15 14:38:51 1993
--- ./configure	Thu Nov 18 16:22:48 1993
***************
*** 124,134 ****
  configure_args="$*"
  
  
! ow=${OPENWINHOME:-/usr/openwin}
  
  # Solaris special handling ...
  if uname -sr | grep '^SunOS 5' >/dev/null ; then
- 	DEFS="$DEFS -DSOLARIS"
  	LIBS="$LIBS -lnsl -lelf -L/usr/ucblib -lucb"
  fi
  
--- 124,137 ----
  configure_args="$*"
  
  
! if test "$OPENWINHOME" = "" ; then
! 	ow=/usr/openwin
! else
! 	ow=$OPENWINHOME
! fi
  
  # Solaris special handling ...
  if uname -sr | grep '^SunOS 5' >/dev/null ; then
  	LIBS="$LIBS -lnsl -lelf -L/usr/ucblib -lucb"
  fi
  
***************
*** 300,305 ****
--- 303,324 ----
  fi
  rm -f conftest*
  done
+ 
+ echo checking for elf.h
+ cat > conftest.c <<EOF
+ #include <elf.h>
+ EOF
+ err=`eval "($CPP \$DEFS conftest.c >/dev/null) 2>&1"`
+ if test -z "$err"; then
+   
+ {
+ test -n "$verbose" && \
+ echo "	defining SVR4"
+ DEFS="$DEFS -DSVR4=1"
+ }
+  LIBS="$LIBS -lelf"
+ fi
+ rm -f conftest*
  
  echo checking for return type of signal handlers
  cat > conftest.c <<EOF
*** ./configure.in@@/V4.0	Fri Oct 15 14:38:54 1993
--- ./configure.in	Thu Nov 18 16:21:22 1993
***************
*** 1,10 ****
  AC_INIT(README)
  
! ow=${OPENWINHOME:-/usr/openwin}
  
  # Solaris special handling ...
  if uname -sr | grep '^SunOS 5' >/dev/null ; then
- 	DEFS="$DEFS -DSOLARIS"
  	LIBS="$LIBS -lnsl -lelf -L/usr/ucblib -lucb"
  fi
  
--- 1,13 ----
  AC_INIT(README)
  
! if test "$OPENWINHOME" = "" ; then
! 	ow=/usr/openwin
! else
! 	ow=$OPENWINHOME
! fi
  
  # Solaris special handling ...
  if uname -sr | grep '^SunOS 5' >/dev/null ; then
  	LIBS="$LIBS -lnsl -lelf -L/usr/ucblib -lucb"
  fi
  
***************
*** 15,20 ****
--- 18,24 ----
  AC_PROG_RANLIB
  AC_STDC_HEADERS
  AC_HAVE_HEADERS(stdlib.h malloc.h unistd.h)
+ AC_HEADER_CHECK(elf.h, AC_DEFINE(SVR4) LIBS="$LIBS -lelf")
  AC_RETSIGTYPE
  
  if test -z "$x_includes" ; then