CHANGES, mtx 1.2.13:
- Fixed some autoloader bugs w/autoloaders that don't report an arm. 
- Fixed barcode backoff.
- Added "nobarcode" option
- Increased timeout for 'mtx inventory' to 30 minutes
  (note: may increase this even more if needed, please let me know!)
- Shortened timeout for 'mtx inquiry' to 30 seconds
- tapeinfo now prints SCSI ID/LUN info if available (only on Linux at the
  moment, sigh). 
- update documentation w/new email addresses, updated compile directions,
  various fixes. 

CHANGES, mtx 1.2.12:
- Fix FreeBSD compile bugs
- Fix SGI compile bugs
- Add HP/UX port (I hope!), courtesy of William Smith. 
- Re-wrote ReadElementStatus to make work for %!@# brain dead firmware that
  reports non-existent drives (I hope!). Also has side-effect of now working
  with multiple-arm libraries (though it only sees first arm!).
- Cleaned up all -Wall messages.
- Cleaned up Linux Sparc, installs loaderinfo.1, courtesy of Matt Dainty.
- tapeinfo now reports status of CheckUnitReady.  
- tapeinfo no longer puts out Block Position if CheckUnitReady says 'no'.
- tapeinfo now puts out Density Code and Medium Type/Not Loaded (modification
    of patches sent in by Bob Rahe)

CHANGES, mtx 1.2.11:
- Added a GNU autoconf Makefile.in (still provide a Makefile for your use)
  *WARNING* autoconf is not yet working on all supported OS's! You may need
  to do the old-fashioned 'edit Makefile' bit!
- Changed mtx.h and mtxl.c to include and define various things based upon
  what features autoconf detected (e.g., if 'camlib.h', use FreeBSD-style
  'cam', if 'scsi/sg.h' use Linux-style 'sg', etc.). If I ever port to a
  Unix that has same SCSI interface as one of the existing ports, autoconf
  will handle it without me having to add another set of #if's or #ifdefs. 
- Went ahead and tossed mtxctl into contrib.
- In 'tapeinfo', skip \0 characters in serial numbers (some use \0 
  terminator, some do not, skip it if this one does). 
- in 'tapeinfo', dump out the block position and (if at BOP) the "BOP: Yes"
  flag. Also dump out other info such as block limits. 
- Put file 'sparc-patch1' contributed by Chaskiel M Grundman, and applied
  it (sigh)
- Added tapeinfo.py to 'contrib' directory
- Updated mtx.py in 'contrib' directory
- Created 'loaderinfo' program to report some misc. info about loaders.
- Created 'scsitape' program so that I don't have to keep messing with
  #@$%@! tape ioctls on the various Unixes that I'm porting tape software
  to.  (But see the warnings!).
- Applied the Solaris patch to the read_element_status command (sigh). 
- Added timeout adjustment to the SCSI subsystem. 
- WARNING: DIGITAL UNIX AND VMS ARE PROBABLY IRREPERABLY BROKEN, due to the
  timeout changes to the SCSI subsystem. If anybody wishes to fix them,
  feel free to send me patches. 
- added contrib program "mtx-changer" (an Amanda tape changer script for
  ?Solaris? that uses mtx rather than stc)
- Jiggered Linux SCSI module for smarter error conditions handling (there are
  some error conditions that are normal for READ of tape drives).
- Added contrib program "config_sgen_solaris.sh" which should ease 
  setting up the 'sgen' driver on Solaris 8 (still no easy Solaris 7 or
  below config). 

CHANGES, mtx 1.2.10:
- Added FAQ and COMPATIBILITY (feel free to send me patches to these files!)
- Added LICENSE
- Added serial number to 'tapeinfo' output. 
- Fixed stupid syntax error in mtx.c (compiled with gcc, not with others!)
- Fixed spec file for building rpms (maybe).
- Added an 'erase' command (undocumented) for use on Linux for doing
  short erases on tapes (the Linux device driver defaults to a long erase). 
- Made mtx inventory return an error code if the inventory
  fails, so that we can wait for inventory to be completed at system
  startup for libraries that auto-inventory (sigh). 

CHANGES, mtx 1.2.9:
- Added an 'eject' command that, if directed to a tape drive, will eject the
  tape, and for some autoloaders, if directed to LUN 1, will eject the entire
  magazine.
- Fixed the 'transfer' command to be 1 based rather than 0 based (sigh)
- Now properly reports bar code for the tape that's in the tape drive.
- Added some miscellaneous Python and Perl scripts to 'contrib'. Thanks
  to Frank Samuelson for the Perl scripts. 

