+Sat Sep 17 11:13:13 2005 Ben Pfaff <blp@gnu.org>
+
+ * matrix-data.c: (cmd_matrix_data) Change type of variable whose
+ address is passed to dict_get_vars() from size_t to int to match
+ John's change below.
+
+ * modify-vars.c: (validate_var_modification) Ditto.
+
+Mon Sep 12 19:26:06 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * dictionary.[ch] Changed cnt from size_t* to int* since that's
+ what it's called as, and on x86_64 machines they're different sizes.
+
+ * str.c: (ds_vprintf) Copied va_list args so they can be re-used
+
+Sun Aug 21 00:12:24 2005 Ben Pfaff <blp@gnu.org>
+
+ * lexer.c: (lex_sbc_only_once) New function.
+ (lex_sbc_missing) New function.
+
+Sun Aug 21 00:00:47 2005 Ben Pfaff <blp@gnu.org>
+
+ * case.h: (case_str) Make it return `unsigned char'.
+
+Sat Aug 20 23:56:14 2005 Ben Pfaff <blp@gnu.org>
+
+ Revamp SAVE, XSAVE, EXPORT. Add (or at least parse) all the
+ subcommands that we didn't support. Fix bug 13911. Fix bug
+ reported by Adam Pierson (COMPRESSED and other subcommands didn't
+ work on SAVE). Refactor all related code.
+
+ * command.def: Add XEXPORT command.
+
+ * dictionary.c: (dict_delete_scratch_vars) New function.
+
+ * get.c: (cmd_get) Fix parsing.
+ (struct save_trns) Removed.
+ (cmd_save_internal) Removed.
+ (cmd_save) Removed.
+ (do_write_case) Removed.
+ (save_write_case_func) Removed.
+ (save_trns_proc) Removed.
+ (save_trns_free) Removed.
+ (trim_dictionary) Removed.
+ (struct export_proc) Removed.
+ (cmd_export) Rewrote.
+ (export_write_case_func) Removed.
+ (export_proc_free) Removed.
+ (enum writer_type) New enum.
+ (enum command_type) New enum.
+ (struct any_writer) New struct.
+ (any_writer_destroy) New function.
+ (parse_write_command) New function.
+ (any_writer_write_case) New function.
+ (parse_output_proc) New function.
+ (output_proc) New function.
+ (cmd_save) Rewrote.
+ (cmd_xsave) Rewrote.
+ (struct output_trns) New struct.
+ (parse_output_trns) New function.
+ (output_trns_proc) New function.
+ (output_trns_free) New function.
+ (cmd_xsave) Rewrote.
+ (cmd_xexport) New function.
+ (parse_dict_trim) New function.
+ (struct mtf_proc) Change `by_cnt' member type to `int'.
+ (cmd_import) Rewrote.
+
+ * pfm-write.c: (struct pfm_writer) Add `digits' member.
+ (pfm_writer_default_options) New function.
+ (pfm_open_writer) Add `opts' argument and handle options.
+ (write_float) Write only as many digits as `digits' member says.
+ (format_trig_double) Limit base-10 precision to LDBL_DIG.
+
+ * pfm-write.h: (enum pfm_type) Moved here from pfm-read.h.
+ (struct pfm_write_options) New struct.
+
+ * sfm-write.c: (sfm_writer_default_options) New function.
+ (sfm_open_writer) Remove `compress', `omit_long_names' args. Add
+ `opts' argument. Implement options.
+
+ * sfm-write.h: (struct sfm_write_options) New struct.
+
+ * expressions/helpers.c: (copy_string) Make `old' arg `unsigned
+ char *' instead of `char *'.
+
+Sat Aug 6 21:29:15 2005 Ben Pfaff <blp@gnu.org>
+
+ * factor_stats.c: Needed <config.h> included earlier.
+
+ * percentiles.c: Needed to include <config.h>.
+
+ * val.h: Don't include "config.h".
+
+Sat Aug 6 21:26:27 2005 Ben Pfaff <blp@gnu.org>
+
+ Clean up treatment of missing values by moving all the code into
+ one place. All references to the missing value function were
+ updated, but only major changes are detailed below.
+
+ * Makefile.am: Add missing-values.c, missing-values.h to sources.
+
+ * apply-dict.c: (cmd_apply_dictionary) Use mv_resize().
+
+ * dictionary.c: (dict_create_var) Initialize `miss' member with
+ mv_init().
+ (dict_clone_var) Copy `miss' member with mv_copy().
+
+ * get.c: (mtf_merge_dictionary) Use mv_copy().
+
+ * missing-values.c: New file.
+
+ * missing-values.h: New file.
+
+ * mis-val.c: Rewrite. New version implements updated semantics.
+
+ * pfm-read.c: (read_variables) Rewrite missing value handling.
+
+ * pfm-write.c: (write_variables) Rewrite missing value handling.
+
+ * sfm-read.c: (read_variables) Rewrite missing value handling.
+
+ * sfm-write.c: (write_variable) Rewrite missing value handling.
+
+ * sfmP.h: Include "magic.h" to get definition of
+ second_lowest_value.
+
+ * sysfile-info.c: (describe_variable) Rewrite missing value
+ handling.
+
+ * val.h: Include "magic.h" to get definition of
+ second_lowest_value.
+
+ * var.h: Include "missing-values.h". Drop MISSING_* enums.
+ (struct variable) Remove `miss_type', `missing'. Add `miss'.
+
+ * vars-atr.c: (is_num_user_missing) Removed--use
+ mv_is_num_user_missing().
+ (is_str_user_missing) Removed--use mv_is_str_user_missing().
+ (is_system_missing) Removed--use mv_is_value_system_missing().
+ (is_missing) Removed--use mv_is_value_missing().
+ (is_user_missing) Removed--use mv_is_value_user_missing().
+
+Sun Jul 31 14:09:57 2005 Ben Pfaff <blp@gnu.org>
+
+ Adopt use of gnulib for portability.
+
+ * Make.build: Add $(top_srcdir)/gl and $(top_builddir)/gl to
+ include path.
+
+ * Makefile.am: Remove bool.h, stat.h and change getline.[ch] to
+ getl.[ch] in pspp_SOURCES. Remove libmisc, add libgl in
+ pspp_LDADD.
+
+ * In many source files, added an explicit inclusion of gettext.h
+ and definition of _ macro. These are no longer in pref.h because
+ it interfered with definitions in a few gnulib source files.
+
+ * In many source files, changed #include "bool.h" to #include
+ <stdbool.h>, which is provided by gnulib.
+
+ * alloc.c: Removed functions defined in gnulib:
+ (xmalloc) Removed.
+ (xcalloc) Removed.
+ (xrealloc) Removed.
+ (xstrdup) Removed.
+ (out_of_memory) Redefined as wrapper for xalloc_die().
+
+ * alloc.h: Replace prototypes by #include "xalloc.h".
+
+ * casefile.c: Use full_read() and full_write() from gnulib instead
+ of our home-grown versions.
+ (full_read) Removed.
+ (full_write) Removed.
+
+ * getline.c: Renamed getl.c.
+
+ * getline.h: Renamed getl.h, updated all references.
+
+ * filename.c: (fn_readlink) Change to wrapper around xreadlink()
+ from gnulib.
+
+ * glob.c: Just #include <time.h> instead of the crazy rigmarole
+ here before.
+ (init_glob) Call set_program_name() to initial gnulib progname
+ module.
+
+ * html.c: (postopen) Use getlogin_r(), gethostname() from gnulib.
+
+ * permissions.c: Use "stat-macros.h" from gnulib.
+
+ * postscript.c: Just #include <time.h> instead of the crazy
+ rigmarole here before.
+
+ * q2c.c: (main) Make generated code #include "gettext.h".
+
+ * str.h: Get rid of most explicit declarations of standard
+ functions, in favor of including gnulib header files.
+
+ * expressions/evaluate.c: Ditto.
+
+ * expressions/operations.h.pl: Make generated code #include
+ <stdbool.h>, not "bool.h".
+
+Sat Jul 30 23:13:17 2005 Ben Pfaff <blp@gnu.org>
+
+ * expressions/parse.c: (validate_function_args) Fix two msg() bugs
+ found by -Wformat.
+
+Sat Jul 30 23:10:01 2005 Ben Pfaff <blp@gnu.org>
+
+ * expressions/evaluate.c: (expr_debug_print_postfix) Don't pass
+ null pointer to printf for %.*s.
+
+Sat Jul 30 23:05:33 2005 Ben Pfaff <blp@gnu.org>
+
+ * vars-atr.c: (var_is_valid_name) Fix three msg() bugs found by
+ -Wformat.
+
+Sat Jul 30 22:58:33 2005 Ben Pfaff <blp@gnu.org>
+
+ * rank.q: (parse_rank_function) Fix msg() bug found by -Wformat.
+
+Sat Jul 30 22:56:12 2005 Ben Pfaff <blp@gnu.org>
+
+ * postscript.c: (postopen) Cast `char' to `unsigned char' before
+ passing to isspace().
+
+Sat Jul 30 22:52:09 2005 Ben Pfaff <blp@gnu.org>
+
+ * pfm-read.c: (read_variables) Fix msg() bug found by -Wformat.
+
+Sat Jul 30 22:50:57 2005 Ben Pfaff <blp@gnu.org>
+
+ * histogram.c: Include <config.h>.
+
+Sat Jul 30 22:48:50 2005 Ben Pfaff <blp@gnu.org>
+
+ * get.c: (cmd_match_files) Fix msg() bug found by -Wformat.
+
+Sat Jul 30 22:46:10 2005 Ben Pfaff <blp@gnu.org>
+
+ * format.c: (check_common_specifier) Fix msg() bug found by
+ -Wformat.
+ (check_output_specifier) Ditto.
+
+Sat Jul 30 22:43:57 2005 Ben Pfaff <blp@gnu.org>
+
+ * file-handle.q: (cmd_file_handle) Fix msg() bug found by
+ -Wformat.
+
+Sat Jul 30 22:41:44 2005 Ben Pfaff <blp@gnu.org>
+
+ * data-in.c: (parse_Z) [WORDS_BIGENDIAN] Don't declare buf[], to
+ avoid "unused variable" warning.
+
+Sat Jul 30 22:38:46 2005 Ben Pfaff <blp@gnu.org>
+
+ * command.c: (find_word) Cast `char' to `unsigned char' before
+ passing to isspace().
+
+Sat Jul 30 22:36:29 2005 Ben Pfaff <blp@gnu.org>
+
+ * case.c: (case_compare) Implement as delegating to
+ case_compare_2dict().
+
+Sat Jul 30 22:34:18 2005 Ben Pfaff <blp@gnu.org>
+
+ * algorithm.c: Inclusion of <alloca.h> is unneeded.
+
+Sat Jul 30 22:01:32 2005 Ben Pfaff <blp@gnu.org>
+
+ * Make.build: Don't append -ansi to AM_CFLAGS for GCC. Using
+ -ansi changes the behavior of header files significantly. It
+ causes __STRICT_ANSI__ to be defined, and some headers interpret
+ that as cause to e.g. not use `long long' or __attribute__. The
+ former example is bad when off_t is supposed to be `long long',
+ and the latter prevents -Wformat from working.
+
+Sun Jul 24 20:26:59 2005 Ben Pfaff <blp@gnu.org>
+
+ Get rid of dependency on libgmp by writing our own routine for
+ floating-point base conversion.
+
+ * pfm-write.c: (write_float) Rewrote.
+ (write_int) Rewrote.
+ (pow30_nonnegative) New function.
+ (pow30) New function.
+ (trig_to_char) New function.
+ (format_trig_digits) New function.
+ (recurse_format_trig_int) New function.
+ (format_trig_int) New function.
+ (should_round_up) New function.
+ (try_round_up) New function.
+ (format_trig_double) New function.
+
+Sun Jul 24 18:49:20 2005 Ben Pfaff <blp@gnu.org>
+
+ * data-in.c: (parse_numeric) Allow "1+23" even for F format, for
+ compatibility.
+
+Sun Jul 24 18:47:37 2005 Ben Pfaff <blp@gnu.org>
+
+ * pfm-read.c: (read_version_data) Read and ignore author field.
+
+Wed Jul 6 20:44:27 2005 Ben Pfaff <blp@gnu.org>
+
+ * get.c: (mtf_processing) Don't assume that
+ mtf_compare_BY_values() always returns -1, 0, or 1. Actually, it
+ returns a negative, zero, or positive result. Fixes MATCH FILES
+ bug on Mac OS X reported by "Marshall DeBerry" <mdb@radix.net>.
+
+Mon Jul 4 18:01:15 2005 Ben Pfaff <blp@gnu.org>
+
+ * flip.c: [HAVE_SYS_TYPES_H] Really include <sys/types.h>. The
+ preprocessor test for sys/types.h was accidentally inverted. This
+ was bug 12789.
+
+Sun Jul 3 22:47:39 2005 Ben Pfaff <blp@gnu.org>
+
+ * get.c: (cmd_match_files) Fix memory leak on `by' and on
+ `vfm_source'.
+
+ * getline.c: [HAVE_LIBREADLINE] (read_console) Fix memory leak on
+ `line'.
+
+ * vfm.c: (close_active_file) Remove unnecessary test.
+
+Sun Jul 3 21:45:32 2005 Ben Pfaff <blp@gnu.org>
+
+ Fix NDEBUG compile errors.
+
+ * hash.h: Needed explicit #include <assert.h>.
+
+ * linked-list.c: (ll_next) First arg is UNUSED when NDEBUG is
+ defined.
+
+Sun Jun 12 23:44:38 2005 Ben Pfaff <blp@gnu.org>
+
+ Implement embedding for PostScript driver. Fixes bug 12970.
+
+ * ascii.c: Fix compiler warnings.
+
+ * html.c: Ditto.
+
+ * chart.h: Add `file' member.
+
+ * output.h: (struct outp_class) initialise_chart, finalise_chart
+ should take outp_driver *, not outp_class *. Update all
+ references.
+
+ * plot-chart.c: (chart_create) Fix segfault when there are no
+ output drivers at all.
+ (chart_submit) Call d->class->finalise_chart.
+
+ * postscript.c: (ps_open_page) Set cp_y to 0.
+ (ps_submit) New function.
+ (ps_chart_initialise) Implement.
+ (ps_chart_finalise) Implement.
+ (static var postscript_class) Add ps_submit.
+ (static var epsf_class) Add ps_submit.
+
+
+Sun Jun 12 14:54:40 2005 Ben Pfaff <blp@gnu.org>
+
+ Did some more work on bug 12859 and then realized that a *good*
+ solution would require some fundamental restructuring. For now,
+ I'm marking REPEATING DATA unimplemented, and then we can revisit
+ it post-0.4.0.
+
+ * command.def: Make REPEATING DATA unimplemented.
+
+ * data-list.c: (cmd_repeating_data) Assume inline file is 80
+ characters wide.
+ (realize_value) Revert previous changes; no longer needed.
+ Updated all callers.
+
+ * error.c: (err_hcf) Set nfile_loc, mfile_loc to 0 after freeing
+ file_loc, to avoid bad references later.
+
+ * str.c: Fix typo.
+
+Tue Jun 7 00:14:09 2005 Ben Pfaff <blp@gnu.org>
+
+ Make some code tolerant of reentry. Should not be needed if other
+ code is correct but it is good to be generally tolerant.
+
+ * error.c: (err_hcf) Set file_loc to null after free().
+
+ * output.c: (outp_done) Similar changes.
+
+ * str.c: (ds_destroy) Ditto.
+
+Tue Jun 7 00:10:20 2005 Ben Pfaff <blp@gnu.org>
+
+ Continue work on bug 12859, plus some code cleanup.
+
+ * data-list.c: (cmd_repeating_data) Replace `seen' bitmap by
+ boolean variables. Don't try to compute starts_end, cont_end for
+ inline file. Calculate length only after parsing variable
+ specifications. Add proper transformation to list.
+ (realize_value) If the rpd_num_or_var has no value, return new
+ DEFAULT_MEMBER argument (for use with inline file).
+ (repeating_data_trns_proc) Pass default values.
+
+ * dfm-read.c: (dfm_close_reader) Only skip data if *not* still
+ open, and only if we actually started reading data.
+
+Sun Jun 5 18:39:36 2005 Ben Pfaff <blp@gnu.org>
+
+ Fix bug 11894.
+
+ * output.c: (outp_read_devices) Fix message.
+
+Fri May 27 12:34:43 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * sort-prs.[ch] (newfiles), aggregate.c, sort.[ch]: Separated the guts
+ of the sort algorithm from the parser for the SORT command.
+
+ * rank.q: Added the parser for the RANK command.
+
+Thu May 26 12:29:21 2005 Ben Pfaff <blp@gnu.org>
+
+ Fix bug 13192.
+
+ * sort.c: (sort_parse_criteria) Only set *saw_direction if
+ saw_direction is non-null. Thanks to John Darrington for
+ reporting this bug.
+
+Tue May 24 21:52:55 2005 Ben Pfaff <blp@gnu.org>
+
+ * get.c: (mtf_processing) Handle case of a lookup table as the
+ active file. Thanks to John Darrington for reporting this bug.
+
+Wed May 25 10:27:02 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * alloc.c alloc.h: (xcalloc) changed signature to imitate the
+ POSIX calloc function.
+
+ * crosstabs.q get.c vars-prs.c: Updated calls to xcalloc to
+ reflect new signature.
+
+ * sfm-read.c: Now much more robust in the face of badly formed
+ system files.
+
+Mon May 23 11:57:31 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ *sfm-read.c: Fixed some bugs regarding long string continuation
+ records, which the previous fix uncovered.
+
+Sat May 21 12:48:34 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * sfm-read.c, sfmP.h: Allow reading of system files when the
+ case_size value in the header is -1. Also changed some Errors to
+ Warnings when reading system files.
+
+Tue May 17 21:00:57 2005 Ben Pfaff <blp@gnu.org>
+
+ * data-list.c: (data_list_trns_free) Don't free the argument
+ because cancel_transformations() will do that itself.
+ (data_list_source_destroy) Destroy the argument to
+ data_list_trns_free(), because it no longer does so itself.
+
+Tue May 17 18:29:35 2005 Ben Pfaff <blp@gnu.org>
+
+ * data-out.c: (format_and_round) Don't output leading `-' if value
+ rounds to zero.
+
+Tue May 17 00:06:43 2005 Ben Pfaff <blp@gnu.org>
+
+ Fix bug 11119.
+
+ * som.c: (output_encodings) If some cell in the table won't fit
+ with the horizontal or vertical headers, cancel those headers.
+
+ * som.h: (struct som_table_class) Add fits_width, fits_length,
+ set_headers members.
+
+ * tab.c: (tabi_fits_width) New function.
+ (tabi_fits_length) New function.
+ (tabi_set_headers) New function.
+ (global var tab_table_class) Add the new functions as appropriate
+ members.
+
+Mon May 16 22:34:06 2005 Ben Pfaff <blp@gnu.org>
+
+ Fix rest of bug 13054.
+
+ * format.def: Fix EDATE, SDATE, ADATE, JDATE, QYR, MOYR, WKYR,
+ DATETIME, TIME system/portable file values.
+
+Mon May 16 22:31:15 2005 Ben Pfaff <blp@gnu.org>
+
+ * data-list.c: (parse_free) Use make_input_format().
+
+ * data-out.c: (num_to_string) Use make_output_format().
+
+ * dictionary.c: (dict_create_var) Ditto.
+
+ * format.c: (global var f8_2) New var.
+ (make_input_format) New function.
+ (make_output_format) New function.
+
+ * get.c: (cmd_match_files) Use make_output_format().
+
+ * list.q: (cmd_list) Ditto.
+
+ * matrix-data.c: Ditto.
+
+ * sfm-read.c: (parse_format_spec) Check output specifier
+ thoroughly.
+
+ * tab.c: (tab_float) Use make_output_format().
+
+Sun May 15 23:38:10 2005 Ben Pfaff <blp@gnu.org>
+
+ Fix more of bug 13054.
+
+ * format.def: FMT_A should allow 255-character output. FMT_AHEX
+ should allow 510-character input and output.
+
+ * data-out.c: (num_to_string) Get rid of NEW_STYLE option.
+ (convert_E) Handle non-finite values.
+ (try_F) Rewrite.
+ (format_and_round) New function.
+ (convert_infinite) New function used by try_F() and convert_E().
+
+Sun May 15 23:36:55 2005 Ben Pfaff <blp@gnu.org>
+
+ Regularize string and buffer function names so that they make some
+ kind of sense.
+
+ * str.c: (mm_reverse) Rename buf_reverse(). Update all
+ references.
+ (mm_find_reverse) Rename buf_find_reverse(). Update all
+ references.
+ (mm_case_compare) Rename buf_compare_case(). Update all
+ references.
+ (st_compare_pad) Rename buf_compare_rpad(). Update all
+ references.
+ (str_compare_rpad) New function.
+ (st_bare_pad_copy) Rename buf_copy_str_rpad(). Update all
+ references.
+ (buf_copy_str_lpad) New function.
+ (st_bare_pad_len_copy) Rename buf_copy_rpad(). Update all
+ references.
+ (st_pad_copy) Rename str_copy_rpad(). Update all references.
+ (st_trim_copy) Rename str_copy_trunc(). Update all references.
+ (st_uppercase) Renamed str_uppercase(). Update all references.
+
+Sat May 14 08:22:26 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * dfm-read.c: Fixed polarity of test in dfm-close-reader. Closes
+ Bug #13082
+
+Tue May 10 20:08:18 2005 Ben Pfaff <blp@gnu.org>
+
+ * data-in.c: (data_in) Add assertion to check input specifier.
+
+ * data-out.c: (data_out) Add assertion to check output specifier.
+
+Tue May 10 19:56:35 2005 Ben Pfaff <blp@gnu.org>
+
+ Start to fix bug 13054.
+
+ * format.c: (check_input_specifier) Improve error message.
+ (check_input_specifier) Check F, COMMA, and DOLLAR formats for
+ valid decimal places.
+ (check_output_specifier) Ditto (but different criteria).
+ (convert_fmt_ItoO) Assert valid input and output specifiers.
+ Also, if input specifier has *any* decimal places, make the output
+ specifier 1 place wider.
+
+Mon May 9 07:14:29 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * sysfile-info.c: Fixed bug [# 13024 ]
+
+Sun May 8 13:52:12 2005 Ben Pfaff <blp@gnu.org>
+
+ "Fix" bug 13021 by disabling FILE TYPE. Eventually, we should
+ actually implement it.
+
+ * command.c: (FILE_TYPE_okay) Always return 1.
+
+ * command.def: Change FILE TYPE, END FILE TYPE into UNIMPL.
+
+ * file-type.c: Add prototypes to get rid of warnings.
+
+Sun May 8 08:08:07 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * barchart.c box-whisker.c cartesian.c piechart.c plot-hist.c: Fixed
+ more ISO/IEC 9899:1990 conformance issues.
+
+Wed May 4 23:54:02 2005 Ben Pfaff <blp@gnu.org>
+
+ Fix bug 12948. See also new test in
+ tests/bugs/match-file-scratch.sh.
+
+ * get.c: (mtf_merge_dictionary) Don't compact dictionary because
+ that deletes scratch variables that someone else might be using,
+ and because we can't reassign our sources' value indexes.
+ Instead, simply don't copy scratch variables into the master
+ dictionary.
+
+ * dictionary.c: (dict_compact_values) Delete variables from the
+ dictionary passed in, not from default_dict (!).
+
+Tue May 3 22:25:17 2005 Ben Pfaff <blp@gnu.org>
+
+ Improve hash.c comments, error-checking.
+
+ * hash.c: (struct hsh_table) [NDEBUG] Add hash_ordered member.
+ (hsh_create) size == 0 should *not* return NULL! Set
+ hash_ordered.
+ (hsh_clear) Set hash_ordered.
+ (locate_matching_entry) Check hash_ordered.
+ (hsh_rehash) Rename rehash(). Add assertion. Set hash_ordered.
+ (hsh_data) Set hash_ordered. Add const-ness to return value and
+ update all callers.
+ (hsh_sort) Ditto.
+
+Wed May 4 08:50:11 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * casefile.c: Removed unnecessary #include <valgrind/valgrind.h>
+
+Tue May 3 19:14:48 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * copyleft.c: Updated copyright date.
+
+ * Makefile.am: Removed erroneous explicit "-lplot"
+
+ * examine.q oneway.q: Made these files conform to ISO/IEC 9899:1990
+
+Tue May 3 16:20:31 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * command.c command.def: Added description string for unimplemented commands.
+
+ * oneway.q: Sorted the hash tables before shipping out the results. Closes
+ bug [#12931].
+
+Mon May 2 23:45:01 2005 Ben Pfaff <blp@gnu.org>
+
+ Code improvements.
+
+ * data-list.c: (parse_fixed) Use lex_end_of_command().
+ (parse_free) Ditto.
+ (cmd_repeating_data) Set cont_end.num in right situations.
+ (parse_repeating_data) Remove redundant test.
+
+Mon May 2 23:37:19 2005 Ben Pfaff <blp@gnu.org>
+
+ Partial fix for bug 12859.
+
+ * data-list.c: (cmd_data_list) Add transformation properly in
+ vfm_source == NULL case.
+
+Mon May 2 23:27:28 2005 Ben Pfaff <blp@gnu.org>
+
+ * lexer.c: (lex_error) Improve error messages.
+
+Mon May 2 22:28:17 2005 Ben Pfaff <blp@gnu.org>
+
+ * get.c: (cmd_match_files) Check token type before trying to match
+ tokid. Fixes bug 12923.
+
+Mon May 2 22:16:51 2005 Ben Pfaff <blp@gnu.org>
+
+ * flip.c: [HAVE_SYS_TYPES_H] Include <sys/types.h>. Fixes bug
+ 12789.
+
+Mon May 2 22:02:52 2005 Ben Pfaff <blp@gnu.org>
+
+ * expressions/generate.pl: (get_token) Make use of /g
+ backward-compatible with Perl 5.6.1.
+
+Sun May 1 23:00:19 2005 Ben Pfaff <blp@gnu.org>
+
+ * var-display.c: (cmd_variable_alignment) Fix memory leak.
+ (cmd_variable_level) Ditto.
+
+Sun May 1 22:49:04 2005 Ben Pfaff <blp@gnu.org>
+
+ Hash table had buggy deletion function. The fix required changing
+ other functions to do probing in the required order.
+
+ * hash.c: (locate_matching_entry) Rewrite and change interface.
+ (hsh_rehash) Rewrite to use locate_matching_entry().
+ (hsh_probe) Ditto.
+ (hsh_find) Ditto.
+ (hsh_delete) Ditto. Also, fix stupid bugs.
+
+Sun May 1 22:24:58 2005 Ben Pfaff <blp@gnu.org>
+
+ * dictionary.c: (dict_clone) Properly copy vectors.
+
+Sun May 1 22:07:58 2005 Ben Pfaff <blp@gnu.org>
+
+ New implementation of long variable names. Each variable has a
+ "normal" name, which may be up to 64 bytes long and which is used
+ for all normal operations. Variables may have a "short" name,
+ which is limited to 8 bytes and used only for system and portable
+ file input and output.
+
+ Make tokid case-preserving. Update most uses of tokid to treat it
+ case-insensitively.
+
+ Update many commands to deal with long variable names.
+
+ * autorecode.c: (cmd_autorecode) Use strcasecmp() instead of strcmp().
+
+ * command.c: (cmd_parse) Ditto.
+ (match_strings) Use toupper() before comparing characters.
+ (conflicting_3char_prefixes) Use mm_case_compare() instead of
+ memcmp().
+ (cmd_match_words) Ditto.
+
+ * compute.c: (lvalue_parse) Use st_trim_copy() instead of
+ strncpy().
+
+ * count.c: (struct cnt_var_info) Change n[] to fit long var name.
+ Use st_trim_copy() instead of strcpy().
+
+ * data-in.c: (parse_enum) Use mm_case_compare() instead of
+ memcmp().
+
+ * data-list.c: (struct dls_var_spec) Change name[] to fit long var
+ name.
+ (parse_free) Use st_trim_copy() instead of strcpy().
+
+ * descript.c: (struct dsc_var) Change z_name[] to fit long var
+ name.
+ (try_name) Use strcasecmp() instead of strcmp().
+ (generate_z_varname) Use st_trim_copy() instead of strcpy().
+ (descriptives_compare_dsc_vars) Use strcasecmp() instead of
+ strcmp().
+
+ * dictionary.c: (struct dictionary) Removed `long_name_tab'
+ member.
+ (compare_long_names) Removed.
+ (hash_long_name) Removed.
+ (dict_create) Don't initialize `long_name_tab' member.
+ (dict_clone) Copy short names into new dictionary.
+ (dict_clear) Don't clear `long_name_tab' member.
+ (dict_get_varname_block) Removed.
+ (dict_add_longvar_entry) Removed.
+ (free_nte) Removed.
+ (dict_destroy) Don't destroy `long_name_tab' member.
+ (dict_create_var_from_short) Removed.
+ (dict_create_var_x) Removed.
+ (dict_create_var) Get rid of longname handling.
+ Clear short name.
+ (dict_clone_var) Get rid of longname parameter and longname
+ handling.
+ (dict_lookup_var) Get rid of longname handling.
+ (dict_reorder_var) New function.
+ (dict_rename_var) Clear short name.
+ (dict_rename_vars) Get rid of longname handling. Clear short
+ names.
+ (dict_create_vector) Support long vector names.
+ (dict_lookup_vector) Use strcasecmp() instead of strcmp().
+ (quasi_base27) Removed.
+ (make_short_name) Removed.
+ (compare_strings) New function.
+ (hash_string) New function.
+ (dict_assign_short_names) New function.
+
+ * file-handle.q: (get_handle_with_name) Use strcasecmp() instead
+ of strcmp().
+ (get_handle_for_filename) Support long handle names.
+
+ * file-type.c: (struct col_spec) Make `name' fit long var names.
+ (cmd_file_type) Use strcasecmp() instead of strcmp().
+
+ * flip.c: (make_new_var) Rewrite.
+ (flip_sink_write) Use st_trim_copy() instead of strncpy().
+
+ * format.c: (parse_format_specifier_name) Use mm_case_compare()
+ instead of memcmp().
+
+ * get.c: (cmd_save_internal) Rephrase.
+ (rename_variables) Drop test for identical variable name.
+ (struct mtf_proc) Change `first', `last' to fit long var name.
+
+ * hash.c: (hsh_hash_case_string) New function for case-insensitive
+ string hashing.
+
+ * lexer.c: (restore_token) Use st_trim_copy() instead of
+ strncpy().
+ (lex_get) Don't uppercase string when copying into tokid.
+ (lex_put_back_id) Use st_trim_copy() instead of
+ strncpy().
+
+ * list.q: (determine_layout) Consider length of variable names in
+ choosing vertical layout.
+
+ * matrix-data.c: (cmd_matrix_data) Use strcasecmp() instead of
+ strcmp().
+ (string_to_content_type) Ditto.
+
+ * modify-vars.c: (compare_variables_given_ordering) Ditto.
+ (struct var_renaming) Change `new_name' to fit long var name.
+ (compare_var_renaming_by_new_name) Use strcasecmp() instead of
+ strcmp().
+
+ * pfm-read.c: (read_variables) Disallow system variables in system
+ files.
+ (write_variables) Call dict_assign_short_names() and use
+ short_name[] members.
+
+ * repeat.c: (internal_cmd_do_repeat) Use strcasecmp() instead of
+ strcmp().
+
+ * sfm-read.c: (sfm_open_reader) Rewrite code for long variable
+ map. Reorder variables into same order as long variable map.
+ (read_variables) Set short name.
+
+ * sfm-write.c: (sfm_open_writer) Call dict_assign_short_names().
+ (write_variable) Use st_bare_pad_copy().
+ (write_longvar_table) Rewrite.
+
+ * str.c: (mm_case_compare) New function.
+
+ * sysfile-info.c: (compare_vectors_by_name) Use strcasecmp()
+ instead of strcmp().
+
+ * t-test.q: (tts_custom_groups) Remove redundant test.
+ (tts_custom_pairs) Ditto.
+
+ * var.h: (struct variable) Change `name' to fit long var names.
+ Remove `longname'. Add `short_name' member. Reorder some
+ variables.
+ (struct name_table_entry) Removed.
+ (struct vector) Change `name' to fit long vector names.
+
+ * vars-atr.c: (var_is_valid_name) Allow long var names.
+ (compare_var_names) Use strcasecmp() instead of strcmp().
+ (compare_var_ptr_names) Ditto.
+ (hash_var_name) Use hsh_hash_case_string().
+ (hash_var_ptr_name) Ditto.
+ (var_set_short_name) New function.
+ (var_clear_short_name) New function.
+ (var_set_short_name_suffix) New function.
+
+ * vars-prs.c: (parse_DATA_LIST_vars) Support long names.
+ Use strcasecmp() instead of strcmp().
+ (struct array_var_set) Removed `longname_tab'.
+ (array_var_set_lookup_var_idx) Drop longname_tab support.
+ (array_var_set_destroy) Don't destroy `longname_tab'.
+ (var_set_create_from_array) Don't create `longname_tab'.
+
+ * vector.c: (cmd_vector) Use strcasecmp() instead of strcmp().
+ Support long names.
+
+ * expressions/parse.c: (word_matches) Use mm_case_compare()
+ instead of memcmp().
+ (compare_strings) New function.
+ (lookup_function) Use compare_strings() instead of strcmp().
+
+Sun May 1 22:07:43 2005 Ben Pfaff <blp@gnu.org>
+
+ * algorithm.c: (move_element) New function.
+
+Sun May 1 22:05:35 2005 Ben Pfaff <blp@gnu.org>
+
+ * aggregate.c: (parse_aggregate_functions) Always initialize
+ destvar.
+
+Sun May 1 22:03:47 2005 Ben Pfaff <blp@gnu.org>
+
+ * aggregate.c: (cmd_aggregate) Use dict_clone_var_assert().
+
+ * dictionary.c: (dict_clone) Ditto.
+ (dict_clone_var_assert) New function.
+
+ * get.c: (mtf_merge_dictionary) Use dict_clone_var_assert().
+
+Sun May 1 15:05:54 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * error.c: Added a string for the compiler version to the
+ request_bug_report_and_abort function.
+
+ * groff_font.c, font.c: Removed manpage(1) style references from
+ comments, because RMS frowns upon them.
+
+Thu Apr 28 18:52:06 2005 Ben Pfaff <blp@gnu.org>
+
+ * expressions/parse.c: Improve previous fix for bug 12858 (LAG).
+
+Fri Apr 29 09:28:00 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * expressions/parse.c: Added handler for OP_LAG_Vn and OP_LAG_Vs.
+ Fixed bug [#12858] .
+
+Wed Apr 27 12:42:34 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * loop.c recode.c repeat.c: Fixed a couple of instances of SHORT_NAME_LEN
+ which should be LONG_NAME_LEN
+
+Wed Apr 27 07:43:50 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * command.def echo.c: Added the ECHO command.
+
+Mon Apr 25 22:55:59 2005 Ben Pfaff <blp@gnu.org>
+
+ Finish fixing MATCH FILES (bug 11677).
+
+ * get.c: (trim_dictionary) Rewrite in terms of drop_variables(),
+ keep_variables(), rename_variables().
+ (drop_variables) New function.
+ (keep_variables) New function.
+ (struct mtf_file) Rename `in' to `in_name'. Add `in_var'.
+ (cmd_match_files) Deal with in_var. Use drop_variables(),
+ keep_variables(). When IN is specified, require BY. Set master
+ variables after master dictionary is complete. Add IN variables
+ after master dictionary is complete.
+ (mtf_free_file) Free `in_name'.
+ (mtf_delete_file_in_place) Set in_var value to 0.
+ (mtf_read_nonactive_records) Rephrase.
+ (mtf_processing) Support IN. Rephrase. Fix bugs.
+ (mtf_merge_dictionary) Don't set master variables; we do that
+ later now.
+ (get_master) Don't insist that there's a master variable.
+
+Mon Apr 25 22:55:22 2005 Ben Pfaff <blp@gnu.org>
+
+ Kluge to make some variable renaming sort of work.
+ Needs real fix.
+
+ * dictionary.c: (dict_rename_var) Call dict_add_longvar_entry().
+
+Mon Apr 25 22:52:28 2005 Ben Pfaff <blp@gnu.org>
+
+ Add functions for comparing sets of variables between cases.
+ Use the functions.
+
+ * case.c: (case_compare) New function.
+ (case_compare_2dict) New function.
+
+ * aggregate.c: (struct agr_proc) Remove `prev_break' member. Add
+ `break_case'.
+ (cmd_aggregate) Nullify break_case. Don't call
+ initialize_aggregate_info().
+ (agr_destroy) Destroy break_case.
+ (aggregate_single_case) Rewrite. Use case_compare().
+ (dump_aggregate_info) Copy from break_case into output.
+ (initialize_aggregate_info) Copy break_case from input.
+
+ * get.c: (mtf_compare_BY_values) Use case_compare_2dict().
+
+ * vfm.c: (equal_splits) Use case_compare().
+
+Sat Apr 23 17:01:04 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * dictionary.c vars-prs.c sfm-write.c: Fixed some memory leaks
+
+Sun Apr 17 23:08:15 2005 Ben Pfaff <blp@gnu.org>
+
+ Start work on fixing MATCH FILES.
+
+ * get.c: (enum operation) Remove OP_MATCH.
+ (trim_dictionary) Change return value to bool. Don't support
+ OP_MATCH.
+ (struct mtf_file) Remove `first', `last' members.
+ (struct mtf_proc) Add `first', `last' members. Change mtf_case
+ from `struct ccase *' to `struct ccase'. Remove `by' member.
+ (cmd_match_files) Essentially rewrite.
+ (mtf_free) Don't free `by' member. Destroy `mtf_case' member.
+ (mtf_read_nonactive_records) mtf_ parameter is not unused.
+ (mtf_processing) Ditto. Also rephrase some code.
+ (mtf_merge_dictionary) Rewrite for easy comprehension.
+
+Sun Apr 17 23:06:00 2005 Ben Pfaff <blp@gnu.org>
+
+ * matrix-data.c: (wr_output_data) [DEBUGGING] Fix compilation
+ error.
+
+ * q2c.c: (dump_token) [DEBUGGING] Fix compilation error.
+
+Thu Apr 14 2005 John Darrington
+
+ * var-display.c: New file.
+
+ * format.h var.h sfm-read.c sfm-write.c dictionary.c : Added
+ display_width, measure and alignment parameters to variables.
+
+ * aggregate.c command.def compute.c count.c data-list.c descript.c
+ dictionary.c dictionary.h expr-prs.c file-type.c flip.c get.c
+ lexer.c lexer.h loop.c modify-vars.c pfm-read.c recode.c repeat.c
+ sfm-read.c sfm-write.c sfm-write.h sfmP.h val-labs.c val.h var.h
+ vars-prs.c vector.c :
+ - Replaced literal constants representing maximum variable name
+ length with macro definitions.
+ - Added support for long variable names.
+ - Changed lexer such that it no longer makes tokens upper
+ case, but relies upon case insensitive behaviour of commands.
+
+Mon Apr 4 22:27:34 2005 Ben Pfaff <blp@gnu.org>
+
+ * aggregate.c: (parse_aggregate_functions) If dict_create_var()
+ fails, don't dereference the resulting null pointer (bug 12427).
+ Also, fix double free error.
+
+Sat Mar 19 23:06:02 2005 Ben Pfaff <blp@gnu.org>
+
+ * aggregate.c: (parse_aggregate_functions) Fix N_NO_VARS format.
+ (accumulate_aggregate_info) Set int1 to 1 for SUM.
+ (dump_aggregate_info) Only make SUM non-missing if there was at
+ least one variate.
+
+Sat Mar 19 14:48:19 2005 Ben Pfaff <blp@gnu.org>
+
+ * aggregate.c: (dump_aggregate_info) Properly test whether the
+ destination variable is numeric, when making the result
+ system-missing for columnwise missing values.
+
+Mon Mar 14 21:52:34 2005 Ben Pfaff <blp@gnu.org>
+
+ * misc.h: Remove GCC specializations.
+
+Mon Mar 14 21:07:23 2005 Ben Pfaff <blp@gnu.org>
+
+ Make sort stable (bug 12313).
+
+ * sort.c: Don't need to include some headers anymore.
+ (static var min_buffers) New variable.
+ (static var max_buffers) New variable.
+ (static var allow_internal_sort) New variable.
+ (cmd_sort_cases) Add test mode.
+ (sort_execute) Rephrase.
+ (do_internal_sort) Don't try internal sorting if
+ allow_internal_sort is set.
+ (struct external_sort) Renamed `initial_runs' to `runs' and
+ updated all references.
+ (macro MIN_BUFFER_TOTAL_SIZE_RECS) Removed.
+ (macro MIN_BUFFER_SIZE_BYTES) Removed.
+ (macro MIN_BUFFER_SIZE_RECS) Removed.
+ (compare_initial_runs) Removed.
+ (struct record_run) Add member `idx'.
+ (write_initial_runs) Pass increasing values to process_case() as
+ index.
+ (process_case) Add `idx' parameter and use it to initialize new
+ `idx' member.
+ (allocate_cases) Limit allocated buffers to max_buffers.
+ (compare_record_run) Use new `idx' member for last resort
+ comparison, for stability.
+ (end_run) Call casefile_sleep() on irs->casefile, to prevent
+ running out of file descriptors.
+ (struct merge_state) Removed.
+ (merge) Don't need to allocate cases. Always use MAX_MERGE_ORDER
+ unless we have fewer runs left. Always merge consecutive runs,
+ for stability. Return the final run.
+ (mod) Removed.
+ (choose_merge) New function.
+ (merge_once) Rewritten.
+
+Mon Mar 14 21:05:42 2005 Ben Pfaff <blp@gnu.org>
+
+ * cmdline.c: (static var testing_mode) Move into
+ parse_command_line().
+
+Mon Mar 14 21:05:13 2005 Ben Pfaff <blp@gnu.org>
+
+ * algorithm.c: (remove_range) New function.
+ (remove_element) New function.
+
+ * dictionary.c: (dict_delete_var) Use remove_element().
+
+ * flip.c: (cmd_flip) Ditto.
+
+Sun Mar 13 22:52:05 2005 Ben Pfaff <blp@gnu.org>
+
+ * file-handle.q: (struct file_handle) `open_mode' should not be
+ const.
+
+Sun Mar 13 22:40:54 2005 Ben Pfaff <blp@gnu.org>
+
+ First phase of making SORT CASES stable (bug 12313).
+
+ * sort.c: (struct indexed_case) New structure.
+ (do_internal_sort) Rewrite to make internal sorting stable.
+ (compare_case_dblptrs) Removed.
+ (compare_indexed_cases) New function.
+
+Sun Mar 13 22:38:40 2005 Ben Pfaff <blp@gnu.org>
+
+ Clean-ups.
+
+ * casefile.c: (casereader_read_xfer_assert) New function.
+
+ * dictionary.c: (dict_compact_case) New function.
+
+ * flip.c: (struct flip_pgm) New member idx_to_fv.
+ (cmd_flip) Initialize idx_to_fv member.
+ (destroy_flip_pgm) Free idx_to_fv member.
+ (flip_sink_write) Use struct flip_pgm member instead of case_sink
+ member.
+ (flip_sink_write) Ditto.
+
+ * vfm.c: (write_case) Use dict_compact_case() instead of
+ compact_case().
+ (compact_case) Removed.
+ (storage_source_create) Removed `dict' parameter. All references
+ updated.
+
+ * vfm.h: (struct case_source) Removed `value_cnt' member. All
+ references removed.
+ (struct case_sink) Removed `dict', `idx_to_fv' members. All
+ references removed.
+
+Sun Mar 13 22:35:55 2005 Ben Pfaff <blp@gnu.org>
+
+ More AGGREGATE fixes.
+
+ * aggregate.c: (accumulate_aggregate_info) Implement NMISS and
+ NUMISS for strings. Fix FOUT, POUT, FGT, FLT, FIN, FOUT for
+ strings.
+ (initialize_aggregate_info) Fix initialization for MIN, MAX for
+ strings.
+
+Sat Mar 12 23:26:21 2005 Ben Pfaff <blp@gnu.org>
+
+ Start work on testing and debugging AGGREGATE.
+
+ * aggregate.c: (cmd_aggregate) Use discrete bool variables instead
+ of a bit-map. Require proper subcommand ordering. Make OUTFILE
+ subcommand mandatory.
+ (parse_aggregate_functions) Check that PIN, POUT, FIN, FOUT
+ functions' arguments are in the correct order and swap them if
+ not.
+ (accumulate_aggregate_info) Make SUM include weights. Add various
+ string functions.
+ (dump_aggregate_info) Add various string functions.
+ (initialize_aggregate_info) Initialize int1 for MIN, MAX.
+
+ * sort.c: (sort_parse_criteria) Add parameter for returning
+ whether any directions were specified. All callers updated.
+
+Sun Mar 13 14:54:27 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * t-test.q: Fixed erroneous logic in compare_group_binary.
+
+Sat Mar 12 13:29:21 2005 Ben Pfaff <blp@gnu.org>
+
+ * split-file.c: (cmd_split_file) Ignore LAYERED and SEPARATE
+ keywords (bug 11628).
+
+Sat Mar 12 13:17:12 2005 Ben Pfaff <blp@gnu.org>
+
+ * vfm.c: (procedure_with_splits) Fix bug 11492: end_func() must be
+ called *before* close_active_file().
+
+Sat Mar 12 12:20:57 2005 Ben Pfaff <blp@gnu.org>
+
+ * file-handle.q: (struct file_handle) Change open_mode from
+ character pointer to 3-char array, for safety. Updated all
+ references.
+
+Sat Mar 12 12:15:49 2005 Ben Pfaff <blp@gnu.org>
+
+ Thanks to Ben Kujala <bkujala@oregonchildcare.org> for reporting
+ these bugs.
+
+ * pfm-read.c: (read_header) Improve error message for many cases
+ in which the input is not actually a portable file.
+
+ * file-handle.q: (fh_open) When we give an error message, actually
+ return NULL.
+
+Fri Mar 11 11:50:30 2005 Ben Pfaff <blp@gnu.org>
+
+ * format.c: (check_common_specifier) New function for checks
+ common to check_input_specifier() and check_output_specifier().
+ (check_input_specifier) Use check_common_specifier().
+ (check_output_specifier) Use check_common_specifier().
+ (check_string_specifier) Removed.
+ (check_specifier_type) New function.
+ (check_specifier_width) New function.
+ (get_format_var_width) Fix bug.
+
+ * formats.c: (internal_cmd_formats) Only accept numeric variables.
+
+ * lexer.c: (check_id) Rename lex_id_to_token(), make public,
+ update all references. Make case-insensitive.
+
+ * pfm-read.c: Essentially rewrite the whole file. Now much
+ cleaner.
+
+ * print.c: (check_string_width) New function.
+ (fixed_parse_compatible) Use check_string_width(),
+ check_specifier_type().
+ (dump_fmt_list) Ditto.
+
+ * str.c: (st_trim_copy) New function.
+ (st_uppercase) New function.
+
+ * vars-atr.c: (var_is_valid_name) New function.
+
+ * expressions/parse.c: (type_coercion_core) Use
+ check_specifier_type().
+
+Fri Mar 11 11:31:24 2005 Ben Pfaff <blp@gnu.org>
+
+ * expressions/evaluate.c: (cmd_debug_evaluate) Fix memory leaks.
+
+ * expressions/parse.c: (no_match) Ditto.
+
+Wed Mar 9 09:54:27 2005 Ben Pfaff <blp@gnu.org>
+
+ * Makefile.am: (pspp_LDADD) Add libgsl-extras.a.
+
+ * expressions/helpers.c: (struct func_params) Removed.
+ (generalized_idf) Removed.
+ (cdf_beta) Removed.
+ (idf_beta) Removed.
+ (idf_fdist) Use gslextras_cdf_beta_Pinv() instead of idf_beta().
+
+ * expressions/operations.def: Implement IDF.BETA, CDF.BINOM,
+ CDF.GEOM, CDF.HYPER, CDF.NEGBIN, CDF.POISSON using gsl-extras.
+ Implement SIG.F, which I had overlooked previously.
+
+Tue Mar 8 12:47:53 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * command.c command.def glob.[ch] cmdline.c: Made DEBUG cmds
+ available only in testing mode.
+
+Sun Mar 6 23:25:40 2005 Ben Pfaff <blp@gnu.org>
+
+ * data-in.c: Use `bool' throughout, where relevant.
+
+Sun Mar 6 19:52:22 2005 Ben Pfaff <blp@gnu.org>
+
+ DATA LIST with free-field formats should not have implied decimal
+ places (bug 12035). Also clean up data-in.c a bit.
+
+ * data-in.h: (enum) Add DI_IMPLIED_DECIMALS.
+
+ * data-in.c: (apply_implied_decimals) New function.
+ (parse_numeric) Don't adjust exponent if DI_IMPLIED_DECIMALS not
+ set. Also, get rid of gotos.
+ (parse_Z) Use apply_implied_decimals() if the field doesn't
+ contain a decimal point.
+ (parse_N) Use apply_implied_decimals().
+ (parse_IB) Ditto.
+ (parse_PIB) Ditto.
+ (parse_P) Ditto.
+ (parse_PK) Ditto.
+ (to_roman) Removed.
+ (parse_enum) New function.
+ (macro CHAR_IS_ROMAN) Removed.
+ (macro ROMAN_VALUE) Removed.
+ (parse_month) Use parse_enum().
+ (parse_weekday) Use parse_enum().
+ (parse_DATETIME) Use long for weekday.
+
+ * data-list.c: (read_from_data_list_fixed) Use
+ DI_IMPLIED_DECIMALS.
+
+Sun Mar 6 17:07:20 2005 Ben Pfaff <blp@gnu.org>
+
+ When the lexer sees something like `-5' in the input, it has to
+ decide whether it's a negative numeric constant token or a '-'
+ token followed by a positive numeric constant token. It always
+ decides on the former, and then the parser can call
+ lex_negative_to_dash() if it wants the latter. However, this
+ doesn't work for the case of `-0', because negative zero is
+ (portably) indistinguishable from positive zero. So now we divide
+ T_NUM into two tokens, T_POS_NUM and T_NEG_NUM, to make the
+ distinction clear. This requires a little bit of extra effort,
+ because there were several references to T_NUM in the code base.
+
+ * lexer.c: (lex_get) Use T_NEG_NUM and T_POS_NUM to distinguish
+ positive and negative numeric constants.
+ (lex_double_p) Renamed lex_is_number(). Changed return type to
+ bool. Updated all relevant references to T_NUM to instead use
+ this function.
+ (lex_double) Renamed lex_number(). All references updated.
+ (lex_integer_p) Renamed lex_is_integer(). Changed return type to
+ bool. All references updated.
+ (lex_token_representation) Understand T_NEG_NUM and T_POS_NUM.
+ (lex_negative_to_dash) Ditto.
+ (dump_token) Ditto.
+
+ * lexer.h: (enum) Add T_POS_NUM, T_NEG_NUM. Remove T_NUM.
+
+Sun Mar 6 22:09:20 2005 Ben Pfaff <blp@gnu.org>
+
+ * expressions/operations.def: (NUMBER) Use DI_IMPLIED_DECIMALS.
+
+Sun Mar 6 19:33:24 2005 Ben Pfaff <blp@gnu.org>
+
+ * expressions/operations.def: (VEC_ELEM_NUM) Treat user-missing
+ values as system-missing.
+
+ * expressions/parse.c: (parse_vector_element) Fix order of
+ arguments in call to expr_allocate_binary().
+
+Sun Mar 6 17:51:05 2005 Ben Pfaff <blp@gnu.org>
+
+ * expressions/optimize.c: (optimize_tree) Fix optimization bug for
+ x**2.
+
+ * expressions/parse.c: (type_coercion_core) Set *node to NULL on
+ failure, as indicated by function comment.
+ (parse_binary_operators) Always return NULL on type_coercion()
+ failure. Should have been doing this anyway, but bug in
+ type_coercion_core() filtered through.
+ (parse_add) Fix typo in user message.
+ (parse_primary) Understand T_NEG_NUM and T_POS_NUM.
+
+Sun Mar 6 10:47:13 2005 Ben Pfaff <blp@gnu.org>
+
+ * expressions/operations.def: Add VALUE function.
+
+ * expressions/parse.c: (parse_function) Need an unary composite
+ node for variables in A TO B, not a variable node. Use
+ allocate_unary_variable().
+ (parse_primary) Use allocate_unary_variable().
+ (allocate_unary_variable) New function.
+
+Thu Mar 3 23:53:32 2005 Ben Pfaff <blp@gnu.org>
+
+ * expressions/PSPP_expressions.pm: Renamed it back to generate.pl
+ but fixed the real problem that was preventing the build from a
+ separate directory. I liked it my way better ;-)
+
+Thu Mar 3 23:17:51 2005 Ben Pfaff <blp@gnu.org>
+
+ * expressions/parse.c: (expr_parse) Fix parameter type. Thanks to
+ John Darrington <john@darrington.wattle.id.au> for reporting this
+ bug.
+
+Thu Mar 3 22:10:25 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * expressions/Makefile.am expressions/evaluate.h.pl
+ expressions/evaluate.inc.pl expressions/operations.h.pl
+ expressions/optimize.inc.pl expressions/parse.inc.p:
+
+ Renamed generate.pl to PSPP_expressions.pm and adjusted *.pl
+ to suit.
+
+ Fixed everything so that it can be built from an arbitrary
+ directory.
+
+Thu Mar 3 22:08:35 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * Makefile.am : Fixed up CLEANFILES target.
+
+Mon Feb 28 23:49:56 2005 Ben Pfaff <blp@gnu.org>
+
+ * str.h: Changed `struct len_string' to `struct fixed_string', a
+ more accurate name. Updated all references.
+
+Mon Feb 28 23:35:30 2005 Ben Pfaff <blp@gnu.org>
+
+ Redo calendar support. Should now be bug-for-bug compatible.
+
+ * calendar.c: New file.
+
+ * calendar.h: New file.
+
+ * data-in.c: Use new calendar functions.
+ (parse_sign) Change sense of return value.
+ (calendar_error) New function.
+ (ymd_to_ofs) New function.
+ (ymd_to_date) New function.
+ (parse_DATE) Use new function.
+ (parse_ADATE) Ditto.
+ (parse_EDATE) Ditto.
+ (parse_SDATE) Ditto.
+ (parse_JDATE) Ditto.
+ (parse_QYR) Ditto.
+ (parse_MOYR) Ditto.
+ (parse_WKYR) Ditto.
+ (parse_TIME) Ditto.
+ (parse_DTIME) Ditto.
+ (parse_DATETIME) Ditto.
+
+ * data-out.c: (convert_date) Use new calendar functions.
+
+ * error.c: (err_vmsg) Changed interface to be more sensible.
+ Updated all callers.
+ (dump_message) Don't double new-lines (why did we do this
+ anyway?).
+
+Mon Feb 28 23:30:25 2005 Ben Pfaff <blp@gnu.org>
+
+ * sfmP.h: (macro flt64) Moved here from pref.h.orig.
+ (macro FLT64_MAX) Moved here from pref.h.orig.
+
+Mon Feb 28 23:28:01 2005 Ben Pfaff <blp@gnu.org>
+
+ * set.q: Support SET EPOCH.
+ (static var set_epoch) New var.
+ (aux_stc_custom_epoch) New function.
+ (stc_custom_epoch) New function.
+ (get_epoch) New function.
+ (stc_custom_pager) [USE_INTERNAL_PAGER] Fix bug.
+
+ * format.c: Make it possible just to check whether a specifier is
+ valid without emitting an error message.
+ (parse_format_specifier_name) Change interface, update all
+ callers.
+ (check_input_specifier) Ditto.
+ (check_output_specifier) Ditto.
+ (parse_format_specifier) Ditto.
+
+Mon Feb 28 23:24:08 2005 Ben Pfaff <blp@gnu.org>
+
+ * command.def: Add DEBUG POOL.
+
+ * pool.c: (pool_destroy) Fix bug in deleting this pool from its
+ parent.
+ (pool_clear) Properly account for size of pool gizmo.
+ (pool_realloc) Ditto.
+ (pool_clone) New function.
+
+ * pool.h: Mark our allocation functions MALLOC_LIKE.
+
+Mon Feb 28 23:21:26 2005 Ben Pfaff <blp@gnu.org>
+
+ * Makefile.am: Move many definitions into new top-level
+ Make.build. Add expressions to SUBDIRS. Add calendar.c,
+ calendar.h. Remove expr-evl.c, expr-opt.c expr-prs.c, expr.h,
+ exprP.h, expr.def.
+
+ * case.c: (case_resize) New function.
+ (case_swap) New function.
+
+ * casefile.c: Include mkfile.h.
+
+Fri Feb 25 21:11:35 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * sfm-read.c: Fixed a buglet which caused a crash when trying
+ to read a non-existent file.
+
+Sun Feb 13 16:11:13 2005 Ben Pfaff <blp@gnu.org>
+
+ Fix bug 11955.
+
+ * aggregate.c: (parse_aggregate_functions) Code cleanup.
+ Important part: get rid of spurious copying of function->format to
+ destvar->print and destvar->write.
+
+Fri Feb 11 00:08:36 2005 Ben Pfaff <blp@gnu.org>
+
+ Fix bug 11916, which was confusing a variable's `index' member
+ with the variable's position in a var_set. Although these are
+ usually the same, they are not for array `var_set's.
+
+ Took advantage of this bug as an opportunity to clean up and
+ rewrite parse_var_set_vars().
+
+ * vars-prs.c: (parse_vs_variable_idx) New function.
+ (parse_vs_variable) Reimplement in terms of
+ parse_vs_variable_idx().
+ (parse_var_idx_class) New function.
+ (add_variable) New function.
+ (add_variables) New function.
+ (parse_var_set_vars) Rewritten.
+ (struct var_set) Change `lookup_var' member that returns a
+ variable into `lookup_var_idx' member that returns an int.
+ Updated the var set implementations in obvious corresponding ways.
+ Used compare_var_ptr_names(), hash_var_ptr_name() just added.
+
+Fri Feb 11 00:06:03 2005 Ben Pfaff <blp@gnu.org>
+
+ Use our global variable compare & hash functions and give them
+ better names. Add similar functions for dealing with double
+ pointers to variables.
+
+ * vars-atr.c: (compare_variables) Renamed compare_var_names().
+ (hash_variable) Renamed hash_var_name().
+ (compare_var_ptr_names) New function.
+ (hash_var_ptr_name) New function.
+
+ * t-test.q: (cmd_t_test) Use global compare_var_names(),
+ hash_var_name().
+ (compare_var_name) Removed.
+ (hash_var_name) Removed.
+
+Fri Feb 11 00:04:39 2005 Ben Pfaff <blp@gnu.org>
+
+ Fix dictionary bug.
+
+ * dictionary.c: (compare_variable_dblptrs) Rename
+ compare_var_ptrs() and fix it to properly dereference the double
+ pointers.
+
+Mon Feb 7 09:58:15 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ crosstabs.q examine.q oneway.q q2c.c: Added a q2c feature to
+ declare subcommands as mandatory. Closed bug #11843
+
+Sat Feb 5 20:35:10 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * getline.c command.[ch] command.def: Added (very rudimentary)
+ support for line completion when in interactive mode. Partially
+ addresses bug #11693
+
+Mon Jan 31 09:52:51 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * examine.q factor_stats.c oneway.q output.c pfm-read.c: Fixed some
+ problems revealed by valgrind.
+
+
+Wed Jan 26 11:44:11 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * set.q: Affixed a fix to the previous fix such that we'll be OK now
+ whether or not PAGER is set.
+
+Wed Jan 26 09:25:54 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * set.q: Copied the string produced by getenv("PAGER") thus avoiding
+ "invalid free" errors. Hopefully fixes bug #11722
+
+ * compute.c expr-prs.c: Check that lvalues are populated before
+ attempting to destroy them. Closes bug #11676
+
+Tue Jan 25 21:01:43 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * aggregate.c: Initialised the complete agr_proc structure.
+ Closes bug #11675
+
+
+Sun Jan 23 23:02:21 2005 Ben Pfaff <blp@gnu.org>
+
+ * print.c: (print_trns_free) Close the dfm writer if there is one,
+ fixing a memory leak.
+
+Mon Jan 24 12:24:36 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * glob.c oneway.q q2c.c t-test.q vfm.c: Still *more* memory leaks
+ fixed.
+
+
+Fri Jan 21 19:54:14 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * linked-list.[ch] Added
+
+ * examine.q file-handle.[hq] font.h glob.c groff-font.c postscript.c
+ set.q: Yet more memory leaks
+
+Tue Jan 18 23:12:40 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * t-test.q examine.q : More memory leaks fixed.
+
+Tue Jan 18 19:26:59 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * examine.q factor_stats.[ch] get.c pfm-read.c: Plugged numerous
+ memory leaks.
+
+Mon Jan 10 14:43:45 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * ascii.c cartesian.c casefile.c chart.h devind.c
+ examine.q frequencies.q
+ html.c output.h piechart.c plot-chart.c plot-hist.c
+
+ Integrated the chart rendering into the output stream
+ (currently only works for html).
+
+ Removed gratuitous use of ifndef NO_CHARTS, and replaced with
+ dummy-chart.c for compiling without charts.
+
+ * mkfile.[ch] Created.
+
+ * som.[ch] tab.[ch]: Changed name of som_table to som_entity
+ Added type element so we can tell if it's a chart or a table.
+
+ * chart.h examine.q piechart.c plot-chart.c plot-hist.c: changed the
+ API of charts to be more like that of tables.
+
+Thu Jan 13 21:00:02 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * casefile.c main.c: Moved the SIGINT handler from casefile.c to
+ main.c. Removed the handler for SIGQUIT.
+
+Mon Jan 10 14:43:45 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * casefile.c: Added a signal handler to delete temp files on
+ SIGINT and SIGQUIT
+
+ * permissions.c Inhibited the PERMISSIONS command when SAFER is on.
+
+ * command.def Added a lot more unimplemented commands.
+
+ * copyleft.[ch] cmdline.c Moved legal information to copyleft.c
+
+Sat Jan 8 23:58:34 2005 Ben Pfaff <blp@gnu.org>
+
+ * sort.c: (compare_initial_runs) Needed additional level of
+ dereferencing.
+ (merge_once) Fix plenty of stupid mistakes.
+
+Sat Jan 8 23:55:27 2005 Ben Pfaff <blp@gnu.org>
+
+ * casefile.c: (casefile_sleep) Need to flush_buffer() after
+ calling casefile_to_disk() or we will lose the last block in the
+ file if the casefile started out as disk-based.
+ (casefile_get_reader) Initialize reader->destructive to 0.
+ (cmd_debug_casefile) Add new test pattern.
+ (test_casefile) Define new test pattern to make sure
+ casefile_sleep() works properly.
+
+Fri Jan 7 08:00:05 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * Makefile.am chart.[ch] histogram.[ch] piechart.c (Modified);
+ plot-hist.c plot-chart.c (Added) Reorganised these files in an
+ attempt to seperate the creation and processing of charts from their
+ actuall renedering.
+
+ * examine.q frequencies.q generated charts conditional upon the NO_CHARTS
+ macro.
+
+Thu Jan 6 18:48:58 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * main.c Added a signal handler for SIGFPE
+
+ * sort.c Somewhat more robust fix to the previous entry.
+
+Wed Jan 5 21:23:31 2005 Ben Pfaff <blp@gnu.org>
+
+ * sort.c: (merge) Fix assertion for proper Huffman merge pattern:
+ 0 == 1 modulo 1. See Knuth 5.4.9 (vol. 3, 2nd ed.,
+ pp. 361). Thanks to John Darrington <john@cellform.com.au> for
+ reporting the bug.
+
+Wed Jan 5 22:42:26 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * case.h Fixed bug # 11307
+
+Wed Jan 5 08:30:48 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * val-labs.c Fixed bug which caused a crash if VALUE LABELS had
+ a trailing slash.
+
+Mon Jan 3 17:44:37 2005 Ben Pfaff <blp@gnu.org>
+
+ * pfm-read.c: (read_variables) Remove direct manipulation of
+ v->aux, which is no longer needed. Fixes bug 11483.
+
+Sat Jan 1 19:01:16 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * data-list.c Fixed a bug in parsing delimiters.
+
+ * group.c vars-atr.c Fixed buglet in hash/compare functions for alpha
+ values.
+
+ * percentiles.c Properly handled calculation of Tukey hinges where
+ the number of data is small.
+
+ * oneway.q Used the generic value_to_string function for independent
+ variable instead of trying to do it ourselves.
+
+ * box-whisker.c Fixed a buglet which caused a crash if the number of
+ data was zero
+
+
+Fri Dec 31 16:47:45 WST 2004 John Darrington <john@darrington.wattle.id.au>
+
+ * examine.q box-whisker.c chart.h Implemented boxplots in EXAMINE
+
+ * percentiles.c Fixed some bugs when calculating percentiles when
+ there's a small number of cases.
+
+Wed Dec 29 08:18:08 WST 2004 John Darrington <john@darrington.wattle.id.au>
+
+ * percentiles.[ch] Added. Calculates percentiles and Tukey hinges
+
+ * examine.q factor_stats.[ch] Added calculation of percentiles
+
+Fri Dec 24 15:09:11 WST 2004 John Darrington <john@darrington.wattle.id.au>
+
+ * t-test.q Fixed bug #11227 Made t-test work when the independent
+ variable is alpha
+
+Sat Dec 11 11:43:45 WST 2004 John Darrington <john@darrington.wattle.id.au>
+
+ * factor_stats.c Fixed calculation of trimmed mean under various
+ special conditions.
+
+Sat Dec 4 17:14:45 WST 2004 John Darrington <john@darrington.wattle.id.au>
+
+ * histogram.c chart.[ch] factor_stats.c frequencies.q
+
+ Added code to calculate sensible histogram ranges and limits.
+
+Thu Dec 2 13:37:43 WST 2004 John Darrington <john@darrington.wattle.id.au>
+
+ * chart.h Updated to reflect many API changes.
+
+ * cartesian.c chart.c Moved the definitions of chart_write_{xy}scale from
+ cartesian.c and into chart.c
+
+ * factorstats.[ch] Added the histogram calculations
+
+ * casefile.c Removed an unused variable.
+
+ * frequencies.q examine.q histogram.c Reworked the API for
+ histograms.
+
+ * piechart.c Revised the API for piecharts.
+
+ * var.h Moved the definitions of freq_tab and freq out of var.h
+ and into frequencies.q where they belong.
+
+Tue Nov 30 21:10:20 2004 Ben Pfaff <blp@gnu.org>
+
+ * flip.c: (flip_file) Check for off_t separately from fseeko(),
+ using AC_TYPE_OFF_T.
+
+Tue Nov 30 08:47:41 2004 Ben Pfaff <blp@gnu.org>
+
+ * flip.c: (flip_file) If fseeko() is not available, use long int
+ for off_t. Thanks to "Marshall DeBerry" <mdb@radix.net> for
+ reporting the problem.
+
+Mon Nov 29 12:20:59 WST 2004 John Darrington <john@darrington.wattle.id.au>
+
+ * examine.q factor_stats.[ch] Changed stderr to se_mean to avoid
+ conflict with stdio.
+
+Sun Nov 21 10:32:41 WST 2004 John Darrington <john@darrington.wattle.id.au>
+
+ * var-labs.c (var_to_string) Now returns null if the variable is null
+
+ * value-labels.c (value_to_string) Made it return null if either the
+ value or the variable is null.
+
+ * hash.c (hsh_clear) Fixed a buglet.
+
+ * examine.q factor_stats.[ch] Largely rewrote, because I'd started
+ with the wrong model.
+
+ * casefile.[ch] Added a function to return the casereader.case_idx
+ member
+
+ * examine.q Implemented the extreme values results.
+
+John Darrington <john@darrington.wattle.id.au>
+
+ * settings.h set.c glob.[ch] frequencies.q q2c.c error.c lexer.[ch]
+ output.[ch] getline.c
+
+ Plugged some memory leaks
+
+Mon Nov 15 23:47:40 2004 Ben Pfaff <blp@gnu.org>
+
+ Adopt GSL random number generators, paving the way for providing
+ the complete suite of random number generators on expressions.
+
+ * Makefile.am: Remove random.c, random.h.
+
+ * random.c: Removed.
+
+ * random.h: Removed.
+
+ * algorithm.c: (algo_default_random) Use GSL functions.
+
+ * casefile.c: (test_casefile) Use GSL RNG functions.
+
+ * expr-evl.c: (expr_evaluate) Use GSL RNG functions for OP_NORMAL,
+ OP_UNIFORM.
+
+ * sample.c: (cmd_sample) Use GSL RNG functions.
+ (sample_trns_proc) Ditto.
+
+ * set.q: (static var set_seed) Removed.
+ (static var seed_flag) Removed.
+ (static var rng) New variable.
+ (aux_stc_custom_seed) No seed value anymore, don't print anything.
+ (stc_custom_seed) Use new seed functions.
+ (seed_is_set) Removed.
+ (get_rng) New function that composes the entire external
+ interface.
+ (set_rng) New function.
+ (random_seed) New function.
+
+Mon Nov 15 22:08:25 2004 Ben Pfaff <blp@gnu.org>
+
+ * expr-evl.c: (expr_evaluate) Fix XDATE.JDAY formula. Thanks to
+ John Darrington <john@darrington.wattle.id.au> for reporting this
+ bug.
+
+Tue Nov 16 13:19:18 WST 2004 John Darrington <john@darrington.wattle.id.au>
+
+ * permissions.c command.def Added the PERMISSIONS command
+
+Mon Nov 15 01:33:32 2004 Ben Pfaff <blp@gnu.org>
+
+ * q2c.c: (dump_header) Don't try to emit #includes at very top of
+ output file because that will precede #include <config.h>, which
+ is bad.
+ (main) Add needed headers to /* (header) */ code.
+
+Mon Nov 15 01:21:36 2004 Ben Pfaff <blp@gnu.org>
+
+ Instead of making system or portable file readers responsible for
+ dropping and reordering variables, make them read full cases and
+ let the caller take care of any changes.
+
+ * get.c: New "case map" structure to handle this. Use for GET,
+ IMPORT, MATCH FILES. Essentially rewrite the whole file.
+
+ * pfm-read.c: (pfm_read_case) Read into provided case. Signature
+ changed appropriately.
+
+ * sfm-read.c: (sfm_read_case) Ditto.
+
+Mon Nov 15 00:47:45 2004 Ben Pfaff <blp@gnu.org>
+
+ Decided that case_serialize() and case_unserialize() were too
+ abstract. Also we need a couple more functions to avoid excessive
+ copying for data in/out fast paths.
+
+ * case.c: (case_serial_size) Removed.
+ (case_serialize) Rename case_to_values() and make its argument
+ explicitly an array of union values.
+ (case_unserialize) Rename case_from_values() and make its argument
+ explicitly an array of union values.
+ (case_data_all) New function.
+ (case_data_all_rw) New function.
+
+ * casefile.c: (struct casefile) Change buffer from array of
+ unsigned char to array of union value for better accuracy.
+ Redefine buffer_used and buffer_size in terms of values, not
+ bytes. Remove case_size because it is now redundant with
+ value_cnt. Fix up all references to these members.
+
+Mon Nov 15 00:45:46 2004 Ben Pfaff <blp@gnu.org>
+
+ * barchart.c: (struct subcat) Make `label' member const to silence
+ GCC warning with -Wwrite-strings.
+
+ * cartesian.c: (struct dataset) Ditto.
+
+ * case.c: Don't re-define NDEBUG if already defined.
+ Add lots of comments.
+
+ * str.c: Fix includes.
+
+ * crosstabs.q: Fix includes.
+
+ * examine.q: Fix includes. Fix GCC warning about unused
+ variables.
+
+ * frequencies.q: (stat macro) Removed and replaced where used by
+ its expansion.
+
+ * list.q: Fix includes.
+
+ * oneway.q: Fix includes.
+
+ * piechart.c: Fix includes. Only define M_PI if not already
+ defined.
+
+ * sfm-read.c: (bswap) New function.
+ (bswap_int32) Write in terms of bswap.
+ (bswap_flt64) Ditto.
+
+ * str.c: (ds_data) Add external definition here, needed because
+ str.h has only an `extern inline' version.
+
+ * value-labels.c: Fix includes.
+
+Mon Nov 15 00:40:55 2004 Ben Pfaff <blp@gnu.org>
+
+ Instead of providing a system or portable file writer with a raw
+ case in the format needed for output, provide it with a regular
+ case. The writer takes care of any needed translation.
+
+ * aggregate.c: Adopt new scheme for AGGREGATE.
+ (struct agr_proc) sfm_agr_case member removed.
+ (write_case_to_sfm) Removed because the new interface is easier to
+ use.
+
+ * get.c: Adopt new scheme for SAVE, XSAVE, EXPORT.
+
+ * pfm-write.c: Implement new scheme.
+
+ * sfm-write.c: Ditto.
+
+Mon Nov 15 00:32:24 2004 Ben Pfaff <blp@gnu.org>
+
+ Instead of treating `struct file_handle' as a class to subclass
+ into data files, system files, and portable files, instead use it
+ as a helper that coordinates access. Now it is opaque, too.
+
+ This means that most references to a struct file_handle are now
+ changed into references to one of struct dfm_reader, struct
+ dfm_writer, struct sfm_reader, struct sfm_writer, struct
+ pfm_reader, or struct pfm_writer, according to what's being read
+ or written.
+
+ Most related changes are only worth summarizing briefly.
+
+ * dictionary.c: (dict_clear) Destroy aux data in deleted
+ variables.
+ (dict_clear_aux) New function.
+ (dict_create_var) Initialize aux, aux_dtor.
+ (dict_delete_var) Destroy aux data in deleted variable.
+
+ * file-handle.h: (struct fh_ext_class) Removed.
+ (struct file_handle) Removed.
+ (fh_init_files) Removed.
+
+ * file-handle.q: Changed references to a handle's `private' member
+ to direct references.
+ (struct private_file_handle) Renamed file_handle.
+ Add next, open_cnt, type, open_mode, aux members.
+ (struct file_handle_list) Removed.
+ (extern var inline_file) Removed.
+ (static var file_handles) Changed from file_handle_list * to
+ file_handle *.
+ (create_file_handle) Initialize new members.
+ (fh_close_handle) Removed.
+ (mode_name) New function.
+ (fh_open) New function.
+ (fh_close) New function.
+ (fh_parse_file_handle) Renamed fh_parse().
+
+ * glob.c: (init_glob) Remove fh_init_files() call.
+
+ * aggregate.c: use sfm_writer.
+ (create_sysfile) Removed because the new interface is simpler.
+
+ * apply-dict.c: Use sfm_reader.
+
+ * data-list.c: Use dfm_reader.
+
+ * file-type.c: Use dfm_reader.
+
+ * get.c: Use sfm_reader, sfm_writer, pfm_reader, pfm_writer.
+
+ * inpt-pgm.c: Use dfm_reader.
+
+ * print.c: Use dfm_writer.
+
+ * sysfile-info: Use sfm_reader.
+
+ * dfm-read.c: Adopt new file handle infrastructure.
+
+ * dfm-write.c: Ditto.
+
+ * pfm-read.c: Ditto.
+
+ * pfm-write.c: Ditto.
+
+ * sfm-read.c: Ditto.
+
+ * sfm-write.c: Ditto.
+
+Mon Nov 15 00:31:44 2004 Ben Pfaff <blp@gnu.org>
+
+ Break dictionary functions into separate header file.
+
+ * dictionary.h: New file.
+
+ * var.h: Moved dict_*() functions to dictionary.h.
+
+Mon Nov 15 00:30:33 2004 Ben Pfaff <blp@gnu.org>
+
+ Get rid of procedure-specific union in struct variable, using
+ instead a void * pointer and a destructor function.
+
+ Most related changes are only worth brief summaries.
+
+ * crosstabs.q: Fix includes. Use new struct var_range in lieu of
+ old p.crs member in struct variable.
+
+ * frequencies.q: Fix includes. Use new struct var_freqs in lieu
+ of old p.frq member in struct variable.
+
+ * histogram.c: (draw_histogram) Takes new freq_tab arg because
+ it's no longer possible to grab this from var->p.frq.
+
+ * piechart.c: (draw_piechart) Ditto.
+
+ * group.c: (group_proc_get) New function.
+
+ * levene.c: Use group_proc_get() in lieu of old p.grp_data member
+ in struct variable.
+
+ * oneway.q: Ditto.
+
+ * t-test.q: Ditto.
+
+ * main.c: (execute_command) Clear aux data in default_dict after
+ each command. (It's debatable whether this should be done.)
+
+ * matrix-data.c: Use new struct mxd_var in lieu of old p.mxd
+ member in struct variable.
+
+ * means.q: Get rid of integer mode, which is not included in
+ recent SPSS and was the only code that wanted per-variable private
+ data.
+
+ * var.h: (struct crosstab_proc) Removed.
+ (struct frequencies_proc) Removed.
+ (struct list_proc) Removed.
+ (struct get_proc) Removed.
+ (struct means_proc) Removed.
+ (struct matrix_data_proc) Removed.
+ (struct match_files_proc) Removed.
+ (lots of enums) Removed.
+ (struct variable) Removed members `p', `get'. Add member
+ `aux_dtor'.
+
+ * vars-atr.c: (var_attach_aux) New function.
+ (var_detach_aux) New function.
+ (var_clear_aux) New function.
+ (var_dtor_free) New function.
+ (discard_variables) Use NULL instead of inline_file.
+
+Fri Nov 12 10:07:11 WST 2004 John Darrington <john@darrington.wattle.id.au>
+
+ * value-labs.c Fixed the implmentation of value_to_string, so
+ that it properly handles alpha values.
+
+ * oneway.q Changed instances where labels were being probed manually,
+ to use the canonical {var,value}_to_string functions
+
+Thu Nov 11 21:01:31 WST 2004 John Darrington <john@darrington.wattle.id.au>
+
+ * examine.q cartesian.c chart.[ch] Added normal and detrended normal
+ plots. Changed the API of the cartesian plot to be a much lower level
+ thing.
+
+Sun Nov 7 17:25:04 WST 2004 John Darrington <john@darrington.wattle.id.au>
+
+ * examine.q Added some of the parametric calculations
+
+ * factor_stats.[ch] Created
+
+Sat Nov 6 21:24:31 WST 2004 John Darrington <john@darrington.wattle.id.au>
+
+ * examine.q Changed the definition of factors to be a composite, and
+ dealt with the consequences.
+
+Sat Nov 6 20:40:38 WST 2004 John Darrington <john@darrington.wattle.id.au>
+
+ * examine.q Fixed problem where examine wasn't dealing properly with
+ splits
+
+Sat Nov 6 14:49:47 WST 2004 John Darrington <john@darrington.wattle.id.au>
+
+ * oneway.q Fixed problem where oneway wasn't dealing properly with
+ splits
+
+Thu Nov 4 11:09:01 WST 2004 John Darrington <john@darrington.wattle.id.au>
+
+ * q2c.c examine.q Fixed a bug (feature?) whereby arrays in the
+ command which had settings didn't get the appropriate code
+ generated.
+
+ * val.h value-labels.[ch] var-labs.c Added v*to_string functions
+ to convert variables/values to strings.
+
+ * examine.q Added framework for the EXAMINE command.
+
+Mon Nov 1 12:46:17 WST 2004 John Darrington <john@darrington.wattle.id.au>
+
+ * q2c.c frequencies.q set.q t-test.q Fixed the q2c parsing of DBL
+ subcommand types. Changed frequencies.q to use it rather then the
+ custom parser. Dealt with the consequences. Added a test for NTILES
+ subcommand of frequencies.
+
+Sat Oct 30 09:16:29 WST 2004 John Darrington <john@darrington.wattle.id.au>
+
+ * oneway.q Fixed up the behaviour when given missing values
+
+ * levene.c oneway.q Fixed a buglet with the levene statistic and
+ incorporated the levene test into the oneway command.
+
+ * group.h t-test.q Moved the CMP_EQ and CMP_LE symbols out of
+ global scope, since they're only relevant to T-TEST
+
+Fri Oct 29 17:39:03 WST 2004 John Darrington <john@darrington.wattle.id.au>
+
+ * group.c group.h group_proc.h levene.c oneway.q t-test.q
+
+ Made the t-test more consistent
+ with the way it handles groups. That is, it now uses a hash instead
+ of an array of 2. Also, made the levene.c file independent of the
+ implementation of the t-test. So now levene should be fine for both
+ t-test and anova.
+
+ * Added an oneway.q file for one way anova
+
+Wed Jun 2 22:08:02 2004 Ben Pfaff <blp@gnu.org>
+
+ * descript.c: (cmd_descriptives) Remove harmless but bogus test in
+ STATISTICS parsing.
+
+Mon May 31 20:45:24 2004 Ben Pfaff <blp@gnu.org>
+
+ Fix memory leaks.
+
+ * data-list.c: (cmd_data_list) Free dls->delims on lossage.
+ (data_list_trns_free) Free dls->delims.
+
+ * t-test.q: (tts_custom_pairs) Free vars.
+ (ssbox_one_sample_init) Fix tab_vline() argument.
+ (ssbox_independent_samples_init) Ditto.
+ (trbox_paired_init) Ditto.
+ (trbox_one_sample_init) Ditto.
+
+Mon May 31 17:19:27 2004 Ben Pfaff <blp@gnu.org>
+
+ Generalize casefiles to the extent that we can use them for
+ sorting and other kinds of data transformations. Change cases to
+ be copy-on-write to improve memory efficiency in common cases.
+ Every access to a member of a `struct ccase' was changed to be a
+ call to a case_*() function, especially case_data(), case_num(),
+ case_str(), or case_data_rw(). Many instances of a local variable
+ named "case_num" were changed to "case_idx" as a consequence.
+ Many `struct ccase *' were changed to actual `struct ccase'
+ because of copying semantics of cases. In several places there
+ was a choice between updating debug code to work with the new ADTs
+ or just deleting it because it was useless; I chose to delete it.
+
+ * Makefile.am: (pspp_SOURCES) Add case.c, case.h.
+
+ * case.c: New file.
+
+ * case.h: New file.
+
+ * aggregate.c: (struct agr_proc) Change type of `sort' to
+ sort_criteria *. Add `break_vars', `break_var_cnt' members.
+ Rename `vars' to `agr_vars', all references updated. Change
+ `agr_case' to type `struct ccase'.
+ (cmd_aggregate) Deal with new members. Use case_create(),
+ sort_active_file_in_place(), sort_active_file_to_casefile().
+ (agr_destroy) Deal with new members.
+ (aggregate_single_case) Ditto.
+ (dump_aggregate_info) Ditto.
+ (initialize_aggregate_info) Ditto.
+ (agr_to_active_file) Ditto.
+ (presorted_agr_to_sysfile) Ditto.
+ (sort_agr_to_sysfile) Removed.
+
+ * alloc.c: (out_of_memory) Make non-static.
+
+ * alloc.h: Prototype out_of_memory().
+
+ * casefile.c: Switched from a linked list in-memory representation
+ to a two-level array-style representation. The linked list was
+ appropriate when we could stick a header onto cases, but that's no
+ longer the case. Also, the two-level array will allow for random
+ in-memory access in case that's ever wanted. Also added the
+ concept of a `destructive casereader', one that destroys cases in
+ the underlying casefile as they are read out.
+ (macro CASES_PER_BLOCK) New macro.
+ (struct casefile) New members `value_cnt', `case_list_size',
+ `case_acct_size', `being_destroyed', `cases'. Removed `head',
+ `tail'.
+ (struct casereader) Removed `cur'. Added `destructive', `c'.
+ (global var casefiles) Made static.
+ (static var case_bytes) New var.
+ (casefile_create) Takes a value count, not a case size in bytes,
+ to conform to the case interface. All callers updated. Deal with
+ new and removed members.
+ (casefile_destroy) Deal with new and removed members.
+ (casefile_sleep) New function.
+ (casefile_get_case_size) Removed.
+ (casefile_get_value_cnt) New function.
+ (casefile_append) Rewritten to deal with new and removed members.
+ (casefile_append_xfer) New function.
+ (write_case_to_disk) Use case_serialize().
+ (call_posix_fadvise) Removed because posix_fadvise64 segfaults.
+ Couldn't figure out why.
+ (casefile_to_disk) Don't call call_posix_fadvise. Rewritten to
+ deal with new and removed members.
+ (merge) Removed.
+ (merge_sort) Removed.
+ (casefile_sort) Removed.
+ (casefile_get_reader) Deal with new and removed members.
+ (casefile_get_destructive_reader) New function.
+ (reader_open_file) Make code more readable. Create case for
+ reader.
+ (casereader_get_casefile) New function.
+ (casereader_read) Deal with new and removed members. Now returns
+ a copy of the case, so that the caller is responsible for
+ destroying the returned case.
+ (casereader_read_xfer) New function.
+ (casereader_destroy) Destroy reader's case.
+ (test_casefile) Second arg is now a value count, all callers
+ updated. Now tests destructive readers too.
+ (get_random_case) Deal with new case ADT.
+ (write_random_case) Ditto.
+ (read_and_verify_random_case) Ditto.
+
+ * crosstabs.q: Remove debug code.
+
+ * descript.q: (calc_descriptives) Deal with new case, casefile
+ ADTs.
+
+ * dfm.c: (cmd_begin_data) There's no storage_source_class anymore.
+
+ * do-if.c: Remove unneeded header inclusion.
+
+ * expr-prs.c: Remove debug code.
+
+ * exprP.h: Remove debug code.
+
+ * flip.c: (flip_file) Use fseeko() if available.
+
+ * formats.c: Remove debug code.
+
+ * get.c: Remove debug code.
+ (struct mtf_file) Change `input' from `union value *' to `struct
+ ccase', all references updated.
+
+ * levene.c: (levene) Deal with new case, casefile ADTs.
+
+ * list.q: Remove debug code.
+
+ * loop.c: Remove debug code.
+
+ * matrix-data.c: Remove debug code.
+
+ * means.q: Remove debug code.
+
+ * mis-val.c: Remove debug code.
+
+ * pfm-read.c: Remove debug code.
+ (pfm_read_code) Change second arg from `union value *' to `struct
+ ccase *', all references updated.
+
+ * recode.c: (string_to_long) Make first arg const.
+ (convert_to_double) Ditto.
+
+ * repeat.c: Remove debug code.
+
+ * sample.c: Remove debug code.
+
+ * sfm-read.c: Remove debug code.
+ (sfm_read_case) Change second arg from `union value *' to `struct
+ ccase *'.
+
+ * sort.c: Redone in terms of casefiles.
+ (enum sort_direction) Moved here from sort.h.
+ (struct sort_criterion) New structure.
+ (struct sort_criteria) New structure.
+ (cmd_sort_cases) Rewritten.
+ (prepare_to_sort_active_file) New function.
+ (sort_active_file_in_place) New function.
+ (sort_active_file_to_casefile) New function.
+ (parse_sort) Renamed sort_parse_criteria(), rewritten & interface
+ changed, all callers updated.
+ (destroy_sort_cases_pgm) Renamed sort_destroy_criteria(),
+ rewritten & interface changed, all callers updated.
+ (sort_cases) Renamed sort_execute(), rewritten & interface
+ changed, all callers updated.
+ (struct internal_sort) Removed.
+ (do_internal_sort) Rewritten, interface changed.
+ (destroy_internal_sort) Removed.
+ (compare_case_dblptrs) Use sort_criteria instead of sort_case_pgm.
+ (struct initial_run) Removed; an initial run is now just a
+ casefile.
+ (compare_initial_runs) Rewritten.
+ (struct external_sort) Changed almost completely.
+ (do_external_sort) Rewritten, interface changed.
+ (destroy_external_sort) Rewritten.
+ [HAVE_MKDTEMP] (make_temp_dir) Removed.
+ [!HAVE_MKDTEMP] (do_mkdir) Removed.
+ [!HAVE_MKDTEMP] (make_temp_dir) Removed.
+ (init_external_sort) Removed.
+ (simulate_error) Removed.
+ (rmdir_temp_dir) Removed.
+ (get_temp_file_name) Removed.
+ (open_temp_file) Removed.
+ (close_temp_file) Removed.
+ (remove_temp_file) Removed.
+ (write_temp_file) Removed.
+ (read_temp_file) Removed.
+ (struct record_run) Change `record' from `struct case_lit *' to
+ `struct ccase'.
+ (struct initial_run_state) Remove `idx_to_fv', `free_list',
+ `file_idx', `output_file'. Add `run', casefile'. Change
+ `last_output' from `struct case_list *' to `struct ccase'.
+ (write_initial_runs) Change interface, rewrite.
+ (sort_sink_write) Renamed process_case(), changed interfaced,
+ rewrote.
+ (destroy_initial_run_state) Rewritten.
+ (allocate_cases) Rewritten.
+ (compare_record) Interface changed, rewritten.
+ (start_run) Rewritten.
+ (end_run) Rewritten.
+ (output_record) Rewritten.
+ (grab_case) Removed.
+ (release_case) Removed.
+ (struct merge_case) Change `cases' from double pointer to single
+ pointer.
+ (merge) Deal with new case and casefile ADTs.
+ (struct run) Removed.
+ (merge_once) Rewritten, interface changed.
+ (fill_run_buffer) Removed.
+ (sort_sink_make_source) Removed.
+ (sort_sink_class) Removed.
+ (struct sort_source_aux) Removed.
+ (sort_source_read_helper) Removed.
+ (sort_source_read) Removed.
+ (read_sort_output) Removed.
+ (read_internal_sort_output) Removed.
+ (read_external_sort_output) Removed.
+ (sort_source_destroy) Removed.
+ (sort_source_class) Removed.
+
+ * sort.h: (struct sort_cases_pgm) Removed.
+ (enum sort_direction) Moved to sort.c.
+
+ * t-test.q: (calculate) Deal with new case, casefile ADTs.
+
+ * tab.c: Remove debug code.
+
+ * var-labs.c: Remove debug code.
+
+ * var.h: (struct ccase) Removed.
+ (struct case_list) Removed.
+
+ * vars-atr.c: (discard_variables) Use free_case_source().
+
+ * vars-prs.c: (parse_vs_variable) Make arg const.
+ (parse_dict_variable) Ditto.
+ (parse_variables) Make struct dictionary * arg const.
+ (parse_var_set_vars) Make struct var_set * arg const.
+ (struct var_set) Add const to some of the function pointers' args.
+ (var_set_get_cnt) Make arg const.
+ (var_set_get_var) Make first arg const.
+ (var_set_lookup_var) Make first arg const.
+ (dict_var_set_get_cnt) Make arg const.
+ (dict_var_set_get_var) Make first arg const.
+ (dict_var_set_lookup_var) Make first arg const.
+ (var_set_create_from_dict) Make arg const. Add cast to aux
+ assignment.
+ (struct array_var_set) Add const to var member.
+ (array_var_set_get_cnt) Make arg const.
+ (array_var_set_get_var) Make first arg const.
+ (array_var_set_lookup_var) Make first arg const.
+ (var_set_create_from_array) Make first arg const. Insert cast.
+
+ * vfm.c: (struct write_case_data) Change trns_case, sink_case
+ members from `struct ccase *' to `struct ccase'.
+ (static var lag_queue) Change from double to single pointer.
+ (procedure) Optimize trivial case.
+ (internal_procedure) Deal with changed case, case_source ADTs.
+ (create_trns_case) Changed interface, rewrote.
+ (open_active_interface) Initialize modified lag queue.
+ (write_case) Deal with changed case ADT.
+ (lag_case) Deal with modified lag queue.
+ (close_active_file) Destroy modified lag queue.
+ Deal with changed case_source, case_sink ADTs.
+ (destroy_storage_stream_info) Make null arg into no-op.
+ (storage_sink_make_source) Set aux in created source.
+ (storage_source_read) Deal with changed case, casefile ADTs.
+ (storage_source_create) New function.
+ (lagged_case) Rewrite.
+ (free_case_source) New function.
+ (free_case_sink) Rewrite.
+ (struct split_aux_data) Changed prev_case from `struct ccase *' to
+ `struct ccase'.
+ (procedure_with_splits) Deal with changed prev_case.
+ (procedure_with_splits_callback) Ditto.
+ (multipass_split_aux_data) Changed prev_case from `struct ccase *' to
+ `struct ccase'.
+ (multipass_procedure_with_splits) Deal with changed prev_case.
+ (multipass_split_callback) Ditto.
+
+
+Mon May 31 17:19:06 2004 Ben Pfaff <blp@gnu.org>
+
+ The workspace idea didn't work out.
+
+ * Makefile.am: (pspp_SOURCES) Remove workspace.c, workspace.h.
+
+ * workspace.c: Removed.
+
+ * workspace.h: Removed.
+