+Thu May 4 21:47:48 2006 Ben Pfaff <blp@gnu.org>
+
+ Continue reforming procedure execution. In this phase, move
+ procedure.c and procedure.h from src to src/data. Update
+ makefiles and #includes accordingly.
+
+ * automake.mk: Remove special rule for src/procedure.o.
+
+ * procedure.c: Moved to src/data.
+
+ * procedure.h: Moved to src/data.
+
+Wed May 3 22:24:34 2006 Ben Pfaff <blp@gnu.org>
+
+ Continue reforming procedure execution. In this phase, get rid of
+ many global variables, consolidating procedure execution in
+ procedure.c. Encapsulate transformations in new "struct
+ trns_chain". Also, change implementation of N OF CASES, FILTER,
+ and PROCESS IF from special cases to transformations.
+
+ * procedure.c: (global var vfm_source) Make static. Changed
+ external references to use in_input_program(), proc_set_source(),
+ or proc_capture_output() instead.
+ (global var vfm_sink) Make static. Changed external references to
+ use proc_set_sink() instead.
+ (global var default_dict) Move here from data/dictionary.c.
+ (static var permanent_trns_chain) New var.
+ (static var temp_dict) Renamed permanent_dict, updated references.
+ (static var temporary_trns_chain) New var.
+ (static var cur_trns_chain) New var.
+ (static var in_procedure) Removed.
+ (global var t_trns) Removed.
+ (global var n_trns) Removed.
+ (global var m_trns) Removed.
+ (global var f_trns) Removed.
+ (procedure) Even if there's "nothing to do" we need to clear
+ PROCESS IF, N OF CASES, vector state. (This should be
+ abstracted.)
+ (multipass_callback) New function.
+ (multipass_procedure) New function.
+ (open_active_file) Add N OF CASES, FILTER, PROCESS IF
+ transformations. Finalize transformations. No need to call
+ ctl_stack_clear() anymore because finalizers will do that.
+ (write_case) Simplify and rewrite.
+ (execute_transformations) Removed.
+ (filter_case) Removed.
+ (close_active_file) Use proc_cancel_temporary_transformations().
+ No need to clear PROCESS IF, N OF CASES here anymore because
+ helpers do that.
+ (multipass_procedure_with_splits) Keep track of success.
+ (multipass_split_callback) Ditto.
+ (multipass_split_output) Ditto.
+ (discard_variables) No need to call ctl_stack_clear() anymore
+ because finalizers will do that.
+ (proc_capture_transformations) New function.
+ (add_transformation) Rewrite in terms of trns_chain_append().
+ (add_transformation_with_finalizer) New function.
+ (next_transformation) Rewrite in terms of trns_chain_next().
+ (proc_in_temporary_transformations) New function.
+ (proc_start_temporary_transformations) New function.
+ (proc_make_temporary_transformations_permanent) New function.
+ (proc_cancel_temporary_transformations) New function.
+ (cancel_transformations) Rename proc_cancel_all_transformations(),
+ rewrite in terms of trns_chain_destroy().
+ (proc_init) New function.
+ (proc_done) New function.
+ (proc_set_sink) New function.
+ (proc_set_source) New function.
+ (proc_has_source) New function.
+ (proc_capture_output) New function.
+ (add_case_limit_trns) New function.
+ (case_limit_trns_proc) New function.
+ (case_limit_trns_free) New function.
+ (add_filter_trns) New function.
+ (filter_trns_proc) New function.
+ (add_process_if_trns) New function.
+ (process_if_trns_proc) New function.
+ (process_if_trns_free) New function.
+
+Wed Apr 26 20:00:00 2006 Ben Pfaff <blp@gnu.org>
+
+ * procedure.c (create_trns_case): Fix inverted decision on whether
+ numeric values should be initialized to 0 or SYSMIS.
+
+Wed Apr 26 19:48:52 2006 Ben Pfaff <blp@gnu.org>
+
+ Continue reforming procedure execution. In this phase, assert
+ that add_transformation() is not called during procedure
+ execution. Thanks to John Darrington for the suggestion.
+
+ * procedure.c: (static var in_procedure) New var.
+ (internal_procedure) Get rid of recursive_call local var and
+ logic.
+ (open_active_file) Set in_procedure and make sure it wasn't
+ already set.
+ (close_active_file) Reset in_procedure and make sure it was
+ already set.
+ (add_transformation) Make sure we're not in a procedure.
+
+Wed Apr 26 19:33:52 2006 Ben Pfaff <blp@gnu.org>
+
+ Continue reforming procedure execution. In this phase, break
+ procedure.c into multiple files.
+
+ * procedure.c (vfm_last_invocation): Rename
+ time_of_last_procedure(). Update all references.
+ (struct storage_stream_info) Move to data/storage-stream.c.
+ (storage_sink_open) Ditto.
+ (destroy_storage_stream_info) Ditto.
+ (storage_sink_write) Ditto.
+ (storage_sink_destroy) Ditto.
+ (storage_sink_make_source) Ditto.
+ (var storage_sink_class) Ditto.
+ (storage_source_count) Ditto.
+ (storage_source_read) Ditto.
+ (storage_source_destroy) Ditto.
+ (storage_source_class) Ditto.
+ (storage_source_get_casefile) Ditto.
+ (storage_source_create) Ditto.
+ (null_sink_class) Move to data/case-sink.c.
+ (create_case_source) Move to data/case-source.c.
+ (free_case_source) Ditto.
+ (case_source_is_class) Ditto.
+ (create_case_sink) Move to data/case-sink.c.
+ (free_case_sink) Ditto.
+
+ * procedure.h: (struct case_source) Move to data/case-source.h.
+ (struct case_source_class) Ditto.
+ (struct case_sink) Move to data/case-sink.h.
+ (struct case_sink_class) Ditto.
+
+Thu Apr 27 09:28:25 WST 2006 John Darrington <john@darrington.wattle.id.au>
+
+ * automake.mk: Removed explicit dependencies for message.o, since
+ that module no longer exists.
+
+Wed Apr 26 15:29:45 2006 Ben Pfaff <blp@gnu.org>
+
+ Start reforming procedure execution. In this phase, get rid of
+ function prototypes for never-defined functions.
+
+ * procedure.h: Get rid of function prototypes for never-defined
+ functions.
+
+Wed Apr 26 12:58:46 2006 Ben Pfaff <blp@gnu.org>
+
+ Improve the way we handle the various parsing "states". Until now
+ we've hard-coded the state transitions in the command definition
+ file, but that's error-prone and, worse, it's redundant--we can
+ figure out what state we're in anyhow. We can cleanly handle
+ INPUT PROGRAM and FILE TYPE with a nested command-processing loop.
+
+ * procedure.c (case_source_is_complex): Removed.
+ (discard_variables) No need to set pgm_state anymore.
+
+Tue Apr 25 11:06:49 2006 Ben Pfaff <blp@gnu.org>
+
+ Finish reforming error message support. In this phase, move
+ message.c into libpspp.
+
+ * message.c: Move to libpspp.
+
+Tue Apr 25 10:47:37 2006 Ben Pfaff <blp@gnu.org>
+
+ Continue reforming error message support. In this phase, drop
+ actual message printing from core code, substituting a callback,
+ and add the callback to each UI. Also, move verbose_msg() into
+ its own module.
+
+ * message.c: (var err_error_count) Renamed error_count and moved
+ to ui/terminal/msg-ui.c.
+ (var err_warning_count) Renamed warning_count and moved to
+ ui/terminal/msg-ui.c.
+ (err_check_count) Renamed check_msg_count() and moved to
+ ui/terminal/msg-ui.c.
+ (dump_message) Rewrote to take stream instead of function pointer
+ and moved to ui/terminal/msg-ui.c.
+ (msg_emit) Moved its guts to ui/terminal/msg-ui.c as handle_msg()
+ and rewrote to just pass message to callback.
+
+ (var err_verbosity) Renamed "verbosity" and moved to
+ libpspp/verbose-msg.c.
+ (verbose_msg) Moved to libpspp/verbose-msg.c.
+
+ (var err_already_flagged) Removed.
+ (puts_stdout) Removed.
+
+ (var msg_handler) New static variable.
+ (msg_init) New function.
+ (msg_get_command_name) New function.
+
+Mon Apr 24 17:40:08 2006 Ben Pfaff <blp@gnu.org>
+
+ Continue reforming error message support. In this phase, rename
+ all the message functions and types to start with "msg", except
+ for the ones that will be moving to other modules anyway.
+
+ All references to the identifiers below were updated likewise.
+
+ * message.c: (err_done) Renamed msg_done().
+ (err_push_file_locator) Renamed msg_push_msg_locator().
+ (err_pop_file_locator) Renamed msg_pop_msg_locator().
+ (err_location) Renamed msg_location().
+ (err_set_command_name) Renamed msg_set_command_name().
+
+Mon Apr 24 14:11:33 2006 Ben Pfaff <blp@gnu.org>
+
+ * message.c: Use exit.h from gnulib instead of checking for and
+ defining EXIT_SUCCESS and EXIT_FAILURE by hand.
+
+Sun Apr 23 22:00:23 2006 Ben Pfaff <blp@gnu.org>
+
+ Continue reforming error message support. In this phase, get rid
+ of message "titles" and put the message text in `struct error'.
+ Now `struct error' encapsulates a message more properly.
+
+ * message.c: (tmsg) Removed.
+ (msg) Use err_msg() instead of err_vmsg(). Format message
+ ourselves.
+ (err_vmsg) Renamed err_msg(). Changed interface, dropping message
+ and va_list args which are now in the error struct.
+
+Sun Apr 23 20:35:28 2006 Ben Pfaff <blp@gnu.org>
+
+ Continue reforming error message support.
+
+ * message.c: Use linebreak module from gnulib instead of home-brew
+ line breaking.
+ (puts_stdout) Rewrote.
+ (dump_message) Rewrote. Changed interface and updated all callers.
+ (compulsory_break) Removed.
+ (char_is_break) Removed.
+ (break_before) Removed.
+ (break_after) Removed.
+ (macro BREAK_LONG_WORD) Removed.
+
+Sun Apr 16 20:41:10 2006 Ben Pfaff <blp@gnu.org>
+
+ Continue reforming error message support. In this phase, we
+ divide the classification of messages along "category" and
+ "severity" axes.
+
+ * message.c: (err_vmsg) Rewrite to deal with categories and
+ severities in a straightforward manner instead of mixing them into
+ classes.
+ [0] (puts_stderr) Removed (dead code).
+ (msg) Changed first argument from `int' to `enum msg_class'.
+ (tmsg) Ditto.
+
+Sun Apr 16 18:53:12 2006 Ben Pfaff <blp@gnu.org>
+
+ GNU standards require "file name" instead of "filename" in
+ documentation. It's nice for our code to follow the convention
+ too.
+
+ Basically did search and replace in the whole source tree. Major
+ changes in function names or struct member names have their own
+ change log entries.
+
+Sun Apr 16 15:58:56 2006 Ben Pfaff <blp@gnu.org>
+
+ Continue reforming error message support. In this phase, we get
+ rid of VM() and the other msg() support for "verbosity", replacing
+ it by a new function verbose_msg().
+
+ * message.c: (verbose_msg) New function.
+ (err_vmsg) Remove support for verbosity levels.
+
+Sun Apr 16 11:46:51 2006 Ben Pfaff <blp@gnu.org>
+
+ Start reforming error message support. In this phase, we get rid
+ of "installation errors" and change all uses of msg() in the
+ output drivers to uses of error() or error_at_line().
+
+ * message.c: (err_vmsg) Get rid of IE, IS support.
+
+Sat Mar 11 14:17:47 WST 2006 John Darrington <john@darrington.wattle.id.au>
+
+ * automake.mk: Changed the pattern specific AM_CPPFLAGS to two target
+ specific ones. Eventually there will be none at all.
+
+ * automake.mk: Moved the pspp binary to ui/terminal
+
+Sat Mar 4 12:59:08 2006 Ben Pfaff <blp@gnu.org>
+
+ * In many source files, #include "compiler.h" to get GCC attribute
+ definitions.
+
+Sat Mar 4 12:28:09 2006 Ben Pfaff <blp@gnu.org>
+
+ * In many source files, replace INT_DIGITS by
+ INT_STRLEN_BOUND(int) and include intprops.h.
+
+John Darrington:
+
+ * Replaced '_' with '-' in most filenames.
+
+ * Renamed files as follows:
+ vfm.[ch] to procedure.[ch]
+ error.[ch] to message.[ch]
+ getl.[ch] to line-buffer.[ch]
+ mkfile.[ch] to make-file.[ch]
+ pfm-write.h to por-file-writer.h
+ pfm-write.c to por-file-writer.c
+ sfmP.h to sfm-private.h
+ lex-def.c to identifier.c
+ lex-def.h to identifier.h
+ sfm-read.c to sys-file-reader.c
+ sfm-read.h to sys-file-reader.h
+ sfm-write.h to sys-file-writer.h
+ sfm-write.c to sys-file-writer.c
+ chart.[ch] to chart-geometry.[ch]
+ val.h to value.h
+ var.h to variable.h
+ vars-atr.c to variable.c
+ ctl-stack.c to control-stack.c
+ ctl-stack.h to control-stack.h
+ dfm-read.c to data-reader.c
+ dfm-write.c to data-writer.c
+ dfm-write.h to data-writer.h
+ dfm-read.h to data-reader.h
+ apply-dict.c to apply-dictionary.c
+ mis-val.c to missing-values.c
+ sysfile-info.c to sys-file-info.c
+ modify-vars.c to modifiy-variables.c
+ rename-vars.c to rename-variables.c
+ val-labs.c to value-labels.c
+ var-display.c to variable-display.c
+ var-labs.c to variable-label.c
+ format-prs.c to format-parser.c
+ range-prs.c to range-parser.c
+ range-prs.h to range-parser.h
+ subclist.c to subcommand-list.c
+ subclist.h to subcommand-list.h
+ vars-prs.c to variable-parser.c
+ descript.c to descriptives.c
+ sort-prs.c to sort-criteria.c/sort-cases.c
+ sort-prs.h to sort-criteria.h
+ sel-if.c to select-if.c
+ algorithm.c to array.c
+ algorithm.h to array.h
+ bitvector.h to bit-vector.h
+ som.c to manager.c
+ som.h to manager.h
+ tab.h to table.h
+ tab.c to table.c
+ readln.c to read-line.c
+ readln.h to read-line.h
+ cmdline.c to command-line.c
+ cmdline.h to command-line.h
+
+
+Sat Feb 11 22:35:20 2006 Ben Pfaff <blp@gnu.org>
+
+ General clean-ups and minor bug fixes.
+
+ * filename.h: Move DIR_SEPARATOR, PATH_SEPARATOR here from
+ pref.h.orig.
+
+ * lex-def.h: (macro CHAR_IS_ID1) Removed. All references changed
+ to lex_is_id1().
+ (macro CHAR_IS_IDN) Removed. All references changed to
+ lex_is_idn().
+
+ * lex-def.c: (lex_is_id1) New function.
+ (lex_is_idn) New function.
+ (lex_skip_identifier) New function.
+ (lex_id_match_len) Return bool instead of int.
+ (lex_id_match) Ditto.
+
+ * command.c: (parse_command_name) Convert parsed words to
+ uppercase to make error messages easier to read.
+ (cmd_host) Fix return value.
+
+ * dfm-read.c: (read_inline_record) Use tokens to check for BEGIN
+ DATA, not specialized lexical analysis.
+
+ * print.c: (print_space_trns_proc) Count of lines should be `int',
+ otherwise we might never finish.
+ (print_space_trns_free) Close writer.
+
+ * lexer.c: (enum string_type) New enum.
+ (lex_get) Remove essentially unused local variable `cp'.
+ Use enum string_type values. Use parse_id().
+ (parse_id) New function.
+ (lex_look_ahead) Recognize octal strings too.
+ (strip_comments) New function.
+ (lex_get_line) Rewrite.
+ (lex_preprocess_line) Removed.
+ (convert_numeric_string_to_char_string) Use enum string_type.
+ (parse_string) Ditto.
+
+ * autorecode.c: (recode) Clone correct number of bytes based on
+ source string width.
+
+Sat Feb 11 22:34:38 2006 Ben Pfaff <blp@gnu.org>
+
+ Reduce dependencies on getl, and of getl.
+
+ * data-in.c: (vdls_error) Don't output different message depending
+ on whether we're interactive.
+
+ * getl.h: (struct getl_line_list) Removed.
+ (struct getl_script) Removed.
+ (GETL_PRPT_*) Removed.
+ (GETL_MODE_*) Removed.
+ (GETL_PROMPT_FIRST, GETL_PROMPT_LATER, GETL_PROMPT_DATA,
+ GETL_PROMPT_CNT) New enums.
+
+ * settings.c: (static var prompt) Removed.
+ (static var cprompt) Removed.
+ (static var dprompt) Removed.
+ (settings_done) Don't initialize prompt, cprompt, dprompt.
+ (get_prompt) Removed.
+ (set_prompt) Removed.
+ (get_dprompt) Removed.
+ (set_dprompt) Removed.
+ (get_cprompt) Removed.
+ (set_cprompt) Removed.
+
+ * pfm-read.c: (corrupt_msg) Don't show filename and line number,
+ to get rid of getl_location().
+
+ * sfm-read.c: (corrupt_msg) Ditto.
+
+ * getl.c: (struct getl_source) New.
+ (static var cur_source) New.
+ (static var last_source) New.
+ (static var DO_REPEAT_level) Removed.
+ (global var getl_head) Removed.
+ (global var getl_tail) Removed.
+ (getl_initialize) Call init_prompts().
+ (getl_add_file) Removed.
+ (getl_include) Removed.
+ (getl_add_DO_REPEAT_file) Removed.
+ (getl_handle_line_buffer) Removed.
+ (getl_close_file) Removed.
+ (getl_close_all) Removed.
+ (getl_is_separate) Removed.
+ (getl_set_separate) Removed.
+ (getl_reading_script) Removed.
+ (append_source) New function.
+ (include_source) New function.
+ (create_source) New function.
+ (create_syntax_file_source) New function.
+ (create_filter_source) New function.
+ (create_function_source) New function.
+ (create_interactive_source) New function.
+ (getl_append_syntax_file) New function.
+ (getl_include_syntax_file) New function.
+ (getl_include_filter) New function.
+ (getl_include_function) New function.
+ (getl_append_interactive) New function.
+ (getl_abort_noninteractive) New function.
+ (getl_is_interactive) New function.
+ (close_source) New function.
+ (getl_location) Use new `cur_source' var.
+ (getl_uninitialize) Use close_source(). Call uninit_prompts().
+ (read_syntax_file) New function.
+ (read_line_from_source) New function.
+ (do_read_line) New function.
+ (getl_read_line) Rewrite.
+ (static var prompts) New.
+ (static var current_style) New.
+ (init_prompts) New function.
+ (uninit_prompts) New function.
+ (getl_get_prompt) New function.
+ (getl_set_prompt) New function.
+ (getl_set_prompt_style) New function.
+ (get_prompt) New function.
+
+ * command.c: Merge the EXIT (aka Q, aka QUIT) and FINISH commands,
+ and make EXIT undocumented. EXIT was a PSPP extension that never
+ really entirely made sense.
+ (cmd_exit) Removed.
+ (cmd_finish) Return CMD_EOF unconditionally.
+ (cmd_clear_transformations) Drop requirement of interactivity.
+
+ * command.def: Merge the EXIT (aka Q, aka QUIT) and FINISH
+ commands.
+
+ * repeat.c: Major changes to match getl revision.
+ (struct line_list) New struct.
+ (enum repeat_entry_type) New.
+ (struct repeat_entry) Made `type' an enum repeat_entry_type.
+ (struct repeat_block) New.
+ (static var repeat_tab) Removed.
+ (static var count) Removed.
+ (static var line_buf_head) Removed.
+ (static var line_buf_tail) Removed.
+ (cmd_do_repeat) Rewritten.
+ (clean_up) Removed.
+ (append_record) Removed.
+ (recognize_keyword) New function.
+ (internal_cmd_do_repeat) Removed.
+ (parse_specification) New function.
+ (skip_indentor) New function.
+ (recognize_do_repeat) New function.
+ (recognize_end_repeat) New function.
+ (parse_lines) New function.
+ (create_vars) New function.
+ (parse_ids) Use enum repeat_entry_type.
+ (parse_strings) Ditto.
+ (find_DO_REPEAT_substitution) Renamed find_substitution(),
+ rewrote.
+ (perform_DO_REPEAT_substitutions) Renamed do_repeat_filter(),
+ rewrote.
+ (do_repeat_read) New function.
+ (do_repeat_close) New function.
+
+ * data-list.c: Don't need to keep track of eof from getl anymore,
+ because getl can tell us now.
+ (struct data_list_pgm) Removed `eof' member.
+ (cmd_data_list) Don't assign to `eof'.
+ (get_data_list_read_func) Renamed read_from_data_list(), changed
+ interface.
+ (read_from_data_list_fixed) Changed interface.
+ (read_from_data_list_free) Changed interface.
+ (read_from_data_list_list) Changed interface.
+ (data_list_trns_proc) Rewrote based on dfm_eof() and
+ dfm_reader_error().
+ (data_list_source_read) Check for dfm reader errors.
+
+ * dfm-read.c: (enum dfm_reader_flags) Removed DFM_EOF in favor of
+ new `eof_cnt' member in struct dfm_reader.
+ (struct dfm_reader) New `eof_cnt' member.
+ (dfm_close_reader) Check `eof_cnt', not DFM_EOF.
+ (dfm_open_reader) Initialize `eof_cnt'.
+ (read_inline_record) Set prompt style with
+ getl_set_prompt_style().
+ (read_record) Rewrite.
+ (cmd_begin_data) Set prompt style with getl_set_prompt_style().
+
+ * include.c: (cmd_include) Use getl_include_syntax_file().
+
+ * set.q: (cmd_set) Use getl_set_prompt().
+
+ * html.c: (postopen) Remove "source-file" expansion variable, to
+ avoid use of getl_location().
+
+ * postscript.c: (postopen) Remove "source-file" expansion
+ variable, to avoid use of getl_location().
+
+ * cmdline.c: (parse_command_line) Drop -c command line option,
+ because it wasn't very useful. -i command line option now calls
+ getl_append_interactive(). Use new getl function interfaces.
+ Drop support for clearing dictionary between syntax files and thus
+ the "+" command line syntax.
+ (static var pre_syntax_message) Remove description of now-gone -c
+ option. Remove "+" command line syntax.
+
+ * main.c: (main) Only call handle_error() if the return value is
+ an error.
+ (execute_command) Use getl_set_prompt_style(). Drop support for
+ clearing dictionary between syntax files.
+ (handle_error) Handle CMD_CASCADING_FAILURE. Don't call err_break().
+
+ * readln.c: Drop lots of #ifdefs. Now that the Autoconf tests are
+ pickier, we can just use HAVE_READLINE.
+ (static var welcomed) Move into welcome().
+ (welcome) Make `welcomed' a local static var. Check for and read
+ history file here.
+ (global var getl_mode) Removed.
+ (global var getl_interactive) Removed.
+ (global var getl_prompt) Removed.
+ (getl_read_line) removed.
+ (readln_read) New function.
+ (read_console) Removed.
+
+
+Sat Feb 11 22:16:21 2006 Ben Pfaff <blp@gnu.org>
+
+ Try to reduce some of the nastier dependencies on the error
+ module, and at the same time make PSPP nicer to deal with, by
+ getting rid of fatal errors. All the existing calls to msg (FE,
+ ...) or err_cond_fail() or err_failure() have been replaced by
+ propagating an error upward to the command-dispatch layer.
+ Unfortunately this propagation took a fair bit of extra mechanism,
+ because now a lot of functions can fail that couldn't before.
+
+ New command return value CMD_CASCADING_FAILURE which indicates to
+ the command processor that syntax file processing should be
+ abandoned. Many commands were modified to return
+ CMD_CASCADING_FAILURE. When this modification was trivial it
+ isn't mentioned in detail below.
+
+ Transformation procedures (trns_proc_func) and free functions
+ (trns_free_func) now have a `bool' return type, which is normally
+ true, but false when an I/O or other serious error occurs. All
+ transformation functions were modified to have this return type.
+ When this modification was trivial it isn't mentioned in detail
+ below.
+
+ * pspp-error.h: (FE) Removed this error class.
+
+ * error.c: (err_failure) Removed.
+ (err_cond_fail) Removed.
+ (err_break) Removed (it was unused).
+ (err_check_count) Don't cause a fatal error--instead, stop reading
+ the syntax file.
+ (err_vmsg) Don't have FE anymore, so no need to call terminate().
+
+ * any-reader.c: (any_reader_error) New function.
+
+ * any-writer.c: (any_writer_write) Propagate
+ scratch_writer_write_case()'s new return value.
+ (any_writer_error) New function.
+ (any_writer_close) Propagate underlying function's new return
+ value.
+
+ * casefile.c: Add an "error state" to a casefile. A casefile that
+ encounters an I/O error enters the error state, and afterward
+ reading and writing cases fails.
+ (struct casefile) Add `ok' member.
+ (casefile_create) Set `ok' to true.
+ (casefile_destroy) Use io_error().
+ (casefile_error) New function.
+ (casefile_sleep) Now returns bool to indicate success.
+ (casefile_append) Ditto.
+ (casefile_append_xfer) Ditto.
+ (casefile_to_disk) Ditto.
+ (write_case_to_disk) Don't do anything in error state.
+ (flush_buffer) Don't do anything in error state. Use io_error().
+ (reader_open_file) Ditto.
+ (fill_buffer) Ditto.
+ (casereader_read) Don't do anything in error state. Handle
+ errors.
+ (casereader_read_xfer_assert) Removed, because now an I/O error
+ can occur even if the caller knows a case exists.
+ (io_error) New function.
+
+ * mkfile.c: (make_temp_file) Make failure non-fatal.
+ (make_unique_file_stream) Ditto.
+
+ * pfm-read.c: Add an error state.
+ (struct pfm_reader) Add `ok' member to indicate error state.
+ (error) Set `ok' to false.
+ (pfm_open_reader) Set `ok' to true. Make failure non-fatal.
+ (pfm_read_case) Don't do anything in error state.
+ (pfm_read_error) New function.
+
+ * pfm-write.c: Postpone most error checking in favor of checking
+ ferror() afterward.
+ (pfm_open_writer) Make failure non-fatal. Check for write error
+ after writing header.
+ (buf_write) Don't do anything if error has occurred. Postpone
+ error checking. Change return type to void.
+ (write_float) Postpone error checking. Change return type to
+ void.
+ (write_int) Ditto.
+ (write_string) Ditto.
+ (write_header) Ditto.
+ (write_version_data) Ditto.
+ (write_format) Ditto.
+ (write_value) Ditto.
+ (write_variables) Ditto.
+ (write_value_labels) Ditto.
+ (pfm_write_case) Don't do anything if error has occurred.
+ (pfm_write_error) New function.
+ (pfm_close_writer) Change return type to bool. Return false if an
+ I/O error occurred.
+
+ * scratch-reader.c: (scratch_reader_error) New function.
+
+ * scratch-writer.c: (scratch_writer_write_case) Change return type
+ to bool. Propagate casefile error return.
+ (scratch_writer_error) New function.
+ (scratch_writer_close) Change return type to bool. Propagate
+ casefile error return.
+
+ * sfm-read.c: Add an error state.
+ (struct sfm_reader) Add `ok' member.
+ (sfm_open_reader) Initialize `ok'. Make errors non-fatal.
+ (buf_read) Set `ok' to false on error.
+ (buffer_input) Do nothing in error state. Set `ok' to false on
+ error.
+ (read_compressed_data) Set `ok' false on error.
+ (sfm_read_case) Return false in error state.
+ (fread_ok) Set `ok' false on error.
+ (sfm_read_error) New function.
+
+ * sfm-write.c: Postpone most error checking in favor of checking
+ ferror() afterward.
+ (sfm_open_writer) Make failure non-fatal. Check for write error
+ after writing header.
+ (write_header) Postpone error checking. Change return type to
+ void.
+ (write_variable) Ditto.
+ (write_value_labels) Ditto.
+ (write_documents) Ditto.
+ (write_variable_display_parameters) Ditto.
+ (write_longvar_table) Ditto.
+ (write_rec_7_34) Ditto.
+ (buf_write) Ditto.
+ (ensure_buf_space) Ditto.
+ (sfm_write_case) Do nothing if write error has occurred.
+ (sfm_write_error) New function.
+ (pfm_close_writer) Change return type to bool. Return false if an
+ I/O error occurred.
+
+ * var.h: Introduced a new return value for trns_proc_func that
+ means "a serious error has occurred, so abort the procedure
+ entirely". Because the hard-coded values of -1, -2, etc. were
+ becoming even a worse idea now, also introduced some macros for
+ them: TRNS_CONTINUE, TRNS_DROP_CASE, TRNS_ERROR, TRNS_NEXT_CASE,
+ TRNS_END_FILE. Also replaced all references to the hard-coded
+ values by uses of the macros.
+
+ * command.h: New command return value CMD_CASCADING_FAILURE which
+ indicates to the command processor that syntax file processing
+ should be abandoned.
+
+ * dfm-read.c: (dfm_open_reader) Make failure non-fatal.
+ (dfm_reader_error) New function.
+ (read_inline_record) Make unexpected end of file nonfatal.
+ (read_file_record) Make read error nonfatal.
+ (dfm_eof) Make second unexpected end of file nonfatal.
+ (cmd_begin_data) Make errors nonfatal.
+
+ * dfm-write.c: (dfm_open_writer) Make failure non-fatal.
+ (dfm_write_error) New function.
+ (dfm_put_record) Do nothing in error state. Now return error
+ state.
+ (dfm_close_reader) Now return `bool' indicating error state.
+
+ * file-type.c: (file_type_source_read) Now return `bool'
+ indicating error state.
+
+ * get.c: (case_reader_source_read) Now return `bool' indicating
+ write error.
+ (case_writer_destroy) Ditto.
+ (case_writer_write_case) Ditto.
+ (struct mtf_proc) New member `ok' indicating error state.
+ (cmd_match_files) Initialize and deal with `ok'.
+ (mtf_processing_finish) Now return `bool' indicating I/O error.
+ (mtf_free_file) Renamed mtf_close_file(). Now return `bool'
+ indicating I/O error.
+ (mtf_free) Now return `bool' indicating I/O error.
+ (mtf_delete_file_in_place) Ditto.
+ (mtf_read_nonactive_records) Ditto.
+ (mtf_processing) Ditto.
+
+ * inpt-pgm.c: (input_program_source_read) Now return `bool'
+ indicating I/O error. Handle new TRNS_ERROR transformation return
+ value.
+
+ * matrix-data.c: Introduce error state.
+ (cmd_matrix_data) Check error return values.
+ (read_matrices_without_rowtype) Now return `bool' indicating I/O
+ error.
+ (matrix_data_read_without_rowtype) Ditto.
+ (dump_cell_content) Ditto.
+ (nr_output_data) Ditto.
+ (read_matrices_with_rowtype) Ditto.
+ (matrix_data_read_with_rowtype) Ditto.
+ (wr_output_data) Ditto.
+
+ * lexer.c: (lex_init) Make unexpected eof non-fatal.
+ (lex_get) Ditto.
+ (lex_look_ahead) Ditto.
+ (unexpected_eof) Removed.
+ (convert_numeric_string_to_char_string) Make unexpected eof
+ non-fatal.
+ (parse_string) Ditto.
+
+ * flip.c: Make I/O errors non-fatal.
+ (struct flip_pgm) Add `pool', `output_buf' members.
+ (cmd_flip) Create and use pool. Propagate errors.
+ (destroy_flip_pgm) Rewrite, using pool.
+ (struct flip_sink_info) Removed.
+ (flip_sink_create) Use pool. Make errors non-fatal.
+ (flip_sink_write) Make errors non-fatal.
+ (flip_file) Make errors non-fatal. Make `bool' return type to
+ indicate failure.
+ (flip_sink_destroy) Remove.
+ (static var flip_sink_class) Use NULL as destroy func, not
+ flip_sink_destroy().
+
+ * sort.c: Make I/O errors non-fatal. Propagate errors.
+ (sort_active_file_in_place) Propagate errors.
+ (sort_active_file_to_casefile) Ditto.
+ (do_internal_sort) Ditto.
+ (do_external_sort) Ditto.
+ (write_runs) Ditto.
+ (destroy_initial_run_state) Propagate errors via new `bool' return
+ type.
+ (merge) Propagate errors.
+ (merge_once) Ditto.
+
+ * output.c: [GLOBAL_DEBUGGING] Remove reentrancy detection,
+ because it used msg (FE, ...) and wasn't very useful.
+
+ * main.c: (handle_error) Handle CMD_CASCADING_FAILURE.
+
+ * vfm.c: (struct write_case_data) Change `proc_func' return type
+ to bool.
+ (procedure) Add `bool' return type to indicate I/O error.
+ Propagate errors.
+ (internal_procedure) Ditto.
+ (write_case) Ditto.
+ (execute_transformations) If a transformation returns TRNS_ERROR,
+ propagate the error.
+ (close_active_file) Add `bool' return type to indicate I/O error.
+ Propagate errors.
+ (cancel_transformations) Add `bool' return type to indicate I/O
+ error. Propagate errors.
+ (struct split_aux_data) Change `proc_func' return type to bool.
+ (procedure_with_splits) Change `proc_func' return type to bool.
+ Add `bool' return type to indicate I/O error.
+ (multipass_procedure_with_splits) Change `split_func' return type
+ to bool. Add `bool' return type to indicate I/O error.
+ (multipass_split_callback) Add `bool' return type to indicate I/O
+ error. Propagate errors.
+
+ * vfm.h: (struct case_source_class) Change `read' return type from
+ void to bool to allow reporting I/O errors. Updated all
+ implementations to do so.
+ (struct case_sink_class) Change `write' return type from void to
+ bool to allow reporting I/O errors. Updated all implementations
+ to do so.
+
+Sun Feb 12 18:12:56 2006 Ben Pfaff <blp@gnu.org>
+
+ * pool.c: Useful new functions.
+ (pool_tmpfile) New function.
+ (pool_attach_file) New function.
+ (pool_detach_file) New function.
+ (pool_fopen) Reimplement in terms of pool_attach_file().
+ (pool_fclose) Reimplement in terms of pool_detach_file(). Fix
+ double-free.
+
+ * str.c: Useful new functions.
+ (ds_swap) New function.
+ (ds_rtrim_spaces) New function.
+ (ds_chomp) New function.
+ (ds_is_empty) New function.
+ (ds_first) New function.
+ (ds_last) New function.
+
+Sat Feb 11 21:51:21 2006 Ben Pfaff <blp@gnu.org>
+
+ Get rid of finished, start_interactive globals.
+
+ * command.c: (cmd_exit) Instead of setting `finished', return
+ CMD_EOF.
+ (cmd_finish) Ditto.
+
+ * command.h: New enum CMD_EOF.
+
+ * main.c: (global var finished) Removed.
+ (global var start_interactive) Removed.
+ (main) Execute commands until CMD_EOF is the return value.
+ If parse_command_line() returns false, don't execute any commands
+ at all.
+
+ * cmdline.c: (parse_command_line) If the command line indicates we
+ shouldn't execute syntax files, return false instead of
+ terminating.
+ (usage) Don't terminate.
+
+Sat Feb 11 21:48:31 2006 Ben Pfaff <blp@gnu.org>
+
+ Get rid of cur_proc global. Replace by functions in err and tab
+ modules, which were the users.
+
+ * error.c: (static var command_name) New static var.
+ (err_vmsg) Use command_name.
+ (err_set_command_name) New function.
+
+ * tab.c: (static var command_name) New static var.
+ (tabi_title) Use command_name.
+ (tab_set_command_name) New function.
+
+ * command.c: (global var cur_proc) Removed.
+ (cmd_parse) Call err_set_command_name(), tab_set_command_name()
+ around executing command to set and clear command name.
+
+Sat Feb 11 21:44:50 2006 Ben Pfaff <blp@gnu.org>
+
+ Get rid of glob.c, glob.h.
+
+ * Makefile.am: (pspp_SOURCES) Remove glob.c, glob.h.
+
+ * dictionary.c: Move default_dict definition here.
+
+ * glob.c: Removed.
+ (global var FILTER_before_TEMPORARY) Variable removed. All
+ references deleted. The info in this var was redundant with
+ temp_dict, so they were changed to use temp_dict where needed.
+
+ * glob.h: Removed.
+
+ * start-date.c: New file. Moved get_start_date() here.
+
+ * start-date.h: New file.
+
+Fri Feb 3 20:34:52 2006 Ben Pfaff <blp@gnu.org>
+
+ * font.h: (struct font_set) Removed, because unused.
+
+Sat Jan 28 17:45:36 2006 Ben Pfaff <blp@gnu.org>
+
+ Cleaner (faster?) way to compact cases.
+
+ * dictionary.c: (dict_compact_case) Removed.
+ (dict_needs_compaction) New function.
+ (struct copy_map) New structure.
+ (struct dict_compactor) New structure.
+ (dict_make_compactor) New function.
+ (dict_compactor_compact) New function.
+ (dict_compactor_destroy) New function.
+
+Sat Jan 28 17:24:22 2006 Ben Pfaff <blp@gnu.org>
+
+ Cleanups.
+
+ * data-list.c: Make data_list_source_class static.
+ (dump_fixed_table) Use fh_get_name() to describe source of data.
+ (dump_free_table) Ditto.
+ (cmd_repeating_data) Eliminate special cases for inline file.
+
+ * dictionary.c: (dict_contains_var) Change return value from int to
+ bool.
+ (dict_rename_vars) Ditto.
+ (dict_create_vector) Ditto.
+
+Sat Jan 28 17:20:50 2006 Ben Pfaff <blp@gnu.org>
+
+ Add scratch file handles.
+
+ Now a file handle can refer to a disk file, to an in-memory
+ structure, or to the "inline" file, instead of just to a disk
+ file. The introduction of new categories means that special cases
+ for the inline file in a few places could be eliminated, but it
+ also means that code that assumed that a handle refers to a file
+ has to check for that.
+
+ Also, now file handles can be freed, so code now must be sure not
+ to access a handle after closing it (with fh_close()).
+
+ * Makefile.am: Add any-reader.c, any-reader.h, any-writer.c,
+ any-writer.h, scratch-handle.c, scratch-handle.h,
+ scratch-reader.c, scratch-reader.h, scratch-writer.c,
+ scratch-writer.h to pspp_SOURCES.
+
+ * any-reader.c: New file.
+
+ * any-reader.h: New file.
+
+ * any-writer.c: New file.
+
+ * any-writer.h: New file.
+
+ * scratch-handle.c: New file.
+
+ * scratch-handle.h: New file.
+
+ * scratch-reader.c: New file.
+
+ * scratch-reader.h: New file.
+
+ * scratch-writer.c: New file.
+
+ * scratch-writer.h: New file.
+
+ * aggregate.c: Use an any_writer instead of an sfm_writer, to add
+ flexibility.
+
+ * apply-dict.c: Use an any_reader instead of an sfm_reader, to add
+ flexibility.
+
+ * command.def: Add CLOSE FILE HANDLE command.
+
+ * dfm-reader.c: Now fewer special cases for inline file.
+ (static var inline_open_cnt) Removed.
+ (static var inline_file) Removed.
+ (dfm_close_reader) Eliminate a special case for inline file.
+ Reorganize to avoid access-after-free.
+ (dfm_open_reader) Eliminate a special case for inline file.
+ (read_inline_record) Use bool instead of int. No need to
+ increment line number.
+ (read_file_record) Use bool instead of int.
+ (read_record) Check whether file handle is inline file, instead of
+ for null pointer.
+ (dfm_eof) Ditto.
+ (dfm_expand_tabs) Ditto.
+ (dfm_push) Ditto.
+ (dfm_pop) Ditto.
+ (cmd_begin_data) Fix inaccurate check for whether the inline file
+ is in use--now we can tell by checking whether the inline file's
+ open count is positive.
+
+ * file-handle-def.c: (struct file_handle) Reorder members. Add
+ `deleted' member. Add `referent' member. Add `sh' member.
+ (static var default_handle) New variable.
+ (static var inline_file) New variable.
+ (fh_init) Initialize inline file.
+ (free_handle) New function.
+ (fh_done) Rewrite.
+ (fh_from_name) Don't return deleted handles.
+ (fh_from_filename) Ditto.
+ (fh_create) Removed.
+ (create_handle) New function.
+ (fh_create_file) New function.
+ (fh_create_scratch) New function.
+ (fh_inline_file) New function.
+ (fh_free) Rewrite.
+ (fh_open) Now requires a referent type mask and verifies it. All
+ references updated.
+ (fh_close) If open_cnt goes to 0 on a deleted handle, free it.
+ (fh_is_open) New function.
+ (fh_get_referent) New function.
+ (fh_get_filename) Limit to handles that refer to files.
+ (fh_get_mode) Ditto.
+ (fh_get_record_width) Limit to handles that refer to files or the
+ inline file.
+ (fh_get_tab_width) Ditto.
+ (fh_get_scratch_handle) New function.
+ (fh_set_scratch_handle) New function.
+ (fh_get_default_handle) New function.
+ (fh_set_default_handle) New function.
+
+ * file-handle.h: (enum fh_referent) New type.
+ (enum fh_mode) Rename MODE_TEXT to FH_MODE_TEXT, MODE_BINARY to
+ FH_MODE_BINARY, and update all usages.
+
+ * file-handle.q: Add "scratch" as a possible mode.
+ (cmd_file_handle) Mention CLOSE FILE HANDLE in error message.
+ Use lex_end_of_command(), lex_sbc_missing(). Support creating
+ scratch handles.
+ (cmd_close_file_handle) New function.
+ (referent_name) New function.
+ (fh_parse) Now takes a referent type mask to specify handles that
+ can be accepted. Updated all references.
+
+ * filename.c: (fn_extension) New function.
+
+ * get.c: Use any_reader and any_writer and thereby merge code that
+ has been duplicated for each kind of file. Also, we had something
+ here called `any_writer' before, so its name had to be changed to
+ `case_writer'.
+ (enum operation) Removed, because unused.
+ (struct get_pgm) Removed.
+ (get_pgm_free) Removed.
+ (get_source_destroy) Removed.
+ (get_source_read) Removed.
+ (global var get_source_class) Removed.
+ (static var case_reader_source_class) Removed.
+ (enum reader_command) New enum.
+ (struct case_reader_pgm) New struct.
+ (parse_read_command) New function.
+ (case_reader_pgm_free) New function.
+ (case_reader_source_destroy) New function.
+ (case_Reader_source_Read) New function.
+ (cmd_get) Rewrote as a call to parse_read_command().
+ (cmd_import) Ditto.
+ (struct any_writer) Rename to case_writer. Drop `writer_type',
+ `writer' members in favor of an `any_writer' member named
+ `writer'.
+ (any_writer_destroy) Rename case_writer_destroy. Use
+ any_writer_close().
+ (parse_write_command) Allow scratch files. Use any_writer.
+ (any_writer_write_case) Rename case_writer_write_case(). Use
+ any_writer_write().
+` (struct mtf_file) Use any_reader.
+ (cmd_match_files) Allow scratch files. Use any_reader.
+ (mtf_free_file) Use any_reader_close().
+ (mtf_read_nonactive_records) Use any_reader_read().
+ (mtf_processing) Use any_reader_read().
+ (struct import_pgm) Removed.
+ (import_pgm_free) Removed.
+ (import_source_destroy) Removed.
+ (import_source_read) Removed.
+ (global var import_source_class) Removed.
+
+ * glob.c: (global var default_handle) Removed. Replaced all
+ references by fh_get_default_handle() or fh_set_default_handle().
+
+ * pfm-read.c: (static var portable_to_local) Moved from inside
+ read_header() to top level.
+ (pfm_detect) New function.
+
+ * pfm-write.c: (pfm_write_case) Make case argument const.
+ Reorganize to avoid access-after-free.
+
+ * print.c: (dump_table) Use fh_get_name() to describe source of
+ data.
+
+ * sfm-read.c: (sfm_close_reader) Reorganize to avoid
+ access-after-free.
+ (sfm_detect) New function.
+
+ * str.c: (str_lowercase) New function.
+
+ * vfm.c: Use new compaction interface.
+ (static var compaction_necessary) Removed.
+ (static var compactor) New variable.
+ (open_active_file) Initialize compactor.
+ (write_case) Use compactor.
+ (close_active_file) Free compactor.
+
+Wed Jan 11 19:28:39 2006 Ben Pfaff <blp@gnu.org>
+
+ Clean up file handle code in preparation to add scratch file
+ handles.
+
+ * file-handle-def.c: Lots of formatting cleanup. Added function
+ comments.
+ (struct file_handle) Renamed `length' member
+ to `record_width'. All references updated.
+ (fh_init) New function. Moved here from file-handle.q.
+ (fh_done) New function. Moved here from file-handle.q and
+ rewrote.
+ (get_handle_with_name) Renamed fh_from_name().
+ (get_handle_for_filename) Renamed fh_from_filename().
+ (create_file_handle) Renamed fh_create(). Changed to take a
+ `struct fh_properties' instead of discrete values. Updated all
+ references.
+ (create_file_handle_with_defaults) Removed. Updated all
+ references to use fh_create() with fh_default_properties().
+ (fh_default_properties) New function.
+ (destroy_file_handle) Removed. The code is now in fh_done().
+ (handle_get_name) Renamed fh_get_name().
+ (handle_get_filename) Renamed fh_get_filename().
+ (handle_get_record_width) Renamed fh_get_record_width().
+ (handle_get_tab_width) Renamed fh_get_tab_width().
+
+ * file-handle-def.h: Formatting, comment fixes.
+ (enum file_handle_mode) Renamed struct fh_mode.
+ (struct fh_properties) New structure.
+ (fh_init) Move prototype here from file-handle.h.
+ (fh_done) Ditto.
+ (fh_close) Ditto.
+
+ * file-handle.q: (static var handle_list) Removed.
+ (fh_parse) Don't add handle to handle_list, because
+ file-handle-def.c has its own list.
+ (fh_init) Moved to file-handle-def.c.
+ (fh_done) Ditto.
+
+Sun Jan 9 01:09 Jason Stover <jason@sakla.net>
+
+ * regression.q: (run_regression) Moved coefficient initialization
+ to the linreg library. Altered other functions accordingly.
+
+Sat Jan 7 13:30:54 WST 2006 John Darrington <john@darrington.wattle.id.au>
+
+ * command.c data-in.c main.c: Fixed bug which crept in when
+ separating getl from readline.
+
+ * vars-atr.c value-labels.h: Fixed constness of val_labs_count.
+
+Fri Dec 23 20:59:01 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * getl.c error.c: Separated file_loc functionality from error.c
+
+Mon Dec 19 14:01:56 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * format.c: Additional error checking.
+ * getl.[ch]: Separated into getl.c and readln.c
+ * settings.[ch]: Made CC_CNT public
+
+Fri Dec 16 09:11:48 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * examine.q: Fixed buglet when cleaning up at end of procedure.
+
+Tue Dec 13 22:34:42 2005 Ben Pfaff <blp@gnu.org>
+
+ Move global initialization and cleanup code into main.c.
+ Remove vestigial log infrastructure.
+ Minor related cleanups.
+
+ * command.c: (shell) When execl() fails, use _exit(), not
+ err_hcf().
+
+ * error.c: (err_hcf) Move into main.c, rename terminate(). All
+ callers updated.
+ (err_done) New function with just the error.c-specific code for
+ err_hcf(). Called by terminate().
+
+ * glob.c: Removed all Borland C, DJGPP cruft.
+ (init_glob) Merged into main().
+ (done_glob) Merged into terminate().
+ (get_date) Removed.
+ (get_start_date) New function. All users of curdate updated to call
+ this function instead.
+
+ * lexer.c: (lex_init) Moved initialization of tokstr here, from
+ init_glob().
+ (lex_done) Moved destruction of tokstr here, from done_glob().
+
+ * main.c: (global var pgmname) Removed. Changed all references to
+ program_name, which is defined by gnulib.
+ (global var curdate) Removed.
+ (main) Moved init_glob() code here. Merged parse_script() in
+ here.
+ (parse_script) Removed.
+ (terminate) Moved err_hcf() here from error.c and renamed
+ terminate(). Merged done_glob() code in here. Call err_done().
+ All callers updated.
+ (i18n_init) New function.
+ (fpu_init) New function.
+
+ * output.c: (outp_init) Make void.
+ (init_default_drivers) New function.
+ (outp_read_devices) If no drivers are initialized successfully,
+ call init_default_drivers() to initialize a default driver.
+ (outp_done) Make void.
+ (static var prog) Make const.
+ (parse_options) Make parameter const.
+ (colon_tokenize) Make return value const.
+ (configure_driver) Change prototype to take a broken-down driver
+ configuration instead of a line of text.
+ (configure_driver_line) New function that does what
+ configure_driver() did before.
+
+ * q2c.c: (global var pgmname) Rename program_name.
+
+ * settings.c: (settings_init) Renamed from init_settings().
+ (settings_done) Renamed from done_settings().
+
+ * vfm.c: (global var last_vfm_invocation) Make static.
+ (vfm_last_invocation) New function. All references to
+ last_vfm_invocation update to call this.
+ (procedure) Call update_last_vfm_invocation().
+ (internal_procedure) Ditto.
+ (update_last_vfm_invocation) New function.
+
+Sat Dec 10 23:30:19 2005 Ben Pfaff <blp@gnu.org>
+
+ Separate random numbers from other settings because of GSL
+ dependency.
+
+ * Makefile.am: Add random.c, random.h to sources.
+
+ * glob.c: (init_glob) Call random_init().
+ (done_glob) Call random_done().
+
+ * settings.c: (static var rng) Move to random.c.
+ (done_settings) Move freeing of RNG to random_done().
+ (get_rng) Move to random.c
+ (set_rng) Ditto.
+
+ * random.c: New file.
+
+ * random.h: New file.
+
+Sat Dec 10 18:13:36 2005 Ben Pfaff <blp@gnu.org>
+
+ Separate settings and the SET command, for modularity.
+
+ * Makefile.am: Add settings.c to sources.
+
+ * glob.c: (global variable test_mode) Removed.
+
+ * set.q: Remove all the set_* variables. Remove a lot of obsolete
+ SPSS/PC+ settings. Remove the aux_*() routines. Moved the
+ get_*() functions into settings.c. Rewrite the settings code and
+ functions to call the new set_*() functions. Rewrite custom
+ currency parsing. Write new by-hand cmd_show().
+
+ * esttings.c: New file. Moved the get_*() functions here from
+ set.q. Created new set_*() functions to correspond with them.
+ Regularized the names and types of some functions and updated
+ their callers. Added static, file-scope variables to support the
+ settings.
+
+ * q2c.c: Remove "aux" support, which was only needed by set.q.
+
+Sun Nov 27 06:43:46 WST 2005 John Darrington <john@darington.wattle.id.au>
+
+ * data-out.c format.h: Added return value to data_out function.
+
+ * value-labels.c: Fixed bug in val_labs_remove.
+
+Sat Nov 5 18:37:26 2005 Ben Pfaff <blp@gnu.org>
+
+ * Makefile.am: Remove devind.c, devind.h from list of source
+ files.
+
+ * devind.c: Removed.
+
+ * devind.h: Removed.
+
+ * list.q: Removed "support" for devind.
+
+ * output.c: Don't add devind class.
+
+Sat Nov 5 18:21:00 2005 Ben Pfaff <blp@gnu.org>
+
+ * var.h: (struct variable) Make `init', `reinit' bool values.
+ Rearrange fields.
+
+Fri Nov 4 19:43:01 2005 Ben Pfaff <blp@gnu.org>
+
+ * recode.c: Rewrote whole file, as clean-up.
+
+Fri Nov 4 19:37:50 2005 Ben Pfaff <blp@gnu.org>
+
+ * pool.c: Don't make alignment exception for x86.
+ (pool_alloc) Return null for 0-size blocks.
+ (pool_alloc_unaligned) New function.
+ (pool_strndup) Removed. Changed callers to use pool_clone_unaligned().
+ (pool_clone_unaligned) New function.
+ (pool_strdup) Use pool_clone_unaligned().
+
+ * var.h: (enum var_type) Give the NUMERIC, ALPHA enum this name.
+ (struct variable) Use `enum var_type' for `type'.
+
+ * vars-atr.c: (var_type_adj) New function.
+ (var_type_noun) New function.
+
+ * vars-prs: (parse_mixed_vars) Fix freeing code.
+ (parse_mixed_vars_pool) New function.
+
+Wed Nov 2 21:24:48 2005 Ben Pfaff <blp@gnu.org>
+
+ * file-handle-def.c: Needed another #include, to avoid missing
+ prototype warning.
+
+ * file-handle.q: (cmd_file_handle) Declarations must precede
+ statements. Free parse data on success as well as on failure, to
+ avoid memory leak.
+
+ * get.c: (parse_write_command) Destroy dict on success, to avoid
+ memory leak.
+
+ * data-list.c: (cmd_repeating_data) Fix usage of saw_occurs,
+ saw_length, saw_continued, saw_id, which were boolean but
+ incorrectly treated as bitmaps as result of a previous
+ half-finished cleanup.
+
+ * weight.c: (struct weight_trns) Unused, so removed.
+
+ * Makefile.am: Add range-prs.h to sources.
+
+Wed Nov 2 21:24:15 2005 Ben Pfaff <blp@gnu.org>
+
+ DO IF, LOOP cleanup.
+
+ * Makefile.am: Add ctl-stack.c, ctl-stack.h to source files.
+ Reformat source file list to list one file per file, so that
+ patches for future changes will be easier to read.
+
+ * ctl-stack.c, ctl-stack.h: New files.
+
+ * do-if.c: Rewrote whole file.
+
+ * do-ifP.h: Removed.
+
+ * loop.c: Rewrote whole file.
+
+ * glob.c: (global var ctl_stack) Move into ctl-stack.c.
+
+ * temporary.c: (cmd_temporary) Use ctl_stack_is_empty().
+
+ * vfm.c: (open_active_file) Use ctl_stack_clear().
+
+Wed Nov 2 21:18:13 2005 Ben Pfaff <blp@gnu.org>
+
+ New pool functions.
+
+ * pool.c: (pool_create_at_offset) New function.
+ (pool_add_subpool) New function.
+
+ * pool.h: (pool_create_container) New macro.
+
+ * expressions/parse.c: (expr_parse_pool) New function.
+
+ * autorecode.c: (recode) Use pool_create_container().
+
+ * count.c: (cmd_count) Ditto.
+
+Wed Nov 2 19:59:32 2005 Ben Pfaff <blp@gnu.org>
+
+ Clean up transformations, by getting rid of `struct trns_header',
+ replacing it by `struct transformation' that has a void *
+ `private' member. Updated all uses of transformations to match,
+ which was a lot of code. Only major related changes listed below.
+
+ * compute.c: (cmd_if) Use get_proc_func().
+ (cmd_compute) Use get_proc_func().
+ (get_proc_func) New function.
+
+ * glob.c: (global var m_trns) Change type to size_t.
+ (global var n_trns) Ditto.
+ (global var f_trns) Ditto.
+ (global var t_trns) Change type to struct transformation *.
+
+ * var.h: (struct trns_header) Removed.
+ (struct transformation) New.
+ (typedef trns_proc_func) Takes a void * instead of a struct
+ trns_header *.
+ (typedef trns_free_func) Ditto.
+
+ * vfm.c: (execute_transformations) Takes an array of
+ transformations instead of trns_headers.
+ (add_transformation) Change prototype from (trns_header *) to
+ (trns_proc_func *, trns_free_func *, void *).
+ (next_transformation) New function.
+
+Sat Oct 29 16:25:36 2005 Ben Pfaff <blp@gnu.org>
+
+ * count.c: Major cleanups. Rename practically everything.
+ Rewrite much of the code. Use pools for memory management. Use
+ the new parse_num_range().
+
+ * mis-val.c: (cmd_missing_values) Use the new parse_num_range().
+ (parse_number) Removed.
+
+ * missing-values.c: (mv_add_num_range) Don't add out-of-order
+ ranges, e.g. where low > high.
+
+ * pool.c: (pool_2nrealloc) New function.
+
+ * range-prs.c: New file.
+ (parse_num_range) New function.
+ (parse_number) New function.
+
+Fri Oct 28 22:47:48 2005 Ben Pfaff <blp@gnu.org>
+
+ Fix up potential overflows in size calculations by replacing
+ instances of pool_alloc(p, x * sizeof *y) by pool_malloc(p, x,
+ sizeof *y) everywhere I could find them. Similarly by
+ pool_malloc(), pool_realloc().
+ (Order is important: pool_alloc(p, sizeof *y, x) will divide by 0
+ if x is 0.)
+
+ * pool.c: (pool_nalloc) New function.
+ (pool_nmalloc) New function.
+ (pool_nrealloc) New function.
+
+Thu Oct 27 11:16:53 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ Separated the definition of a file handle object from the stuff
+ pertaining to the FILE HANDLE command.
+
+ * file-handle-def.[ch]: New files.
+
+ * dfm-read.c file-handle.h file-handle.q
+
+Tue Oct 25 21:56:23 2005 Ben Pfaff <blp@gnu.org>
+
+ Fix up potential overflows in size calculations by replacing
+ instances of xmalloc(x * sizeof *y) by xnmalloc(x, sizeof *y)
+ everywhere I could find them. Similarly by xrealloc(), malloc().
+ (Order is important: xnmalloc(sizeof *y, x) will divide by 0 if x
+ is 0.)
+
+ * alloc.c: (nmalloc) New function.
+ (out_of_memory) Removed. Replaced references by xalloc_die().
+
+ * sort.c: (allocate_cases) Fix segfault if memory allocation
+ fails.
+
+ * subclist.c: (subc_list_double_create) Use xnmalloc() instead of
+ malloc().
+ (subc_list_double_push) Use xnrealloc() instead of realloc().
+
+Wed Oct 26 08:43:51 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ Dictionary abstraction part #2
+
+ * algorithm.c format.c str.c sysfile-info.c val.h var.h vars-atr.c:
+ Removed unnecessary #include directives
+
+Mon Oct 24 21:35:08 2005 Ben Pfaff <blp@gnu.org>
+
+ * groff-font.c (font_msg): Use err_vmsg() instead of incorrectly
+ trying to pass a va_list to tmsg(). Thanks to Jason Stover for
+ reporting this bug.
+
+Mon Oct 24 21:24:15 2005 Ben Pfaff <blp@gnu.org>
+
+ Work to get rid of GCC 4.0 warnings, part 2.
+
+ In many files, change `unsigned char' to `char'. This often
+ requires adding casts to <ctype.h> functions.
+
+ * data-in.c: (parse_A) Use buf_copy_rpad().
+
+ * str.c: (str_copy_buf_trunc) New function.
+
+ * value-labels.c: (value_to_string) Fix mistaken use of strncpy(),
+ by rewriting.
+
+Mon Oct 24 13:42:32 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ Moved some definitions to make it easier to abstract a dictionary
+ from the rest of PSPP.
+
+ * format-prs.c lex-def.[ch]: New files.
+
+ * Makefile.am lexer.[ch] dictionary.c vars-atr.c vfm.c algorithm.c
+ format.c: Moved some functions between modules.
+
+Sun Oct 23 19:28:08 2005 Ben Pfaff <blp@gnu.org>
+
+ Work to get rid of GCC 4.0 warnings, part 1.
+
+ In many files, change count parameters to parse_variables(),
+ etc. from `int' to `size_t'. Also change related variables and
+ struct members. Also change messages as needed (e.g. %d to %u
+ with cast to unsigned). Also change arithmetic as necessary
+ (e.g. n >= m - 1 to n + 1 >= m).
+
+ * crosstabs.q: (crs_custom_tables) Check for size_t overflow in
+ multiplication.
+
+ * q2c.c: (dump_declarations) Generate code for size_t instead of
+ int.
+
+Thu Oct 20 18:18:40 2005 Ben Pfaff <blp@gnu.org>
+
+ * output.c: (outp_read_devices) Fix message.
+
+Sat Sep 17 11:13:13 2005 Ben Pfaff <blp@gnu.org>
+
+ * matrix-data.c: (cmd_matrix_data) Change type of variable whose
+ address is passed to dict_get_vars() from size_t to int to match
+ John's change below.
+
+ * modify-vars.c: (validate_var_modification) Ditto.
+
+Mon Sep 12 19:26:06 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * dictionary.[ch] Changed cnt from size_t* to int* since that's
+ what it's called as, and on x86_64 machines they're different sizes.
+
+ * str.c: (ds_vprintf) Copied va_list args so they can be re-used
+
+Sun Aug 21 00:12:24 2005 Ben Pfaff <blp@gnu.org>
+
+ * lexer.c: (lex_sbc_only_once) New function.
+ (lex_sbc_missing) New function.
+
+Sun Aug 21 00:00:47 2005 Ben Pfaff <blp@gnu.org>
+
+ * case.h: (case_str) Make it return `unsigned char'.
+
+Sat Aug 20 23:56:14 2005 Ben Pfaff <blp@gnu.org>
+
+ Revamp SAVE, XSAVE, EXPORT. Add (or at least parse) all the
+ subcommands that we didn't support. Fix bug 13911. Fix bug
+ reported by Adam Pierson (COMPRESSED and other subcommands didn't
+ work on SAVE). Refactor all related code.
+
+ * command.def: Add XEXPORT command.
+
+ * dictionary.c: (dict_delete_scratch_vars) New function.
+
+ * get.c: (cmd_get) Fix parsing.
+ (struct save_trns) Removed.
+ (cmd_save_internal) Removed.
+ (cmd_save) Removed.
+ (do_write_case) Removed.
+ (save_write_case_func) Removed.
+ (save_trns_proc) Removed.
+ (save_trns_free) Removed.
+ (trim_dictionary) Removed.
+ (struct export_proc) Removed.
+ (cmd_export) Rewrote.
+ (export_write_case_func) Removed.
+ (export_proc_free) Removed.
+ (enum writer_type) New enum.
+ (enum command_type) New enum.
+ (struct any_writer) New struct.
+ (any_writer_destroy) New function.
+ (parse_write_command) New function.
+ (any_writer_write_case) New function.
+ (parse_output_proc) New function.
+ (output_proc) New function.
+ (cmd_save) Rewrote.
+ (cmd_xsave) Rewrote.
+ (struct output_trns) New struct.
+ (parse_output_trns) New function.
+ (output_trns_proc) New function.
+ (output_trns_free) New function.
+ (cmd_xsave) Rewrote.
+ (cmd_xexport) New function.
+ (parse_dict_trim) New function.
+ (struct mtf_proc) Change `by_cnt' member type to `int'.
+ (cmd_import) Rewrote.
+
+ * pfm-write.c: (struct pfm_writer) Add `digits' member.
+ (pfm_writer_default_options) New function.
+ (pfm_open_writer) Add `opts' argument and handle options.
+ (write_float) Write only as many digits as `digits' member says.
+ (format_trig_double) Limit base-10 precision to LDBL_DIG.
+
+ * pfm-write.h: (enum pfm_type) Moved here from pfm-read.h.
+ (struct pfm_write_options) New struct.
+
+ * sfm-write.c: (sfm_writer_default_options) New function.
+ (sfm_open_writer) Remove `compress', `omit_long_names' args. Add
+ `opts' argument. Implement options.
+
+ * sfm-write.h: (struct sfm_write_options) New struct.
+
+ * expressions/helpers.c: (copy_string) Make `old' arg `unsigned
+ char *' instead of `char *'.
+
+Sat Aug 6 21:29:15 2005 Ben Pfaff <blp@gnu.org>
+
+ * factor_stats.c: Needed <config.h> included earlier.
+
+ * percentiles.c: Needed to include <config.h>.
+
+ * val.h: Don't include "config.h".
+
+Sat Aug 6 21:26:27 2005 Ben Pfaff <blp@gnu.org>
+
+ Clean up treatment of missing values by moving all the code into
+ one place. All references to the missing value function were
+ updated, but only major changes are detailed below.
+
+ * Makefile.am: Add missing-values.c, missing-values.h to sources.
+
+ * apply-dict.c: (cmd_apply_dictionary) Use mv_resize().
+
+ * dictionary.c: (dict_create_var) Initialize `miss' member with
+ mv_init().
+ (dict_clone_var) Copy `miss' member with mv_copy().
+
+ * get.c: (mtf_merge_dictionary) Use mv_copy().
+
+ * missing-values.c: New file.
+
+ * missing-values.h: New file.
+
+ * mis-val.c: Rewrite. New version implements updated semantics.
+
+ * pfm-read.c: (read_variables) Rewrite missing value handling.
+
+ * pfm-write.c: (write_variables) Rewrite missing value handling.
+
+ * sfm-read.c: (read_variables) Rewrite missing value handling.
+
+ * sfm-write.c: (write_variable) Rewrite missing value handling.
+
+ * sfmP.h: Include "magic.h" to get definition of
+ second_lowest_value.
+
+ * sysfile-info.c: (describe_variable) Rewrite missing value
+ handling.
+
+ * val.h: Include "magic.h" to get definition of
+ second_lowest_value.
+
+ * var.h: Include "missing-values.h". Drop MISSING_* enums.
+ (struct variable) Remove `miss_type', `missing'. Add `miss'.
+
+ * vars-atr.c: (is_num_user_missing) Removed--use
+ mv_is_num_user_missing().
+ (is_str_user_missing) Removed--use mv_is_str_user_missing().
+ (is_system_missing) Removed--use mv_is_value_system_missing().
+ (is_missing) Removed--use mv_is_value_missing().
+ (is_user_missing) Removed--use mv_is_value_user_missing().
+
+Sun Jul 31 14:09:57 2005 Ben Pfaff <blp@gnu.org>
+
+ Adopt use of gnulib for portability.
+
+ * Make.build: Add $(top_srcdir)/gl and $(top_builddir)/gl to
+ include path.
+
+ * Makefile.am: Remove bool.h, stat.h and change getline.[ch] to
+ getl.[ch] in pspp_SOURCES. Remove libmisc, add libgl in
+ pspp_LDADD.
+
+ * In many source files, added an explicit inclusion of gettext.h
+ and definition of _ macro. These are no longer in pref.h because
+ it interfered with definitions in a few gnulib source files.
+
+ * In many source files, changed #include "bool.h" to #include
+ <stdbool.h>, which is provided by gnulib.
+
+ * alloc.c: Removed functions defined in gnulib:
+ (xmalloc) Removed.
+ (xcalloc) Removed.
+ (xrealloc) Removed.
+ (xstrdup) Removed.
+ (out_of_memory) Redefined as wrapper for xalloc_die().
+
+ * alloc.h: Replace prototypes by #include "xalloc.h".
+
+ * casefile.c: Use full_read() and full_write() from gnulib instead
+ of our home-grown versions.
+ (full_read) Removed.
+ (full_write) Removed.
+
+ * getline.c: Renamed getl.c.
+
+ * getline.h: Renamed getl.h, updated all references.
+
+ * filename.c: (fn_readlink) Change to wrapper around xreadlink()
+ from gnulib.
+
+ * glob.c: Just #include <time.h> instead of the crazy rigmarole
+ here before.
+ (init_glob) Call set_program_name() to initial gnulib progname
+ module.
+
+ * html.c: (postopen) Use getlogin_r(), gethostname() from gnulib.
+
+ * permissions.c: Use "stat-macros.h" from gnulib.
+
+ * postscript.c: Just #include <time.h> instead of the crazy
+ rigmarole here before.
+
+ * q2c.c: (main) Make generated code #include "gettext.h".
+
+ * str.h: Get rid of most explicit declarations of standard
+ functions, in favor of including gnulib header files.
+
+ * expressions/evaluate.c: Ditto.
+
+ * expressions/operations.h.pl: Make generated code #include
+ <stdbool.h>, not "bool.h".
+
+Sat Jul 30 23:13:17 2005 Ben Pfaff <blp@gnu.org>
+
+ * expressions/parse.c: (validate_function_args) Fix two msg() bugs
+ found by -Wformat.
+
+Sat Jul 30 23:10:01 2005 Ben Pfaff <blp@gnu.org>
+
+ * expressions/evaluate.c: (expr_debug_print_postfix) Don't pass
+ null pointer to printf for %.*s.
+
+Sat Jul 30 23:05:33 2005 Ben Pfaff <blp@gnu.org>
+
+ * vars-atr.c: (var_is_valid_name) Fix three msg() bugs found by
+ -Wformat.
+
+Sat Jul 30 22:58:33 2005 Ben Pfaff <blp@gnu.org>
+
+ * rank.q: (parse_rank_function) Fix msg() bug found by -Wformat.
+
+Sat Jul 30 22:56:12 2005 Ben Pfaff <blp@gnu.org>
+
+ * postscript.c: (postopen) Cast `char' to `unsigned char' before
+ passing to isspace().
+
+Sat Jul 30 22:52:09 2005 Ben Pfaff <blp@gnu.org>
+
+ * pfm-read.c: (read_variables) Fix msg() bug found by -Wformat.
+
+Sat Jul 30 22:50:57 2005 Ben Pfaff <blp@gnu.org>
+
+ * histogram.c: Include <config.h>.
+
+Sat Jul 30 22:48:50 2005 Ben Pfaff <blp@gnu.org>
+
+ * get.c: (cmd_match_files) Fix msg() bug found by -Wformat.
+
+Sat Jul 30 22:46:10 2005 Ben Pfaff <blp@gnu.org>
+
+ * format.c: (check_common_specifier) Fix msg() bug found by
+ -Wformat.
+ (check_output_specifier) Ditto.
+
+Sat Jul 30 22:43:57 2005 Ben Pfaff <blp@gnu.org>
+
+ * file-handle.q: (cmd_file_handle) Fix msg() bug found by
+ -Wformat.
+
+Sat Jul 30 22:41:44 2005 Ben Pfaff <blp@gnu.org>
+
+ * data-in.c: (parse_Z) [WORDS_BIGENDIAN] Don't declare buf[], to
+ avoid "unused variable" warning.
+
+Sat Jul 30 22:38:46 2005 Ben Pfaff <blp@gnu.org>
+
+ * command.c: (find_word) Cast `char' to `unsigned char' before
+ passing to isspace().
+
+Sat Jul 30 22:36:29 2005 Ben Pfaff <blp@gnu.org>
+
+ * case.c: (case_compare) Implement as delegating to
+ case_compare_2dict().
+
+Sat Jul 30 22:34:18 2005 Ben Pfaff <blp@gnu.org>
+
+ * algorithm.c: Inclusion of <alloca.h> is unneeded.
+
+Sat Jul 30 22:01:32 2005 Ben Pfaff <blp@gnu.org>
+
+ * Make.build: Don't append -ansi to AM_CFLAGS for GCC. Using
+ -ansi changes the behavior of header files significantly. It
+ causes __STRICT_ANSI__ to be defined, and some headers interpret
+ that as cause to e.g. not use `long long' or __attribute__. The
+ former example is bad when off_t is supposed to be `long long',
+ and the latter prevents -Wformat from working.
+
+Sun Jul 24 20:26:59 2005 Ben Pfaff <blp@gnu.org>
+
+ Get rid of dependency on libgmp by writing our own routine for
+ floating-point base conversion.
+
+ * pfm-write.c: (write_float) Rewrote.
+ (write_int) Rewrote.
+ (pow30_nonnegative) New function.
+ (pow30) New function.
+ (trig_to_char) New function.
+ (format_trig_digits) New function.
+ (recurse_format_trig_int) New function.
+ (format_trig_int) New function.
+ (should_round_up) New function.
+ (try_round_up) New function.
+ (format_trig_double) New function.
+
+Sun Jul 24 18:49:20 2005 Ben Pfaff <blp@gnu.org>
+
+ * data-in.c: (parse_numeric) Allow "1+23" even for F format, for
+ compatibility.
+
+Sun Jul 24 18:47:37 2005 Ben Pfaff <blp@gnu.org>
+
+ * pfm-read.c: (read_version_data) Read and ignore author field.
+
+Wed Jul 6 20:44:27 2005 Ben Pfaff <blp@gnu.org>
+
+ * get.c: (mtf_processing) Don't assume that
+ mtf_compare_BY_values() always returns -1, 0, or 1. Actually, it
+ returns a negative, zero, or positive result. Fixes MATCH FILES
+ bug on Mac OS X reported by "Marshall DeBerry" <mdb@radix.net>.
+
+Mon Jul 4 18:01:15 2005 Ben Pfaff <blp@gnu.org>
+
+ * flip.c: [HAVE_SYS_TYPES_H] Really include <sys/types.h>. The
+ preprocessor test for sys/types.h was accidentally inverted. This
+ was bug 12789.
+
+Sun Jul 3 22:47:39 2005 Ben Pfaff <blp@gnu.org>
+
+ * get.c: (cmd_match_files) Fix memory leak on `by' and on
+ `vfm_source'.
+
+ * getline.c: [HAVE_LIBREADLINE] (read_console) Fix memory leak on
+ `line'.
+
+ * vfm.c: (close_active_file) Remove unnecessary test.
+
+Sun Jul 3 21:45:32 2005 Ben Pfaff <blp@gnu.org>
+
+ Fix NDEBUG compile errors.
+
+ * hash.h: Needed explicit #include <assert.h>.
+
+ * linked-list.c: (ll_next) First arg is UNUSED when NDEBUG is
+ defined.
+
+Sun Jun 12 23:44:38 2005 Ben Pfaff <blp@gnu.org>
+
+ Implement embedding for PostScript driver. Fixes bug 12970.
+
+ * ascii.c: Fix compiler warnings.
+
+ * html.c: Ditto.
+
+ * chart.h: Add `file' member.
+
+ * output.h: (struct outp_class) initialise_chart, finalise_chart
+ should take outp_driver *, not outp_class *. Update all
+ references.
+
+ * plot-chart.c: (chart_create) Fix segfault when there are no
+ output drivers at all.
+ (chart_submit) Call d->class->finalise_chart.
+
+ * postscript.c: (ps_open_page) Set cp_y to 0.
+ (ps_submit) New function.
+ (ps_chart_initialise) Implement.
+ (ps_chart_finalise) Implement.
+ (static var postscript_class) Add ps_submit.
+ (static var epsf_class) Add ps_submit.
+
+
+Sun Jun 12 14:54:40 2005 Ben Pfaff <blp@gnu.org>
+
+ Did some more work on bug 12859 and then realized that a *good*
+ solution would require some fundamental restructuring. For now,
+ I'm marking REPEATING DATA unimplemented, and then we can revisit
+ it post-0.4.0.
+
+ * command.def: Make REPEATING DATA unimplemented.
+
+ * data-list.c: (cmd_repeating_data) Assume inline file is 80
+ characters wide.
+ (realize_value) Revert previous changes; no longer needed.
+ Updated all callers.
+
+ * error.c: (err_hcf) Set nfile_loc, mfile_loc to 0 after freeing
+ file_loc, to avoid bad references later.
+
+ * str.c: Fix typo.
+
+Tue Jun 7 00:14:09 2005 Ben Pfaff <blp@gnu.org>
+
+ Make some code tolerant of reentry. Should not be needed if other
+ code is correct but it is good to be generally tolerant.
+
+ * error.c: (err_hcf) Set file_loc to null after free().
+
+ * output.c: (outp_done) Similar changes.
+
+ * str.c: (ds_destroy) Ditto.
+
+Tue Jun 7 00:10:20 2005 Ben Pfaff <blp@gnu.org>
+
+ Continue work on bug 12859, plus some code cleanup.
+
+ * data-list.c: (cmd_repeating_data) Replace `seen' bitmap by
+ boolean variables. Don't try to compute starts_end, cont_end for
+ inline file. Calculate length only after parsing variable
+ specifications. Add proper transformation to list.
+ (realize_value) If the rpd_num_or_var has no value, return new
+ DEFAULT_MEMBER argument (for use with inline file).
+ (repeating_data_trns_proc) Pass default values.
+
+ * dfm-read.c: (dfm_close_reader) Only skip data if *not* still
+ open, and only if we actually started reading data.
+
+Sun Jun 5 18:39:36 2005 Ben Pfaff <blp@gnu.org>
+
+ Fix bug 11894.
+
+ * output.c: (outp_read_devices) Fix message.
+
+Fri May 27 12:34:43 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * sort-prs.[ch] (newfiles), aggregate.c, sort.[ch]: Separated the guts
+ of the sort algorithm from the parser for the SORT command.
+
+ * rank.q: Added the parser for the RANK command.
+
+Thu May 26 12:29:21 2005 Ben Pfaff <blp@gnu.org>
+
+ Fix bug 13192.
+
+ * sort.c: (sort_parse_criteria) Only set *saw_direction if
+ saw_direction is non-null. Thanks to John Darrington for
+ reporting this bug.
+
+Tue May 24 21:52:55 2005 Ben Pfaff <blp@gnu.org>
+
+ * get.c: (mtf_processing) Handle case of a lookup table as the
+ active file. Thanks to John Darrington for reporting this bug.
+
+Wed May 25 10:27:02 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * alloc.c alloc.h: (xcalloc) changed signature to imitate the
+ POSIX calloc function.
+
+ * crosstabs.q get.c vars-prs.c: Updated calls to xcalloc to
+ reflect new signature.
+
+ * sfm-read.c: Now much more robust in the face of badly formed
+ system files.
+
+Mon May 23 11:57:31 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ *sfm-read.c: Fixed some bugs regarding long string continuation
+ records, which the previous fix uncovered.
+
+Sat May 21 12:48:34 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * sfm-read.c, sfmP.h: Allow reading of system files when the
+ case_size value in the header is -1. Also changed some Errors to
+ Warnings when reading system files.
+
+Tue May 17 21:00:57 2005 Ben Pfaff <blp@gnu.org>
+
+ * data-list.c: (data_list_trns_free) Don't free the argument
+ because cancel_transformations() will do that itself.
+ (data_list_source_destroy) Destroy the argument to
+ data_list_trns_free(), because it no longer does so itself.
+
+Tue May 17 18:29:35 2005 Ben Pfaff <blp@gnu.org>
+
+ * data-out.c: (format_and_round) Don't output leading `-' if value
+ rounds to zero.
+
+Tue May 17 00:06:43 2005 Ben Pfaff <blp@gnu.org>
+
+ Fix bug 11119.
+
+ * som.c: (output_encodings) If some cell in the table won't fit
+ with the horizontal or vertical headers, cancel those headers.
+
+ * som.h: (struct som_table_class) Add fits_width, fits_length,
+ set_headers members.
+
+ * tab.c: (tabi_fits_width) New function.
+ (tabi_fits_length) New function.
+ (tabi_set_headers) New function.
+ (global var tab_table_class) Add the new functions as appropriate
+ members.
+
+Mon May 16 22:34:06 2005 Ben Pfaff <blp@gnu.org>
+
+ Fix rest of bug 13054.
+
+ * format.def: Fix EDATE, SDATE, ADATE, JDATE, QYR, MOYR, WKYR,
+ DATETIME, TIME system/portable file values.
+
+Mon May 16 22:31:15 2005 Ben Pfaff <blp@gnu.org>
+
+ * data-list.c: (parse_free) Use make_input_format().
+
+ * data-out.c: (num_to_string) Use make_output_format().
+
+ * dictionary.c: (dict_create_var) Ditto.
+
+ * format.c: (global var f8_2) New var.
+ (make_input_format) New function.
+ (make_output_format) New function.
+
+ * get.c: (cmd_match_files) Use make_output_format().
+
+ * list.q: (cmd_list) Ditto.
+
+ * matrix-data.c: Ditto.
+
+ * sfm-read.c: (parse_format_spec) Check output specifier
+ thoroughly.
+
+ * tab.c: (tab_float) Use make_output_format().
+
+Sun May 15 23:38:10 2005 Ben Pfaff <blp@gnu.org>
+
+ Fix more of bug 13054.
+
+ * format.def: FMT_A should allow 255-character output. FMT_AHEX
+ should allow 510-character input and output.
+
+ * data-out.c: (num_to_string) Get rid of NEW_STYLE option.
+ (convert_E) Handle non-finite values.
+ (try_F) Rewrite.
+ (format_and_round) New function.
+ (convert_infinite) New function used by try_F() and convert_E().
+
+Sun May 15 23:36:55 2005 Ben Pfaff <blp@gnu.org>
+
+ Regularize string and buffer function names so that they make some
+ kind of sense.
+
+ * str.c: (mm_reverse) Rename buf_reverse(). Update all
+ references.
+ (mm_find_reverse) Rename buf_find_reverse(). Update all
+ references.
+ (mm_case_compare) Rename buf_compare_case(). Update all
+ references.
+ (st_compare_pad) Rename buf_compare_rpad(). Update all
+ references.
+ (str_compare_rpad) New function.
+ (st_bare_pad_copy) Rename buf_copy_str_rpad(). Update all
+ references.
+ (buf_copy_str_lpad) New function.
+ (st_bare_pad_len_copy) Rename buf_copy_rpad(). Update all
+ references.
+ (st_pad_copy) Rename str_copy_rpad(). Update all references.
+ (st_trim_copy) Rename str_copy_trunc(). Update all references.
+ (st_uppercase) Renamed str_uppercase(). Update all references.
+
+Sat May 14 08:22:26 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * dfm-read.c: Fixed polarity of test in dfm-close-reader. Closes
+ Bug #13082
+
+Tue May 10 20:08:18 2005 Ben Pfaff <blp@gnu.org>
+
+ * data-in.c: (data_in) Add assertion to check input specifier.
+
+ * data-out.c: (data_out) Add assertion to check output specifier.
+
+Tue May 10 19:56:35 2005 Ben Pfaff <blp@gnu.org>
+
+ Start to fix bug 13054.
+
+ * format.c: (check_input_specifier) Improve error message.
+ (check_input_specifier) Check F, COMMA, and DOLLAR formats for
+ valid decimal places.
+ (check_output_specifier) Ditto (but different criteria).
+ (convert_fmt_ItoO) Assert valid input and output specifiers.
+ Also, if input specifier has *any* decimal places, make the output
+ specifier 1 place wider.
+
+Mon May 9 07:14:29 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * sysfile-info.c: Fixed bug [# 13024 ]
+
+Sun May 8 13:52:12 2005 Ben Pfaff <blp@gnu.org>
+
+ "Fix" bug 13021 by disabling FILE TYPE. Eventually, we should
+ actually implement it.
+
+ * command.c: (FILE_TYPE_okay) Always return 1.
+
+ * command.def: Change FILE TYPE, END FILE TYPE into UNIMPL.
+
+ * file-type.c: Add prototypes to get rid of warnings.
+
+Sun May 8 08:08:07 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * barchart.c box-whisker.c cartesian.c piechart.c plot-hist.c: Fixed
+ more ISO/IEC 9899:1990 conformance issues.
+
+Wed May 4 23:54:02 2005 Ben Pfaff <blp@gnu.org>
+
+ Fix bug 12948. See also new test in
+ tests/bugs/match-file-scratch.sh.
+
+ * get.c: (mtf_merge_dictionary) Don't compact dictionary because
+ that deletes scratch variables that someone else might be using,
+ and because we can't reassign our sources' value indexes.
+ Instead, simply don't copy scratch variables into the master
+ dictionary.
+
+ * dictionary.c: (dict_compact_values) Delete variables from the
+ dictionary passed in, not from default_dict (!).
+
+Tue May 3 22:25:17 2005 Ben Pfaff <blp@gnu.org>
+
+ Improve hash.c comments, error-checking.
+
+ * hash.c: (struct hsh_table) [NDEBUG] Add hash_ordered member.
+ (hsh_create) size == 0 should *not* return NULL! Set
+ hash_ordered.
+ (hsh_clear) Set hash_ordered.
+ (locate_matching_entry) Check hash_ordered.
+ (hsh_rehash) Rename rehash(). Add assertion. Set hash_ordered.
+ (hsh_data) Set hash_ordered. Add const-ness to return value and
+ update all callers.
+ (hsh_sort) Ditto.
+
+Wed May 4 08:50:11 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * casefile.c: Removed unnecessary #include <valgrind/valgrind.h>
+
+Tue May 3 19:14:48 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * copyleft.c: Updated copyright date.
+
+ * Makefile.am: Removed erroneous explicit "-lplot"
+
+ * examine.q oneway.q: Made these files conform to ISO/IEC 9899:1990
+
+Tue May 3 16:20:31 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * command.c command.def: Added description string for unimplemented commands.
+
+ * oneway.q: Sorted the hash tables before shipping out the results. Closes
+ bug [#12931].
+
+Mon May 2 23:45:01 2005 Ben Pfaff <blp@gnu.org>
+
+ Code improvements.
+
+ * data-list.c: (parse_fixed) Use lex_end_of_command().
+ (parse_free) Ditto.
+ (cmd_repeating_data) Set cont_end.num in right situations.
+ (parse_repeating_data) Remove redundant test.
+
+Mon May 2 23:37:19 2005 Ben Pfaff <blp@gnu.org>
+
+ Partial fix for bug 12859.
+
+ * data-list.c: (cmd_data_list) Add transformation properly in
+ vfm_source == NULL case.
+
+Mon May 2 23:27:28 2005 Ben Pfaff <blp@gnu.org>
+
+ * lexer.c: (lex_error) Improve error messages.
+
+Mon May 2 22:28:17 2005 Ben Pfaff <blp@gnu.org>
+
+ * get.c: (cmd_match_files) Check token type before trying to match
+ tokid. Fixes bug 12923.
+
+Mon May 2 22:16:51 2005 Ben Pfaff <blp@gnu.org>
+
+ * flip.c: [HAVE_SYS_TYPES_H] Include <sys/types.h>. Fixes bug
+ 12789.
+
+Mon May 2 22:02:52 2005 Ben Pfaff <blp@gnu.org>
+
+ * expressions/generate.pl: (get_token) Make use of /g
+ backward-compatible with Perl 5.6.1.
+
+Sun May 1 23:00:19 2005 Ben Pfaff <blp@gnu.org>
+
+ * var-display.c: (cmd_variable_alignment) Fix memory leak.
+ (cmd_variable_level) Ditto.
+
+Sun May 1 22:49:04 2005 Ben Pfaff <blp@gnu.org>
+
+ Hash table had buggy deletion function. The fix required changing
+ other functions to do probing in the required order.
+
+ * hash.c: (locate_matching_entry) Rewrite and change interface.
+ (hsh_rehash) Rewrite to use locate_matching_entry().
+ (hsh_probe) Ditto.
+ (hsh_find) Ditto.
+ (hsh_delete) Ditto. Also, fix stupid bugs.
+
+Sun May 1 22:24:58 2005 Ben Pfaff <blp@gnu.org>
+
+ * dictionary.c: (dict_clone) Properly copy vectors.
+
+Sun May 1 22:07:58 2005 Ben Pfaff <blp@gnu.org>
+
+ New implementation of long variable names. Each variable has a
+ "normal" name, which may be up to 64 bytes long and which is used
+ for all normal operations. Variables may have a "short" name,
+ which is limited to 8 bytes and used only for system and portable
+ file input and output.
+
+ Make tokid case-preserving. Update most uses of tokid to treat it
+ case-insensitively.
+
+ Update many commands to deal with long variable names.
+
+ * autorecode.c: (cmd_autorecode) Use strcasecmp() instead of strcmp().
+
+ * command.c: (cmd_parse) Ditto.
+ (match_strings) Use toupper() before comparing characters.
+ (conflicting_3char_prefixes) Use mm_case_compare() instead of
+ memcmp().
+ (cmd_match_words) Ditto.
+
+ * compute.c: (lvalue_parse) Use st_trim_copy() instead of
+ strncpy().
+
+ * count.c: (struct cnt_var_info) Change n[] to fit long var name.
+ Use st_trim_copy() instead of strcpy().
+
+ * data-in.c: (parse_enum) Use mm_case_compare() instead of
+ memcmp().
+
+ * data-list.c: (struct dls_var_spec) Change name[] to fit long var
+ name.
+ (parse_free) Use st_trim_copy() instead of strcpy().
+
+ * descript.c: (struct dsc_var) Change z_name[] to fit long var
+ name.
+ (try_name) Use strcasecmp() instead of strcmp().
+ (generate_z_varname) Use st_trim_copy() instead of strcpy().
+ (descriptives_compare_dsc_vars) Use strcasecmp() instead of
+ strcmp().
+
+ * dictionary.c: (struct dictionary) Removed `long_name_tab'
+ member.
+ (compare_long_names) Removed.
+ (hash_long_name) Removed.
+ (dict_create) Don't initialize `long_name_tab' member.
+ (dict_clone) Copy short names into new dictionary.
+ (dict_clear) Don't clear `long_name_tab' member.
+ (dict_get_varname_block) Removed.
+ (dict_add_longvar_entry) Removed.
+ (free_nte) Removed.
+ (dict_destroy) Don't destroy `long_name_tab' member.
+ (dict_create_var_from_short) Removed.
+ (dict_create_var_x) Removed.
+ (dict_create_var) Get rid of longname handling.
+ Clear short name.
+ (dict_clone_var) Get rid of longname parameter and longname
+ handling.
+ (dict_lookup_var) Get rid of longname handling.
+ (dict_reorder_var) New function.
+ (dict_rename_var) Clear short name.
+ (dict_rename_vars) Get rid of longname handling. Clear short
+ names.
+ (dict_create_vector) Support long vector names.
+ (dict_lookup_vector) Use strcasecmp() instead of strcmp().
+ (quasi_base27) Removed.
+ (make_short_name) Removed.
+ (compare_strings) New function.
+ (hash_string) New function.
+ (dict_assign_short_names) New function.
+
+ * file-handle.q: (get_handle_with_name) Use strcasecmp() instead
+ of strcmp().
+ (get_handle_for_filename) Support long handle names.
+
+ * file-type.c: (struct col_spec) Make `name' fit long var names.
+ (cmd_file_type) Use strcasecmp() instead of strcmp().
+
+ * flip.c: (make_new_var) Rewrite.
+ (flip_sink_write) Use st_trim_copy() instead of strncpy().
+
+ * format.c: (parse_format_specifier_name) Use mm_case_compare()
+ instead of memcmp().
+
+ * get.c: (cmd_save_internal) Rephrase.
+ (rename_variables) Drop test for identical variable name.
+ (struct mtf_proc) Change `first', `last' to fit long var name.
+
+ * hash.c: (hsh_hash_case_string) New function for case-insensitive
+ string hashing.
+
+ * lexer.c: (restore_token) Use st_trim_copy() instead of
+ strncpy().
+ (lex_get) Don't uppercase string when copying into tokid.
+ (lex_put_back_id) Use st_trim_copy() instead of
+ strncpy().
+
+ * list.q: (determine_layout) Consider length of variable names in
+ choosing vertical layout.
+
+ * matrix-data.c: (cmd_matrix_data) Use strcasecmp() instead of
+ strcmp().
+ (string_to_content_type) Ditto.
+
+ * modify-vars.c: (compare_variables_given_ordering) Ditto.
+ (struct var_renaming) Change `new_name' to fit long var name.
+ (compare_var_renaming_by_new_name) Use strcasecmp() instead of
+ strcmp().
+
+ * pfm-read.c: (read_variables) Disallow system variables in system
+ files.
+ (write_variables) Call dict_assign_short_names() and use
+ short_name[] members.
+
+ * repeat.c: (internal_cmd_do_repeat) Use strcasecmp() instead of
+ strcmp().
+
+ * sfm-read.c: (sfm_open_reader) Rewrite code for long variable
+ map. Reorder variables into same order as long variable map.
+ (read_variables) Set short name.
+
+ * sfm-write.c: (sfm_open_writer) Call dict_assign_short_names().
+ (write_variable) Use st_bare_pad_copy().
+ (write_longvar_table) Rewrite.
+
+ * str.c: (mm_case_compare) New function.
+
+ * sysfile-info.c: (compare_vectors_by_name) Use strcasecmp()
+ instead of strcmp().
+
+ * t-test.q: (tts_custom_groups) Remove redundant test.
+ (tts_custom_pairs) Ditto.
+
+ * var.h: (struct variable) Change `name' to fit long var names.
+ Remove `longname'. Add `short_name' member. Reorder some
+ variables.
+ (struct name_table_entry) Removed.
+ (struct vector) Change `name' to fit long vector names.
+
+ * vars-atr.c: (var_is_valid_name) Allow long var names.
+ (compare_var_names) Use strcasecmp() instead of strcmp().
+ (compare_var_ptr_names) Ditto.
+ (hash_var_name) Use hsh_hash_case_string().
+ (hash_var_ptr_name) Ditto.
+ (var_set_short_name) New function.
+ (var_clear_short_name) New function.
+ (var_set_short_name_suffix) New function.
+
+ * vars-prs.c: (parse_DATA_LIST_vars) Support long names.
+ Use strcasecmp() instead of strcmp().
+ (struct array_var_set) Removed `longname_tab'.
+ (array_var_set_lookup_var_idx) Drop longname_tab support.
+ (array_var_set_destroy) Don't destroy `longname_tab'.
+ (var_set_create_from_array) Don't create `longname_tab'.
+
+ * vector.c: (cmd_vector) Use strcasecmp() instead of strcmp().
+ Support long names.
+
+ * expressions/parse.c: (word_matches) Use mm_case_compare()
+ instead of memcmp().
+ (compare_strings) New function.
+ (lookup_function) Use compare_strings() instead of strcmp().
+
+Sun May 1 22:07:43 2005 Ben Pfaff <blp@gnu.org>
+
+ * algorithm.c: (move_element) New function.
+
+Sun May 1 22:05:35 2005 Ben Pfaff <blp@gnu.org>
+
+ * aggregate.c: (parse_aggregate_functions) Always initialize
+ destvar.
+
+Sun May 1 22:03:47 2005 Ben Pfaff <blp@gnu.org>
+
+ * aggregate.c: (cmd_aggregate) Use dict_clone_var_assert().
+
+ * dictionary.c: (dict_clone) Ditto.
+ (dict_clone_var_assert) New function.
+
+ * get.c: (mtf_merge_dictionary) Use dict_clone_var_assert().
+
+Sun May 1 15:05:54 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * error.c: Added a string for the compiler version to the
+ request_bug_report_and_abort function.
+
+ * groff_font.c, font.c: Removed manpage(1) style references from
+ comments, because RMS frowns upon them.
+
+Thu Apr 28 18:52:06 2005 Ben Pfaff <blp@gnu.org>
+
+ * expressions/parse.c: Improve previous fix for bug 12858 (LAG).
+
+Fri Apr 29 09:28:00 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * expressions/parse.c: Added handler for OP_LAG_Vn and OP_LAG_Vs.
+ Fixed bug [#12858] .
+
+Wed Apr 27 12:42:34 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * loop.c recode.c repeat.c: Fixed a couple of instances of SHORT_NAME_LEN
+ which should be LONG_NAME_LEN
+
+Wed Apr 27 07:43:50 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * command.def echo.c: Added the ECHO command.
+
+Mon Apr 25 22:55:59 2005 Ben Pfaff <blp@gnu.org>
+
+ Finish fixing MATCH FILES (bug 11677).
+
+ * get.c: (trim_dictionary) Rewrite in terms of drop_variables(),
+ keep_variables(), rename_variables().
+ (drop_variables) New function.
+ (keep_variables) New function.
+ (struct mtf_file) Rename `in' to `in_name'. Add `in_var'.
+ (cmd_match_files) Deal with in_var. Use drop_variables(),
+ keep_variables(). When IN is specified, require BY. Set master
+ variables after master dictionary is complete. Add IN variables
+ after master dictionary is complete.
+ (mtf_free_file) Free `in_name'.
+ (mtf_delete_file_in_place) Set in_var value to 0.
+ (mtf_read_nonactive_records) Rephrase.
+ (mtf_processing) Support IN. Rephrase. Fix bugs.
+ (mtf_merge_dictionary) Don't set master variables; we do that
+ later now.
+ (get_master) Don't insist that there's a master variable.
+
+Mon Apr 25 22:55:22 2005 Ben Pfaff <blp@gnu.org>
+
+ Kluge to make some variable renaming sort of work.
+ Needs real fix.
+
+ * dictionary.c: (dict_rename_var) Call dict_add_longvar_entry().
+
+Mon Apr 25 22:52:28 2005 Ben Pfaff <blp@gnu.org>
+
+ Add functions for comparing sets of variables between cases.
+ Use the functions.
+
+ * case.c: (case_compare) New function.
+ (case_compare_2dict) New function.
+
+ * aggregate.c: (struct agr_proc) Remove `prev_break' member. Add
+ `break_case'.
+ (cmd_aggregate) Nullify break_case. Don't call
+ initialize_aggregate_info().
+ (agr_destroy) Destroy break_case.
+ (aggregate_single_case) Rewrite. Use case_compare().
+ (dump_aggregate_info) Copy from break_case into output.
+ (initialize_aggregate_info) Copy break_case from input.
+
+ * get.c: (mtf_compare_BY_values) Use case_compare_2dict().
+
+ * vfm.c: (equal_splits) Use case_compare().
+
+Sat Apr 23 17:01:04 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * dictionary.c vars-prs.c sfm-write.c: Fixed some memory leaks
+
+Sun Apr 17 23:08:15 2005 Ben Pfaff <blp@gnu.org>
+
+ Start work on fixing MATCH FILES.
+
+ * get.c: (enum operation) Remove OP_MATCH.
+ (trim_dictionary) Change return value to bool. Don't support
+ OP_MATCH.
+ (struct mtf_file) Remove `first', `last' members.
+ (struct mtf_proc) Add `first', `last' members. Change mtf_case
+ from `struct ccase *' to `struct ccase'. Remove `by' member.
+ (cmd_match_files) Essentially rewrite.
+ (mtf_free) Don't free `by' member. Destroy `mtf_case' member.
+ (mtf_read_nonactive_records) mtf_ parameter is not unused.
+ (mtf_processing) Ditto. Also rephrase some code.
+ (mtf_merge_dictionary) Rewrite for easy comprehension.
+
+Sun Apr 17 23:06:00 2005 Ben Pfaff <blp@gnu.org>
+
+ * matrix-data.c: (wr_output_data) [DEBUGGING] Fix compilation
+ error.
+
+ * q2c.c: (dump_token) [DEBUGGING] Fix compilation error.
+
+Thu Apr 14 2005 John Darrington
+
+ * var-display.c: New file.
+
+ * format.h var.h sfm-read.c sfm-write.c dictionary.c : Added
+ display_width, measure and alignment parameters to variables.
+
+ * aggregate.c command.def compute.c count.c data-list.c descript.c
+ dictionary.c dictionary.h expr-prs.c file-type.c flip.c get.c
+ lexer.c lexer.h loop.c modify-vars.c pfm-read.c recode.c repeat.c
+ sfm-read.c sfm-write.c sfm-write.h sfmP.h val-labs.c val.h var.h
+ vars-prs.c vector.c :
+ - Replaced literal constants representing maximum variable name
+ length with macro definitions.
+ - Added support for long variable names.
+ - Changed lexer such that it no longer makes tokens upper
+ case, but relies upon case insensitive behaviour of commands.
+
+Mon Apr 4 22:27:34 2005 Ben Pfaff <blp@gnu.org>
+
+ * aggregate.c: (parse_aggregate_functions) If dict_create_var()
+ fails, don't dereference the resulting null pointer (bug 12427).
+ Also, fix double free error.
+
+Sat Mar 19 23:06:02 2005 Ben Pfaff <blp@gnu.org>
+
+ * aggregate.c: (parse_aggregate_functions) Fix N_NO_VARS format.
+ (accumulate_aggregate_info) Set int1 to 1 for SUM.
+ (dump_aggregate_info) Only make SUM non-missing if there was at
+ least one variate.
+
+Sat Mar 19 14:48:19 2005 Ben Pfaff <blp@gnu.org>
+
+ * aggregate.c: (dump_aggregate_info) Properly test whether the
+ destination variable is numeric, when making the result
+ system-missing for columnwise missing values.
+
+Mon Mar 14 21:52:34 2005 Ben Pfaff <blp@gnu.org>
+
+ * misc.h: Remove GCC specializations.
+
+Mon Mar 14 21:07:23 2005 Ben Pfaff <blp@gnu.org>
+
+ Make sort stable (bug 12313).
+
+ * sort.c: Don't need to include some headers anymore.
+ (static var min_buffers) New variable.
+ (static var max_buffers) New variable.
+ (static var allow_internal_sort) New variable.
+ (cmd_sort_cases) Add test mode.
+ (sort_execute) Rephrase.
+ (do_internal_sort) Don't try internal sorting if
+ allow_internal_sort is set.
+ (struct external_sort) Renamed `initial_runs' to `runs' and
+ updated all references.
+ (macro MIN_BUFFER_TOTAL_SIZE_RECS) Removed.
+ (macro MIN_BUFFER_SIZE_BYTES) Removed.
+ (macro MIN_BUFFER_SIZE_RECS) Removed.
+ (compare_initial_runs) Removed.
+ (struct record_run) Add member `idx'.
+ (write_initial_runs) Pass increasing values to process_case() as
+ index.
+ (process_case) Add `idx' parameter and use it to initialize new
+ `idx' member.
+ (allocate_cases) Limit allocated buffers to max_buffers.
+ (compare_record_run) Use new `idx' member for last resort
+ comparison, for stability.
+ (end_run) Call casefile_sleep() on irs->casefile, to prevent
+ running out of file descriptors.
+ (struct merge_state) Removed.
+ (merge) Don't need to allocate cases. Always use MAX_MERGE_ORDER
+ unless we have fewer runs left. Always merge consecutive runs,
+ for stability. Return the final run.
+ (mod) Removed.
+ (choose_merge) New function.
+ (merge_once) Rewritten.
+
+Mon Mar 14 21:05:42 2005 Ben Pfaff <blp@gnu.org>
+
+ * cmdline.c: (static var testing_mode) Move into
+ parse_command_line().
+
+Mon Mar 14 21:05:13 2005 Ben Pfaff <blp@gnu.org>
+
+ * algorithm.c: (remove_range) New function.
+ (remove_element) New function.
+
+ * dictionary.c: (dict_delete_var) Use remove_element().
+
+ * flip.c: (cmd_flip) Ditto.
+
+Sun Mar 13 22:52:05 2005 Ben Pfaff <blp@gnu.org>
+
+ * file-handle.q: (struct file_handle) `open_mode' should not be
+ const.
+
+Sun Mar 13 22:40:54 2005 Ben Pfaff <blp@gnu.org>
+
+ First phase of making SORT CASES stable (bug 12313).
+
+ * sort.c: (struct indexed_case) New structure.
+ (do_internal_sort) Rewrite to make internal sorting stable.
+ (compare_case_dblptrs) Removed.
+ (compare_indexed_cases) New function.
+
+Sun Mar 13 22:38:40 2005 Ben Pfaff <blp@gnu.org>
+
+ Clean-ups.
+
+ * casefile.c: (casereader_read_xfer_assert) New function.
+
+ * dictionary.c: (dict_compact_case) New function.
+
+ * flip.c: (struct flip_pgm) New member idx_to_fv.
+ (cmd_flip) Initialize idx_to_fv member.
+ (destroy_flip_pgm) Free idx_to_fv member.
+ (flip_sink_write) Use struct flip_pgm member instead of case_sink
+ member.
+ (flip_sink_write) Ditto.
+
+ * vfm.c: (write_case) Use dict_compact_case() instead of
+ compact_case().
+ (compact_case) Removed.
+ (storage_source_create) Removed `dict' parameter. All references
+ updated.
+
+ * vfm.h: (struct case_source) Removed `value_cnt' member. All
+ references removed.
+ (struct case_sink) Removed `dict', `idx_to_fv' members. All
+ references removed.
+
+Sun Mar 13 22:35:55 2005 Ben Pfaff <blp@gnu.org>
+
+ More AGGREGATE fixes.
+
+ * aggregate.c: (accumulate_aggregate_info) Implement NMISS and
+ NUMISS for strings. Fix FOUT, POUT, FGT, FLT, FIN, FOUT for
+ strings.
+ (initialize_aggregate_info) Fix initialization for MIN, MAX for
+ strings.
+
+Sat Mar 12 23:26:21 2005 Ben Pfaff <blp@gnu.org>
+
+ Start work on testing and debugging AGGREGATE.
+
+ * aggregate.c: (cmd_aggregate) Use discrete bool variables instead
+ of a bit-map. Require proper subcommand ordering. Make OUTFILE
+ subcommand mandatory.
+ (parse_aggregate_functions) Check that PIN, POUT, FIN, FOUT
+ functions' arguments are in the correct order and swap them if
+ not.
+ (accumulate_aggregate_info) Make SUM include weights. Add various
+ string functions.
+ (dump_aggregate_info) Add various string functions.
+ (initialize_aggregate_info) Initialize int1 for MIN, MAX.
+
+ * sort.c: (sort_parse_criteria) Add parameter for returning
+ whether any directions were specified. All callers updated.
+
+Sun Mar 13 14:54:27 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * t-test.q: Fixed erroneous logic in compare_group_binary.
+
+Sat Mar 12 13:29:21 2005 Ben Pfaff <blp@gnu.org>
+
+ * split-file.c: (cmd_split_file) Ignore LAYERED and SEPARATE
+ keywords (bug 11628).
+
+Sat Mar 12 13:17:12 2005 Ben Pfaff <blp@gnu.org>
+
+ * vfm.c: (procedure_with_splits) Fix bug 11492: end_func() must be
+ called *before* close_active_file().
+
+Sat Mar 12 12:20:57 2005 Ben Pfaff <blp@gnu.org>
+
+ * file-handle.q: (struct file_handle) Change open_mode from
+ character pointer to 3-char array, for safety. Updated all
+ references.
+
+Sat Mar 12 12:15:49 2005 Ben Pfaff <blp@gnu.org>
+
+ Thanks to Ben Kujala <bkujala@oregonchildcare.org> for reporting
+ these bugs.
+
+ * pfm-read.c: (read_header) Improve error message for many cases
+ in which the input is not actually a portable file.
+
+ * file-handle.q: (fh_open) When we give an error message, actually
+ return NULL.
+
+Fri Mar 11 11:50:30 2005 Ben Pfaff <blp@gnu.org>
+
+ * format.c: (check_common_specifier) New function for checks
+ common to check_input_specifier() and check_output_specifier().
+ (check_input_specifier) Use check_common_specifier().
+ (check_output_specifier) Use check_common_specifier().
+ (check_string_specifier) Removed.
+ (check_specifier_type) New function.
+ (check_specifier_width) New function.
+ (get_format_var_width) Fix bug.
+
+ * formats.c: (internal_cmd_formats) Only accept numeric variables.
+
+ * lexer.c: (check_id) Rename lex_id_to_token(), make public,
+ update all references. Make case-insensitive.
+
+ * pfm-read.c: Essentially rewrite the whole file. Now much
+ cleaner.
+
+ * print.c: (check_string_width) New function.
+ (fixed_parse_compatible) Use check_string_width(),
+ check_specifier_type().
+ (dump_fmt_list) Ditto.
+
+ * str.c: (st_trim_copy) New function.
+ (st_uppercase) New function.
+
+ * vars-atr.c: (var_is_valid_name) New function.
+
+ * expressions/parse.c: (type_coercion_core) Use
+ check_specifier_type().
+
+Fri Mar 11 11:31:24 2005 Ben Pfaff <blp@gnu.org>
+
+ * expressions/evaluate.c: (cmd_debug_evaluate) Fix memory leaks.
+
+ * expressions/parse.c: (no_match) Ditto.
+
+Wed Mar 9 09:54:27 2005 Ben Pfaff <blp@gnu.org>
+
+ * Makefile.am: (pspp_LDADD) Add libgsl-extras.a.
+
+ * expressions/helpers.c: (struct func_params) Removed.
+ (generalized_idf) Removed.
+ (cdf_beta) Removed.
+ (idf_beta) Removed.
+ (idf_fdist) Use gslextras_cdf_beta_Pinv() instead of idf_beta().
+
+ * expressions/operations.def: Implement IDF.BETA, CDF.BINOM,
+ CDF.GEOM, CDF.HYPER, CDF.NEGBIN, CDF.POISSON using gsl-extras.
+ Implement SIG.F, which I had overlooked previously.
+
+Tue Mar 8 12:47:53 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * command.c command.def glob.[ch] cmdline.c: Made DEBUG cmds
+ available only in testing mode.
+
+Sun Mar 6 23:25:40 2005 Ben Pfaff <blp@gnu.org>
+
+ * data-in.c: Use `bool' throughout, where relevant.
+
+Sun Mar 6 19:52:22 2005 Ben Pfaff <blp@gnu.org>
+
+ DATA LIST with free-field formats should not have implied decimal
+ places (bug 12035). Also clean up data-in.c a bit.
+
+ * data-in.h: (enum) Add DI_IMPLIED_DECIMALS.
+
+ * data-in.c: (apply_implied_decimals) New function.
+ (parse_numeric) Don't adjust exponent if DI_IMPLIED_DECIMALS not
+ set. Also, get rid of gotos.
+ (parse_Z) Use apply_implied_decimals() if the field doesn't
+ contain a decimal point.
+ (parse_N) Use apply_implied_decimals().
+ (parse_IB) Ditto.
+ (parse_PIB) Ditto.
+ (parse_P) Ditto.
+ (parse_PK) Ditto.
+ (to_roman) Removed.
+ (parse_enum) New function.
+ (macro CHAR_IS_ROMAN) Removed.
+ (macro ROMAN_VALUE) Removed.
+ (parse_month) Use parse_enum().
+ (parse_weekday) Use parse_enum().
+ (parse_DATETIME) Use long for weekday.
+
+ * data-list.c: (read_from_data_list_fixed) Use
+ DI_IMPLIED_DECIMALS.
+
+Sun Mar 6 17:07:20 2005 Ben Pfaff <blp@gnu.org>
+
+ When the lexer sees something like `-5' in the input, it has to
+ decide whether it's a negative numeric constant token or a '-'
+ token followed by a positive numeric constant token. It always
+ decides on the former, and then the parser can call
+ lex_negative_to_dash() if it wants the latter. However, this
+ doesn't work for the case of `-0', because negative zero is
+ (portably) indistinguishable from positive zero. So now we divide
+ T_NUM into two tokens, T_POS_NUM and T_NEG_NUM, to make the
+ distinction clear. This requires a little bit of extra effort,
+ because there were several references to T_NUM in the code base.
+
+ * lexer.c: (lex_get) Use T_NEG_NUM and T_POS_NUM to distinguish
+ positive and negative numeric constants.
+ (lex_double_p) Renamed lex_is_number(). Changed return type to
+ bool. Updated all relevant references to T_NUM to instead use
+ this function.
+ (lex_double) Renamed lex_number(). All references updated.
+ (lex_integer_p) Renamed lex_is_integer(). Changed return type to
+ bool. All references updated.
+ (lex_token_representation) Understand T_NEG_NUM and T_POS_NUM.
+ (lex_negative_to_dash) Ditto.
+ (dump_token) Ditto.
+
+ * lexer.h: (enum) Add T_POS_NUM, T_NEG_NUM. Remove T_NUM.
+
+Sun Mar 6 22:09:20 2005 Ben Pfaff <blp@gnu.org>
+
+ * expressions/operations.def: (NUMBER) Use DI_IMPLIED_DECIMALS.
+
+Sun Mar 6 19:33:24 2005 Ben Pfaff <blp@gnu.org>
+
+ * expressions/operations.def: (VEC_ELEM_NUM) Treat user-missing
+ values as system-missing.
+
+ * expressions/parse.c: (parse_vector_element) Fix order of
+ arguments in call to expr_allocate_binary().
+
+Sun Mar 6 17:51:05 2005 Ben Pfaff <blp@gnu.org>
+
+ * expressions/optimize.c: (optimize_tree) Fix optimization bug for
+ x**2.
+
+ * expressions/parse.c: (type_coercion_core) Set *node to NULL on
+ failure, as indicated by function comment.
+ (parse_binary_operators) Always return NULL on type_coercion()
+ failure. Should have been doing this anyway, but bug in
+ type_coercion_core() filtered through.
+ (parse_add) Fix typo in user message.
+ (parse_primary) Understand T_NEG_NUM and T_POS_NUM.
+
+Sun Mar 6 10:47:13 2005 Ben Pfaff <blp@gnu.org>
+
+ * expressions/operations.def: Add VALUE function.
+
+ * expressions/parse.c: (parse_function) Need an unary composite
+ node for variables in A TO B, not a variable node. Use
+ allocate_unary_variable().
+ (parse_primary) Use allocate_unary_variable().
+ (allocate_unary_variable) New function.
+
+Thu Mar 3 23:53:32 2005 Ben Pfaff <blp@gnu.org>
+
+ * expressions/PSPP_expressions.pm: Renamed it back to generate.pl
+ but fixed the real problem that was preventing the build from a
+ separate directory. I liked it my way better ;-)
+
+Thu Mar 3 23:17:51 2005 Ben Pfaff <blp@gnu.org>
+
+ * expressions/parse.c: (expr_parse) Fix parameter type. Thanks to
+ John Darrington <john@darrington.wattle.id.au> for reporting this
+ bug.
+
+Thu Mar 3 22:10:25 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * expressions/Makefile.am expressions/evaluate.h.pl
+ expressions/evaluate.inc.pl expressions/operations.h.pl
+ expressions/optimize.inc.pl expressions/parse.inc.p:
+
+ Renamed generate.pl to PSPP_expressions.pm and adjusted *.pl
+ to suit.
+
+ Fixed everything so that it can be built from an arbitrary
+ directory.
+
+Thu Mar 3 22:08:35 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * Makefile.am : Fixed up CLEANFILES target.
+
+Mon Feb 28 23:49:56 2005 Ben Pfaff <blp@gnu.org>
+
+ * str.h: Changed `struct len_string' to `struct fixed_string', a
+ more accurate name. Updated all references.
+
+Mon Feb 28 23:35:30 2005 Ben Pfaff <blp@gnu.org>
+
+ Redo calendar support. Should now be bug-for-bug compatible.
+
+ * calendar.c: New file.
+
+ * calendar.h: New file.
+
+ * data-in.c: Use new calendar functions.
+ (parse_sign) Change sense of return value.
+ (calendar_error) New function.
+ (ymd_to_ofs) New function.
+ (ymd_to_date) New function.
+ (parse_DATE) Use new function.
+ (parse_ADATE) Ditto.
+ (parse_EDATE) Ditto.
+ (parse_SDATE) Ditto.
+ (parse_JDATE) Ditto.
+ (parse_QYR) Ditto.
+ (parse_MOYR) Ditto.
+ (parse_WKYR) Ditto.
+ (parse_TIME) Ditto.
+ (parse_DTIME) Ditto.
+ (parse_DATETIME) Ditto.
+
+ * data-out.c: (convert_date) Use new calendar functions.
+
+ * error.c: (err_vmsg) Changed interface to be more sensible.
+ Updated all callers.
+ (dump_message) Don't double new-lines (why did we do this
+ anyway?).
+
+Mon Feb 28 23:30:25 2005 Ben Pfaff <blp@gnu.org>
+
+ * sfmP.h: (macro flt64) Moved here from pref.h.orig.
+ (macro FLT64_MAX) Moved here from pref.h.orig.
+
+Mon Feb 28 23:28:01 2005 Ben Pfaff <blp@gnu.org>
+
+ * set.q: Support SET EPOCH.
+ (static var set_epoch) New var.
+ (aux_stc_custom_epoch) New function.
+ (stc_custom_epoch) New function.
+ (get_epoch) New function.
+ (stc_custom_pager) [USE_INTERNAL_PAGER] Fix bug.
+
+ * format.c: Make it possible just to check whether a specifier is
+ valid without emitting an error message.
+ (parse_format_specifier_name) Change interface, update all
+ callers.
+ (check_input_specifier) Ditto.
+ (check_output_specifier) Ditto.
+ (parse_format_specifier) Ditto.
+
+Mon Feb 28 23:24:08 2005 Ben Pfaff <blp@gnu.org>
+
+ * command.def: Add DEBUG POOL.
+
+ * pool.c: (pool_destroy) Fix bug in deleting this pool from its
+ parent.
+ (pool_clear) Properly account for size of pool gizmo.
+ (pool_realloc) Ditto.
+ (pool_clone) New function.
+
+ * pool.h: Mark our allocation functions MALLOC_LIKE.
+
+Mon Feb 28 23:21:26 2005 Ben Pfaff <blp@gnu.org>
+
+ * Makefile.am: Move many definitions into new top-level
+ Make.build. Add expressions to SUBDIRS. Add calendar.c,
+ calendar.h. Remove expr-evl.c, expr-opt.c expr-prs.c, expr.h,
+ exprP.h, expr.def.
+
+ * case.c: (case_resize) New function.
+ (case_swap) New function.
+
+ * casefile.c: Include mkfile.h.
+
+Fri Feb 25 21:11:35 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * sfm-read.c: Fixed a buglet which caused a crash when trying
+ to read a non-existent file.
+
+Sun Feb 13 16:11:13 2005 Ben Pfaff <blp@gnu.org>
+
+ Fix bug 11955.
+
+ * aggregate.c: (parse_aggregate_functions) Code cleanup.
+ Important part: get rid of spurious copying of function->format to
+ destvar->print and destvar->write.
+
+Fri Feb 11 00:08:36 2005 Ben Pfaff <blp@gnu.org>
+
+ Fix bug 11916, which was confusing a variable's `index' member
+ with the variable's position in a var_set. Although these are
+ usually the same, they are not for array `var_set's.
+
+ Took advantage of this bug as an opportunity to clean up and
+ rewrite parse_var_set_vars().
+
+ * vars-prs.c: (parse_vs_variable_idx) New function.
+ (parse_vs_variable) Reimplement in terms of
+ parse_vs_variable_idx().
+ (parse_var_idx_class) New function.
+ (add_variable) New function.
+ (add_variables) New function.
+ (parse_var_set_vars) Rewritten.
+ (struct var_set) Change `lookup_var' member that returns a
+ variable into `lookup_var_idx' member that returns an int.
+ Updated the var set implementations in obvious corresponding ways.
+ Used compare_var_ptr_names(), hash_var_ptr_name() just added.
+
+Fri Feb 11 00:06:03 2005 Ben Pfaff <blp@gnu.org>
+
+ Use our global variable compare & hash functions and give them
+ better names. Add similar functions for dealing with double
+ pointers to variables.
+
+ * vars-atr.c: (compare_variables) Renamed compare_var_names().
+ (hash_variable) Renamed hash_var_name().
+ (compare_var_ptr_names) New function.
+ (hash_var_ptr_name) New function.
+
+ * t-test.q: (cmd_t_test) Use global compare_var_names(),
+ hash_var_name().
+ (compare_var_name) Removed.
+ (hash_var_name) Removed.
+
+Fri Feb 11 00:04:39 2005 Ben Pfaff <blp@gnu.org>
+
+ Fix dictionary bug.
+
+ * dictionary.c: (compare_variable_dblptrs) Rename
+ compare_var_ptrs() and fix it to properly dereference the double
+ pointers.
+
+Mon Feb 7 09:58:15 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ crosstabs.q examine.q oneway.q q2c.c: Added a q2c feature to
+ declare subcommands as mandatory. Closed bug #11843
+
+Sat Feb 5 20:35:10 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * getline.c command.[ch] command.def: Added (very rudimentary)
+ support for line completion when in interactive mode. Partially
+ addresses bug #11693
+
+Mon Jan 31 09:52:51 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * examine.q factor_stats.c oneway.q output.c pfm-read.c: Fixed some
+ problems revealed by valgrind.
+
+
+Wed Jan 26 11:44:11 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * set.q: Affixed a fix to the previous fix such that we'll be OK now
+ whether or not PAGER is set.
+
+Wed Jan 26 09:25:54 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * set.q: Copied the string produced by getenv("PAGER") thus avoiding
+ "invalid free" errors. Hopefully fixes bug #11722
+
+ * compute.c expr-prs.c: Check that lvalues are populated before
+ attempting to destroy them. Closes bug #11676
+
+Tue Jan 25 21:01:43 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * aggregate.c: Initialised the complete agr_proc structure.
+ Closes bug #11675
+
+
+Sun Jan 23 23:02:21 2005 Ben Pfaff <blp@gnu.org>
+
+ * print.c: (print_trns_free) Close the dfm writer if there is one,
+ fixing a memory leak.
+
+Mon Jan 24 12:24:36 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * glob.c oneway.q q2c.c t-test.q vfm.c: Still *more* memory leaks
+ fixed.
+
+
+Fri Jan 21 19:54:14 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * linked-list.[ch] Added
+
+ * examine.q file-handle.[hq] font.h glob.c groff-font.c postscript.c
+ set.q: Yet more memory leaks
+
+Tue Jan 18 23:12:40 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * t-test.q examine.q : More memory leaks fixed.
+
+Tue Jan 18 19:26:59 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * examine.q factor_stats.[ch] get.c pfm-read.c: Plugged numerous
+ memory leaks.
+
+Mon Jan 10 14:43:45 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * ascii.c cartesian.c casefile.c chart.h devind.c
+ examine.q frequencies.q
+ html.c output.h piechart.c plot-chart.c plot-hist.c
+
+ Integrated the chart rendering into the output stream
+ (currently only works for html).
+
+ Removed gratuitous use of ifndef NO_CHARTS, and replaced with
+ dummy-chart.c for compiling without charts.
+
+ * mkfile.[ch] Created.
+
+ * som.[ch] tab.[ch]: Changed name of som_table to som_entity
+ Added type element so we can tell if it's a chart or a table.
+
+ * chart.h examine.q piechart.c plot-chart.c plot-hist.c: changed the
+ API of charts to be more like that of tables.
+
+Thu Jan 13 21:00:02 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * casefile.c main.c: Moved the SIGINT handler from casefile.c to
+ main.c. Removed the handler for SIGQUIT.
+
+Mon Jan 10 14:43:45 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * casefile.c: Added a signal handler to delete temp files on
+ SIGINT and SIGQUIT
+
+ * permissions.c Inhibited the PERMISSIONS command when SAFER is on.
+
+ * command.def Added a lot more unimplemented commands.
+
+ * copyleft.[ch] cmdline.c Moved legal information to copyleft.c
+
+Sat Jan 8 23:58:34 2005 Ben Pfaff <blp@gnu.org>
+
+ * sort.c: (compare_initial_runs) Needed additional level of
+ dereferencing.
+ (merge_once) Fix plenty of stupid mistakes.
+
+Sat Jan 8 23:55:27 2005 Ben Pfaff <blp@gnu.org>
+
+ * casefile.c: (casefile_sleep) Need to flush_buffer() after
+ calling casefile_to_disk() or we will lose the last block in the
+ file if the casefile started out as disk-based.
+ (casefile_get_reader) Initialize reader->destructive to 0.
+ (cmd_debug_casefile) Add new test pattern.
+ (test_casefile) Define new test pattern to make sure
+ casefile_sleep() works properly.
+
+Fri Jan 7 08:00:05 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * Makefile.am chart.[ch] histogram.[ch] piechart.c (Modified);
+ plot-hist.c plot-chart.c (Added) Reorganised these files in an
+ attempt to seperate the creation and processing of charts from their
+ actuall renedering.
+
+ * examine.q frequencies.q generated charts conditional upon the NO_CHARTS
+ macro.
+
+Thu Jan 6 18:48:58 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * main.c Added a signal handler for SIGFPE
+
+ * sort.c Somewhat more robust fix to the previous entry.
+
+Wed Jan 5 21:23:31 2005 Ben Pfaff <blp@gnu.org>
+
+ * sort.c: (merge) Fix assertion for proper Huffman merge pattern:
+ 0 == 1 modulo 1. See Knuth 5.4.9 (vol. 3, 2nd ed.,
+ pp. 361). Thanks to John Darrington <john@cellform.com.au> for
+ reporting the bug.
+
+Wed Jan 5 22:42:26 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * case.h Fixed bug # 11307
+
+Wed Jan 5 08:30:48 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * val-labs.c Fixed bug which caused a crash if VALUE LABELS had
+ a trailing slash.
+
+Mon Jan 3 17:44:37 2005 Ben Pfaff <blp@gnu.org>
+
+ * pfm-read.c: (read_variables) Remove direct manipulation of
+ v->aux, which is no longer needed. Fixes bug 11483.
+
+Sat Jan 1 19:01:16 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+ * data-list.c Fixed a bug in parsing delimiters.
+
+ * group.c vars-atr.c Fixed buglet in hash/compare functions for alpha
+ values.
+
+ * percentiles.c Properly handled calculation of Tukey hinges where
+ the number of data is small.
+
+ * oneway.q Used the generic value_to_string function for independent
+ variable instead of trying to do it ourselves.
+
+ * box-whisker.c Fixed a buglet which caused a crash if the number of
+ data was zero
+
+
+Fri Dec 31 16:47:45 WST 2004 John Darrington <john@darrington.wattle.id.au>
+
+ * examine.q box-whisker.c chart.h Implemented boxplots in EXAMINE
+
+ * percentiles.c Fixed some bugs when calculating percentiles when
+ there's a small number of cases.
+
+Wed Dec 29 08:18:08 WST 2004 John Darrington <john@darrington.wattle.id.au>
+
+ * percentiles.[ch] Added. Calculates percentiles and Tukey hinges
+
+ * examine.q factor_stats.[ch] Added calculation of percentiles
+
+Fri Dec 24 15:09:11 WST 2004 John Darrington <john@darrington.wattle.id.au>
+
+ * t-test.q Fixed bug #11227 Made t-test work when the independent
+ variable is alpha
+
+Sat Dec 11 11:43:45 WST 2004 John Darrington <john@darrington.wattle.id.au>
+
+ * factor_stats.c Fixed calculation of trimmed mean under various
+ special conditions.
+
+Sat Dec 4 17:14:45 WST 2004 John Darrington <john@darrington.wattle.id.au>
+
+ * histogram.c chart.[ch] factor_stats.c frequencies.q
+
+ Added code to calculate sensible histogram ranges and limits.
+
+Thu Dec 2 13:37:43 WST 2004 John Darrington <john@darrington.wattle.id.au>
+
+ * chart.h Updated to reflect many API changes.
+
+ * cartesian.c chart.c Moved the definitions of chart_write_{xy}scale from
+ cartesian.c and into chart.c
+
+ * factorstats.[ch] Added the histogram calculations
+
+ * casefile.c Removed an unused variable.
+
+ * frequencies.q examine.q histogram.c Reworked the API for
+ histograms.
+
+ * piechart.c Revised the API for piecharts.
+
+ * var.h Moved the definitions of freq_tab and freq out of var.h
+ and into frequencies.q where they belong.
+
+Tue Nov 30 21:10:20 2004 Ben Pfaff <blp@gnu.org>
+
+ * flip.c: (flip_file) Check for off_t separately from fseeko(),
+ using AC_TYPE_OFF_T.
+
+Tue Nov 30 08:47:41 2004 Ben Pfaff <blp@gnu.org>
+
+ * flip.c: (flip_file) If fseeko() is not available, use long int
+ for off_t. Thanks to "Marshall DeBerry" <mdb@radix.net> for
+ reporting the problem.
+
+Mon Nov 29 12:20:59 WST 2004 John Darrington <john@darrington.wattle.id.au>
+
+ * examine.q factor_stats.[ch] Changed stderr to se_mean to avoid
+ conflict with stdio.
+
+Sun Nov 21 10:32:41 WST 2004 John Darrington <john@darrington.wattle.id.au>
+
+ * var-labs.c (var_to_string) Now returns null if the variable is null
+
+ * value-labels.c (value_to_string) Made it return null if either the
+ value or the variable is null.
+
+ * hash.c (hsh_clear) Fixed a buglet.
+
+ * examine.q factor_stats.[ch] Largely rewrote, because I'd started
+ with the wrong model.
+
+ * casefile.[ch] Added a function to return the casereader.case_idx
+ member
+
+ * examine.q Implemented the extreme values results.
+
+John Darrington <john@darrington.wattle.id.au>
+
+ * settings.h set.c glob.[ch] frequencies.q q2c.c error.c lexer.[ch]
+ output.[ch] getline.c
+
+ Plugged some memory leaks
+
+Mon Nov 15 23:47:40 2004 Ben Pfaff <blp@gnu.org>
+
+ Adopt GSL random number generators, paving the way for providing
+ the complete suite of random number generators on expressions.
+
+ * Makefile.am: Remove random.c, random.h.
+
+ * random.c: Removed.
+
+ * random.h: Removed.
+
+ * algorithm.c: (algo_default_random) Use GSL functions.
+
+ * casefile.c: (test_casefile) Use GSL RNG functions.
+
+ * expr-evl.c: (expr_evaluate) Use GSL RNG functions for OP_NORMAL,
+ OP_UNIFORM.
+
+ * sample.c: (cmd_sample) Use GSL RNG functions.
+ (sample_trns_proc) Ditto.
+
+ * set.q: (static var set_seed) Removed.
+ (static var seed_flag) Removed.
+ (static var rng) New variable.
+ (aux_stc_custom_seed) No seed value anymore, don't print anything.
+ (stc_custom_seed) Use new seed functions.
+ (seed_is_set) Removed.
+ (get_rng) New function that composes the entire external
+ interface.
+ (set_rng) New function.
+ (random_seed) New function.
+
Mon Nov 15 22:08:25 2004 Ben Pfaff <blp@gnu.org>
* expr-evl.c: (expr_evaluate) Fix XDATE.JDAY formula. Thanks to