2007.228: 2.1.4
	- Include compression history for Steim encodings by tracking the
	last sample value packed for each data stream.  For the first
	record of a stream, a cold-start, the first difference is zero.
	This included the addition of a StreamState struct and associated
	pointers for MSRecord and MSTrace which get allocated during packing
	routines.
	- Do not adjust start time of record header during packing when
	sampling rate is zero or negative.
	- Add ms_hptime2mdtimestr() and ms_btime2mdtimestr routines to
	create time strings in month-day format, this is the same as
	the ISO format without the 'T' between the date and time.
	- Add a 'subsecond' flag argument to all ms_hptime2<string>
	routines to control the addition of sub-second precision.

2007.178: 2.1.3
	- Fix log message bug for unknown encoding format while unpacking,
	this could cause certain systems to segfault if encountered.
	- Rename MS_UNPACKENCODINGFORMATFALLBACK macro to 
	MS_UNPACKENCODINGFALLBACK to match the actual variable name.
	- Fix handling of fallback encoding format in unpack.c, worked
	earlier but had regressed to a broken state.
	- Remove declaration for lmp_strerror() which does not exist.

2007.148: 2.1.2
	- Use calloc instead of malloc to allocate and clear a fsdh_s
        in msr_pack_header_raw() when none is available in the passed
        MSRecord.  Previously this could result in a subtle bug for systems
        where malloc'd memory is not zeroed.  This would only have effected
	programs that were creating Mini-SEED in a particular way.

2007.138: 2.1.1
	- Create LMP_BSD platform definition to cover the BSDs including
	Apple Mac OS X, this replaces LMP_DARWIN.  Specifically FreeBSD,
	OpenBSD, NetBSD and Apple are detected for this platform.

2007.118:
	- Add msr_duplicate() function to duplicate an MSRecord struct.
	- Use msr_duplicate() in example/msrepack.c example program to
	track the most current MSRecord as a template for packing.

2007.102: 2.1
	- Removed caveat comment from mst_groupheal() man page.

2007.083:
	- mst_groupheal() now sorts the MSTraceGroup before it tries to
	heal the traces, this increases the chances of healing all
	possible segments.
	- msr_pack(): add void *handlerdata argument that wil be passed
	directly to the record_handler(), this is intended to allow
	private data to be passed from the msr_repack() caller to the
	record handling routine.
	- mst_pack(): add void *handlerdata argument that is passed
	directly to msr_pack() and used as described above.
	- mst_packgroup(): add void *handlerdata argument that is passed
	directly to mst_pack() and used as described above.
	- Add macros for setting the pack & unpack, header & data byte
	order override variables: MS_PACKHEADERBYTEORDER(X),
	MS_PACKDATABYTEORDER(X), MS_UNPACKHEADERBYTEORDER(X) and
	MS_UNPACKDATABYTEORDER(X).
	- Add macros for setting the unpack encoding format override and 
	encoding format fallback variables: MS_UNPACKENCODINGFORMAT(X)
	and MS_UNPACKENCODINGFORMATFALLBACK(X).
	
2007.074:
	- Fix typos in the docs referring to msr_readtraces() that should
	be ms_readtraces(), thanks Richard Boaz.

2007.034:
	- mst_groupheal(): fix removal of first trace in group.
	- mst_groupheal(): reset MSTrace data quality indicator when
	merged traces do not have matching qualities.

2007.030: 2.0
	- Set no default CFLAGS and CC variables for building and add a
	note to the Makefile about using them for build configuration.
	- Eliminate compiler warning for genutils.c routines.

2007.028:
	- Add new pack file type 8.
	- Allow 'M' as a valid data record indidator/quality flag.

2007.023:
	- Determine needs for GEOSCOPE decoding and remove the need
	for using the pow() function and linking with the math library.

2007.005:
	- Fix resetting of global MSFileParam in ms_readmsr_f() when
	cleanup is requested.

2006.363:
	- Change mst_groupsort() to sort on: srcname, then starttime,
	then descending endtime and finally sample rate.  This moves
	sample rate to the end of the criteria, the previous order was:
	srcname, sample rate, starttime and endtime.

2006.354: 2.0rc1
	- Stamp 2.0rc1.
        - Fix diagnostic printing bug in pack.c.
	- Fix ms_gswap.3 man page.

2006.346:
	- Change "get_" prefix for lookup routines to "ms_".
	- Change ms_encoding() to ms_encodingstr().
	- Document ms_errorstr() in the lookup and other man pages.
	- Document and use ms_log(3) in User Guide/ms_intro(3).

