Use isfinite, round modules from gnulib.
[pspp-builds.git] / src / data / ChangeLog
index a59b54f7ae56d773edd4df02ed11e56e125266b5..6f116701363c5c048e2d6b125e27ca85dd142647 100644 (file)
@@ -1,7 +1,938 @@
+2007-11-02  Ben Pfaff  <blp@gnu.org>
+
+       * data-out.c (output_number): Use isfinite (from C99) instead of
+       gsl_isfinite, since we now have universal support for it in
+       gnulib.
+       (output_infinite): Ditto.
+       [!HAVE_ROUND] (round): Remove definition, since we now have a
+       replacement in gnulib.
+
+2007-10-27  John Darrington <john@darrington.wattle.id.au>
+
+       * dictionary.c: Fixed bug in dict_clone, where the vardict.dict member
+       wasn't initialised correctly. Closes bugs #21330 and 21397
+
+
+2007-10-08  Ben Pfaff  <blp@gnu.org>
+
+       Fix bug #21280.  Thanks to John Darrington for review.
+
+       * file-name.c (create_stream): New function.
+
+       * por-file-writer.c (pfm_open_writer): Use fh_open to open the
+       file handle before creating the file, to ensure that we don't
+       truncate a file that we're reading.  Make code easier to read by
+       using create_stream.
+
+       * sys-file-write.c (sfm_open_writer): Ditto.
+
+2007-10-01  Ben Pfaff  <blp@gnu.org>
+
+       Fix bug #21192.  Thanks to John Darrington for review.
+
+       * casereader.c (casereader_read): Decrement case_cnt before
+       calling the casereader's "read" member function, so that we
+       interact properly with lazy_casereader.
+
+       * datasheet.c: Add regression test for above bug fix.
+       (clone_datasheet): New function.
+       (lazy_callback): New function.
+       (check_datasheet_casereader): New function.
+       (check_datasheet): Check datasheet contents are reported correctly
+       through an ordinary casereader and a lazy casereader.
+       (clone_model): Use clone_datasheet.
+
+2007-09-24  Ben Pfaff  <blp@gnu.org>
+
+       Patch #6210.  Reviewed by John Darrington.
+       * settings.c: Drop "long view", which is not needed any longer.
+       (static var long_view): Removed.
+       (force_long_view): Removed.
+       (get_viewwidth): Removed.
+       (init_viewport): Removed long_view reference.
+
+2007-09-19  John Darrington <john@darrington.wattle.id.au>
+       
+       * settings.c settings.h: Changed viewport's length and width to be 
+       owned by the user interface which uses the data library.  This allows
+       better abstraction, and makes dynamically adjustable dimensions easier.
+       
+2007-09-18  Ben Pfaff  <blp@gnu.org>
+
+       * procedure.c (proc_extract_active_file_data): New function.
+
+       * lazy-casereader.h: New file.
+
+       * lazy-casereader.c: New file.
+
+       * casereader.c (casereader_dynamic_cast): New function.
+
+2007-09-14  Ben Pfaff  <blp@gnu.org>
+
+       * dictionary.c (dict_clone): Copy case indexes from cloned
+       dictionary.  Fixes bug #21061.  Reviewed by John Darrington.
+
+2007-09-13  John Darrington <john@darrington.wattle.id.au>
+
+       * value.c value.h (create_value): New function.
+
+2007-09-12  Ben Pfaff  <blp@gnu.org>
+
+       Make it clear that translator casereader and casewriter translate
+       functions are supposed to destroy their input case.
+       
+       * casereader-translator.c (struct casereader_translator): Change
+       input case parameter of translate member function from const
+       struct ccase * to struct ccase *.
+       (casereader_create_translator): Ditto, for translate parameter.
+
+       * casewriter-translator.c (struct casewriter_translator): Ditto.
+       (casewriter_create_translator): Ditto.
+
+2007-08-27  John Darrington <john@darrington.wattle.id.au>
+       
+       * sys-file-reader.c (read_display_parameters): Force display width 
+       to 8, if the sys file says 0 (like SPSS does).
+
+2007-08-12  Ben Pfaff  <blp@gnu.org>
+
+       * dictionary.c (dict_dump): New function.
+
+2007-08-12  Ben Pfaff  <blp@gnu.org>
+
+       Drop dict_compactor in favor of using the new struct case_map.
+
+       * dictionary.c (struct copy_map): Removed.
+       (struct dict_compactor): Removed.
+       (dict_make_compactor): Removed.
+       (dict_compactor_compact): Removed.
+       (dict_compactor_destroy): Removed.
+
+       * procedure.c (struct data_set): Change `compactor' member to be a
+       struct case_map *.
+       (proc_open): Use case_map_to_compact_dict instead of
+       dict_make_compactor.
+       (proc_casereader_read): Use case_map_execute instead of
+       dict_compactor_compact.
+       (proc_commit): Use case_map_destroy instead of
+       dict_compactor_destroy.
+
+       * scratch-writer.c (struct scratch_writer): Change `compactor'
+       member to be a struct case_map *.
+       (scratch_writer_open): Use case_map_to_compact_dict instead of
+       dict_make_compactor.
+       (scratch_writer_casewriter_write): Use case_map_execute instead of
+       dict_compactor_compact.
+
+2007-08-12  Ben Pfaff  <blp@gnu.org>
+
+       * automake.mk: Add case-map.c, case-map.h.
+
+       * case-map.c: New file.
+
+       * case-map.h: New file.
+
+2007-08-12  Ben Pfaff  <blp@gnu.org>
+
+       * dictionary.c (dict_compact_values): Don't delete scratch
+       variables as well as compacting case indexes.  Update all callers.
+       (dict_get_compacted_value_cnt): Rename dict_count_values and
+       change interface.  Update all callers.
+       (dict_get_compacted_value_cnt): Remove.
+       (dict_compacting_would_shrink): Remove.
+       (dict_compacting_would_change): Remove.
+       (dict_make_compactor): Add new parameter.  Update all callers.
+       
+       * procedure.c (proc_casereader_read): Use casewriter_get_value_cnt
+       instead of dict_count_values, changing an O(N) operation into
+       O(1).
+
+2007-08-12  Ben Pfaff  <blp@gnu.org>
+
+       * casereader.c (casereader_read): Don't require cases read by a
+       casereader to be exactly the expected size: as long as they're big
+       enough, it's OK.
+
+2007-08-12  Ben Pfaff  <blp@gnu.org>
+
+       Make casewriters keep track of the number of `union value's in
+       each case.  This is useful for two reasons: casewriter_write can
+       then check that the case being written is large enough, and later
+       recipients of the casewriter can determine the size of the case.
+       
+       * casewriter-translator.c (casewriter_create_translator): Add
+       value_cnt parameter.
+       
+       * casewriter.c (struct casewriter): Add value_cnt member.
+       (casewriter_write): Check that the case passed in is big enough.
+       (casewriter_get_value_cnt): New function.
+       (casewriter_create): Add value_cnt parameter.
+
+2007-08-09  Ben Pfaff  <blp@gnu.org>
+
+       Fix bug reported by Jason Stover.
+       * settings.c: Move get_termcap_viewport and in particular the
+       #include for <curses.h> to the end of the file.  curses.h
+       redefines bool on some systems (e.g. OpenBSD), which causes
+       disagreement between uses of bool before its inclusion and
+       afterward.
+       Tested by Jason Stover.
+
+2007-07-29  Ben Pfaff  <blp@gnu.org>
+
+       Provisional fix for bug #18692 and bug #20161.  Reviewed by John
+       Darrington.
+
+       * file-name.c (fn_open): Only pass "r" or "w" to popen as mode
+       argument (never "rb" or "wb") because SUSv3 says that only those
+       modes are defined, and glibc in fact rejects other modes.
+
+       Open portable files with fn_open so that they can be read from
+       pipes.  Fix missing fh_close call to go along with fh_open.
+       Report an error if the file close reports an error.
+       * por-file-reader.c (close_reader): New function.
+       (por_file_casereader_destroy): Use close_reader.
+       (pfm_open_reader): Open file with fn_open.
+
+2007-07-28  Ben Pfaff  <blp@gnu.org>
+
+       Make PSPP able to read all the portable files I could find on the
+       web.  Thanks to John Darrington for review.  Bug #17620.
+       * por-file-reader.c (struct pfm_reader): New member `line_length'.
+       (error): Print file offset in hexadecimal.
+       (warning): New function.
+       (advance): Treat lines less than 80 bytes long as padded to 80
+       bytes with spaces.
+       (pfm_open_reader): Call read_documents if we find an "E" record.
+       (convert_format): Convert invalid formats to the default format
+       instead of aborting reading the file.
+       (read_variables): Rename duplicate variable names instead of
+       aborting reading the file.
+       (read_value_label): Allow string variables of different widths to
+       be assigned value labels in the same record.  Replace duplicate
+       value labels instead of aborting.
+       (read_documents): New function.
+
+       * por-file-writer.c (pfm_open_writer): Call write_documents if the
+       dictionary has documents.
+       (write_documents): New function.
+
+2007-07-25  Ben Pfaff  <blp@gnu.org>
+
+       Fix bugs related to bug #17213.
+
+       * settings.c: Use HAVE_LIBNCURSES instead of HAVE_LIBTERMCAP,
+       since the former is what config.h has.  Include the needed ncurses
+       headers.
+       (static var echo) Rename to `do_echo' because the original name is
+       the same as an ncurses identifier.
+       (get_termcap_viewport) Use error instead of msg.
+
+       * file-name.c (fn_interp_vars): Fix interpolation of $VARS.
+       (fn_close): Don't close stdin, stdout, stderr.
+
+2007-07-26 John Darrington <john@darrington.wattle.id.au>
+
+       * procedure.c procedure.h: Added callbacks which get invoked whenever 
+       a dataset's transformation chain changes.
+
+2007-07-24  Ben Pfaff  <blp@gnu.org>
+
+       Fix bug #6113.
+       * sys-file-writer.c (write_variable_display_parameters): Use new
+       var_default_display_width function to choose display width of
+       segments after the first one in a given variable.
+       * variable.c (var_create): Use var_default_display_width to pick
+       new variable's display width.
+       (var_default_display_width): New function.
+       Reviewed by John Darrington.
+
+2007-07-24  Ben Pfaff  <blp@gnu.org>
+
+       Fix bug #20427.
+       * por-file-writer.c (write_variables): Write weight variable.
+       Reviewed by John Darrington.
+
+2007-07-23  Ben Pfaff  <blp@gnu.org>
+
+       Improvements to system file reader and writer.
+       
+        First, move all detailed knowledge of very long strings into
+       sys-file-private.[ch], so that this nasty stuff can be isolated.
+
+       * sys-file-private.c (REAL_VLS_CHUNK): New macro.
+       (EFFECTIVE_VLS_CHUNK): New macro.
+       (min_int): New function.
+       (max_int): New function.
+       (sfm_width_to_bytes): Rewrite.
+       (sfm_width_to_octs): New function.
+       (sfm_segment_alloc_width): New function.
+       (sfm_segment_alloc_bytes): New function.
+       (sfm_segment_used_bytes): New function.
+       (sfm_segment_offset): New function.
+       (sfm_segment_effective_offset): New function.
+       (sfm_dictionary_to_sfm_vars): New function.
+
+       * sys-file-private.h (MIN_VERY_LONG_STRING): Removed.
+       (EFFECTIVE_LONG_STRING_LENGTH): Removed.
+       (struct sfm_var): New structure.
+
+        Next, improvements to the system file reader.
+
+       * sys-file-reader.h (struct sfm_read_info): Changed `case_cnt' to
+       type casenumber.  Added `version_major', `version_minor',
+       `version_revision'.
+
+       * sys-file-reader.c (struct sfm_reader): Replaced `flt64_cnt' by
+       `oct_cnt'.  Rename `vars', `var_cnt' to `sfm_vars', `sfm_var_cnt'.
+       Change `case_cnt' to type casenumber.  Removed `has_vls'.
+       (struct sfm_var): Removed.
+       (sfm_open_reader): Don't warn on wrong case size if the file was
+       written by SPSS 13, which tends to get it wrong.  Use
+       sfm_dictionary_to_sfm_vars.
+       (read_header): Always output system file info.
+       (read_variable_record): Simplify code for reading missing values.
+       (read_machine_int32_info): Save version numbers from system file
+       into info struct passed as new argument.
+       (read_long_string_map): Restructured to use new sys-file-private
+       functions.
+       (read_value_labels): Use size_overflow_p.
+       (sys_file_casereader_read): Get rid of distinction between fast
+       and slow paths.  Use information provided by sys-file-primate's
+       struct sfm_var to simplify code.
+       (skip_whole_strings): New function.
+       (read_int32): Renamed read_int.  Changed return value to int.
+       Updated all callers.
+       (read_flt64): Renamed read_float.  Changed return value to
+       double.  Updated all callers.
+       (int32_to_native): Removed.  Changed callers to use
+       integer_convert.
+       (flt64_to_double): Removed.  Changed callers to use float_convert.
+       
+        Finally, get rid of int32, flt64 terminology and types in system
+       file writer.  The former wasn't very useful since a POSIX "int"
+       can hold the whole range of int32 and we generally didn't have a
+       need for it to be exactly-32-bits, just at-least-32-bits.  The
+       latter was inconvenient because we had to assume that it could be
+       different from double and thereby convert special values SYSMIS,
+       HIGHEST, LOWEST to and from it in multiple places.  Instead, now
+       we just use "int" and "double" in most places, and do conversions,
+       if necessary, very close to where we do I/O.  This change meant
+       that the writer code couldn't represent records in the file as C
+       structs any longer, but that's no great loss.  The code actually
+       seems to be more readable without them.
+
+       Simplify the compression buffering code: only buffer as much as
+       necessary, which is no more than eight 8-byte units at any given
+       time.
+
+       * sys-file-writer.c (typedef flt64): Removed.
+       (macro second_lowest_flt64): Removed.
+       (struct sysfile_header): Removed.
+       (struct sysfile_variable): Removed.
+       (struct sfm_writer): Removed `needs_translation', `has_vls',
+       `flt64_cnt'.  Changed `compress' to type bool and `case_cnt' to
+       type casenumber.  Renamed `vars' to `sfm_vars', `var_cnt' to
+       `sfm_var_cnt'.  Replaced `buf', `end', `ptr', `x', `y' for
+       compression buffering by `opcodes', `opcode_cnt', `data',
+       `data_cnt'.  Renamed `var_cnt_vls' as `segment_cnt'.
+       (sfm_open_writer): Use sfm_dictionary_to_sfm_vars.  Use simple
+       data writer functions instead of structures.
+       (calc_oct_idx): New function.
+       (write_header): Use simple data writer functions instead of
+       structures.
+       (write_format_spec): Renamed write_format.  New argument.
+       (write_variable_continuation_records): New function.
+       (write_variable): Use simple data writer functions instead of
+       structures.  Use write_variable_continuation_records.  Write
+       entire very long string instead of requiring caller to understand
+       them.
+       (write_value_labels): Use simple data writer functions instead of
+       structures.
+       (write_documents): Ditto.
+       (write_variable_display_parameters): Use sys-file-private
+       functions to simplify.  Use simple data writer functions instead
+       of structures.
+       (write_vls_length_table): Use simple data writer functions instead
+       of structures.
+       (write_longvar_table): Ditto.
+       (write_rec_7_34): Break into new functions
+       write_integer_info_record, write_float_info_record.  Use simple
+       data writer functions instead of structures.
+       (buf_write): Removed.
+       (append_string_max): Removed.
+       (ensure_buf_space): Removed.
+       (sys_file_casewriter_write): Get rid of the distinction between
+       fast and slow paths, which didn't seem to be too useful.  Use new
+       functions write_case_uncompressed, write_case_compressed.
+       (put_instruction): Removed.
+       (put_element): Removed.
+       (write_compressed_data): Removed.
+       (close_writer): Use flush_compressed.  Only write case count to
+       system file if it will fit in the field.
+       (write_case_compressed): New function.
+       (write_case_uncompressed): New function.
+       (flush_compressed): New function.
+       (put_cmp_opcode): New function.
+       (put_cmp_number): New function.
+       (write_int): New function.
+       (convert_double_to_output_format): New function.
+       (write_float): New function.
+       (write_value): New function.
+       (write_string): New function.
+       (write_bytes): New function.
+       (write_zeros): New function.
+       (write_spaces): New function.
+
+       Reviewed by John Darrington.
+
+2007-07-22  Ben Pfaff  <blp@gnu.org>
+
+       Don't try to write very long strings to portable files.  The
+       format does not support it.
+
+       * por-file-writer.c (MAX_POR_WIDTH): New macro.
+       (pfm_open_writer): Limit output width to MAX_POR_WIDTH.
+       (write_format): Add arg to take width to resize format to.
+       (write_value): Limit width of value written to MAX_POR_WIDTH.
+       (write_variables): Limit width of variable and its output formats
+       to MAX_POR_WIDTH.
+       Reviewed by John Darrington.
+
+2007-07-22  Ben Pfaff  <blp@gnu.org>
+
+       * sys-file-reader.c (read_variable_to_value_map): Use max_warnings
+       local variable instead of literal 5.
+       Reviewed by John Darrington.
+       
+2007-07-22  Ben Pfaff  <blp@gnu.org>
+
+       Fix problems with uniqueness of short names in system files with
+       very long string variables.  Now a variable may have multiple
+       short names.
+       
+       * automake.mk (src_data_libdata_a_SOURCES): Add new files
+       short-names.c, short-names.h.
+
+       * dictionary.c (dict_clone): Clone all the short names.
+       (compare_strings): Move into short-names.c.
+       (hash_strings): Ditto.
+       (set_var_short_name_suffix): Ditto.
+       (dict_assign_short_names): Ditto, rename short_names_assign,
+       change to assign all short names.
+       
+       * por-file-writer.c (write_variables): Use short_names_assign
+       instead of dict_assign_short_names.
+
+       * short-names.c: New file.
+
+       * short-names.h: New file.
+
+       * sys-file-private.c (sfm_width_to_segments): New function.
+
+       * sys-file-reader.c (read_long_var_name_map): Save and restore all
+       the short names, not just the first one.
+       
+       * sys-file-writer.c (cont_var_name): Removed.
+       (sfm_open_writer): Use short_names_assign instead of
+       dict_assign_short_names.  Use unique short names assigned by
+       short_names_assign instead of those generated by cont_var_name.
+
+       * variable.c (struct variable): Remove `short_name' member,
+       replace by `short_names' and `short_name_cnt'.
+       (var_create) Initialize new members.
+       (var_get_short_name_cnt): New function.
+       (var_get_short_name): Now takes an index argument.  Changed most
+       callers to pass 0.
+       (var_set_short_name): Ditto.
+       (var_clear_short_name): Renamed var_clear_short_names, changed to
+       clear all short names.
+       
+       Reviewed by John Darrington.
+
+2007-07-22  Ben Pfaff  <blp@gnu.org>
+
+       * variable.c (var_set_width): Use new var_set_width function.
+
+       * missing-values.c (mv_n_values): Drop assertion, which was not
+       needed.
+
+       * format.c (fmt_default_for_width): New function.
+       (fmt_resize): New function.
+
+       Reviewed by John Darrington.
+
+2007-07-18 John Darrington <john@darrington.wattle.id.au>
+
+       * datasheet.c (datasheet_delete_columns): Added assertion to check
+       we're not deleting outside the range of the sheet.  
+
+       
+       * dictionary.c dictionary.h variable.c: Added the ability for string
+       variables to be resized.
+       
+       * vardict.h: Added some prototypes (moved from dictionary.h) as
+       these should only be called by variable.c
+
+
+2007-07-14 John Darrington <john@darrington.wattle.id.au>
+
+       * sfm-reader.c: Respect case_cnt field in file header.
+
+2007-07-01 John Darrington <john@darrington.wattle.id.au>
+
+       * transformation.c transformation.h (trns_chain_execute): Changed the 
+       signature (Patch #6057)
+
+2007-06-10  Ben Pfaff  <blp@gnu.org>
+
+       * casereader-filter.c (casereader_filter_destroy): Make sure to
+       write all the remaining excluded cases to the casewriter, if any.
+
+       * caseinit.c (init_list_destroy): Rewrite.
+       (init_list_clear): Ditto.
+
+       * casegrouper.c (casegrouper_get_next_group): Always set *reader
+       to null when returning false.
+
+2007-06-06  Ben Pfaff  <blp@gnu.org>
+
+       Actually implement the new procedure code and adapt all of its
+       clients to match.  Also adapt all of the other case sources and
+       sinks in the tree and their clients to use the
+       casereader/casewriter infrastructure.
+
+       * automake.mk: Add and remove files.
+
+       * any-reader.c: Change into a casereader.
+       * por-file-reader.c: Ditto.
+       * scratch-reader.c: Ditto.
+       * sys-file-reader.c: Ditto.
+
+       * any-writer.c: Change into a casewriter.
+       * por-file-writer.c: Ditto.
+       * scratch-writer.c: Ditto.
+       * sys-file-writer.c: Ditto.
+
+       * procedure.c: Change to use casereader, casewriter, caseinit, and
+       other new infrastructure.
+
+       * scratch-handle.c: Adapt to new infrastructure.
+
+       * case-sink.c: Removed, now dead code.
+       * case-sink.h: Ditto.
+       * case-source.c: Ditto.
+       * case-source.h: Ditto.
+       * casefile-factory.c: Ditto.
+       * casefile-private.h: Ditto.
+       * casefile.c: Ditto.
+       * casefile.h: Ditto.
+       * casefilter.c: Ditto.
+       * casefilter.h: Ditto.
+       * fastfile.c: Ditto.
+       * fastfile.h: Ditto.
+       * fastfile-factory.c: Ditto.
+       * fastfile-factory.h: Ditto.
+       * storage-stream.c: Ditto.
+       * storage-stream.h: Ditto.
+
+2007-06-06  Ben Pfaff  <blp@gnu.org>
+
+       Add datasheet code.
+
+       * automake.mk: Add new files.
+
+       * datasheet.c: New file.
+
+       * datasheet.h: New file.
+
+2007-06-06  Ben Pfaff  <blp@gnu.org>
+
+       Until now, the procedure code has provided a case to the
+       case_source, which has filled in the data values that come from
+       the active file.  "Left" data values that don't come from the
+       active file naturally stay the same from case to case, because the
+       procedure code keeps using that same case.
+
+       One of the compromises that comes with the new procedure code is
+       that the active file allocates and provides its own case, which
+       the procedure code then has to resize to provide room for any
+       other variables that should go in the case and then fill in the
+       values of "left" variables.  Then, when we're done with that case,
+       we have to save the values of "left" variables to copy into the
+       next case read from the active file.
+
+       The caseinit code helps with this.
+
+       * automake.mk: Add new files.
+
+       * caseinit.c: New file. 
+
+       * caseinit.h: New file. 
+
+2007-06-06  Ben Pfaff  <blp@gnu.org>
+
+       * value.h (value_cnt_from_width): New function.
+
+       * variable.c (var_get_value_cnt): Use new function.
+
+2007-06-06  Ben Pfaff  <blp@gnu.org>
+
+       Add casegrouper, to allow cases read from a given casereader to be
+       broken into groups, each of which has its own casereader.
+       Generally cases are grouped based on having equal values for some
+       set of variables.
+
+       * automake.mk: Add new files.
+
+       * casegrouper.c: New file.
+
+       * casegrouper.h: New file.
+
+2007-06-06  Ben Pfaff  <blp@gnu.org>
+
+       Add interface to lexicographical ordering of cases.
+
+       * automake.mk: Add new files.
+
+       * case-ordering.c: New file.
+
+       * case-ordering.h: New file.
+
+2007-06-06  Ben Pfaff  <blp@gnu.org>
+
+       Add casereaders and casewriters, the basis of the new data processing
+       implementation.  A casereader is a uniform interface to reading cases
+       from a data source; a casewriter is a uniform interface to writing
+       cases to a data sink.
+
+       * automake.mk: Add new files.
+       
+       * casereader-filter.c: New file.
+       
+       * casereader-provider.h: New file.
+
+       * casereader-translator.c: New file.
+       
+       * casereader.c: New file.
+       
+       * casereader.h: New file.
+       
+       * casewriter-provider.h: New file.
+       
+       * casewriter-translator.c: New file.
+       
+       * casewriter.c: New file.
+       
+       * casewriter.h: New file.
+
+2007-06-06  Ben Pfaff  <blp@gnu.org>
+
+       "casewindow" data structure that extends the deque (from libpspp)
+       of cases with the ability to dump cases to disk if we get too many
+       of them in memory.
+
+       * automake.mk: Add new files.
+
+       * casewindow.c: New file.
+
+       * casewindow.h: New file.
+
+2007-06-06  Ben Pfaff  <blp@gnu.org>
+
+       sparse_cases data structure that augments a sparse_array of cases
+       with the ability to dump cases to disk if we get too many cases in
+       memory.
+
+       * automake.mk: Add new files.
+
+       * sparse-cases.c: New file.
+
+       * sparse-cases.h: New file.
+
+2007-06-06  Ben Pfaff  <blp@gnu.org>
+
+       Adds a low-level on-disk case array data structure.
+       
+       * automake.mk: Add new files.
+
+       * case-tmpfile.c: New file.
+
+       * case-tmpfile.h: New file.
+
+2007-06-06  Ben Pfaff  <blp@gnu.org>
+
+       In a couple of places we calculate the maximum number of cases to
+       keep in memory based on the user-defined workspace.  Enable
+       centralizing the calculation through a new function.
+       
+       * settings.c (get_workspace_cases): New function.
+
+2007-06-06  Ben Pfaff  <blp@gnu.org>
+
+       The casenumber type is defined in transformations.h, but case.h is
+       a more sensible place.  Move it.
+
+       * case.h (CASENUMBER_MAX): New macro.
+       (typedef casenumber): Move here, from transformations.h.
+
+2007-06-03  Ben Pfaff  <blp@gnu.org>
+
+       Slightly generalize case_to_values and case_from_values functions.
+
+       * case.c (case_to_values): Rename case_copy_out, change interface.
+       (case_from_values): Rename case_copy_in, change interface.
+
+       * fastfile.c (fastfilereader_get_next_case): Update caller.
+       (write_case_to_disk): Ditto.
+
+2007-06-02  Ben Pfaff  <blp@gnu.org>
+
+       Clean up after a forgotten part of patch #5829.
+       
+       * casedeque.h: Remove unused file.
+
+       * automake.mk: Remove casedeque.h from sources.
+
+2007-05-10  Jason Stover  <jhs@math.gcsu.edu>
+
+       * category.c: Removed redundant #include
+
+2007-05-06  Ben Pfaff  <blp@gnu.org>
+
+       Abstract the documents within a dictionary a little better.
+       Thanks to John Darrington for suggestion, initial version, and
+       review.  Patch #5917.
+
+       * dictionary.c (struct dictionary): Change `documents' member from
+       char * to struct string.
+       (dict_clear): Destroy struct string.
+       (dict_get_documents): Convert struct string to char *.
+       (dict_set_documents): Set struct string.  Pad to 80-character
+       multiple.
+       (dict_clear_documents): New function.
+       (dict_add_document_line): New function.
+       (dict_get_document_line_cnt): New function.
+       (dict_get_document_line): New function.
+
+       * dictionary.h (macro DOC_LINE_LENGTH): New macro.
+
+       * sys-file-reader.c (read_documents): Use new document functions.
+
+2007-04-19 John Darrington <john@darrington.wattle.id.au>
+
+       * sys-file-reader.c: When reading a system file which has no 
+       long name table, automatically create one where the long names 
+       are the lower case versions of the short names.
+       
+2007-04-22  Ben Pfaff  <blp@gnu.org>
+
+       * dictionary.c (dict_set_split_vars): dict_destroy expects that
+       dict_clear will free most data related to the dictionary.
+       dict_clear does a decent job, except that dict_set_split_vars on
+       some systems won't actually free the dict's "split" member.
+       Instead, it'll allocate a 1-byte region.  Fix this.
+
+       * value.c (value_copy): New function.
+       (value_set_missing): Ditto.
+
+2007-04-22 John Darrington <john@darrington.wattle.id.au>
+
+       * Deleted existing category.h and moved cat-routines.h into 
+       category.h  Encapsulated struct cat_vals better.
+
+2007-04-19 John Darrington <john@darrington.wattle.id.au>
+
+       * sys-file-reader.c: When reading a system file which has no 
+       long name table, automatically create one where the long names 
+       are the lower case versions of the short names.
+       
+2007-04-16 John Darrington <john@darrington.wattle.id.au>
+
+       * sys-file-reader.c: Some versions of Other Software seem to 
+        produce system files with string  variables' measure set to 
+       zero.  We'll assume these are supposed to be nominal variables.
+
+2007-03-30  Ben Pfaff  <blp@gnu.org>
+
+       * procedure.c: Adapt to new deque data structure.
+
+Mon Feb 19 10:53:21 2007  John McCabe-Dansted <gmatht@gmail.com>
+                         Ben Pfaff <blp@gnu.org>
+
+       * file-name.c: Mingw compatibility fixes.
+       (fn_search_path): Use ISSLASH instead of comparing against '/'
+       directly.
+       (fn_dir_name): Use dir_name from gnulib.
+       (fn_is_absolute): Use IS_ABSOLUTE_FILE_NAME from gnulib.
+       (fn_get_identity): Use GetFullPathName instead of canonicalize
+       from gnulib, because the latter does not fully support
+       Windows-style path names.  Use this implementation based on the
+       detected presence of Windows instead of the absence of Unix, since
+       the new implementation is Windows-specific.
+       (fn_compare_file_identities): In Windows implementation, compare
+       names case-insensitively.
+
+Sun Feb 18 13:28:02 2007  Ben Pfaff  <blp@gnu.org>
+
+       * make-file.c: Don't include mkstemp.h, because gnulib now causes
+       <stdlib.h> to have the same effect.
+
+Sun Feb 18 11:20:24 2007  Ben Pfaff  <blp@gnu.org>
+
+       * por-file-reader.c: Add missing _() around messages.
+
+Sun Feb 11 20:44:13 2007  Ben Pfaff  <blp@gnu.org>
+
+       * make-file.c: Include "mkstemp.h", without which linking on
+       mingw32 fails.
+
+Thu Feb  8 14:59:05 2007  Ben Pfaff  <blp@gnu.org>
+       Reduce platform dependence.
+       * file-name.c (fn_tilde_expand): Removed, and removed calls to it.
+       Everywhere we using this, we really should have just depended on
+       the shell to expand tildes.
+       (fn_search_path): Simplify, given that we don't do tilde expansion
+       any longer.
+       (fn_normalize): Removed.  Caller changed to use the canonicalize
+       module from gnulib.
+       (fn_get_cwd): Removed.  Only user was fn_normalize.
+       (fn_is_absolute): Really only test for absolute names.
+       (fn_is_special): Use pipe files if HAVE_POPEN, not if we're in
+       unix.
+       (fn_readlink): Removed, as it was only used fn_normalize.
+       (fn_exists): Assume the stat function is available; gnulib does.
+       (fn_open): Use pipe files if HAVE_POPEN, not if we're in unix.
+Sat Feb  3 21:52:17 2007  Ben Pfaff  <blp@gnu.org>
+
+       * dictionary.c (dict_create_vector_assert): New function.
+
+Wed Feb  7 21:25:15 2007  Ben Pfaff  <blp@gnu.org>
+
+       * file-name.c (fn_normalize): Correct name of function
+       fn_is_special.  Thanks to John McCabe-Dansted <gmatht@gmail.com>
+       for pointing this out.
+
+Thu Feb  1 16:53:37 2007  Ben Pfaff  <blp@gnu.org>
+
+       We are using a single member in struct file_handle, the "name"
+       field, for more than one purpose.  When it begins with '"', it's a
+       file name; otherwise, it's a token that can be used to identify
+       it.  When that assertion fires, it's because we searched for the
+       name case-sensitively as a file name (so that there was no match),
+       and then we try to insert it case-insensitively as a token, which
+       fails because duplicates aren't allowed.
+
+       Solution: break the two purposes into two separate fields.  This
+       fixes the problem and likely makes the code easier to read too.
+
+       Fixes bug #18922.  Thanks to John Darrington for bug report and
+       review.
+
+       * file-handle-def.c (struct file_handle): New `id' member.
+       (fh_from_name): Rename fh_from_id.  Update all callers.
+       (create_handle): New `id' parameter.  Update all callers.
+       (fh_create_file): Ditto.
+       (fh_get_id): New function.
+
+Mon Jan 15 16:18:10 2007  Ben Pfaff  <blp@gnu.org>
+
+       * case.c (case_is_null): Change return type to bool.
+
+Mon Jan 15 10:57:28 2007  Ben Pfaff  <blp@gnu.org>
+
+       Add debugging code.
+       
+       * case.c (case_clone) [DEBUGGING]: When debugging, don't use
+       reference counting to share data.  This makes it easy for
+       valgrind, etc. to find accesses to cases that have been destroyed
+       but have been kept around by another user's ref-count.  This often
+       happens when the data set is small enough to find in memory; if a
+       bigger data set that would overflow to disk were used, then data
+       corruption would occur.
+
+Mon Jan 15 10:55:18 2007  Ben Pfaff  <blp@gnu.org>
+
+       Simplify code.
+
+       * case.c (case_unshare): Make it check internally whether the
+       ref_cnt is greater than 1, so that the callers don't have to.
+       Update callers not to check.
+
+Mon Jan 15 10:53:01 2007  Ben Pfaff  <blp@gnu.org>
+
+       Before, I was thinking that I might want to get rid of reference
+       counting at some point.  Now, I'm pretty sure that it's here to
+       stay.  Thus, because we have to store the value_cnt anyway for
+       reference-counted cases, we might as well expose it to users.
+
+       * case.c (case_get_value_cnt): New function.
+       (case_resize): Drop OLD_CNT argument.  Update all callers.  Only
+       resize case if its size actually changed.
+
+       * casefile.c (casefile_append_xfer): Use case_get_value_cnt
+       instead of peeking inside struct case directly.
+       (casefile_append): Ditto.
+
+Mon Jan 15 10:50:22 2007  Ben Pfaff  <blp@gnu.org>
+
+       Get rid of the inlines for the case functions, which made the
+       header file hard to read.  (Also, in testing with "-O2 -DNDEBUG",
+       the inlines didn't speed up "make check" at all, which is not a
+       perfect benchmark but seems indicative.)
+       
+       * case.c: Remove #ifdef DEBUGGING...#endif around many function
+       definitions.  Remove some assertions on nonnull pointers that were
+       redundant with a pointer dereference soon after in the function.
+       Also:
+       (struct case_data): Move definition here from case.h.
+       (case_data): Ditto.
+       (case_num): Ditto.
+       (case_str): Ditto.
+       (case_data_wr): Ditto.
+       
+Sun Jan 14 21:41:12 2007  Ben Pfaff  <blp@gnu.org>
+
+       * automake.mk: Add casedeque.h to sources.
+       
+       * casedeque.h: New file.
+
+       * procedure.c: (struct dataset) Change lag_count, lag_head,
+       lag_queue member into single struct casedeque member.  Update all
+       users to use the casedeque instead.
+       (lag_case) Removed.
+
+Sun Jan 14 21:43:12 2007  Ben Pfaff  <blp@gnu.org>
+
+       * procedure.c: Simplify lagged cases interface.  Updated all
+       clients--well, the only client--to use the simplified interface.
+       (dataset_n_lag) Removed.
+       (dataset_set_n_lag) Removed.
+       (dataset_need_lag) New function.
+
+Tue Jan  9 07:20:05 WST 2007 John Darrington <john@darrington.wattle.id.au>
+
+       * dictionary.c procedure.c: More changes to ensure that callbacks occur
+       whenever appropriate, but only when the dataset/dictionary is in a 
+       consistent state.
+
+Sun Jan  7 08:33:04 WST 2007 John Darrington <john@darrington.wattle.id.au>
+
+       * dictionary.c dictionary.h : Added callbacks for change of filter and 
+       split variables.  Refactored some code to ensure that callbacks get
+       invoked when appropriate.
+
+       * procedure.c (proc_cancel_temporary_transformations): Make sure that 
+       replace_dict callback occurs when permanent_dict replaces the current
+       dictionary.
+
 Wed Jan  3 11:02:11 WST 2007 John Darrington <john@darrington.wattle.id.au>
 
-       * dictionary.c dictionary.h : Added callback for when the weight variable
-       of a dictionary changes.
+       * dictionary.c dictionary.h : Added callback for when the weight 
+       variable of a dictionary changes.
 
 Mon Jan  1 10:36:26 WST 2007 John Darrington <john@darrington.wattle.id.au>