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