May 18, 2006 GHF version 0.59-3: Inserted some function prototypes that were missing in sdf_subs.h, and switched all C++ style comments to C-style comments in sdf_subs.h and sdf_subs.c in an effort to make the source code more portable. Converted expressions using pointer arithmetic on pointers to void variables to pointers to char variables to satisfy SUN compiler. Added entries into Makefile to compile the fortran executable examples xtestf77, xtest_dyn_f95, and xtest_transp_f95. April 28, 2006 GHF version-0.59-2: Found and fixed a bug in sdf_write, in which fopen and fclose calls were not matched. Symptom was a refusal to open the file after about 1000 datasets had been written from a fortran 77 program. Problem appears to be fixed. April 17, 2006 GHF version-0.59-1: Fixed small bugs in rindcalc, cindcalc in which a declaration appeared after an executable stmt, not allowed in version 2.96 of gcc April 13, 2006 GHF Discovered that the atoll (ascii to long long) function doesn't work right on Loraine's MAC laptop (OS 10.3.9, acc. to her). Switched out the atoll call for our own homebrew function, atopos, whose source is now included in this file. Also discovered that on her MAC, need a -s option added to the ar -r command to make the library build correctly. April 6, 2006, GHF version 0.59 Fixed small bug in output_int64 in which last 2 characters in output buffer were being set repeatedly in a loop instead of after the loop. April 6, 2006, GHF Version 0.58: Fixed serious bug in sdf_transpose_f77, in which id->nbpw was not being assigned to *nbpwf77. Fixed serious bugs in IDL versions of sdf_replace and sdf_insert in version 0.54. There was an outer and an inner loop both indexed by i; the inner loop is now indexed by ii. Changed the memcalc function to be named memcalcr (row major), and added a new function memcalcc (assuming column major addressing). Confirmed using tests of sdf_delete and sdf_insert that existing "windows" version of file_truncate in sdf_subs.c correctly changes the sizes of "large" files bigger than the 32-bit 2GB limit, at least on NTFS partitions in Windows XP. Commented out some of the non-error print statements in sdf_read. Replaced Jack Vernetti's version of output_int64 with a simpler version. March 23, 2006, George H. Fisher Major Changes from version 0.52: A new capability to perform a multi-dimensional in-place transpose of a dataset, either after being read in, or before being written out, has been created via the sdf_transpose (C and IDL) and sdf_transpose_f77 (Fortran) functions. The C and fortran callable versions use the vacancy cycle tracking method of Ding (2001) to do the transpose in place, with little additional needed memory; the IDL version just uses the IDL transpose and reverse functions, where the former does apparently introduce a temporary array to do the transpose. March 9, 2006, George H. Fisher Major Changes from version 0.43: A Makefile was created for compiling the sdf software into a library and an executable sdf file browser, sdf_browse. Typing make should create the library libsdf.a and the executable sdf_browse. Becoming root and typing make install will put the library, include file sdf_subs.h, and sdf_browse into the "regular" spots in the /usr/local tree. If you want to put them somewhere else, modify the Makefile. Typing make uninstall should remove these components from the "regular" spots. More details on compiling the code and compiling fortran and C programs that use the sdf library can be found in COMPILING_NOTES.txt. All fortran callable functions now come in all 3 flavors: no trailing underscore, 1 trailing underscore, and 2 trailing underscores. This is necessary to accomodate different fortran compilers, which expect different numbers of trailing underscores, sigh. sdf_read_f77 no longer uses malloc and memcpy to transfer the data into the data space in the fortran calling program. This increases the amount of data which can be read in from a single dataset. The fortran calling program must initially dimension or dynamically allocate enough memory to handle the data being read in. There are new sdf functions, sdf_labmatch and sdf_labmatch_f77 which will find all dataset orders for which the "label" is matched by a user-input string. There is also an IDL version of sdf_labmatch. There are new sdf functions, sdf_details and sdf_details_f77, which return all of the necessary metadata about a chosen dataset (but does not return the data itself). There is also an IDL version of sdf_details . The file truncation functions for both *nix and win32 are now called file_truncate, and are now hopefully both defined in a large-file compliant way. The old method involved the use of chsize in win32, which evidently is not large file compliant. Most of the information for the win32 version was gleaned from newsgroups of people wanting to compile various linux applications for windows, and needing the file i/o to be large file compliant. New IDL-only procedures, sdf_read_all and sdf_write_all, use sdf_read and sdf_write to read all datasets from an sdf file into IDL variables at the "$MAIN$" level in IDL, and to write each variable from that level into an sdf file, respectively. The name of each IDL variable is equal to the "label" field for each dataset. Obviously, this will only work correctly if each dataset has a unique label in a given sdf file. These procedures use the IDL scope_varfetch and execute functions. Also added a new function, sdf_read_var in IDL, which reads a dataset for which the label field matches a user's input label field.