CHANGES, mtx 1.2.8:
- Spec file has been changed to use the "portable" patch supplied by Red
  Hat so it should work on Linux Alpha and Linux SPARC too... maybe...
- Now will accept 4-byte element status for most element types, despite fact
  that these don't comply with SCSI standards :-(. This should make many
  older changers work, including HP optical changers. 
- Fixed PeripheralDeviceType table, courtesy of Rob Turk.
- Now looks for CHANGER environment variable if a device is not specified
  on the command line. If can't find CHANGER, then tries TAPE environment
  variable.
- Properly sets TransportElementAddress in the CDB for the MOVE MEDIUM command
  with what was discovered via the READ_ELEMENT_STATUS command, rather
  than setting them to zero (SCSI spec says that zero should be the default
  arm, but at least one changer out there didn't like it). 
- Added a '--version' command (sigh). 
- Added an 'inventory' command for Breece Hill libraries that don't 
  automatically do an inventory at powerup. 

CHANGES, mtx 1.2.7:
- Fixed problem w/single drive Exabyte 220 reporting element status data for
  both drives (sigh).
- some general cleanup in the barcode fallback code (what a cruft!). Discovered
  that ADIC DAT AUTOCHANGER does not work w/mtx because it produces
  gibberish (will apparently only produce one element status page per request).
- Fixed the RPM .spec file to have updated file locations, doc locations.
- Fixed MoveMedium to say 'Output' for direction, to make it work with
  Solaris 8     
- Some changes to the Solaris low-level module to report more errors (though
   it still doesn't work as well as the Linux low-level module). Should now
   work properly with Solaris 2.6/7/8. (Solaris changes courtesy of Richard
   Fish of Enhanced Software Technologies). 

CHANGES, mtx 1.2.6:
- Fixed 'eepos' stuff to use | rather than || (whoops!)
- Accept a 4-byte element descriptor for the robot arm for certain older
  autochangers. 

CHANGES, mtx 1.2.5: 
- Added 'noattach' command. If on command line prior to other commands, forces
  them to use the regular SCSI changer API rather than the _ATTACHED API,
  no matter what the _ATTACHED bit in the Inquiry page said. 
- Created 'tapeinfo' program.

CHANGES, mtx 1.2.4:
- Major overhaul of element guts to dynamically allocate the arrays
  using the result of a MODE_SENSE on the Element Address Assignment
  Page. If mtx 1.2.3 works for you and mtx 1.2.4 does NOT work for you, 
  please un-comment the '#define DEBUG_MODE_SENSE' in file 'mtxl.c' and 
  EMAIL me the results.

CHANGES, mtx 1.2.3:
- Fixed the source storage element number stuff (again, sigh)
- Because of above fix, 'next' etc. ought to work right again.

CHANGES, mtx 1.2.2:
- Fixed that it was saying everything was an Import/Export element (oops!)
- Properly update the Import/Export element count.

CHANGES, mtx 1.2.1:
- Now explicitly output that a Storage element is in fact an Import/Export
  element.
- Added 'transfer' command to transfer between two Storage elements (so that
  you can get a tape to an Import/Export element.
- Added 'eepos' command for controlling tray retraction on the Breecehill
  import/export trays. (Works with "load" and "unload" commands too, though
  that is not documented on "mtx -h"). 

CHANGES, mtx 1.2.0:
- Re-numbered now that Leonard has asked me to take over maintenance of the
  'mtx' program.
- Temporarily treat Import/Export elements the same as Storage elements. Need
  to fix this eventually so that the GUI knows what kind of element we're
  talking about. 
- Removed quotes from the source element # to make it easier to parse
  from Perl or Python (just do a split on spaces). 
- Added sample program, 'mam2debug', showing how to use mtxl library for
  your own programs (this happens to dump the Exabyte Mammoth 2's internal 
  debug buffer to a file, using the Mammoth2-specific SCSI commands to do so).

CHANGES, mtxl 1.4.8:
- Whoops, report logical rather than physical when I have to scan for
  open slots :-).

CHANGES, mtxl 1.4.7:
- Update comment to reflect mtxl 1.4.6 stuff :-).
- Fix the part of the code that scans for open slots as sources for media.

CHANGES, mtxl 1.4.6:
- Don't use _ATTACHED interface if it reports itself as a Medium Changer!

CHANGES, mtxl 1.4.5:
- Changed "whoops" compile error on Linux (teach me to release w/o testing on
  the most popular platform!)
- Changed declarations to remove compile-time warnings.

CHANGES, mtxl 1.4.4:
- Added support for FreeBSD. (uses pass device, NOT native FreeBSD ch device).
- Change all 'int' DeviceFD to DEVICE_TYPE DeviceFD. Note that SGI and FreeBSD
  use a struct * to access the CAM SCSI layer, rather than a file fd. 
- Fixed goof where I'd hard-wired max # of elements to 127 for testing
  purposes (it should be sum of MAX_STORAGE_ELEMENTS + MAX_TRANSFER_ELEMENTS 
  + MAX_TRANSPORT_ELEMENTS from mtx.h -- change those if you need more
  elements, bearing in mind that the code for ReadElementStatus in
  mtxl.c maxes out at 255 elements unless you fix that too).
- Cleaned some cruft out of the MOVE_MEDIUM code.
- Must have GNU Make to process Makefile. In reality, I don't know of
  any machine where we voluntarily use the native 'make' command, because
  a) there's a half dozen native 'make' all with their own perverted
  syntaxes, and b) most of them are brain dead beyond belief. 

