For tclmidi-3.1p1

* update patchlvl.h to 3.1p1.

* cleaned up debug messages from iface_gravis.c

* cleaned up debug messages from mplay script

* rework mrec script to use vwait (so we continue to get FileEvents)
  and to close files explicitly before exiting.

* Remove -fpic assembler warning about functions that need to be global
  instead of static.  Namely, ever tcl command entry point.

* Rework TclmDr75.cxx to play/record saner.  FileEventHandlers now only
  exist when they are needed.  When last play events have been sent to
  driver, switch from FileEvent to polled mode and check driver play
  queue every 100ms to see if has completely left driver.

* Make freebsd loadable module (submitted patch to freebsd to fix panic
  when unloading a module)

* Fix interrupt mask for GUS GF1 when recording from external device

For tclmidi-3.1

* Tested with tclsh7.6.  Everything seems to be okay.

* Wrote wininst.tcl script for installing under Windows.

* Modified minfo and midtotcl scripts so they'll work under Windows.

* Changed shared library name to end in .so.  The pkg_mkIndex command
  doesn't like numbers after the shared library extension.

* Update INSTALL file - long overdue.

* Update instructions and patches for FreeBSD-current.

* This file has gone unmodified for too long.  I can't remember all
  the changes I have made.  Bad mike.

* tclmidi now runs under windows!

* tclmidi now uses autoconfig - no more makefile editing

* tclmidi is now a loadable module - tcl 7.5 required

* Pnp support code.  Works, but needs to be more general (ie support
  mem map stuff better)

* Command to read/load GUS patches.  It works, but isn't correct.
  This isn't too imporant yet, as the driver doesn't work either.

* GUS support in the driver - kinda.

* Had to break the barrier between the tcl code and libmidi++.a so I
  could use the TCL_7_5 Tcl_Channel stuff.  This really isn't necessary
  for Unix support, but will be very useful when we port to Windows and
  the Mac.  Since I already broke the barrier with the event code in
  TclmDriver75, this one wasn't too painful - it's also pretty localized,
  and can be avoided by not defining TCL_7_5.

* Reworked TclmDriver to use new improved event loop in TCL_7_5 - no
  more asynch signals!

* Added support for TCL_7_5.

* Major and much needed reorg of the driver file names.  Now all generic
  support files start with sup_, all interface start with iface_, all
  timering mechanisms start with timer_, and all system dependent files
  start with sys_.

* added man page for midigrep

* added new midigrep command to speed searching for certain event
  patterns

For tclmidi-3.0.0

* Fix midiget abs-time bug.  It wasn't correctly updating cur_event pointer
  in some cases.

* MidiDev-Feature now returns a ostrstream *.  This way TclmPlay.cc, doesn't
  have to know anything about feature types.

* Support for multiple devices in synch.

* Added a new queue to contain events written to raw device.  Perviously
  could only handle one event at a time.

* It looks like the linux driver now gets an official major number.  Number
  35.

From tclmidi-2.2.1 to tclmidi-2.2.2

* only one cooked open per device, but unlimited raw opens.  Multiple
  processes reading can lead to unexpected results.

* MIDITHRU is treated similarly to raw writes, and is protected from
  running status errors.

* Removed locking in midi_write_events.  It is now called via the
  timeout callback with a 0 tick delay.

* Added new "raw" mididevice.  Reads data w/o timestamps and writes
  data w/o timestamps.  Should still be safe to use in conjunction
  with timed device (ie running status won't get confused and events
  won't get written in middle of others).

* Added locking to midi_write_events to prevent re-entrancy

* MIDI_THRU fixed so it doesn't reset on every open(2)

* Removed extra 0x prefix from data lists.

* Fixed bug in BSD/OS midiintr - passed wrong softc as an arg.

* Added driver support files for NetBSD

* EventTree::GetEvents now works if it is called for a time that only
  contains NoteOff event half from Note events (ie it now skips ahead
  to the next "real" event).

* Text type Meta events now return text in {}'s instead of double quotes.

From tclmidi-2.2 to tclmidi-2.2.1

* Documentation on how to install the various drivers.

From tclmidi-2.1 to tclmidi-2.2

* Fixed bug where driver would stall if wqueue drained at inopportune
  time during write(2).

* midithru tcl command now acts even if driver isn't currently
  recording/playing.

* Better MIDI_THRU support.  Now will pass data even if device isn't
  open.

* Unified Driver Code!

From tclmidi-2.0 to tclmidi-2.1

* midiioctl.h for BSD drivers is now put in /usr/include/sys for
  inclusion.

* new miditime command.  Returns current driver time in either SMF
  or SMPTE format (if supported).

* mididevice now returns 1 or 0 if called w/o any arguments.  1 means
  there is device support compiled in, 0 there is not.

* Reading a MetaKey event from SMF file now defaults to C major if
  either field is invalid.

* more accurate driver timing

* SMPTE support in driver

* Many thanks to Stephen Yost for porting tclmidi to Windows!

* Created new NOP EventType in driver.  Doesn't do anything but will
  do better job of keeping timing synched.  Ie driver will block until
  MetaEndOfTrack event is "played" when closed.

* midiget will now return list of events with time >= requested time
  posible incompatibility (suggested by Andy de Torres)

* Small modifications in Linux driver Makefile (Greg)

* Fixed memory leak in driver (Greg)

* Pathes from Greg Wolodkin to fix load/unload problem in Linux driver
  and off by one error in MPU401.C

* Linux stuff from Alberto to make installation easier

* Linux installation improvements from Alberto (no more kernel patch for
  loadable module)

* removed ugly signal kludge in Linux driver.

* removed non-quad version of driver.

* midiget was returning an event list instead of NoEvent if time
  didn't match.  Now returns NoEvent.

* mididelete was failing for Note events if NoteOff pair didn't have
  velocity zero.  Would also fail if NoteOff pair was really NoteOn
  with velocity 0.  Now works correctly.

* make install now automatically sets path to tclmidi when installing
  scripts

* Fixed midiwait problem in MPU401 device interface?

* Fixed Song::SetNumTracks bug.  Wasn't actually allocating new track.

* Changed mtohl, htoml, etc. to use an inline function instead of
  a macro definition.  I think the new way might be faster, but it
  does generate some harmless warnings

* Removed midi_killable from the driver.  After talking with people,
  I realized it wasn't really necessary.  SIGIO and SIGURG are ignored
  by default, thus it's not really a security hole.

* Trying out a different way of converting between kernel and smf ticks
  in the drivers.  Don't know if it is better or not.

* midiget did not return an error when "getting" from a non existant
  track

* Fixed(?) some harmless compiler warning in BSD driver (thanks to
  Andreas for pointing these out).

* NetBSD patches for 4.4 BETA version from Andreas Gustafsson.

* Song Locks EventTree before modifying it (if USE_PTHREADS is defined).

* Song now contains an array of EventTree pointers instead of an
  array of EventTrees.  This should speed copying and changing the
  number of tracks.

* Event now contains EventTreeNode pointer.  This should speed traversals
  and note insertions.  The EventTree code no longer must hunt through
  the tree for a particular event just to determine its node.

* Removed class methods in EventTree that return EventTreeNodes, they
  should no longer be needed now that Events contain node pointers.

* EventTree::GetRange now adjusts times in new tree to be relative
  to the start time.

* Modified Makefiles to pass flags better.

* Linux-1.1.50 patches from Alberto Vignani
