Applied patch #5653, which adds callbacks to dataset whenever its dictionary or
[pspp-builds.git] / src / data / ChangeLog
1 Mon Jan  1 10:36:26 WST 2007 John Darrington <john@darrington.wattle.id.au>
2
3         * dictionary.c dictionary.h : Added replace_source and replace_dict
4         callbacks, and functions to deal with them.
5
6 Fri Dec 22 13:56:08 2006  Ben Pfaff  <blp@gnu.org>
7
8         Simplify missing value handling.
9
10         * missing-values.h (enum mv_class): New type.
11         (enum mv_type): Moved definition into missing-values.c and renamed
12         each MV_* to MVT_*, to distinguish them from the exposed mv_class
13         enums.  Updated all uses.
14         (struct missing_values): Changed type of `type' from `enum
15         mv_type' to `int' because the definition is no longer exposed.
16         
17         * missing-values.c (mv_is_value_missing): Add new enum mv_class
18         parameter.  Update all callers.
19         (mv_is_num_missing): Ditto.
20         (mv_is_str_missing): Ditto.
21         (mv_is_value_user_missing): Removed.  Changed callers to use
22         mv_is_value_missing.
23         (mv_is_num_user_missing): Removed.  Changed callers to use
24         mv_is_num_missing.
25         (mv_is_str_user_missing): Removed.  Changed callers to use
26         mv_is_str_missing.
27         (mv_is_value_system_missing): Removed.  Changed callers to use
28         mv_is_value_missing.
29         (mv_set_type): Removed.  Changed callers to use mv_clear.
30         (mv_clear): New function.
31         
32         * variable.c (var_is_value_missing): Add new enum mv_class
33         parameter.  Update all callers.
34         (var_is_num_missing): Ditto.
35         (var_is_str_missing): Ditto.
36         (var_is_value_user_missing): Removed.  Changed callers to use
37         var_is_value_missing.
38         (var_is_num_user_missing): Removed.  Changed callers to use
39         var_is_num_missing.
40         (var_is_str_user_missing): Removed.  Changed callers to use
41         var_is_str_missing.
42         (var_is_value_system_missing): Removed.  Changed callers to use
43         var_is_value_missing.
44         
45         * casefilter.c (struct casefilter): Use enum mv_class in place of
46         bool.
47         (casefilter_variable_missing): Adapt to new member.
48         (casefilter_create): Change signature to take enum mv_class,
49         update callers.
50
51 Fri Dec 22 20:08:38 WST 2006 John Darrington <john@darrington.wattle.id.au>
52
53         * casefile-factory.h fastfile-factory.c fastfile-factory.h: New files.
54
55         * case-sink.c case-sink.h procedure.c procedure.h 
56           storage-stream.c: Now uses the factory.
57         
58 Sat Dec 16 22:05:18 2006  Ben Pfaff  <blp@gnu.org>
59
60         Make it possible to pull cases from the active file with a
61         function call, instead of requiring indirection through a callback
62         function.
63
64         * case-source.h (struct case_source_class): Change ->read function
65         to return a single case, instead of calling a callback function
66         for each case.  Change ->destroy function to return an error
67         status.
68
69         * case-source.c (free_case_source): Pass along the value returned
70         by the case_source ->destroy function.
71
72         * procedure.c (struct write_case_data): Removed.
73         (struct dataset): Added some members to track procedure state.
74         (procedure): Optimize the trivial case at this level.
75         (internal_procedure): Re-implement in terms of proc_open,
76         proc_read, proc_close.
77         (proc_open) New function.
78         (proc_read) New function.
79         (proc_close) New function.
80         (write_case) Moved into proc_read.
81         (close_active_file) Moved closing of data source into proc_close.
82
83         * storage-source.c: Rewrote to conform with modified
84         case_source_class interface.
85
86         * transformations.c (trns_chain_execute): Added argument to allow
87         starting execution from an arbitrary transformation.  Updated
88         callers.
89
90         * transformations.h (enum TRNS_NEXT_CASE) Renamed TRNS_END_CASE.
91
92 Sat Dec 16 14:09:25 2006  Ben Pfaff  <blp@gnu.org>
93
94         * sys-file-reader.c (read_display_parameters): Don't assume that
95         MEASURE_* and ALIGN_* have the same values found in system files.
96
97         * sys-file-writer.c (write_variable_display_parameters): Ditto.
98
99         * variable.h: Change MEASURE_NOMINAL, MEASURE_ORDINAL,
100         MEASURE_SCALE to be 0-based instead of 1-based.  This also fixes
101         the value of n_MEASURES, which was off by 1 (at least from my
102         point of view).
103
104 Sat Dec 16 12:17:34 WST 2006 John Darrington <john@darrington.wattle.id.au>
105
106         * dictionary.c dictionary.h vardict.h variable.c: Added optional
107                 callbacks which are invoked when the dictionary or its 
108                 variables are changed.  
109         
110         * missing-values.c missing-values.h value-labels.c: Tidied up
111                 consistency checks, and made some of them return false 
112                 instead of assert-failing. 
113
114 Wed Dec 13 19:30:11 2006  Ben Pfaff  <blp@gnu.org>
115
116         * calendar.c (calendar_days_in_month): New function.
117
118 Mon Dec 11 07:53:39 2006  Ben Pfaff  <blp@gnu.org>
119
120         * value-labels.c (hash_int_val_lab): Only hash as many bytes as
121         the value label's width.
122
123 Sun Dec 10 14:21:29 2006  Ben Pfaff  <blp@gnu.org>
124
125         * sfm-private.h: Move contents into sys-file-writer.c, which is
126         the only remaining user.  Removed Borland C++-specific directives.
127         
128         * sys-file-reader.c: Clean up and rewrite entire file.  The
129         rewritten version is simpler and better abstracted, and should be
130         easier to maintain and extend.  It avoids using structures to read
131         file data, which is prone to padding variations among compilers.
132         It should also handle non-IEEE 754 system files, although I
133         haven't been able to find any.  It has been tested against many
134         .sav files obtained from the Web and found to produce the same
135         results as the earlier version of the code, or in some cases
136         improved results.  It is more tolerant of format variations found
137         in the wild.
138
139         * sys-file-reader.h (struct sfm_read_info): Removed `big_endian'
140         member, putting an enum integer_format in its place.  New member
141         `float_format'.  Changed `compressed' member to type bool.
142
143 Sun Dec 10 13:48:53 2006  Ben Pfaff  <blp@gnu.org>
144
145         * dictionary.c (dict_delete_consecutive_vars): New function.
146
147 Sat Dec  9 20:08:25 2006  Ben Pfaff  <blp@gnu.org>
148
149         * file-name.c (fn_search_path): Remove prefix arg that was unused
150         by any caller.  Updated all callers.
151
152 Sat Dec  9 20:04:22 2006  Ben Pfaff  <blp@gnu.org>
153
154         * format.c (fmt_dollar_template): Use user's decimal point
155         character.  Add assertion.
156
157 Sat Dec  9 20:02:25 2006  Ben Pfaff  <blp@gnu.org>
158
159         * format.c (fmt_dollar_template): New function, based on
160         dollar_format_template from var-type-dialog.c.
161
162 Sat Dec  9 18:05:59 2006  Ben Pfaff  <blp@gnu.org>
163
164         * data-out.c (output_scientific): Fix bad assumption that "buf" is
165         null-terminated.
166         
167 Sat Dec  9 17:23:23 2006  Ben Pfaff  <blp@gnu.org>
168
169         Finish converting struct variable to an opaque type.  In this
170         phase, we add remaining setter and getter functions, convert the
171         remaining PSPP code to use them, and do a bunch of cleanup.  The
172         resulting changes are pervasive but mostly trivial, and only the
173         notable changes are logged.
174         
175         * automake.mk (src_data_libdata_a_SOURCES): Add the new source
176         files.
177         
178         * case.c (case_data): Renamed case_data_idx.
179         (case_num): Renamed case_num_idx.
180         (case_str): Renamed case_str_idx.
181         (case_data_rw): Renamed case_data_rw_idx.
182
183         * case.h (case_data): New function with old name and an interface
184         that takes a variable instead of an index, which is easier to
185         use.  Updated all callers to use the new interface, or to use the
186         new *_idx function (see above).
187         (case_num): Ditto.
188         (case_str): Ditto.
189         (case_data_rw): Ditto.
190         
191         * category.c (cat_stored_values_destroy): Changed interface to
192         take a struct cat_vals * instead of a struct variable *.
193
194         * dictionary.c (dict_clone): Use new vector_clone function.     
195         (dict_clear) Use new var_destroy function.
196         (add_var) New function.
197         (dict_create_var) Rewrite in terms of dict_create_var_assert.
198         (dict_create_var_assert) Rewrite in terms of add_var.
199         (dict_clone_var) Rewrite in terms of dict_clone_var_assert.
200         (dict_clone_var_assert) Rewrite in terms of var_clone, add_var.
201         (dict_lookup_var) Use new var_create, var_destroy functions.
202         (dict_contains_var) Rewrite in terms of new vardict functionality.
203         (set_var_dict_index) New function.
204         (set_var_case_index) New function.
205         (reindex_vars) New function.
206         (dict_delete_var) Rewrite in terms of new vardict functionality.
207         (dict_reorder_var) Ditto.
208         (dict_reorder_vars) Ditto.
209         (rename_var) New function.
210         (dict_rename_var) Use rename_var.
211         (dict_rename_vars) Use pool to simplify code.  Use rename_var.
212         (dict_get_compacted_idx_to_fv) Rename
213         dict_get_compacted_dict_index_to_case_index, update callers.
214         (dict_create_vector) Use new vector_create function.
215         (dict_clear_vectors) Use new vector_destroy function.
216         (set_var_short_name_suffix) Move here from variable.c, renamed
217         from var_set_short_name_suffix, make static, update caller.
218
219         * sys-file-private.c: New file.  
220         (sfm_width_to_bytes) Moved here from variable.c, renamed from
221         width_to_bytes, update callers.
222
223         * sys-file-private.h: New file.  Later it will supplant
224         sfm-private.h; for now it supplements it.
225         (macro MIN_VERY_LONG_STRING) New macro.
226         (macro EFFECTIVE_LONG_STRING_LENGTH) New macro, from value.h.
227
228         * sys-file-reader.c: Use MIN_VERY_LONG_STRING - 1 where
229         MAX_LONG_STRING was used before.
230
231         * sys-file-writer.c: Ditto.
232
233         * value-labels.c: Change the paradigm here to be that a null
234         pointer is OK for a struct val_labs * in most cases; it just
235         represents an empty set of value labels.
236         (val_labs_copy) A copy of a null set is a null set.
237         (val_labs_count) A null set has 0 labels.
238         (val_labs_replace) Change return type to void.  Rewrite for
239         simplicity.
240         (val_labs_find) A null set does not contain the value.
241         (value_to_string) Moved to variable.c, renamed var_get_value_name,
242         transposed argument order, updated all callers.
243
244         * value.c: New file.
245         (value_dup) Moved here from variable.c.
246         (compare_values) Ditto.
247         (hash_value) Ditto.
248
249         * value.h: (macro MAX_SHORT_STRING) Rewrote for simplicity.
250         (macro MAX_LONG_STRING) Removed, because it was only interesting
251         for system files, not for general code.
252         (macro MAX_VERY_LONG_STRING) Ditto.
253         (macro EFFECTIVE_LONG_STRING_LENGTH) Moved to sys-file-private.h.
254         (macro MAX_ELEMS_PER_VALUE) Removed, as it was unused.
255
256         * vardict.h: New file, for an interface between variables and
257         their dictionaries.
258
259         * variable.c: A lot of functions were moved around, for better
260         organization.
261         (struct variable) Move definition here, from variable.h.
262         (var_type_adj) Removed--makes i18n hard.
263         (var_type_noun) Ditto.
264         (var_create) New function.
265         (var_clone) New function.
266         (var_destroy) New function.
267         (var_set_name) Assert that variable is not in a dictionary.
268         (compare_var_names) Rename compare_vars_by_name and fix a couple
269         of callers who thought the args were strings.
270         (hash_var_name) Rename hash_var_by_name.
271         (compare_var_ptr_names) Rename compare_var_ptrs_by_name.
272         (hash_var_ptr_name) Rename hash_var_ptr_by_name.
273         (var_is_very_long_string) Removed, because it was only interesting
274         to system file code.
275         (var_set_missing_values) Allow the argument to be the wrong width,
276         as long as we can resize it.  Simplify callers who were doing the
277         resizing themselves.
278         (var_get_value_labels) New function.
279         (var_has_value_labels) New function.
280         (var_set_value_labels) New function.
281         (alloc_value_labels) New function.
282         (var_add_value_label) New function.
283         (var_replace_value_label) New function.
284         (var_clear_value_labels) New function.
285         (var_lookup_value_label) New function.
286         (var_get_value_name) Moved here from variable.c, renamed from
287         var_get_value_name, transposed argument order, updated all
288         callers.
289         (var_to_string) Moved here, from variable-label.c.
290         (var_set_leave) New function.
291         (var_get_leave) New function.
292         (var_must_leave) New function.
293         (var_set_short_name_suffix) Moved to dictionary.c, renamed
294         set_var_short_name_suffix.
295         (var_get_dict_index) New function.
296         (var_get_case_index) New function.
297         (var_get_obs_vals) New function.
298         (var_set_obs_vals) New function.
299         (var_has_obs_vals) New function.
300         (var_get_vardict) New function.
301         (var_set_vardict) New function.
302         (var_has_vardict) New function.
303         (var_clear_vardict) New function.
304         (value_dup) Moved to value.c.
305         (compare_values) Ditto.
306         (hash_value) Ditto.
307
308         * variable.h: (enum NUMERIC) Rename VAR_NUMERIC, update all users.
309         (enum ALPHA) Rename VAR_STRING, update all users.
310
311         * vector.c: New file.
312         (struct vector) Moved here, from variable.h.
313         (check_widths) New function.
314         (vector_create) New function.
315         (vector_clone) New function.
316         (vector_destroy) New function.
317         (vector_get_name) New function.
318         (vector_get_var) New function.
319         (vector_get_var_cnt) New function.
320         (compare_vector_ptrs_by_name) New function.
321
322         * vector.h: New file.
323
324 Sun Dec 10 11:32:56 WST 2006 John Darrington <john@darrington.wattle.id.au>
325
326         * casefilter.c (casefilter_variable_missing): Avoided comparision of
327         string variables to SYSMIS.  Thanks to Ben Pfaff for reporting this
328         problem.
329
330 Sat Dec  9 07:18:03 WST 2006 John Darrington <john@darrington.wattle.id.au>
331
332         * value-labels.c (destroy_atoms): New function.
333         * value-labels.c (atom_create): Call destroy_atoms in atexit handler.
334
335 Thu Dec  7 17:38:26 2006  Ben Pfaff  <blp@gnu.org>
336
337         Thanks to Jason Stover for pointing out this problem.
338         
339         * data-out.c (output_number): Use gsl_finite from GSL, which is
340         portable, instead of isfinite, which is not.
341         (power256) Ditto.
342
343 Thu Dec  7 15:22:38 WST 2006 John Darrington <john@darrington.wattle.id.au>
344
345         * variable.c variable.h (value_dup): New function.
346
347 Mon Dec  4 22:20:17 2006  Ben Pfaff  <blp@gnu.org>
348
349         Start converting struct variable to an opaque type.  In this
350         phase, we add a bunch of setter and getter functions and convert
351         most of the PSPP code to use them.  The resulting changes are
352         pervasive but mostly trivial, and only the notable changes are
353         logged.
354         
355         * format.c (fmt_equal): New function.
356         
357         * variable.c (var_type_is_valid): New function.
358         (measure_is_valid) Moved here, from format.c.
359         (alignment_is_valid) Moved here, from format.c.
360         (var_get_name) New function.
361         (var_set_name) New function.
362         (width_to_type) New function.
363         (var_get_type) New function.
364         (var_get_width) New function.
365         (var_set_width) New function.
366         (var_is_numeric) New function.
367         (var_is_alpha) New function.
368         (var_is_short_string) New function.
369         (var_is_long_string) New function.
370         (var_is_very_long_string) New function.
371         (var_get_missing_values) New function.
372         (var_set_missing_values) New function.
373         (var_clear_missing_values) New function.
374         (var_has_missing_values) New function.
375         (var_is_value_missing) New function.
376         (var_is_num_missing) New function.
377         (var_is_str_missing) New function.
378         (var_is_value_user_missing) New function.
379         (var_is_num_user_missing) New function.
380         (var_is_str_user_missing) New function.
381         (var_is_value_system_missing) New function.
382         (var_get_print_format) New function.
383         (var_set_print_format) New function.
384         (var_get_write_format) New function.
385         (var_set_write_format) New function.
386         (var_set_both_formats) New function.
387         (var_get_label) New function.
388         (var_set_label) New function.
389         (var_clear_label) New function.
390         (var_has_label) New function.
391         (var_get_measure) New function.
392         (var_set_measure) New function.
393         (var_get_display_width) New function.
394         (var_set_display_width) New function.
395         (var_get_alignment) New function.
396         (var_set_alignment) New function.
397         (var_get_value_cnt) New function.
398         (var_get_leave) New function.
399         (var_get_short_name) New function.
400
401         * variable.h: (struct variable) Removed "type" and "nv" members;
402         they are now computed from "width" where needed.
403
404 Mon Dec  4 21:38:40 2006  Ben Pfaff  <blp@gnu.org>
405
406         * missing-values.c (mv_resize): Don't write beyond end of the
407         allocated buffer when resizing a long string.
408
409 Sat Dec  2 16:28:32 2006  Ben Pfaff  <blp@gnu.org>
410
411         Clean up identifier code: don't require identifier enumerations to
412         be in a particular order; make better use of string library;
413         expose less of the internals.
414                 
415         * identifier.c: (lex_skip_identifier) Rename lex_id_get_length,
416         change interface.  Updated all callers.
417         (lex_id_match) Change interface to use struct substring, update
418         all callers.
419         (lex_id_match_len) Removed.  Update callers to use lex_id_match.
420         (global array keywords[]) Make static, change form.  Update all
421         users to use lex_id_name instead.
422         (lex_is_keyword) New function.
423         (lex_id_to_token) Change interface to use struct substring, update
424         all callers.
425         (lex_id_name) New function.
426
427         * identifier.h: (T_FIRST_KEYWORD) Removed.  Changed users to call
428         lex_is_keyword instead.
429         (T_LAST_KEYWORD) Removed.
430         (T_N_KEYWORDS) Removed.
431         
432 Sat Nov 18 20:46:35 2006  Ben Pfaff  <blp@gnu.org>
433
434         * format.c: (fmt_date_template) Distinguish characters for which a
435         space is output and any date delimiter is allowed on input, from
436         those for which a space is output and only a space is allowed on
437         input.  The former is represented by X, the latter by a space.
438         Also, drop distinction between h and H, changing the former to the
439         latter.
440
441         * data-in.c: Completely rewrite internals to conform to SPSS input
442         formats as closely as possible.
443         (data_in) Changed external interface by replacing the structure
444         that was used as a single argument by a set of arguments.  Updated
445         all callers.
446         (data_in_finite_line) Removed.  Converted all callers to use plain
447         data_in.
448         (data_in_get_integer_format) New function.
449         (data_in_set_integer_format) New function.
450         (data_in_get_float_format) New function.
451         (data_in_set_float_format) New function.
452
453         * data-in.h: (enums DI_IGNORE_ERROR, DI_IMPLIED_DECIMALS) Removed.
454         (struct data_in) Removed.
455
456         * data-out.c: (output_date) Drop each component from the input as
457         it is output, to allow us to drop the distinction between h (a
458         count of hours) and H (the hour of day) template characters.
459         Also, handle new X template character.
460         (output_scientific) Follow more rational rule on when to drop
461         fraction introduced between SPSS 13 and 15.  Updated test case to
462         match new behavior.
463
464 Sat Nov 11 11:41:26 2006  Ben Pfaff  <blp@gnu.org>
465
466         Fix buffer overflow reported by John Darrington.
467
468         * data-out.c (output_bcd_integer): In case of SYSMIS, etc.,
469         realize that DIGITS is a count of nibbles, not of bytes.
470
471 Sat Nov  4 15:59:56 2006  Ben Pfaff  <blp@gnu.org>
472
473         * calendar.c (calendar_offset_to_gregorian) Also return the
474         year-of-day.  Change callers to new interface.
475
476         * data-out.c: Completely rewrite internals to conform to SPSS
477         output formats as completely as possible.
478         (data_out) Change interface to put input parameters before output
479         parameters, for consistency with the style I now prefer.  Update
480         all callers.
481         (data_out_get_integer_format) New public function.
482         (data_out_set_integer_format) New public function.
483         (data_out_get_float_format) New public function.
484         (data_out_set_float_format) New public function.
485
486         * data-out.h: New file.  Move prototype for data_out here, from
487         format.h.
488
489         * format.c: (fmt_step_width) Use equality comparison instead of
490         bitwise and, for clarity.
491         (fmt_is_string) Ditto.
492         (fmt_input_to_output) Fix categories that are translated to F
493         format.
494
495 Sun Nov  5 08:29:34 WST 2006 John Darrington <john@darrington.wattle.id.au>
496
497         * casefilter.c casefilter.h (new files), casefile.c casefile.h 
498         casefile-private.h: Added casefilter to assist commands with missing 
499         values.
500
501 Sat Nov  4 11:47:09 2006  Ben Pfaff  <blp@gnu.org>
502
503         Implement SET ERRORS, SHOW ERRORS.  Fixes bug #17609.
504         
505         * settings.c: (route_errors_to_terminal) New variable.
506         (route_errors_to_listing) New variable. 
507         (get_error_routing_to_terminal) New function.
508         (set_error_routing_to_terminal) New function.
509         (get_error_routing_to_listing) New function.
510         (set_error_routing_to_listing) New function.
511
512         * settings.h: (SET_ROUTE_* enums) Removed, because unused.
513
514 Tue Oct 31 19:58:27 2006  Ben Pfaff  <blp@gnu.org>
515
516         * format.c: Completely rewrite, to achieve better abstraction.
517         Rewrite all references to formats in other files.
518         
519         * format.def: Rewrite and reorganize.
520
521         * settings.c: Move everything related to custom currency formats
522         into format.[ch], changing them in form, so as to group related
523         code and definitions better.  Changed all references to use the
524         new functions.
525         (static var decimal) Removed.
526         (static var grouping) Removed.
527         (static var cc) Removed.
528         (get_decimal) Removed.
529         (set_decimal) Removed.
530         (get_grouping) Removed.
531         (set_grouping) Removed.
532         (get_cc) Removed.
533         (set_cc) Removed.
534
535         * settings.h: (macro CC_CNT) Removed.
536         (macro CC_WIDTH) Removed.
537         (struct custom_currency) Removed.
538
539 Tue Oct 31 19:56:19 2006  Ben Pfaff  <blp@gnu.org>
540
541         * data-in.c (data_in): Use switch statement instead of table, to
542         avoid dependence on the order of the FMT_* enums.
543
544 Tue Oct 31 19:35:36 2006  Ben Pfaff  <blp@gnu.org>
545
546         * data-out.c: (num_to_string) Removed, because it was dead code.
547
548 Tue Oct 31 18:09:24 2006  Ben Pfaff  <blp@gnu.org>
549
550         * data-in.c (parse_trailer): Fix error message.
551
552 Sat Oct 28 11:56:50 2006  Ben Pfaff  <blp@gnu.org>
553
554         * format.c (fmt_is_binary): New function.
555
556 Thu Oct 19 22:59:56 WST 2006 John Darrington <john@darrington.wattle.id.au>
557
558         * procedure.c procedure.h: Encapsulated the static data into a single
559         struct.  
560
561 Sat Oct 14 16:56:44 2006  Ben Pfaff  <blp@gnu.org>
562
563         * casefile.c (casereader_read_xfer): Always initialize the case,
564         even on an error condition.
565
566 Wed Sep 27 09:37:49 WST 2006 John Darrington <john@darrington.wattle.id.au>
567
568         * procedure.c (case_limit_trns_proc): Fixed buglet which rendered the 
569         entire function useless.
570
571 Mon Sep 25 17:11:46 WST 2006 John Darrington <john@darrington.wattle.id.au>
572
573         * casefile-private.h casefile.c casefile.h fastfile.c: Created new
574         casereader method casereader_clone.   
575         
576         * procedure.c pransformations.h: Introduced new type casenum_t
577
578 Thu Sep 21 07:00:30 2006  Ben Pfaff  <blp@gnu.org>
579
580         * variable.c: (width_to_bytes) Rephrase code for clarify.
581
582 Sun Jul 16 19:52:03 2006  Ben Pfaff  <blp@gnu.org>
583
584         * format.c: (fmt_type_from_string) New function.
585         (fmt_to_string) Include decimals in output if the format has
586         decimals, even if the format type does not.  This way, we can
587         accurately reproduce incorrect formats in user output.
588         (check_common_specifier) Make the check for a bad format type an
589         assertion, so we get bug reports if they show up.  Fix message.
590         Check for decimal places with a format type that doesn't allow
591         them.
592         (check_input_specifier) Remove check for FMT_X, which has been
593         deleted.
594         (check_output_specifier) Ditto. 
595
596         * format.def: Remove FMT_T, FMT_X, FMT_DESCEND, FMT_NEWREC.
597
598         * format.h: (macro FMT_TYPE_LEN_MAX) New macro.
599         (struct fmt_desc) Use FMT_TYPE_LEN_MAX in definition.
600         (enum fmt_parse_flags) Removed.
601
602 Mon Jul 17 18:26:21 WST 2006 John Darrington <john@darrington.wattle.id.au>
603
604         * casefile.c casefile.h: Converted to  an abstract base class.
605         * casefile-private.h fastfile.c fastfile.h: New files.
606         * automake.mk procedure.c scratch-writer.c storage-stream.c
607
608 Wed Jul 12 21:02:26 2006  Ben Pfaff  <blp@gnu.org>
609
610         * procedure.c (internal_procedure): Create sink_case with only as
611         many values as the compacted dictionary.
612
613 Wed Jul 12 21:01:00 2006  Ben Pfaff  <blp@gnu.org>
614
615         Remove "debugging" code that caused plenty of false positives and
616         no true positives.
617         
618         * case.h (struct ccase): [DEBUGGING] Remove `this' member.
619
620         * case.c: Remove all references to `this' member.
621
622 Thu Jul  6 19:09:53 2006  Ben Pfaff  <blp@gnu.org>
623
624         Fix link error noted by Jason Stover.
625         
626         * storage-stream.c: Include <assert.h>.
627
628 Tue Jul  4 08:47:35 2006  Ben Pfaff  <blp@gnu.org>
629
630         Fix bug #15766 (/KEEP subcommand on SAVE doesn't fully support
631         ALL) and additional underlying system file issues.
632
633         Thanks to John Darrington for review.
634
635         First problem: var_hash points to variables not owned by the
636         sys-file-reader, which the caller may free or modify.  Use an
637         array of sfm_vars instead, as done earlier (e.g. CVS version
638         1.12).
639         
640         * sys-file-reader.c (struct sfm_reader): Remove var_hash, svars
641         members and remove all code that references it.  Add vars, var_cnt
642         members.  Remove fix_specials member, which was unused.
643         (struct sfm_var) Remove name member, which was unused.
644         (sfm_close_reader) Free vars member instead of var_hash.
645         (compare_var_shortnames) Removed.
646         (hash_var_shortname) Removed.
647         (sfm_open_reader) Fill out vars array.
648         (compare_var_index) Removed.
649         (sfm_read_case) Use vars instead of var_hash.
650         
651         Second problem: we're confused about when we actually have very
652         long strings, causing us to choose incorrectly between slow path
653         and fast path in sfm_read_case.
654
655         * sys-file-reader.c: (sfm_open_reader) Only mark has_vls if we
656         have very long strings, not when we have long variable names,
657         which is an unrelated feature.
658
659 Tue Jun 27 12:06:49 2006  Ben Pfaff  <blp@gnu.org>
660
661         * variable.h: Move var_set and variable parsing declarations to
662         new header, src/language/lexer/variable-parser.h.  Modified lots
663         of files to include the new header.
664
665 Sun Jun 25 22:39:32 2006  Ben Pfaff  <blp@gnu.org>
666
667         * value-labels.c (value_to_string): When there's no value label,
668         format the variable according to its print format, instead of
669         always effectively using A or F format.
670
671 Mon Jun 19 18:05:42 WST 2006 John Darrington <john@darrington.wattle.id.au>
672
673         * casefile.c (casefile_get_random_reader): Nasty hack to get around 
674         the mode assertion.
675
676         * format.c: Removed tortological assertion.
677
678 Fri Jun  9 12:20:09 2006  Ben Pfaff  <blp@gnu.org>
679
680         Reform string library.
681         
682         * file-name.c (fn_interp_vars): Change interface to take a
683         substring as input.  Updated all users.
684         
685 Fri Jun  9 12:11:24 2006  Ben Pfaff  <blp@gnu.org>
686
687         * format.c (measure_is_valid): Really return false when m >=
688         n_MEASURES.
689
690 Tue Jun  6 18:46:26 2006  Ben Pfaff  <blp@gnu.org>
691
692         Implement random access to casefiles, for use in GUI.
693         
694         * casefile.c: (struct casereader) Add `random', `file_ofs',
695         `buffer_ofs' members.
696         (casefile_get_random_reader) New function.
697         (read_open_file) Break part into new function
698         seek_and_fill_buffer().
699         (fill_buffer) Update buffer_ofs, file_ofs.
700         (casereader_seek) New function.
701
702 Tue May 30 19:52:33 WST 2006 John Darrington <john@darrington.wattle.id.au>
703
704         * settings.c: Added call to i18n{done, init}.
705
706 Tue May  9 21:09:17 2006  Ben Pfaff  <blp@gnu.org>
707
708         * procedure.h: Add WARN_UNUSED_RESULT to procedure function
709         prototypes.
710
711 Tue May  9 21:08:05 2006  Ben Pfaff  <blp@gnu.org>
712
713         * casefile.c: Convert many uses of `int' to `bool'.
714
715 Sat May  6 22:49:43 2006  Ben Pfaff  <blp@gnu.org>
716
717         * transformations.c (trns_chain_destroy): Destroy chain's trns
718         member, to fix memory leak.
719
720 Sat May  6 22:48:30 2006  Ben Pfaff  <blp@gnu.org>
721
722         * storage-stream.c (storage_source_decapsulate): Destroy case
723         source to fix memory leak.
724
725 Sat May  6 22:46:47 2006  Ben Pfaff  <blp@gnu.org>
726
727         * scratch-reader.c (scratch_reader_read_case): Copy into existing
728         case passed as argument instead of initializing the argument as a
729         case.  Fixes memory leak that showed up in
730         tests/command/aggregate.sh with scratch files.
731
732 Sat May  6 22:45:55 2006  Ben Pfaff  <blp@gnu.org>
733
734         * procedure.c (proc_done): Destroy default_dict, to fix memory
735         leak.
736
737 Sat May  6 22:44:44 2006  Ben Pfaff  <blp@gnu.org>
738
739         Simplify procedure_with_splits().
740         
741         * procedure.c (struct split_aux_data): Removed case_count member.
742         (procedure_with_splits) Don't initialize case_count.
743         (split_procedure_case_func) Check whether prev_case is null
744         instead of case_count.
745         (split_procedure_end_func) Ditto.
746
747 Sat May  6 22:42:23 2006  Ben Pfaff  <blp@gnu.org>
748
749         * case.c (case_move): Do nothing if dst and src are the same
750         object.
751         (case_try_create) Merge two similar cases.
752         (case_copy) Unshare only if data must be actually copied.
753
754 Sun May  7 10:04:06 WST 2006 John Darrington <john@darrington.wattle.id.au>
755
756         * data-in.c data-out.c dictionary.c sys-file-reader.c
757         sys-file-writer.c variable.c variable.h:  Reworked very long string
758         support for better encapsulation.
759
760 Sat May  6 19:02:00 2006  Ben Pfaff  <blp@gnu.org>
761
762         * value-labels.c (val_labs_can_set_width): New function.
763         (val_labs_set_width) Clear labels if increasing width to long
764         string.
765         (val_labs_destroy) Remove unneeded test for null.
766         
767 Sat May  6 16:14:08 2006  Ben Pfaff  <blp@gnu.org>
768
769         * value-labels.h: Remove unneeded dependency on variable.h.
770
771 Sat May  6 15:58:36 2006  Ben Pfaff  <blp@gnu.org>
772
773         Get rid of `char *c' member in union value, for cleanliness.
774         
775         * value.h: (union value) Remove `c' member.
776
777 Sat May  6 15:36:59 2006  Ben Pfaff  <blp@gnu.org>
778
779         Make dictionary compacting functions a little more general.
780         
781         * sys-file-writer.c (sfm_open_writer): Use
782         dict_compacting_would_change().
783         (does_dict_need_translation) Removed.
784
785 Sat May  6 15:35:42 2006  Ben Pfaff  <blp@gnu.org>
786
787         Make dictionary compacting functions a little more general.
788         
789         * dictionary.c (dict_needs_compaction): Rename
790         dict_compacting_would_shrink().  Update all callers.
791         (dict_compacting_would_change) New function.
792         
793 Sat May  6 14:25:49 2006  Ben Pfaff  <blp@gnu.org>
794
795         * sys-file-writer.c: (does_dict_need_translation) Fix bug:
796         inverted return value (!).
797
798 Sat May  6 13:37:52 2006  Ben Pfaff  <blp@gnu.org>
799
800         Continue reforming procedure execution.  
801
802         * procedure.c: Search and replace "vfm" by "proc".  Notably:
803         (static var vfm_source) Rename proc_source.  Update all
804         references.
805         (static var vfm_sink) Rename proc_sink.  Update all references.
806         
807 Sat May  6 12:38:55 2006  Ben Pfaff  <blp@gnu.org>
808
809         Continue reforming procedure execution.  In this phase, remove
810         PROCESS IF, which was deprecated anyway and can be easily
811         simulated with TEMPORARY followed by SELECT IF.
812
813         * procedure.c: (open_active_file) Don't call
814         add_process_if_trns().
815         (discard_variables) Get rid of redundant call to
816         proc_cancel_all_transformations().
817         (add_process_if_trns) Removed.
818         (process_if_trns_proc) Removed.
819         (process_if_trns_free) Removed.
820
821 Sat May  6 10:58:05 2006  Ben Pfaff  <blp@gnu.org>
822
823         Continue reforming procedure execution.  In this phase, add
824         `const' to the case passed to procedure()'s callback.
825
826         Updated all users of procedure() as well.
827         
828         * procedure.c: (struct write_case_data) Add "const" to ccase
829         parameter for case_func member.
830         (procedure) Add "const" to ccase parameter for proc_func
831         parameter.
832         (multipass_case_func) Make ccase parameter const.
833         (internal_procedure) Add "const" to ccase parameter for case_func
834         parameter.
835         (split_procedure_case_func) Make ccase parameter const.
836         (multipass_split_case_func) Make ccase parameter const.
837         
838 Sat May  6 10:30:33 2006  Ben Pfaff  <blp@gnu.org>
839
840         Continue reforming procedure execution.  In this phase, get rid of
841         the output code for SPLIT FILE groups in procedure.c, which really
842         shouldn't be doing any output.  Move it into the individual
843         procedures instead.  This also adds some flexibility.
844
845         Updated many users of procedure_with_splits() and
846         multipass_procedure_with_splits() to call
847         output_split_file_values() and to deal with increased use of
848         const.
849
850         * procedure.c: (struct split_aux_data) Add "const struct ccase *"
851         parameter to begin_func member.
852         (procedure_with_splits) Add "const struct ccase *" parameter to
853         begin_func parameter.  Make ccase parameter const in proc_func
854         parameter.
855         (split_procedure_case_func) Don't dump split file group.  Pass
856         case to begin_func.
857         (dump_splits) Moved to language/dictionary/split-file.c as
858         output_split_file_values().
859         (struct multipass_split_aux_data) Add "const struct ccase *"
860         parameter to split_func member.
861         (multipass_procedure_with_splits) Add "const struct ccase *"
862         parameter to split_func parameter.
863         (multipass_split_case_func) Save new SPLIT FILE case before
864         outputting case.
865         (multipass_split_output) Pass saved SPLIT FILE case to split_func.
866         
867 Fri May  5 22:48:50 2006  Ben Pfaff  <blp@gnu.org>
868
869         Continue reforming procedure execution.  Change
870         internal_procedure() so that it calls open_active_file() and
871         close_active_file(), which isolates most of the actual procedure
872         functionality.
873
874         * procedure.c: (struct write_case_data) Rename `proc_func' member
875         to `case_func' and update all references.
876         (procedure) Rewrite as one-line wrapper around
877         internal_procedure().
878         (struct multipass_aux_data) New.
879         (multipass_callback) Renamed multipass_case_func().  Use struct
880         multipass_aux_data as auxiliary data.
881         (multipass_end_func) New function.
882         (multipass_procedure) Rewrite as wrapper for internal_procedure()
883         that uses multipass_case_func, multipass_end_func.
884         (internal_procedure) Add `end_func' argument.  Move optimization
885         of trivial case in here.  Move call to open_active_file() and
886         close_active_file() in here.  Now assert that vfm_source is
887         non-null.
888         (procedure_with_splits_callback) Rename
889         split_procedure_case_func().
890         (split_procedure_end_func) New function.
891         (multipass_split_callback) Rename multipass_split_case_func.
892         (multipass_split_end_func) New function.
893         (discard_variables) No need to test for nonnull vfm_source.
894
895 Fri May  5 21:34:02 2006  Ben Pfaff  <blp@gnu.org>
896
897         Continue reforming procedure execution.  Get rid of unused member.
898
899         * procedure.c: (struct write_case_data) Remove `cases_analyzed'
900         member.
901         (write_case) Don't increment cases_analyzed.
902
903 Thu May  4 21:50:11 2006  Ben Pfaff  <blp@gnu.org>
904
905         Continue reforming procedure execution.  In this phase, move
906         procedure.c and procedure.h from src to src/data.  Update
907         makefiles and #includes accordingly.
908
909         * procedure.c: Moved here from src/.
910
911         * procedure.h: Moved here from src/.
912
913 Wed May  3 22:42:12 2006  Ben Pfaff  <blp@gnu.org>
914
915         Continue reforming procedure execution.  In this phase, get rid of
916         many global variables, consolidating procedure execution in
917         procedure.c.  Encapsulate transformations in new "struct
918         trns_chain".  Also, change implementation of N OF CASES, FILTER,
919         and PROCESS IF from special cases to transformations.
920          
921         * automake.mk: (src_data_libdata_a_SOURCES) Add transformations.c,
922         transformations.h.
923
924         * dictionary.c: (global variable default_dict) Move to
925         src/procedure.c.
926
927         * variable.h: (TRNS_*) Move to transformations.h.
928         (struct transformation) Move to transformations.c.
929
930 Thu May  4 13:47:06 WST 2006 John Darrington <john@darrington.wattle.id.au>
931
932         * sys-file-reader.c: Fixed invalid read problems.
933
934 Tue May  2 15:57:10 2006  Ben Pfaff  <blp@gnu.org>
935
936         * storage-stream.c: Add missing function comments.
937
938 Tue May  2 15:50:21 2006  Ben Pfaff  <blp@gnu.org>
939
940         Continue reforming procedure execution.  In this phase, add some
941         new, needed functionality to storage-stream.
942
943         * storage-stream.c: (storage_source_decapsulate) New function.
944
945 Tue May  2 15:43:36 2006  Ben Pfaff  <blp@gnu.org>
946
947         * variable.c (width_to_bytes): Declarations must precede
948         statements for C90 compliance.
949
950 Tue May  2 10:42:05 WST 2006 John Darrington <john@darrington.wattle.id.au>
951
952         * data-out.c, data-in.c, variable.c, variable.h: New functions 
953         copy_mangle and copy_demangle for reading/writing cases; emulates the 
954         way SPSS deals with strings > 255 bytes.
955
956         * sys-file-reader.c sys-file-writer.c: Added support for Record 7, 
957         subtype 14 needed for strings longer than 255 bytes.
958
959         * dictionary.c, format.def, value.c : Updated to use MAX_STRING 
960         instead of literal values. Also fixed some constness issues.
961
962         * format.h: Constness
963
964         * sfm-private.h: Renamed the case_size identifier, since I discovered 
965         that SPSS's respect for this variable is very nominal.
966
967 Mon May  1 15:45:42 2006  Ben Pfaff  <blp@gnu.org>
968
969         Change case limit type from int to size_t.
970
971         * dictionary.c: (struct dictionary) Change type of case_limit
972         member.
973         (dict_get_case_limit) Change return type.
974         (dict_set_case_limit) Change parameter type.
975
976 Wed Apr 26 20:01:19 2006  Ben Pfaff  <blp@gnu.org>
977
978         * variable.h: (struct variable) Rename `reinit' member as `leave'
979         and invert sense.  Fix up all references.
980
981 Wed Apr 26 19:39:28 2006  Ben Pfaff  <blp@gnu.org>
982
983         Continue reforming procedure execution.  In this phase, break
984         procedure.c into multiple files.
985         
986         * automake.mk: (src_data_libdata_a_SOURCES) Add all the new files.
987
988         * case-sink.c: New file.
989
990         * case-sink.h: New file.
991         
992         * case-source.c: New file.
993
994         * case-source.h: New file.
995         
996         * storage-stream.c: New file.
997
998         * storage-stream.h: New file.
999
1000 Wed Apr 26 14:55:19 2006  Ben Pfaff  <blp@gnu.org>
1001
1002         * variable.h: (struct variable) Remove `init' member and all
1003         references to it from other files.  It was initialized in several
1004         places, but nothing really ever used it for anything worthwhile.
1005         Thanks to Jason Stover for pointing out how confusing this
1006         member is.
1007
1008 Sun Apr 23 22:04:45 2006  Ben Pfaff  <blp@gnu.org>
1009
1010         Continue reforming error message support.  In this phase, get rid
1011         of message "titles" and put the message text in `struct error'.
1012         Now `struct error' encapsulates a message more properly.
1013         
1014         * casefile.c: (io_error) Use err_msg() instead of err_vmsg().
1015         Format message ourselves.
1016
1017         * data-in.c: (vdls_error) Ditto.
1018
1019         * por-file-reader.c: (error) Ditto.
1020
1021         * sys-file-reader.c: (corrupt_msg) Ditto.
1022
1023 Sun Apr 16 18:49:51 2006  Ben Pfaff  <blp@gnu.org>
1024
1025         GNU standards require "file name" instead of "filename" in
1026         documentation.  It's nice for our code to follow the convention
1027         too.
1028         
1029         * casefile.c: (struct casefile) Rename `filename' member to
1030         `file_name'.  Updated all references.
1031
1032         * file-name.c: [!unix] (struct file_identity) Rename
1033         normalized_filename member to normalized_file_name.  Updated all
1034         references.
1035
1036 Sun Apr 16 18:35:33 2006  Ben Pfaff  <blp@gnu.org>
1037
1038         We don't really support anything but Unix-like environments well,
1039         so we might as well de-obfuscate by writing directory and path
1040         separators explicitly.
1041
1042         * file-name.h: (macro DIR_SEPARATOR) Removed.  Changed all usages
1043         to just '/'.
1044         (macro PATH_SEPARATOR) Removed.  Changed all usages to just ':'.
1045         (macro DIR_SEPARATOR_STRING) Removed.  Changed all usages to just
1046         "/".
1047         (macro PATH_SEPARATOR_STRING) Removed.  Changed all usages to just
1048         ":"
1049
1050 Sun Apr 16 18:28:35 2006  Ben Pfaff  <blp@gnu.org>
1051
1052         GNU standards require "file name" instead of "filename" in
1053         documentation.  It's nice for our code to follow the convention
1054         too.
1055         
1056         * filename.c: Rename to file-name.c.
1057
1058         * filename.h: Rename to file-name.h.  Update all inclusions.
1059         Update header guards.
1060
1061         * automake.mk: Update file names.
1062
1063 Sun Apr 16 16:42:47 2006  Ben Pfaff  <blp@gnu.org>
1064
1065         * filename.c: (fn_dirname) Renamed fn_dir_name(), all references
1066         updated.
1067         (fn_basename) Removed (dead code).
1068         (fn_absolute_p) Renamed fn_is_absolute(), all references updated.
1069         (fn_special_p) Renamed fn_is_special(), all references updated.
1070         (fn_exists_p) Renamed fn_exists(), all references updated.
1071
1072 Sun Apr 16 16:33:58 2006  Ben Pfaff  <blp@gnu.org>
1073
1074         * filename.c: (fn_tilde_expand) Rewrite for cleaner code.  
1075         Also, now it only tilde-expands file names, not paths.
1076         (fn_search_path) Tilde-expand one directory at a time.
1077
1078 Sun Apr 16 16:28:06 2006  Ben Pfaff  <blp@gnu.org>
1079
1080         * filename.c: (fn_search_path) rewrite for cleaner code.  Also,
1081         get rid of non-Unixlike version of the code, which has probably
1082         never been tested.
1083         (fn_prepend_dir) Removed (dead code).
1084
1085         * filename.h: (macro DIR_SEPARATOR_STRING) New.
1086         (macro PATH_SEPARATOR_STRING) New.
1087 Sun Apr 16 16:05:28 2006  Ben Pfaff  <blp@gnu.org>
1088
1089         Continue reforming error message support.  In this phase, we get
1090         rid of VM() and the other msg() support for "verbosity", replacing
1091         it by a new function verbose_msg().
1092
1093         * filename.c: (fn_search_path) Use verbose_msg() instead of
1094         msg(VM(), ...).  
1095
1096 Sat Apr 15 19:53:19 2006  Ben Pfaff  <blp@gnu.org>
1097
1098         * sfm-private.h: Get rid of #defines after #error, which makes no
1099         sense.
1100
1101 Sat Apr 15 19:48:57 2006  Ben Pfaff  <blp@gnu.org>
1102
1103         Get rid of our own int32 type in favor of the standard int32_t
1104         type.
1105         
1106         * sfm-private.h: (int32 macro) Don't define this anymore.  Do
1107         include <stdint.h>.
1108
1109         * sys-file-reader.c: Use int32_t instead of int32 throughout.
1110         
1111         * sys-file-writer.c: Use int32_t instead of int32 throughout.
1112
1113 Sat Apr 15 19:36:47 2006  Ben Pfaff  <blp@gnu.org>
1114
1115         Remove ill-considered file routines that are no longer used.
1116         
1117         * filename.c: (fn_open_ext) Removed.
1118         (fn_close_ext) Removed.
1119
1120         * filename.h: (struct file_ext) Removed.
1121
1122 Mon Apr  3 13:22:39 2006  Ben Pfaff  <blp@gnu.org>
1123
1124         * variable.c (var_is_valid_name): Move declarations before code
1125         for C90 compliance.
1126
1127 Tue Apr  4 15:28:40 WST 2006 John Darrington <john@darrington.wattle.id.au>
1128
1129         * filename.ch (fn_interp_vars): Fixed small buglet.
1130
1131 Tue Mar 28 13:47:16 WST 2006 John Darrington <john@darrington.wattle.id.au>
1132         
1133         * filename.[ch] (fn_interp_vars): Changed the signature and semantics
1134         so as to modify the string inline.   Thus makeing it easier to
1135         destroy the results when no longer needed.
1136         
1137 2006-03-25  Jason Stover  <jhs@math.gcsu.edu>
1138
1139         * category.c (cat_stored_values_destroy): Fixed memory leak.
1140
1141 Fri Mar 24 18:15:41 2006  Ben Pfaff  <blp@gnu.org>
1142
1143         Add some missing frees.  Thanks to John Darrington for reporting
1144         these.
1145
1146         * any-writer.c (any_writer_close): Free writer.
1147
1148         * any-reader.c (any_reader_close): Free reader.
1149
1150 Mon Mar 20 16:33:53 2006  Ben Pfaff  <blp@gnu.org>
1151
1152         * por-file-reader.c: (error) Mark as NO_RETURN.
1153
1154 Sat Mar 11 15:06:07 WST 2006 John Darrington <john@darrington.wattle.id.au>
1155
1156         * settings.c: Changed default value of scompress to true.
1157
1158 Sat Mar  4 13:22:51 2006  Ben Pfaff  <blp@gnu.org>
1159
1160         * sfm-private.h: Include variable.h, to get SHORT_NAME_LEN.
1161
1162         * value.h: Remove check on MAX_SHORT_STRING, which I don't think
1163         really applies.
1164
1165         * variable.h: Move definition of SHORT_NAME_LEN, LONG_NAME_LEN
1166         here from pref.h.orig.
1167
1168 Sat Mar  4 12:50:48 WST 2006 John Darrington <john@darrington.wattle.id.au>
1169
1170         * sys-file-reader.c: Fixed bug reading compressed files.
1171
1172 Thu Mar  2 08:40:33 WST 2006 John Darrington <john@darrington.wattle.id.au>
1173
1174         * Numerous renames.  See src/ChangeLog for details.
1175         
1176         * Moved files from src directory