2006.344:
	- Add "ms_" prefix to gswap routines.
	- Change SWAPBTIME macro to MS_SWAPBTIME.

2006.339: 2.0pre8
	- Add buffer length sanity check in ms_find_reclen() suggested by
	Doreen Pahlke.
	- Change mst_printracelist() and mst_printgaplist() to print
	"-0" when the gap is 0 (one sample overlap) and "==" when there
	is no gap.

2006.332:
	- Add memory allocation checks, every allocation is now tested.
	- Fix usage message for example programs, use fprintf for the long
	section of the output.

2006.331: 2.0pre7
	- Add source name to all unpacking error and diagnostic messages.
        - Add source name to all packing error and diagnostic messages.
	- Reorganize sanity check code in msr_unpack() to use the
	MS_ISVALIDHEADER macro.
	- Add ms_recsrcname() function to calculate the source name for 
	an unpacked record.

2006.326: 2.0pre6
	- Add ms_readmsr_r() as a reenentrant, thread safe version of what
	ms_readmsr() used to be and make ms_readmsr() a wrapper for the new
	reentrant version that uses global file reading parameters.
	- Use ms_readmsr_r() in ms_readtraces() so that it's now thread
	safe too.
	- Add logging.c routines and declarations in libmseed.h.  This
	constitutes a new logging facility that is used throughout the
	library and can be used by libmseed based programs.  The facility
	allows the caller to redirect all the log, diagnostic and error
	output from the library to specific functions.  The facility 
	also allows user specifed prefixes for all output messages.

2006.321:
	- Prefix all data encoding type defines with DE_ to avoid collision.
	- Add GEOSCOPE (three subtypes), SRO and DWWSSN data decoders, there
	are no encoders for these types.
	- Need of the pow() function now requires linking with -lm (math lib).

2006.312: 2.0pre5
	- Add MS_ISVALIDBLANK macro to libmseed.h to test memory for valid
	blank/noise records: valid sequence number followed by ASCII spaces.
	- Use MS_ISVALIDBLANK in ms_find_reclen() to implicitly find record
	lengths, when reading ahead the record length can now be determined
	if then next record is a real data record or a blank record.
	- Use MS_ISVALIDBLANK in ms_readmsr() to print out a more specific
	message when skipping blank records as opposed to non-data records
	records.

2006.311: 2.0pre4
	- Use MS_ISVALIDHEADER instead of MS_ISDATAINDICATOR when verifying
	data records when the record length is not autodetected in ms_readmsr().
	- In msr_unpack_data() move the test of reallocation directly after
	the reallocation so it's only tested when actually done.
	- In msr_unpack_data() include text description of encoding in the
	unsupported encoding error message.

2006.296: 2.0pre3
	- Add 'quality' flag argument to mst_srcname() to control the 
	addition of the quality indicator in the srcname.
	- Add 'quality' flag argument to mst_groupsort() to control the
	inclusion of quality indicator in the sorting.

2006.292: 2.0pre2
	- Use memory-aligned swap functions in unpackdata.c for speed.

2006.291:
	- Fix return type of ms_readtraces() on success and documentation.
	- Tweak verbose flag checking in fileutils.c to avoid spurious msgs.
        - Add gcc32gprof and gcc64gprof targets to Makefiles for profiling.

2006.284: 2.0pre
	- Fix dynamic target and update API version in Makefile.
        - Require GCC for shared and dynamic library building.
	- Include ctype.h header in lmplatform.h for WIN32 platform.
	
2006.283:
	- Add function msr_normalize_header() to update the FSDH and
	blockettes with values at the MSRecord level.
	- Add 'normalize' flag argument to msr_pack_header() control the
	calling of msr_normalize_header() when packing.
	- Change the MSRecord element 'private' to 'prvtptr' to avoid 
	collision with the C++ reserved word.
	- Add a 'quality' flag argument to msr_srcname() to control the
	addition of the quality indicator to the srcname.
	- Move MS_ISVALIDHEADER(X) macro to libmseed.h for general use; this
	macro tests for valid SEED data record signatures and is used for
	detection of data records when reading data from files.
	- Remove two redundant tests of swapflag in Steim-1 decompression.
	- Declare starttime in msr_starttime() as hptime_t instead of double,
	testing indicates that this never caused a problem in practice.
	- Update example programs for API changes.
	- Add -fPIC to GCCFLAGS in Makefile.
	- Remove declaration for non-existent ms_verify_header() in libmseed.h
	(thanks LLoyd Carothers).

