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