X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2FChangeLog;h=544f91a436535eadc86f13a7a4ff677c235e2091;hb=46cc6dd316280579f5b03dfd39d01bc7daf88df7;hp=8450557f341a59ae059f2b230de3bc79c3e8f119;hpb=2ad415080cf54a0edde466fc954b7e207779b95e;p=pspp-builds.git diff --git a/src/ChangeLog b/src/ChangeLog index 8450557f..544f91a4 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,1993 @@ +Fri Dec 31 16:47:45 WST 2004 John Darrington + + * examine.q box-whisker.c chart.h Implemented boxplots in EXAMINE + + * percentiles.c Fixed some bugs when calculating percentiles when + there's a small number of cases. + +Wed Dec 29 08:18:08 WST 2004 John Darrington + + * percentiles.[ch] Added. Calculates percentiles and Tukey hinges + + * examine.q factor_stats.[ch] Added calculation of percentiles + +Fri Dec 24 15:09:11 WST 2004 John Darrington + + * t-test.q Fixed bug #11227 Made t-test work when the independent + variable is alpha + +Sat Dec 11 11:43:45 WST 2004 John Darrington + + * factor_stats.c Fixed calculation of trimmed mean under various + special conditions. + +Sat Dec 4 17:14:45 WST 2004 John Darrington + + * histogram.c chart.[ch] factor_stats.c frequencies.q + + Added code to calculate sensible histogram ranges and limits. + +Thu Dec 2 13:37:43 WST 2004 John Darrington + + * chart.h Updated to reflect many API changes. + + * cartesian.c chart.c Moved the definitions of chart_write_{xy}scale from + cartesian.c and into chart.c + + * factorstats.[ch] Added the histogram calculations + + * casefile.c Removed an unused variable. + + * frequencies.q examine.q histogram.c Reworked the API for + histograms. + + * piechart.c Revised the API for piecharts. + + * var.h Moved the definitions of freq_tab and freq out of var.h + and into frequencies.q where they belong. + +Tue Nov 30 21:10:20 2004 Ben Pfaff + + * flip.c: (flip_file) Check for off_t separately from fseeko(), + using AC_TYPE_OFF_T. + +Tue Nov 30 08:47:41 2004 Ben Pfaff + + * flip.c: (flip_file) If fseeko() is not available, use long int + for off_t. Thanks to "Marshall DeBerry" for + reporting the problem. + +Mon Nov 29 12:20:59 WST 2004 John Darrington + + * examine.q factor_stats.[ch] Changed stderr to se_mean to avoid + conflict with stdio. + +Sun Nov 21 10:32:41 WST 2004 John Darrington + + * var-labs.c (var_to_string) Now returns null if the variable is null + + * value-labels.c (value_to_string) Made it return null if either the + value or the variable is null. + + * hash.c (hsh_clear) Fixed a buglet. + + * examine.q factor_stats.[ch] Largely rewrote, because I'd started + with the wrong model. + + * casefile.[ch] Added a function to return the casereader.case_idx + member + + * examine.q Implemented the extreme values results. + +John Darrington + + * settings.h set.c glob.[ch] frequencies.q q2c.c error.c lexer.[ch] + output.[ch] getline.c + + Plugged some memory leaks + +Mon Nov 15 23:47:40 2004 Ben Pfaff + + Adopt GSL random number generators, paving the way for providing + the complete suite of random number generators on expressions. + + * Makefile.am: Remove random.c, random.h. + + * random.c: Removed. + + * random.h: Removed. + + * algorithm.c: (algo_default_random) Use GSL functions. + + * casefile.c: (test_casefile) Use GSL RNG functions. + + * expr-evl.c: (expr_evaluate) Use GSL RNG functions for OP_NORMAL, + OP_UNIFORM. + + * sample.c: (cmd_sample) Use GSL RNG functions. + (sample_trns_proc) Ditto. + + * set.q: (static var set_seed) Removed. + (static var seed_flag) Removed. + (static var rng) New variable. + (aux_stc_custom_seed) No seed value anymore, don't print anything. + (stc_custom_seed) Use new seed functions. + (seed_is_set) Removed. + (get_rng) New function that composes the entire external + interface. + (set_rng) New function. + (random_seed) New function. + +Mon Nov 15 22:08:25 2004 Ben Pfaff + + * expr-evl.c: (expr_evaluate) Fix XDATE.JDAY formula. Thanks to + John Darrington for reporting this + bug. + +Tue Nov 16 13:19:18 WST 2004 John Darrington + + * permissions.c command.def Added the PERMISSIONS command + +>>>>>>> 1.110 +Mon Nov 15 01:33:32 2004 Ben Pfaff + + * q2c.c: (dump_header) Don't try to emit #includes at very top of + output file because that will precede #include , which + is bad. + (main) Add needed headers to /* (header) */ code. + +Mon Nov 15 01:21:36 2004 Ben Pfaff + + Instead of making system or portable file readers responsible for + dropping and reordering variables, make them read full cases and + let the caller take care of any changes. + + * get.c: New "case map" structure to handle this. Use for GET, + IMPORT, MATCH FILES. Essentially rewrite the whole file. + + * pfm-read.c: (pfm_read_case) Read into provided case. Signature + changed appropriately. + + * sfm-read.c: (sfm_read_case) Ditto. + +Mon Nov 15 00:47:45 2004 Ben Pfaff + + Decided that case_serialize() and case_unserialize() were too + abstract. Also we need a couple more functions to avoid excessive + copying for data in/out fast paths. + + * case.c: (case_serial_size) Removed. + (case_serialize) Rename case_to_values() and make its argument + explicitly an array of union values. + (case_unserialize) Rename case_from_values() and make its argument + explicitly an array of union values. + (case_data_all) New function. + (case_data_all_rw) New function. + + * casefile.c: (struct casefile) Change buffer from array of + unsigned char to array of union value for better accuracy. + Redefine buffer_used and buffer_size in terms of values, not + bytes. Remove case_size because it is now redundant with + value_cnt. Fix up all references to these members. + +Mon Nov 15 00:45:46 2004 Ben Pfaff + + * barchart.c: (struct subcat) Make `label' member const to silence + GCC warning with -Wwrite-strings. + + * cartesian.c: (struct dataset) Ditto. + + * case.c: Don't re-define NDEBUG if already defined. + Add lots of comments. + + * str.c: Fix includes. + + * crosstabs.q: Fix includes. + + * examine.q: Fix includes. Fix GCC warning about unused + variables. + + * frequencies.q: (stat macro) Removed and replaced where used by + its expansion. + + * list.q: Fix includes. + + * oneway.q: Fix includes. + + * piechart.c: Fix includes. Only define M_PI if not already + defined. + + * sfm-read.c: (bswap) New function. + (bswap_int32) Write in terms of bswap. + (bswap_flt64) Ditto. + + * str.c: (ds_data) Add external definition here, needed because + str.h has only an `extern inline' version. + + * value-labels.c: Fix includes. + +Mon Nov 15 00:40:55 2004 Ben Pfaff + + Instead of providing a system or portable file writer with a raw + case in the format needed for output, provide it with a regular + case. The writer takes care of any needed translation. + + * aggregate.c: Adopt new scheme for AGGREGATE. + (struct agr_proc) sfm_agr_case member removed. + (write_case_to_sfm) Removed because the new interface is easier to + use. + + * get.c: Adopt new scheme for SAVE, XSAVE, EXPORT. + + * pfm-write.c: Implement new scheme. + + * sfm-write.c: Ditto. + +Mon Nov 15 00:32:24 2004 Ben Pfaff + + Instead of treating `struct file_handle' as a class to subclass + into data files, system files, and portable files, instead use it + as a helper that coordinates access. Now it is opaque, too. + + This means that most references to a struct file_handle are now + changed into references to one of struct dfm_reader, struct + dfm_writer, struct sfm_reader, struct sfm_writer, struct + pfm_reader, or struct pfm_writer, according to what's being read + or written. + + Most related changes are only worth summarizing briefly. + + * dictionary.c: (dict_clear) Destroy aux data in deleted + variables. + (dict_clear_aux) New function. + (dict_create_var) Initialize aux, aux_dtor. + (dict_delete_var) Destroy aux data in deleted variable. + + * file-handle.h: (struct fh_ext_class) Removed. + (struct file_handle) Removed. + (fh_init_files) Removed. + + * file-handle.q: Changed references to a handle's `private' member + to direct references. + (struct private_file_handle) Renamed file_handle. + Add next, open_cnt, type, open_mode, aux members. + (struct file_handle_list) Removed. + (extern var inline_file) Removed. + (static var file_handles) Changed from file_handle_list * to + file_handle *. + (create_file_handle) Initialize new members. + (fh_close_handle) Removed. + (mode_name) New function. + (fh_open) New function. + (fh_close) New function. + (fh_parse_file_handle) Renamed fh_parse(). + + * glob.c: (init_glob) Remove fh_init_files() call. + + * aggregate.c: use sfm_writer. + (create_sysfile) Removed because the new interface is simpler. + + * apply-dict.c: Use sfm_reader. + + * data-list.c: Use dfm_reader. + + * file-type.c: Use dfm_reader. + + * get.c: Use sfm_reader, sfm_writer, pfm_reader, pfm_writer. + + * inpt-pgm.c: Use dfm_reader. + + * print.c: Use dfm_writer. + + * sysfile-info: Use sfm_reader. + + * dfm-read.c: Adopt new file handle infrastructure. + + * dfm-write.c: Ditto. + + * pfm-read.c: Ditto. + + * pfm-write.c: Ditto. + + * sfm-read.c: Ditto. + + * sfm-write.c: Ditto. + +Mon Nov 15 00:31:44 2004 Ben Pfaff + + Break dictionary functions into separate header file. + + * dictionary.h: New file. + + * var.h: Moved dict_*() functions to dictionary.h. + +Mon Nov 15 00:30:33 2004 Ben Pfaff + + Get rid of procedure-specific union in struct variable, using + instead a void * pointer and a destructor function. + + Most related changes are only worth brief summaries. + + * crosstabs.q: Fix includes. Use new struct var_range in lieu of + old p.crs member in struct variable. + + * frequencies.q: Fix includes. Use new struct var_freqs in lieu + of old p.frq member in struct variable. + + * histogram.c: (draw_histogram) Takes new freq_tab arg because + it's no longer possible to grab this from var->p.frq. + + * piechart.c: (draw_piechart) Ditto. + + * group.c: (group_proc_get) New function. + + * levene.c: Use group_proc_get() in lieu of old p.grp_data member + in struct variable. + + * oneway.q: Ditto. + + * t-test.q: Ditto. + + * main.c: (execute_command) Clear aux data in default_dict after + each command. (It's debatable whether this should be done.) + + * matrix-data.c: Use new struct mxd_var in lieu of old p.mxd + member in struct variable. + + * means.q: Get rid of integer mode, which is not included in + recent SPSS and was the only code that wanted per-variable private + data. + + * var.h: (struct crosstab_proc) Removed. + (struct frequencies_proc) Removed. + (struct list_proc) Removed. + (struct get_proc) Removed. + (struct means_proc) Removed. + (struct matrix_data_proc) Removed. + (struct match_files_proc) Removed. + (lots of enums) Removed. + (struct variable) Removed members `p', `get'. Add member + `aux_dtor'. + + * vars-atr.c: (var_attach_aux) New function. + (var_detach_aux) New function. + (var_clear_aux) New function. + (var_dtor_free) New function. + (discard_variables) Use NULL instead of inline_file. + +>>>>>>> 1.106 +Fri Nov 12 10:07:11 WST 2004 John Darrington + + * value-labs.c Fixed the implmentation of value_to_string, so + that it properly handles alpha values. + + * oneway.q Changed instances where labels were being probed manually, + to use the canonical {var,value}_to_string functions + +Thu Nov 11 21:01:31 WST 2004 John Darrington + + * examine.q cartesian.c chart.[ch] Added normal and detrended normal + plots. Changed the API of the cartesian plot to be a much lower level + thing. + +Sun Nov 7 17:25:04 WST 2004 John Darrington + + * examine.q Added some of the parametric calculations + + * factor_stats.[ch] Created + +Sat Nov 6 21:24:31 WST 2004 John Darrington + + * examine.q Changed the definition of factors to be a composite, and + dealt with the consequences. + +Sat Nov 6 20:40:38 WST 2004 John Darrington + + * examine.q Fixed problem where examine wasn't dealing properly with + splits + +Sat Nov 6 14:49:47 WST 2004 John Darrington + + * oneway.q Fixed problem where oneway wasn't dealing properly with + splits + +Thu Nov 4 11:09:01 WST 2004 John Darrington + + * q2c.c examine.q Fixed a bug (feature?) whereby arrays in the + command which had settings didn't get the appropriate code + generated. + + * val.h value-labels.[ch] var-labs.c Added v*to_string functions + to convert variables/values to strings. + + * examine.q Added framework for the EXAMINE command. + +Mon Nov 1 12:46:17 WST 2004 John Darrington + + * q2c.c frequencies.q set.q t-test.q Fixed the q2c parsing of DBL + subcommand types. Changed frequencies.q to use it rather then the + custom parser. Dealt with the consequences. Added a test for NTILES + subcommand of frequencies. + +Sat Oct 30 09:16:29 WST 2004 John Darrington + + * oneway.q Fixed up the behaviour when given missing values + + * levene.c oneway.q Fixed a buglet with the levene statistic and + incorporated the levene test into the oneway command. + + * group.h t-test.q Moved the CMP_EQ and CMP_LE symbols out of + global scope, since they're only relevant to T-TEST + +Fri Oct 29 17:39:03 WST 2004 John Darrington + + * group.c group.h group_proc.h levene.c oneway.q t-test.q + + Made the t-test more consistent + with the way it handles groups. That is, it now uses a hash instead + of an array of 2. Also, made the levene.c file independent of the + implementation of the t-test. So now levene should be fine for both + t-test and anova. + + * Added an oneway.q file for one way anova + +Wed Jun 2 22:08:02 2004 Ben Pfaff + + * descript.c: (cmd_descriptives) Remove harmless but bogus test in + STATISTICS parsing. + +Mon May 31 20:45:24 2004 Ben Pfaff + + Fix memory leaks. + + * data-list.c: (cmd_data_list) Free dls->delims on lossage. + (data_list_trns_free) Free dls->delims. + + * t-test.q: (tts_custom_pairs) Free vars. + (ssbox_one_sample_init) Fix tab_vline() argument. + (ssbox_independent_samples_init) Ditto. + (trbox_paired_init) Ditto. + (trbox_one_sample_init) Ditto. + +Mon May 31 17:19:27 2004 Ben Pfaff + + Generalize casefiles to the extent that we can use them for + sorting and other kinds of data transformations. Change cases to + be copy-on-write to improve memory efficiency in common cases. + Every access to a member of a `struct ccase' was changed to be a + call to a case_*() function, especially case_data(), case_num(), + case_str(), or case_data_rw(). Many instances of a local variable + named "case_num" were changed to "case_idx" as a consequence. + Many `struct ccase *' were changed to actual `struct ccase' + because of copying semantics of cases. In several places there + was a choice between updating debug code to work with the new ADTs + or just deleting it because it was useless; I chose to delete it. + + * Makefile.am: (pspp_SOURCES) Add case.c, case.h. + + * case.c: New file. + + * case.h: New file. + + * aggregate.c: (struct agr_proc) Change type of `sort' to + sort_criteria *. Add `break_vars', `break_var_cnt' members. + Rename `vars' to `agr_vars', all references updated. Change + `agr_case' to type `struct ccase'. + (cmd_aggregate) Deal with new members. Use case_create(), + sort_active_file_in_place(), sort_active_file_to_casefile(). + (agr_destroy) Deal with new members. + (aggregate_single_case) Ditto. + (dump_aggregate_info) Ditto. + (initialize_aggregate_info) Ditto. + (agr_to_active_file) Ditto. + (presorted_agr_to_sysfile) Ditto. + (sort_agr_to_sysfile) Removed. + + * alloc.c: (out_of_memory) Make non-static. + + * alloc.h: Prototype out_of_memory(). + + * casefile.c: Switched from a linked list in-memory representation + to a two-level array-style representation. The linked list was + appropriate when we could stick a header onto cases, but that's no + longer the case. Also, the two-level array will allow for random + in-memory access in case that's ever wanted. Also added the + concept of a `destructive casereader', one that destroys cases in + the underlying casefile as they are read out. + (macro CASES_PER_BLOCK) New macro. + (struct casefile) New members `value_cnt', `case_list_size', + `case_acct_size', `being_destroyed', `cases'. Removed `head', + `tail'. + (struct casereader) Removed `cur'. Added `destructive', `c'. + (global var casefiles) Made static. + (static var case_bytes) New var. + (casefile_create) Takes a value count, not a case size in bytes, + to conform to the case interface. All callers updated. Deal with + new and removed members. + (casefile_destroy) Deal with new and removed members. + (casefile_sleep) New function. + (casefile_get_case_size) Removed. + (casefile_get_value_cnt) New function. + (casefile_append) Rewritten to deal with new and removed members. + (casefile_append_xfer) New function. + (write_case_to_disk) Use case_serialize(). + (call_posix_fadvise) Removed because posix_fadvise64 segfaults. + Couldn't figure out why. + (casefile_to_disk) Don't call call_posix_fadvise. Rewritten to + deal with new and removed members. + (merge) Removed. + (merge_sort) Removed. + (casefile_sort) Removed. + (casefile_get_reader) Deal with new and removed members. + (casefile_get_destructive_reader) New function. + (reader_open_file) Make code more readable. Create case for + reader. + (casereader_get_casefile) New function. + (casereader_read) Deal with new and removed members. Now returns + a copy of the case, so that the caller is responsible for + destroying the returned case. + (casereader_read_xfer) New function. + (casereader_destroy) Destroy reader's case. + (test_casefile) Second arg is now a value count, all callers + updated. Now tests destructive readers too. + (get_random_case) Deal with new case ADT. + (write_random_case) Ditto. + (read_and_verify_random_case) Ditto. + + * crosstabs.q: Remove debug code. + + * descript.q: (calc_descriptives) Deal with new case, casefile + ADTs. + + * dfm.c: (cmd_begin_data) There's no storage_source_class anymore. + + * do-if.c: Remove unneeded header inclusion. + + * expr-prs.c: Remove debug code. + + * exprP.h: Remove debug code. + + * flip.c: (flip_file) Use fseeko() if available. + + * formats.c: Remove debug code. + + * get.c: Remove debug code. + (struct mtf_file) Change `input' from `union value *' to `struct + ccase', all references updated. + + * levene.c: (levene) Deal with new case, casefile ADTs. + + * list.q: Remove debug code. + + * loop.c: Remove debug code. + + * matrix-data.c: Remove debug code. + + * means.q: Remove debug code. + + * mis-val.c: Remove debug code. + + * pfm-read.c: Remove debug code. + (pfm_read_code) Change second arg from `union value *' to `struct + ccase *', all references updated. + + * recode.c: (string_to_long) Make first arg const. + (convert_to_double) Ditto. + + * repeat.c: Remove debug code. + + * sample.c: Remove debug code. + + * sfm-read.c: Remove debug code. + (sfm_read_case) Change second arg from `union value *' to `struct + ccase *'. + + * sort.c: Redone in terms of casefiles. + (enum sort_direction) Moved here from sort.h. + (struct sort_criterion) New structure. + (struct sort_criteria) New structure. + (cmd_sort_cases) Rewritten. + (prepare_to_sort_active_file) New function. + (sort_active_file_in_place) New function. + (sort_active_file_to_casefile) New function. + (parse_sort) Renamed sort_parse_criteria(), rewritten & interface + changed, all callers updated. + (destroy_sort_cases_pgm) Renamed sort_destroy_criteria(), + rewritten & interface changed, all callers updated. + (sort_cases) Renamed sort_execute(), rewritten & interface + changed, all callers updated. + (struct internal_sort) Removed. + (do_internal_sort) Rewritten, interface changed. + (destroy_internal_sort) Removed. + (compare_case_dblptrs) Use sort_criteria instead of sort_case_pgm. + (struct initial_run) Removed; an initial run is now just a + casefile. + (compare_initial_runs) Rewritten. + (struct external_sort) Changed almost completely. + (do_external_sort) Rewritten, interface changed. + (destroy_external_sort) Rewritten. + [HAVE_MKDTEMP] (make_temp_dir) Removed. + [!HAVE_MKDTEMP] (do_mkdir) Removed. + [!HAVE_MKDTEMP] (make_temp_dir) Removed. + (init_external_sort) Removed. + (simulate_error) Removed. + (rmdir_temp_dir) Removed. + (get_temp_file_name) Removed. + (open_temp_file) Removed. + (close_temp_file) Removed. + (remove_temp_file) Removed. + (write_temp_file) Removed. + (read_temp_file) Removed. + (struct record_run) Change `record' from `struct case_lit *' to + `struct ccase'. + (struct initial_run_state) Remove `idx_to_fv', `free_list', + `file_idx', `output_file'. Add `run', casefile'. Change + `last_output' from `struct case_list *' to `struct ccase'. + (write_initial_runs) Change interface, rewrite. + (sort_sink_write) Renamed process_case(), changed interfaced, + rewrote. + (destroy_initial_run_state) Rewritten. + (allocate_cases) Rewritten. + (compare_record) Interface changed, rewritten. + (start_run) Rewritten. + (end_run) Rewritten. + (output_record) Rewritten. + (grab_case) Removed. + (release_case) Removed. + (struct merge_case) Change `cases' from double pointer to single + pointer. + (merge) Deal with new case and casefile ADTs. + (struct run) Removed. + (merge_once) Rewritten, interface changed. + (fill_run_buffer) Removed. + (sort_sink_make_source) Removed. + (sort_sink_class) Removed. + (struct sort_source_aux) Removed. + (sort_source_read_helper) Removed. + (sort_source_read) Removed. + (read_sort_output) Removed. + (read_internal_sort_output) Removed. + (read_external_sort_output) Removed. + (sort_source_destroy) Removed. + (sort_source_class) Removed. + + * sort.h: (struct sort_cases_pgm) Removed. + (enum sort_direction) Moved to sort.c. + + * t-test.q: (calculate) Deal with new case, casefile ADTs. + + * tab.c: Remove debug code. + + * var-labs.c: Remove debug code. + + * var.h: (struct ccase) Removed. + (struct case_list) Removed. + + * vars-atr.c: (discard_variables) Use free_case_source(). + + * vars-prs.c: (parse_vs_variable) Make arg const. + (parse_dict_variable) Ditto. + (parse_variables) Make struct dictionary * arg const. + (parse_var_set_vars) Make struct var_set * arg const. + (struct var_set) Add const to some of the function pointers' args. + (var_set_get_cnt) Make arg const. + (var_set_get_var) Make first arg const. + (var_set_lookup_var) Make first arg const. + (dict_var_set_get_cnt) Make arg const. + (dict_var_set_get_var) Make first arg const. + (dict_var_set_lookup_var) Make first arg const. + (var_set_create_from_dict) Make arg const. Add cast to aux + assignment. + (struct array_var_set) Add const to var member. + (array_var_set_get_cnt) Make arg const. + (array_var_set_get_var) Make first arg const. + (array_var_set_lookup_var) Make first arg const. + (var_set_create_from_array) Make first arg const. Insert cast. + + * vfm.c: (struct write_case_data) Change trns_case, sink_case + members from `struct ccase *' to `struct ccase'. + (static var lag_queue) Change from double to single pointer. + (procedure) Optimize trivial case. + (internal_procedure) Deal with changed case, case_source ADTs. + (create_trns_case) Changed interface, rewrote. + (open_active_interface) Initialize modified lag queue. + (write_case) Deal with changed case ADT. + (lag_case) Deal with modified lag queue. + (close_active_file) Destroy modified lag queue. + Deal with changed case_source, case_sink ADTs. + (destroy_storage_stream_info) Make null arg into no-op. + (storage_sink_make_source) Set aux in created source. + (storage_source_read) Deal with changed case, casefile ADTs. + (storage_source_create) New function. + (lagged_case) Rewrite. + (free_case_source) New function. + (free_case_sink) Rewrite. + (struct split_aux_data) Changed prev_case from `struct ccase *' to + `struct ccase'. + (procedure_with_splits) Deal with changed prev_case. + (procedure_with_splits_callback) Ditto. + (multipass_split_aux_data) Changed prev_case from `struct ccase *' to + `struct ccase'. + (multipass_procedure_with_splits) Deal with changed prev_case. + (multipass_split_callback) Ditto. + + +Mon May 31 17:19:06 2004 Ben Pfaff + + The workspace idea didn't work out. + + * Makefile.am: (pspp_SOURCES) Remove workspace.c, workspace.h. + + * workspace.c: Removed. + + * workspace.h: Removed. + +Sun May 30 18:35:19 2004 Ben Pfaff + + Fully implement arbitrary delimiters on DATA LIST, extending the + half implementation that was already there. + + * data-list.c: (struct data_list_pgm) Remove `delim', add + `delims', `delim_cnt'. + (cmd_data_list) Initialize new members. Parse delimiters and + clean up code a bit. + (cut_field) Extract fields with arbitrary delimiters. Also, fix + handling of leading commas. + (read_from_data_list_fixed) Expand tabs. Adapt to new DFM + interfaces. + (read_from_data_list_free) Adapt to new DFM interfaces. + (read_from_data_list_list) Ditto. + (repeating_data_trns_proc) Ditto. + + * dfm.c: Split up reader and writer into separate code, because + they do different things. Use struct string instead of explicit + allocation code, for clarity. + (enum dfm_reader_flags) New enum. + (struct dfm_fhuser_ext) Removed. + (struct dfm_reader_ext) New. + (get_reader) New function, used by just about all the reader + functions. + (dfm_close) Removed. + (close_reader) New function. + (dfm_open_for_reading) Rewrite initialization of dfm_fhuser_ext. + (dfm_open_for_writing) Ditto. + (macro force_line_buffer_expansion) Removed. + (count_tabs) Removed. + (tabs_to_spaces) Removed. + (read_record) Deal with new dfm_reader_ext. Use struct string + functions. Don't convert tabs to spaces. + (dfm_eof) New function. + (dfm_get_record) Changed interface, rewrote. + (dfm_expand_tabs) New function. + (dfm_fwd_record) Renamed dfm_forward_record(), updated to new + dfm_reader_ext, rewritten. + (dfm_bkwd_record) Renamed dfm_reread_record(), updated to new + dfm_reader_ext, rewritten. + (dfm_set_record) Removed in favor of dfm_forward_columns(). + (dfm_forward_columns) New function. + (dfm_get_cur_col) Renamed dfm_column_start, updated to new + dfm_reader_ext, rewritten. + (static var dfm_r_class) Use close_reader for the destructor. + (struct dfm_writer_ext) New. + (dfm_put_record) Updated to new dfm_writer_ext, rewritten. Uses + bounce buffer now instead of local allocation. + (close_writer) New function. + (static var dfm_writer_ext) Use close_writer for destructor. + (cmd_begin_data) Adapt to new dfm_reader_ext. + + * file-handle.q: Add support for per-file tab width. + (struct private_file_handle) Add tab_width member. + (q2c specifications) Add tabwidth subcommand. + (cmd_file_handle) Put parsed tab width into private_file_handle. + (create_file_handle) Set default tab width. + (handle_get_tab_width) New function. + + * file-type.c: (file_type_source_read) Adapt to new DFM interface. + + * inpt-pgm.c: (reread_trns_proc) Ditto. + + * matrix-data.c: (context) Ditto. + (another_token) Ditto. + (mget_token) Ditto. + (force_eol) Ditto. + +Sun May 30 18:33:59 2004 Ben Pfaff + + * casefile.c: (casefile_destroy) Fix memory leak by freeing + cf->filename. + (casereader_destroy) Don't close file descriptor -1. + + * recode.c: (cmd_recode) Fix memory leak. + + * set.q: (q2c specifications) Fix typo in user message. + + * str.c: (st_bare_pad_len_copy) Change memcpy to memmove to avoid + undefined behavior for overlapping arguments. + +Sun May 30 18:31:48 2004 Ben Pfaff + + * casefile.c: valgrind doesn't implement posix_fadvise() yet, so + don't call it when we're running under valgrind. + (call_posix_fadvise) New function. + (casefile_to_disk) Use call_posix_fadvise(). + (reader_open_file) Ditto. + +Sun May 30 18:20:12 2004 Ben Pfaff + + Update our string ADTs, struct string and struct len_string. Get + rid of pool support, which was largely unused. Rename lots of + functions to have more obvious or consistent names. + + * ascii.c: Get rid of ascii_pool. It was only used for string + allocations. + (ascii_open_global) Don't create ascii_pool. + (ascii_close_driver) Don't destroy ascii_pool. + (ascii_postopen_driver) Don't use pool. + (ascii_close_driver) Destroy strings manually. + + * str.c: (ds_create) Remove pool argument, all references updated. + (ds_init) Ditto. + (ds_replace) Remove pool support, make more efficient when we + don't need to reallocate. + (ds_destroy) Remove pool support. + (ds_rpad) New function. + (ds_size) Renamed ds_capacity(), all references updated. + (ds_value) Renamed ds_c_str(), all references updated. + (ds_concat) Renamed ds_puts(), all references updated. + (ds_concat_buffer) Renamed ds_concat(), all references updated. + (ds_putchar) Renamed ds_putc(), all references updated. + (ds_getline) Renamed ds_gets(), all references updated. + (ls_create) Remove pool argument, all references updated. + (ls_create_buffer) Ditto. + (ls_destroy) Removed pool support. + (ls_value) Renamed ls_c_str(), all references updated. + + * str.h: (ls_length) [__GNUC__] Add inline version. + (ls_c_str) [__GNUC__] Add inline version. + (ls_end) [__GNUC__] Add inline version. + (struct string) Remove pool member. Rename `size' to `capacity', + all references updated. + + * tab.c: (text_format) Instead of using pool argument to + ls_create_buffer(), call pool_register() on allocated data. + +Mon Apr 26 22:40:07 2004 Ben Pfaff + + We're abusing the current ASCII driver by telling it to allocate a + 9999-line, 9999-character page in the tests. This causes some + systems to curl up and die because it allocates 20 MB of + contiguous RAM. This change alleviates at least part of the + problem. It is mostly a stop-gap until the new output system is + ready. + + * ascii.c: (struct line) New structure. + (struct ascii_driver_ext) Remove `page', `page_size', `line_len', + `line_len_size', `n_output' members. Add `lines', `lines_cap'. + (ascii_preopen_driver) Initialize new members, not old ones. + (ascii_close_driver) Destroy new members, not old ones. + (ascii_open_page) Allocate new members, not old ones. + (expand_line) Allocate room in line. + (draw_line) Use new members. + (ascii_line_horz) Ditto. + (ascii_line_vert) Ditto. + (ascii_line_intersection) Ditto. + (text_draw) Ditto. + (output_lines) Ditto. + (ascii_close_page) Ditto. + +Sun Apr 25 23:40:15 2004 Ben Pfaff + + * matrix.c: Dead code. Removed. + + * matrix.h: Dead code. Removed. + +Fri Apr 16 23:59:51 2004 Ben Pfaff + + Contrary to what I'd always understood, there is an efficient + algorithm for deletion from a hash table populated via linear + probing. This change implements it. + + * hash.c: (hsh_rehash) Probe in increasing order. + (hsh_probe) Ditto. + (locate_matching_entry) Ditto. + (hsh_delete) Use Knuth's Algorithm 6.4R for deletion. + +Tue Apr 13 19:24:15 2004 Ben Pfaff + + * moments.c (calc_moments): Adjust calculation of kurtosis to + avoid subtracting huge numbers from huge numbers, on Michael + Kiefte's advice. + +Sun Apr 11 14:22:12 2004 Ben Pfaff + + Rework moments routines for improved numerical stability based on + Michael Kiefte's advice. Any bugs or remaining numerical problems + are still mine though. + + There is now a struct moments1 for use with one-pass moments. It + uses a provisional means algorithm as an attempt to improve + accuracy of higher moments. The older struct moments now only + handles two-pass moments. + + * aggregate.c: Use moments1 instead moments. + + * descript.c: Revert previous change, which is no longer needed + due to the moments revision. + + * moments.c: (calc_moments) New function for calculating variance, + skewness, kurtosis. + (moments_pass_one) Only accumulate weights bigger than zero. + (moments_calculate) Allow calculating the mean on pass one, others + require pass two. Implement in terms of calc_moments(). + (struct moments1) New structure. + (init_moments1) New function. + (moments1_clear) Ditto. + (moments1_create) Ditto. + (moments1_add) Ditto. + (moments1_calculate) Ditto. + (moments1_destroy) Ditto. + (cmd_debug_moments) Deal with `struct moments' or `struct + moments1' as requested by user. + +Sun Apr 11 14:21:55 2004 Ben Pfaff + + * Makefile.am (pspp_SOURCES): Remove debug.c. + + * debug.c: Removed. It was empty anyway. + +Fri Apr 9 20:04:49 2004 Ben Pfaff + + * descript.c (calc_descriptives): Fix assert failure when only + MOMENT_MEAN is needed. + +2004-04-09 Michael Kiefte + + * descript.c: + + fixed problem with parsing in match_statistic() causing + "DESCRIPTIVE STAT=MEAN." to barf. + + "MEAN" is now default if "SORT" given without specification. + + Fixed infinite loop with "DESCRIPT GIBBERISH=ALL." Parsing is + generally less forgiving of syntax errors: better to have it do + nothing and type it in again then to not know what it actually did + instead. + + z-score transformation now checks score for user-missing values + and checks std_dev for SYSMIS. + +2004-04-06 Michael Kiefte + + * aggregate.c, crosstabs.q, descript.c, dictionary.c, frequencies.q, levene.c, t-test.q, var.h: + Changed dict_get_case_weight() to accept an additional int * flag + to complain about system-missing, user-missing, zero, or negative + weights and updated existing functions to pass int * to + dict_get_case_weight(). + +2004-04-05 jmd + + * main.c: Fixed configuration problems with gsl + + * t-test.q: Fixed some problems encountered when compiling under Cygwin + +2004-04-03 blp + + * lexer.c, ChangeLog: + Fix infinite loop on comment at end of file, add test. + +2004-04-03 jmd + + * settings.h, var.h, ChangeLog, Makefile.am, cmdline.c, command.c, command.h, error.h, filename.c, frequencies.q, lexer.h, main.c, q2c.c, set.q: + Fixed the calculation of percentiles and added --syntax and --algorithm options + +Sat Apr 3 11:43:37 2004 Ben Pfaff + + * lexer.c: (lex_skip_comment) Handle end-of-file correctly (I + hope). + +Sat Apr 3 15:00:18 WST 2004 John Darrington + + * frequencies.q: Fixed the calculation of percentiles + + * Makefile.am: Added the --ansi flag and dealt with the + consequences. Added some entries to PSPP_sources so that + make distcheck would pass + + * cmdline.c: Added the --syntax and --algorithm options + + * q2c.c: Added an implicit /ALGORITHM subcommand to everything. + +Fri Apr 2 11:25:22 WAST 2004 John Darrington + + * t-test.q, levene.c, levene.h Converted t-test (incl levene) to + use the new multipass_split_... mechanism. + +Wed Mar 31 22:36:22 2004 Ben Pfaff + + * frequencies.q: (calc_stats) Use moments data structure and + calc_seskew(), calc_sekurt() functions. + + * set.q main.c settings.h Added support for --syntax and --algorithm + options + +Tue Mar 30 22:04:19 2004 Ben Pfaff + + * vfm.c: Had to get last call to multipass_split_output() inside + open_active_file()/close_active_file() pairing, so introduce new + function. + (internal_procedure) Move procedure() code here, except for calls + to open_active_file() and close_active_file(). + (procedure) Wrap open_active_file() and close_active_file() around + internal_procedure(). + (multipass_procedure_with_splits) Wrap open_active_file() and + close_active_file() around internal_procedure(). + +Tue Mar 30 22:01:57 2004 Ben Pfaff + + * descript.c: (cmd_descriptives) Free `vars' to avoid memory leak. + +Mon Mar 29 16:26:40 2004 Ben Pfaff + + * debug.c: Removed. Moved cmd_debug_evaluate() into expr-evl.c. + + * expr-evl.c: (cmd_debug_evaluate) Moved here from debug.c. + +Mon Mar 29 16:03:08 2004 Ben Pfaff + + * algorithm.c: By default turn off some of the more expensive + assertions. + (expensive_assert) New macro which expands to assert if + EXTRA_CHECKS is defined, to nothing otherwise. + (unique) Use expensive_assert(). + (binary_search) Ditto. + (push_heap) Ditto. + (pop_heap) Ditto. + (make_heap) Ditto. + (sort_heap) Ditto. + + * command.c: (conflicting_3char_prefixes) Words that are the same + don't cause conflicts when they are abbreviated to the first three + letters. + + * expr-evl.c: (CONCAT_func) Fix memory leak by incrementing struct + nonterm_node's n earlier. + (generic_str_func) Ditto. + +Mon Mar 29 15:32:17 2004 Ben Pfaff + + Add support for multipass procedures. Rewrite DESCRIPTIVES to + test multipass support, take advantage of new moments + calculation, and to not be such crappy code. Get rid of q2c + processing for DESCRIPTIVES. + + * vfm.c: (struct multipass_split_aux_data) New structure. + (multipass_procedure_with_splits) New function. + (multipass_split_callback) New function. + (multipass_split_output) New function. + * descript.q: Removed. + + * descript.c: New file. + + * var.h: Removed descriptives enums. + (struct descriptives_proc) Removed. + (struct variable) Removed p.dsc. + + * Makefile.am: (q_sources_c) Remove descript.c. + (q_sources_q) Removed descript.q. + +Mon Mar 29 15:31:55 2004 Ben Pfaff + + New manager for keeping track of used workspace. + + * workspace.c: New file. + + * workspace.h: New file. + + * Makefile.am: (pspp_SOURCES) Add workspace.c, workspace.h. + + * sort.c: (do_internal_sort) Use workspace_malloc(). + (destroy_internal_sort) Use workspace_free(). + +Mon Mar 29 15:31:08 2004 Ben Pfaff + + New `struct casefile' for managing sets of cases. + + * casefile.c: New file. + + * casefile.h: New file. + + * command.def: Add DEBUG CASEFILE command. + + * Makefile.am: (pspp_SOURCES) Add casefile.c, casefile.h. + + * sort.c: (sort_cases) Move logic for sending storage file to disk + into do_external_sort(). + (struct internal_sort) Use an array of ccase pointers instead of a + case_list. + (do_internal_sort) Rewrite to handle casefiles. + (compare_case_list) Removed. + (compare_cases) New function. + (compare_case_dblptrs) New function. + (read_internal_sort_output) Deal with new struct internal_sort. + + * vfm.c: (static var workspace_overflow) Removed. + (struct storage_stream_info) Removed all the members. Added + struct casefile * member. + (storage_sink_open) Use casefile. + (open_storage_file) Removed. + (write_storage_file) Removed. + (storage_to_disk) Removed. + (destroy_storage_stream_info) Use casefile. + (storage_sink_write) Use casefile. + (storage_sink_make_source) Use casefile. + (storage_source_count) Use casefile. + (storage_source_read) Use casefile. + (storage_source_on_disk) Removed. + (storage_source_get_cases) Removed. + (storage_source_set_cases) Removed. + (storage_source_get_casefile) New function. + +Mon Mar 29 15:30:09 2004 Ben Pfaff + + New `struct moments' for calculating moments. + + * stats.c: Removed. + + * stats.h: Removed. + + * moments.c: New file. + + * moments.h: New file. + + * command.def: Add DEBUG MOMENTS command. + + * Makefile.am: (pspp_SOURCES) Add moments.c, moments.h. Remove + stats.c, stats.h. + + * aggregate.c: Modify AGGREGATE to use the new moments + calculation, even if not in such a great way. + (struct agr_var) Add `moments' member. + (parse_aggregate_functions) Set `moments' member to null. + (agr_destroy) Destroy `moments' member. + (accumulate_aggregate_info) Use `moments' for standard deviation. + (dump_aggregate_info) Ditto. + (initialize_aggregate_info) Create or clear `moments'. + + * misc.h: Add pow2(), pow3(), pow4() functions in place of sqr(), + cube(), pow4() that were in stats.h. All references updated. + + * crosstabs.q: stats.h had chi-square significance functions. Use + GSL instead. + (display_chisq) Use gsl_cdf_chisq_Q() instead of chisq_sig(). + + * expr-evl.c: (expr_evaluate) Use moments_of_values() for + OP_CFVAR, OP_MEAN, OP_SD, OP_VARIANCE. + +Fri Mar 26 14:21:23 2004 Ben Pfaff + + * dictionary.c: (dict_compact_values) Compacted values need to + start off from 0. + +Fri Mar 26 00:54:57 2004 Ben Pfaff + + * var-labs.c: (cmd_variable_labels) For compatibility, don't allow + `/' at start. Check return value of parse_variables() for error + return. + +Fri Mar 26 00:19:27 2004 Ben Pfaff + + Revamp expressions: make the code a little nicer, and fix bugs + found in testing. + + * expr-evl.c: (expr_evaluate) Make expression argument const. + Support OP_ADD, OP_SUB, OP_MUL, OP_DIV instead of OP_PLUS, OP_MUL. + OP_POW is missing for arg 2 <= 0. OP_LOG is natural log, not + base-10 log. Fix OP_ANY, OP_ANY_STRING, OP_RANGE, OP_RANGE_STRING + off-by-ones. Add OP_MAX_STRING, OP_MIN_STRING. Fix OP_TIME_HMS, + OP_DATE_WKYR boundary conditions. Add OP_CTIME_DAYS, + OP_CTIME_HOURS, OP_CTIME_MINUTES, OP_CTIME_DAYS, OP_CTIME_SECONDS. + Support OP_INDEX_2, OP_INDEX_3, OP_RINDEX_2, OP_RINDEX_3 instead + of OP_INDEX, OP_INDEX_OPT, OP_RINDEX, OP_RINDEX_OPT. Merge + OP_LPAD_OPT into OP_LPAD, OP_RPAD_OPT into OP_RPAD, OP_LTRIM_OPT + into OP_LTRIM, OP_RTRIM_OPT into OP_RTRIM, OP_NUMBER_OPT into + OP_NUMBER. Fix OP_RTRIM fragility. Support OP_SUBSTR_2, + OP_SUBSTR_3 instead of OP_SUBSTR, OP_SUBSTR_OPT. Remove OP_INV. + Simplify OP_SYSMIS. Remove OP_STR_MIS. + + * expr-opt.c: (optimize_expression) Rewrite. + (macro n0) Removed. + (macro n1) Removed. + (macro n2) Removed. + (macro s0) Removed. + (macro s0l) Removed. + (macro s1) Removed. + (macro s1l) Removed. + (macro s2) Removed. + (macro s2l) Removed. + (macro s) Removed. + (macro sl) Removed. + (eq_num_con) New function. + (optimize_tree) New function. + (macro rnc) Removed. + (macro frnc) Removed. + (str_search) Add const to string params. + (str_rsearch) Ditto. + (evaluate_tree_no_missing) Renamed from evaluate_tree. Add num[], + str[], str_len[] locals to substitute for most of removed macros. + Support OP_ADD, OP_SUB, OP_MUL, OP_DIV instead of OP_PLUS, OP_MUL. + Removed support for missing values because we're never called with + missing values. Use set_number() or set_number_errno() instead of + rnc or frnc. Removed any stuff that caused trouble in testing. + We can re-add it later if it really slows anything. Fix some + random problems. + (evaluate_tree_with_missing) Not yet supported. To be added later + if it's important. + (repl_num_con) Removed. + (collapse_node) New function. + (force_repl_num_con) Removed. + (set_number) New function. + (set_number_errno) New function. + (repl_str_con) Removed. + (set_string) New function. + (yrmoda) Tighten boundary conditions. Adopt 2030 cut-off for + 2-digit years. + (dump_node) No special case for OP_AND, OP_OR. + + * expr-prs.c: (expr_prs) Honor EXPR_NO_OPTIMIZE bit. Rewrite. + (expr_get_type) New function. + (type_check) Rewrite. + (type_coercion) New function. + (struct operator) New structure. + (match_operator New function. + (parse_binary_operators) New function. + (parse_inverting_unary_operator) New function. + (parse_or) Rewritten. + (parse_and) Rewritten. + (parse_not) Rewritten. + (parse_rel) Rewritten. + (parse_add) Rewritten. + (parse_mul) Rewritten. + (parse_neg) Rewritten. + (parse_exp) Rewritten. + (parse_sysvar) Add $TRUE, $FALSE system variables. + Get $LENGTH, $WIDTH from get_viewlength(), get_viewwidth(). + (parse_primary) Use allocate_var_node(), allocate_num_con(), + allocate_str_con(). + (struct function) Remove desc, change `func' prototype. + (unary_func) Remove special cases. + (MISSING_func) Reduce to unary_func() that just returns a boolean. + (SYSMIS_func) Handle SYSMIS((x)) like SYSMIS(x). + (VALUE_func) Use allocate_var_node(). + (nary_num_func) Allow MIN and MAX for strings. + Use allocate_var_node(). Properly clean up. + Fix return type. + (generic_str_func) Use local table instead of removed `desc' + member. Mostly rewrite. + (get_num_args) Revise error message. + (parse_function) Return EXPR_ERROR, not 0 on error. + (macro op) Removed. + (macro varies) Removed. + (ops[]) Use expr.def. + (free_node) Do nothing if node is null. + (allocate_num_con) New function. + (allocate_str_con) New function. + (allocate_var_node) New function. + (allocate_binary_nonterminal) New function. + (append_nonterminal_arg) Removed. + (static var func_tab[]) Revised. + (expr_debug_print_postfix) Make parameter const. + Use printf() instead of debug_printf(). + + * expr.def: New file. + + * expr.h: Change PXP_* to EXPR_*, all references updated. Also + use named enum instead of unnamed, all references updated. Add + EXPR_ANY, EXPR_NO_OPTIMIZE. + + * exprP.h: Remove EX_*. Add DEFINE_OPERATOR. Use expr.def + instead of defining OP_* directly. + (macro IS_TERMINAL) New macro. + (macro IS_NONTERMINAL) New macro. + (enum OP_NO_FLAGS) New. + +Fri Mar 26 00:18:01 2004 Ben Pfaff + + * error.c: (err_assert_fail) msg variable needs to be non-const. + +Fri Mar 26 00:17:24 2004 Ben Pfaff + + * debug.c: (cmd_debug_evaluate) Rewrite. + +Fri Mar 26 00:15:13 2004 Ben Pfaff + + Fix some CROSSTABS bit rot stupidity. + + * crosstabs.q: Reorder the CELLS subcommands for compatibility. + (internal_cmd_crosstabs) Initializes cells[] correctly. + (float_M_suffix) Rename format_cell_entry(), change prototype, + rewrite. + (display_crosstabulation) Fix cell formatting. + +Fri Mar 26 00:14:09 2004 Ben Pfaff + + Make lex_rest_of_line(), lex_entire_end() not discard lines. Have + to call lex_discard_line() to do that. + + * command.c: (run_command) Call lex_discard_line() after + lex_rest_of_line(). + + * lexer.c: (lex_entire_end) Change behavior. + (lex_rest_of_line) Change behavior. Return const char *. + (lex_discard_line) Don't clear getl_buf, don't emit message. + + * main.c: (handle_error) Emit message here. + + * repeat.c: (internal_cmd_do_repeat) Use lex_discard_line() + instead of lex_entire_line(). + + * str.c: (mm_find_reverse) Make length params size_t. Rewrite. + + * title.c: (get_title) Call lex_discard_line() after + lex_rest_of_line(). + (cmd_file_label) Ditto. + (cmd_document) Deal with const char * return value. + +Fri Mar 26 00:10:16 2004 Ben Pfaff + + Removed REMARK command. + + * command.c: (extract_prefix) Removed. + (output_line) Removed. + (cmd_remark) Removed. + + * command.def: Remove REMARK. + +Fri Mar 26 00:08:38 2004 Ben Pfaff + + Added abort() after lots of assert(0) invocations to avoid some + compiler warnings. We really need a NOT_REACHED macro. + +Tue Mar 23 08:00:42 WAST 2004 John Darrington + + * sort.c: Added missing call to temp_file_close. Changed error + messages to warnings. + + * set.q: Improved setting of set_view{length,width} to be more tolerant + of buggy OSes. + +Sun Mar 21 10:11:14 WST 2004 John Darrington + + * val-labs.c: Fixed a bug where PSPP would crash, if VALUE LABELS was + used with incorrect syntax. + + * error.c, error.h et al: Overridden definition of assert for a + custom one. + + * test-q.c: Fixed a buglet where it would crash if no /VARIABLES + subcommand was given when it ought to have been. + +Sat Mar 20 22:19:08 2004 Ben Pfaff + + * tab.c: (tab_vline) Fix assertions to respect row_ofs and + col_ofs. + (tab_hline) Ditto. + (tab_box) Ditto. + (tab_joint_text) Ditto. + +Sat Mar 20 17:57:23 2004 Ben Pfaff + + * levene.c: Add #include. + + * set.q: (set_viewport) Add `int' argument to make its prototype + correct for signal(). + +Sat Mar 20 15:35:17 2004 Ben Pfaff + + * expr-evl.c: (expr_evaluate) Assert that `c' is nonzero before + using it. + +Sat Mar 20 15:18:16 2004 Ben Pfaff + + Changed DFM from open-at-first-access to explicit-open. Before, + calling dfm_get_record() or dfm_put_record() would automatically + open the file. Now, you have to call dfm_open_for_reading() or + dfm_open_for_writing() explicitly. This makes it possible to + check permissions, file existence, etc. earlier. + + Also made struct file_handle more opaque, and clean up in general. + + * data-list.c: (cmd_data_list) Open handle for reading. + + * dfm.c: (struct dfm_fhuser_ext) Add `where', `saw_begin_data' + members. + (open_file_r) Renamed dfm_open_for_reading(), rewrote. + (open_file_w) Renamed dfm_open_for_writing(), rewrote. + (open_inline_file) Removed. + (read_record) For inline_file, if we haven't seen BEGIN DATA, read + it. Deal with line_number in extension record instead of file + handle. + (dfm_get_record) Rewrote. + (dfm_put_record) Rewrote. + (dfm_push) Assert file is open and one of ours. Deal with + line_number in extension record instead of file handle. + (dfm_pop) Assert file is open and one of ours. Deal with + line_number in extension record instead of file handle. + (cmd_begin_data) Use dfm_open_for_reading(). Mark that we saw + BEGIN DATA. + + * file-handle.h: (enum constants RH_RF_*) Removed. + (enum constants FH_MD_*) Removed. + (struct file_handle) Removed `name', `norm_fn', `fn', `where', + `recform', `lrecl', `mode' members. Public references to + `recform' changed to use handle_get_mode(), references to `lrecl' + changed to use handle_get_record_width(). Added `private' member. + (enum file_handle_mode) New. + + * file-handle.q: (struct private_file_handle) New structure. + (struct file_handle_list) New structure. + (static var files) New. + (static var file_handles) Removed. + (init_file_handle) Removed. + (create_file_handle) Removed. + (get_handle_with_name) New function. + (get_handle_for_filename) New function. + (cmd_file_handle) Rewritten. + (hash_file_handle) Removed. + (cmp_file_handle) Removed. + (fh_init_files) Rewritten. + (fh_parse_file_handle) Rewritten. Allows identifiers as + filenames. + (fh_get_handle_by_name) Renamed handle_get_name(), all references + updated. Rewritten. + (fh_get_handle_by_filename) Renamed handle_get_filename(), all + references updated. Rewritten. + (fh_record_width) Renamed handle_get_record_width(), all + references updated. Rewritten. + (handle_get_mode) New function. + + * file-type.c: (cmd_file_type) Open handle for reading. + + * filename.c: [unix] (struct file_identity) New structure. + [unix] (fn_get_identity) New function. + [unix] (fn_free_identity) New function. + [unix] (fn_compare_file_identities) New function. + [!unix] (struct file_identity) New structure. + [!unix] (fn_get_identity) New function. + [!unix] (fn_free_identity) New function. + [!unix] (fn_compare_file_identities) New function. + + * lexer.c: (static var put) Renamed put_token, all references + updated. + (static var put_tokstr) New. + (static var put_tokval) New. + (lex_init) Initialize put_tokstr(). + (restore_token) New function. + (save_token) New function. + (lex_get) Use restore_token(). + (lex_put_back) Use save_token(). + (lex_put_back_id) New function. + (lex_put_forward) Removed. + (lex_preprocess_line) Set put_token instead of using + lex_put_forward(). + (lex_negative_to_dash) Use save_token(), set put_token directly. + (dump_token) Use stderr instead of stdout. + + * main.c: (main) Remove call to cmd_init(). + + * matrix-data.c: (cmd_matrix_data) Open file for reading. + + * pfm-read.c: Use handle_get_filename() instead of trying to use + h->fn directly, all over. + + * pfm-write.c: Ditto. + + * print.c: (internal_cmd_print) Open handle for writing. + (dump_table) Use handle_get_filename(). + (print_trns_proc) Use handle_get_mode(). + (cmd_print_space) Use fh_parse_file_handle(). + Open handle for writing. + [0] (debug_print) Removed. + + * sfm-read.c: Use handle_get_filename() instead of trying to use + h->fn directly, all over. + + * sfm-write.c: Ditto. + +Sat Mar 20 14:35:48 2004 Ben Pfaff + + Fix memory leaks. + + * autorecode.c: (arc_free) Free arc->src_values. + + * error.c: (msg) Free buf. + + * val-labs.c: (do_value_labels) Always free vars. + + * vfm.c: (close_active_file) If sink has no make_source then call + its destroy function. + +Sat Mar 20 14:00:24 2004 Ben Pfaff + + Fixed cmd_parse() so that it always skips past a full command + name. A few special commands for which this would be bad get + special treatment. This lets us drop code for skipping past the + end of a command name in most cmd_*() functions. It's not worth + listing all the commands affected. + + * command.c: (struct command) Remove `cmd' member, replace by + `name' member, all references updated. Remove `word', `next', + `skip_entire_name' members. + (macro DEFCMD) Deal with revised `struct command'. + (macro UNIMPL) Ditto. + (macro SPCCMD) New macro for commands whose last word shouldn't be + skipped. + (static array cmd_table[]) Make const, rename `commands', remove + sentinel element. + (macro COMMAND_CNT) New macro. + (split_words) Removed. + (cmd_init) Removed. + (FILE_TYPE_okay) Make parameter const. + (cmd_parse) Improve error messages. + (match_strings) New function. + (next_word) New function. + (enum command_match) New enum. + (conflicting_3char_prefixes) New function. + (conflicting_3char_prefix_command) New function. + (cmd_match_words) New function. + (count_matching_commands) New function. + (get_command_name) New function. + (free_words) New function. + (unknown_command_error) New function. + (figure_out_command) Renamed parse_command_name(), rewritten. + + * command.def: Removed @ command. Marked BEGIN DATA, DOCUMENT, + FILE LABEL, REMARK, SUBTITLE, TITLE as special. Renamed EVALUATE + to DEBUG EVALUATE. Added N alias for N OF CASES, SORT alias for + SORT CASES. + + * command.h: (macro SPCCMD) New. + + * include.c: (cmd_include_at) Removed. + (cmd_include) Allow identifier to be used as filename. + + * inpt-pgm.c: (cmd_reread) Use fh_parse_file_handle(). + + * t-test.q: (cmd_t_test) Command name is now parsed for us. + + +Sat Mar 20 13:56:00 2004 Ben Pfaff + + Start work on better test framework. + + * Makefile.am: (pspp_sources) Add debug.c. + + * debug.c: New file. + + * compute.c: (cmd_evaluate) Moved to debug.c, renamed + cmd_debug_evaluate(). + + * expr-prs.c: (expr_parse) Remove PXP_DUMP support. + + * expr.h: (enum constant PXP_DUMP) Removed. + +Sat Mar 20 00:05:42 WST 2004 John Darrington + + * set.q: Implemented the SHOW command, and synced it to the existing + SET cmd. + + Added a handler for SIGWINCH so that viewlength and viewwidth follow + changes as the window size is changed. + + Added fallback to set viewlength and viewwidth from LINES and COLUMS + environment variables if other methods are not available. + + glob.c: Removed a lot of global variables from glob.c and encapsulated + them in set.q + + random.c: Tidied up the way the random seed is set. + + str.c: Added a ds_vprintf function. + + error.c: Extended dump_message so that messages are always broken at + '\n' characters. + +Thu Mar 18 11:07:14 2004 Ben Pfaff + + * pfm-write.c: (bufwrite) Write out the correct element for string + variables. From Andreas Streichardt . + +Mon Mar 15 20:48:03 2004 Ben Pfaff + + Get rid of static and global (!) vars in matrix-data.c. + + * matrix-data.c: (static var nr_data) Removed. + (static var nr_factor_values) Removed. + (static var max_cell_index) Removed. + (static var split_values) Removed. + (struct nr_aux_data) New structure. + (read_matrices_without_rowtype) Use a local struct nr_aux_data in + place of static vars, pass to create_case_source() and procedure() + as aux data. + (nr_read_data_lines) Use struct nr_aux_data * parameter instead of + struct matrix_data_pgm *. + (nr_read_splits) Ditto. + (nr_read_factors) Ditto. + (nr_output_data) Ditto. + (static var wr_content) Removed. + (global var wr_data) Removed. + (global var wr_current) Removed. + (struct wr_aux_data) New structure. + (read_matrices_with_rowtype) Use a local struct wr_aux_data in + place of static vars, pass to create_case_source() and procedure() + as aux data. + (matrix_data_read_with_rowtype) Use struct wr_aux_data * parameter + instead of matrix_data_pgm *. + (wr_read_splits) Ditto. + (wr_output_data) Ditto. + (wr_read_rowtype) Ditto. + (wr_read_factors) Ditto. + (wr_read_indeps) Ditto. + +Mon Mar 15 20:07:29 2004 Ben Pfaff + + Get rid of static vars in autorecode.c. + + * autorecode.c: (struct autorecode_trns) Rename `arc' to `specs', + `n_arc' to `spec_cnt'. All references updated. + (static var v_src) Removed. + (static var v_dest) Removed. + (static var h_trns) Removed. + (static var nv_src) Removed. + (static var descend) Removed. + (static var print) Removed. + (enum direction) New enum. + (struct autorecode_pgm) New structure. + (cmd_autorecode) Use struct autorecode_pgm instead of static vars. + Move n_dest local var into struct autorecode_pgm for ease of + clean-up. Use arc_free(). + (arc_free) New function. + (recode) Modify to take struct autorecode_pgm * parameter instead + of using statics. Let the caller clean up. + (autorecode_proc_func) Use struct autorecode_pgm * auxiliary data + instead of statics. Rearrange code a little. + +Mon Mar 15 00:25:02 2004 Ben Pfaff + + Get rid of static, global vars in recode.c. Remove debug code. + + * recode.c: (static var head) Removed. + (global var v) Removed. + (global var nv) Removed. + (cmd_recode) New local variables head, v, nv. Initialize and free + v. Don't call debug_print(). + [DEBUGGING] (dump_dest) Removed. + [DEBUGGING] (debug_print) Removed. + +Mon Mar 15 00:14:49 2004 Ben Pfaff + + Get rid of static vars in expr-opt.c. + + * expr-opt.c: (static var e) Removed. + (static var nop) Removed. + (static var mop) Removed. + (static var ndbl) Removed. + (static var mdbl) Removed. + (static var nstr) Removed. + (static var mstr) Removed. + (static var nvars) Removed. + (static var mvars) Removed. + (struct expr_dump_state) New structure. + (dump_expression) Use new struct expr_dump_state instead of static + vars and pass to functions we call. + (dump_node) Use struct expr_dump_state * parameter. + (emit) Ditto. + (emit_num_con) Ditto. + (emit_str_con) Ditto. + (emit_var) Ditto. + +Mon Mar 15 00:03:51 2004 Ben Pfaff + + Get rid of static var in COUNT. + + * count.c: (static var head) Move into cmd_count(). + (cmd_count) [DEBUGGING] Don't call debug_print. + [DEBUGGING] (debug_print) Removed. + +Sun Mar 14 23:56:09 2004 Ben Pfaff + + Get rid of static vars in VALUE LABELS, ADD VALUE LABELS. + + * val-labs.c: (static var v) Removed. + (static var nv) Removed. + [DEBUGGING] (debug_print) Removed. + (verify_val_labs) Add struct variable **, int parameters. + (get_label) Ditto. Improve error messages, streamline. + (erase_labels) New function for erasing value labels, taking over + part of verify_val_labs()'s function. + (init) Removed. + (done) Removed. + (cmd_value_labels) No need to call init() or done() anymore. + (cmd_add_value_labels) Ditto. + (do_value_labels) Add vars, var_cnt local variables. Clean up + after them internally. Call erase_labels() if we should. Don't + call debug_print(). + +Sun Mar 14 23:33:53 2004 Ben Pfaff + + Get rid of static vars in MATCH FILES. + + * get.c: (static var mtf_head) Removed. + (static var mtf_tail) Removed. + (static var mtf_by) Removed. + (static var mtf_n_by) Removed. + (static var mtf_master) Removed. + (static var mtf_seq_num) Removed. + (static var mtf_seq_nums) Removed. + (static var mtf_sink) Removed. + (static var mtf_case) Removed. + (struct mtf_proc) New structure. + (cmd_match_files) Use struct mtf_proc instead of static vars. + (mtf_processing_finish) Ditto. + (mtf_free) Ditto. + (mtf_delete_file_in_place) Ditto. + (mtf_read_nonactive_records) Ditto. + (mtf_compare_BY_values) Ditto. + (mtf_processing) Ditto. + (mtf_merge_dictionary) Ditto. + +Sun Mar 14 22:48:12 2004 Ben Pfaff + + * command.def: Add CASESTOVARS, VARSTOCASES unimplemented commands. + + * dictionary.c: (dict_rename_var) Add assertion. + (dict_contains_var) Check by index instead of name. + +Sun Mar 14 22:01:02 2004 Ben Pfaff + + Get rid of compaction_necessary, compaction_nval, compaction_case. + Redo VFM interface. Replace disk_sink and memory_sink by + storage_sink, disk_source and memory_source by storage_source. + + * vfm.h: (struct case_sink) Add `dict', `idx_to_fv', `value_cnt' + members. + + * vfm.c: + (struct write_case_data) Remove `begin_func', `end_func', + `func_aux' members. Add `aux', `trns_case', `sink_case', + `cases_written', `cases_analyzed' members. + (global var compaction_necessary) Make static. + (global var compaction_nval) Removed. + (global var compaction_case) Removed. + (static var case_count) Removed. + (struct procedure_aux_data) Removed. + (struct split_aux_data) Removed. + (procedure) Remove begin_func, end_func parameters. Rewrite. + (static var not_canceled) Removed. + (process_active_file) Removed. + (process_active_file_write_case) Removed. + (process_active_file_output_case) Removed. + (prepare_for_writing) Moved into open_active_file(). + (arrange_compaction) Ditto. + (setup_lag) Ditto. + (open_active_file) Rewrote. + (write_case) New function. + [DEBUGGING] (index_to_varname) Removed. + (execute_transformations) New function. + (exclude_this_case) Renamed filter_case(), changed interface. + (clear_case) Added struct ccase * parameter to interface. + (close_active_file) Added struct write_case_data * parameter, + rewrote. + (disk_sink_create) Removed. + (disk_sink_destroy) Removed. + (disk_sink_make_source) Removed. + (disk_sink_write) Removed. + (disk_source_count) Removed. + (disk_source_destroy) Removed. + (disk_source_read) Removed. + (global var disk_sink_class) Removed. + (global var disk_source_class) Removed. + (global var memory_sink_class) Removed. + (global var memory_source_class) Removed. + (memory_sink_create) Removed. + (memory_sink_destroy) Removed. + (memory_sink_make_source) Removed. + (memory_sink_write) Removed. + (memory_source_count) Removed. + (memory_source_destroy) Removed. + (memory_source_get_cases) Removed. + (memory_source_read) Removed. + (memory_source_set_cases) Removed. + (struct disk_stream_info) Removed. + (struct memory_sink_info) Removed. + (struct memory_source_info) Removed. + (write_active_file_to_disk) Removed. + (destroy_storage_stream_info) New function. + (global var null_sink_class) New var. + (global var storage_sink_class) New var. + (global var storage_source_class) New var. + (open_storage_file) New function. + (storage_sink_destroy) New function. + (storage_sink_make_source) New function. + (storage_sink_open) New function. + (storage_sink_write) New function. + (storage_source_count) New function. + (storage_source_destroy) New function. + (storage_source_get_cases) New function. + (storage_source_on_disk) New function. + (storage_source_read) New function. + (storage_source_set_cases) New function. + (storage_source_to_disk) New function. + (storage_to_disk) New function. + (struct storage_stream_info) New structure. + (write_storage_file) New function. + (procedure_write_case) Removed. + (create_case_source) Add `struct dictionary *' parameter, all + references updated. + (create_case_sink) Ditto. + (free_case_sink) New function. + (struct split_aux_data) New structure. + (procedure_with_splits) New function implementing what procedure() + used to. + (SPLIT_FILE_proc_func) Removed. + (procedure_with_splits_callback) New function. + (equal_splits) New function. + + * aggregate.c: Pass around a struct instead of using statics. + (static var outfile) Remove. + (enum type) Give it tag `missing_treatment'. + (static var missing) Remove. + (static var sort) Remove. + (static var agr_first) Remove. + (static var agr_next) Remove. + (static var case_count) Remove. + (static var prev_case) Remove. + (static var buf64_1xx) Remove. + (static var buf_1xx) Remove. + (struct agr_proc) New structure incorporating the above. + (cmd_aggregate) Use new struct. Clean up error handling using + agr_destroy(). Completely rewrite actual implementation of + aggregation. + (create_sysfile) Add struct agr_proc * parameter, modify + accordingly. + (parse_aggregate_functions) Ditto. + (free_aggregate_functions) Ditto. Rename agr_destroy(). + (aggregate_single_case) Add struct agr_proc * parameter, modify + accordingly. + (accumulate_aggregate_info) Ditto. + (dump_aggregate_info) Ditto. + (initialize_aggregate_info) Ditto. + (agr_00x_trns_proc) Removed. + (agr_00x_end_func) Removed. + (agr_10x_trns_proc) Removed. + (agr_10x_trns_free) Removed. + (agr_10x_end_func) Removed. + (agr_11x_read) Removed. + (agr_11x_finish) Removed. + [DEBUGGING] (debug_print) Removed. + (write_case_to_sfm) Add struct agr_proc * parameter, modify + accordingly. + (agr_to_active_file) New function. + (presorted_agr_to_sysfile) New function. + (sort_agr_to_sysfile) New function. + + * autorecode.c: (cmd_autorecode) Use procedure_with_splits(). + + * crosstabs.q: (internal_cmd_crosstabs) Ditto. + + * descript.q: (cmd_descriptives) Ditto. + + * dfm.c: (cmd_begin_data) Check for storage_source_class. Adapt + to new procedure() interface. + + * command.c: (cmd_execute) Adapt to new procedure() interface. + + * dictionary.c: (dict_compact_values) Also delete scratch + variables. + (dict_get_compacted_value_cnt) New function. + (dict_get_compacted_idx_to_fv) New function. + + * flip.c: (cmd_flip) Warn about and cancel TEMPORARY. + (cmd_flip) Adapt to new procedure() interface. + (flip_sink_write) Use sink->idx_to_fv. + + * frequencies.q: (internal_cmd_frequencies) Use + procedure_with_splits(). + + * get.c: (cmd_save_internal) Adapt to new procedure() interface. + (static var mtf_sink) New static var. + (static var mtf_case) New static var. + (cmd_match_files) Warn about and cancel TEMPORARY. Redo the way + we actually implement the matching. + (mtf_delete_file_in_place) Use mtf_case. + (mtf_processing) Use mtf_case and mtf_sink. + (cmd_export) Adapt to new procedure() interface. + + * levene.c: (levene) Use procedure_with_splits(). + + * list.q: (cmd_list) Use procedure_with_splits(). + + * matrix-data.c: (read_matrices_without_rowtype) Adapt to new + procedure() interface. + (read_matrices_with_rowtype) Ditto. + + * modify-vars.c; (cmd_modify_vars) Warn about and cancel + TEMPORARY. Adapt to new procedure() interface. + + * rename-vars.c: Warn about and cancel TEMPORARY. + + * sort.c: (cmd_sort_cases) Warn about TEMPORARY. + (sort_cases) Use dict_get_compacted_value_cnt() instead of + compaction_nval. Adapt to new procedure() interface. Use + storage_source_to_disk(). + (do_internal_sort) Don't try to dump the cases to memory. + (compare_case_lists) Pass null idx_to_fv. + (struct initial_run_state) Add `idx_to_fv' member. Remove + `case_size' member. + (write_initial_runs) Don't initialize irs->case_size. Adapt to + new procedure() interface. Reset irs->idx_to_fv after calling + procedure(). + (sort_sink_write) Set irs->idx_to_fv. Use case_size from struct + sort_cases_pgm. Pass irs, not struct sort_cases_pgm to + push_heap(). + (destroy_initial_run_state) Don't dereference irs after freeing + it. + (allocate_cases) Don't calculate case_size locally. + (compare_record) Add idx_to_fv parameter. + (compare_record_run) Change parameter from struct sort_cases_pgm * + to struct initial_run_state *. Pass irs->idx_to_fv to + compare_record(). + (compare_record_run) Third parameter now a struct + initial_run_state *. + (output_record) No need for out_case anymore. Pass irs, not + struct sort_cases_pgm to pop_heap(). Use case_size from struct + sort_cases_pgm. + (merge) Use case_size from struct sort_cases_pgm. + (merge_once) Use case_size from struct sort_cases_pgm. + Pass null pointer to compare_record() as idx_to_fv. + (global var sort_sink_class) Make static. + + * t-test.q: (cmd_t_test) Use procedure_with_splits(). + + * temporary.c: Remove debugging crap. + +Sat Mar 13 14:19:52 WST 2004 John Darrington + + * t-test.q, levene.c: Fixed up the handling of MISSING values + int the T-TEST + +Fri Mar 12 16:23:35 WST 2004 John Darrington + + * t-test.q, levene.c: Added support for T-TEST /GROUP where only + one value is given. + +Wed Mar 10 23:25:13 2004 Ben Pfaff + + Change explicit variable name checks into use of + dict_class_from_id(). + + * dictionary.c: (dict_create_var) Change explicit variable name + check into use of dict_class_from_id(). + + * get.c: (trim_dictionary) Ditto. + + * sel-if.c: (cmd_filter) Ditto. + + * sysfile-info.c: (cmd_display) Ditto. + + * vars-prs.c: (parse_DATA_LIST_vars) Ditto. + + * vfm.c: (arrange_compaction) Ditto. + + * weight.c: (cmd_weight) Ditto. + +Wed Mar 10 21:16:34 2004 Ben Pfaff + + * temporary.c: (cmd_temporary) When TEMPORARY was the first + transformation following the input program, if any, for some + reason we special-cased f_trns. That's just wrong. It should + always be set to n_trns. + Tue Mar 9 23:44:40 2004 Ben Pfaff * format.c: (parse_format_specifier_name) Fix brown-bag bug