X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2FChangeLog;h=2e52e8ef05389ff7e867d7ebf320d2da54ef9341;hb=e2d29425623acc682e4bf28003bee0fcd91a86d3;hp=c6e600181c6d69da88e1c989b44f3080f57ed557;hpb=7fa020a6e6a7807bbc810576cbf4fcea56c98d44;p=pspp diff --git a/src/ChangeLog b/src/ChangeLog index c6e600181c..2e52e8ef05 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,1947 @@ +Mon Mar 15 20:48:03 2004 Ben Pfaff + + 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 + + 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 + + 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 + + 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 + + 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 + + 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 + + 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 + + * 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 + + 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 + + * 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 + + * 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 + + 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 + + * 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 + + * format.c: (parse_format_specifier_name) Fix brown-bag bug + introduced in last check-in. + +Tue Mar 9 23:10:41 2004 Ben Pfaff + + * 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 + + 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 + + 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 + + * main.c: (main) sigaction()'s sa_flags member was uninitialized. + Just use signal() instead. + +Wed Mar 3 09:26:30 2004 Ben Pfaff + + 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 + + * 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 + + * 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 needed to call free(). + + * aggregate.c: (parse_aggregate_functions) Make `function' + variable const. + +Tue Mar 2 11:30:56 2004 Ben Pfaff + + 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 + + * 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 + + 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 + + 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 + + Increase warning level. + + * Makefile.am: (AM_CFLAGS) Remove -Wnouninitialized. + +Sat Feb 21 17:38:58 WST 2004 John Darrington + + * main.c: Added a signal handler for SIGSEGV requesting a bug report. + +Fri Feb 20 23:22:14 2004 Ben Pfaff + + * 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 + + * 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 + + 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 + + * vfm.c: (procedure) Add check to prevent recursive call. + +Wed Feb 18 21:48:54 WST 2004 John Darrington + + * 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 + + * 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 + + * 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 + + * 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 + + 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 + + * 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 + + 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 + + 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 + + * var.h: (struct variable) Update comments. + +Sun Feb 15 23:14:59 2004 Ben Pfaff + + 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 + + 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 + + * pfm-write.c: (bufwrite) Get rid of nasty cast that also invoked + undefined behavior. + +Thu Feb 12 23:35:15 2004 Ben Pfaff + + 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 + + * 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 + + 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 + + * flip.c: Fixed crash from FLIP when a numeric variable is + specified on NEWNAMES and a large value is used, and a couple of + other minor bugs besides. + (struct varname) Make name a 9-character fixed-size array + instead of a 1-character variable size array. + (make_new_var) Allow digits in variable names. + (flip_stream_write) Limit numeric values to 8 characters and + format system missing and very large and small values more + appropriately. + +Thu Feb 5 13:19:06 WAST 2004 John Darrington + + * command.c: Fixed test on command return status for the correct + value, which had been causing a crash under certain invalid input. + +Wed Feb 4 15:34:11 WST 2004 John Darrington + + * t-test.q: Added calculations for the one sample variant of the T-TEST + +Tue Feb 3 20:09:54 2004 Ben Pfaff + + * tab.c: (render_strip) Fix bug that sometimes caused joined text + in joined cells to be rendered outside box boundaries. + +Tue Feb 3 18:56:45 WST 2004 John Darrington + + * random.c (rng_create): Fixed seeding so that it gets reseeded after + SET seed=xx has been called. + +Mon Jan 19 14:08:09 2004 Ben Pfaff + + * random.c (rng_get_double): Fix always-returning-zero bug in my + preferred way, and at the same time make sure rounding doesn't + bite us. + +Thu Jan 1 23:16:41 2004 Ben Pfaff + + * html.c: (change_attributes) Dead code, removed. + (escape_string) Eliminate code to call change_attributes() that + never actually called it. + (output_tab_table) Get rid of dependence on tab_hit + and struct tab_joined_cell's hit member, which are abominations. + + * tab.c: (tab_output_text) Don't call + d->class->text_set_font_by_name if it's a null pointer. + (macro UNROLL_LOOP) Eliminate. + (macro UNROLL_3_LOOPS) Eliminate. + (tabi_render) Rewrite not to use the above macros. + +Thu Jan 1 23:09:07 2004 Ben Pfaff + + Start working on a new output driver system, one that doesn't suck + so much, by adding a "device-independent" output driver. The idea + is to write out only a single output stream, then use separate + processes to translate them into whatever formats we want. This + is similar to how "groff" works with its various output drivers + (grops, grotty, grodvi, ...). + + * Makefile.am: (pspp_SOURCES) Add devind.c, devind.h. + + * list.q: (write_all_headers) Stub out devind class. + (clean_up) Ditto. + (determine_layout) Ditto. + (list_cases) Ditto. + + * output.c: (outp_init) Add devind class. + + * devind.c: New file. + + * devind.h: New file. + +Thu Jan 1 23:08:14 2004 Ben Pfaff + + * frequencies.q: (hash_value_alpha) Fixed up the previous change + to use the proper string length. + +Wed Dec 31 16:27:33 WAST 2003 John Darrington + + * Fixed bug where FREQ would crash on alpha values + +Tue Dec 30 22:42:57 2003 Ben Pfaff + + * Removed bletcherous alloca() workarounds for AIX from top of + many files. AIX can use the alternative alloca() implementation + instead. + +Tue Dec 30 22:35:16 2003 Ben Pfaff + + * ascii.c: (ascii_option) Fix implementation of headers option. + +Tue Dec 30 22:32:53 2003 Ben Pfaff + + * ascii.c: Add a "squeeze" option to the ASCII driver to squeeze + multiple blank lines into one. + (struct ascii_driver_ext) Add squeeze_blank_lines option. + (ascii_preopen_driver) Initialize squeeze_blank_lines. + (static var option_tab) Add squeeze entry. + (ascii_option) Set squeeze_blank_lines. + (output_lines) Implement squeezing blank lines. + +Wed Dec 31 07:19:46 WST 2003 John Darrington + + * Removed redundant code from output.h + +Sat Dec 27 22:17:52 2003 Ben Pfaff + + Dictionary classes: each variable is "ordinary", "system", or + "scratch". + + * var.h: (enum dict_class) New enum. + + * vars-prs.c: (dict_class_from_id) New function. + (dict_class_to_name) New function. + +Sat Dec 27 22:16:06 2003 Ben Pfaff + + * var.h: (struct freq_tab_set) Removed (not used). + +Sat Dec 27 22:15:21 2003 Ben Pfaff + + * value-labels.c: (val_labs_destroy) vls needs to be freed too. + +Sat Dec 27 22:10:49 2003 Ben Pfaff + + * stats.c: (hypercube) Rename pow4(). All references updated. + +Sat Dec 27 22:05:49 2003 Ben Pfaff + + * rename-vars.c: (cmd_rename_variables) Rewritten. + (compare_name) Removed. + +Sat Dec 27 22:03:51 2003 Ben Pfaff + + var_set feature, and code taking advantage of it. + + * crosstabs.q: (static var var_dict) Removed. + (static var variables) New variable. + (static var variables_cnt) New variable. + (cmd_crosstabs) Free variables instead of var_dict. + (internal_cmd_crosstabs) Initialize and use variables, + variables_cnt instead of var_dict. + (free_var_dict) Removed. + (crs_custom_tables) Use var_set instead of a copied dictionary. + (crs_custom_variables) Set up variables, variables_cnt instead of + var_dict. + [DEBUGGING] (debug_print) Ditto. + + * means.q: (mns_custom_tables) Use var_set instead of a copied + dictionary. + + * vars-prs.c: (parse_vs_variable) New function. + (parse_dict_variable) Rewritten. + (parse_variable) Rewritten. + (parse_variables) Renamed parse_var_set_vars(), rewritten. + (parse_variables) New function in terms of parse_var_set_vars(). + Now requires its first argument to be non-null. All references + that passed a null pointer updated to pass default_dict instead. + (macro id_dict) Removed. + (parse_DATA_LIST_vars) Add assertions. + (parse_mixed_vars) Ditto. + (struct var_set) New structure. + (var_set_get_cnt) New function. + (var_set_get_var) New function. + (var_set_lookup_var) New function. + (var_set_destroy) New function. + (dict_var_set_get_cnt) New function. + (dict_var_set_get_var) New function. + (dict_var_set_lookup_var) New function. + (dict_var_set_destroy) New function. + (var_set_create_from_dict) New function. + (struct array_var_set) New structure. + (array_var_set_get_cnt) New function. + (array_var_set_get_var) New function. + (array_var_set_lookup_var) New function. + (array_var_set_destroy) New function. + (var_set_create_from_array) New function. + + * q2c.c: (dump_parser) Use parse_variables(default_dict, ...) + instead of parse_variables(NULL, ...) in output code. + +Sat Dec 27 21:38:53 2003 Ben Pfaff + + Change inp_init from a 2-bit vector to an ordinary array. + Initialize it all in cmd_end_input_program() instead of in + create_variable(). + + * inpt-pgm.c: (enum value_init_type) New enum. + (global var inp_init) Change to `enum value_init_type *', make + static. + (inp_init_size) Removed. + (inp_nval) Change to `size_t', make static. + (cmd_input_program) Don't initialize inp_init or inp_init_size. + (cmd_end_input_program) Initialize inp_init, inp_nval. + (init_case) Rewrite. + (clear_case) Rewrite. + + * inpt-pgm.h: Removed. + +Sat Dec 27 21:36:38 2003 Ben Pfaff + + * hash.c: (hsh_hash_bytes) Use Fowler-Noll-Vo hash instead of + Colin Plumb hash. It is simpler and should better resist + collisions. + (hsh_hash_string) Ditto. + +Sat Dec 27 21:34:57 2003 Ben Pfaff + + * get.c: (export_write_case_func) Remove debug printing code. + +Sat Dec 27 21:11:09 2003 Ben Pfaff + + * get.c: (cmd_save_internal) Rename parameter. Use &t->h instead + of cast. + (save_write_case_func) Use &trns->h instead of cast. + (cmd_export) Use &t->h instead of cast. + +Sat Dec 27 20:57:42 2003 Ben Pfaff + + Moved vectors into the dictionary. + + * var.h: (struct vector) Moved here from vector.h. `index' member + renamed `idx', `v' renamed `var', `nv' renamed `cnt'. All + references updated. + + * vector.h: Removed. + + * vector.c: (global var vec) Removed. + (global var nvec) Removed. + (cmd_vector) Rewritten. + (find_vector) Removed. + + * dictionary.c: (dict_create_vector) New function. + (dict_get_vector) New function, replaces reading global vec[] + array. + (dict_get_vector_cnt) New function, replaces reading global nvec + variable. + (dict_lookup_vector) New function, replaces find_vector(). + (dict_clear_vectors) New function. + +Sat Dec 27 20:54:01 2003 Ben Pfaff + + Start to move away from `struct variable' p `union' member to void + * aux member. + + * var.h: (struct variable) Add `aux' member. + +Sat Dec 27 20:36:25 2003 Ben Pfaff + + Get rid of struct variable `foo' member. + + * frequencies.q: (internal_cmd_frequencies) Use p.frq.used instead + of foo. + (frq_custom_variables) Ditto. + (frq_custom_grouped) Ditto. + + * get.c: (struct save_trns) Change `var' member from `int *' to + `struct variable **'. + (cmd_save_internal) Use aux instead of foo. + (save_trns_proc) Use revised `var' member. + (static var mtf_seq_no) Renamed mtf_seq_num. + (static var mtf_seq_nums) New static var. + (cmd_match_files) Initialize mtf_seq_nums. + (mtf_free) Free mtf_seq_nums. + (mtf_processing) Use mtf_seq_nums instead of foo. + (mtf_merge_dictionary) No need to initialize mv->foo. + (cmd_export) Use aux instead of foo. Use revised `var' member. + (mns_custom_tables) Don't use foo to check for duplicates, that's + what PV_NO_DUPLICATE is for. + + * var.h: (struct variable) Remove `foo' member. + (struct frequencies_proc) New member. + +Sat Dec 27 19:46:13 2003 Ben Pfaff + + Clean up COMPUTE and IF. + + * compute.c: More or less rewrite the darn thing. + (struct compute_trns) Rename and reorder and add and delete + members. + (cmd_compute) Rewrite. + (compute_num) Make conditional on test expression. Now used for + both COMPUTE and IF. + (compute_num_vec) Ditto. + (compute_str) Ditto. + (compute_str_vec) Ditto. + (cmd_if) Rewrite. + (if_num) Removed. + (if_num_vec) Removed. + (if_str) Removed. + (if_str_vec) Removed. + (parse_target_expression) Renamed parse_rvalue_expression(), + rewritten. + (new_trns) Renamed compute_trns_create(), rewritten. + (delete_trns) Removed. + (free_trns) Renamed compute_trns_free(), rewritten. + (struct lvalue) New structure. + (parse_var_or_vec) Renamed lvalue_parse(), rewritten. + (lvalue_get_type) New function. + (lvalue_is_vector) New function. + (lvalue_finalize) New function. + (lvalue_destroy) New function. + +Sat Dec 27 19:44:14 2003 Ben Pfaff + + * command.def: Disallow MODIFY VARS in input mode, so that + variables can't get dropped and confuse cmd_end_input_program()'s + attempt to fill inp_init[]. + + * modify-vars.c: (static var forward_positional_ordering) New + variable. + (struct var_modification) Entirely changed. + (rearrange_dict) Interface changed, rewritten. + (cmd_modify_vars) Deal with modified struct var_modification, much + rewritten. + (struct var_renaming) New structure. + (compare_var_renaming_by_new_name) New function. + (validate_var_modification) New function. + + * var.h: (struct modify_vars_proc) Removed. + (struct variable) Removed member p.mfv. + +Sat Dec 27 19:40:26 2003 Ben Pfaff + + Make EVALUATE a valid command whether we're debugging or not, so + that `make check' can succeed regardless of whether debugging is + turned on. + + * command.def: [GLOBAL_DEBUGGING] Drop the #if. + + * compute.c: [GLOBAL_DEBUGGING] (cmd_evaluate) Drop the #if. + +Sat Dec 27 19:34:40 2003 Ben Pfaff + + * apply-dict.c: (cmd_apply_dictionary) Replace a ghastly switch + statement by a simple if test. + + * dfm.c: (dfm_get_record) Add assertion. + +Sat Dec 27 17:51:26 2003 Ben Pfaff + + For each file x.c, move #include "x.h" to the very top of the + include list, to catch x.h failing to include the proper headers. + +Sat Dec 27 17:50:19 2003 Ben Pfaff + + * algorithm.c: (find) New function. + (remove_equal) New function. + (set_difference) New function. + (adjacent_find_equal) New function. + [TEST_UNIQUE] Removed test case. + (copy_if) Find end test. + +Sat Dec 27 17:42:45 2003 Ben Pfaff + + * dictionary.c: (dict_get_case_weight) New convenience function. + + * aggregate.c: (accumulate_aggregate_info) Use + dict_get_case_weight(). + + * frequencies.q: (calc_general) Ditto. + (calc_integer) Ditto. + (calc) Ditto. + + * t-test.q: (groups_calc) Ditto. + (z_calc) Ditto. + +Sat Dec 27 17:29:45 2003 Ben Pfaff + + * glob.c: (global var default_dict) Change from `struct + dictionary' to `struct dictionary *'. All references changed. + (init_glob) Initialize default_dict with dict_create(). + +Sat Dec 27 17:06:06 2003 Ben Pfaff + + struct dictionary now made opaque. All related functions: + + * get.c: (rename_variables) Removed. + (dict_delete_run) Removed. + + * temporary.c: (copy_variable) Removed. + (new_dictionary) Removed. + (save_dictionary) Removed. + (restore_dictionary) Removed. + (free_dictionary) Removed. + + * vars-atr.c: (clear_default_dict) Removed. + (find_variable) Removed. + (find_dict_variable) Removed. + (create_variable) Removed. + (delete_variable) Removed. + (common_init_stuff) Removed. + (init_variable) Removed. Updating of inp_init moved into + cmd_end_input_program(). + (replace_variable) Removed. + (rename_variable) Removed. + (clear_variable) Removed. + (dup_variable) Removed. + + * vars-prs.c: (is_varname) Removed. + (is_dict_varname) Removed. + (fill_all_vars) Removed. + + * vector.c: (find_vector) Removed. + + * weight.c: (stop_weighting) Removed. + + * dictionary.c: New file. + (dict_create) New, replaces new_dictionary(). + (dict_clone) New, replaces save_dictionary() and + restore_dictionary(). + (dict_clear) New, replaces clear_default_dict(). + (dict_destroy) New, replaces free_dictionary(). + (dict_get_var_cnt) New function, replaces references to + dict->nvar. + (dict_get_var) New function, replaces references to dict->var[i]. + (dict_get_vars) New function, replaces fill_all_vars(). + (dict_create_var) New, replaces create_variable(). Interface + drops `type' parameter, using a zero `width' to designate numeric. + (dict_clone_var) New, replaces dup_variable(). + (dict_rename_var) New, replaces rename_variable(). + (dict_lookup_var) New, replaces find_variable(), + find_dict_variable(), is_varname(). + (dict_contains_var) New function. + (compare_variable_dblptrs) New function. + (dict_delete_var) New function, replaces clear_variable(). + (dict_delete_vars) New function, replaces dict_delete_run(). + (dict_reorder_vars) New function. + (dict_rename_vars) New function, replaces rename_variables(). + (dict_get_weight) New function, replaces reading dict->weight_var. + (dict_set_weight) New function, replaces writing dict->weight_var + or calling stop_weight(dict). + (dict_get_filter) New function, replaces reading dict->filter_var. + (dict_set_filter) New function, replaces writing dict->filter_var. + (dict_get_case_limit) New function, replaces reading dict->N. + (dict_set_case_limit) New function, replaces writing dict->N. + (dict_get_value_cnt) New function, replaces reading dict->nval. + (dict_compact_values) New function, replaces a loop that was + replicated in several places. + (dict_get_split_vars) New function, replaces reading dict->splits. + (dict_get_split_cnt) New function, replaces reading + dict->n_splits. + (dict_set_split_vars) New function, replaces writing dict->splits. + (dict_get_label) New function, replaces reading dict->label. + (dict_set_label) New function, replaces writing dict->label. + (dict_get_documents) New function, replaces reading + dict->documents. + (dict_set_documents) New function, replaces writing + dict->documents. + + All references to above functions updated. + + * aggregate.c: (cmd_aggregate) Copy file label and documents from + old dictionary to new by hand, because dict_create() can't do it + itself. Use dict_set_documents(), dict_set_split_vars(). + + * temporary.c: (cancel_temporary) Also set temp_dict to NULL after + calling dict_destroy(). + + * data-list.c: (dls_var_spec) Remove `type' member, replace by + `width'. + (fixed_parse_compatible) Some slightly nontrivial changes for + dict_create_var(). + (dump_fmt_list) Ditto. + (parse_free) Ditto. + + * file-type.c: (create_col_var) Ditto. + + * get.c: (cmd_get) Use dict_compact_values() instead of a loop. + (trim_dictionary) Use dict_delete_vars(), dict_reorder_vars(). + (rename_variables) Use dict_rename_vars(). + (mtf_merge_dictionary) Use dict_get_documents(), + dict_set_documents(), dict_compact_values(). + + * pfm-read.c: (read_variables) Deal with changes to weighting. + + * q2c.c: (dump_parser) Use dict_lookup_var() instead of + is_varname() in output code. + + * sfm-read.c: (read_header) Use dict_create(), dict_set_label(), + other dictionary functions. + + * title.c: (add_document_line) Use dict_get_documents(), + dict_set_documents(). + + * vars-atr.c: (discard_variables) Use dict_clear(default_dict), + reset default_handle by hand. dict_clear() will clear vectors so + there's no need for that by hand. + + * vfm.c: (close_active_file) Move call to finish_compaction() + earlier, so that we can do the compaction as a single step using + dict_compact_values(). Use dict_clear_vectors(). + (finish_compaction) Use dict_delete_var(), dict_compact_values(). + + Some functions don't have replacements: + + * vars-atr.c: (force_create_variable) Removed. All references + updated to dict_create_var() followed by an assertion. + (force_dup_variable) Removed. All references updated to + dict_clone_var() followed by an assertion. + + * weight.c: (update_weighting) Removed. No longer necessary, so + all references removed. + +Sat Dec 27 16:43:01 2003 Ben Pfaff + + Clean up AGGREGATE. + + * aggregate.c: Eliminate separation of weighted and unweighted + case. It made the code too obscure and I doubt it was actually + faster. Instead, all code uses the "weighted" code, because + that's a generalization of the "unweighted" code. + (FWEIGHT) Removed. + (FOPTIONS) Ditto. + (parse_aggregate_functions) No need to set FWEIGHT. + (accumulate_aggregate_info) Get rid of FWEIGHT cases. + (dump_aggregate_info) Ditto. + (initialize_aggregate_info) No need for special plain_function + that gets rid of FWEIGHT option. + + * aggregate.c: Get rid of approximations. + (accumulate_aggregate_info) Don't use approx_gt(), approx_lt(), + approx_in_range(). + (aggregate_single_case) Don't use approx_ne(). + +Sat Dec 27 16:19:36 2003 Ben Pfaff + + * ascii.c (ascii_line_width): Dead code, removed. + + * postscript.c (ps_line_width): Ditto. + + * q2c.c (xrealloc): Ditto. + + * count.c (internal_cmd_count): Ditto. + + * means.q (validate_dependent_endpoint): Ditto. + + * set.q: (cmd_gset) Ditto. + + * weight.c: [0] (weight_trns_proc) Ditto. + +Sat Dec 27 16:18:16 2003 Ben Pfaff + + Make the code -Wmissing-prototypes clean. + + * Makefile.am (version.c): Add #include "version.h". + + * ascii.c: (ascii_open_global) Make static. + (ascii_close_page) Ditto. + (ascii_font_sizes) Ditto. + (ascii_postopen_driver) Ditto. + (ascii_close_driver) Ditto. + (ascii_option) Ditto. + (ascii_open_page) Ditto. + (ascii_line_horz) Ditto. + (ascii_line_vert) Ditto. + (ascii_line_intersection) Ditto. + (ascii_box) Ditto. + (ascii_polyline_begin) Ditto. + (ascii_polyline_point) Ditto. + (ascii_polyline_end) Ditto. + (ascii_text_set_font_by_name) Ditto. + (ascii_text_set_font_by_position) Ditto. + (ascii_text_set_font_by_family) Ditto. + (ascii_text_get_font_name) Ditto. + (ascii_text_get_font_family) Ditto. + (ascii_text_set_size) Ditto. + (ascii_text_get_size) Ditto. + (ascii_text_metrics) Ditto. + (ascii_text_draw) Ditto. + (ascii_close_page) Ditto. + + * cmdline.h: New header for parse_command_line(). Used where + needed. + + * command.c: Move prototypes for cmd_*() functions to command.h. + + * command.h: Prototypes for cmd_*() functions moved here from + command.c. + + * crosstabs.q: (gamma_int) Ditto. + + * file-handle.h: Add fh_init_files() prototype. + + * getline.c: (welcome) Ditto. + + * glob.h: New header for init_glob(). Used where appropriate. + + * hash.c: (comparison_helper) Ditto. + + * html.c: (html_open_global) Ditto. + (html_close_global) Ditto. + (html_preopen_driver) Ditto. + (html_postopen_driver) Ditto. + (html_close_driver) Ditto. + (html_option) Ditto. + (html_open_page) Ditto. + (html_close_page) Ditto. + (html_submit) Ditto. + + * inpt-pgm.c: (input_program_source_read) Ditto. + + * output.c: (find_defn_value) Ditto. + (destroy_list) Ditto. + + * pfm-read.c: (read_int) Ditto. + + * postscript.c: (ps_open_global) Ditto. + (ps_close_global) Ditto. + (ps_font_sizes) Ditto. + (ps_preopen_driver) Ditto. + (ps_postopen_driver) Ditto. + (ps_close_driver) Ditto. + (ps_option) Ditto. + (ps_open_page) Ditto. + (ps_close_page) Ditto. + (ps_line_horz) Ditto. + (ps_line_vert) Ditto. + (ps_line_intersection) Ditto. + (ps_box) Ditto. + (ps_polyline_begin) Ditto. + (ps_polyline_point) Ditto. + (ps_polyline_end) Ditto. + (ps_text_set_font_by_name) Ditto. + (ps_text_set_font_by_position) Ditto. + (ps_text_set_font_family) Ditto. + (ps_text_get_font_name) Ditto. + (ps_text_get_font_family) Ditto. + (ps_text_set_size) Ditto. + (ps_text_get_size) Ditto. + (ps_text_metrics) Ditto. + (ps_text_draw) Ditto. + + * q2c.c: (finish_up) Ditto. + (xmalloc) Ditto. + (xstrdup) Ditto. + (get_buffer) Ditto. + (st_lower) Ditto. + (st_upper) Ditto. + (skip_ws) Ditto. + (get_line) Ditto. + (add_symbol) Ditto. + (find_symbol) Ditto. + (lex_get) Ditto. + (force_id) Ditto. + (force_string) Ditto. + (match_id) Ditto. + (match_token) Ditto. + (skip_token) Ditto. + (parse) Ditto. + (parse_setting) Ditto. + (parse_specifier) Ditto. + (parse_specifiers) Ditto. + (parse_subcommand) Ditto. + (dump_specifier_vars) Ditto. + (is_keyword) Ditto. + (make_identifier) Ditto. + (dump_declarations) Ditto. + (dump_specifier_init) Ditto. + (dump_vars_init) Ditto. + (make_match) Ditto. + (dump_specifier_parse) Ditto. + (dump_subcommand) Ditto. + (dump_parser) Ditto. + (dump_header) Ditto. + (dump_free) Ditto. + (recognize_directive) Ditto. + + * recode.c: (string_to_long) Ditto. + + * repeat.c: (find_DO_REPEAT_substitution) Ditto. + + * repeat.h: New header for perform_DO_REPEAT_substitutions, used + where appropriate. + + * sort.c: (sort_stream_read) Ditto. + (sort_stream_mode) Ditto. + +Fri Dec 19 23:35:04 2003 Ben Pfaff + + * algorithm.c (binary_search): Fix comparison. + +Fri Dec 19 23:27:45 2003 Ben Pfaff + + * algorithm.c: (binary_search) Fix assertion. + +Fri Dec 19 21:31:48 2003 Ben Pfaff + + * sysfile-info.c: (compare_vectors_by_name) Rewrite. + +Fri Dec 19 21:30:24 2003 Ben Pfaff + + * sort.c: (compare_case_lists) Rewrite. + +Fri Dec 19 16:44:22 2003 Ben Pfaff + + * quicksort.c: Removed (not used). + + * quicksort.h: Removed (not used). + + * sort.c: Removed blp_quicksort() prototype. + +Fri Dec 19 16:42:13 2003 Ben Pfaff + + * postscript.c: (int_2_compare) Rewrite. + (compare_line) Rewrite. + +Fri Dec 19 16:38:35 2003 Ben Pfaff + + * matrix-data.c (compare_factors) Use lexicographical_compare() + algorithm. + (compare_doubles) New function. + + * algorithm.c: (lexicographical_compare) New algorithm. + +Fri Dec 19 16:23:45 2003 Ben Pfaff + + * matrix-data.c (compare_variables_by_mxd_vartype): Rewrite. + Fri Dec 19 15:54:45 2003 Ben Pfaff * expr-prs.c: (cmp_func) Removed.