+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.
+
+Mon Jan 1 10:36:26 WST 2007 John Darrington <john@darrington.wattle.id.au>
+
+ * dictionary.c dictionary.h : Added replace_source and replace_dict
+ callbacks, and functions to deal with them.
+
+Fri Dec 22 13:56:08 2006 Ben Pfaff <blp@gnu.org>
+
+ Simplify missing value handling.
+
+ * missing-values.h (enum mv_class): New type.
+ (enum mv_type): Moved definition into missing-values.c and renamed
+ each MV_* to MVT_*, to distinguish them from the exposed mv_class
+ enums. Updated all uses.
+ (struct missing_values): Changed type of `type' from `enum
+ mv_type' to `int' because the definition is no longer exposed.
+
+ * missing-values.c (mv_is_value_missing): Add new enum mv_class
+ parameter. Update all callers.
+ (mv_is_num_missing): Ditto.
+ (mv_is_str_missing): Ditto.
+ (mv_is_value_user_missing): Removed. Changed callers to use
+ mv_is_value_missing.
+ (mv_is_num_user_missing): Removed. Changed callers to use
+ mv_is_num_missing.
+ (mv_is_str_user_missing): Removed. Changed callers to use
+ mv_is_str_missing.
+ (mv_is_value_system_missing): Removed. Changed callers to use
+ mv_is_value_missing.
+ (mv_set_type): Removed. Changed callers to use mv_clear.
+ (mv_clear): New function.
+
+ * variable.c (var_is_value_missing): Add new enum mv_class
+ parameter. Update all callers.
+ (var_is_num_missing): Ditto.
+ (var_is_str_missing): Ditto.
+ (var_is_value_user_missing): Removed. Changed callers to use
+ var_is_value_missing.
+ (var_is_num_user_missing): Removed. Changed callers to use
+ var_is_num_missing.
+ (var_is_str_user_missing): Removed. Changed callers to use
+ var_is_str_missing.
+ (var_is_value_system_missing): Removed. Changed callers to use
+ var_is_value_missing.
+
+ * casefilter.c (struct casefilter): Use enum mv_class in place of
+ bool.
+ (casefilter_variable_missing): Adapt to new member.
+ (casefilter_create): Change signature to take enum mv_class,
+ update callers.
+
+Fri Dec 22 20:08:38 WST 2006 John Darrington <john@darrington.wattle.id.au>
+
+ * casefile-factory.h fastfile-factory.c fastfile-factory.h: New files.
+
+ * case-sink.c case-sink.h procedure.c procedure.h
+ storage-stream.c: Now uses the factory.
+
+Sat Dec 16 22:05:18 2006 Ben Pfaff <blp@gnu.org>
+
+ Make it possible to pull cases from the active file with a
+ function call, instead of requiring indirection through a callback
+ function.
+
+ * case-source.h (struct case_source_class): Change ->read function
+ to return a single case, instead of calling a callback function
+ for each case. Change ->destroy function to return an error
+ status.
+
+ * case-source.c (free_case_source): Pass along the value returned
+ by the case_source ->destroy function.
+
+ * procedure.c (struct write_case_data): Removed.
+ (struct dataset): Added some members to track procedure state.
+ (procedure): Optimize the trivial case at this level.
+ (internal_procedure): Re-implement in terms of proc_open,
+ proc_read, proc_close.
+ (proc_open) New function.
+ (proc_read) New function.
+ (proc_close) New function.
+ (write_case) Moved into proc_read.
+ (close_active_file) Moved closing of data source into proc_close.
+
+ * storage-source.c: Rewrote to conform with modified
+ case_source_class interface.
+
+ * transformations.c (trns_chain_execute): Added argument to allow
+ starting execution from an arbitrary transformation. Updated
+ callers.
+
+ * transformations.h (enum TRNS_NEXT_CASE) Renamed TRNS_END_CASE.
+
+Sat Dec 16 14:09:25 2006 Ben Pfaff <blp@gnu.org>
+
+ * sys-file-reader.c (read_display_parameters): Don't assume that
+ MEASURE_* and ALIGN_* have the same values found in system files.
+
+ * sys-file-writer.c (write_variable_display_parameters): Ditto.
+
+ * variable.h: Change MEASURE_NOMINAL, MEASURE_ORDINAL,
+ MEASURE_SCALE to be 0-based instead of 1-based. This also fixes
+ the value of n_MEASURES, which was off by 1 (at least from my
+ point of view).
+
+Sat Dec 16 12:17:34 WST 2006 John Darrington <john@darrington.wattle.id.au>
+
+ * dictionary.c dictionary.h vardict.h variable.c: Added optional
+ callbacks which are invoked when the dictionary or its
+ variables are changed.
+
+ * missing-values.c missing-values.h value-labels.c: Tidied up
+ consistency checks, and made some of them return false
+ instead of assert-failing.
+
+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