Estimate parameters. Moved some code to re-usable functions.
[pspp-builds.git] / src / ChangeLog
index b50b37e50f6bf4b3d10cd2d50c593279036ca4c4..bba2afaa6411b24035633c02927e78334774b54f 100644 (file)
+2007-11-03 John Darrington <john@darrington.wattle.id.au>
+
+       * gnumeric-reader.c gnumeric-reader.h: New files.
+
+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@darrington.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
@@ -25,11 +1791,11 @@ Sat Jul 30 22:34:18 2005  Ben Pfaff  <blp@gnu.org>
 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'.
+       -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>