CHANGES, mtxl 1.4.3:
- Do an INQUIRY prior to doing a MOVE_MEDIUM or READ_ELEMENT_STATUS so that I
  can detect the MChanger bit and use MOVE_MEDIUM_ATTACHED or
  READ_ELEMENT_STATUS_ATTACHED commands instead. 
- Successfully tested with dual drives!
- first, next, last now working 
- Created a man page
- Created a 'make install', edit Makefile to alter destinations. 

CHANGES, mtxl 1.4.2:
- Found the problem with the DAT changer! It was burping on the 
  'bar code' bit... so I intercept that sense key, re-issue w/out the
  'bar code' bit, and success!
- Added a 'TODO' file...

CHANGES, mtxl 1.4.1:
- Added 'invert' qualifier to 'load' and 'unload' commands to invert
  the media (for HP optical jukeboxes). Type './mtx' by itself to 
  see the syntax.
- Figured out why my code wasn't properly detecting errors --
  turns out the 'sg' device can return ok
  status even when there is sense data to be reported!
- Still to fix: *still* isn't working right with my Seagate 
  6-tape DDS-4 DAT changer... also need to put the
  second drive into the Exabyte 220 to make sure the dual-drive stuff 
  works properly (!). 

CHANGES, mtxl 1.4:
- Have now tested the barcode (volume tag) stuff. It works! (Well, there was
an index-by-one problem that I had to squash, but after that...)
- Changed to use SCSI Generic device API on Linux rather than 
SCSI_IOCTL_SEND_COMMAND API, which cut things off at 4095 bytes on i386
Linux. 
- Added a bunch of debugging output that needs to be ripped out :-(. 
Make sure you remove the -DDEBUG from the Makefile, and probably
   -DLONG_PRINT_REQUEST_SENSE too (unless you LIKE sense results that make
sense!) 
- Still have annoying bug on Linux of only reading 1st 16 bytes of sense
data. Alas, this appears to be a problem in the Linux 2.2 kernel, not in
anything that we're doing :-(. Hmm... cdrecord has the same problem, Mr.
Schilling says he's been saying it's a problem since 1997. Sigh. 
- Still need to test the dual-drive stuff!

CHANGES, mtxl 1.3:
- Hacked in the barcode (volume tag) stuff. NEED SOMEONE TO TEST
WHETHER IT WORKS!
- started issuing redundant initial READ_ELEMENT_STATUS with Allocation Length
of 8 in order to get a BYTE_COUNT_OF_REPORT_AVAILABLE in order to calculate a
better Allocation Length for the "real" READ_ELEMENT_STATUS. Trying to send a
query to a small 6-tape changer with an Allocation Length suited for a 
200-element tape library was resulting in some errors and lockups on the
part of the tape changer device.
- first, last, next, previous are STILL broken. Sorry :-(. 

CHANGES, mtxl 1.2:

- Changed many output messages to make them more easily parsed by
scripts written in awk/perl/python
- Extracted out a library of SCSI tape library routines usable by "C"
programs (must be GPL'ed). Extensive re-arranging of code.
- Added support for multiple drives.
- Started adding support for tape changers that use the "MCHangr" 
bit rather than a separate ID or LUN.
- Increased limits so we could deal with LARGE tape libraries.
- Started adding support for barcode readers in said tape libraries
- broke first, last, next, previous. Sorry :-(. 
- Added ability to chain commands on command line. Thus could say 'mtx -f
/dev/sg4 unload 4 0 load 7 0' to unload a tape from drive 0 and load the
tape in slot 7 into drive 0. 


