+Wed Feb 18 21:48:54 WST 2004 John Darrington <john@darrington.wattle.id.au>
+
+ * Moved the declarations relating to values to their own header file
+ (val.h)
+
+ * Added levene.c and levene.h
+
+ * vars-atr.c: Changed the signature of compare_values to
+ take const * arguments.
+
+ * t-test.q: Changed the structure of struct t_test_proc
+ variables now contain their own group statistics information.
+ Eventually, t_test_proc might get renamed, because it'd be
+ applicable to other commands too.
+
+Mon Feb 16 23:15:51 2004 Ben Pfaff <blp@gnu.org>
+
+ * data-out.c: Clean up. Changed interface of convert_*() to take
+ either a `double' or a `const char *' instead of a `const union
+ value *'. Update all implementations of those interfaces.
+ (data_out) Use switch statements instead of a table.
+ (convert_AHEX) Rewrite.
+
+ * format.h: Update comment.
+
+Mon Feb 16 22:14:36 2004 Ben Pfaff <blp@gnu.org>
+
+ * q2c.c: (dump_header) Add an Emacs header line to output files
+ that makes generated .c files read-only by default, to make it
+ difficult to accidentally change generated files.
+
+Mon Feb 16 22:12:07 2004 Ben Pfaff <blp@gnu.org>
+
+ * frequencies.q: (compare_freq_numeric_a) Compare by frequency,
+ not bogus a->v.c <=> b->v.c pointer compare.
+ (compare_freq_alpha_a) Ditto.
+ (compare_freq_numeric_d) Ditto.
+ (compare_freq_alpha_d) Ditto.
+
+Mon Feb 16 22:00:53 2004 Ben Pfaff <blp@gnu.org>
+
+ Changed data_out() to store string data directly into a `union
+ value''s s member, not indirectly into c.
+
+ * crosstabs.q: (output_pivot_table) Use format_short() instead of
+ data_out().
+ (table_value_missing) Ditto.
+ (float_M_suffix) Ditto.
+ (format_short) New function.
+
+ * data-in.h: (data_in_finite_line) Remove inline definition.
+
+ * data-list.c: (destroy_dls_var_spec) New function.
+ (destroy_dls) Rewrite in terms of destroy_dls_var_spec().
+ (data_list_source_destroy_source) Avoid cast.
+ (struct repeating_data_trns) New field `id_value'. Update
+ comments.
+ (cmd_repeating_data) Initialize id_value. Use new
+ repeating_data_trns_free() for freeing REPEATING DATA
+ transformations.
+ (rpd_parse_record) Rewrite support for record ID to be less bogus.
+ (repeating_data_trns_free) New function.
+
+ * data-out.c: (data_out) Change return type to `void' by replacing
+ error returns by writing a message into the output buffer.
+ (convert_A) Read from v->s instead of v->c.
+ (convert_AHEX) Ditto.
+
+ * expr-evl.c: Update comment.
+ (expr_evaluate) Add assertion in OP_STRING case.
+
+ * format.h: (macro MAX_FORMATTED_LEN) New macro.
+
+ * list.q: (list_cases) Update for new data_out() semantics.
+
+ * print.c: (print_trns_proc) Ditto.
+
+ * tab.c: (tab_value) Ditto.
+ (tab_float) Avoid stupid cast.
+
+ * var.h: Update comments.
+ (macro MAX_STRING) New macro.
+ (macro MAX_ELEMS_PER_VALUE) New macro.
+
+ * vars-atr.c: (compare_values) New function.
+
+ * vfm.c: (dump_splits) Update for new data_out() semantics.
+
+Mon Feb 16 21:45:47 2004 Ben Pfaff <blp@gnu.org>
+
+ * crosstabs.q: (struct table_entry) Rename v[] to values[]. All
+ references updated.
+ (struct crosstab) Rename v[] to vars[]. All references updated.
+ (hash_table_entry) Replace the hash algorithm and fix a bug at the
+ same time, which caused the hash value to depend only on a single
+ value, not all of the variables' values.
+
+Mon Feb 16 12:49:53 2004 Ben Pfaff <blp@gnu.org>
+
+ Clean up struct dictionary's value_cnt usage.
+
+ * dictionary.c: Add a function comment to each function.
+ (struct dictionary) Rename value_cnt to next_value_idx, which more
+ accurately reflects its meaning. All references updated.
+ (dict_rename_vars) Add assertion.
+ (dict_get_value_cnt) Rename dict_get_next_value_idx(). All
+ references updated.
+ (dict_get_case_size) New function.
+
+ * aggregate.c: (create_sysfile) Use dict_get_case_size().
+
+ * get.c: (mtf_read_nonactive_records) Ditto.
+
+ * sort.c: (allocate_cases) Ditto.
+ (write_initial_runs) Ditto.
+ (merge) Ditto.
+ (merge_once) Ditto.
+
+ * vfm.c: (prepare_for_writing) Ditto.
+ (setup_lag) Ditto.
+ (lag_case) Ditto.
+
+Mon Feb 16 00:17:55 2004 Ben Pfaff <blp@gnu.org>
+
+ Make vfm.c slightly less grotesque.
+
+ * vfm.c: (filter_var) Removed.
+ (filter_index) Removed.
+ (FILTERED macro) Removed.
+ (exclude_this_case) New function.
+ (process_active_file_write_case) Use exclude_this_case() instead
+ of FILTERED and inline tests.
+ (procedure_write_case) Ditto.
+ (setup_filter) Removed.
+ (open_active_file) Don't call setup_filter().
+ (close_active_file) Call dict_get_filter() instead of checking
+ filter_var.
+
+Mon Feb 16 00:01:53 2004 Ben Pfaff <blp@gnu.org>
+
+ * var.h: (struct variable) Update comments.
+
+Sun Feb 15 23:14:59 2004 Ben Pfaff <blp@gnu.org>
+
+ New functions dict_create_var_assert(), dict_lookup_var_assert().
+ Converted several dict_*_var()/assert pairs into a single
+ dict_*_var_assert().
+
+ * dictionary.c: (dict_create_var_assert) New function.
+ (dict_lookup_var_assert) New function.
+
+Sun Feb 15 23:06:08 2004 Ben Pfaff <blp@gnu.org>
+
+ Got rid of "struct long_vec", envector(), devector(), etc. Added
+ two members `init', `reinit' to struct variable as a substitute.
+
+ * Makefile.am: (pspp_SOURCES) Removed cases.c, cases.h.
+
+ * cases.c: Removed.
+
+ * cases.h: Removed.
+
+ * aggregate.c: (parse_aggregate_functions) destvar doesn't need
+ init.
+
+ * autorecode.c: (cmd_autorecode) destvars don't need init.
+
+ * compute.c: (lvalue_finalize) Set reinit.
+
+ * data-list.c: (fixed_parse_compatible) Don't need init usually.
+ (dump_fmt_list) Ditto.
+ (parse_free) Ditto.
+
+ * descript.q: (run_z_pass) Don't need init for z-scores.
+
+ * dictionary.c: (dict_create_var) Initialize `init', `reinit'
+ members.
+ (dict_clone_var) Copy `reinit' member, initialize `init' member.
+
+ * glob.c: (init_glob) Remove vec_init() calls.
+
+ * inpt-pgm.c: (cmd_end_input_program) Use `reinit', not `left'.
+
+ * loop.c: (internal_cmd_loop) Don't need to call envector().
+
+ * numeric.c: (cmd_numeric) Ditto.
+ (cmd_string) Ditto.
+ (cmd_leave) Ditto. Set `init', `reinit' members.
+
+ * recode.c: (cmd_recode) Don't need to call envector().
+
+ * repeat.c: (internal_cmd_do_repeat) Ditto.
+
+ * var.h: (struct variable) Remove `left'. Add `init', `reinit'.
+ (force_create_variable) Removed prototype.
+ (force_dup_variable) Ditto.
+
+ * vector.c: (cmd_vector) Don't need to call envector().
+
+ * vfm.c: (reinit_sysmis) Removed.
+ (reinit_blanks) Removed.
+ (init_zero) Removed.
+ (init_blanks) Removed.
+ (process_active_file_write_case) No need to deal with vectors.
+ Call clear_temp_case().
+ (vector_initialization) Rewrite to use `init', `reinit'.
+ (close_active_file) No need to call vec_clear().
+ (procedure_write_case) Call clear_temp_case().
+ (clear_temp_case) New function.
+
+Sun Feb 15 20:50:36 2004 Ben Pfaff <blp@gnu.org>
+
+ * pfm-write.c: (bufwrite) Get rid of nasty cast that also invoked
+ undefined behavior.
+
+Thu Feb 12 23:35:15 2004 Ben Pfaff <blp@gnu.org>
+
+ Add auxiliary argument to procedure() interface. Associated small
+ clean-ups of vfm interface.
+
+ * Updated every caller of procedure() and process_active_file() to
+ reflect modified interface. Simple, ordinary changes not listed
+ otherwise below.
+
+ * Updated every function that implements struct case_stream's
+ `read' function to take a write_case_func and a write_case_data.
+ Also updated every caller of write_case() to instead call them
+ through these arguments. In some cases this meant that the extra
+ args had to be threaded through a couple of extra levels. This
+ wasn't difficult or interesting so the details won't be given.
+
+ * data-list.c: (struct repeating_data_trns) Add members
+ `write_case', `wc_data' as kluge.
+ (read_one_set_of_repetitions) Rename repeating_data_trns_proc and
+ make non-static.
+ (repeating_data_set_write_case) New function.
+
+ * data-list.h: New file to declare repeating_data_trns_proc() and
+ repeating_data_set_write_case().
+
+ * inpt-pgm.c: (input_program_source_read) Call
+ repeating_data_set_write_case() for all the REPEATING DATA
+ transformations, so that they know where to send their cases.
+ It's a big kluge. Also kluge in END CASE.
+ (end_case_trns_proc) Never called anymore, but we still need it,
+ so just assert(0).
+
+ * sort.c: (read_sort_output) Update to match struct case_stream
+ `read' member.
+
+ * vfm.c: (struct write_case_data) New structure.
+ (proc_func) Removed.
+ (virt_proc_func) Removed.
+ (begin_func) Removed.
+ (virt_begin_func) Removed.
+ (end_func) Removed.
+ (write_case) Removed.
+ (procedure) Added an auxiliary parameter to each function pointer
+ argument's prototype. Added an auxiliary data parameter.
+ Rewrote.
+ (process_active_file) Ditto.
+ (process_active_file_write_case) Pass aux data along.
+ (close_active_file) Ditto.
+ (procedure_write_case) Ditto.
+ (SPLIT_FILE_procfunc) Ditto.
+
+ * vfm.h: (typedef write_case_data) New.
+ (typedef write_case_func) New.
+ (struct case_stream) Add parameters to `read' member prototype.
+
+Thu Feb 12 19:24:53 WST 2004 John Darrington <john@darrington.wattle.id.au>
+
+ * t-test.q: Added calculations for independent samples. (But no Levene
+ test yet!)
+
+ * Makefile.am: Moved q_sources_c into own variable
+
+Wed Feb 11 23:56:51 2004 Ben Pfaff <blp@gnu.org>
+
+ Miscellaneous cleanups.
+
+ * Change unused to UNUSED in many source files to reflect modified
+ pref.h. Change use of __WIN32__, __MSDOS, __DJGPP__,
+ __CYGWIN32__, __unix__, and unix not to assume that they're
+ defined to a nonzero value. Change use of __attribute__ to use
+ NO_RETURN or PRINTF_FORMAT instead.
+
+ * alloc.h: Move definitions for local_alloc(), local_free() here
+ from ../pref.h.orig and simplify.
+
+ * expr-evl.c: Instead of working differently based on PAGED_STACK,
+ use a pool allocator unconditionally.
+ (CHECK_STRING_SPACE) Removed.
+ (ALLOC_STRING_SPACE) Removed.
+ (expr_evaluate) Use e->pool instead of CHECK_STRING_SPACE and
+ ALLOC_STRING_SPACE.
+
+ * expr-opt.c: (dump_expression) Allocate string pool.
+
+ * expr-prs.c: (expr_free) Free string pool.
+
+ * pool.c: (pool_destroy) This pool must be removed from its
+ parent's list of gizmos, not from its own. Use free_all_gizmos().
+ (pool_clear) New function.
+ (free_all_gizmos) New function.
+ (pool_alloc) Use space in empty block after this one if any.
+ (pool_release) Only empty out blocks, don't actually free() them.
+
+ * print.c: Get rid of PAGED_STACK special case by always
+ dynamically allocating line buffers.
+ (struct print_trns) Always include the `line' member.
+ (internal_cmd_print) Always initialize the `line' member.
+ (alloc_line) Always allocate memory for `line'.
+ (print_trns_proc) Always initialize buf from `line' member.
+ (print_trns_free) Always free `line' memory.
+
+ * sort.c: (allocate_file_handles) Special-case MS-DOS for mkdir()
+ call.
+
+Wed Feb 11 20:33:18 2004 Ben Pfaff <blp@gnu.org>
+
+ * flip.c: Fixed crash from FLIP when a numeric variable is
+ 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 <john@darrington.wattle.id.au>
+
+ * 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 <john@darrington.wattle.id.au>
+
+ * t-test.q: Added calculations for the one sample variant of the T-TEST
+
+Tue Feb 3 20:09:54 2004 Ben Pfaff <blp@gnu.org>
+
+ * 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 <john@darrington.wattle.id.au>
+
+ * 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 <blp@gnu.org>
+
+ * 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 <blp@gnu.org>
+
+ * 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 <blp@gnu.org>
+
+ 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 <blp@gnu.org>
+
+ * 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 <john@darrington.wattle.id.au>
+
+ * Fixed bug where FREQ would crash on alpha values
+
+Tue Dec 30 22:42:57 2003 Ben Pfaff <blp@gnu.org>
+
+ * 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 <blp@gnu.org>
+
+ * ascii.c: (ascii_option) Fix implementation of headers option.
+
+Tue Dec 30 22:32:53 2003 Ben Pfaff <blp@gnu.org>
+
+ * 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 <john@darrington.wattle.id.au>
+
+ * Removed redundant code from output.h
+
+Sat Dec 27 22:17:52 2003 Ben Pfaff <blp@gnu.org>
+
+ 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 <blp@gnu.org>
+
+ * var.h: (struct freq_tab_set) Removed (not used).
+
+Sat Dec 27 22:15:21 2003 Ben Pfaff <blp@gnu.org>
+
+ * value-labels.c: (val_labs_destroy) vls needs to be freed too.
+
+Sat Dec 27 22:10:49 2003 Ben Pfaff <blp@gnu.org>
+
+ * stats.c: (hypercube) Rename pow4(). All references updated.
+
+Sat Dec 27 22:05:49 2003 Ben Pfaff <blp@gnu.org>
+
+ * rename-vars.c: (cmd_rename_variables) Rewritten.
+ (compare_name) Removed.
+
+Sat Dec 27 22:03:51 2003 Ben Pfaff <blp@gnu.org>
+
+ 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 <blp@gnu.org>
+
+ 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 <blp@gnu.org>
+
+ * 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 <blp@gnu.org>
+
+ * get.c: (export_write_case_func) Remove debug printing code.
+
+Sat Dec 27 21:11:09 2003 Ben Pfaff <blp@gnu.org>
+
+ * 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 <blp@gnu.org>
+
+ 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 <blp@gnu.org>
+
+ 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 <blp@gnu.org>
+
+ 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 <blp@gnu.org>
+
+ 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 <blp@gnu.org>
+
+ * 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 <blp@gnu.org>
+
+ 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 <blp@gnu.org>
+
+ * 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 <blp@gnu.org>
+
+ 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 <blp@gnu.org>
+
+ * 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 <blp@gnu.org>
+
+ * 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 <blp@gnu.org>
+
+ * 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 <blp@gnu.org>
+
+ 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 <blp@gnu.org>
+
+ 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 <blp@gnu.org>
+
+ * 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 <blp@gnu.org>
+
+ 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 <blp@gnu.org>
+
+ * algorithm.c (binary_search): Fix comparison.
+
Fri Dec 19 23:27:45 2003 Ben Pfaff <blp@gnu.org>
* algorithm.c: (binary_search) Fix assertion.