2006.251:
	- Add correct swapping of fsdh.numsamples and fsdh.data_offset,
	problem and fix reported by Doreen Pahlke (thanks!).  This fixes
	packing of data when packing to a byte-order opposite of the host
	machine.

2006.208: version 1.8
	- Fix memmove bounds for out-of-time-order data additions in both
	mst_addmsr() and mst_addspan().
	- Fix memory leak in mst_pack() by freeing the temporary MSRecord
	when no template is used.
	- Add get_errorstr() function in lookup.c to return text descriptions
	for specified libmseed return/error codes.
	- Add gcc32, gcc32debug and gcc64debug targets to Makefiles.

2006.182: version 1.7
	- Add MS_WRONGLENGTH error code and have msr_unpack() and the
	file reading routines return it when the read length does not match
	length specified in the Blockette 1000.  This most commonly occurs
	when either the specified record length or the length of the first
	record is auto detected and the following record lengths assumed
	do not match the actual records.
	- Use MS_ISRATETOLERABLE macro in mst_groupsort() to compare the
	sampling rates of adjacent trace segments.  This is how sampling
	rates are compared in other routines and will avoid problems
	associated with testing the equality of floating point values.

2006.173:
	- Remove some of the useless error codes.
	- Steim compression integrity check failure and sample count
	mismatch are not fatal unpacking errors, only warnings are printed.

2006.172:
	- Changed return type of ms_readmsr() to int and added a pointer
	to a pointer to an MSRecord to the arguments.  Function now returns
	status/error codes.
	- Changed return type of ms_readtraces() to int and added a pointer
	to a pointer to an MSTraceGroup to the arguments.  Function now
	returns status/error codes.
	- Changed return type of msr_unpack() to int.  Function now
	returns status/error codes.
	- Changes to many internal functions to support the new unpacking
	error code bubble.	
        - Removed the MSRecord.unpackerr element as it is now unneeded.
	- Found and fixed bug resulting in the assumption that all sample
	sizes were 8 bytes (which would usually be wrong) during unpacking.

2006.124: version 1.6.3
	- Fix (int *)packedsamples handling for packing routines.
	- Fix compilation under Open Watcom (Win32).

2006.122: version 1.6.2
	- More fixes for sampling rate == 0 when calculating the sample
	period.

2006.121: version 1.6.1
	- msr_endtime() now checks that the sample count is greater than
	zero.  If the sampling rate or sample count is less than or equal
	to zero msr_endtime() returns the starttime.

2006.115: version 1.6
	- Rename mst_heal() to mst_groupheal().
	- Change examples for ms_readtraces() in documentation that implied
	an incorrect return type.
	- Small changes to error messages for clarity (e.g. add file read
	offset, print sample types as char not int).
	- Fix offset determination for packed files and files without
	blockette 1000s.

2006.107:
	- Add MS_ISVALIDHEADER macro to fileutils.c, verifies that a
	specified buffer contains a valid fixed section data header.
	- ms_find_reclen(): moved to fileutils.c
	- ms_find_reclen(): More data record verification by checking
	for valid time values (e.g. 0 <= hour <= 23 ).
        - ms_find_reclen(): Detect record lengths even when no blockette
	1000 is found by reading the next 48 bytes from the file and
	looking for another record header or EOF.  This check is not
	performed if the specified FILE pointer is NULL.  The original
	file read position is restored.  This required adding another
	argument: FILE *fileptr.
	- Change output of msr_print() to include record length for
	the lowest detail output (single line per record).
	- Change example msview program to autodetect each record by
	default.

2006.082: version 1.5.2
        - Make msr_pack() emit a warning with the function pointer to
	the record_handler() is not set instead of bombing out.  The
	packed record is not accessible any other way.
	- Make the packedsamples argument to msr_pack() optional, the
	pointer can be NULL if this information is not needed.
	- Modify ms_readmsr() to be able to read packed files which are
	indexed files used internally at the IRIS-DMC and probably no
	where else.
	- Add lmp_fseeko() portable function (used in fileutils.c).

2006.079: version 1.5.1
	- Add file name check in ms_readmsr() to make sure subsequent
	reads are done on the same file.  If the function is called with a
	different file name than the file that is currently open the
	current file will be closed and the new one opened and an error
	message printed.
	- Change mst_srcname to include the data quality code in the
	srcname if it is non-zero.
	- Remove the data quality code specifics from mst_print* functions
	as it is now included in the source name.
	
