c058cc2a50cad9d61042dd44d95185aea2f412d3
[pspp-builds.git] / src / data / ChangeLog
1 2007-06-06  Ben Pfaff  <blp@gnu.org>
2
3         Until now, the procedure code has provided a case to the
4         case_source, which has filled in the data values that come from
5         the active file.  "Left" data values that don't come from the
6         active file naturally stay the same from case to case, because the
7         procedure code keeps using that same case.
8
9         One of the compromises that comes with the new procedure code is
10         that the active file allocates and provides its own case, which
11         the procedure code then has to resize to provide room for any
12         other variables that should go in the case and then fill in the
13         values of "left" variables.  Then, when we're done with that case,
14         we have to save the values of "left" variables to copy into the
15         next case read from the active file.
16
17         The caseinit code helps with this.
18
19         * automake.mk: Add new files.
20
21         * caseinit.c: New file. 
22
23         * caseinit.h: New file. 
24
25 2007-06-06  Ben Pfaff  <blp@gnu.org>
26
27         * value.h (value_cnt_from_width): New function.
28
29         * variable.c (var_get_value_cnt): Use new function.
30
31 2007-06-06  Ben Pfaff  <blp@gnu.org>
32
33         Add casegrouper, to allow cases read from a given casereader to be
34         broken into groups, each of which has its own casereader.
35         Generally cases are grouped based on having equal values for some
36         set of variables.
37
38         * automake.mk: Add new files.
39
40         * casegrouper.c: New file.
41
42         * casegrouper.h: New file.
43
44 2007-06-06  Ben Pfaff  <blp@gnu.org>
45
46         Add interface to lexicographical ordering of cases.
47
48         * automake.mk: Add new files.
49
50         * case-ordering.c: New file.
51
52         * case-ordering.h: New file.
53
54 2007-06-06  Ben Pfaff  <blp@gnu.org>
55
56         Add casereaders and casewriters, the basis of the new data processing
57         implementation.  A casereader is a uniform interface to reading cases
58         from a data source; a casewriter is a uniform interface to writing
59         cases to a data sink.
60
61         * automake.mk: Add new files.
62         
63         * casereader-filter.c: New file.
64         
65         * casereader-provider.h: New file.
66
67         * casereader-translator.c: New file.
68         
69         * casereader.c: New file.
70         
71         * casereader.h: New file.
72         
73         * casewriter-provider.h: New file.
74         
75         * casewriter-translator.c: New file.
76         
77         * casewriter.c: New file.
78         
79         * casewriter.h: New file.
80
81 2007-06-06  Ben Pfaff  <blp@gnu.org>
82
83         "casewindow" data structure that extends the deque (from libpspp)
84         of cases with the ability to dump cases to disk if we get too many
85         of them in memory.
86
87         * automake.mk: Add new files.
88
89         * casewindow.c: New file.
90
91         * casewindow.h: New file.
92
93 2007-06-06  Ben Pfaff  <blp@gnu.org>
94
95         sparse_cases data structure that augments a sparse_array of cases
96         with the ability to dump cases to disk if we get too many cases in
97         memory.
98
99         * automake.mk: Add new files.
100
101         * sparse-cases.c: New file.
102
103         * sparse-cases.h: New file.
104
105 2007-06-06  Ben Pfaff  <blp@gnu.org>
106
107         Adds a low-level on-disk case array data structure.
108         
109         * automake.mk: Add new files.
110
111         * case-tmpfile.c: New file.
112
113         * case-tmpfile.h: New file.
114
115 2007-06-06  Ben Pfaff  <blp@gnu.org>
116
117         In a couple of places we calculate the maximum number of cases to
118         keep in memory based on the user-defined workspace.  Enable
119         centralizing the calculation through a new function.
120         
121         * settings.c (get_workspace_cases): New function.
122
123 2007-06-06  Ben Pfaff  <blp@gnu.org>
124
125         The casenumber type is defined in transformations.h, but case.h is
126         a more sensible place.  Move it.
127
128         * case.h (CASENUMBER_MAX): New macro.
129         (typedef casenumber): Move here, from transformations.h.
130
131 2007-06-03  Ben Pfaff  <blp@gnu.org>
132
133         Slightly generalize case_to_values and case_from_values functions.
134
135         * case.c (case_to_values): Rename case_copy_out, change interface.
136         (case_from_values): Rename case_copy_in, change interface.
137
138         * fastfile.c (fastfilereader_get_next_case): Update caller.
139         (write_case_to_disk): Ditto.
140
141 2007-06-02  Ben Pfaff  <blp@gnu.org>
142
143         Clean up after a forgotten part of patch #5829.
144         
145         * casedeque.h: Remove unused file.
146
147         * automake.mk: Remove casedeque.h from sources.
148
149 2007-05-10  Jason Stover  <jhs@math.gcsu.edu>
150
151         * category.c: Removed redundant #include
152
153 2007-05-06  Ben Pfaff  <blp@gnu.org>
154
155         Abstract the documents within a dictionary a little better.
156         Thanks to John Darrington for suggestion, initial version, and
157         review.  Patch #5917.
158
159         * dictionary.c (struct dictionary): Change `documents' member from
160         char * to struct string.
161         (dict_clear): Destroy struct string.
162         (dict_get_documents): Convert struct string to char *.
163         (dict_set_documents): Set struct string.  Pad to 80-character
164         multiple.
165         (dict_clear_documents): New function.
166         (dict_add_document_line): New function.
167         (dict_get_document_line_cnt): New function.
168         (dict_get_document_line): New function.
169
170         * dictionary.h (macro DOC_LINE_LENGTH): New macro.
171
172         * sys-file-reader.c (read_documents): Use new document functions.
173
174 2007-04-19 John Darrington <john@darrington.wattle.id.au>
175
176         * sys-file-reader.c: When reading a system file which has no 
177         long name table, automatically create one where the long names 
178         are the lower case versions of the short names.
179         
180 2007-04-22  Ben Pfaff  <blp@gnu.org>
181
182         * dictionary.c (dict_set_split_vars): dict_destroy expects that
183         dict_clear will free most data related to the dictionary.
184         dict_clear does a decent job, except that dict_set_split_vars on
185         some systems won't actually free the dict's "split" member.
186         Instead, it'll allocate a 1-byte region.  Fix this.
187
188         * value.c (value_copy): New function.
189         (value_set_missing): Ditto.
190
191 2007-04-22 John Darrington <john@darrington.wattle.id.au>
192
193         * Deleted existing category.h and moved cat-routines.h into 
194         category.h  Encapsulated struct cat_vals better.
195
196 2007-04-19 John Darrington <john@darrington.wattle.id.au>
197
198         * sys-file-reader.c: When reading a system file which has no 
199         long name table, automatically create one where the long names 
200         are the lower case versions of the short names.
201         
202 2007-04-16 John Darrington <john@darrington.wattle.id.au>
203
204         * sys-file-reader.c: Some versions of Other Software seem to 
205         produce system files with string  variables' measure set to 
206         zero.  We'll assume these are supposed to be nominal variables.
207
208 2007-03-30  Ben Pfaff  <blp@gnu.org>
209
210         * procedure.c: Adapt to new deque data structure.
211
212 Mon Feb 19 10:53:21 2007  John McCabe-Dansted <gmatht@gmail.com>
213                           Ben Pfaff <blp@gnu.org>
214
215         * file-name.c: Mingw compatibility fixes.
216         (fn_search_path): Use ISSLASH instead of comparing against '/'
217         directly.
218         (fn_dir_name): Use dir_name from gnulib.
219         (fn_is_absolute): Use IS_ABSOLUTE_FILE_NAME from gnulib.
220         (fn_get_identity): Use GetFullPathName instead of canonicalize
221         from gnulib, because the latter does not fully support
222         Windows-style path names.  Use this implementation based on the
223         detected presence of Windows instead of the absence of Unix, since
224         the new implementation is Windows-specific.
225         (fn_compare_file_identities): In Windows implementation, compare
226         names case-insensitively.
227
228 Sun Feb 18 13:28:02 2007  Ben Pfaff  <blp@gnu.org>
229
230         * make-file.c: Don't include mkstemp.h, because gnulib now causes
231         <stdlib.h> to have the same effect.
232
233 Sun Feb 18 11:20:24 2007  Ben Pfaff  <blp@gnu.org>
234
235         * por-file-reader.c: Add missing _() around messages.
236
237 Sun Feb 11 20:44:13 2007  Ben Pfaff  <blp@gnu.org>
238
239         * make-file.c: Include "mkstemp.h", without which linking on
240         mingw32 fails.
241
242 Thu Feb  8 14:59:05 2007  Ben Pfaff  <blp@gnu.org>
243  
244         Reduce platform dependence.
245  
246         * file-name.c (fn_tilde_expand): Removed, and removed calls to it.
247         Everywhere we using this, we really should have just depended on
248         the shell to expand tildes.
249         (fn_search_path): Simplify, given that we don't do tilde expansion
250         any longer.
251         (fn_normalize): Removed.  Caller changed to use the canonicalize
252         module from gnulib.
253         (fn_get_cwd): Removed.  Only user was fn_normalize.
254         (fn_is_absolute): Really only test for absolute names.
255         (fn_is_special): Use pipe files if HAVE_POPEN, not if we're in
256         unix.
257         (fn_readlink): Removed, as it was only used fn_normalize.
258         (fn_exists): Assume the stat function is available; gnulib does.
259         (fn_open): Use pipe files if HAVE_POPEN, not if we're in unix.
260  
261 Sat Feb  3 21:52:17 2007  Ben Pfaff  <blp@gnu.org>
262
263         * dictionary.c (dict_create_vector_assert): New function.
264
265 Wed Feb  7 21:25:15 2007  Ben Pfaff  <blp@gnu.org>
266
267         * file-name.c (fn_normalize): Correct name of function
268         fn_is_special.  Thanks to John McCabe-Dansted <gmatht@gmail.com>
269         for pointing this out.
270
271 Thu Feb  1 16:53:37 2007  Ben Pfaff  <blp@gnu.org>
272
273         We are using a single member in struct file_handle, the "name"
274         field, for more than one purpose.  When it begins with '"', it's a
275         file name; otherwise, it's a token that can be used to identify
276         it.  When that assertion fires, it's because we searched for the
277         name case-sensitively as a file name (so that there was no match),
278         and then we try to insert it case-insensitively as a token, which
279         fails because duplicates aren't allowed.
280
281         Solution: break the two purposes into two separate fields.  This
282         fixes the problem and likely makes the code easier to read too.
283
284         Fixes bug #18922.  Thanks to John Darrington for bug report and
285         review.
286
287         * file-handle-def.c (struct file_handle): New `id' member.
288         (fh_from_name): Rename fh_from_id.  Update all callers.
289         (create_handle): New `id' parameter.  Update all callers.
290         (fh_create_file): Ditto.
291         (fh_get_id): New function.
292
293 Mon Jan 15 16:18:10 2007  Ben Pfaff  <blp@gnu.org>
294
295         * case.c (case_is_null): Change return type to bool.
296
297 Mon Jan 15 10:57:28 2007  Ben Pfaff  <blp@gnu.org>
298
299         Add debugging code.
300         
301         * case.c (case_clone) [DEBUGGING]: When debugging, don't use
302         reference counting to share data.  This makes it easy for
303         valgrind, etc. to find accesses to cases that have been destroyed
304         but have been kept around by another user's ref-count.  This often
305         happens when the data set is small enough to find in memory; if a
306         bigger data set that would overflow to disk were used, then data
307         corruption would occur.
308
309 Mon Jan 15 10:55:18 2007  Ben Pfaff  <blp@gnu.org>
310
311         Simplify code.
312
313         * case.c (case_unshare): Make it check internally whether the
314         ref_cnt is greater than 1, so that the callers don't have to.
315         Update callers not to check.
316
317 Mon Jan 15 10:53:01 2007  Ben Pfaff  <blp@gnu.org>
318
319         Before, I was thinking that I might want to get rid of reference
320         counting at some point.  Now, I'm pretty sure that it's here to
321         stay.  Thus, because we have to store the value_cnt anyway for
322         reference-counted cases, we might as well expose it to users.
323
324         * case.c (case_get_value_cnt): New function.
325         (case_resize): Drop OLD_CNT argument.  Update all callers.  Only
326         resize case if its size actually changed.
327
328         * casefile.c (casefile_append_xfer): Use case_get_value_cnt
329         instead of peeking inside struct case directly.
330         (casefile_append): Ditto.
331
332 Mon Jan 15 10:50:22 2007  Ben Pfaff  <blp@gnu.org>
333
334         Get rid of the inlines for the case functions, which made the
335         header file hard to read.  (Also, in testing with "-O2 -DNDEBUG",
336         the inlines didn't speed up "make check" at all, which is not a
337         perfect benchmark but seems indicative.)
338         
339         * case.c: Remove #ifdef DEBUGGING...#endif around many function
340         definitions.  Remove some assertions on nonnull pointers that were
341         redundant with a pointer dereference soon after in the function.
342         Also:
343         (struct case_data): Move definition here from case.h.
344         (case_data): Ditto.
345         (case_num): Ditto.
346         (case_str): Ditto.
347         (case_data_wr): Ditto.
348         
349 Sun Jan 14 21:41:12 2007  Ben Pfaff  <blp@gnu.org>
350
351         * automake.mk: Add casedeque.h to sources.
352         
353         * casedeque.h: New file.
354
355         * procedure.c: (struct dataset) Change lag_count, lag_head,
356         lag_queue member into single struct casedeque member.  Update all
357         users to use the casedeque instead.
358         (lag_case) Removed.
359
360 Sun Jan 14 21:43:12 2007  Ben Pfaff  <blp@gnu.org>
361
362         * procedure.c: Simplify lagged cases interface.  Updated all
363         clients--well, the only client--to use the simplified interface.
364         (dataset_n_lag) Removed.
365         (dataset_set_n_lag) Removed.
366         (dataset_need_lag) New function.
367
368 Tue Jan  9 07:20:05 WST 2007 John Darrington <john@darrington.wattle.id.au>
369
370         * dictionary.c procedure.c: More changes to ensure that callbacks occur
371         whenever appropriate, but only when the dataset/dictionary is in a 
372         consistent state.
373
374 Sun Jan  7 08:33:04 WST 2007 John Darrington <john@darrington.wattle.id.au>
375
376         * dictionary.c dictionary.h : Added callbacks for change of filter and 
377         split variables.  Refactored some code to ensure that callbacks get
378         invoked when appropriate.
379
380         * procedure.c (proc_cancel_temporary_transformations): Make sure that 
381         replace_dict callback occurs when permanent_dict replaces the current
382         dictionary.
383
384 Wed Jan  3 11:02:11 WST 2007 John Darrington <john@darrington.wattle.id.au>
385
386         * dictionary.c dictionary.h : Added callback for when the weight 
387         variable of a dictionary changes.
388
389 Mon Jan  1 10:36:26 WST 2007 John Darrington <john@darrington.wattle.id.au>
390
391         * dictionary.c dictionary.h : Added replace_source and replace_dict
392         callbacks, and functions to deal with them.
393
394 Fri Dec 22 13:56:08 2006  Ben Pfaff  <blp@gnu.org>
395
396         Simplify missing value handling.
397
398         * missing-values.h (enum mv_class): New type.
399         (enum mv_type): Moved definition into missing-values.c and renamed
400         each MV_* to MVT_*, to distinguish them from the exposed mv_class
401         enums.  Updated all uses.
402         (struct missing_values): Changed type of `type' from `enum
403         mv_type' to `int' because the definition is no longer exposed.
404         
405         * missing-values.c (mv_is_value_missing): Add new enum mv_class
406         parameter.  Update all callers.
407         (mv_is_num_missing): Ditto.
408         (mv_is_str_missing): Ditto.
409         (mv_is_value_user_missing): Removed.  Changed callers to use
410         mv_is_value_missing.
411         (mv_is_num_user_missing): Removed.  Changed callers to use
412         mv_is_num_missing.
413         (mv_is_str_user_missing): Removed.  Changed callers to use
414         mv_is_str_missing.
415         (mv_is_value_system_missing): Removed.  Changed callers to use
416         mv_is_value_missing.
417         (mv_set_type): Removed.  Changed callers to use mv_clear.
418         (mv_clear): New function.
419         
420         * variable.c (var_is_value_missing): Add new enum mv_class
421         parameter.  Update all callers.
422         (var_is_num_missing): Ditto.
423         (var_is_str_missing): Ditto.
424         (var_is_value_user_missing): Removed.  Changed callers to use
425         var_is_value_missing.
426         (var_is_num_user_missing): Removed.  Changed callers to use
427         var_is_num_missing.
428         (var_is_str_user_missing): Removed.  Changed callers to use
429         var_is_str_missing.
430         (var_is_value_system_missing): Removed.  Changed callers to use
431         var_is_value_missing.
432         
433         * casefilter.c (struct casefilter): Use enum mv_class in place of
434         bool.
435         (casefilter_variable_missing): Adapt to new member.
436         (casefilter_create): Change signature to take enum mv_class,
437         update callers.
438
439 Fri Dec 22 20:08:38 WST 2006 John Darrington <john@darrington.wattle.id.au>
440
441         * casefile-factory.h fastfile-factory.c fastfile-factory.h: New files.
442
443         * case-sink.c case-sink.h procedure.c procedure.h 
444           storage-stream.c: Now uses the factory.
445         
446 Sat Dec 16 22:05:18 2006  Ben Pfaff  <blp@gnu.org>
447
448         Make it possible to pull cases from the active file with a
449         function call, instead of requiring indirection through a callback
450         function.
451
452         * case-source.h (struct case_source_class): Change ->read function
453         to return a single case, instead of calling a callback function
454         for each case.  Change ->destroy function to return an error
455         status.
456
457         * case-source.c (free_case_source): Pass along the value returned
458         by the case_source ->destroy function.
459
460         * procedure.c (struct write_case_data): Removed.
461         (struct dataset): Added some members to track procedure state.
462         (procedure): Optimize the trivial case at this level.
463         (internal_procedure): Re-implement in terms of proc_open,
464         proc_read, proc_close.
465         (proc_open) New function.
466         (proc_read) New function.
467         (proc_close) New function.
468         (write_case) Moved into proc_read.
469         (close_active_file) Moved closing of data source into proc_close.
470
471         * storage-source.c: Rewrote to conform with modified
472         case_source_class interface.
473
474         * transformations.c (trns_chain_execute): Added argument to allow
475         starting execution from an arbitrary transformation.  Updated
476         callers.
477
478         * transformations.h (enum TRNS_NEXT_CASE) Renamed TRNS_END_CASE.
479
480 Sat Dec 16 14:09:25 2006  Ben Pfaff  <blp@gnu.org>
481
482         * sys-file-reader.c (read_display_parameters): Don't assume that
483         MEASURE_* and ALIGN_* have the same values found in system files.
484
485         * sys-file-writer.c (write_variable_display_parameters): Ditto.
486
487         * variable.h: Change MEASURE_NOMINAL, MEASURE_ORDINAL,
488         MEASURE_SCALE to be 0-based instead of 1-based.  This also fixes
489         the value of n_MEASURES, which was off by 1 (at least from my
490         point of view).
491
492 Sat Dec 16 12:17:34 WST 2006 John Darrington <john@darrington.wattle.id.au>
493
494         * dictionary.c dictionary.h vardict.h variable.c: Added optional
495                 callbacks which are invoked when the dictionary or its 
496                 variables are changed.  
497         
498         * missing-values.c missing-values.h value-labels.c: Tidied up
499                 consistency checks, and made some of them return false 
500                 instead of assert-failing. 
501
502 Wed Dec 13 19:30:11 2006  Ben Pfaff  <blp@gnu.org>
503
504         * calendar.c (calendar_days_in_month): New function.
505
506 Mon Dec 11 07:53:39 2006  Ben Pfaff  <blp@gnu.org>
507
508         * value-labels.c (hash_int_val_lab): Only hash as many bytes as
509         the value label's width.
510
511 Sun Dec 10 14:21:29 2006  Ben Pfaff  <blp@gnu.org>
512
513         * sfm-private.h: Move contents into sys-file-writer.c, which is
514         the only remaining user.  Removed Borland C++-specific directives.
515         
516         * sys-file-reader.c: Clean up and rewrite entire file.  The
517         rewritten version is simpler and better abstracted, and should be
518         easier to maintain and extend.  It avoids using structures to read
519         file data, which is prone to padding variations among compilers.
520         It should also handle non-IEEE 754 system files, although I
521         haven't been able to find any.  It has been tested against many
522         .sav files obtained from the Web and found to produce the same
523         results as the earlier version of the code, or in some cases
524         improved results.  It is more tolerant of format variations found
525         in the wild.
526
527         * sys-file-reader.h (struct sfm_read_info): Removed `big_endian'
528         member, putting an enum integer_format in its place.  New member
529         `float_format'.  Changed `compressed' member to type bool.
530
531 Sun Dec 10 13:48:53 2006  Ben Pfaff  <blp@gnu.org>
532
533         * dictionary.c (dict_delete_consecutive_vars): New function.
534
535 Sat Dec  9 20:08:25 2006  Ben Pfaff  <blp@gnu.org>
536
537         * file-name.c (fn_search_path): Remove prefix arg that was unused
538         by any caller.  Updated all callers.
539
540 Sat Dec  9 20:04:22 2006  Ben Pfaff  <blp@gnu.org>
541
542         * format.c (fmt_dollar_template): Use user's decimal point
543         character.  Add assertion.
544
545 Sat Dec  9 20:02:25 2006  Ben Pfaff  <blp@gnu.org>
546
547         * format.c (fmt_dollar_template): New function, based on
548         dollar_format_template from var-type-dialog.c.
549
550 Sat Dec  9 18:05:59 2006  Ben Pfaff  <blp@gnu.org>
551
552         * data-out.c (output_scientific): Fix bad assumption that "buf" is
553         null-terminated.
554         
555 Sat Dec  9 17:23:23 2006  Ben Pfaff  <blp@gnu.org>
556
557         Finish converting struct variable to an opaque type.  In this
558         phase, we add remaining setter and getter functions, convert the
559         remaining PSPP code to use them, and do a bunch of cleanup.  The
560         resulting changes are pervasive but mostly trivial, and only the
561         notable changes are logged.
562         
563         * automake.mk (src_data_libdata_a_SOURCES): Add the new source
564         files.
565         
566         * case.c (case_data): Renamed case_data_idx.
567         (case_num): Renamed case_num_idx.
568         (case_str): Renamed case_str_idx.
569         (case_data_rw): Renamed case_data_rw_idx.
570
571         * case.h (case_data): New function with old name and an interface
572         that takes a variable instead of an index, which is easier to
573         use.  Updated all callers to use the new interface, or to use the
574         new *_idx function (see above).
575         (case_num): Ditto.
576         (case_str): Ditto.
577         (case_data_rw): Ditto.
578         
579         * category.c (cat_stored_values_destroy): Changed interface to
580         take a struct cat_vals * instead of a struct variable *.
581
582         * dictionary.c (dict_clone): Use new vector_clone function.     
583         (dict_clear) Use new var_destroy function.
584         (add_var) New function.
585         (dict_create_var) Rewrite in terms of dict_create_var_assert.
586         (dict_create_var_assert) Rewrite in terms of add_var.
587         (dict_clone_var) Rewrite in terms of dict_clone_var_assert.
588         (dict_clone_var_assert) Rewrite in terms of var_clone, add_var.
589         (dict_lookup_var) Use new var_create, var_destroy functions.
590         (dict_contains_var) Rewrite in terms of new vardict functionality.
591         (set_var_dict_index) New function.
592         (set_var_case_index) New function.
593         (reindex_vars) New function.
594         (dict_delete_var) Rewrite in terms of new vardict functionality.
595         (dict_reorder_var) Ditto.
596         (dict_reorder_vars) Ditto.
597         (rename_var) New function.
598         (dict_rename_var) Use rename_var.
599         (dict_rename_vars) Use pool to simplify code.  Use rename_var.
600         (dict_get_compacted_idx_to_fv) Rename
601         dict_get_compacted_dict_index_to_case_index, update callers.
602         (dict_create_vector) Use new vector_create function.
603         (dict_clear_vectors) Use new vector_destroy function.
604         (set_var_short_name_suffix) Move here from variable.c, renamed
605         from var_set_short_name_suffix, make static, update caller.
606
607         * sys-file-private.c: New file.  
608         (sfm_width_to_bytes) Moved here from variable.c, renamed from
609         width_to_bytes, update callers.
610
611         * sys-file-private.h: New file.  Later it will supplant
612         sfm-private.h; for now it supplements it.
613         (macro MIN_VERY_LONG_STRING) New macro.
614         (macro EFFECTIVE_LONG_STRING_LENGTH) New macro, from value.h.
615
616         * sys-file-reader.c: Use MIN_VERY_LONG_STRING - 1 where
617         MAX_LONG_STRING was used before.
618
619         * sys-file-writer.c: Ditto.
620
621         * value-labels.c: Change the paradigm here to be that a null
622         pointer is OK for a struct val_labs * in most cases; it just
623         represents an empty set of value labels.
624         (val_labs_copy) A copy of a null set is a null set.
625         (val_labs_count) A null set has 0 labels.
626         (val_labs_replace) Change return type to void.  Rewrite for
627         simplicity.
628         (val_labs_find) A null set does not contain the value.
629         (value_to_string) Moved to variable.c, renamed var_get_value_name,
630         transposed argument order, updated all callers.
631
632         * value.c: New file.
633         (value_dup) Moved here from variable.c.
634         (compare_values) Ditto.
635         (hash_value) Ditto.
636
637         * value.h: (macro MAX_SHORT_STRING) Rewrote for simplicity.
638         (macro MAX_LONG_STRING) Removed, because it was only interesting
639         for system files, not for general code.
640         (macro MAX_VERY_LONG_STRING) Ditto.
641         (macro EFFECTIVE_LONG_STRING_LENGTH) Moved to sys-file-private.h.
642         (macro MAX_ELEMS_PER_VALUE) Removed, as it was unused.
643
644         * vardict.h: New file, for an interface between variables and
645         their dictionaries.
646
647         * variable.c: A lot of functions were moved around, for better
648         organization.
649         (struct variable) Move definition here, from variable.h.
650         (var_type_adj) Removed--makes i18n hard.
651         (var_type_noun) Ditto.
652         (var_create) New function.
653         (var_clone) New function.
654         (var_destroy) New function.
655         (var_set_name) Assert that variable is not in a dictionary.
656         (compare_var_names) Rename compare_vars_by_name and fix a couple
657         of callers who thought the args were strings.
658         (hash_var_name) Rename hash_var_by_name.
659         (compare_var_ptr_names) Rename compare_var_ptrs_by_name.
660         (hash_var_ptr_name) Rename hash_var_ptr_by_name.
661         (var_is_very_long_string) Removed, because it was only interesting
662         to system file code.
663         (var_set_missing_values) Allow the argument to be the wrong width,
664         as long as we can resize it.  Simplify callers who were doing the
665         resizing themselves.
666         (var_get_value_labels) New function.
667         (var_has_value_labels) New function.
668         (var_set_value_labels) New function.
669         (alloc_value_labels) New function.
670         (var_add_value_label) New function.
671         (var_replace_value_label) New function.
672         (var_clear_value_labels) New function.
673         (var_lookup_value_label) New function.
674         (var_get_value_name) Moved here from variable.c, renamed from
675         var_get_value_name, transposed argument order, updated all
676         callers.
677         (var_to_string) Moved here, from variable-label.c.
678         (var_set_leave) New function.
679         (var_get_leave) New function.
680         (var_must_leave) New function.
681         (var_set_short_name_suffix) Moved to dictionary.c, renamed
682         set_var_short_name_suffix.
683         (var_get_dict_index) New function.
684         (var_get_case_index) New function.
685         (var_get_obs_vals) New function.
686         (var_set_obs_vals) New function.
687         (var_has_obs_vals) New function.
688         (var_get_vardict) New function.
689         (var_set_vardict) New function.
690         (var_has_vardict) New function.
691         (var_clear_vardict) New function.
692         (value_dup) Moved to value.c.
693         (compare_values) Ditto.
694         (hash_value) Ditto.
695
696         * variable.h: (enum NUMERIC) Rename VAR_NUMERIC, update all users.
697         (enum ALPHA) Rename VAR_STRING, update all users.
698
699         * vector.c: New file.
700         (struct vector) Moved here, from variable.h.
701         (check_widths) New function.
702         (vector_create) New function.
703         (vector_clone) New function.
704         (vector_destroy) New function.
705         (vector_get_name) New function.
706         (vector_get_var) New function.
707         (vector_get_var_cnt) New function.
708         (compare_vector_ptrs_by_name) New function.
709
710         * vector.h: New file.
711
712 Sun Dec 10 11:32:56 WST 2006 John Darrington <john@darrington.wattle.id.au>
713
714         * casefilter.c (casefilter_variable_missing): Avoided comparision of
715         string variables to SYSMIS.  Thanks to Ben Pfaff for reporting this
716         problem.
717
718 Sat Dec  9 07:18:03 WST 2006 John Darrington <john@darrington.wattle.id.au>
719
720         * value-labels.c (destroy_atoms): New function.
721         * value-labels.c (atom_create): Call destroy_atoms in atexit handler.
722
723 Thu Dec  7 17:38:26 2006  Ben Pfaff  <blp@gnu.org>
724
725         Thanks to Jason Stover for pointing out this problem.
726         
727         * data-out.c (output_number): Use gsl_finite from GSL, which is
728         portable, instead of isfinite, which is not.
729         (power256) Ditto.
730
731 Thu Dec  7 15:22:38 WST 2006 John Darrington <john@darrington.wattle.id.au>
732
733         * variable.c variable.h (value_dup): New function.
734
735 Mon Dec  4 22:20:17 2006  Ben Pfaff  <blp@gnu.org>
736
737         Start converting struct variable to an opaque type.  In this
738         phase, we add a bunch of setter and getter functions and convert
739         most of the PSPP code to use them.  The resulting changes are
740         pervasive but mostly trivial, and only the notable changes are
741         logged.
742         
743         * format.c (fmt_equal): New function.
744         
745         * variable.c (var_type_is_valid): New function.
746         (measure_is_valid) Moved here, from format.c.
747         (alignment_is_valid) Moved here, from format.c.
748         (var_get_name) New function.
749         (var_set_name) New function.
750         (width_to_type) New function.
751         (var_get_type) New function.
752         (var_get_width) New function.
753         (var_set_width) New function.
754         (var_is_numeric) New function.
755         (var_is_alpha) New function.
756         (var_is_short_string) New function.
757         (var_is_long_string) New function.
758         (var_is_very_long_string) New function.
759         (var_get_missing_values) New function.
760         (var_set_missing_values) New function.
761         (var_clear_missing_values) New function.
762         (var_has_missing_values) New function.
763         (var_is_value_missing) New function.
764         (var_is_num_missing) New function.
765         (var_is_str_missing) New function.
766         (var_is_value_user_missing) New function.
767         (var_is_num_user_missing) New function.
768         (var_is_str_user_missing) New function.
769         (var_is_value_system_missing) New function.
770         (var_get_print_format) New function.
771         (var_set_print_format) New function.
772         (var_get_write_format) New function.
773         (var_set_write_format) New function.
774         (var_set_both_formats) New function.
775         (var_get_label) New function.
776         (var_set_label) New function.
777         (var_clear_label) New function.
778         (var_has_label) New function.
779         (var_get_measure) New function.
780         (var_set_measure) New function.
781         (var_get_display_width) New function.
782         (var_set_display_width) New function.
783         (var_get_alignment) New function.
784         (var_set_alignment) New function.
785         (var_get_value_cnt) New function.
786         (var_get_leave) New function.
787         (var_get_short_name) New function.
788
789         * variable.h: (struct variable) Removed "type" and "nv" members;
790         they are now computed from "width" where needed.
791
792 Mon Dec  4 21:38:40 2006  Ben Pfaff  <blp@gnu.org>
793
794         * missing-values.c (mv_resize): Don't write beyond end of the
795         allocated buffer when resizing a long string.
796
797 Sat Dec  2 16:28:32 2006  Ben Pfaff  <blp@gnu.org>
798
799         Clean up identifier code: don't require identifier enumerations to
800         be in a particular order; make better use of string library;
801         expose less of the internals.
802                 
803         * identifier.c: (lex_skip_identifier) Rename lex_id_get_length,
804         change interface.  Updated all callers.
805         (lex_id_match) Change interface to use struct substring, update
806         all callers.
807         (lex_id_match_len) Removed.  Update callers to use lex_id_match.
808         (global array keywords[]) Make static, change form.  Update all
809         users to use lex_id_name instead.
810         (lex_is_keyword) New function.
811         (lex_id_to_token) Change interface to use struct substring, update
812         all callers.
813         (lex_id_name) New function.
814
815         * identifier.h: (T_FIRST_KEYWORD) Removed.  Changed users to call
816         lex_is_keyword instead.
817         (T_LAST_KEYWORD) Removed.
818         (T_N_KEYWORDS) Removed.
819         
820 Sat Nov 18 20:46:35 2006  Ben Pfaff  <blp@gnu.org>
821
822         * format.c: (fmt_date_template) Distinguish characters for which a
823         space is output and any date delimiter is allowed on input, from
824         those for which a space is output and only a space is allowed on
825         input.  The former is represented by X, the latter by a space.
826         Also, drop distinction between h and H, changing the former to the
827         latter.
828
829         * data-in.c: Completely rewrite internals to conform to SPSS input
830         formats as closely as possible.
831         (data_in) Changed external interface by replacing the structure
832         that was used as a single argument by a set of arguments.  Updated
833         all callers.
834         (data_in_finite_line) Removed.  Converted all callers to use plain
835         data_in.
836         (data_in_get_integer_format) New function.
837         (data_in_set_integer_format) New function.
838         (data_in_get_float_format) New function.
839         (data_in_set_float_format) New function.
840
841         * data-in.h: (enums DI_IGNORE_ERROR, DI_IMPLIED_DECIMALS) Removed.
842         (struct data_in) Removed.
843
844         * data-out.c: (output_date) Drop each component from the input as
845         it is output, to allow us to drop the distinction between h (a
846         count of hours) and H (the hour of day) template characters.
847         Also, handle new X template character.
848         (output_scientific) Follow more rational rule on when to drop
849         fraction introduced between SPSS 13 and 15.  Updated test case to
850         match new behavior.
851
852 Sat Nov 11 11:41:26 2006  Ben Pfaff  <blp@gnu.org>
853
854         Fix buffer overflow reported by John Darrington.
855
856         * data-out.c (output_bcd_integer): In case of SYSMIS, etc.,
857         realize that DIGITS is a count of nibbles, not of bytes.
858
859 Sat Nov  4 15:59:56 2006  Ben Pfaff  <blp@gnu.org>
860
861         * calendar.c (calendar_offset_to_gregorian) Also return the
862         year-of-day.  Change callers to new interface.
863
864         * data-out.c: Completely rewrite internals to conform to SPSS
865         output formats as completely as possible.
866         (data_out) Change interface to put input parameters before output
867         parameters, for consistency with the style I now prefer.  Update
868         all callers.
869         (data_out_get_integer_format) New public function.
870         (data_out_set_integer_format) New public function.
871         (data_out_get_float_format) New public function.
872         (data_out_set_float_format) New public function.
873
874         * data-out.h: New file.  Move prototype for data_out here, from
875         format.h.
876
877         * format.c: (fmt_step_width) Use equality comparison instead of
878         bitwise and, for clarity.
879         (fmt_is_string) Ditto.
880         (fmt_input_to_output) Fix categories that are translated to F
881         format.
882
883 Sun Nov  5 08:29:34 WST 2006 John Darrington <john@darrington.wattle.id.au>
884
885         * casefilter.c casefilter.h (new files), casefile.c casefile.h 
886         casefile-private.h: Added casefilter to assist commands with missing 
887         values.
888
889 Sat Nov  4 11:47:09 2006  Ben Pfaff  <blp@gnu.org>
890
891         Implement SET ERRORS, SHOW ERRORS.  Fixes bug #17609.
892         
893         * settings.c: (route_errors_to_terminal) New variable.
894         (route_errors_to_listing) New variable. 
895         (get_error_routing_to_terminal) New function.
896         (set_error_routing_to_terminal) New function.
897         (get_error_routing_to_listing) New function.
898         (set_error_routing_to_listing) New function.
899
900         * settings.h: (SET_ROUTE_* enums) Removed, because unused.
901
902 Tue Oct 31 19:58:27 2006  Ben Pfaff  <blp@gnu.org>
903
904         * format.c: Completely rewrite, to achieve better abstraction.
905         Rewrite all references to formats in other files.
906         
907         * format.def: Rewrite and reorganize.
908
909         * settings.c: Move everything related to custom currency formats
910         into format.[ch], changing them in form, so as to group related
911         code and definitions better.  Changed all references to use the
912         new functions.
913         (static var decimal) Removed.
914         (static var grouping) Removed.
915         (static var cc) Removed.
916         (get_decimal) Removed.
917         (set_decimal) Removed.
918         (get_grouping) Removed.
919         (set_grouping) Removed.
920         (get_cc) Removed.
921         (set_cc) Removed.
922
923         * settings.h: (macro CC_CNT) Removed.
924         (macro CC_WIDTH) Removed.
925         (struct custom_currency) Removed.
926
927 Tue Oct 31 19:56:19 2006  Ben Pfaff  <blp@gnu.org>
928
929         * data-in.c (data_in): Use switch statement instead of table, to
930         avoid dependence on the order of the FMT_* enums.
931
932 Tue Oct 31 19:35:36 2006  Ben Pfaff  <blp@gnu.org>
933
934         * data-out.c: (num_to_string) Removed, because it was dead code.
935
936 Tue Oct 31 18:09:24 2006  Ben Pfaff  <blp@gnu.org>
937
938         * data-in.c (parse_trailer): Fix error message.
939
940 Sat Oct 28 11:56:50 2006  Ben Pfaff  <blp@gnu.org>
941
942         * format.c (fmt_is_binary): New function.
943
944 Thu Oct 19 22:59:56 WST 2006 John Darrington <john@darrington.wattle.id.au>
945
946         * procedure.c procedure.h: Encapsulated the static data into a single
947         struct.  
948
949 Sat Oct 14 16:56:44 2006  Ben Pfaff  <blp@gnu.org>
950
951         * casefile.c (casereader_read_xfer): Always initialize the case,
952         even on an error condition.
953
954 Wed Sep 27 09:37:49 WST 2006 John Darrington <john@darrington.wattle.id.au>
955
956         * procedure.c (case_limit_trns_proc): Fixed buglet which rendered the 
957         entire function useless.
958
959 Mon Sep 25 17:11:46 WST 2006 John Darrington <john@darrington.wattle.id.au>
960
961         * casefile-private.h casefile.c casefile.h fastfile.c: Created new
962         casereader method casereader_clone.   
963         
964         * procedure.c pransformations.h: Introduced new type casenum_t
965
966 Thu Sep 21 07:00:30 2006  Ben Pfaff  <blp@gnu.org>
967
968         * variable.c: (width_to_bytes) Rephrase code for clarify.
969
970 Sun Jul 16 19:52:03 2006  Ben Pfaff  <blp@gnu.org>
971
972         * format.c: (fmt_type_from_string) New function.
973         (fmt_to_string) Include decimals in output if the format has
974         decimals, even if the format type does not.  This way, we can
975         accurately reproduce incorrect formats in user output.
976         (check_common_specifier) Make the check for a bad format type an
977         assertion, so we get bug reports if they show up.  Fix message.
978         Check for decimal places with a format type that doesn't allow
979         them.
980         (check_input_specifier) Remove check for FMT_X, which has been
981         deleted.
982         (check_output_specifier) Ditto. 
983
984         * format.def: Remove FMT_T, FMT_X, FMT_DESCEND, FMT_NEWREC.
985
986         * format.h: (macro FMT_TYPE_LEN_MAX) New macro.
987         (struct fmt_desc) Use FMT_TYPE_LEN_MAX in definition.
988         (enum fmt_parse_flags) Removed.
989
990 Mon Jul 17 18:26:21 WST 2006 John Darrington <john@darrington.wattle.id.au>
991
992         * casefile.c casefile.h: Converted to  an abstract base class.
993         * casefile-private.h fastfile.c fastfile.h: New files.
994         * automake.mk procedure.c scratch-writer.c storage-stream.c
995
996 Wed Jul 12 21:02:26 2006  Ben Pfaff  <blp@gnu.org>
997
998         * procedure.c (internal_procedure): Create sink_case with only as
999         many values as the compacted dictionary.
1000
1001 Wed Jul 12 21:01:00 2006  Ben Pfaff  <blp@gnu.org>
1002
1003         Remove "debugging" code that caused plenty of false positives and
1004         no true positives.
1005         
1006         * case.h (struct ccase): [DEBUGGING] Remove `this' member.
1007
1008         * case.c: Remove all references to `this' member.
1009
1010 Thu Jul  6 19:09:53 2006  Ben Pfaff  <blp@gnu.org>
1011
1012         Fix link error noted by Jason Stover.
1013         
1014         * storage-stream.c: Include <assert.h>.
1015
1016 Tue Jul  4 08:47:35 2006  Ben Pfaff  <blp@gnu.org>
1017
1018         Fix bug #15766 (/KEEP subcommand on SAVE doesn't fully support
1019         ALL) and additional underlying system file issues.
1020
1021         Thanks to John Darrington for review.
1022
1023         First problem: var_hash points to variables not owned by the
1024         sys-file-reader, which the caller may free or modify.  Use an
1025         array of sfm_vars instead, as done earlier (e.g. CVS version
1026         1.12).
1027         
1028         * sys-file-reader.c (struct sfm_reader): Remove var_hash, svars
1029         members and remove all code that references it.  Add vars, var_cnt
1030         members.  Remove fix_specials member, which was unused.
1031         (struct sfm_var) Remove name member, which was unused.
1032         (sfm_close_reader) Free vars member instead of var_hash.
1033         (compare_var_shortnames) Removed.
1034         (hash_var_shortname) Removed.
1035         (sfm_open_reader) Fill out vars array.
1036         (compare_var_index) Removed.
1037         (sfm_read_case) Use vars instead of var_hash.
1038         
1039         Second problem: we're confused about when we actually have very
1040         long strings, causing us to choose incorrectly between slow path
1041         and fast path in sfm_read_case.
1042
1043         * sys-file-reader.c: (sfm_open_reader) Only mark has_vls if we
1044         have very long strings, not when we have long variable names,
1045         which is an unrelated feature.
1046
1047 Tue Jun 27 12:06:49 2006  Ben Pfaff  <blp@gnu.org>
1048
1049         * variable.h: Move var_set and variable parsing declarations to
1050         new header, src/language/lexer/variable-parser.h.  Modified lots
1051         of files to include the new header.
1052
1053 Sun Jun 25 22:39:32 2006  Ben Pfaff  <blp@gnu.org>
1054
1055         * value-labels.c (value_to_string): When there's no value label,
1056         format the variable according to its print format, instead of
1057         always effectively using A or F format.
1058
1059 Mon Jun 19 18:05:42 WST 2006 John Darrington <john@darrington.wattle.id.au>
1060
1061         * casefile.c (casefile_get_random_reader): Nasty hack to get around 
1062         the mode assertion.
1063
1064         * format.c: Removed tortological assertion.
1065
1066 Fri Jun  9 12:20:09 2006  Ben Pfaff  <blp@gnu.org>
1067
1068         Reform string library.
1069         
1070         * file-name.c (fn_interp_vars): Change interface to take a
1071         substring as input.  Updated all users.
1072         
1073 Fri Jun  9 12:11:24 2006  Ben Pfaff  <blp@gnu.org>
1074
1075         * format.c (measure_is_valid): Really return false when m >=
1076         n_MEASURES.
1077
1078 Tue Jun  6 18:46:26 2006  Ben Pfaff  <blp@gnu.org>
1079
1080         Implement random access to casefiles, for use in GUI.
1081         
1082         * casefile.c: (struct casereader) Add `random', `file_ofs',
1083         `buffer_ofs' members.
1084         (casefile_get_random_reader) New function.
1085         (read_open_file) Break part into new function
1086         seek_and_fill_buffer().
1087         (fill_buffer) Update buffer_ofs, file_ofs.
1088         (casereader_seek) New function.
1089
1090 Tue May 30 19:52:33 WST 2006 John Darrington <john@darrington.wattle.id.au>
1091
1092         * settings.c: Added call to i18n{done, init}.
1093
1094 Tue May  9 21:09:17 2006  Ben Pfaff  <blp@gnu.org>
1095
1096         * procedure.h: Add WARN_UNUSED_RESULT to procedure function
1097         prototypes.
1098
1099 Tue May  9 21:08:05 2006  Ben Pfaff  <blp@gnu.org>
1100
1101         * casefile.c: Convert many uses of `int' to `bool'.
1102
1103 Sat May  6 22:49:43 2006  Ben Pfaff  <blp@gnu.org>
1104
1105         * transformations.c (trns_chain_destroy): Destroy chain's trns
1106         member, to fix memory leak.
1107
1108 Sat May  6 22:48:30 2006  Ben Pfaff  <blp@gnu.org>
1109
1110         * storage-stream.c (storage_source_decapsulate): Destroy case
1111         source to fix memory leak.
1112
1113 Sat May  6 22:46:47 2006  Ben Pfaff  <blp@gnu.org>
1114
1115         * scratch-reader.c (scratch_reader_read_case): Copy into existing
1116         case passed as argument instead of initializing the argument as a
1117         case.  Fixes memory leak that showed up in
1118         tests/command/aggregate.sh with scratch files.
1119
1120 Sat May  6 22:45:55 2006  Ben Pfaff  <blp@gnu.org>
1121
1122         * procedure.c (proc_done): Destroy default_dict, to fix memory
1123         leak.
1124
1125 Sat May  6 22:44:44 2006  Ben Pfaff  <blp@gnu.org>
1126
1127         Simplify procedure_with_splits().
1128         
1129         * procedure.c (struct split_aux_data): Removed case_count member.
1130         (procedure_with_splits) Don't initialize case_count.
1131         (split_procedure_case_func) Check whether prev_case is null
1132         instead of case_count.
1133         (split_procedure_end_func) Ditto.
1134
1135 Sat May  6 22:42:23 2006  Ben Pfaff  <blp@gnu.org>
1136
1137         * case.c (case_move): Do nothing if dst and src are the same
1138         object.
1139         (case_try_create) Merge two similar cases.
1140         (case_copy) Unshare only if data must be actually copied.
1141
1142 Sun May  7 10:04:06 WST 2006 John Darrington <john@darrington.wattle.id.au>
1143
1144         * data-in.c data-out.c dictionary.c sys-file-reader.c
1145         sys-file-writer.c variable.c variable.h:  Reworked very long string
1146         support for better encapsulation.
1147
1148 Sat May  6 19:02:00 2006  Ben Pfaff  <blp@gnu.org>
1149
1150         * value-labels.c (val_labs_can_set_width): New function.
1151         (val_labs_set_width) Clear labels if increasing width to long
1152         string.
1153         (val_labs_destroy) Remove unneeded test for null.
1154         
1155 Sat May  6 16:14:08 2006  Ben Pfaff  <blp@gnu.org>
1156
1157         * value-labels.h: Remove unneeded dependency on variable.h.
1158
1159 Sat May  6 15:58:36 2006  Ben Pfaff  <blp@gnu.org>
1160
1161         Get rid of `char *c' member in union value, for cleanliness.
1162         
1163         * value.h: (union value) Remove `c' member.
1164
1165 Sat May  6 15:36:59 2006  Ben Pfaff  <blp@gnu.org>
1166
1167         Make dictionary compacting functions a little more general.
1168         
1169         * sys-file-writer.c (sfm_open_writer): Use
1170         dict_compacting_would_change().
1171         (does_dict_need_translation) Removed.
1172
1173 Sat May  6 15:35:42 2006  Ben Pfaff  <blp@gnu.org>
1174
1175         Make dictionary compacting functions a little more general.
1176         
1177         * dictionary.c (dict_needs_compaction): Rename
1178         dict_compacting_would_shrink().  Update all callers.
1179         (dict_compacting_would_change) New function.
1180         
1181 Sat May  6 14:25:49 2006  Ben Pfaff  <blp@gnu.org>
1182
1183         * sys-file-writer.c: (does_dict_need_translation) Fix bug:
1184         inverted return value (!).
1185
1186 Sat May  6 13:37:52 2006  Ben Pfaff  <blp@gnu.org>
1187
1188         Continue reforming procedure execution.  
1189
1190         * procedure.c: Search and replace "vfm" by "proc".  Notably:
1191         (static var vfm_source) Rename proc_source.  Update all
1192         references.
1193         (static var vfm_sink) Rename proc_sink.  Update all references.
1194         
1195 Sat May  6 12:38:55 2006  Ben Pfaff  <blp@gnu.org>
1196
1197         Continue reforming procedure execution.  In this phase, remove
1198         PROCESS IF, which was deprecated anyway and can be easily
1199         simulated with TEMPORARY followed by SELECT IF.
1200
1201         * procedure.c: (open_active_file) Don't call
1202         add_process_if_trns().
1203         (discard_variables) Get rid of redundant call to
1204         proc_cancel_all_transformations().
1205         (add_process_if_trns) Removed.
1206         (process_if_trns_proc) Removed.
1207         (process_if_trns_free) Removed.
1208
1209 Sat May  6 10:58:05 2006  Ben Pfaff  <blp@gnu.org>
1210
1211         Continue reforming procedure execution.  In this phase, add
1212         `const' to the case passed to procedure()'s callback.
1213
1214         Updated all users of procedure() as well.
1215         
1216         * procedure.c: (struct write_case_data) Add "const" to ccase
1217         parameter for case_func member.
1218         (procedure) Add "const" to ccase parameter for proc_func
1219         parameter.
1220         (multipass_case_func) Make ccase parameter const.
1221         (internal_procedure) Add "const" to ccase parameter for case_func
1222         parameter.
1223         (split_procedure_case_func) Make ccase parameter const.
1224         (multipass_split_case_func) Make ccase parameter const.
1225         
1226 Sat May  6 10:30:33 2006  Ben Pfaff  <blp@gnu.org>
1227
1228         Continue reforming procedure execution.  In this phase, get rid of
1229         the output code for SPLIT FILE groups in procedure.c, which really
1230         shouldn't be doing any output.  Move it into the individual
1231         procedures instead.  This also adds some flexibility.
1232
1233         Updated many users of procedure_with_splits() and
1234         multipass_procedure_with_splits() to call
1235         output_split_file_values() and to deal with increased use of
1236         const.
1237
1238         * procedure.c: (struct split_aux_data) Add "const struct ccase *"
1239         parameter to begin_func member.
1240         (procedure_with_splits) Add "const struct ccase *" parameter to
1241         begin_func parameter.  Make ccase parameter const in proc_func
1242         parameter.
1243         (split_procedure_case_func) Don't dump split file group.  Pass
1244         case to begin_func.
1245         (dump_splits) Moved to language/dictionary/split-file.c as
1246         output_split_file_values().
1247         (struct multipass_split_aux_data) Add "const struct ccase *"
1248         parameter to split_func member.
1249         (multipass_procedure_with_splits) Add "const struct ccase *"
1250         parameter to split_func parameter.
1251         (multipass_split_case_func) Save new SPLIT FILE case before
1252         outputting case.
1253         (multipass_split_output) Pass saved SPLIT FILE case to split_func.
1254         
1255 Fri May  5 22:48:50 2006  Ben Pfaff  <blp@gnu.org>
1256
1257         Continue reforming procedure execution.  Change
1258         internal_procedure() so that it calls open_active_file() and
1259         close_active_file(), which isolates most of the actual procedure
1260         functionality.
1261
1262         * procedure.c: (struct write_case_data) Rename `proc_func' member
1263         to `case_func' and update all references.
1264         (procedure) Rewrite as one-line wrapper around
1265         internal_procedure().
1266         (struct multipass_aux_data) New.
1267         (multipass_callback) Renamed multipass_case_func().  Use struct
1268         multipass_aux_data as auxiliary data.
1269         (multipass_end_func) New function.
1270         (multipass_procedure) Rewrite as wrapper for internal_procedure()
1271         that uses multipass_case_func, multipass_end_func.
1272         (internal_procedure) Add `end_func' argument.  Move optimization
1273         of trivial case in here.  Move call to open_active_file() and
1274         close_active_file() in here.  Now assert that vfm_source is
1275         non-null.
1276         (procedure_with_splits_callback) Rename
1277         split_procedure_case_func().
1278         (split_procedure_end_func) New function.
1279         (multipass_split_callback) Rename multipass_split_case_func.
1280         (multipass_split_end_func) New function.
1281         (discard_variables) No need to test for nonnull vfm_source.
1282
1283 Fri May  5 21:34:02 2006  Ben Pfaff  <blp@gnu.org>
1284
1285         Continue reforming procedure execution.  Get rid of unused member.
1286
1287         * procedure.c: (struct write_case_data) Remove `cases_analyzed'
1288         member.
1289         (write_case) Don't increment cases_analyzed.
1290
1291 Thu May  4 21:50:11 2006  Ben Pfaff  <blp@gnu.org>
1292
1293         Continue reforming procedure execution.  In this phase, move
1294         procedure.c and procedure.h from src to src/data.  Update
1295         makefiles and #includes accordingly.
1296
1297         * procedure.c: Moved here from src/.
1298
1299         * procedure.h: Moved here from src/.
1300
1301 Wed May  3 22:42:12 2006  Ben Pfaff  <blp@gnu.org>
1302
1303         Continue reforming procedure execution.  In this phase, get rid of
1304         many global variables, consolidating procedure execution in
1305         procedure.c.  Encapsulate transformations in new "struct
1306         trns_chain".  Also, change implementation of N OF CASES, FILTER,
1307         and PROCESS IF from special cases to transformations.
1308          
1309         * automake.mk: (src_data_libdata_a_SOURCES) Add transformations.c,
1310         transformations.h.
1311
1312         * dictionary.c: (global variable default_dict) Move to
1313         src/procedure.c.
1314
1315         * variable.h: (TRNS_*) Move to transformations.h.
1316         (struct transformation) Move to transformations.c.
1317
1318 Thu May  4 13:47:06 WST 2006 John Darrington <john@darrington.wattle.id.au>
1319
1320         * sys-file-reader.c: Fixed invalid read problems.
1321
1322 Tue May  2 15:57:10 2006  Ben Pfaff  <blp@gnu.org>
1323
1324         * storage-stream.c: Add missing function comments.
1325
1326 Tue May  2 15:50:21 2006  Ben Pfaff  <blp@gnu.org>
1327
1328         Continue reforming procedure execution.  In this phase, add some
1329         new, needed functionality to storage-stream.
1330
1331         * storage-stream.c: (storage_source_decapsulate) New function.
1332
1333 Tue May  2 15:43:36 2006  Ben Pfaff  <blp@gnu.org>
1334
1335         * variable.c (width_to_bytes): Declarations must precede
1336         statements for C90 compliance.
1337
1338 Tue May  2 10:42:05 WST 2006 John Darrington <john@darrington.wattle.id.au>
1339
1340         * data-out.c, data-in.c, variable.c, variable.h: New functions 
1341         copy_mangle and copy_demangle for reading/writing cases; emulates the 
1342         way SPSS deals with strings > 255 bytes.
1343
1344         * sys-file-reader.c sys-file-writer.c: Added support for Record 7, 
1345         subtype 14 needed for strings longer than 255 bytes.
1346
1347         * dictionary.c, format.def, value.c : Updated to use MAX_STRING 
1348         instead of literal values. Also fixed some constness issues.
1349
1350         * format.h: Constness
1351
1352         * sfm-private.h: Renamed the case_size identifier, since I discovered 
1353         that SPSS's respect for this variable is very nominal.
1354
1355 Mon May  1 15:45:42 2006  Ben Pfaff  <blp@gnu.org>
1356
1357         Change case limit type from int to size_t.
1358
1359         * dictionary.c: (struct dictionary) Change type of case_limit
1360         member.
1361         (dict_get_case_limit) Change return type.
1362         (dict_set_case_limit) Change parameter type.
1363
1364 Wed Apr 26 20:01:19 2006  Ben Pfaff  <blp@gnu.org>
1365
1366         * variable.h: (struct variable) Rename `reinit' member as `leave'
1367         and invert sense.  Fix up all references.
1368
1369 Wed Apr 26 19:39:28 2006  Ben Pfaff  <blp@gnu.org>
1370
1371         Continue reforming procedure execution.  In this phase, break
1372         procedure.c into multiple files.
1373         
1374         * automake.mk: (src_data_libdata_a_SOURCES) Add all the new files.
1375
1376         * case-sink.c: New file.
1377
1378         * case-sink.h: New file.
1379         
1380         * case-source.c: New file.
1381
1382         * case-source.h: New file.
1383         
1384         * storage-stream.c: New file.
1385
1386         * storage-stream.h: New file.
1387
1388 Wed Apr 26 14:55:19 2006  Ben Pfaff  <blp@gnu.org>
1389
1390         * variable.h: (struct variable) Remove `init' member and all
1391         references to it from other files.  It was initialized in several
1392         places, but nothing really ever used it for anything worthwhile.
1393         Thanks to Jason Stover for pointing out how confusing this
1394         member is.
1395
1396 Sun Apr 23 22:04:45 2006  Ben Pfaff  <blp@gnu.org>
1397
1398         Continue reforming error message support.  In this phase, get rid
1399         of message "titles" and put the message text in `struct error'.
1400         Now `struct error' encapsulates a message more properly.
1401         
1402         * casefile.c: (io_error) Use err_msg() instead of err_vmsg().
1403         Format message ourselves.
1404
1405         * data-in.c: (vdls_error) Ditto.
1406
1407         * por-file-reader.c: (error) Ditto.
1408
1409         * sys-file-reader.c: (corrupt_msg) Ditto.
1410
1411 Sun Apr 16 18:49:51 2006  Ben Pfaff  <blp@gnu.org>
1412
1413         GNU standards require "file name" instead of "filename" in
1414         documentation.  It's nice for our code to follow the convention
1415         too.
1416         
1417         * casefile.c: (struct casefile) Rename `filename' member to
1418         `file_name'.  Updated all references.
1419
1420         * file-name.c: [!unix] (struct file_identity) Rename
1421         normalized_filename member to normalized_file_name.  Updated all
1422         references.
1423
1424 Sun Apr 16 18:35:33 2006  Ben Pfaff  <blp@gnu.org>
1425
1426         We don't really support anything but Unix-like environments well,
1427         so we might as well de-obfuscate by writing directory and path
1428         separators explicitly.
1429
1430         * file-name.h: (macro DIR_SEPARATOR) Removed.  Changed all usages
1431         to just '/'.
1432         (macro PATH_SEPARATOR) Removed.  Changed all usages to just ':'.
1433         (macro DIR_SEPARATOR_STRING) Removed.  Changed all usages to just
1434         "/".
1435         (macro PATH_SEPARATOR_STRING) Removed.  Changed all usages to just
1436         ":"
1437
1438 Sun Apr 16 18:28:35 2006  Ben Pfaff  <blp@gnu.org>
1439
1440         GNU standards require "file name" instead of "filename" in
1441         documentation.  It's nice for our code to follow the convention
1442         too.
1443         
1444         * filename.c: Rename to file-name.c.
1445
1446         * filename.h: Rename to file-name.h.  Update all inclusions.
1447         Update header guards.
1448
1449         * automake.mk: Update file names.
1450
1451 Sun Apr 16 16:42:47 2006  Ben Pfaff  <blp@gnu.org>
1452
1453         * filename.c: (fn_dirname) Renamed fn_dir_name(), all references
1454         updated.
1455         (fn_basename) Removed (dead code).
1456         (fn_absolute_p) Renamed fn_is_absolute(), all references updated.
1457         (fn_special_p) Renamed fn_is_special(), all references updated.
1458         (fn_exists_p) Renamed fn_exists(), all references updated.
1459
1460 Sun Apr 16 16:33:58 2006  Ben Pfaff  <blp@gnu.org>
1461
1462         * filename.c: (fn_tilde_expand) Rewrite for cleaner code.  
1463         Also, now it only tilde-expands file names, not paths.
1464         (fn_search_path) Tilde-expand one directory at a time.
1465
1466 Sun Apr 16 16:28:06 2006  Ben Pfaff  <blp@gnu.org>
1467
1468         * filename.c: (fn_search_path) rewrite for cleaner code.  Also,
1469         get rid of non-Unixlike version of the code, which has probably
1470         never been tested.
1471         (fn_prepend_dir) Removed (dead code).
1472
1473         * filename.h: (macro DIR_SEPARATOR_STRING) New.
1474         (macro PATH_SEPARATOR_STRING) New.
1475 Sun Apr 16 16:05:28 2006  Ben Pfaff  <blp@gnu.org>
1476
1477         Continue reforming error message support.  In this phase, we get
1478         rid of VM() and the other msg() support for "verbosity", replacing
1479         it by a new function verbose_msg().
1480
1481         * filename.c: (fn_search_path) Use verbose_msg() instead of
1482         msg(VM(), ...).  
1483
1484 Sat Apr 15 19:53:19 2006  Ben Pfaff  <blp@gnu.org>
1485
1486         * sfm-private.h: Get rid of #defines after #error, which makes no
1487         sense.
1488
1489 Sat Apr 15 19:48:57 2006  Ben Pfaff  <blp@gnu.org>
1490
1491         Get rid of our own int32 type in favor of the standard int32_t
1492         type.
1493         
1494         * sfm-private.h: (int32 macro) Don't define this anymore.  Do
1495         include <stdint.h>.
1496
1497         * sys-file-reader.c: Use int32_t instead of int32 throughout.
1498         
1499         * sys-file-writer.c: Use int32_t instead of int32 throughout.
1500
1501 Sat Apr 15 19:36:47 2006  Ben Pfaff  <blp@gnu.org>
1502
1503         Remove ill-considered file routines that are no longer used.
1504         
1505         * filename.c: (fn_open_ext) Removed.
1506         (fn_close_ext) Removed.
1507
1508         * filename.h: (struct file_ext) Removed.
1509
1510 Mon Apr  3 13:22:39 2006  Ben Pfaff  <blp@gnu.org>
1511
1512         * variable.c (var_is_valid_name): Move declarations before code
1513         for C90 compliance.
1514
1515 Tue Apr  4 15:28:40 WST 2006 John Darrington <john@darrington.wattle.id.au>
1516
1517         * filename.ch (fn_interp_vars): Fixed small buglet.
1518
1519 Tue Mar 28 13:47:16 WST 2006 John Darrington <john@darrington.wattle.id.au>
1520         
1521         * filename.[ch] (fn_interp_vars): Changed the signature and semantics
1522         so as to modify the string inline.   Thus makeing it easier to
1523         destroy the results when no longer needed.
1524         
1525 2006-03-25  Jason Stover  <jhs@math.gcsu.edu>
1526
1527         * category.c (cat_stored_values_destroy): Fixed memory leak.
1528
1529 Fri Mar 24 18:15:41 2006  Ben Pfaff  <blp@gnu.org>
1530
1531         Add some missing frees.  Thanks to John Darrington for reporting
1532         these.
1533
1534         * any-writer.c (any_writer_close): Free writer.
1535
1536         * any-reader.c (any_reader_close): Free reader.
1537
1538 Mon Mar 20 16:33:53 2006  Ben Pfaff  <blp@gnu.org>
1539
1540         * por-file-reader.c: (error) Mark as NO_RETURN.
1541
1542 Sat Mar 11 15:06:07 WST 2006 John Darrington <john@darrington.wattle.id.au>
1543
1544         * settings.c: Changed default value of scompress to true.
1545
1546 Sat Mar  4 13:22:51 2006  Ben Pfaff  <blp@gnu.org>
1547
1548         * sfm-private.h: Include variable.h, to get SHORT_NAME_LEN.
1549
1550         * value.h: Remove check on MAX_SHORT_STRING, which I don't think
1551         really applies.
1552
1553         * variable.h: Move definition of SHORT_NAME_LEN, LONG_NAME_LEN
1554         here from pref.h.orig.
1555
1556 Sat Mar  4 12:50:48 WST 2006 John Darrington <john@darrington.wattle.id.au>
1557
1558         * sys-file-reader.c: Fixed bug reading compressed files.
1559
1560 Thu Mar  2 08:40:33 WST 2006 John Darrington <john@darrington.wattle.id.au>
1561
1562         * Numerous renames.  See src/ChangeLog for details.
1563         
1564         * Moved files from src directory