/-----------------------------------/
/  CDF V3.9.1.0 Release Notes       /
/-----------------------------------/

1. Compatibility with all CDF 3.*, 2.7.6 and earlier versions

CDF V3.9.1 is backward compatible with the previous versions of CDF, and it 
can read CDF files that were created with earlier versions.

If a file was created with CDF 2.7 and read and modified by CDF 3.*, the 
resultant file will be saved in the CDF 2.7 format, not CDF 3.*.  The same 
principle applies to files that were created with CDF 2.5 and 2.6.  CDF 
files that are created from scratch with CDF V3.7.1 are compatible in file
structure with all CDF 3.*, but not compatible (due to a 64-bit file offsets
used since CDF 3.0 versions) with CDF 2.7.2 or earlier, and an attempt to
read CDF 3.* files from CDF 2.7.2 or earlier will produce an error. Since a
couple of new data types were added in V3.4, applications based on V3.3.*
and earlier will not be able access the V3.4 and later files if the files 
have the data of those new types. However, if the files of V3.4 and later do 
not contain data of the new data types, V3.*-based applications should have no 
problems accessing them.   

Users of CDF 3.0 or later versions will be able to create CDF files that 
can be read by CDF 2.7.2 or earlier by using the CDFsetFileBackward function 
(in C) or CDF_set_FileBackward subroutine  (in Fortran), or using the
CDF_FILEBACKWARD environment variable on Unix/Linux (including Mac OS X) or 
PC, or CDF$FILEBACKWARD on OpenVMS.  See Section 4.18 of the CDF C 
Reference Manual and the CDF Fortran Reference Manual for details on how to 
create CDF 2.7-compatible files. Note: There are a few new data types that are
only available in Version 3.1 and later, which can not be used in Version 2.*.

All features added to the previous releases are included. Refer to the release 
notes from the previous versions to view the specific features pertaining
to that release.

2. Changes

