+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.
+
+Sun May 30 18:35:19 2004 Ben Pfaff <blp@gnu.org>
+
+ Fully implement arbitrary delimiters on DATA LIST, extending the
+ half implementation that was already there.
+
+ * data-list.c: (struct data_list_pgm) Remove `delim', add
+ `delims', `delim_cnt'.
+ (cmd_data_list) Initialize new members. Parse delimiters and
+ clean up code a bit.
+ (cut_field) Extract fields with arbitrary delimiters. Also, fix
+ handling of leading commas.
+ (read_from_data_list_fixed) Expand tabs. Adapt to new DFM
+ interfaces.
+ (read_from_data_list_free) Adapt to new DFM interfaces.
+ (read_from_data_list_list) Ditto.
+ (repeating_data_trns_proc) Ditto.
+
+ * dfm.c: Split up reader and writer into separate code, because
+ they do different things. Use struct string instead of explicit
+ allocation code, for clarity.
+ (enum dfm_reader_flags) New enum.
+ (struct dfm_fhuser_ext) Removed.
+ (struct dfm_reader_ext) New.
+ (get_reader) New function, used by just about all the reader
+ functions.
+ (dfm_close) Removed.
+ (close_reader) New function.
+ (dfm_open_for_reading) Rewrite initialization of dfm_fhuser_ext.
+ (dfm_open_for_writing) Ditto.
+ (macro force_line_buffer_expansion) Removed.
+ (count_tabs) Removed.
+ (tabs_to_spaces) Removed.
+ (read_record) Deal with new dfm_reader_ext. Use struct string
+ functions. Don't convert tabs to spaces.
+ (dfm_eof) New function.
+ (dfm_get_record) Changed interface, rewrote.
+ (dfm_expand_tabs) New function.
+ (dfm_fwd_record) Renamed dfm_forward_record(), updated to new
+ dfm_reader_ext, rewritten.
+ (dfm_bkwd_record) Renamed dfm_reread_record(), updated to new
+ dfm_reader_ext, rewritten.
+ (dfm_set_record) Removed in favor of dfm_forward_columns().
+ (dfm_forward_columns) New function.
+ (dfm_get_cur_col) Renamed dfm_column_start, updated to new
+ dfm_reader_ext, rewritten.
+ (static var dfm_r_class) Use close_reader for the destructor.
+ (struct dfm_writer_ext) New.
+ (dfm_put_record) Updated to new dfm_writer_ext, rewritten. Uses
+ bounce buffer now instead of local allocation.
+ (close_writer) New function.
+ (static var dfm_writer_ext) Use close_writer for destructor.
+ (cmd_begin_data) Adapt to new dfm_reader_ext.
+
+ * file-handle.q: Add support for per-file tab width.
+ (struct private_file_handle) Add tab_width member.
+ (q2c specifications) Add tabwidth subcommand.
+ (cmd_file_handle) Put parsed tab width into private_file_handle.
+ (create_file_handle) Set default tab width.
+ (handle_get_tab_width) New function.
+
+ * file-type.c: (file_type_source_read) Adapt to new DFM interface.
+
+ * inpt-pgm.c: (reread_trns_proc) Ditto.
+
+ * matrix-data.c: (context) Ditto.
+ (another_token) Ditto.
+ (mget_token) Ditto.
+ (force_eol) Ditto.
+
+Sun May 30 18:33:59 2004 Ben Pfaff <blp@gnu.org>
+
+ * casefile.c: (casefile_destroy) Fix memory leak by freeing
+ cf->filename.
+ (casereader_destroy) Don't close file descriptor -1.
+
+ * recode.c: (cmd_recode) Fix memory leak.
+
+ * set.q: (q2c specifications) Fix typo in user message.
+
+ * str.c: (st_bare_pad_len_copy) Change memcpy to memmove to avoid
+ undefined behavior for overlapping arguments.
+
+Sun May 30 18:31:48 2004 Ben Pfaff <blp@gnu.org>
+
+ * casefile.c: valgrind doesn't implement posix_fadvise() yet, so
+ don't call it when we're running under valgrind.
+ (call_posix_fadvise) New function.
+ (casefile_to_disk) Use call_posix_fadvise().
+ (reader_open_file) Ditto.
+
+Sun May 30 18:20:12 2004 Ben Pfaff <blp@gnu.org>
+
+ Update our string ADTs, struct string and struct len_string. Get
+ rid of pool support, which was largely unused. Rename lots of
+ functions to have more obvious or consistent names.
+
+ * ascii.c: Get rid of ascii_pool. It was only used for string
+ allocations.
+ (ascii_open_global) Don't create ascii_pool.
+ (ascii_close_driver) Don't destroy ascii_pool.
+ (ascii_postopen_driver) Don't use pool.
+ (ascii_close_driver) Destroy strings manually.
+
+ * str.c: (ds_create) Remove pool argument, all references updated.
+ (ds_init) Ditto.
+ (ds_replace) Remove pool support, make more efficient when we
+ don't need to reallocate.
+ (ds_destroy) Remove pool support.
+ (ds_rpad) New function.
+ (ds_size) Renamed ds_capacity(), all references updated.
+ (ds_value) Renamed ds_c_str(), all references updated.
+ (ds_concat) Renamed ds_puts(), all references updated.
+ (ds_concat_buffer) Renamed ds_concat(), all references updated.
+ (ds_putchar) Renamed ds_putc(), all references updated.
+ (ds_getline) Renamed ds_gets(), all references updated.
+ (ls_create) Remove pool argument, all references updated.
+ (ls_create_buffer) Ditto.
+ (ls_destroy) Removed pool support.
+ (ls_value) Renamed ls_c_str(), all references updated.
+
+ * str.h: (ls_length) [__GNUC__] Add inline version.
+ (ls_c_str) [__GNUC__] Add inline version.
+ (ls_end) [__GNUC__] Add inline version.
+ (struct string) Remove pool member. Rename `size' to `capacity',
+ all references updated.
+
+ * tab.c: (text_format) Instead of using pool argument to
+ ls_create_buffer(), call pool_register() on allocated data.
+
+Mon Apr 26 22:40:07 2004 Ben Pfaff <blp@gnu.org>
+
+ We're abusing the current ASCII driver by telling it to allocate a
+ 9999-line, 9999-character page in the tests. This causes some
+ systems to curl up and die because it allocates 20 MB of
+ contiguous RAM. This change alleviates at least part of the
+ problem. It is mostly a stop-gap until the new output system is
+ ready.
+
+ * ascii.c: (struct line) New structure.
+ (struct ascii_driver_ext) Remove `page', `page_size', `line_len',
+ `line_len_size', `n_output' members. Add `lines', `lines_cap'.
+ (ascii_preopen_driver) Initialize new members, not old ones.
+ (ascii_close_driver) Destroy new members, not old ones.
+ (ascii_open_page) Allocate new members, not old ones.
+ (expand_line) Allocate room in line.
+ (draw_line) Use new members.
+ (ascii_line_horz) Ditto.
+ (ascii_line_vert) Ditto.
+ (ascii_line_intersection) Ditto.
+ (text_draw) Ditto.
+ (output_lines) Ditto.
+ (ascii_close_page) Ditto.
+
+Sun Apr 25 23:40:15 2004 Ben Pfaff <blp@gnu.org>
+
+ * matrix.c: Dead code. Removed.
+
+ * matrix.h: Dead code. Removed.
+
+Fri Apr 16 23:59:51 2004 Ben Pfaff <blp@gnu.org>
+
+ Contrary to what I'd always understood, there is an efficient
+ algorithm for deletion from a hash table populated via linear
+ probing. This change implements it.
+
+ * hash.c: (hsh_rehash) Probe in increasing order.
+ (hsh_probe) Ditto.
+ (locate_matching_entry) Ditto.
+ (hsh_delete) Use Knuth's Algorithm 6.4R for deletion.
+
+Tue Apr 13 19:24:15 2004 Ben Pfaff <blp@gnu.org>
+
+ * moments.c (calc_moments): Adjust calculation of kurtosis to
+ avoid subtracting huge numbers from huge numbers, on Michael
+ Kiefte's advice.
+
+Sun Apr 11 14:22:12 2004 Ben Pfaff <blp@gnu.org>
+
+ Rework moments routines for improved numerical stability based on
+ Michael Kiefte's advice. Any bugs or remaining numerical problems
+ are still mine though.
+
+ There is now a struct moments1 for use with one-pass moments. It
+ uses a provisional means algorithm as an attempt to improve
+ accuracy of higher moments. The older struct moments now only
+ handles two-pass moments.
+
+ * aggregate.c: Use moments1 instead moments.
+
+ * descript.c: Revert previous change, which is no longer needed
+ due to the moments revision.
+
+ * moments.c: (calc_moments) New function for calculating variance,
+ skewness, kurtosis.
+ (moments_pass_one) Only accumulate weights bigger than zero.
+ (moments_calculate) Allow calculating the mean on pass one, others
+ require pass two. Implement in terms of calc_moments().
+ (struct moments1) New structure.
+ (init_moments1) New function.
+ (moments1_clear) Ditto.
+ (moments1_create) Ditto.
+ (moments1_add) Ditto.
+ (moments1_calculate) Ditto.
+ (moments1_destroy) Ditto.
+ (cmd_debug_moments) Deal with `struct moments' or `struct
+ moments1' as requested by user.
+
+Sun Apr 11 14:21:55 2004 Ben Pfaff <blp@gnu.org>
+
+ * Makefile.am (pspp_SOURCES): Remove debug.c.
+
+ * debug.c: Removed. It was empty anyway.
+
+Fri Apr 9 20:04:49 2004 Ben Pfaff <blp@gnu.org>
+
+ * descript.c (calc_descriptives): Fix assert failure when only
+ MOMENT_MEAN is needed.
+
+2004-04-09 Michael Kiefte <mkiefte@dal.ca>
+
+ * descript.c:
+
+ fixed problem with parsing in match_statistic() causing
+ "DESCRIPTIVE STAT=MEAN." to barf.
+
+ "MEAN" is now default if "SORT" given without specification.
+
+ Fixed infinite loop with "DESCRIPT GIBBERISH=ALL." Parsing is
+ generally less forgiving of syntax errors: better to have it do
+ nothing and type it in again then to not know what it actually did
+ instead.
+
+ z-score transformation now checks score for user-missing values
+ and checks std_dev for SYSMIS.
+
+2004-04-06 Michael Kiefte <mkiefte@dal.ca>
+
+ * aggregate.c, crosstabs.q, descript.c, dictionary.c, frequencies.q, levene.c, t-test.q, var.h:
+ Changed dict_get_case_weight() to accept an additional int * flag
+ to complain about system-missing, user-missing, zero, or negative
+ weights and updated existing functions to pass int * to
+ dict_get_case_weight().
+
+2004-04-05 jmd <jmd@gnu.org>
+
+ * main.c: Fixed configuration problems with gsl
+
+ * t-test.q: Fixed some problems encountered when compiling under Cygwin
+
+2004-04-03 blp <blp@gnu.org>
+
+ * lexer.c, ChangeLog:
+ Fix infinite loop on comment at end of file, add test.
+
+2004-04-03 jmd <jmd@gnu.org>
+
+ * settings.h, var.h, ChangeLog, Makefile.am, cmdline.c, command.c, command.h, error.h, filename.c, frequencies.q, lexer.h, main.c, q2c.c, set.q:
+ Fixed the calculation of percentiles and added --syntax and --algorithm options
+
+Sat Apr 3 11:43:37 2004 Ben Pfaff <blp@gnu.org>
+
+ * lexer.c: (lex_skip_comment) Handle end-of-file correctly (I
+ hope).
+
+Sat Apr 3 15:00:18 WST 2004 John Darrington <john@darrington.wattle.id.au>
+
+ * frequencies.q: Fixed the calculation of percentiles
+
+ * Makefile.am: Added the --ansi flag and dealt with the
+ consequences. Added some entries to PSPP_sources so that
+ make distcheck would pass
+
+ * cmdline.c: Added the --syntax and --algorithm options
+
+ * q2c.c: Added an implicit /ALGORITHM subcommand to everything.
+
+Fri Apr 2 11:25:22 WAST 2004 John Darrington <john@darrington.wattle.id.au>
+
+ * t-test.q, levene.c, levene.h Converted t-test (incl levene) to
+ use the new multipass_split_... mechanism.
+
+Wed Mar 31 22:36:22 2004 Ben Pfaff <blp@gnu.org>
+
+ * frequencies.q: (calc_stats) Use moments data structure and
+ calc_seskew(), calc_sekurt() functions.
+
+ * set.q main.c settings.h Added support for --syntax and --algorithm
+ options
+
+Tue Mar 30 22:04:19 2004 Ben Pfaff <blp@gnu.org>
+
+ * vfm.c: Had to get last call to multipass_split_output() inside
+ open_active_file()/close_active_file() pairing, so introduce new
+ function.
+ (internal_procedure) Move procedure() code here, except for calls
+ to open_active_file() and close_active_file().
+ (procedure) Wrap open_active_file() and close_active_file() around
+ internal_procedure().
+ (multipass_procedure_with_splits) Wrap open_active_file() and
+ close_active_file() around internal_procedure().
+
+Tue Mar 30 22:01:57 2004 Ben Pfaff <blp@gnu.org>
+
+ * descript.c: (cmd_descriptives) Free `vars' to avoid memory leak.
+
+Mon Mar 29 16:26:40 2004 Ben Pfaff <blp@gnu.org>
+
+ * debug.c: Removed. Moved cmd_debug_evaluate() into expr-evl.c.
+
+ * expr-evl.c: (cmd_debug_evaluate) Moved here from debug.c.
+
+Mon Mar 29 16:03:08 2004 Ben Pfaff <blp@gnu.org>
+
+ * algorithm.c: By default turn off some of the more expensive
+ assertions.
+ (expensive_assert) New macro which expands to assert if
+ EXTRA_CHECKS is defined, to nothing otherwise.
+ (unique) Use expensive_assert().
+ (binary_search) Ditto.
+ (push_heap) Ditto.
+ (pop_heap) Ditto.
+ (make_heap) Ditto.
+ (sort_heap) Ditto.
+
+ * command.c: (conflicting_3char_prefixes) Words that are the same
+ don't cause conflicts when they are abbreviated to the first three
+ letters.
+
+ * expr-evl.c: (CONCAT_func) Fix memory leak by incrementing struct
+ nonterm_node's n earlier.
+ (generic_str_func) Ditto.
+
+Mon Mar 29 15:32:17 2004 Ben Pfaff <blp@gnu.org>
+
+ Add support for multipass procedures. Rewrite DESCRIPTIVES to
+ test multipass support, take advantage of new moments
+ calculation, and to not be such crappy code. Get rid of q2c
+ processing for DESCRIPTIVES.
+
+ * vfm.c: (struct multipass_split_aux_data) New structure.
+ (multipass_procedure_with_splits) New function.
+ (multipass_split_callback) New function.
+ (multipass_split_output) New function.
+ * descript.q: Removed.
+
+ * descript.c: New file.
+
+ * var.h: Removed descriptives enums.
+ (struct descriptives_proc) Removed.
+ (struct variable) Removed p.dsc.
+
+ * Makefile.am: (q_sources_c) Remove descript.c.
+ (q_sources_q) Removed descript.q.
+
+Mon Mar 29 15:31:55 2004 Ben Pfaff <blp@gnu.org>
+
+ New manager for keeping track of used workspace.
+
+ * workspace.c: New file.
+
+ * workspace.h: New file.
+
+ * Makefile.am: (pspp_SOURCES) Add workspace.c, workspace.h.
+
+ * sort.c: (do_internal_sort) Use workspace_malloc().
+ (destroy_internal_sort) Use workspace_free().
+
+Mon Mar 29 15:31:08 2004 Ben Pfaff <blp@gnu.org>
+
+ New `struct casefile' for managing sets of cases.
+
+ * casefile.c: New file.
+
+ * casefile.h: New file.
+
+ * command.def: Add DEBUG CASEFILE command.
+
+ * Makefile.am: (pspp_SOURCES) Add casefile.c, casefile.h.
+
+ * sort.c: (sort_cases) Move logic for sending storage file to disk
+ into do_external_sort().
+ (struct internal_sort) Use an array of ccase pointers instead of a
+ case_list.
+ (do_internal_sort) Rewrite to handle casefiles.
+ (compare_case_list) Removed.
+ (compare_cases) New function.
+ (compare_case_dblptrs) New function.
+ (read_internal_sort_output) Deal with new struct internal_sort.
+
+ * vfm.c: (static var workspace_overflow) Removed.
+ (struct storage_stream_info) Removed all the members. Added
+ struct casefile * member.
+ (storage_sink_open) Use casefile.
+ (open_storage_file) Removed.
+ (write_storage_file) Removed.
+ (storage_to_disk) Removed.
+ (destroy_storage_stream_info) Use casefile.
+ (storage_sink_write) Use casefile.
+ (storage_sink_make_source) Use casefile.
+ (storage_source_count) Use casefile.
+ (storage_source_read) Use casefile.
+ (storage_source_on_disk) Removed.
+ (storage_source_get_cases) Removed.
+ (storage_source_set_cases) Removed.
+ (storage_source_get_casefile) New function.
+
+Mon Mar 29 15:30:09 2004 Ben Pfaff <blp@gnu.org>
+
+ New `struct moments' for calculating moments.
+
+ * stats.c: Removed.
+
+ * stats.h: Removed.
+
+ * moments.c: New file.
+
+ * moments.h: New file.
+
+ * command.def: Add DEBUG MOMENTS command.
+
+ * Makefile.am: (pspp_SOURCES) Add moments.c, moments.h. Remove
+ stats.c, stats.h.
+
+ * aggregate.c: Modify AGGREGATE to use the new moments
+ calculation, even if not in such a great way.
+ (struct agr_var) Add `moments' member.
+ (parse_aggregate_functions) Set `moments' member to null.
+ (agr_destroy) Destroy `moments' member.
+ (accumulate_aggregate_info) Use `moments' for standard deviation.
+ (dump_aggregate_info) Ditto.
+ (initialize_aggregate_info) Create or clear `moments'.
+
+ * misc.h: Add pow2(), pow3(), pow4() functions in place of sqr(),
+ cube(), pow4() that were in stats.h. All references updated.
+
+ * crosstabs.q: stats.h had chi-square significance functions. Use
+ GSL instead.
+ (display_chisq) Use gsl_cdf_chisq_Q() instead of chisq_sig().
+
+ * expr-evl.c: (expr_evaluate) Use moments_of_values() for
+ OP_CFVAR, OP_MEAN, OP_SD, OP_VARIANCE.
+
+Fri Mar 26 14:21:23 2004 Ben Pfaff <blp@gnu.org>
+
+ * dictionary.c: (dict_compact_values) Compacted values need to
+ start off from 0.
+
+Fri Mar 26 00:54:57 2004 Ben Pfaff <blp@gnu.org>
+
+ * var-labs.c: (cmd_variable_labels) For compatibility, don't allow
+ `/' at start. Check return value of parse_variables() for error
+ return.
+
+Fri Mar 26 00:19:27 2004 Ben Pfaff <blp@gnu.org>
+
+ Revamp expressions: make the code a little nicer, and fix bugs
+ found in testing.
+
+ * expr-evl.c: (expr_evaluate) Make expression argument const.
+ Support OP_ADD, OP_SUB, OP_MUL, OP_DIV instead of OP_PLUS, OP_MUL.
+ OP_POW is missing for arg 2 <= 0. OP_LOG is natural log, not
+ base-10 log. Fix OP_ANY, OP_ANY_STRING, OP_RANGE, OP_RANGE_STRING
+ off-by-ones. Add OP_MAX_STRING, OP_MIN_STRING. Fix OP_TIME_HMS,
+ OP_DATE_WKYR boundary conditions. Add OP_CTIME_DAYS,
+ OP_CTIME_HOURS, OP_CTIME_MINUTES, OP_CTIME_DAYS, OP_CTIME_SECONDS.
+ Support OP_INDEX_2, OP_INDEX_3, OP_RINDEX_2, OP_RINDEX_3 instead
+ of OP_INDEX, OP_INDEX_OPT, OP_RINDEX, OP_RINDEX_OPT. Merge
+ OP_LPAD_OPT into OP_LPAD, OP_RPAD_OPT into OP_RPAD, OP_LTRIM_OPT
+ into OP_LTRIM, OP_RTRIM_OPT into OP_RTRIM, OP_NUMBER_OPT into
+ OP_NUMBER. Fix OP_RTRIM fragility. Support OP_SUBSTR_2,
+ OP_SUBSTR_3 instead of OP_SUBSTR, OP_SUBSTR_OPT. Remove OP_INV.
+ Simplify OP_SYSMIS. Remove OP_STR_MIS.
+
+ * expr-opt.c: (optimize_expression) Rewrite.
+ (macro n0) Removed.
+ (macro n1) Removed.
+ (macro n2) Removed.
+ (macro s0) Removed.
+ (macro s0l) Removed.
+ (macro s1) Removed.
+ (macro s1l) Removed.
+ (macro s2) Removed.
+ (macro s2l) Removed.
+ (macro s) Removed.
+ (macro sl) Removed.
+ (eq_num_con) New function.
+ (optimize_tree) New function.
+ (macro rnc) Removed.
+ (macro frnc) Removed.
+ (str_search) Add const to string params.
+ (str_rsearch) Ditto.
+ (evaluate_tree_no_missing) Renamed from evaluate_tree. Add num[],
+ str[], str_len[] locals to substitute for most of removed macros.
+ Support OP_ADD, OP_SUB, OP_MUL, OP_DIV instead of OP_PLUS, OP_MUL.
+ Removed support for missing values because we're never called with
+ missing values. Use set_number() or set_number_errno() instead of
+ rnc or frnc. Removed any stuff that caused trouble in testing.
+ We can re-add it later if it really slows anything. Fix some
+ random problems.
+ (evaluate_tree_with_missing) Not yet supported. To be added later
+ if it's important.
+ (repl_num_con) Removed.
+ (collapse_node) New function.
+ (force_repl_num_con) Removed.
+ (set_number) New function.
+ (set_number_errno) New function.
+ (repl_str_con) Removed.
+ (set_string) New function.
+ (yrmoda) Tighten boundary conditions. Adopt 2030 cut-off for
+ 2-digit years.
+ (dump_node) No special case for OP_AND, OP_OR.
+
+ * expr-prs.c: (expr_prs) Honor EXPR_NO_OPTIMIZE bit. Rewrite.
+ (expr_get_type) New function.
+ (type_check) Rewrite.
+ (type_coercion) New function.
+ (struct operator) New structure.
+ (match_operator New function.
+ (parse_binary_operators) New function.
+ (parse_inverting_unary_operator) New function.
+ (parse_or) Rewritten.
+ (parse_and) Rewritten.
+ (parse_not) Rewritten.
+ (parse_rel) Rewritten.
+ (parse_add) Rewritten.
+ (parse_mul) Rewritten.
+ (parse_neg) Rewritten.
+ (parse_exp) Rewritten.
+ (parse_sysvar) Add $TRUE, $FALSE system variables.
+ Get $LENGTH, $WIDTH from get_viewlength(), get_viewwidth().
+ (parse_primary) Use allocate_var_node(), allocate_num_con(),
+ allocate_str_con().
+ (struct function) Remove desc, change `func' prototype.
+ (unary_func) Remove special cases.
+ (MISSING_func) Reduce to unary_func() that just returns a boolean.
+ (SYSMIS_func) Handle SYSMIS((x)) like SYSMIS(x).
+ (VALUE_func) Use allocate_var_node().
+ (nary_num_func) Allow MIN and MAX for strings.
+ Use allocate_var_node(). Properly clean up.
+ Fix return type.
+ (generic_str_func) Use local table instead of removed `desc'
+ member. Mostly rewrite.
+ (get_num_args) Revise error message.
+ (parse_function) Return EXPR_ERROR, not 0 on error.
+ (macro op) Removed.
+ (macro varies) Removed.
+ (ops[]) Use expr.def.
+ (free_node) Do nothing if node is null.
+ (allocate_num_con) New function.
+ (allocate_str_con) New function.
+ (allocate_var_node) New function.
+ (allocate_binary_nonterminal) New function.
+ (append_nonterminal_arg) Removed.
+ (static var func_tab[]) Revised.
+ (expr_debug_print_postfix) Make parameter const.
+ Use printf() instead of debug_printf().
+
+ * expr.def: New file.
+
+ * expr.h: Change PXP_* to EXPR_*, all references updated. Also
+ use named enum instead of unnamed, all references updated. Add
+ EXPR_ANY, EXPR_NO_OPTIMIZE.
+
+ * exprP.h: Remove EX_*. Add DEFINE_OPERATOR. Use expr.def
+ instead of defining OP_* directly.
+ (macro IS_TERMINAL) New macro.
+ (macro IS_NONTERMINAL) New macro.
+ (enum OP_NO_FLAGS) New.
+
+Fri Mar 26 00:18:01 2004 Ben Pfaff <blp@gnu.org>
+
+ * error.c: (err_assert_fail) msg variable needs to be non-const.
+
+Fri Mar 26 00:17:24 2004 Ben Pfaff <blp@gnu.org>
+
+ * debug.c: (cmd_debug_evaluate) Rewrite.
+
+Fri Mar 26 00:15:13 2004 Ben Pfaff <blp@gnu.org>
+
+ Fix some CROSSTABS bit rot stupidity.
+
+ * crosstabs.q: Reorder the CELLS subcommands for compatibility.
+ (internal_cmd_crosstabs) Initializes cells[] correctly.
+ (float_M_suffix) Rename format_cell_entry(), change prototype,
+ rewrite.
+ (display_crosstabulation) Fix cell formatting.
+
+Fri Mar 26 00:14:09 2004 Ben Pfaff <blp@gnu.org>
+
+ Make lex_rest_of_line(), lex_entire_end() not discard lines. Have
+ to call lex_discard_line() to do that.
+
+ * command.c: (run_command) Call lex_discard_line() after
+ lex_rest_of_line().
+
+ * lexer.c: (lex_entire_end) Change behavior.
+ (lex_rest_of_line) Change behavior. Return const char *.
+ (lex_discard_line) Don't clear getl_buf, don't emit message.
+
+ * main.c: (handle_error) Emit message here.
+
+ * repeat.c: (internal_cmd_do_repeat) Use lex_discard_line()
+ instead of lex_entire_line().
+
+ * str.c: (mm_find_reverse) Make length params size_t. Rewrite.
+
+ * title.c: (get_title) Call lex_discard_line() after
+ lex_rest_of_line().
+ (cmd_file_label) Ditto.
+ (cmd_document) Deal with const char * return value.
+
+Fri Mar 26 00:10:16 2004 Ben Pfaff <blp@gnu.org>
+
+ Removed REMARK command.
+
+ * command.c: (extract_prefix) Removed.
+ (output_line) Removed.
+ (cmd_remark) Removed.
+
+ * command.def: Remove REMARK.
+
+Fri Mar 26 00:08:38 2004 Ben Pfaff <blp@gnu.org>
+
+ Added abort() after lots of assert(0) invocations to avoid some
+ compiler warnings. We really need a NOT_REACHED macro.
+
+Tue Mar 23 08:00:42 WAST 2004 John Darrington <john@darrington.wattle.id.au>
+
+ * sort.c: Added missing call to temp_file_close. Changed error
+ messages to warnings.
+
+ * set.q: Improved setting of set_view{length,width} to be more tolerant
+ of buggy OSes.
+
+Sun Mar 21 10:11:14 WST 2004 John Darrington <john@darrington.wattle.id.au>
+
+ * val-labs.c: Fixed a bug where PSPP would crash, if VALUE LABELS was
+ used with incorrect syntax.
+
+ * error.c, error.h et al: Overridden definition of assert for a
+ custom one.
+
+ * test-q.c: Fixed a buglet where it would crash if no /VARIABLES
+ subcommand was given when it ought to have been.
+
+Sat Mar 20 22:19:08 2004 Ben Pfaff <blp@gnu.org>
+
+ * tab.c: (tab_vline) Fix assertions to respect row_ofs and
+ col_ofs.
+ (tab_hline) Ditto.
+ (tab_box) Ditto.
+ (tab_joint_text) Ditto.
+
+Sat Mar 20 17:57:23 2004 Ben Pfaff <blp@gnu.org>
+
+ * levene.c: Add #include.
+
+ * set.q: (set_viewport) Add `int' argument to make its prototype
+ correct for signal().
+
+Sat Mar 20 15:35:17 2004 Ben Pfaff <blp@gnu.org>
+
+ * expr-evl.c: (expr_evaluate) Assert that `c' is nonzero before
+ using it.
+
+Sat Mar 20 15:18:16 2004 Ben Pfaff <blp@gnu.org>
+
+ Changed DFM from open-at-first-access to explicit-open. Before,
+ calling dfm_get_record() or dfm_put_record() would automatically
+ open the file. Now, you have to call dfm_open_for_reading() or
+ dfm_open_for_writing() explicitly. This makes it possible to
+ check permissions, file existence, etc. earlier.
+
+ Also made struct file_handle more opaque, and clean up in general.
+
+ * data-list.c: (cmd_data_list) Open handle for reading.
+
+ * dfm.c: (struct dfm_fhuser_ext) Add `where', `saw_begin_data'
+ members.
+ (open_file_r) Renamed dfm_open_for_reading(), rewrote.
+ (open_file_w) Renamed dfm_open_for_writing(), rewrote.
+ (open_inline_file) Removed.
+ (read_record) For inline_file, if we haven't seen BEGIN DATA, read
+ it. Deal with line_number in extension record instead of file
+ handle.
+ (dfm_get_record) Rewrote.
+ (dfm_put_record) Rewrote.
+ (dfm_push) Assert file is open and one of ours. Deal with
+ line_number in extension record instead of file handle.
+ (dfm_pop) Assert file is open and one of ours. Deal with
+ line_number in extension record instead of file handle.
+ (cmd_begin_data) Use dfm_open_for_reading(). Mark that we saw
+ BEGIN DATA.
+
+ * file-handle.h: (enum constants RH_RF_*) Removed.
+ (enum constants FH_MD_*) Removed.
+ (struct file_handle) Removed `name', `norm_fn', `fn', `where',
+ `recform', `lrecl', `mode' members. Public references to
+ `recform' changed to use handle_get_mode(), references to `lrecl'
+ changed to use handle_get_record_width(). Added `private' member.
+ (enum file_handle_mode) New.
+
+ * file-handle.q: (struct private_file_handle) New structure.
+ (struct file_handle_list) New structure.
+ (static var files) New.
+ (static var file_handles) Removed.
+ (init_file_handle) Removed.
+ (create_file_handle) Removed.
+ (get_handle_with_name) New function.
+ (get_handle_for_filename) New function.
+ (cmd_file_handle) Rewritten.
+ (hash_file_handle) Removed.
+ (cmp_file_handle) Removed.
+ (fh_init_files) Rewritten.
+ (fh_parse_file_handle) Rewritten. Allows identifiers as
+ filenames.
+ (fh_get_handle_by_name) Renamed handle_get_name(), all references
+ updated. Rewritten.
+ (fh_get_handle_by_filename) Renamed handle_get_filename(), all
+ references updated. Rewritten.
+ (fh_record_width) Renamed handle_get_record_width(), all
+ references updated. Rewritten.
+ (handle_get_mode) New function.
+
+ * file-type.c: (cmd_file_type) Open handle for reading.
+
+ * filename.c: [unix] (struct file_identity) New structure.
+ [unix] (fn_get_identity) New function.
+ [unix] (fn_free_identity) New function.
+ [unix] (fn_compare_file_identities) New function.
+ [!unix] (struct file_identity) New structure.
+ [!unix] (fn_get_identity) New function.
+ [!unix] (fn_free_identity) New function.
+ [!unix] (fn_compare_file_identities) New function.
+
+ * lexer.c: (static var put) Renamed put_token, all references
+ updated.
+ (static var put_tokstr) New.
+ (static var put_tokval) New.
+ (lex_init) Initialize put_tokstr().
+ (restore_token) New function.
+ (save_token) New function.
+ (lex_get) Use restore_token().
+ (lex_put_back) Use save_token().
+ (lex_put_back_id) New function.
+ (lex_put_forward) Removed.
+ (lex_preprocess_line) Set put_token instead of using
+ lex_put_forward().
+ (lex_negative_to_dash) Use save_token(), set put_token directly.
+ (dump_token) Use stderr instead of stdout.
+
+ * main.c: (main) Remove call to cmd_init().
+
+ * matrix-data.c: (cmd_matrix_data) Open file for reading.
+
+ * pfm-read.c: Use handle_get_filename() instead of trying to use
+ h->fn directly, all over.
+
+ * pfm-write.c: Ditto.
+
+ * print.c: (internal_cmd_print) Open handle for writing.
+ (dump_table) Use handle_get_filename().
+ (print_trns_proc) Use handle_get_mode().
+ (cmd_print_space) Use fh_parse_file_handle().
+ Open handle for writing.
+ [0] (debug_print) Removed.
+
+ * sfm-read.c: Use handle_get_filename() instead of trying to use
+ h->fn directly, all over.
+
+ * sfm-write.c: Ditto.
+
+Sat Mar 20 14:35:48 2004 Ben Pfaff <blp@gnu.org>
+
+ Fix memory leaks.
+
+ * autorecode.c: (arc_free) Free arc->src_values.
+
+ * error.c: (msg) Free buf.
+
+ * val-labs.c: (do_value_labels) Always free vars.
+
+ * vfm.c: (close_active_file) If sink has no make_source then call
+ its destroy function.
+
+Sat Mar 20 14:00:24 2004 Ben Pfaff <blp@gnu.org>
+
+ Fixed cmd_parse() so that it always skips past a full command
+ name. A few special commands for which this would be bad get
+ special treatment. This lets us drop code for skipping past the
+ end of a command name in most cmd_*() functions. It's not worth
+ listing all the commands affected.
+
+ * command.c: (struct command) Remove `cmd' member, replace by
+ `name' member, all references updated. Remove `word', `next',
+ `skip_entire_name' members.
+ (macro DEFCMD) Deal with revised `struct command'.
+ (macro UNIMPL) Ditto.
+ (macro SPCCMD) New macro for commands whose last word shouldn't be
+ skipped.
+ (static array cmd_table[]) Make const, rename `commands', remove
+ sentinel element.
+ (macro COMMAND_CNT) New macro.
+ (split_words) Removed.
+ (cmd_init) Removed.
+ (FILE_TYPE_okay) Make parameter const.
+ (cmd_parse) Improve error messages.
+ (match_strings) New function.
+ (next_word) New function.
+ (enum command_match) New enum.
+ (conflicting_3char_prefixes) New function.
+ (conflicting_3char_prefix_command) New function.
+ (cmd_match_words) New function.
+ (count_matching_commands) New function.
+ (get_command_name) New function.
+ (free_words) New function.
+ (unknown_command_error) New function.
+ (figure_out_command) Renamed parse_command_name(), rewritten.
+
+ * command.def: Removed @ command. Marked BEGIN DATA, DOCUMENT,
+ FILE LABEL, REMARK, SUBTITLE, TITLE as special. Renamed EVALUATE
+ to DEBUG EVALUATE. Added N alias for N OF CASES, SORT alias for
+ SORT CASES.
+
+ * command.h: (macro SPCCMD) New.
+
+ * include.c: (cmd_include_at) Removed.
+ (cmd_include) Allow identifier to be used as filename.
+
+ * inpt-pgm.c: (cmd_reread) Use fh_parse_file_handle().
+
+ * t-test.q: (cmd_t_test) Command name is now parsed for us.
+
+
+Sat Mar 20 13:56:00 2004 Ben Pfaff <blp@gnu.org>
+
+ Start work on better test framework.
+
+ * Makefile.am: (pspp_sources) Add debug.c.
+
+ * debug.c: New file.
+
+ * compute.c: (cmd_evaluate) Moved to debug.c, renamed
+ cmd_debug_evaluate().
+
+ * expr-prs.c: (expr_parse) Remove PXP_DUMP support.
+
+ * expr.h: (enum constant PXP_DUMP) Removed.
+
+Sat Mar 20 00:05:42 WST 2004 John Darrington <john@darrington.wattle.id.au>
+
+ * set.q: Implemented the SHOW command, and synced it to the existing
+ SET cmd.
+
+ Added a handler for SIGWINCH so that viewlength and viewwidth follow
+ changes as the window size is changed.
+
+ Added fallback to set viewlength and viewwidth from LINES and COLUMS
+ environment variables if other methods are not available.
+
+ glob.c: Removed a lot of global variables from glob.c and encapsulated
+ them in set.q
+
+ random.c: Tidied up the way the random seed is set.
+
+ str.c: Added a ds_vprintf function.
+
+ error.c: Extended dump_message so that messages are always broken at
+ '\n' characters.
+
+Thu Mar 18 11:07:14 2004 Ben Pfaff <blp@gnu.org>
+
+ * pfm-write.c: (bufwrite) Write out the correct element for string
+ variables. From Andreas Streichardt <streichardt@globalpark.de>.
+
+Mon Mar 15 20:48:03 2004 Ben Pfaff <blp@gnu.org>
+
+ Get rid of static and global (!) vars in matrix-data.c.
+
+ * matrix-data.c: (static var nr_data) Removed.
+ (static var nr_factor_values) Removed.
+ (static var max_cell_index) Removed.
+ (static var split_values) Removed.
+ (struct nr_aux_data) New structure.
+ (read_matrices_without_rowtype) Use a local struct nr_aux_data in
+ place of static vars, pass to create_case_source() and procedure()
+ as aux data.
+ (nr_read_data_lines) Use struct nr_aux_data * parameter instead of
+ struct matrix_data_pgm *.
+ (nr_read_splits) Ditto.
+ (nr_read_factors) Ditto.
+ (nr_output_data) Ditto.
+ (static var wr_content) Removed.
+ (global var wr_data) Removed.
+ (global var wr_current) Removed.
+ (struct wr_aux_data) New structure.
+ (read_matrices_with_rowtype) Use a local struct wr_aux_data in
+ place of static vars, pass to create_case_source() and procedure()
+ as aux data.
+ (matrix_data_read_with_rowtype) Use struct wr_aux_data * parameter
+ instead of matrix_data_pgm *.
+ (wr_read_splits) Ditto.
+ (wr_output_data) Ditto.
+ (wr_read_rowtype) Ditto.
+ (wr_read_factors) Ditto.
+ (wr_read_indeps) Ditto.
+
+Mon Mar 15 20:07:29 2004 Ben Pfaff <blp@gnu.org>
+
+ Get rid of static vars in autorecode.c.
+
+ * autorecode.c: (struct autorecode_trns) Rename `arc' to `specs',
+ `n_arc' to `spec_cnt'. All references updated.
+ (static var v_src) Removed.
+ (static var v_dest) Removed.
+ (static var h_trns) Removed.
+ (static var nv_src) Removed.
+ (static var descend) Removed.
+ (static var print) Removed.
+ (enum direction) New enum.
+ (struct autorecode_pgm) New structure.
+ (cmd_autorecode) Use struct autorecode_pgm instead of static vars.
+ Move n_dest local var into struct autorecode_pgm for ease of
+ clean-up. Use arc_free().
+ (arc_free) New function.
+ (recode) Modify to take struct autorecode_pgm * parameter instead
+ of using statics. Let the caller clean up.
+ (autorecode_proc_func) Use struct autorecode_pgm * auxiliary data
+ instead of statics. Rearrange code a little.
+
+Mon Mar 15 00:25:02 2004 Ben Pfaff <blp@gnu.org>
+
+ Get rid of static, global vars in recode.c. Remove debug code.
+
+ * recode.c: (static var head) Removed.
+ (global var v) Removed.
+ (global var nv) Removed.
+ (cmd_recode) New local variables head, v, nv. Initialize and free
+ v. Don't call debug_print().
+ [DEBUGGING] (dump_dest) Removed.
+ [DEBUGGING] (debug_print) Removed.
+
+Mon Mar 15 00:14:49 2004 Ben Pfaff <blp@gnu.org>
+
+ Get rid of static vars in expr-opt.c.
+
+ * expr-opt.c: (static var e) Removed.
+ (static var nop) Removed.
+ (static var mop) Removed.
+ (static var ndbl) Removed.
+ (static var mdbl) Removed.
+ (static var nstr) Removed.
+ (static var mstr) Removed.
+ (static var nvars) Removed.
+ (static var mvars) Removed.
+ (struct expr_dump_state) New structure.
+ (dump_expression) Use new struct expr_dump_state instead of static
+ vars and pass to functions we call.
+ (dump_node) Use struct expr_dump_state * parameter.
+ (emit) Ditto.
+ (emit_num_con) Ditto.
+ (emit_str_con) Ditto.
+ (emit_var) Ditto.
+
+Mon Mar 15 00:03:51 2004 Ben Pfaff <blp@gnu.org>
+
+ Get rid of static var in COUNT.
+
+ * count.c: (static var head) Move into cmd_count().
+ (cmd_count) [DEBUGGING] Don't call debug_print.
+ [DEBUGGING] (debug_print) Removed.
+
+Sun Mar 14 23:56:09 2004 Ben Pfaff <blp@gnu.org>
+
+ Get rid of static vars in VALUE LABELS, ADD VALUE LABELS.
+
+ * val-labs.c: (static var v) Removed.
+ (static var nv) Removed.
+ [DEBUGGING] (debug_print) Removed.
+ (verify_val_labs) Add struct variable **, int parameters.
+ (get_label) Ditto. Improve error messages, streamline.
+ (erase_labels) New function for erasing value labels, taking over
+ part of verify_val_labs()'s function.
+ (init) Removed.
+ (done) Removed.
+ (cmd_value_labels) No need to call init() or done() anymore.
+ (cmd_add_value_labels) Ditto.
+ (do_value_labels) Add vars, var_cnt local variables. Clean up
+ after them internally. Call erase_labels() if we should. Don't
+ call debug_print().
+
+Sun Mar 14 23:33:53 2004 Ben Pfaff <blp@gnu.org>
+
+ Get rid of static vars in MATCH FILES.
+
+ * get.c: (static var mtf_head) Removed.
+ (static var mtf_tail) Removed.
+ (static var mtf_by) Removed.
+ (static var mtf_n_by) Removed.
+ (static var mtf_master) Removed.
+ (static var mtf_seq_num) Removed.
+ (static var mtf_seq_nums) Removed.
+ (static var mtf_sink) Removed.
+ (static var mtf_case) Removed.
+ (struct mtf_proc) New structure.
+ (cmd_match_files) Use struct mtf_proc instead of static vars.
+ (mtf_processing_finish) Ditto.
+ (mtf_free) Ditto.
+ (mtf_delete_file_in_place) Ditto.
+ (mtf_read_nonactive_records) Ditto.
+ (mtf_compare_BY_values) Ditto.
+ (mtf_processing) Ditto.
+ (mtf_merge_dictionary) Ditto.
+
+Sun Mar 14 22:48:12 2004 Ben Pfaff <blp@gnu.org>
+
+ * command.def: Add CASESTOVARS, VARSTOCASES unimplemented commands.
+
+ * dictionary.c: (dict_rename_var) Add assertion.
+ (dict_contains_var) Check by index instead of name.
+
+Sun Mar 14 22:01:02 2004 Ben Pfaff <blp@gnu.org>
+
+ Get rid of compaction_necessary, compaction_nval, compaction_case.
+ Redo VFM interface. Replace disk_sink and memory_sink by
+ storage_sink, disk_source and memory_source by storage_source.
+
+ * vfm.h: (struct case_sink) Add `dict', `idx_to_fv', `value_cnt'
+ members.
+
+ * vfm.c:
+ (struct write_case_data) Remove `begin_func', `end_func',
+ `func_aux' members. Add `aux', `trns_case', `sink_case',
+ `cases_written', `cases_analyzed' members.
+ (global var compaction_necessary) Make static.
+ (global var compaction_nval) Removed.
+ (global var compaction_case) Removed.
+ (static var case_count) Removed.
+ (struct procedure_aux_data) Removed.
+ (struct split_aux_data) Removed.
+ (procedure) Remove begin_func, end_func parameters. Rewrite.
+ (static var not_canceled) Removed.
+ (process_active_file) Removed.
+ (process_active_file_write_case) Removed.
+ (process_active_file_output_case) Removed.
+ (prepare_for_writing) Moved into open_active_file().
+ (arrange_compaction) Ditto.
+ (setup_lag) Ditto.
+ (open_active_file) Rewrote.
+ (write_case) New function.
+ [DEBUGGING] (index_to_varname) Removed.
+ (execute_transformations) New function.
+ (exclude_this_case) Renamed filter_case(), changed interface.
+ (clear_case) Added struct ccase * parameter to interface.
+ (close_active_file) Added struct write_case_data * parameter,
+ rewrote.
+ (disk_sink_create) Removed.
+ (disk_sink_destroy) Removed.
+ (disk_sink_make_source) Removed.
+ (disk_sink_write) Removed.
+ (disk_source_count) Removed.
+ (disk_source_destroy) Removed.
+ (disk_source_read) Removed.
+ (global var disk_sink_class) Removed.
+ (global var disk_source_class) Removed.
+ (global var memory_sink_class) Removed.
+ (global var memory_source_class) Removed.
+ (memory_sink_create) Removed.
+ (memory_sink_destroy) Removed.
+ (memory_sink_make_source) Removed.
+ (memory_sink_write) Removed.
+ (memory_source_count) Removed.
+ (memory_source_destroy) Removed.
+ (memory_source_get_cases) Removed.
+ (memory_source_read) Removed.
+ (memory_source_set_cases) Removed.
+ (struct disk_stream_info) Removed.
+ (struct memory_sink_info) Removed.
+ (struct memory_source_info) Removed.
+ (write_active_file_to_disk) Removed.
+ (destroy_storage_stream_info) New function.
+ (global var null_sink_class) New var.
+ (global var storage_sink_class) New var.
+ (global var storage_source_class) New var.
+ (open_storage_file) New function.
+ (storage_sink_destroy) New function.
+ (storage_sink_make_source) New function.
+ (storage_sink_open) New function.
+ (storage_sink_write) New function.
+ (storage_source_count) New function.
+ (storage_source_destroy) New function.
+ (storage_source_get_cases) New function.
+ (storage_source_on_disk) New function.
+ (storage_source_read) New function.
+ (storage_source_set_cases) New function.
+ (storage_source_to_disk) New function.
+ (storage_to_disk) New function.
+ (struct storage_stream_info) New structure.
+ (write_storage_file) New function.
+ (procedure_write_case) Removed.
+ (create_case_source) Add `struct dictionary *' parameter, all
+ references updated.
+ (create_case_sink) Ditto.
+ (free_case_sink) New function.
+ (struct split_aux_data) New structure.
+ (procedure_with_splits) New function implementing what procedure()
+ used to.
+ (SPLIT_FILE_proc_func) Removed.
+ (procedure_with_splits_callback) New function.
+ (equal_splits) New function.
+
+ * aggregate.c: Pass around a struct instead of using statics.
+ (static var outfile) Remove.
+ (enum type) Give it tag `missing_treatment'.
+ (static var missing) Remove.
+ (static var sort) Remove.
+ (static var agr_first) Remove.
+ (static var agr_next) Remove.
+ (static var case_count) Remove.
+ (static var prev_case) Remove.
+ (static var buf64_1xx) Remove.
+ (static var buf_1xx) Remove.
+ (struct agr_proc) New structure incorporating the above.
+ (cmd_aggregate) Use new struct. Clean up error handling using
+ agr_destroy(). Completely rewrite actual implementation of
+ aggregation.
+ (create_sysfile) Add struct agr_proc * parameter, modify
+ accordingly.
+ (parse_aggregate_functions) Ditto.
+ (free_aggregate_functions) Ditto. Rename agr_destroy().
+ (aggregate_single_case) Add struct agr_proc * parameter, modify
+ accordingly.
+ (accumulate_aggregate_info) Ditto.
+ (dump_aggregate_info) Ditto.
+ (initialize_aggregate_info) Ditto.
+ (agr_00x_trns_proc) Removed.
+ (agr_00x_end_func) Removed.
+ (agr_10x_trns_proc) Removed.
+ (agr_10x_trns_free) Removed.
+ (agr_10x_end_func) Removed.
+ (agr_11x_read) Removed.
+ (agr_11x_finish) Removed.
+ [DEBUGGING] (debug_print) Removed.
+ (write_case_to_sfm) Add struct agr_proc * parameter, modify
+ accordingly.
+ (agr_to_active_file) New function.
+ (presorted_agr_to_sysfile) New function.
+ (sort_agr_to_sysfile) New function.
+
+ * autorecode.c: (cmd_autorecode) Use procedure_with_splits().
+
+ * crosstabs.q: (internal_cmd_crosstabs) Ditto.
+
+ * descript.q: (cmd_descriptives) Ditto.
+
+ * dfm.c: (cmd_begin_data) Check for storage_source_class. Adapt
+ to new procedure() interface.
+
+ * command.c: (cmd_execute) Adapt to new procedure() interface.
+
+ * dictionary.c: (dict_compact_values) Also delete scratch
+ variables.
+ (dict_get_compacted_value_cnt) New function.
+ (dict_get_compacted_idx_to_fv) New function.
+
+ * flip.c: (cmd_flip) Warn about and cancel TEMPORARY.
+ (cmd_flip) Adapt to new procedure() interface.
+ (flip_sink_write) Use sink->idx_to_fv.
+
+ * frequencies.q: (internal_cmd_frequencies) Use
+ procedure_with_splits().
+
+ * get.c: (cmd_save_internal) Adapt to new procedure() interface.
+ (static var mtf_sink) New static var.
+ (static var mtf_case) New static var.
+ (cmd_match_files) Warn about and cancel TEMPORARY. Redo the way
+ we actually implement the matching.
+ (mtf_delete_file_in_place) Use mtf_case.
+ (mtf_processing) Use mtf_case and mtf_sink.
+ (cmd_export) Adapt to new procedure() interface.
+
+ * levene.c: (levene) Use procedure_with_splits().
+
+ * list.q: (cmd_list) Use procedure_with_splits().
+
+ * matrix-data.c: (read_matrices_without_rowtype) Adapt to new
+ procedure() interface.
+ (read_matrices_with_rowtype) Ditto.
+
+ * modify-vars.c; (cmd_modify_vars) Warn about and cancel
+ TEMPORARY. Adapt to new procedure() interface.
+
+ * rename-vars.c: Warn about and cancel TEMPORARY.
+
+ * sort.c: (cmd_sort_cases) Warn about TEMPORARY.
+ (sort_cases) Use dict_get_compacted_value_cnt() instead of
+ compaction_nval. Adapt to new procedure() interface. Use
+ storage_source_to_disk().
+ (do_internal_sort) Don't try to dump the cases to memory.
+ (compare_case_lists) Pass null idx_to_fv.
+ (struct initial_run_state) Add `idx_to_fv' member. Remove
+ `case_size' member.
+ (write_initial_runs) Don't initialize irs->case_size. Adapt to
+ new procedure() interface. Reset irs->idx_to_fv after calling
+ procedure().
+ (sort_sink_write) Set irs->idx_to_fv. Use case_size from struct
+ sort_cases_pgm. Pass irs, not struct sort_cases_pgm to
+ push_heap().
+ (destroy_initial_run_state) Don't dereference irs after freeing
+ it.
+ (allocate_cases) Don't calculate case_size locally.
+ (compare_record) Add idx_to_fv parameter.
+ (compare_record_run) Change parameter from struct sort_cases_pgm *
+ to struct initial_run_state *. Pass irs->idx_to_fv to
+ compare_record().
+ (compare_record_run) Third parameter now a struct
+ initial_run_state *.
+ (output_record) No need for out_case anymore. Pass irs, not
+ struct sort_cases_pgm to pop_heap(). Use case_size from struct
+ sort_cases_pgm.
+ (merge) Use case_size from struct sort_cases_pgm.
+ (merge_once) Use case_size from struct sort_cases_pgm.
+ Pass null pointer to compare_record() as idx_to_fv.
+ (global var sort_sink_class) Make static.
+
+ * t-test.q: (cmd_t_test) Use procedure_with_splits().
+
+ * temporary.c: Remove debugging crap.
+
+Sat Mar 13 14:19:52 WST 2004 John Darrington <john@darrington.wattle.id.au>
+
+ * t-test.q, levene.c: Fixed up the handling of MISSING values
+ int the T-TEST
+
+Fri Mar 12 16:23:35 WST 2004 John Darrington <john@darrington.wattle.id.au>
+
+ * t-test.q, levene.c: Added support for T-TEST /GROUP where only
+ one value is given.
+
+Wed Mar 10 23:25:13 2004 Ben Pfaff <blp@gnu.org>
+
+ Change explicit variable name checks into use of
+ dict_class_from_id().
+
+ * dictionary.c: (dict_create_var) Change explicit variable name
+ check into use of dict_class_from_id().
+
+ * get.c: (trim_dictionary) Ditto.
+
+ * sel-if.c: (cmd_filter) Ditto.
+
+ * sysfile-info.c: (cmd_display) Ditto.
+
+ * vars-prs.c: (parse_DATA_LIST_vars) Ditto.
+
+ * vfm.c: (arrange_compaction) Ditto.
+
+ * weight.c: (cmd_weight) Ditto.
+
+Wed Mar 10 21:16:34 2004 Ben Pfaff <blp@gnu.org>
+
+ * temporary.c: (cmd_temporary) When TEMPORARY was the first
+ transformation following the input program, if any, for some
+ reason we special-cased f_trns. That's just wrong. It should
+ always be set to n_trns.
+
+Tue Mar 9 23:44:40 2004 Ben Pfaff <blp@gnu.org>
+
+ * format.c: (parse_format_specifier_name) Fix brown-bag bug
+ introduced in last check-in.
+
+Tue Mar 9 23:10:41 2004 Ben Pfaff <blp@gnu.org>
+
+ * format.c: (global array translate_fmt[]) Removed.
+ (translate_fmt) New function as replacement.
+ (parse_format_specifier_name) Rewrite.
+
+ * pfm-read.c: (convert_format) Use translate_fmt() instead of
+ translate_fmt[].
+
+ * sfm-read.c: (parse_format_spec) Ditto.
+
+ * postscript.c: (text) Fix handling of fonts with missing
+ ligatures.
+
+ * sort.c: (struct external_sort) Add temp_name member.
+ (destroy_external_sort) Free temp_dir, temp_name members.
+ (init_external_sort) Allocate temp_name.
+ (get_temp_file_name) Change prototype.
+ (open_temp_file) Deal with change to get_temp_file_name().
+ (close_temp_file) Ditto.
+ (remove_temp_file) Ditto.
+ (write_temp_file) Ditto.
+ (read_temp_file) Ditto.
+ (sort_sink_destroy) Removed.
+ (sort_sink_class) Change destroy member to null.
+
+Tue Mar 9 22:36:34 2004 Ben Pfaff <blp@gnu.org>
+
+ Eliminate temp_case.
+
+ * aggregate.c: (cmd_aggregate) No need to save/restore temp_case
+ anymore. Use agr_11x_finish().
+ (aggregate_single_case) Make first param const.
+ (accumulate_aggregate_info) Ditto.
+ (agr_00x_end_func) Use compaction_case, not temp_case.
+ (agr_11x_func) Break into agr_11x_read(), agr_11x_finish().
+
+ * data-list.c: (struct data_list_pgm) Add `case_size' member.
+ (cmd_data_list) Initialize case_size.
+ (read_from_data_list_fixed) Add struct ccase * param, use instead
+ of temp_case.
+ (read_from_data_list_free) Ditto.
+ (read_from_data_list_list) Ditto.
+ (read_one_case) Rename data_list_trns_proc(), all references
+ updated. Add argument in calling above functions. Use c
+ argument instead of temp_case.
+ (destroy_dls) Rename data_list_trns_free(), all references
+ updated.
+
+ * expr-evl.c: (expr_evaluate) Make second parameter const.
+
+ * file-type.c: (struct file_type_pgm) Add `case_size' member.
+ (cmd_end_file_type) Initialize `case_size'.
+ (file_type_source_read) Add struct ccase * parameter. Use instead
+ of temp_case.
+
+ * flip.c: Rewritten.
+
+ * get.c: (struct get_pgm) New structure to keep track of
+ case_size.
+ (cmd_get) Initialize case_size.
+ (cmd_import) Ditto.
+ (get_source) Deal with struct get_pgm.
+ (get_source_read) Add struct ccase * parameter, use instead of
+ temp_case.
+ (import_source_read) Ditto.
+
+ * get.c: Use a null pointer instead of temp_case to represent the
+ "current case" in a struct mtf_file's input member.
+ (mtf_processing_finish) Pass null to mtf_processing(), not
+ temp_case.
+ (mtf_read_nonactive_records) Don't set iter->input to temp_case.
+ (mtf_compare_BY_values) Add extra arg, use instead of null input
+ members.
+ (mtf_processing) Use c parameter instead of temp_case. Pass
+ compaction_case to process_active_file_output_case().
+
+ * glob.c: (global variable temp_case) Removed.
+
+ * inpt-pgm.c: (struct input_program_pgm) Add `case_size' member.
+ (cmd_input_program) Initialize case_size. Set
+ vfm_source->value_cnt.
+ (init_case) Add struct ccase * parameter, use instead of
+ temp_case.
+ (clear_case) Ditto.
+ (input_program_source_read) Ditto.
+
+ * matrix-data.c: (matrix_data_read_without_rowtype) Ditto.
+ (dump_cell_content) Ditto.
+ (nr_output_data) Ditto.
+ (read_matrices_without_rowtype) Ditto.
+ (matrix_data_read_with_rowtype) Ditto.
+ (wr_read_splits) Ditto.
+ (wr_output_data) Ditto.
+
+ * sort.h: (struct sort_cases_pgm) New member `case_size'.
+
+ * sort.c: (sort_cases) Initialize scp->case_size.
+ (struct external_sort) Remove `case_size' member.
+ (write_initial_runs) Only call vfm_sink->class_destroy if
+ non-null.
+ (struct sort_source_aux) New structure.
+ (sort_source_read_helper) New function.
+ (sort_source_read) Use sort_source_read_helper().
+ (read_sort_output) Change interface to be more reasonable.
+ (read_internal_sort_output) Ditto.
+ (read_external_sort_output) Ditto.
+
+ * vars-prs.c: (dict_class_to_name) Pass return value through
+ gettext.
+
+ * vfm.c: (struct procedure_aux_data) Add `trns_case' member.
+ (procedure) Initialize trns_case.
+ (procedure) Pass trns_case to vfm_source->class->read().
+ Free trns_case.
+ (process_active_file) Start using struct procedure_aux_data.
+ (process_active_file_write_case) Pass trns_case to
+ transformations, lag_case(), clear_case().
+ (process_active_file_output_case) Add struct ccase * parameter.
+ (create_trns_case) New function.
+ (make_temp_case) Removed.
+ (vector_initialization) Removed.
+ (close_active_file) Only call make_source if non-null, otherwise
+ set vfm_source to null pointer. Don't free temp_case.
+ (disk_source_read) Add struct ccase * parameter, use instead of
+ temp_case.
+ (memory_source_read) Ditto.
+ (lag_case) Add const struct ccase * member.
+ (procedure_write_case) Use trns_case instead of temp_case.
+ (clear_case) Add struct ccase * member, use instead of temp_case.
+ (exclude_this_case) Ditto.
+ (create_case_source) Add struct dictionary * parameter, use to
+ initialize source->value_cnt.
+
+ * vfm.h: (struct case_source) Add `value_cnt' member.
+ (struct case_source_class) Add struct ccase * parameter to `read'
+ member function pointer.
+ (struct case_sink_class) Make struct ccase * parameter const in
+ `write' member function pointer.
+
+Wed Mar 3 20:44:37 2004 Ben Pfaff <blp@gnu.org>
+
+ Fix a lot of "possibly uninitialized variable" warnings. Some of
+ them are even real bugs. A few of them make me wonder how the
+ code ever worked.
+
+ * aggregate.c: (parse_aggregate_functions) Initialize `function.
+
+ * ascii.c: (output_lines) Add default case to switch.
+
+ * crosstabs.q: Remove static variable `expected' and all
+ references to it.
+ (display_crosstabulation) Always calculate expected value.
+ (calc_chisq) Ditto.
+ (output_pivot_table) Initialize `cmp'.
+ (display_crosstabulation) New variable `last_row', which is
+ initialized.
+
+ * data-in.c: (parse_numeric) Always initialize sign. How did this
+ work at all?!
+
+ * data-list.c: (repeating_data_trns_proc) Always initialize code.
+ Always set info.ofs. (How did this work?!)
+
+ * expr-opt.c: (optimize_tree) Always initialize `m'.
+ (evaluate_tree) Always initialize `c'. (How did this work?)
+
+ * frequencies.q: (frq_custom_variables) Always initialize min,
+ max.
+ (frq_custom_grouped) Always initialize `dl'.
+
+ * groff-font.c: (groff_read_font) Always initialize char_set.
+
+ * matrix-data.c: (nr_output_data) Initialize `split'.
+ (wr_read_splits) Remove shadowing split_cnt declaration.
+ (wr_output_data) Initialize `split'.
+
+ * output.c: (tokener) Skip add character on syntax error.
+
+ * pool.c: (pool_strndup) Always set `copy'. (How did this work?!)
+
+ * postscript.c: (read_ps_encodings) Use line.string instead of
+ uninitialized `bp'.
+ (write_text) Add default case to switch.
+ (text) Always initialize multiple variables. Fix bug with
+ ligatures.
+
+ * print.c: (fixed_parse_fortran) Initialize head.
+ (alloc_line) Add default case to switch.
+
+ * recode.c: (parse_dest_spec) Handle case where nothing matches.
+ (recode_trns_proc) Move variable declaration inward. Add default
+ case to switch.
+
+ * sfm-read.c: (read_header) Initialize skip_amt.
+
+ * sysfile-info.c: (display_variables) Always initialize pc.
+
+ * vars-prs.c: Initialized `included'.
+
+Wed Mar 3 09:30:09 2004 Ben Pfaff <blp@gnu.org>
+
+ * main.c: (main) sigaction()'s sa_flags member was uninitialized.
+ Just use signal() instead.
+
+Wed Mar 3 09:26:30 2004 Ben Pfaff <blp@gnu.org>
+
+ Get rid of vfm_sink_info and vfm_source_info.
+
+ * aggregate.c: (agr_00x_end_func) Don't increment
+ sfm_sink_info.ncases.
+
+ * sort.c: (do_internal_sort) Get case count from
+ vfm_source->class->count().
+ (struct external_sort) Add `case_size' member.
+ (do_external_sort) Initialize case_size.
+ (struct initial_run_state) Add `case_size' member.
+ (write_initial_runs) Initialize case_size.
+ (sort_sink_write) Use case_size.
+ (read_external_sort_output) Use case_size. Get case_cnt from
+ initial_runs.
+
+ * vfm.c: (struct write_case_data) Add underscores to existing arg
+ names, all references updated. Renamed `aux' as `func_aux', all
+ references updated. Added new `aux' member.
+ (global var vfm_source_info) Removed.
+ (global var vfm_sink_info) Removed.
+ (struct procedure_aux_data) New.
+ (struct split_aux_data) New.
+ (procedure) Use `aux' fields for procedure_aux_data,
+ split_aux_data.
+ (process_active_file_write_case) Pass case_count + 1 to
+ transformation procedures, exclude_this_case().
+ (process_active_file_output_case) Don't increment
+ vfm_sink_info.ncases.
+ (prepare_for_writing) Don't initialize vfm_sink_info. Don't try
+ to send data to disk early.
+ (make_temp_case) Don't use vfm_sink_info.case_size.
+ (close_active_file) Don't initialize vfm_source_info.
+ (struct disk_stream_info) New, to allow for case_cnt and case_size fields.
+ (disk_sink_create) Initialize and/or update disk_stream_info.
+ (disk_sink_write) Ditto.
+ (disk_sink_destroy) Ditto.
+ (disk_sink_make_source) Ditto.
+ (disk_source_read) Ditto.
+ (disk_source_destroy) Ditto.
+ (global var disk_source_class) Add disk_source_count().
+ (disk_source_count) New function.
+ (struct memory_sink_info) Add `case_cnt', `case_size' members.
+ (struct memory_source_info) Ditto.
+ (memory_sink_create) Deal with case_cnt, case_size.
+ (memory_sink_write) Ditto.
+ (memory_sink_make_source) Ditto.
+ (memory_source_read) Ditto.
+ (memory_source_count) New function.
+ (memory_source_class) Add memory_source_count().
+ (procedure_write_case) Don't use vfm_sink_info.ncases. Do use
+ proc_aux->cases_written, and pass it to transformation procedures
+ and exclude_this_case ().
+ (exclude_this_case) Add case_num parameter. Pass it to
+ expr_evaluate().
+ (SPLIT_FILE_procfunc) Use split_aux->prev_case instead of static
+ variable.
+
+ * vfm.h: (struct case_source_class) Add `count' member.
+
+ * vfmP.h: (struct stream_info) Removed.
+ (global variable vfm_source_info) Removed.
+ (global variable vfm_sink_info) Removed.
+
+Tue Mar 2 23:38:17 2004 Ben Pfaff <blp@gnu.org>
+
+ * var.h: (typedef trns_proc_func) New typedef.
+ (trns_free_func) New typedef.
+ (struct trns_header) Change `proc' to type trns_proc_func, `free'
+ to type trns_free_func. This only changes the actual type of
+ trns_proc_func, adding a `case_num' parameter. Updated all
+ implementations to use the typedefs instead.
+
+ * compute.c: (compute_num) Pass case_num to expr_evaluate().
+ (compute_num_vec) Ditto.
+ (compute_str) Ditto.
+ (compute_str_vec) Ditto.
+
+ * do-if.c: (do_if_trns_proc) Ditto.
+
+ * expr-evl.c: (expr_evaluate) Add new case_num parameter, use for
+ OP_CASENUM.
+
+ * inpt-pgm.c: (input_program_source_read) Maintain case count,
+ pass to transformation functions.
+ (reread_trns_proc) Pass case_num arg to expr_evaluate().
+
+ * loop.c: (loop_1_trns_proc) Ditto.
+ (loop_2_trns_proc) Ditto.
+ (loop_3_trns_proc) Ditto.
+
+ * print.c: (print_space_trns_proc) Ditto.
+
+ * sel-if.c: (select_if_proc) Ditto.
+
+Tue Mar 2 11:36:52 2004 Ben Pfaff <blp@gnu.org>
+
+ * frequencies.q: (cleanup_freq_tab) Avoid memory leak by
+ destroying hash table.
+
+ * glob.c: (read_active_file) Variable not referenced, removed.
+ (cancel_input_pgm) Ditto.
+
+ * levene.c: Add #include <stdlib.h> needed to call free().
+
+ * aggregate.c: (parse_aggregate_functions) Make `function'
+ variable const.
+
+Tue Mar 2 11:30:56 2004 Ben Pfaff <blp@gnu.org>
+
+ Start working to eliminate VFM dependence on static variables.
+
+ * command.c: (cmd_parse) Use case_source_is_class().
+
+ * data-list.c: Rewrite to eliminate use of static variables.
+
+ * dfm.c: (cmd_begin_data) Use case_source_is_class().
+
+ * file-handle.q: (fh_handle_name) Make parameter const.
+
+ * file-type.c: Rewrite to eliminate use of static variables.
+
+ * flip.c: Rewrite to eliminate use of static variables.
+
+ * format.c: (get_format_var_width) New function.
+
+ * get.c: Eliminate use of static variables.
+
+ * inpt-pgm.c: Eliminate use of static variables.
+
+ * matrix-data.c: Eliminate use of static variables.
+
+ * set.q: (set_max_workspace) New variable.
+ (cmd_set) Use SET WORKSPACE to modify set_max_workspace.
+
+ * var.h: (struct case_list) Move here from vfmP.h.
+
+ * vars-atr.c: (discard_variables) Handle new vfm_source type.
+
+ * vfm.c: (vfm_source) Change type from struct case_stream to
+ struct case_source.
+ (vfm_sink) Change type from struct case_stream to struct
+ case_sink.
+ (static var paging) Rename workspace_overflow, all references
+ updated.
+ (procedure) Use new class structures.
+ (process_active_file) Ditto.
+ (process_active_file_write_case) Ditto.
+ (prepare_for_writing) Use set_max_workspace. Use new class
+ structures.
+ (close_active_file) Use new class structures. Free old sink.
+ (global var disk_source_file) Removed.
+ (global var disk_sink_file) Removed.
+ (disk_stream_init) Removed.
+ (disk_stream_read) Removed.
+ (disk_stream_write) Removed.
+ (disk_stream_mode) Removed.
+ (disk_stream_destroy_source) Removed.
+ (disk_stream_destroy_sink) Removed.
+ (global var vfm_disk_stream) Removed.
+ (disk_sink_create) New function.
+ (disk_sink_write) New function.
+ (disk_sink_destroy) New function.
+ (disk_sink_make_source) New function.
+ (disk_sink_class) New static var.
+ (disk_source_read) New function.
+ (disk_source_destroy) New function.
+ (global var vfm_source_class) New var.
+ (global var memory_source_cases) Removed.
+ (global var memory_sink_cases) Removed.
+ (global var memory_sink_max_cases) Removed.
+ (struct memory_sink_info) New struct.
+ (memory_stream_init) Removed.
+ (memory_stream_read) Removed.
+ (memory_stream_write) Removed.
+ (memory_stream_mode) Removed.
+ (memory_stream_destroy_source) Removed.
+ (memory_stream_destroy_sink) Removed.
+ (global var vfm_memory_stream) Removed.
+ (page_to_disk) Renamed write_active_file_to_disk().
+ (memory_sink_create) New function.
+ (memory_sink_write) New function.
+ (memory_sink_destroy) New function.
+ (memory_sink_make_source) New function.
+ (memory_sink_class) New static var.
+ (memory_source_read) New function.
+ (memory_source_destroy) New function.
+ (memory_source_get_cases) New function.
+ (memory_source_set_cases) New function.
+ (global var vfm_source_class) New var.
+ (procedure_write_case) Use new class structures.
+ (create_case_source) New function.
+ (case_source_is_complex) New function.
+ (case_source_is_class) New function.
+ (create_case_sink) New function.
+
+ * vfm.h: (global variable reinit_sysmis) Not used, removed.
+ (global variable reinit_blanks) Not used, removed.
+ (global variable init_zero) Not used, removed.
+ (global variable init_blanks) Not used, removed.
+ (struct case_source) New struct.
+ (struct case_source_class) New struct.
+ (struct case_sink) New struct.
+ (struct case_sink_class) New struct.
+ (struct case_stream) Removed.
+
+ * vfmP.h: (struct case_list) Moved to var.h.
+
+Tue Mar 2 11:28:30 2004 Ben Pfaff <blp@gnu.org>
+
+ * algorithm.c: (count_equal) New function.
+ (count_if) New function.
+ (unique) Add assertions.
+ (partition) Add assertions.
+ (is_partitioned) New function.
+ (copy_if) Add assertions.
+ (remove_equal) Add assertions.
+ (lexicographical_compare) Rename lexicographical_compare_3way.
+ (sort) Add assertions. Rephrase some code.
+ (is_sorted) New function.
+
+Sun Feb 29 23:24:57 2004 Ben Pfaff <blp@gnu.org>
+
+ Rewrite SORT CASES.
+
+ * sort.c: Completely rewrite.
+
+ * sort.h: Expose interface via struct sort_cases_pgm, not via
+ global variables.
+
+ * aggregate.c: (sort) New static var.
+ (cmd_aggregate) Use sort.
+ (create_sysfile) Ditto.
+ (aggregate_single_case) Ditto.
+ (dump_aggregate_info) Ditto.
+ (agr_00x_end_func) Ditto.
+ (debug_print) Ditto.
+
+ * var.h: (enum SRT_ASCEND) Removed.
+ (enum SRT_DESCEND) Removed.
+ (struct sort_cases_proc) Removed.
+ (struct variable) Remove p.srt member.
+
+Sun Feb 29 23:22:45 2004 Ben Pfaff <blp@gnu.org>
+
+ Get rid of the old, crappy heap structure and replace it by a new,
+ shiny, C++ STL-like heap structure.
+
+ * Makefile.am: (pspp_SOURCES) Remove heap.c, heap.h.
+
+ * algorithm.c: (push_heap) New function.
+ (heapify) Ditto.
+ (pop_heap) Ditto.
+ (make_heap) Ditto.
+ (sort_heap) Ditto.
+ (is_heap) Ditto.
+
+ * heap.c: Removed.
+
+ * heap.h: Removed.
+
+Sun Feb 29 23:21:53 2004 Ben Pfaff <blp@gnu.org>
+
+ Increase warning level.
+
+ * Makefile.am: (AM_CFLAGS) Remove -Wnouninitialized.
+
+Sat Feb 21 17:38:58 WST 2004 John Darrington <john@darrington.wattle.id.au>
+
+ * main.c: Added a signal handler for SIGSEGV requesting a bug report.
+
+Fri Feb 20 23:22:14 2004 Ben Pfaff <blp@gnu.org>
+
+ * dictionary.c: (dict_create_var) Fix root cause of bug worked
+ around by previous change log entry.
+
+ * compute.c: (lvalue_finalize) Remove workaround from previous
+ change log entry.
+
+Fri Feb 20 14:37:41 WAST 2004 John Darrington <john@darrington.wattle.id.au>
+
+ * compute.c: Fixed a bug where the Format was not getting set for
+ computed variables (thus causing a crash when SAVEing).
+
+ * Added a test to stop this bug ever coming back
+
+Wed Feb 18 22:21:35 2004 Ben Pfaff <blp@gnu.org>
+
+ Got rid of approx.h. In general, replaced all references to
+ approx_eq() by ==, approx_lt() by <, etc. Other types of changes
+ noted below.
+
+ * Makefile.am: (pspp_SOURCES) Removed approx.h.
+
+ * data-out.c: (try_F) Replaced test for approx_eq(number, 0.0) by
+ test for mag < EPSILON.
+
+ * misc.h: Add definition of EPSILON.
+
+Wed Feb 18 21:32:44 2004 Ben Pfaff <blp@gnu.org>
+
+ * vfm.c: (procedure) Add check to prevent recursive call.
+
+Wed Feb 18 21:48:54 WST 2004 John Darrington <john@darrington.wattle.id.au>
+
+ * Moved the declarations relating to values to their own header file
+ (val.h)
+
+ * Added levene.c and levene.h
+
+ * vars-atr.c: Changed the signature of compare_values to
+ take const * arguments.
+
+ * t-test.q: Changed the structure of struct t_test_proc
+ variables now contain their own group statistics information.
+ Eventually, t_test_proc might get renamed, because it'd be
+ applicable to other commands too.
+
+Mon Feb 16 23:15:51 2004 Ben Pfaff <blp@gnu.org>
+
+ * data-out.c: Clean up. Changed interface of convert_*() to take
+ either a `double' or a `const char *' instead of a `const union
+ value *'. Update all implementations of those interfaces.
+ (data_out) Use switch statements instead of a table.
+ (convert_AHEX) Rewrite.
+
+ * format.h: Update comment.
+
+Mon Feb 16 22:14:36 2004 Ben Pfaff <blp@gnu.org>
+
+ * q2c.c: (dump_header) Add an Emacs header line to output files
+ that makes generated .c files read-only by default, to make it
+ difficult to accidentally change generated files.
+
+Mon Feb 16 22:12:07 2004 Ben Pfaff <blp@gnu.org>
+
+ * frequencies.q: (compare_freq_numeric_a) Compare by frequency,
+ not bogus a->v.c <=> b->v.c pointer compare.
+ (compare_freq_alpha_a) Ditto.
+ (compare_freq_numeric_d) Ditto.
+ (compare_freq_alpha_d) Ditto.
+
+Mon Feb 16 22:00:53 2004 Ben Pfaff <blp@gnu.org>
+
+ Changed data_out() to store string data directly into a `union
+ value''s s member, not indirectly into c.
+
+ * crosstabs.q: (output_pivot_table) Use format_short() instead of
+ data_out().
+ (table_value_missing) Ditto.
+ (float_M_suffix) Ditto.
+ (format_short) New function.
+
+ * data-in.h: (data_in_finite_line) Remove inline definition.
+
+ * data-list.c: (destroy_dls_var_spec) New function.
+ (destroy_dls) Rewrite in terms of destroy_dls_var_spec().
+ (data_list_source_destroy_source) Avoid cast.
+ (struct repeating_data_trns) New field `id_value'. Update
+ comments.
+ (cmd_repeating_data) Initialize id_value. Use new
+ repeating_data_trns_free() for freeing REPEATING DATA
+ transformations.
+ (rpd_parse_record) Rewrite support for record ID to be less bogus.
+ (repeating_data_trns_free) New function.
+
+ * data-out.c: (data_out) Change return type to `void' by replacing
+ error returns by writing a message into the output buffer.
+ (convert_A) Read from v->s instead of v->c.
+ (convert_AHEX) Ditto.
+
+ * expr-evl.c: Update comment.
+ (expr_evaluate) Add assertion in OP_STRING case.
+
+ * format.h: (macro MAX_FORMATTED_LEN) New macro.
+
+ * list.q: (list_cases) Update for new data_out() semantics.
+
+ * print.c: (print_trns_proc) Ditto.
+
+ * tab.c: (tab_value) Ditto.
+ (tab_float) Avoid stupid cast.
+
+ * var.h: Update comments.
+ (macro MAX_STRING) New macro.
+ (macro MAX_ELEMS_PER_VALUE) New macro.
+
+ * vars-atr.c: (compare_values) New function.
+
+ * vfm.c: (dump_splits) Update for new data_out() semantics.
+
+Mon Feb 16 21:45:47 2004 Ben Pfaff <blp@gnu.org>
+
+ * crosstabs.q: (struct table_entry) Rename v[] to values[]. All
+ references updated.
+ (struct crosstab) Rename v[] to vars[]. All references updated.
+ (hash_table_entry) Replace the hash algorithm and fix a bug at the
+ same time, which caused the hash value to depend only on a single
+ value, not all of the variables' values.
+
+Mon Feb 16 12:49:53 2004 Ben Pfaff <blp@gnu.org>
+
+ Clean up struct dictionary's value_cnt usage.
+
+ * dictionary.c: Add a function comment to each function.
+ (struct dictionary) Rename value_cnt to next_value_idx, which more
+ accurately reflects its meaning. All references updated.
+ (dict_rename_vars) Add assertion.
+ (dict_get_value_cnt) Rename dict_get_next_value_idx(). All
+ references updated.
+ (dict_get_case_size) New function.
+
+ * aggregate.c: (create_sysfile) Use dict_get_case_size().
+
+ * get.c: (mtf_read_nonactive_records) Ditto.
+
+ * sort.c: (allocate_cases) Ditto.
+ (write_initial_runs) Ditto.
+ (merge) Ditto.
+ (merge_once) Ditto.
+
+ * vfm.c: (prepare_for_writing) Ditto.
+ (setup_lag) Ditto.
+ (lag_case) Ditto.
+
+Mon Feb 16 00:17:55 2004 Ben Pfaff <blp@gnu.org>
+
+ Make vfm.c slightly less grotesque.
+
+ * vfm.c: (filter_var) Removed.
+ (filter_index) Removed.
+ (FILTERED macro) Removed.
+ (exclude_this_case) New function.
+ (process_active_file_write_case) Use exclude_this_case() instead
+ of FILTERED and inline tests.
+ (procedure_write_case) Ditto.
+ (setup_filter) Removed.
+ (open_active_file) Don't call setup_filter().
+ (close_active_file) Call dict_get_filter() instead of checking
+ filter_var.
+
+Mon Feb 16 00:01:53 2004 Ben Pfaff <blp@gnu.org>
+
+ * var.h: (struct variable) Update comments.
+
+Sun Feb 15 23:14:59 2004 Ben Pfaff <blp@gnu.org>
+
+ New functions dict_create_var_assert(), dict_lookup_var_assert().
+ Converted several dict_*_var()/assert pairs into a single
+ dict_*_var_assert().
+
+ * dictionary.c: (dict_create_var_assert) New function.
+ (dict_lookup_var_assert) New function.
+
+Sun Feb 15 23:06:08 2004 Ben Pfaff <blp@gnu.org>
+
+ Got rid of "struct long_vec", envector(), devector(), etc. Added
+ two members `init', `reinit' to struct variable as a substitute.
+
+ * Makefile.am: (pspp_SOURCES) Removed cases.c, cases.h.
+
+ * cases.c: Removed.
+
+ * cases.h: Removed.
+
+ * aggregate.c: (parse_aggregate_functions) destvar doesn't need
+ init.
+
+ * autorecode.c: (cmd_autorecode) destvars don't need init.
+
+ * compute.c: (lvalue_finalize) Set reinit.
+
+ * data-list.c: (fixed_parse_compatible) Don't need init usually.
+ (dump_fmt_list) Ditto.
+ (parse_free) Ditto.
+
+ * descript.q: (run_z_pass) Don't need init for z-scores.
+
+ * dictionary.c: (dict_create_var) Initialize `init', `reinit'
+ members.
+ (dict_clone_var) Copy `reinit' member, initialize `init' member.
+
+ * glob.c: (init_glob) Remove vec_init() calls.
+
+ * inpt-pgm.c: (cmd_end_input_program) Use `reinit', not `left'.
+
+ * loop.c: (internal_cmd_loop) Don't need to call envector().
+
+ * numeric.c: (cmd_numeric) Ditto.
+ (cmd_string) Ditto.
+ (cmd_leave) Ditto. Set `init', `reinit' members.
+
+ * recode.c: (cmd_recode) Don't need to call envector().
+
+ * repeat.c: (internal_cmd_do_repeat) Ditto.
+
+ * var.h: (struct variable) Remove `left'. Add `init', `reinit'.
+ (force_create_variable) Removed prototype.
+ (force_dup_variable) Ditto.
+
+ * vector.c: (cmd_vector) Don't need to call envector().
+
+ * vfm.c: (reinit_sysmis) Removed.
+ (reinit_blanks) Removed.
+ (init_zero) Removed.
+ (init_blanks) Removed.
+ (process_active_file_write_case) No need to deal with vectors.
+ Call clear_temp_case().
+ (vector_initialization) Rewrite to use `init', `reinit'.
+ (close_active_file) No need to call vec_clear().
+ (procedure_write_case) Call clear_temp_case().
+ (clear_temp_case) New function.
+
+Sun Feb 15 20:50:36 2004 Ben Pfaff <blp@gnu.org>
+
+ * pfm-write.c: (bufwrite) Get rid of nasty cast that also invoked
+ undefined behavior.
+
+Thu Feb 12 23:35:15 2004 Ben Pfaff <blp@gnu.org>
+
+ Add auxiliary argument to procedure() interface. Associated small
+ clean-ups of vfm interface.
+
+ * Updated every caller of procedure() and process_active_file() to
+ reflect modified interface. Simple, ordinary changes not listed
+ otherwise below.
+
+ * Updated every function that implements struct case_stream's
+ `read' function to take a write_case_func and a write_case_data.
+ Also updated every caller of write_case() to instead call them
+ through these arguments. In some cases this meant that the extra
+ args had to be threaded through a couple of extra levels. This
+ wasn't difficult or interesting so the details won't be given.
+
+ * data-list.c: (struct repeating_data_trns) Add members
+ `write_case', `wc_data' as kluge.
+ (read_one_set_of_repetitions) Rename repeating_data_trns_proc and
+ make non-static.
+ (repeating_data_set_write_case) New function.
+
+ * data-list.h: New file to declare repeating_data_trns_proc() and
+ repeating_data_set_write_case().
+
+ * inpt-pgm.c: (input_program_source_read) Call
+ repeating_data_set_write_case() for all the REPEATING DATA
+ transformations, so that they know where to send their cases.
+ It's a big kluge. Also kluge in END CASE.
+ (end_case_trns_proc) Never called anymore, but we still need it,
+ so just assert(0).
+
+ * sort.c: (read_sort_output) Update to match struct case_stream
+ `read' member.
+
+ * vfm.c: (struct write_case_data) New structure.
+ (proc_func) Removed.
+ (virt_proc_func) Removed.
+ (begin_func) Removed.
+ (virt_begin_func) Removed.
+ (end_func) Removed.
+ (write_case) Removed.
+ (procedure) Added an auxiliary parameter to each function pointer
+ argument's prototype. Added an auxiliary data parameter.
+ Rewrote.
+ (process_active_file) Ditto.
+ (process_active_file_write_case) Pass aux data along.
+ (close_active_file) Ditto.
+ (procedure_write_case) Ditto.
+ (SPLIT_FILE_procfunc) Ditto.
+
+ * vfm.h: (typedef write_case_data) New.
+ (typedef write_case_func) New.
+ (struct case_stream) Add parameters to `read' member prototype.
+
+Thu Feb 12 19:24:53 WST 2004 John Darrington <john@darrington.wattle.id.au>
+
+ * t-test.q: Added calculations for independent samples. (But no Levene
+ test yet!)
+
+ * Makefile.am: Moved q_sources_c into own variable
+
+Wed Feb 11 23:56:51 2004 Ben Pfaff <blp@gnu.org>
+
+ Miscellaneous cleanups.
+
+ * Change unused to UNUSED in many source files to reflect modified
+ pref.h. Change use of __WIN32__, __MSDOS, __DJGPP__,
+ __CYGWIN32__, __unix__, and unix not to assume that they're
+ defined to a nonzero value. Change use of __attribute__ to use
+ NO_RETURN or PRINTF_FORMAT instead.
+
+ * alloc.h: Move definitions for local_alloc(), local_free() here
+ from ../pref.h.orig and simplify.
+
+ * expr-evl.c: Instead of working differently based on PAGED_STACK,
+ use a pool allocator unconditionally.
+ (CHECK_STRING_SPACE) Removed.
+ (ALLOC_STRING_SPACE) Removed.
+ (expr_evaluate) Use e->pool instead of CHECK_STRING_SPACE and
+ ALLOC_STRING_SPACE.
+
+ * expr-opt.c: (dump_expression) Allocate string pool.
+
+ * expr-prs.c: (expr_free) Free string pool.
+
+ * pool.c: (pool_destroy) This pool must be removed from its
+ parent's list of gizmos, not from its own. Use free_all_gizmos().
+ (pool_clear) New function.
+ (free_all_gizmos) New function.
+ (pool_alloc) Use space in empty block after this one if any.
+ (pool_release) Only empty out blocks, don't actually free() them.
+
+ * print.c: Get rid of PAGED_STACK special case by always
+ dynamically allocating line buffers.
+ (struct print_trns) Always include the `line' member.
+ (internal_cmd_print) Always initialize the `line' member.
+ (alloc_line) Always allocate memory for `line'.
+ (print_trns_proc) Always initialize buf from `line' member.
+ (print_trns_free) Always free `line' memory.
+
+ * sort.c: (allocate_file_handles) Special-case MS-DOS for mkdir()
+ call.
+
Wed Feb 11 20:33:18 2004 Ben Pfaff <blp@gnu.org>
* flip.c: Fixed crash from FLIP when a numeric variable is