2006.076: version 1.5
	- No changes, just stamp 1.5.

2006.058:
	- Change structure names:
	  * Trace -> MSTrace
	  * TraceGroup -> MSTraceGroup
	  * MSrecord -> MSRecord
	A bothersome change, but it will ease inclusion into source
	base of other libraries, etc.
	- Change struct fsdh.drec_indicator to fsdh.dataquality.
	- Change MSRecord.drec_indicator to MSRecord.dataquality.
	- Add MSTrace.dataquality element.
	- Add data quality matching flag arguments to ms_readtraces()
	and mst_addmsrtogroup() to control matching of data qualities.
	- Add data quality value arguments to mst_findmatch() and
	mst_findadjacent() to control matching of data qualities.
	- Modify mst_printtracelist() and mst_printgaplist() to include
	data quality flags in their output when they have been set.
	
2005.336: 1.4.5
	- Improve the data record verification in ms_find_reclen() to
	improve the detection of non-data versus data records.  In
	particular the routine now requires a record to start with 
	6 ASCII digits followed by a valid data record indicator
	followed by either a space or NULL character (even though
	a NULL here is not valid SEED).
	- Fix mst_groupsort for near srcname matches.

2005.325: 1.4.4
	- Add end time sort level to mst_groupsort(), now the function
	will sort on: source name, sample rate, start time and
	descending end time in that order.

2005.315: 1.4.3
	- Include WIN32 define for strcasecmp->_stricmp.
	- Fix typo in blockette 200 printing.

2005.300: 1.4.2
	- Include sys/types.h for Win32 systems in lmplatform.h and
	do not typedef off_t.

2005.299: 1.4.1
	- In mst_findadjacent() do not perform the time and sample
	rate tolerance checks if the tolerance is specified as -2.0.
	- Remove the msi.c example program, it has diverged from the
	separate released msi.

2005.292: 1.4
	- In mst_addmsr() and mst_addspan() test if data sample
	memory needs to be moved before moving, allows adding an
	msr to a trace which has no data samples (e.g. a flushing
	pack has been done).
	- Do not try to pack Traces with numsamples==0 in
	mst_packgroup().
	
2005.289:
	- Add check for sample count mismatch and decrement
	mst->samplecnt when packing in mst_pack().
	- Free mst->private in mst_init().

2005.271: 1.3
	- Add lmplatform.[ch] to hold platform dependent defines
	and portability routines.
	- Create lmp_ftello() portable routines and use it.
	- Change all uses of fopen() to include a 'b' in the mode
	in order to open files in "binary" mode on Win32.
	- Add Makefile.wat for Open Watcom's wmake.
	- Add Makefile.win for Microsoft's nmake.
	- Test using Open Watcom 1.3 under Win32 (Windows XP).
	- Add 'dynamic' target in Makefile to build a dynamic lib
        on Mac OSX.
 
2005.269: 1.2
	- Update many unpacking routines so that the MS_SAMPMISMATCH
	error code is correctly returned and that none of the errors
	are show stoppers, it is left to the application to decide. 
	- Remove error message when read fails during detection, the
	end of the file is simply that, no error.
	- Fix definition of MS_EPOCH2HPTIME and MS_HPTIME2EPOCH in
	ms_time.3 man page.
	- Change int64_t types to hptime_t types in documentation. 

2005.203: 1.1
	- Add 'chainpos' argument to msr_addblockette() to control
	which end of the blockette chain the blockette is added to.
	- Change msr_pack() to add any missing 1000 Blockettes to
	the end of the blockette chain.

2005.201: 1.0 Final
	- Change version of example programs so they don't conflict
	with future, non-example versions.
	- Generate links to man pages and tar up a source package.
	- No library code changes since pre6.

2005.173: 1.0pre6
	- Set MSrecord->reclen to -1 in msr_init() to trigger
	the default value in msr_pack(), etc.

2005.157: 1.0pre5
	- Fix off-by-one error in number of samples for overlaps.

2005.146: 1.0pre4
	- Add check for an UNPACK_DATA_FORMAT_FALLBACK environment
	variable that defines a fallback format for when no encoding
	format is specified in the data record (no blkt 1000).
	- Set a default format fallback encoding of 10 (Steim 1).
	If this default gets invoked, the byteorder will fallback
	to big-endian if it has not been specified.
	- Change the MS_EPOCH2HPTIME(X) and MS_HPTIME2EPOCH(X)
	macro definitions to not include a semi-colon, duh.
	- Add a 'timeformat' flag to the mst_printtracelist() and
	mst_printgaplist() functions that indicates which format
	the time stamp will be in: SEED time, ISO time or epoch.
	- Add an option to msi to specify the time format in trace
	and gap listings.

