Implement DATESUM, DATEDIFF functions.
[pspp-builds.git] / src / data / ChangeLog
index be7cf4419303fc99d62f55c601c7a7297dd62ec4..e88749621d7193141dc1f7031eff29a581617c6f 100644 (file)
@@ -1,3 +1,441 @@
+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.