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