
=======
changes to Galatea 2.5 alpha sources; 
from 11/06/90 to 11/12/90;
by russ
=======

* cleaned up unix sockets. they are now shutdown(), close()-d, and
  unlink()-ed when server proc shuts down; will now log messages 
  giving human-readable reasons if an unlink() fails. also, fixed 
  a couple of bad else nests in the unix connection binding code,
  which is (probably) why unix sockets haven't been working. now
  they do under athena unix.

* looked into inet_ntoa(); couldn't see any difference between your
  2.5 code now and the old 2.4 code, or with the Athena unix man page.

* fixed option-handling in gshutdown.c; needed 'else' before all
  the secondary if's

* added extra line to all clients to tell what argument they gave
  to GNewOpenServer() if the call failed

* changed name of Seamless.h and Seamless.c to GSeamless.[ch], and
  in all subdirs; more in keeping with the X-ish conventions that
  Galatea tends to follow; all future extension files (headers) should be
  prefixed with 'G'

* added MAKEDEP and INSTALL defines to all Makefiles and config files;
  made all INSTALL's relative to DESTDIR; made all directory Makefiles
  pass down DESTDIR on 'make install', so you can do things like
  "make DESTDIR=/usr/local/test install"; this is required for Athena
  builds, and is useful for testing the build/install kit; also, you can
  define MAKEDEP and INSTALL in the conf file; for SYSV, there's also
  a copy of bsdinst.sh in each directory (wasteful yes, but no sym 
  links in SYSV, and I couldn't figure out a simple way to encode
  the top-level path in something like $(TOP), as was done for X)

* added dependency checking on the config file used to generate all
  Makefiles, in the top-level Makefile; also made this a pre-requisite
  for "make all" and "make depend"; also added "make depend" and 
  "make all" targets everywhere

* converted 'athenavax' and 'athenart' conf files into a single new 
  "athena" file; this builds in the SEAMLESS extension by default, 
  and also has UNIXCONN and PLX support

* added code to support reverse-play multi-speed segments in sony driver
  (now working on LDP1000A); after much playing around, it seemed that
  REPEAT would get confused about 10-20% of the time when playing backwards,
  and actually step forward 1 frame before returning. So, if you're at
  100, and you want to play at -10 fps, you often end up at 101. The
  hack is to rpd_jog(rpd, -1) FIRST if you're going reverse; then do the
  REPEAT. Now I don't have any problems with it. I hate the LDP-1000A.

* fixed speed values in vdp50_FindSpeed(); player actually goes up to 
  600 fps; doesn't stop at 120 like before; and the frame rate on a scan is
  (according to the manual) about 75*30 fps

* added code to get rid of spare STOP_MARKER in pioneer driver; seems to
  work fine, but Dan, it'd be great if you'd test this since you initially
  discovered the problem

* added RETURN_NOW_WITH_SPEED flag to Glib.h, and to DoPlaySeg
  in dofuncs.c; works just like RETURN_NOW (doesn't block), but gives
  you back the current speed in fps instead of the current frame when
  the client gets control back

* added fixes for CURRENT_FRAME segplay to vdp50.c

* added check for f1 == f2 in segplay for:

	pioneer
	pana
	vpd50
	sony

* added code to make sure a CURRENT_FRAME segplay doesn't overrun
  the target before a play command is issued when the disc is already
  in motion; in:

	pioneer
	pana
	vdp50
	sony

  actually, this is not necessary in the vdp50 and sony, but we need
  to maintain the correct speed + direction in the cache; uses
  a new macro added to the end of rpd_driv.h

* took out the line:

    if (len == f2 + 1) return -1;

  this was probably an error check to see if getframe() returned -1;
  but of course, this will cause any seg of length 1 to indicate failure;

  instead, if the preceding getframe() gets an error, then it returns -1;

  changes in:

	pana
	pioneer
	vpd50
	sony

  once again, the 1000A tends to puke if you give it short segments; so
  if the length is less than 3, I just jog the correct number.

* added rpd_setframe() and rpd_setspeed() caching calls to pana.c

* added STARTLOAD and ENDLOAD cases to pana_cmd; would only
  get used if FORKSPIN is not defined (basically never, but who knows ...)

* added a line to stop the disc before a jog if the disc is moving, in:

	pioneer
	vdp50
	sony
	pana

* checked and fixed up the speed value computations in all the drivers,
  and tested them with RETURN_NOW_WITH_SPEED flag; all seem to be working
  fine

========

PROBLEM: there's a problem with the panasonic player under gctl;
when you start shuttling > 5 times normal (150 fps), the video sometimes
gets blanked out and the transport just hangs on the current frame;
when you release the shuttlebar the video reappears (disc is stopped).
I think this is an interaction with the NO_SYNC nature of the shuttlebar,
and the fact that the panasonic driver does a pana_cancel() before setting
the speed inside pana_varspeed(). the cancel probably puts the disc out
its play mode too fast when you drag the shuttlebar. that's my current
theory, anyway. it plays fine when you ask it go fast from the command
line (synchronously).

--------- 
more changes by russ
11/12/90
after review by danapple 
---------

* fixed top-level Makefile; should be "-rm -f setup", not "-rf -f config".

* propagated "CC" into all Makefiles and conf files; could now
  specify gcc compilation (in theory)

* "make clean" now removes the dependencies added by "make depend";
  a nit, but it makes it easier to pack up a release tape

* added a couple of extra sentences to the documenation; title
  page now has a version number; GPlaySeg() explains the 
  RETURN_NOW_WITH_SPEED flag; and a little bit about new Makefile
  stuff; re-Scribed the doc

* fixed various nits that the RT compiler (non-pcc) complained
  about; especially XFindContext() calls where the last param
  is expected to be a (caddr_t *)

* found a test in rpdutil.c, where it checks "if (*rpd->proddev) ..."; 
  the VAX actually lets you get away with that. it now reads (correctly):

	if (rpd->proddev) success = (*rpd->proddev)(rpd);

* found a missing printf, in swtrutil.c; used to read:

      if (DEBUG) ("swtrutil_open: device is not a SWTR\n");

  instead of:

      if (DEBUG) printf("swtrutil_open: device is not a SWTR\n");

* in pioneer_search(), there was a macro "rpd_getframe(rpd)" which
  should read "pioneer_getframe(rpd)"

* in dofuncs.c, in DoGetStatistics(), it used to read:

	/*ARGSUSED*/
	int DoGetStatistics(msgsock, hostcommand, i)
	     int msgsock, i;
	     Galatea_packet *hostcommand;
	{
	  struct timeval cur_time;
	  num_connections, max_connections, delayed_requests;

the declaration of the last three variables overrides the global
variables of the same names, thereby making those statistics
invisible; so now it reads:

	/*ARGSUSED*/
	int DoGetStatistics(msgsock, hostcommand, i)
	     int msgsock, i;
	     Galatea_packet *hostcommand;
	{
	  struct timeval cur_time;
	#ifdef OBSOLETE
	  num_connections, max_connections, delayed_requests;
	#endif