2005.117: 1.0pre3
	- Add check for the following environment variable to force
	the data encoding format when unpacking:
	UNPACK_DATA_FORMAT = data encoding format
	- Add '-e' option to msi/msrepack to specify the input data
	encoding format allowing them to work with plain data records.
	- Define _LARGEFILE_SOURCE in fileutils.c to get ftello()
	without a compiler warning on Linux.
	- Fixup swapping when byte order is forced on LE arch.

2005.116: 1.0pre2
	- Add checking for the following environment variables that
	can be used to force the byte-order for the header and data:
	PACK_HEADER_BYTEORDER = 0 or 1
	PACK_DATA_BYTEORDER = 0 or 1
	UNPACK_HEADER_BYTEORDER = 0 or 1
	UNPACK_DATA_BYTEORDER = 0 or 1
	- Change the fpos argument to ms_readmsr() to be type off_t.
	- Change the calls to ftell() in ms_readmsr() to ftello() to
	return type off_t, this is required for large file support
	where 64-bit offsets are needed.
	- Change the header byte order determination to check for
	start years between 1920 and 2020.
	- Add gcc64 target to Makefile and example/Makefile.

2005.102: 1.0pre1
	- Change msr_pack() to use a 'D' record indicator by default.
	- Cleanup examples directory.

2005.097: 0.9.9b
	- Remove '-g' from common GCCFLAGS in examples/Makefile.
	- Small update to ms_time.3 to clarify that MS_HPTIME2EPOCH
	can be used to get both a truncated integer epoch or a
	double precision epoch.

2005.093: 0.9.9a
	- Remove '-g' from common GCCFLAGS in Makefile.

2005.091: 0.9.9
	- Fix printing of Blockette 500.
	- Change macro defines to upper case macro names.
	
2005.080: 0.9.8
	- Add ms_isratetolerable() macro to perform the default
	sample rate tolerance check. Update appropriate functions.
	- Fix sample rate checking in mst_print*() functions.
	- Fix msi example code so negative min/max gaps (overlaps)
	are parsed correctly from command line.

2005.069: 0.9.7
	- Change mst_print() to mst_printtracelist() and add
	mst_printgaplist().
	- Both of the above routines now report gaps as the time
	of the first sample after the gap minus the time of the last
	sample before the gap, sample "coverage" time is no longer
	included.
	- Make mst_groupsort() sort on source->samplerate->starttime
	instead of source->starttime.
	- ms_readmsr() will now skip non-data records when doing
	record length autodetection.
	- Add ms_hptime2epoch() macro to convert hptimes to
	Unix/POSIX epoch times, integer truncation, no rounding.
	- Add macro ms_isdataindicator() which tests a character
	for a valid data record header indicator (D,R,Q,etc.)
	- Example program msi now takes -min and -max options to
	specify min and max gap/overlap to display in gap list.
	
2005.047: 0.9.6
	- Add ms_epoch2hptime() macro to convert Unix/POSIX
	epoch times to hptimes.

2005.025: 0.9.5
	- Add 'skipnotdata' flag argument to ms_readmsr() and
	ms_readtraces() and update their respective man pages.
	- Shuffle order of arguments for ms_readtraces(), no big
	deal but since the interface was changing anyway...

2005.004: 0.9.4
	- Change printing of sample rates to print higher precision
	so that small differences in rates are noticeable.
	- Change fixed section header printing of sample rate to be
	the actual calculated value using the factor and multiplier.
	- Spell check README/INSTALL files and man pages.
	- Remove WIN32 Makefiles and hooks in example sources.
	- Minor printing fixups in the example code msi.c.

2004.352: 0.9.3
	- Change ms_readmsr() to search valid record lengths up
	to 8192 bytes when auto detecting the record size.
	- Change msr_addblockette() to always add Blockette 1000s
	to the beginning of the blockette chain and others to the
	end of the blockette chain.

2004.349:
	- Fix reduction of precision when unpacking doubles.
	- Change typo in pack.c from 'Unpacking' to 'Packing'.
	- Improve printing of float/double samples in msi.

2004.342: 0.9.2
	- Add proper rounding for span calculation in msr_endtime().

2004.341 - Release version 0.9.1