The following changes have been made/added in V3.9.1.* and prior versions:

   * Upgraded zlib library to V1.13.
   * Enhanced the compression/decompression functions to have a better 
     performance.
   * Modified the Fortran's use of CDF's Internal Interface to support
     Mac OS on ARM platform.
   * Modified the old K&R style function definitions used in CDF core
     library and tool programs to ANSI style.
   * Modified skeleton table tool programs to properly handle very long
     attribute/variable names.
   * Modified variable compression routines to use more buffers and better
     buffer managhement to avoid using any temporary file(s).
   * Changed the old K&R style function definitions to ANSI style.
   * Modified cache buffer size for Linux/Mac for better performance.
   * Managed the compressed variable's blocking factor to limit its value to
     the allowable cache buffers. 
   * Fixed a bug for the allocated from/to operation for a compressed or
     sparse variable.
   * Moved src/tests directory to cdf_tests directly under the cdf home.  
   * Added support for ARM processor for Apple iOS (silicone) and other 
     platforms.
   * The dynamic memory is no longer placed into a linked list. 
   * Added a couple of attribute entry read/write functions for string in
     expanded standard interface.
   * Allowed characters in UTF-8 encoding to be handled by the CDF.
   * Allowed building fat JNI library from the main CDF build.
   * Modified TT2000 type handling routine in C/Java to accept reverse leap
     second (no 59 second) in the future. 
   * Added Json-CDF converters in Java package. 
   * Enhanced netCDF-to-CDF converter.
   * Added a set of quick read functions/methods: READCDF and READVARIABLE,
     to Java, Perl, C# and IDL interface to read CDF/Variable information in a
     single call.
   * Modified the CDF epoch breakdown functions that might cause incorrect
     day being returned.
   * Added a new option "-advformat" to tool program skeletontable to manage
     how FORMAT attribute is used to encode the data and metadata. This option
     will show data with more precision in the skeleton table. 
   * Modified code to use FILLVAL to fill the missing data if it exists, instead
     of the pad value.
   * String typed variable's pad value will only hold a single space and then
     followed by NULs, instead of all spaces (for the number of elements). 
   * Modified skeletoncdf program to handle skeleton table with hidden character
     carriage-return (\r) made from Windows.  
   * Added a few features to cdfconvert tool program.
   * Added a few features to cdfconvert tool program.
   * Modified skt2cdf to allow processing a skeleton table made in Windows
   * to be used on non-Windows systems.
   * Upgrade the zlib package to V2.1.11, which has code improvements and bug
   * fixed.
   * Added a set of time conversion functions between CDF_EPOCH, CDF_EPOCH16
     and CDF_TIME_TT2000 time and unix time. 
   * Added a new, general set of epoch encoding (toEncodexxxx) and parsing
     toParsexxxx functions (where xxxx is EPOCH, EPOCH16 or TT2000) for each
     of the CDF epoch data type.
   * Expanded the CDF XML schema and allowed special characters used in
     name.
   * Encoded CDF epoch data in ISO8601 format, except skeleton table. 
   * Added ARM port.
   * Added IA64 OpenVMS.
   * Allowed Nul-terminting string data for attribute and variable data.
   * Allowed multi-strings for variable attribute entries.
   * Skip checksum verification if the data validation is turned off.
   * Added cdfj.jar, the pure Java APIs that can read/write CDFs without
     needing the CDF library and JNI.
   * Revised the CDF schema to support new features.
   * For Unix-based systems, "mkstemp" function is used to create the
     temporary file in the template form of "mycdftmp.XXXXXX".
   * For Unix-based systems, if CDF_TEMP is not defined, the temporary files
     are created on the current directory (pwd), if it is writable. Otherwise, 
     environment variable: TMPDIR is used if it is defined. Otherwise, /tmp 
     directory is used.
   * If adding data to a master file to create a new CDF, the leap second last
     updated header field is updated with the information from the leap second
     table if the data is of TT2000 data type.
   * Added a new leap second for 1/1/2017.
   * Added a new set of CDFread functions that will allocate the needed
     space for the user. It is user's responsiblility to free the space after
     use.
   * New features were added in the cdfconvert, cdfdump tool programs.
   * Modified library to space(s) filled string data that has a shorter
     length than the defined (number of elements) while reading/writing.
   * Modified Makefile and installation for Mac OS X El Captain (10.11).
   * Used the preserved system temporary folder, e.g., /tmp for Linux/Unix/MacOSX,
     to hold the temporary file(s).
   * Set temporary file name using the random number generator with process id
     and current time as the seed. 
   * Added support for computing TT2000 from UTC if the passed day is DOY
     (day of the year from January 1st).
   * Added a few options to cdfconvert tool program.
   * Added a new leap second for 2015-07-01 to the leap second table.
   * Added a new field "leapsecondlastupdated" in a CDF's GDR. This records
     the leap second table a CDF is based upon. A set of read/write/validate
     functions for the field is added to the library.
   * Added a new record delete option in the library, which will rearrange
     remaining records for sparse record variables.
   * Skipped checking the given CDF file name for ASCII for reading. Only
     enforce the file name to be ASCII, but not the directory portion, if
     provided, for creating a CDF.
   * Tool cdfconvert has a new option to sort the keyed variable, e.g., Epoch,
     for the output file.
   * Tool cdfconvert has a new option to validate a CDF, including the 
     variable data.
   * A few bugs were fixed.
   * Rename all CDF distributed MATLAB modules, prefixing each with "spdf", to
     differentiate them with the ones come from MATLAB.

Please refer to CHANGES.txt for the detailed code changes in various versions.

3. How to Obtain the Latest Software 

   Go to the CDF home page (http://cdf.gsfc.nasa.gov) and click the
   Download CDF Software link.
   

4. Documentation

The CDF documentation set consists of the following:

        cdf391ug.pdf   (CDF User's Guide)
        cdf391crm.pdf  (CDF C Reference Manual)
        cdf391frm.pdf  (CDF Fortran Reference Manual)
        cdf391prm.pdf  (CDF Perl Reference Manual)
        cdf391jrm.pdf  (CDF Java Reference Manual)
        cdf391csrm.pdf (CDF C# Reference Manual)
        cdf391vbrm.pdf (CDF Visual Basic Reference Manual)
        cdf39ifd.pdf   (CDF Internal Format Description)

These documents are available from the CDF home page (http://cdf.gsfc.nasa.gov).

We have a user support office for CDF that you can contact when you need an
assistance.  For requests, please send emails to:

  Internet -- NASA-CDF-Support@nasa.onmicrosoft.com

Please let us know (via an email to CDFSUPPORT) if you get the distribution.
We would like to know who has the distribution so we know who to contact
when updates are available.

CDFsupport
