+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.
+