Implement DATESUM, DATEDIFF functions.
[pspp-builds.git] / src / data / ChangeLog
index cefd144705d92b0c5c021e23505f26bc3cd0441d..e88749621d7193141dc1f7031eff29a581617c6f 100644 (file)
@@ -1,3 +1,985 @@
+Wed Dec 13 19:30:11 2006  Ben Pfaff  <blp@gnu.org>
+
+       * calendar.c (calendar_days_in_month): New function.
+
+Mon Dec 11 07:53:39 2006  Ben Pfaff  <blp@gnu.org>
+
+       * value-labels.c (hash_int_val_lab): Only hash as many bytes as
+       the value label's width.
+
+Sun Dec 10 14:21:29 2006  Ben Pfaff  <blp@gnu.org>
+
+       * sfm-private.h: Move contents into sys-file-writer.c, which is
+       the only remaining user.  Removed Borland C++-specific directives.
+       
+       * sys-file-reader.c: Clean up and rewrite entire file.  The
+       rewritten version is simpler and better abstracted, and should be
+       easier to maintain and extend.  It avoids using structures to read
+       file data, which is prone to padding variations among compilers.
+       It should also handle non-IEEE 754 system files, although I
+       haven't been able to find any.  It has been tested against many
+       .sav files obtained from the Web and found to produce the same
+       results as the earlier version of the code, or in some cases
+       improved results.  It is more tolerant of format variations found
+       in the wild.
+
+       * sys-file-reader.h (struct sfm_read_info): Removed `big_endian'
+       member, putting an enum integer_format in its place.  New member
+       `float_format'.  Changed `compressed' member to type bool.
+
+Sun Dec 10 13:48:53 2006  Ben Pfaff  <blp@gnu.org>
+
+       * dictionary.c (dict_delete_consecutive_vars): New function.
+
+Sat Dec  9 20:08:25 2006  Ben Pfaff  <blp@gnu.org>
+
+       * file-name.c (fn_search_path): Remove prefix arg that was unused
+       by any caller.  Updated all callers.
+
+Sat Dec  9 20:04:22 2006  Ben Pfaff  <blp@gnu.org>
+
+       * format.c (fmt_dollar_template): Use user's decimal point
+       character.  Add assertion.
+
+Sat Dec  9 20:02:25 2006  Ben Pfaff  <blp@gnu.org>
+
+       * format.c (fmt_dollar_template): New function, based on
+       dollar_format_template from var-type-dialog.c.
+
+Sat Dec  9 18:05:59 2006  Ben Pfaff  <blp@gnu.org>
+
+       * data-out.c (output_scientific): Fix bad assumption that "buf" is
+       null-terminated.
+       
+Sat Dec  9 17:23:23 2006  Ben Pfaff  <blp@gnu.org>
+
+       Finish converting struct variable to an opaque type.  In this
+       phase, we add remaining setter and getter functions, convert the
+       remaining PSPP code to use them, and do a bunch of cleanup.  The
+       resulting changes are pervasive but mostly trivial, and only the
+       notable changes are logged.
+       
+       * automake.mk (src_data_libdata_a_SOURCES): Add the new source
+       files.
+       
+       * case.c (case_data): Renamed case_data_idx.
+       (case_num): Renamed case_num_idx.
+       (case_str): Renamed case_str_idx.
+       (case_data_rw): Renamed case_data_rw_idx.
+
+       * case.h (case_data): New function with old name and an interface
+       that takes a variable instead of an index, which is easier to
+       use.  Updated all callers to use the new interface, or to use the
+       new *_idx function (see above).
+       (case_num): Ditto.
+       (case_str): Ditto.
+       (case_data_rw): Ditto.
+       
+       * category.c (cat_stored_values_destroy): Changed interface to
+       take a struct cat_vals * instead of a struct variable *.
+
+       * dictionary.c (dict_clone): Use new vector_clone function.     
+       (dict_clear) Use new var_destroy function.
+       (add_var) New function.
+       (dict_create_var) Rewrite in terms of dict_create_var_assert.
+       (dict_create_var_assert) Rewrite in terms of add_var.
+       (dict_clone_var) Rewrite in terms of dict_clone_var_assert.
+       (dict_clone_var_assert) Rewrite in terms of var_clone, add_var.
+       (dict_lookup_var) Use new var_create, var_destroy functions.
+       (dict_contains_var) Rewrite in terms of new vardict functionality.
+       (set_var_dict_index) New function.
+       (set_var_case_index) New function.
+       (reindex_vars) New function.
+       (dict_delete_var) Rewrite in terms of new vardict functionality.
+       (dict_reorder_var) Ditto.
+       (dict_reorder_vars) Ditto.
+       (rename_var) New function.
+       (dict_rename_var) Use rename_var.
+       (dict_rename_vars) Use pool to simplify code.  Use rename_var.
+       (dict_get_compacted_idx_to_fv) Rename
+       dict_get_compacted_dict_index_to_case_index, update callers.
+       (dict_create_vector) Use new vector_create function.
+       (dict_clear_vectors) Use new vector_destroy function.
+       (set_var_short_name_suffix) Move here from variable.c, renamed
+       from var_set_short_name_suffix, make static, update caller.
+
+       * sys-file-private.c: New file.  
+       (sfm_width_to_bytes) Moved here from variable.c, renamed from
+       width_to_bytes, update callers.
+
+       * sys-file-private.h: New file.  Later it will supplant
+       sfm-private.h; for now it supplements it.
+       (macro MIN_VERY_LONG_STRING) New macro.
+       (macro EFFECTIVE_LONG_STRING_LENGTH) New macro, from value.h.
+
+       * sys-file-reader.c: Use MIN_VERY_LONG_STRING - 1 where
+       MAX_LONG_STRING was used before.
+
+       * sys-file-writer.c: Ditto.
+
+       * value-labels.c: Change the paradigm here to be that a null
+       pointer is OK for a struct val_labs * in most cases; it just
+       represents an empty set of value labels.
+       (val_labs_copy) A copy of a null set is a null set.
+       (val_labs_count) A null set has 0 labels.
+       (val_labs_replace) Change return type to void.  Rewrite for
+       simplicity.
+       (val_labs_find) A null set does not contain the value.
+       (value_to_string) Moved to variable.c, renamed var_get_value_name,
+       transposed argument order, updated all callers.
+
+       * value.c: New file.
+       (value_dup) Moved here from variable.c.
+       (compare_values) Ditto.
+       (hash_value) Ditto.
+
+       * value.h: (macro MAX_SHORT_STRING) Rewrote for simplicity.
+       (macro MAX_LONG_STRING) Removed, because it was only interesting
+       for system files, not for general code.
+       (macro MAX_VERY_LONG_STRING) Ditto.
+       (macro EFFECTIVE_LONG_STRING_LENGTH) Moved to sys-file-private.h.
+       (macro MAX_ELEMS_PER_VALUE) Removed, as it was unused.
+
+       * vardict.h: New file, for an interface between variables and
+       their dictionaries.
+
+       * variable.c: A lot of functions were moved around, for better
+       organization.
+       (struct variable) Move definition here, from variable.h.
+       (var_type_adj) Removed--makes i18n hard.
+       (var_type_noun) Ditto.
+       (var_create) New function.
+       (var_clone) New function.
+       (var_destroy) New function.
+       (var_set_name) Assert that variable is not in a dictionary.
+       (compare_var_names) Rename compare_vars_by_name and fix a couple
+       of callers who thought the args were strings.
+       (hash_var_name) Rename hash_var_by_name.
+       (compare_var_ptr_names) Rename compare_var_ptrs_by_name.
+       (hash_var_ptr_name) Rename hash_var_ptr_by_name.
+       (var_is_very_long_string) Removed, because it was only interesting
+       to system file code.
+       (var_set_missing_values) Allow the argument to be the wrong width,
+       as long as we can resize it.  Simplify callers who were doing the
+       resizing themselves.
+       (var_get_value_labels) New function.
+       (var_has_value_labels) New function.
+       (var_set_value_labels) New function.
+       (alloc_value_labels) New function.
+       (var_add_value_label) New function.
+       (var_replace_value_label) New function.
+       (var_clear_value_labels) New function.
+       (var_lookup_value_label) New function.
+       (var_get_value_name) Moved here from variable.c, renamed from
+       var_get_value_name, transposed argument order, updated all
+       callers.
+       (var_to_string) Moved here, from variable-label.c.
+       (var_set_leave) New function.
+       (var_get_leave) New function.
+       (var_must_leave) New function.
+       (var_set_short_name_suffix) Moved to dictionary.c, renamed
+       set_var_short_name_suffix.
+       (var_get_dict_index) New function.
+       (var_get_case_index) New function.
+       (var_get_obs_vals) New function.
+       (var_set_obs_vals) New function.
+       (var_has_obs_vals) New function.
+       (var_get_vardict) New function.
+       (var_set_vardict) New function.
+       (var_has_vardict) New function.
+       (var_clear_vardict) New function.
+       (value_dup) Moved to value.c.
+       (compare_values) Ditto.
+       (hash_value) Ditto.
+
+       * variable.h: (enum NUMERIC) Rename VAR_NUMERIC, update all users.
+       (enum ALPHA) Rename VAR_STRING, update all users.
+
+       * vector.c: New file.
+       (struct vector) Moved here, from variable.h.
+       (check_widths) New function.
+       (vector_create) New function.
+       (vector_clone) New function.
+       (vector_destroy) New function.
+       (vector_get_name) New function.
+       (vector_get_var) New function.
+       (vector_get_var_cnt) New function.
+       (compare_vector_ptrs_by_name) New function.
+
+       * vector.h: New file.
+
+Sun Dec 10 11:32:56 WST 2006 John Darrington <john@darrington.wattle.id.au>
+
+       * casefilter.c (casefilter_variable_missing): Avoided comparision of
+       string variables to SYSMIS.  Thanks to Ben Pfaff for reporting this
+       problem.
+
+Sat Dec  9 07:18:03 WST 2006 John Darrington <john@darrington.wattle.id.au>
+
+       * value-labels.c (destroy_atoms): New function.
+       * value-labels.c (atom_create): Call destroy_atoms in atexit handler.
+
+Thu Dec  7 17:38:26 2006  Ben Pfaff  <blp@gnu.org>
+
+       Thanks to Jason Stover for pointing out this problem.
+       
+       * data-out.c (output_number): Use gsl_finite from GSL, which is
+       portable, instead of isfinite, which is not.
+       (power256) Ditto.
+
+Thu Dec  7 15:22:38 WST 2006 John Darrington <john@darrington.wattle.id.au>
+
+       * variable.c variable.h (value_dup): New function.
+
+Mon Dec  4 22:20:17 2006  Ben Pfaff  <blp@gnu.org>
+
+       Start converting struct variable to an opaque type.  In this
+       phase, we add a bunch of setter and getter functions and convert
+       most of the PSPP code to use them.  The resulting changes are
+       pervasive but mostly trivial, and only the notable changes are
+       logged.
+       
+       * format.c (fmt_equal): New function.
+       
+       * variable.c (var_type_is_valid): New function.
+       (measure_is_valid) Moved here, from format.c.
+       (alignment_is_valid) Moved here, from format.c.
+       (var_get_name) New function.
+       (var_set_name) New function.
+       (width_to_type) New function.
+       (var_get_type) New function.
+       (var_get_width) New function.
+       (var_set_width) New function.
+       (var_is_numeric) New function.
+       (var_is_alpha) New function.
+       (var_is_short_string) New function.
+       (var_is_long_string) New function.
+       (var_is_very_long_string) New function.
+       (var_get_missing_values) New function.
+       (var_set_missing_values) New function.
+       (var_clear_missing_values) New function.
+       (var_has_missing_values) New function.
+       (var_is_value_missing) New function.
+       (var_is_num_missing) New function.
+       (var_is_str_missing) New function.
+       (var_is_value_user_missing) New function.
+       (var_is_num_user_missing) New function.
+       (var_is_str_user_missing) New function.
+       (var_is_value_system_missing) New function.
+       (var_get_print_format) New function.
+       (var_set_print_format) New function.
+       (var_get_write_format) New function.
+       (var_set_write_format) New function.
+       (var_set_both_formats) New function.
+       (var_get_label) New function.
+       (var_set_label) New function.
+       (var_clear_label) New function.
+       (var_has_label) New function.
+       (var_get_measure) New function.
+       (var_set_measure) New function.
+       (var_get_display_width) New function.
+       (var_set_display_width) New function.
+       (var_get_alignment) New function.
+       (var_set_alignment) New function.
+       (var_get_value_cnt) New function.
+       (var_get_leave) New function.
+       (var_get_short_name) New function.
+
+       * variable.h: (struct variable) Removed "type" and "nv" members;
+       they are now computed from "width" where needed.
+
+Mon Dec  4 21:38:40 2006  Ben Pfaff  <blp@gnu.org>
+
+       * missing-values.c (mv_resize): Don't write beyond end of the
+       allocated buffer when resizing a long string.
+
+Sat Dec  2 16:28:32 2006  Ben Pfaff  <blp@gnu.org>
+
+       Clean up identifier code: don't require identifier enumerations to
+       be in a particular order; make better use of string library;
+       expose less of the internals.
+               
+       * identifier.c: (lex_skip_identifier) Rename lex_id_get_length,
+       change interface.  Updated all callers.
+       (lex_id_match) Change interface to use struct substring, update
+       all callers.
+       (lex_id_match_len) Removed.  Update callers to use lex_id_match.
+       (global array keywords[]) Make static, change form.  Update all
+       users to use lex_id_name instead.
+       (lex_is_keyword) New function.
+       (lex_id_to_token) Change interface to use struct substring, update
+       all callers.
+       (lex_id_name) New function.
+
+       * identifier.h: (T_FIRST_KEYWORD) Removed.  Changed users to call
+       lex_is_keyword instead.
+       (T_LAST_KEYWORD) Removed.
+       (T_N_KEYWORDS) Removed.
+       
+Sat Nov 18 20:46:35 2006  Ben Pfaff  <blp@gnu.org>
+
+       * format.c: (fmt_date_template) Distinguish characters for which a
+       space is output and any date delimiter is allowed on input, from
+       those for which a space is output and only a space is allowed on
+       input.  The former is represented by X, the latter by a space.
+       Also, drop distinction between h and H, changing the former to the
+       latter.
+
+       * data-in.c: Completely rewrite internals to conform to SPSS input
+       formats as closely as possible.
+       (data_in) Changed external interface by replacing the structure
+       that was used as a single argument by a set of arguments.  Updated
+       all callers.
+       (data_in_finite_line) Removed.  Converted all callers to use plain
+       data_in.
+       (data_in_get_integer_format) New function.
+       (data_in_set_integer_format) New function.
+       (data_in_get_float_format) New function.
+       (data_in_set_float_format) New function.
+
+       * data-in.h: (enums DI_IGNORE_ERROR, DI_IMPLIED_DECIMALS) Removed.
+       (struct data_in) Removed.
+
+       * data-out.c: (output_date) Drop each component from the input as
+       it is output, to allow us to drop the distinction between h (a
+       count of hours) and H (the hour of day) template characters.
+       Also, handle new X template character.
+       (output_scientific) Follow more rational rule on when to drop
+       fraction introduced between SPSS 13 and 15.  Updated test case to
+       match new behavior.
+
+Sat Nov 11 11:41:26 2006  Ben Pfaff  <blp@gnu.org>
+
+       Fix buffer overflow reported by John Darrington.
+
+       * data-out.c (output_bcd_integer): In case of SYSMIS, etc.,
+       realize that DIGITS is a count of nibbles, not of bytes.
+
+Sat Nov  4 15:59:56 2006  Ben Pfaff  <blp@gnu.org>
+
+       * calendar.c (calendar_offset_to_gregorian) Also return the
+       year-of-day.  Change callers to new interface.
+
+       * data-out.c: Completely rewrite internals to conform to SPSS
+       output formats as completely as possible.
+       (data_out) Change interface to put input parameters before output
+       parameters, for consistency with the style I now prefer.  Update
+       all callers.
+       (data_out_get_integer_format) New public function.
+       (data_out_set_integer_format) New public function.
+       (data_out_get_float_format) New public function.
+       (data_out_set_float_format) New public function.
+
+       * data-out.h: New file.  Move prototype for data_out here, from
+       format.h.
+
+       * format.c: (fmt_step_width) Use equality comparison instead of
+       bitwise and, for clarity.
+       (fmt_is_string) Ditto.
+       (fmt_input_to_output) Fix categories that are translated to F
+       format.
+
+Sun Nov  5 08:29:34 WST 2006 John Darrington <john@darrington.wattle.id.au>
+
+       * casefilter.c casefilter.h (new files), casefile.c casefile.h 
+       casefile-private.h: Added casefilter to assist commands with missing 
+       values.
+
+Sat Nov  4 11:47:09 2006  Ben Pfaff  <blp@gnu.org>
+
+       Implement SET ERRORS, SHOW ERRORS.  Fixes bug #17609.
+       
+       * settings.c: (route_errors_to_terminal) New variable.
+       (route_errors_to_listing) New variable. 
+       (get_error_routing_to_terminal) New function.
+       (set_error_routing_to_terminal) New function.
+       (get_error_routing_to_listing) New function.
+       (set_error_routing_to_listing) New function.
+
+       * settings.h: (SET_ROUTE_* enums) Removed, because unused.
+
+Tue Oct 31 19:58:27 2006  Ben Pfaff  <blp@gnu.org>
+
+       * format.c: Completely rewrite, to achieve better abstraction.
+       Rewrite all references to formats in other files.
+       
+       * format.def: Rewrite and reorganize.
+
+       * settings.c: Move everything related to custom currency formats
+       into format.[ch], changing them in form, so as to group related
+       code and definitions better.  Changed all references to use the
+       new functions.
+       (static var decimal) Removed.
+       (static var grouping) Removed.
+       (static var cc) Removed.
+       (get_decimal) Removed.
+       (set_decimal) Removed.
+       (get_grouping) Removed.
+       (set_grouping) Removed.
+       (get_cc) Removed.
+       (set_cc) Removed.
+
+       * settings.h: (macro CC_CNT) Removed.
+       (macro CC_WIDTH) Removed.
+       (struct custom_currency) Removed.
+
+Tue Oct 31 19:56:19 2006  Ben Pfaff  <blp@gnu.org>
+
+       * data-in.c (data_in): Use switch statement instead of table, to
+       avoid dependence on the order of the FMT_* enums.
+
+Tue Oct 31 19:35:36 2006  Ben Pfaff  <blp@gnu.org>
+
+       * data-out.c: (num_to_string) Removed, because it was dead code.
+
+Tue Oct 31 18:09:24 2006  Ben Pfaff  <blp@gnu.org>
+
+       * data-in.c (parse_trailer): Fix error message.
+
+Sat Oct 28 11:56:50 2006  Ben Pfaff  <blp@gnu.org>
+
+       * format.c (fmt_is_binary): New function.
+
+Thu Oct 19 22:59:56 WST 2006 John Darrington <john@darrington.wattle.id.au>
+
+       * procedure.c procedure.h: Encapsulated the static data into a single
+       struct.  
+
+Sat Oct 14 16:56:44 2006  Ben Pfaff  <blp@gnu.org>
+
+       * casefile.c (casereader_read_xfer): Always initialize the case,
+       even on an error condition.
+
+Wed Sep 27 09:37:49 WST 2006 John Darrington <john@darrington.wattle.id.au>
+
+       * procedure.c (case_limit_trns_proc): Fixed buglet which rendered the 
+       entire function useless.
+
+Mon Sep 25 17:11:46 WST 2006 John Darrington <john@darrington.wattle.id.au>
+
+       * casefile-private.h casefile.c casefile.h fastfile.c: Created new
+       casereader method casereader_clone.   
+       
+       * procedure.c pransformations.h: Introduced new type casenum_t
+
+Thu Sep 21 07:00:30 2006  Ben Pfaff  <blp@gnu.org>
+
+       * variable.c: (width_to_bytes) Rephrase code for clarify.
+
+Sun Jul 16 19:52:03 2006  Ben Pfaff  <blp@gnu.org>
+
+       * format.c: (fmt_type_from_string) New function.
+       (fmt_to_string) Include decimals in output if the format has
+       decimals, even if the format type does not.  This way, we can
+       accurately reproduce incorrect formats in user output.
+       (check_common_specifier) Make the check for a bad format type an
+       assertion, so we get bug reports if they show up.  Fix message.
+       Check for decimal places with a format type that doesn't allow
+       them.
+       (check_input_specifier) Remove check for FMT_X, which has been
+       deleted.
+       (check_output_specifier) Ditto. 
+
+       * format.def: Remove FMT_T, FMT_X, FMT_DESCEND, FMT_NEWREC.
+
+       * format.h: (macro FMT_TYPE_LEN_MAX) New macro.
+       (struct fmt_desc) Use FMT_TYPE_LEN_MAX in definition.
+       (enum fmt_parse_flags) Removed.
+
+Mon Jul 17 18:26:21 WST 2006 John Darrington <john@darrington.wattle.id.au>
+
+       * casefile.c casefile.h: Converted to  an abstract base class.
+       * casefile-private.h fastfile.c fastfile.h: New files.
+       * automake.mk procedure.c scratch-writer.c storage-stream.c
+
+Wed Jul 12 21:02:26 2006  Ben Pfaff  <blp@gnu.org>
+
+       * procedure.c (internal_procedure): Create sink_case with only as
+       many values as the compacted dictionary.
+
+Wed Jul 12 21:01:00 2006  Ben Pfaff  <blp@gnu.org>
+
+       Remove "debugging" code that caused plenty of false positives and
+       no true positives.
+       
+       * case.h (struct ccase): [DEBUGGING] Remove `this' member.
+
+       * case.c: Remove all references to `this' member.
+
+Thu Jul  6 19:09:53 2006  Ben Pfaff  <blp@gnu.org>
+
+       Fix link error noted by Jason Stover.
+       
+       * storage-stream.c: Include <assert.h>.
+
+Tue Jul  4 08:47:35 2006  Ben Pfaff  <blp@gnu.org>
+
+       Fix bug #15766 (/KEEP subcommand on SAVE doesn't fully support
+       ALL) and additional underlying system file issues.
+
+       Thanks to John Darrington for review.
+
+       First problem: var_hash points to variables not owned by the
+       sys-file-reader, which the caller may free or modify.  Use an
+       array of sfm_vars instead, as done earlier (e.g. CVS version
+       1.12).
+       
+       * sys-file-reader.c (struct sfm_reader): Remove var_hash, svars
+       members and remove all code that references it.  Add vars, var_cnt
+       members.  Remove fix_specials member, which was unused.
+       (struct sfm_var) Remove name member, which was unused.
+       (sfm_close_reader) Free vars member instead of var_hash.
+       (compare_var_shortnames) Removed.
+       (hash_var_shortname) Removed.
+       (sfm_open_reader) Fill out vars array.
+       (compare_var_index) Removed.
+       (sfm_read_case) Use vars instead of var_hash.
+       
+       Second problem: we're confused about when we actually have very
+       long strings, causing us to choose incorrectly between slow path
+       and fast path in sfm_read_case.
+
+       * sys-file-reader.c: (sfm_open_reader) Only mark has_vls if we
+       have very long strings, not when we have long variable names,
+       which is an unrelated feature.
+
+Tue Jun 27 12:06:49 2006  Ben Pfaff  <blp@gnu.org>
+
+       * variable.h: Move var_set and variable parsing declarations to
+       new header, src/language/lexer/variable-parser.h.  Modified lots
+       of files to include the new header.
+
+Sun Jun 25 22:39:32 2006  Ben Pfaff  <blp@gnu.org>
+
+       * value-labels.c (value_to_string): When there's no value label,
+       format the variable according to its print format, instead of
+       always effectively using A or F format.
+
+Mon Jun 19 18:05:42 WST 2006 John Darrington <john@darrington.wattle.id.au>
+
+       * casefile.c (casefile_get_random_reader): Nasty hack to get around 
+       the mode assertion.
+
+       * format.c: Removed tortological assertion.
+
+Fri Jun  9 12:20:09 2006  Ben Pfaff  <blp@gnu.org>
+
+       Reform string library.
+       
+       * file-name.c (fn_interp_vars): Change interface to take a
+       substring as input.  Updated all users.
+       
+Fri Jun  9 12:11:24 2006  Ben Pfaff  <blp@gnu.org>
+
+       * format.c (measure_is_valid): Really return false when m >=
+       n_MEASURES.
+
+Tue Jun  6 18:46:26 2006  Ben Pfaff  <blp@gnu.org>
+
+       Implement random access to casefiles, for use in GUI.
+       
+       * casefile.c: (struct casereader) Add `random', `file_ofs',
+       `buffer_ofs' members.
+       (casefile_get_random_reader) New function.
+       (read_open_file) Break part into new function
+       seek_and_fill_buffer().
+       (fill_buffer) Update buffer_ofs, file_ofs.
+       (casereader_seek) New function.
+
+Tue May 30 19:52:33 WST 2006 John Darrington <john@darrington.wattle.id.au>
+
+       * settings.c: Added call to i18n{done, init}.
+
+Tue May  9 21:09:17 2006  Ben Pfaff  <blp@gnu.org>
+
+       * procedure.h: Add WARN_UNUSED_RESULT to procedure function
+       prototypes.
+
+Tue May  9 21:08:05 2006  Ben Pfaff  <blp@gnu.org>
+
+       * casefile.c: Convert many uses of `int' to `bool'.
+
+Sat May  6 22:49:43 2006  Ben Pfaff  <blp@gnu.org>
+
+       * transformations.c (trns_chain_destroy): Destroy chain's trns
+       member, to fix memory leak.
+
+Sat May  6 22:48:30 2006  Ben Pfaff  <blp@gnu.org>
+
+       * storage-stream.c (storage_source_decapsulate): Destroy case
+       source to fix memory leak.
+
+Sat May  6 22:46:47 2006  Ben Pfaff  <blp@gnu.org>
+
+       * scratch-reader.c (scratch_reader_read_case): Copy into existing
+       case passed as argument instead of initializing the argument as a
+       case.  Fixes memory leak that showed up in
+       tests/command/aggregate.sh with scratch files.
+
+Sat May  6 22:45:55 2006  Ben Pfaff  <blp@gnu.org>
+
+       * procedure.c (proc_done): Destroy default_dict, to fix memory
+       leak.
+
+Sat May  6 22:44:44 2006  Ben Pfaff  <blp@gnu.org>
+
+       Simplify procedure_with_splits().
+       
+       * procedure.c (struct split_aux_data): Removed case_count member.
+       (procedure_with_splits) Don't initialize case_count.
+       (split_procedure_case_func) Check whether prev_case is null
+       instead of case_count.
+       (split_procedure_end_func) Ditto.
+
+Sat May  6 22:42:23 2006  Ben Pfaff  <blp@gnu.org>
+
+       * case.c (case_move): Do nothing if dst and src are the same
+       object.
+       (case_try_create) Merge two similar cases.
+       (case_copy) Unshare only if data must be actually copied.
+
+Sun May  7 10:04:06 WST 2006 John Darrington <john@darrington.wattle.id.au>
+
+       * data-in.c data-out.c dictionary.c sys-file-reader.c
+       sys-file-writer.c variable.c variable.h:  Reworked very long string
+       support for better encapsulation.
+
+Sat May  6 19:02:00 2006  Ben Pfaff  <blp@gnu.org>
+
+       * value-labels.c (val_labs_can_set_width): New function.
+       (val_labs_set_width) Clear labels if increasing width to long
+       string.
+       (val_labs_destroy) Remove unneeded test for null.
+       
+Sat May  6 16:14:08 2006  Ben Pfaff  <blp@gnu.org>
+
+       * value-labels.h: Remove unneeded dependency on variable.h.
+
+Sat May  6 15:58:36 2006  Ben Pfaff  <blp@gnu.org>
+
+       Get rid of `char *c' member in union value, for cleanliness.
+       
+       * value.h: (union value) Remove `c' member.
+
+Sat May  6 15:36:59 2006  Ben Pfaff  <blp@gnu.org>
+
+       Make dictionary compacting functions a little more general.
+       
+       * sys-file-writer.c (sfm_open_writer): Use
+       dict_compacting_would_change().
+       (does_dict_need_translation) Removed.
+
+Sat May  6 15:35:42 2006  Ben Pfaff  <blp@gnu.org>
+
+       Make dictionary compacting functions a little more general.
+       
+       * dictionary.c (dict_needs_compaction): Rename
+       dict_compacting_would_shrink().  Update all callers.
+       (dict_compacting_would_change) New function.
+       
+Sat May  6 14:25:49 2006  Ben Pfaff  <blp@gnu.org>
+
+       * sys-file-writer.c: (does_dict_need_translation) Fix bug:
+       inverted return value (!).
+
+Sat May  6 13:37:52 2006  Ben Pfaff  <blp@gnu.org>
+
+       Continue reforming procedure execution.  
+
+       * procedure.c: Search and replace "vfm" by "proc".  Notably:
+       (static var vfm_source) Rename proc_source.  Update all
+       references.
+       (static var vfm_sink) Rename proc_sink.  Update all references.
+       
+Sat May  6 12:38:55 2006  Ben Pfaff  <blp@gnu.org>
+
+       Continue reforming procedure execution.  In this phase, remove
+       PROCESS IF, which was deprecated anyway and can be easily
+       simulated with TEMPORARY followed by SELECT IF.
+
+       * procedure.c: (open_active_file) Don't call
+       add_process_if_trns().
+       (discard_variables) Get rid of redundant call to
+       proc_cancel_all_transformations().
+       (add_process_if_trns) Removed.
+       (process_if_trns_proc) Removed.
+       (process_if_trns_free) Removed.
+
+Sat May  6 10:58:05 2006  Ben Pfaff  <blp@gnu.org>
+
+       Continue reforming procedure execution.  In this phase, add
+       `const' to the case passed to procedure()'s callback.
+
+       Updated all users of procedure() as well.
+       
+       * procedure.c: (struct write_case_data) Add "const" to ccase
+       parameter for case_func member.
+       (procedure) Add "const" to ccase parameter for proc_func
+       parameter.
+       (multipass_case_func) Make ccase parameter const.
+       (internal_procedure) Add "const" to ccase parameter for case_func
+       parameter.
+       (split_procedure_case_func) Make ccase parameter const.
+       (multipass_split_case_func) Make ccase parameter const.
+       
+Sat May  6 10:30:33 2006  Ben Pfaff  <blp@gnu.org>
+
+       Continue reforming procedure execution.  In this phase, get rid of
+       the output code for SPLIT FILE groups in procedure.c, which really
+       shouldn't be doing any output.  Move it into the individual
+       procedures instead.  This also adds some flexibility.
+
+       Updated many users of procedure_with_splits() and
+       multipass_procedure_with_splits() to call
+       output_split_file_values() and to deal with increased use of
+       const.
+
+       * procedure.c: (struct split_aux_data) Add "const struct ccase *"
+       parameter to begin_func member.
+       (procedure_with_splits) Add "const struct ccase *" parameter to
+       begin_func parameter.  Make ccase parameter const in proc_func
+       parameter.
+       (split_procedure_case_func) Don't dump split file group.  Pass
+       case to begin_func.
+       (dump_splits) Moved to language/dictionary/split-file.c as
+       output_split_file_values().
+       (struct multipass_split_aux_data) Add "const struct ccase *"
+       parameter to split_func member.
+       (multipass_procedure_with_splits) Add "const struct ccase *"
+       parameter to split_func parameter.
+       (multipass_split_case_func) Save new SPLIT FILE case before
+       outputting case.
+       (multipass_split_output) Pass saved SPLIT FILE case to split_func.
+       
+Fri May  5 22:48:50 2006  Ben Pfaff  <blp@gnu.org>
+
+       Continue reforming procedure execution.  Change
+       internal_procedure() so that it calls open_active_file() and
+       close_active_file(), which isolates most of the actual procedure
+       functionality.
+
+       * procedure.c: (struct write_case_data) Rename `proc_func' member
+       to `case_func' and update all references.
+       (procedure) Rewrite as one-line wrapper around
+       internal_procedure().
+       (struct multipass_aux_data) New.
+       (multipass_callback) Renamed multipass_case_func().  Use struct
+       multipass_aux_data as auxiliary data.
+       (multipass_end_func) New function.
+       (multipass_procedure) Rewrite as wrapper for internal_procedure()
+       that uses multipass_case_func, multipass_end_func.
+       (internal_procedure) Add `end_func' argument.  Move optimization
+       of trivial case in here.  Move call to open_active_file() and
+       close_active_file() in here.  Now assert that vfm_source is
+       non-null.
+       (procedure_with_splits_callback) Rename
+       split_procedure_case_func().
+       (split_procedure_end_func) New function.
+       (multipass_split_callback) Rename multipass_split_case_func.
+       (multipass_split_end_func) New function.
+       (discard_variables) No need to test for nonnull vfm_source.
+
+Fri May  5 21:34:02 2006  Ben Pfaff  <blp@gnu.org>
+
+       Continue reforming procedure execution.  Get rid of unused member.
+
+       * procedure.c: (struct write_case_data) Remove `cases_analyzed'
+       member.
+       (write_case) Don't increment cases_analyzed.
+
+Thu May  4 21:50:11 2006  Ben Pfaff  <blp@gnu.org>
+
+       Continue reforming procedure execution.  In this phase, move
+       procedure.c and procedure.h from src to src/data.  Update
+       makefiles and #includes accordingly.
+
+       * procedure.c: Moved here from src/.
+
+       * procedure.h: Moved here from src/.
+
+Wed May  3 22:42:12 2006  Ben Pfaff  <blp@gnu.org>
+
+       Continue reforming procedure execution.  In this phase, get rid of
+       many global variables, consolidating procedure execution in
+       procedure.c.  Encapsulate transformations in new "struct
+       trns_chain".  Also, change implementation of N OF CASES, FILTER,
+       and PROCESS IF from special cases to transformations.
+        
+       * automake.mk: (src_data_libdata_a_SOURCES) Add transformations.c,
+       transformations.h.
+
+       * dictionary.c: (global variable default_dict) Move to
+       src/procedure.c.
+
+       * variable.h: (TRNS_*) Move to transformations.h.
+       (struct transformation) Move to transformations.c.
+
+Thu May  4 13:47:06 WST 2006 John Darrington <john@darrington.wattle.id.au>
+
+       * sys-file-reader.c: Fixed invalid read problems.
+
+Tue May  2 15:57:10 2006  Ben Pfaff  <blp@gnu.org>
+
+       * storage-stream.c: Add missing function comments.
+
+Tue May  2 15:50:21 2006  Ben Pfaff  <blp@gnu.org>
+
+       Continue reforming procedure execution.  In this phase, add some
+       new, needed functionality to storage-stream.
+
+       * storage-stream.c: (storage_source_decapsulate) New function.
+
+Tue May  2 15:43:36 2006  Ben Pfaff  <blp@gnu.org>
+
+       * variable.c (width_to_bytes): Declarations must precede
+       statements for C90 compliance.
+
+Tue May  2 10:42:05 WST 2006 John Darrington <john@darrington.wattle.id.au>
+
+       * data-out.c, data-in.c, variable.c, variable.h: New functions 
+       copy_mangle and copy_demangle for reading/writing cases; emulates the 
+       way SPSS deals with strings > 255 bytes.
+
+       * sys-file-reader.c sys-file-writer.c: Added support for Record 7, 
+       subtype 14 needed for strings longer than 255 bytes.
+
+       * dictionary.c, format.def, value.c : Updated to use MAX_STRING 
+        instead of literal values. Also fixed some constness issues.
+
+       * format.h: Constness
+
+       * sfm-private.h: Renamed the case_size identifier, since I discovered 
+        that SPSS's respect for this variable is very nominal.
+
+Mon May  1 15:45:42 2006  Ben Pfaff  <blp@gnu.org>
+
+       Change case limit type from int to size_t.
+
+       * dictionary.c: (struct dictionary) Change type of case_limit
+       member.
+       (dict_get_case_limit) Change return type.
+       (dict_set_case_limit) Change parameter type.
+
+Wed Apr 26 20:01:19 2006  Ben Pfaff  <blp@gnu.org>
+
+       * variable.h: (struct variable) Rename `reinit' member as `leave'
+       and invert sense.  Fix up all references.
+
+Wed Apr 26 19:39:28 2006  Ben Pfaff  <blp@gnu.org>
+
+       Continue reforming procedure execution.  In this phase, break
+       procedure.c into multiple files.
+       
+       * automake.mk: (src_data_libdata_a_SOURCES) Add all the new files.
+
+       * case-sink.c: New file.
+
+       * case-sink.h: New file.
+       
+       * case-source.c: New file.
+
+       * case-source.h: New file.
+       
+       * storage-stream.c: New file.
+
+       * storage-stream.h: New file.
+
+Wed Apr 26 14:55:19 2006  Ben Pfaff  <blp@gnu.org>
+
+       * variable.h: (struct variable) Remove `init' member and all
+       references to it from other files.  It was initialized in several
+       places, but nothing really ever used it for anything worthwhile.
+       Thanks to Jason Stover for pointing out how confusing this
+       member is.
+
+Sun Apr 23 22:04:45 2006  Ben Pfaff  <blp@gnu.org>
+
+       Continue reforming error message support.  In this phase, get rid
+       of message "titles" and put the message text in `struct error'.
+       Now `struct error' encapsulates a message more properly.
+       
+       * casefile.c: (io_error) Use err_msg() instead of err_vmsg().
+       Format message ourselves.
+
+       * data-in.c: (vdls_error) Ditto.
+
+       * por-file-reader.c: (error) Ditto.
+
+       * sys-file-reader.c: (corrupt_msg) Ditto.
+
+Sun Apr 16 18:49:51 2006  Ben Pfaff  <blp@gnu.org>
+
+       GNU standards require "file name" instead of "filename" in
+       documentation.  It's nice for our code to follow the convention
+       too.
+       
+       * casefile.c: (struct casefile) Rename `filename' member to
+       `file_name'.  Updated all references.
+
+       * file-name.c: [!unix] (struct file_identity) Rename
+       normalized_filename member to normalized_file_name.  Updated all
+       references.
+
+Sun Apr 16 18:35:33 2006  Ben Pfaff  <blp@gnu.org>
+
+       We don't really support anything but Unix-like environments well,
+       so we might as well de-obfuscate by writing directory and path
+       separators explicitly.
+
+       * file-name.h: (macro DIR_SEPARATOR) Removed.  Changed all usages
+       to just '/'.
+       (macro PATH_SEPARATOR) Removed.  Changed all usages to just ':'.
+       (macro DIR_SEPARATOR_STRING) Removed.  Changed all usages to just
+       "/".
+       (macro PATH_SEPARATOR_STRING) Removed.  Changed all usages to just
+       ":"
+
+Sun Apr 16 18:28:35 2006  Ben Pfaff  <blp@gnu.org>
+
+       GNU standards require "file name" instead of "filename" in
+       documentation.  It's nice for our code to follow the convention
+       too.
+       
+       * filename.c: Rename to file-name.c.
+
+       * filename.h: Rename to file-name.h.  Update all inclusions.
+       Update header guards.
+
+       * automake.mk: Update file names.
+
+Sun Apr 16 16:42:47 2006  Ben Pfaff  <blp@gnu.org>
+
+       * filename.c: (fn_dirname) Renamed fn_dir_name(), all references
+       updated.
+       (fn_basename) Removed (dead code).
+       (fn_absolute_p) Renamed fn_is_absolute(), all references updated.
+       (fn_special_p) Renamed fn_is_special(), all references updated.
+       (fn_exists_p) Renamed fn_exists(), all references updated.
+
+Sun Apr 16 16:33:58 2006  Ben Pfaff  <blp@gnu.org>
+
+       * filename.c: (fn_tilde_expand) Rewrite for cleaner code.  
+       Also, now it only tilde-expands file names, not paths.
+       (fn_search_path) Tilde-expand one directory at a time.
+
+Sun Apr 16 16:28:06 2006  Ben Pfaff  <blp@gnu.org>
+
+       * filename.c: (fn_search_path) rewrite for cleaner code.  Also,
+       get rid of non-Unixlike version of the code, which has probably
+       never been tested.
+       (fn_prepend_dir) Removed (dead code).
+
+       * filename.h: (macro DIR_SEPARATOR_STRING) New.
+       (macro PATH_SEPARATOR_STRING) New.
+Sun Apr 16 16:05:28 2006  Ben Pfaff  <blp@gnu.org>
+
+       Continue reforming error message support.  In this phase, we get
+       rid of VM() and the other msg() support for "verbosity", replacing
+       it by a new function verbose_msg().
+
+       * filename.c: (fn_search_path) Use verbose_msg() instead of
+       msg(VM(), ...).  
+
 Sat Apr 15 19:53:19 2006  Ben Pfaff  <blp@gnu.org>
 
        * sfm-private.h: Get rid of #defines after #error, which makes no