16ba1ca11a4ad41f8ad3460e7a8dad51005aad03
[pspp-builds.git] / src / data / ChangeLog
1 2007-11-05  Ben Pfaff  <blp@gnu.org>
2
3         Patch #6258.  Reviewed by John Darrington.
4
5         * file-handle-def.c (fh_lock): Add comment that TYPE should be
6         marked with N_() in the caller.  Added these markings to each
7         caller too.  Should make i18n easier.
8         Suggested by Chusslove Illich <caslav.ilic@gmx.net>.
9
10 2007-11-03  Ben Pfaff  <blp@gnu.org>
11
12         Allow output files to overwrite input files (bug #21280).
13
14         * file-handle-def.c: Separate locking of files for input and for
15         output, to allow both to take place at once.  Also, distinguish a
16         file handle from the identity of the underlying file, because the
17         identity of a file changes over time and the file handle can't
18         represent two different identities.
19         (struct file_handle): Remove `next', `open_cnt', `deleted',
20         `type', `open_mode', `aux', `identity' members.  Change `id' from
21         char array to char *.  Add `ref_cnt' member.
22         (file_handle_from_ll) New function.
23         (file_handles) Removed.
24         (named_handles) New variable.
25         (fh_init) Initialize named_handles.
26         (fh_done) Remove name from all named_handles.
27         (free_handle) Updated for modified struct file_handle.
28         (unname_handle) New function.
29         (fh_ref) New function.
30         (fh_from_file_name) Removed.
31         (fh_unref) New function.
32         (fh_unname) New function.
33         (fh_from_id) Rewritten.
34         (create_handle) Updated for modified struct file_handle.
35         (fh_inline_file) Increment the handle's ref count.
36         (fh_create_file) Updated for modified struct file_handle.
37         (fh_create_scratch) Ditto.
38         (fh_free) Removed.
39         (mode_name) Removed.
40         (fh_open) Removed.
41         (fh_close) Removed.
42         (fh_is_open) Removed.
43         (fh_get_id) Updated for modified struct file_handle.
44         (fh_get_default_handle) Increment the handle's ref count.
45         (fh_set_default_handle) Handle ref counts.
46         (struct fh_lock) New structure.
47         (locks) New static var.
48         (fh_lock) New function.
49         (fh_unlock) New function.
50         (fh_lock_get_aux) New function.
51         (fh_lock_set_aux) New function.
52         (fh_is_locked) New function.
53         (make_key) New function.
54         (free_key) New function.
55         (compare_fh_locks) New function.
56         (hash_fh_lock) New function.
57
58         * file-handle-def.h (enum fh_access) New enum.
59
60         * file-name.c: Made file_identity the same in all supported
61         environments.
62         (struct file_identity): New `name' member.
63         (fn_get_identity): For a file that doesn't exist, get the
64         dev/inode of its directory plus its name.  If even the directory
65         doesn't exist, just use its name.  Merge the Windows
66         implementation into the Unix one.
67         (fn_compare_file_identities): Rewritten.  Merge the Windows
68         implementation into the Unix one.
69         (fn_hash_identity): New function.
70
71         * make-file.c (struct replace_file): New structure.
72         (all_files): New static var.
73         (replace_file_start): New function.
74         (replace_file_commit): New function.
75         (replace_file_abort): New function.
76         (free_replace_file): New function.
77         (unlink_replace_files): New function.
78
79         * por-file-reader.c (struct pfm_reader): Add `lock' member.
80         (close_reader): Unlock file.
81         (pfm_open_reader): Lock file.
82
83         * por-file-writer.c (struct pfm_writer): Add fh_lock, replace_file
84         members.
85         (pfm_open_writer): Lock file and prepare for its replacement.
86         (close_writer): Unlock file.
87
88         * scratch-handle.h (struct scratch_handle): Add unique_id so that
89         different generations of a scratch file can be distinguished.
90
91         * scratch-reader.c (scratch_reader_open): Verify that the file is
92         a scratch file.
93
94         * scratch-writer.c (struct scratch_writer): Add `lock' and `dict',
95         remove scratch_handle member.
96         (scratch_writer_open): Lock handle.  Prepare to replace handle
97         data, instead of doing it immediately.
98         (scratch_writer_casewriter_destroy): Replace handle data and
99         unlock handle.
100
101         * sys-file-reader.c (struct sfm_reader): Add `lock' member.
102         (sfm_open_reader): Lock file.
103         (close_reader): Unlock file.
104
105         * sys-file-writer.c (struct sfm_writer): Add fh_lock, replace_file
106         members.
107         (sfm_open_writer): Lock file and prepare for its replacement.
108         (close_writer): Unlock file.
109
110 2007-11-02  Ben Pfaff  <blp@gnu.org>
111
112         * data-out.c (output_number): Use isfinite (from C99) instead of
113         gsl_isfinite, since we now have universal support for it in
114         gnulib.
115         (output_infinite): Ditto.
116         [!HAVE_ROUND] (round): Remove definition, since we now have a
117         replacement in gnulib.
118
119 2007-10-27  John Darrington <john@darrington.wattle.id.au>
120
121         * dictionary.c: Fixed bug in dict_clone, where the vardict.dict member
122         wasn't initialised correctly. Closes bugs #21330 and 21397
123
124
125 2007-10-08  Ben Pfaff  <blp@gnu.org>
126
127         Fix bug #21280.  Thanks to John Darrington for review.
128
129         * file-name.c (create_stream): New function.
130
131         * por-file-writer.c (pfm_open_writer): Use fh_open to open the
132         file handle before creating the file, to ensure that we don't
133         truncate a file that we're reading.  Make code easier to read by
134         using create_stream.
135
136         * sys-file-write.c (sfm_open_writer): Ditto.
137
138 2007-10-01  Ben Pfaff  <blp@gnu.org>
139
140         Fix bug #21192.  Thanks to John Darrington for review.
141
142         * casereader.c (casereader_read): Decrement case_cnt before
143         calling the casereader's "read" member function, so that we
144         interact properly with lazy_casereader.
145
146         * datasheet.c: Add regression test for above bug fix.
147         (clone_datasheet): New function.
148         (lazy_callback): New function.
149         (check_datasheet_casereader): New function.
150         (check_datasheet): Check datasheet contents are reported correctly
151         through an ordinary casereader and a lazy casereader.
152         (clone_model): Use clone_datasheet.
153
154 2007-09-24  Ben Pfaff  <blp@gnu.org>
155
156         Patch #6210.  Reviewed by John Darrington.
157         * settings.c: Drop "long view", which is not needed any longer.
158         (static var long_view): Removed.
159         (force_long_view): Removed.
160         (get_viewwidth): Removed.
161         (init_viewport): Removed long_view reference.
162
163 2007-09-19  John Darrington <john@darrington.wattle.id.au>
164         
165         * settings.c settings.h: Changed viewport's length and width to be 
166         owned by the user interface which uses the data library.  This allows
167         better abstraction, and makes dynamically adjustable dimensions easier.
168         
169 2007-09-18  Ben Pfaff  <blp@gnu.org>
170
171         * procedure.c (proc_extract_active_file_data): New function.
172
173         * lazy-casereader.h: New file.
174
175         * lazy-casereader.c: New file.
176
177         * casereader.c (casereader_dynamic_cast): New function.
178
179 2007-09-14  Ben Pfaff  <blp@gnu.org>
180
181         * dictionary.c (dict_clone): Copy case indexes from cloned
182         dictionary.  Fixes bug #21061.  Reviewed by John Darrington.
183
184 2007-09-13  John Darrington <john@darrington.wattle.id.au>
185
186         * value.c value.h (create_value): New function.
187
188 2007-09-12  Ben Pfaff  <blp@gnu.org>
189
190         Make it clear that translator casereader and casewriter translate
191         functions are supposed to destroy their input case.
192         
193         * casereader-translator.c (struct casereader_translator): Change
194         input case parameter of translate member function from const
195         struct ccase * to struct ccase *.
196         (casereader_create_translator): Ditto, for translate parameter.
197
198         * casewriter-translator.c (struct casewriter_translator): Ditto.
199         (casewriter_create_translator): Ditto.
200
201 2007-08-27  John Darrington <john@darrington.wattle.id.au>
202         
203         * sys-file-reader.c (read_display_parameters): Force display width 
204         to 8, if the sys file says 0 (like SPSS does).
205
206 2007-08-12  Ben Pfaff  <blp@gnu.org>
207
208         * dictionary.c (dict_dump): New function.
209
210 2007-08-12  Ben Pfaff  <blp@gnu.org>
211
212         Drop dict_compactor in favor of using the new struct case_map.
213
214         * dictionary.c (struct copy_map): Removed.
215         (struct dict_compactor): Removed.
216         (dict_make_compactor): Removed.
217         (dict_compactor_compact): Removed.
218         (dict_compactor_destroy): Removed.
219
220         * procedure.c (struct data_set): Change `compactor' member to be a
221         struct case_map *.
222         (proc_open): Use case_map_to_compact_dict instead of
223         dict_make_compactor.
224         (proc_casereader_read): Use case_map_execute instead of
225         dict_compactor_compact.
226         (proc_commit): Use case_map_destroy instead of
227         dict_compactor_destroy.
228
229         * scratch-writer.c (struct scratch_writer): Change `compactor'
230         member to be a struct case_map *.
231         (scratch_writer_open): Use case_map_to_compact_dict instead of
232         dict_make_compactor.
233         (scratch_writer_casewriter_write): Use case_map_execute instead of
234         dict_compactor_compact.
235
236 2007-08-12  Ben Pfaff  <blp@gnu.org>
237
238         * automake.mk: Add case-map.c, case-map.h.
239
240         * case-map.c: New file.
241
242         * case-map.h: New file.
243
244 2007-08-12  Ben Pfaff  <blp@gnu.org>
245
246         * dictionary.c (dict_compact_values): Don't delete scratch
247         variables as well as compacting case indexes.  Update all callers.
248         (dict_get_compacted_value_cnt): Rename dict_count_values and
249         change interface.  Update all callers.
250         (dict_get_compacted_value_cnt): Remove.
251         (dict_compacting_would_shrink): Remove.
252         (dict_compacting_would_change): Remove.
253         (dict_make_compactor): Add new parameter.  Update all callers.
254         
255         * procedure.c (proc_casereader_read): Use casewriter_get_value_cnt
256         instead of dict_count_values, changing an O(N) operation into
257         O(1).
258
259 2007-08-12  Ben Pfaff  <blp@gnu.org>
260
261         * casereader.c (casereader_read): Don't require cases read by a
262         casereader to be exactly the expected size: as long as they're big
263         enough, it's OK.
264
265 2007-08-12  Ben Pfaff  <blp@gnu.org>
266
267         Make casewriters keep track of the number of `union value's in
268         each case.  This is useful for two reasons: casewriter_write can
269         then check that the case being written is large enough, and later
270         recipients of the casewriter can determine the size of the case.
271         
272         * casewriter-translator.c (casewriter_create_translator): Add
273         value_cnt parameter.
274         
275         * casewriter.c (struct casewriter): Add value_cnt member.
276         (casewriter_write): Check that the case passed in is big enough.
277         (casewriter_get_value_cnt): New function.
278         (casewriter_create): Add value_cnt parameter.
279
280 2007-08-09  Ben Pfaff  <blp@gnu.org>
281
282         Fix bug reported by Jason Stover.
283         * settings.c: Move get_termcap_viewport and in particular the
284         #include for <curses.h> to the end of the file.  curses.h
285         redefines bool on some systems (e.g. OpenBSD), which causes
286         disagreement between uses of bool before its inclusion and
287         afterward.
288         Tested by Jason Stover.
289
290 2007-07-29  Ben Pfaff  <blp@gnu.org>
291
292         Provisional fix for bug #18692 and bug #20161.  Reviewed by John
293         Darrington.
294
295         * file-name.c (fn_open): Only pass "r" or "w" to popen as mode
296         argument (never "rb" or "wb") because SUSv3 says that only those
297         modes are defined, and glibc in fact rejects other modes.
298
299         Open portable files with fn_open so that they can be read from
300         pipes.  Fix missing fh_close call to go along with fh_open.
301         Report an error if the file close reports an error.
302         * por-file-reader.c (close_reader): New function.
303         (por_file_casereader_destroy): Use close_reader.
304         (pfm_open_reader): Open file with fn_open.
305
306 2007-07-28  Ben Pfaff  <blp@gnu.org>
307
308         Make PSPP able to read all the portable files I could find on the
309         web.  Thanks to John Darrington for review.  Bug #17620.
310         * por-file-reader.c (struct pfm_reader): New member `line_length'.
311         (error): Print file offset in hexadecimal.
312         (warning): New function.
313         (advance): Treat lines less than 80 bytes long as padded to 80
314         bytes with spaces.
315         (pfm_open_reader): Call read_documents if we find an "E" record.
316         (convert_format): Convert invalid formats to the default format
317         instead of aborting reading the file.
318         (read_variables): Rename duplicate variable names instead of
319         aborting reading the file.
320         (read_value_label): Allow string variables of different widths to
321         be assigned value labels in the same record.  Replace duplicate
322         value labels instead of aborting.
323         (read_documents): New function.
324
325         * por-file-writer.c (pfm_open_writer): Call write_documents if the
326         dictionary has documents.
327         (write_documents): New function.
328
329 2007-07-25  Ben Pfaff  <blp@gnu.org>
330
331         Fix bugs related to bug #17213.
332
333         * settings.c: Use HAVE_LIBNCURSES instead of HAVE_LIBTERMCAP,
334         since the former is what config.h has.  Include the needed ncurses
335         headers.
336         (static var echo) Rename to `do_echo' because the original name is
337         the same as an ncurses identifier.
338         (get_termcap_viewport) Use error instead of msg.
339
340         * file-name.c (fn_interp_vars): Fix interpolation of $VARS.
341         (fn_close): Don't close stdin, stdout, stderr.
342
343 2007-07-26 John Darrington <john@darrington.wattle.id.au>
344
345         * procedure.c procedure.h: Added callbacks which get invoked whenever 
346         a dataset's transformation chain changes.
347
348 2007-07-24  Ben Pfaff  <blp@gnu.org>
349
350         Fix bug #6113.
351         * sys-file-writer.c (write_variable_display_parameters): Use new
352         var_default_display_width function to choose display width of
353         segments after the first one in a given variable.
354         * variable.c (var_create): Use var_default_display_width to pick
355         new variable's display width.
356         (var_default_display_width): New function.
357         Reviewed by John Darrington.
358
359 2007-07-24  Ben Pfaff  <blp@gnu.org>
360
361         Fix bug #20427.
362         * por-file-writer.c (write_variables): Write weight variable.
363         Reviewed by John Darrington.
364
365 2007-07-23  Ben Pfaff  <blp@gnu.org>
366
367         Improvements to system file reader and writer.
368         
369         First, move all detailed knowledge of very long strings into
370         sys-file-private.[ch], so that this nasty stuff can be isolated.
371
372         * sys-file-private.c (REAL_VLS_CHUNK): New macro.
373         (EFFECTIVE_VLS_CHUNK): New macro.
374         (min_int): New function.
375         (max_int): New function.
376         (sfm_width_to_bytes): Rewrite.
377         (sfm_width_to_octs): New function.
378         (sfm_segment_alloc_width): New function.
379         (sfm_segment_alloc_bytes): New function.
380         (sfm_segment_used_bytes): New function.
381         (sfm_segment_offset): New function.
382         (sfm_segment_effective_offset): New function.
383         (sfm_dictionary_to_sfm_vars): New function.
384
385         * sys-file-private.h (MIN_VERY_LONG_STRING): Removed.
386         (EFFECTIVE_LONG_STRING_LENGTH): Removed.
387         (struct sfm_var): New structure.
388
389         Next, improvements to the system file reader.
390
391         * sys-file-reader.h (struct sfm_read_info): Changed `case_cnt' to
392         type casenumber.  Added `version_major', `version_minor',
393         `version_revision'.
394
395         * sys-file-reader.c (struct sfm_reader): Replaced `flt64_cnt' by
396         `oct_cnt'.  Rename `vars', `var_cnt' to `sfm_vars', `sfm_var_cnt'.
397         Change `case_cnt' to type casenumber.  Removed `has_vls'.
398         (struct sfm_var): Removed.
399         (sfm_open_reader): Don't warn on wrong case size if the file was
400         written by SPSS 13, which tends to get it wrong.  Use
401         sfm_dictionary_to_sfm_vars.
402         (read_header): Always output system file info.
403         (read_variable_record): Simplify code for reading missing values.
404         (read_machine_int32_info): Save version numbers from system file
405         into info struct passed as new argument.
406         (read_long_string_map): Restructured to use new sys-file-private
407         functions.
408         (read_value_labels): Use size_overflow_p.
409         (sys_file_casereader_read): Get rid of distinction between fast
410         and slow paths.  Use information provided by sys-file-primate's
411         struct sfm_var to simplify code.
412         (skip_whole_strings): New function.
413         (read_int32): Renamed read_int.  Changed return value to int.
414         Updated all callers.
415         (read_flt64): Renamed read_float.  Changed return value to
416         double.  Updated all callers.
417         (int32_to_native): Removed.  Changed callers to use
418         integer_convert.
419         (flt64_to_double): Removed.  Changed callers to use float_convert.
420         
421         Finally, get rid of int32, flt64 terminology and types in system
422         file writer.  The former wasn't very useful since a POSIX "int"
423         can hold the whole range of int32 and we generally didn't have a
424         need for it to be exactly-32-bits, just at-least-32-bits.  The
425         latter was inconvenient because we had to assume that it could be
426         different from double and thereby convert special values SYSMIS,
427         HIGHEST, LOWEST to and from it in multiple places.  Instead, now
428         we just use "int" and "double" in most places, and do conversions,
429         if necessary, very close to where we do I/O.  This change meant
430         that the writer code couldn't represent records in the file as C
431         structs any longer, but that's no great loss.  The code actually
432         seems to be more readable without them.
433
434         Simplify the compression buffering code: only buffer as much as
435         necessary, which is no more than eight 8-byte units at any given
436         time.
437
438         * sys-file-writer.c (typedef flt64): Removed.
439         (macro second_lowest_flt64): Removed.
440         (struct sysfile_header): Removed.
441         (struct sysfile_variable): Removed.
442         (struct sfm_writer): Removed `needs_translation', `has_vls',
443         `flt64_cnt'.  Changed `compress' to type bool and `case_cnt' to
444         type casenumber.  Renamed `vars' to `sfm_vars', `var_cnt' to
445         `sfm_var_cnt'.  Replaced `buf', `end', `ptr', `x', `y' for
446         compression buffering by `opcodes', `opcode_cnt', `data',
447         `data_cnt'.  Renamed `var_cnt_vls' as `segment_cnt'.
448         (sfm_open_writer): Use sfm_dictionary_to_sfm_vars.  Use simple
449         data writer functions instead of structures.
450         (calc_oct_idx): New function.
451         (write_header): Use simple data writer functions instead of
452         structures.
453         (write_format_spec): Renamed write_format.  New argument.
454         (write_variable_continuation_records): New function.
455         (write_variable): Use simple data writer functions instead of
456         structures.  Use write_variable_continuation_records.  Write
457         entire very long string instead of requiring caller to understand
458         them.
459         (write_value_labels): Use simple data writer functions instead of
460         structures.
461         (write_documents): Ditto.
462         (write_variable_display_parameters): Use sys-file-private
463         functions to simplify.  Use simple data writer functions instead
464         of structures.
465         (write_vls_length_table): Use simple data writer functions instead
466         of structures.
467         (write_longvar_table): Ditto.
468         (write_rec_7_34): Break into new functions
469         write_integer_info_record, write_float_info_record.  Use simple
470         data writer functions instead of structures.
471         (buf_write): Removed.
472         (append_string_max): Removed.
473         (ensure_buf_space): Removed.
474         (sys_file_casewriter_write): Get rid of the distinction between
475         fast and slow paths, which didn't seem to be too useful.  Use new
476         functions write_case_uncompressed, write_case_compressed.
477         (put_instruction): Removed.
478         (put_element): Removed.
479         (write_compressed_data): Removed.
480         (close_writer): Use flush_compressed.  Only write case count to
481         system file if it will fit in the field.
482         (write_case_compressed): New function.
483         (write_case_uncompressed): New function.
484         (flush_compressed): New function.
485         (put_cmp_opcode): New function.
486         (put_cmp_number): New function.
487         (write_int): New function.
488         (convert_double_to_output_format): New function.
489         (write_float): New function.
490         (write_value): New function.
491         (write_string): New function.
492         (write_bytes): New function.
493         (write_zeros): New function.
494         (write_spaces): New function.
495
496         Reviewed by John Darrington.
497
498 2007-07-22  Ben Pfaff  <blp@gnu.org>
499
500         Don't try to write very long strings to portable files.  The
501         format does not support it.
502
503         * por-file-writer.c (MAX_POR_WIDTH): New macro.
504         (pfm_open_writer): Limit output width to MAX_POR_WIDTH.
505         (write_format): Add arg to take width to resize format to.
506         (write_value): Limit width of value written to MAX_POR_WIDTH.
507         (write_variables): Limit width of variable and its output formats
508         to MAX_POR_WIDTH.
509         Reviewed by John Darrington.
510
511 2007-07-22  Ben Pfaff  <blp@gnu.org>
512
513         * sys-file-reader.c (read_variable_to_value_map): Use max_warnings
514         local variable instead of literal 5.
515         Reviewed by John Darrington.
516         
517 2007-07-22  Ben Pfaff  <blp@gnu.org>
518
519         Fix problems with uniqueness of short names in system files with
520         very long string variables.  Now a variable may have multiple
521         short names.
522         
523         * automake.mk (src_data_libdata_a_SOURCES): Add new files
524         short-names.c, short-names.h.
525
526         * dictionary.c (dict_clone): Clone all the short names.
527         (compare_strings): Move into short-names.c.
528         (hash_strings): Ditto.
529         (set_var_short_name_suffix): Ditto.
530         (dict_assign_short_names): Ditto, rename short_names_assign,
531         change to assign all short names.
532         
533         * por-file-writer.c (write_variables): Use short_names_assign
534         instead of dict_assign_short_names.
535
536         * short-names.c: New file.
537
538         * short-names.h: New file.
539
540         * sys-file-private.c (sfm_width_to_segments): New function.
541
542         * sys-file-reader.c (read_long_var_name_map): Save and restore all
543         the short names, not just the first one.
544         
545         * sys-file-writer.c (cont_var_name): Removed.
546         (sfm_open_writer): Use short_names_assign instead of
547         dict_assign_short_names.  Use unique short names assigned by
548         short_names_assign instead of those generated by cont_var_name.
549
550         * variable.c (struct variable): Remove `short_name' member,
551         replace by `short_names' and `short_name_cnt'.
552         (var_create) Initialize new members.
553         (var_get_short_name_cnt): New function.
554         (var_get_short_name): Now takes an index argument.  Changed most
555         callers to pass 0.
556         (var_set_short_name): Ditto.
557         (var_clear_short_name): Renamed var_clear_short_names, changed to
558         clear all short names.
559         
560         Reviewed by John Darrington.
561
562 2007-07-22  Ben Pfaff  <blp@gnu.org>
563
564         * variable.c (var_set_width): Use new var_set_width function.
565
566         * missing-values.c (mv_n_values): Drop assertion, which was not
567         needed.
568
569         * format.c (fmt_default_for_width): New function.
570         (fmt_resize): New function.
571
572         Reviewed by John Darrington.
573
574 2007-07-18 John Darrington <john@darrington.wattle.id.au>
575
576         * datasheet.c (datasheet_delete_columns): Added assertion to check
577         we're not deleting outside the range of the sheet.  
578
579         
580         * dictionary.c dictionary.h variable.c: Added the ability for string
581         variables to be resized.
582         
583         * vardict.h: Added some prototypes (moved from dictionary.h) as
584         these should only be called by variable.c
585
586
587 2007-07-14 John Darrington <john@darrington.wattle.id.au>
588
589         * sfm-reader.c: Respect case_cnt field in file header.
590
591 2007-07-01 John Darrington <john@darrington.wattle.id.au>
592
593         * transformation.c transformation.h (trns_chain_execute): Changed the 
594         signature (Patch #6057)
595
596 2007-06-10  Ben Pfaff  <blp@gnu.org>
597
598         * casereader-filter.c (casereader_filter_destroy): Make sure to
599         write all the remaining excluded cases to the casewriter, if any.
600
601         * caseinit.c (init_list_destroy): Rewrite.
602         (init_list_clear): Ditto.
603
604         * casegrouper.c (casegrouper_get_next_group): Always set *reader
605         to null when returning false.
606
607 2007-06-06  Ben Pfaff  <blp@gnu.org>
608
609         Actually implement the new procedure code and adapt all of its
610         clients to match.  Also adapt all of the other case sources and
611         sinks in the tree and their clients to use the
612         casereader/casewriter infrastructure.
613
614         * automake.mk: Add and remove files.
615
616         * any-reader.c: Change into a casereader.
617         * por-file-reader.c: Ditto.
618         * scratch-reader.c: Ditto.
619         * sys-file-reader.c: Ditto.
620
621         * any-writer.c: Change into a casewriter.
622         * por-file-writer.c: Ditto.
623         * scratch-writer.c: Ditto.
624         * sys-file-writer.c: Ditto.
625
626         * procedure.c: Change to use casereader, casewriter, caseinit, and
627         other new infrastructure.
628
629         * scratch-handle.c: Adapt to new infrastructure.
630
631         * case-sink.c: Removed, now dead code.
632         * case-sink.h: Ditto.
633         * case-source.c: Ditto.
634         * case-source.h: Ditto.
635         * casefile-factory.c: Ditto.
636         * casefile-private.h: Ditto.
637         * casefile.c: Ditto.
638         * casefile.h: Ditto.
639         * casefilter.c: Ditto.
640         * casefilter.h: Ditto.
641         * fastfile.c: Ditto.
642         * fastfile.h: Ditto.
643         * fastfile-factory.c: Ditto.
644         * fastfile-factory.h: Ditto.
645         * storage-stream.c: Ditto.
646         * storage-stream.h: Ditto.
647
648 2007-06-06  Ben Pfaff  <blp@gnu.org>
649
650         Add datasheet code.
651
652         * automake.mk: Add new files.
653
654         * datasheet.c: New file.
655
656         * datasheet.h: New file.
657
658 2007-06-06  Ben Pfaff  <blp@gnu.org>
659
660         Until now, the procedure code has provided a case to the
661         case_source, which has filled in the data values that come from
662         the active file.  "Left" data values that don't come from the
663         active file naturally stay the same from case to case, because the
664         procedure code keeps using that same case.
665
666         One of the compromises that comes with the new procedure code is
667         that the active file allocates and provides its own case, which
668         the procedure code then has to resize to provide room for any
669         other variables that should go in the case and then fill in the
670         values of "left" variables.  Then, when we're done with that case,
671         we have to save the values of "left" variables to copy into the
672         next case read from the active file.
673
674         The caseinit code helps with this.
675
676         * automake.mk: Add new files.
677
678         * caseinit.c: New file. 
679
680         * caseinit.h: New file. 
681
682 2007-06-06  Ben Pfaff  <blp@gnu.org>
683
684         * value.h (value_cnt_from_width): New function.
685
686         * variable.c (var_get_value_cnt): Use new function.
687
688 2007-06-06  Ben Pfaff  <blp@gnu.org>
689
690         Add casegrouper, to allow cases read from a given casereader to be
691         broken into groups, each of which has its own casereader.
692         Generally cases are grouped based on having equal values for some
693         set of variables.
694
695         * automake.mk: Add new files.
696
697         * casegrouper.c: New file.
698
699         * casegrouper.h: New file.
700
701 2007-06-06  Ben Pfaff  <blp@gnu.org>
702
703         Add interface to lexicographical ordering of cases.
704
705         * automake.mk: Add new files.
706
707         * case-ordering.c: New file.
708
709         * case-ordering.h: New file.
710
711 2007-06-06  Ben Pfaff  <blp@gnu.org>
712
713         Add casereaders and casewriters, the basis of the new data processing
714         implementation.  A casereader is a uniform interface to reading cases
715         from a data source; a casewriter is a uniform interface to writing
716         cases to a data sink.
717
718         * automake.mk: Add new files.
719         
720         * casereader-filter.c: New file.
721         
722         * casereader-provider.h: New file.
723
724         * casereader-translator.c: New file.
725         
726         * casereader.c: New file.
727         
728         * casereader.h: New file.
729         
730         * casewriter-provider.h: New file.
731         
732         * casewriter-translator.c: New file.
733         
734         * casewriter.c: New file.
735         
736         * casewriter.h: New file.
737
738 2007-06-06  Ben Pfaff  <blp@gnu.org>
739
740         "casewindow" data structure that extends the deque (from libpspp)
741         of cases with the ability to dump cases to disk if we get too many
742         of them in memory.
743
744         * automake.mk: Add new files.
745
746         * casewindow.c: New file.
747
748         * casewindow.h: New file.
749
750 2007-06-06  Ben Pfaff  <blp@gnu.org>
751
752         sparse_cases data structure that augments a sparse_array of cases
753         with the ability to dump cases to disk if we get too many cases in
754         memory.
755
756         * automake.mk: Add new files.
757
758         * sparse-cases.c: New file.
759
760         * sparse-cases.h: New file.
761
762 2007-06-06  Ben Pfaff  <blp@gnu.org>
763
764         Adds a low-level on-disk case array data structure.
765         
766         * automake.mk: Add new files.
767
768         * case-tmpfile.c: New file.
769
770         * case-tmpfile.h: New file.
771
772 2007-06-06  Ben Pfaff  <blp@gnu.org>
773
774         In a couple of places we calculate the maximum number of cases to
775         keep in memory based on the user-defined workspace.  Enable
776         centralizing the calculation through a new function.
777         
778         * settings.c (get_workspace_cases): New function.
779
780 2007-06-06  Ben Pfaff  <blp@gnu.org>
781
782         The casenumber type is defined in transformations.h, but case.h is
783         a more sensible place.  Move it.
784
785         * case.h (CASENUMBER_MAX): New macro.
786         (typedef casenumber): Move here, from transformations.h.
787
788 2007-06-03  Ben Pfaff  <blp@gnu.org>
789
790         Slightly generalize case_to_values and case_from_values functions.
791
792         * case.c (case_to_values): Rename case_copy_out, change interface.
793         (case_from_values): Rename case_copy_in, change interface.
794
795         * fastfile.c (fastfilereader_get_next_case): Update caller.
796         (write_case_to_disk): Ditto.
797
798 2007-06-02  Ben Pfaff  <blp@gnu.org>
799
800         Clean up after a forgotten part of patch #5829.
801         
802         * casedeque.h: Remove unused file.
803
804         * automake.mk: Remove casedeque.h from sources.
805
806 2007-05-10  Jason Stover  <jhs@math.gcsu.edu>
807
808         * category.c: Removed redundant #include
809
810 2007-05-06  Ben Pfaff  <blp@gnu.org>
811
812         Abstract the documents within a dictionary a little better.
813         Thanks to John Darrington for suggestion, initial version, and
814         review.  Patch #5917.
815
816         * dictionary.c (struct dictionary): Change `documents' member from
817         char * to struct string.
818         (dict_clear): Destroy struct string.
819         (dict_get_documents): Convert struct string to char *.
820         (dict_set_documents): Set struct string.  Pad to 80-character
821         multiple.
822         (dict_clear_documents): New function.
823         (dict_add_document_line): New function.
824         (dict_get_document_line_cnt): New function.
825         (dict_get_document_line): New function.
826
827         * dictionary.h (macro DOC_LINE_LENGTH): New macro.
828
829         * sys-file-reader.c (read_documents): Use new document functions.
830
831 2007-04-19 John Darrington <john@darrington.wattle.id.au>
832
833         * sys-file-reader.c: When reading a system file which has no 
834         long name table, automatically create one where the long names 
835         are the lower case versions of the short names.
836         
837 2007-04-22  Ben Pfaff  <blp@gnu.org>
838
839         * dictionary.c (dict_set_split_vars): dict_destroy expects that
840         dict_clear will free most data related to the dictionary.
841         dict_clear does a decent job, except that dict_set_split_vars on
842         some systems won't actually free the dict's "split" member.
843         Instead, it'll allocate a 1-byte region.  Fix this.
844
845         * value.c (value_copy): New function.
846         (value_set_missing): Ditto.
847
848 2007-04-22 John Darrington <john@darrington.wattle.id.au>
849
850         * Deleted existing category.h and moved cat-routines.h into 
851         category.h  Encapsulated struct cat_vals better.
852
853 2007-04-19 John Darrington <john@darrington.wattle.id.au>
854
855         * sys-file-reader.c: When reading a system file which has no 
856         long name table, automatically create one where the long names 
857         are the lower case versions of the short names.
858         
859 2007-04-16 John Darrington <john@darrington.wattle.id.au>
860
861         * sys-file-reader.c: Some versions of Other Software seem to 
862         produce system files with string  variables' measure set to 
863         zero.  We'll assume these are supposed to be nominal variables.
864
865 2007-03-30  Ben Pfaff  <blp@gnu.org>
866
867         * procedure.c: Adapt to new deque data structure.
868
869 Mon Feb 19 10:53:21 2007  John McCabe-Dansted <gmatht@gmail.com>
870                           Ben Pfaff <blp@gnu.org>
871
872         * file-name.c: Mingw compatibility fixes.
873         (fn_search_path): Use ISSLASH instead of comparing against '/'
874         directly.
875         (fn_dir_name): Use dir_name from gnulib.
876         (fn_is_absolute): Use IS_ABSOLUTE_FILE_NAME from gnulib.
877         (fn_get_identity): Use GetFullPathName instead of canonicalize
878         from gnulib, because the latter does not fully support
879         Windows-style path names.  Use this implementation based on the
880         detected presence of Windows instead of the absence of Unix, since
881         the new implementation is Windows-specific.
882         (fn_compare_file_identities): In Windows implementation, compare
883         names case-insensitively.
884
885 Sun Feb 18 13:28:02 2007  Ben Pfaff  <blp@gnu.org>
886
887         * make-file.c: Don't include mkstemp.h, because gnulib now causes
888         <stdlib.h> to have the same effect.
889
890 Sun Feb 18 11:20:24 2007  Ben Pfaff  <blp@gnu.org>
891
892         * por-file-reader.c: Add missing _() around messages.
893
894 Sun Feb 11 20:44:13 2007  Ben Pfaff  <blp@gnu.org>
895
896         * make-file.c: Include "mkstemp.h", without which linking on
897         mingw32 fails.
898
899 Thu Feb  8 14:59:05 2007  Ben Pfaff  <blp@gnu.org>
900  
901         Reduce platform dependence.
902  
903         * file-name.c (fn_tilde_expand): Removed, and removed calls to it.
904         Everywhere we using this, we really should have just depended on
905         the shell to expand tildes.
906         (fn_search_path): Simplify, given that we don't do tilde expansion
907         any longer.
908         (fn_normalize): Removed.  Caller changed to use the canonicalize
909         module from gnulib.
910         (fn_get_cwd): Removed.  Only user was fn_normalize.
911         (fn_is_absolute): Really only test for absolute names.
912         (fn_is_special): Use pipe files if HAVE_POPEN, not if we're in
913         unix.
914         (fn_readlink): Removed, as it was only used fn_normalize.
915         (fn_exists): Assume the stat function is available; gnulib does.
916         (fn_open): Use pipe files if HAVE_POPEN, not if we're in unix.
917  
918 Sat Feb  3 21:52:17 2007  Ben Pfaff  <blp@gnu.org>
919
920         * dictionary.c (dict_create_vector_assert): New function.
921
922 Wed Feb  7 21:25:15 2007  Ben Pfaff  <blp@gnu.org>
923
924         * file-name.c (fn_normalize): Correct name of function
925         fn_is_special.  Thanks to John McCabe-Dansted <gmatht@gmail.com>
926         for pointing this out.
927
928 Thu Feb  1 16:53:37 2007  Ben Pfaff  <blp@gnu.org>
929
930         We are using a single member in struct file_handle, the "name"
931         field, for more than one purpose.  When it begins with '"', it's a
932         file name; otherwise, it's a token that can be used to identify
933         it.  When that assertion fires, it's because we searched for the
934         name case-sensitively as a file name (so that there was no match),
935         and then we try to insert it case-insensitively as a token, which
936         fails because duplicates aren't allowed.
937
938         Solution: break the two purposes into two separate fields.  This
939         fixes the problem and likely makes the code easier to read too.
940
941         Fixes bug #18922.  Thanks to John Darrington for bug report and
942         review.
943
944         * file-handle-def.c (struct file_handle): New `id' member.
945         (fh_from_name): Rename fh_from_id.  Update all callers.
946         (create_handle): New `id' parameter.  Update all callers.
947         (fh_create_file): Ditto.
948         (fh_get_id): New function.
949
950 Mon Jan 15 16:18:10 2007  Ben Pfaff  <blp@gnu.org>
951
952         * case.c (case_is_null): Change return type to bool.
953
954 Mon Jan 15 10:57:28 2007  Ben Pfaff  <blp@gnu.org>
955
956         Add debugging code.
957         
958         * case.c (case_clone) [DEBUGGING]: When debugging, don't use
959         reference counting to share data.  This makes it easy for
960         valgrind, etc. to find accesses to cases that have been destroyed
961         but have been kept around by another user's ref-count.  This often
962         happens when the data set is small enough to find in memory; if a
963         bigger data set that would overflow to disk were used, then data
964         corruption would occur.
965
966 Mon Jan 15 10:55:18 2007  Ben Pfaff  <blp@gnu.org>
967
968         Simplify code.
969
970         * case.c (case_unshare): Make it check internally whether the
971         ref_cnt is greater than 1, so that the callers don't have to.
972         Update callers not to check.
973
974 Mon Jan 15 10:53:01 2007  Ben Pfaff  <blp@gnu.org>
975
976         Before, I was thinking that I might want to get rid of reference
977         counting at some point.  Now, I'm pretty sure that it's here to
978         stay.  Thus, because we have to store the value_cnt anyway for
979         reference-counted cases, we might as well expose it to users.
980
981         * case.c (case_get_value_cnt): New function.
982         (case_resize): Drop OLD_CNT argument.  Update all callers.  Only
983         resize case if its size actually changed.
984
985         * casefile.c (casefile_append_xfer): Use case_get_value_cnt
986         instead of peeking inside struct case directly.
987         (casefile_append): Ditto.
988
989 Mon Jan 15 10:50:22 2007  Ben Pfaff  <blp@gnu.org>
990
991         Get rid of the inlines for the case functions, which made the
992         header file hard to read.  (Also, in testing with "-O2 -DNDEBUG",
993         the inlines didn't speed up "make check" at all, which is not a
994         perfect benchmark but seems indicative.)
995         
996         * case.c: Remove #ifdef DEBUGGING...#endif around many function
997         definitions.  Remove some assertions on nonnull pointers that were
998         redundant with a pointer dereference soon after in the function.
999         Also:
1000         (struct case_data): Move definition here from case.h.
1001         (case_data): Ditto.
1002         (case_num): Ditto.
1003         (case_str): Ditto.
1004         (case_data_wr): Ditto.
1005         
1006 Sun Jan 14 21:41:12 2007  Ben Pfaff  <blp@gnu.org>
1007
1008         * automake.mk: Add casedeque.h to sources.
1009         
1010         * casedeque.h: New file.
1011
1012         * procedure.c: (struct dataset) Change lag_count, lag_head,
1013         lag_queue member into single struct casedeque member.  Update all
1014         users to use the casedeque instead.
1015         (lag_case) Removed.
1016
1017 Sun Jan 14 21:43:12 2007  Ben Pfaff  <blp@gnu.org>
1018
1019         * procedure.c: Simplify lagged cases interface.  Updated all
1020         clients--well, the only client--to use the simplified interface.
1021         (dataset_n_lag) Removed.
1022         (dataset_set_n_lag) Removed.
1023         (dataset_need_lag) New function.
1024
1025 Tue Jan  9 07:20:05 WST 2007 John Darrington <john@darrington.wattle.id.au>
1026
1027         * dictionary.c procedure.c: More changes to ensure that callbacks occur
1028         whenever appropriate, but only when the dataset/dictionary is in a 
1029         consistent state.
1030
1031 Sun Jan  7 08:33:04 WST 2007 John Darrington <john@darrington.wattle.id.au>
1032
1033         * dictionary.c dictionary.h : Added callbacks for change of filter and 
1034         split variables.  Refactored some code to ensure that callbacks get
1035         invoked when appropriate.
1036
1037         * procedure.c (proc_cancel_temporary_transformations): Make sure that 
1038         replace_dict callback occurs when permanent_dict replaces the current
1039         dictionary.
1040
1041 Wed Jan  3 11:02:11 WST 2007 John Darrington <john@darrington.wattle.id.au>
1042
1043         * dictionary.c dictionary.h : Added callback for when the weight 
1044         variable of a dictionary changes.
1045
1046 Mon Jan  1 10:36:26 WST 2007 John Darrington <john@darrington.wattle.id.au>
1047
1048         * dictionary.c dictionary.h : Added replace_source and replace_dict
1049         callbacks, and functions to deal with them.
1050
1051 Fri Dec 22 13:56:08 2006  Ben Pfaff  <blp@gnu.org>
1052
1053         Simplify missing value handling.
1054
1055         * missing-values.h (enum mv_class): New type.
1056         (enum mv_type): Moved definition into missing-values.c and renamed
1057         each MV_* to MVT_*, to distinguish them from the exposed mv_class
1058         enums.  Updated all uses.
1059         (struct missing_values): Changed type of `type' from `enum
1060         mv_type' to `int' because the definition is no longer exposed.
1061         
1062         * missing-values.c (mv_is_value_missing): Add new enum mv_class
1063         parameter.  Update all callers.
1064         (mv_is_num_missing): Ditto.
1065         (mv_is_str_missing): Ditto.
1066         (mv_is_value_user_missing): Removed.  Changed callers to use
1067         mv_is_value_missing.
1068         (mv_is_num_user_missing): Removed.  Changed callers to use
1069         mv_is_num_missing.
1070         (mv_is_str_user_missing): Removed.  Changed callers to use
1071         mv_is_str_missing.
1072         (mv_is_value_system_missing): Removed.  Changed callers to use
1073         mv_is_value_missing.
1074         (mv_set_type): Removed.  Changed callers to use mv_clear.
1075         (mv_clear): New function.
1076         
1077         * variable.c (var_is_value_missing): Add new enum mv_class
1078         parameter.  Update all callers.
1079         (var_is_num_missing): Ditto.
1080         (var_is_str_missing): Ditto.
1081         (var_is_value_user_missing): Removed.  Changed callers to use
1082         var_is_value_missing.
1083         (var_is_num_user_missing): Removed.  Changed callers to use
1084         var_is_num_missing.
1085         (var_is_str_user_missing): Removed.  Changed callers to use
1086         var_is_str_missing.
1087         (var_is_value_system_missing): Removed.  Changed callers to use
1088         var_is_value_missing.
1089         
1090         * casefilter.c (struct casefilter): Use enum mv_class in place of
1091         bool.
1092         (casefilter_variable_missing): Adapt to new member.
1093         (casefilter_create): Change signature to take enum mv_class,
1094         update callers.
1095
1096 Fri Dec 22 20:08:38 WST 2006 John Darrington <john@darrington.wattle.id.au>
1097
1098         * casefile-factory.h fastfile-factory.c fastfile-factory.h: New files.
1099
1100         * case-sink.c case-sink.h procedure.c procedure.h 
1101           storage-stream.c: Now uses the factory.
1102         
1103 Sat Dec 16 22:05:18 2006  Ben Pfaff  <blp@gnu.org>
1104
1105         Make it possible to pull cases from the active file with a
1106         function call, instead of requiring indirection through a callback
1107         function.
1108
1109         * case-source.h (struct case_source_class): Change ->read function
1110         to return a single case, instead of calling a callback function
1111         for each case.  Change ->destroy function to return an error
1112         status.
1113
1114         * case-source.c (free_case_source): Pass along the value returned
1115         by the case_source ->destroy function.
1116
1117         * procedure.c (struct write_case_data): Removed.
1118         (struct dataset): Added some members to track procedure state.
1119         (procedure): Optimize the trivial case at this level.
1120         (internal_procedure): Re-implement in terms of proc_open,
1121         proc_read, proc_close.
1122         (proc_open) New function.
1123         (proc_read) New function.
1124         (proc_close) New function.
1125         (write_case) Moved into proc_read.
1126         (close_active_file) Moved closing of data source into proc_close.
1127
1128         * storage-source.c: Rewrote to conform with modified
1129         case_source_class interface.
1130
1131         * transformations.c (trns_chain_execute): Added argument to allow
1132         starting execution from an arbitrary transformation.  Updated
1133         callers.
1134
1135         * transformations.h (enum TRNS_NEXT_CASE) Renamed TRNS_END_CASE.
1136
1137 Sat Dec 16 14:09:25 2006  Ben Pfaff  <blp@gnu.org>
1138
1139         * sys-file-reader.c (read_display_parameters): Don't assume that
1140         MEASURE_* and ALIGN_* have the same values found in system files.
1141
1142         * sys-file-writer.c (write_variable_display_parameters): Ditto.
1143
1144         * variable.h: Change MEASURE_NOMINAL, MEASURE_ORDINAL,
1145         MEASURE_SCALE to be 0-based instead of 1-based.  This also fixes
1146         the value of n_MEASURES, which was off by 1 (at least from my
1147         point of view).
1148
1149 Sat Dec 16 12:17:34 WST 2006 John Darrington <john@darrington.wattle.id.au>
1150
1151         * dictionary.c dictionary.h vardict.h variable.c: Added optional
1152                 callbacks which are invoked when the dictionary or its 
1153                 variables are changed.  
1154         
1155         * missing-values.c missing-values.h value-labels.c: Tidied up
1156                 consistency checks, and made some of them return false 
1157                 instead of assert-failing. 
1158
1159 Wed Dec 13 19:30:11 2006  Ben Pfaff  <blp@gnu.org>
1160
1161         * calendar.c (calendar_days_in_month): New function.
1162
1163 Mon Dec 11 07:53:39 2006  Ben Pfaff  <blp@gnu.org>
1164
1165         * value-labels.c (hash_int_val_lab): Only hash as many bytes as
1166         the value label's width.
1167
1168 Sun Dec 10 14:21:29 2006  Ben Pfaff  <blp@gnu.org>
1169
1170         * sfm-private.h: Move contents into sys-file-writer.c, which is
1171         the only remaining user.  Removed Borland C++-specific directives.
1172         
1173         * sys-file-reader.c: Clean up and rewrite entire file.  The
1174         rewritten version is simpler and better abstracted, and should be
1175         easier to maintain and extend.  It avoids using structures to read
1176         file data, which is prone to padding variations among compilers.
1177         It should also handle non-IEEE 754 system files, although I
1178         haven't been able to find any.  It has been tested against many
1179         .sav files obtained from the Web and found to produce the same
1180         results as the earlier version of the code, or in some cases
1181         improved results.  It is more tolerant of format variations found
1182         in the wild.
1183
1184         * sys-file-reader.h (struct sfm_read_info): Removed `big_endian'
1185         member, putting an enum integer_format in its place.  New member
1186         `float_format'.  Changed `compressed' member to type bool.
1187
1188 Sun Dec 10 13:48:53 2006  Ben Pfaff  <blp@gnu.org>
1189
1190         * dictionary.c (dict_delete_consecutive_vars): New function.
1191
1192 Sat Dec  9 20:08:25 2006  Ben Pfaff  <blp@gnu.org>
1193
1194         * file-name.c (fn_search_path): Remove prefix arg that was unused
1195         by any caller.  Updated all callers.
1196
1197 Sat Dec  9 20:04:22 2006  Ben Pfaff  <blp@gnu.org>
1198
1199         * format.c (fmt_dollar_template): Use user's decimal point
1200         character.  Add assertion.
1201
1202 Sat Dec  9 20:02:25 2006  Ben Pfaff  <blp@gnu.org>
1203
1204         * format.c (fmt_dollar_template): New function, based on
1205         dollar_format_template from var-type-dialog.c.
1206
1207 Sat Dec  9 18:05:59 2006  Ben Pfaff  <blp@gnu.org>
1208
1209         * data-out.c (output_scientific): Fix bad assumption that "buf" is
1210         null-terminated.
1211         
1212 Sat Dec  9 17:23:23 2006  Ben Pfaff  <blp@gnu.org>
1213
1214         Finish converting struct variable to an opaque type.  In this
1215         phase, we add remaining setter and getter functions, convert the
1216         remaining PSPP code to use them, and do a bunch of cleanup.  The
1217         resulting changes are pervasive but mostly trivial, and only the
1218         notable changes are logged.
1219         
1220         * automake.mk (src_data_libdata_a_SOURCES): Add the new source
1221         files.
1222         
1223         * case.c (case_data): Renamed case_data_idx.
1224         (case_num): Renamed case_num_idx.
1225         (case_str): Renamed case_str_idx.
1226         (case_data_rw): Renamed case_data_rw_idx.
1227
1228         * case.h (case_data): New function with old name and an interface
1229         that takes a variable instead of an index, which is easier to
1230         use.  Updated all callers to use the new interface, or to use the
1231         new *_idx function (see above).
1232         (case_num): Ditto.
1233         (case_str): Ditto.
1234         (case_data_rw): Ditto.
1235         
1236         * category.c (cat_stored_values_destroy): Changed interface to
1237         take a struct cat_vals * instead of a struct variable *.
1238
1239         * dictionary.c (dict_clone): Use new vector_clone function.     
1240         (dict_clear) Use new var_destroy function.
1241         (add_var) New function.
1242         (dict_create_var) Rewrite in terms of dict_create_var_assert.
1243         (dict_create_var_assert) Rewrite in terms of add_var.
1244         (dict_clone_var) Rewrite in terms of dict_clone_var_assert.
1245         (dict_clone_var_assert) Rewrite in terms of var_clone, add_var.
1246         (dict_lookup_var) Use new var_create, var_destroy functions.
1247         (dict_contains_var) Rewrite in terms of new vardict functionality.
1248         (set_var_dict_index) New function.
1249         (set_var_case_index) New function.
1250         (reindex_vars) New function.
1251         (dict_delete_var) Rewrite in terms of new vardict functionality.
1252         (dict_reorder_var) Ditto.
1253         (dict_reorder_vars) Ditto.
1254         (rename_var) New function.
1255         (dict_rename_var) Use rename_var.
1256         (dict_rename_vars) Use pool to simplify code.  Use rename_var.
1257         (dict_get_compacted_idx_to_fv) Rename
1258         dict_get_compacted_dict_index_to_case_index, update callers.
1259         (dict_create_vector) Use new vector_create function.
1260         (dict_clear_vectors) Use new vector_destroy function.
1261         (set_var_short_name_suffix) Move here from variable.c, renamed
1262         from var_set_short_name_suffix, make static, update caller.
1263
1264         * sys-file-private.c: New file.  
1265         (sfm_width_to_bytes) Moved here from variable.c, renamed from
1266         width_to_bytes, update callers.
1267
1268         * sys-file-private.h: New file.  Later it will supplant
1269         sfm-private.h; for now it supplements it.
1270         (macro MIN_VERY_LONG_STRING) New macro.
1271         (macro EFFECTIVE_LONG_STRING_LENGTH) New macro, from value.h.
1272
1273         * sys-file-reader.c: Use MIN_VERY_LONG_STRING - 1 where
1274         MAX_LONG_STRING was used before.
1275
1276         * sys-file-writer.c: Ditto.
1277
1278         * value-labels.c: Change the paradigm here to be that a null
1279         pointer is OK for a struct val_labs * in most cases; it just
1280         represents an empty set of value labels.
1281         (val_labs_copy) A copy of a null set is a null set.
1282         (val_labs_count) A null set has 0 labels.
1283         (val_labs_replace) Change return type to void.  Rewrite for
1284         simplicity.
1285         (val_labs_find) A null set does not contain the value.
1286         (value_to_string) Moved to variable.c, renamed var_get_value_name,
1287         transposed argument order, updated all callers.
1288
1289         * value.c: New file.
1290         (value_dup) Moved here from variable.c.
1291         (compare_values) Ditto.
1292         (hash_value) Ditto.
1293
1294         * value.h: (macro MAX_SHORT_STRING) Rewrote for simplicity.
1295         (macro MAX_LONG_STRING) Removed, because it was only interesting
1296         for system files, not for general code.
1297         (macro MAX_VERY_LONG_STRING) Ditto.
1298         (macro EFFECTIVE_LONG_STRING_LENGTH) Moved to sys-file-private.h.
1299         (macro MAX_ELEMS_PER_VALUE) Removed, as it was unused.
1300
1301         * vardict.h: New file, for an interface between variables and
1302         their dictionaries.
1303
1304         * variable.c: A lot of functions were moved around, for better
1305         organization.
1306         (struct variable) Move definition here, from variable.h.
1307         (var_type_adj) Removed--makes i18n hard.
1308         (var_type_noun) Ditto.
1309         (var_create) New function.
1310         (var_clone) New function.
1311         (var_destroy) New function.
1312         (var_set_name) Assert that variable is not in a dictionary.
1313         (compare_var_names) Rename compare_vars_by_name and fix a couple
1314         of callers who thought the args were strings.
1315         (hash_var_name) Rename hash_var_by_name.
1316         (compare_var_ptr_names) Rename compare_var_ptrs_by_name.
1317         (hash_var_ptr_name) Rename hash_var_ptr_by_name.
1318         (var_is_very_long_string) Removed, because it was only interesting
1319         to system file code.
1320         (var_set_missing_values) Allow the argument to be the wrong width,
1321         as long as we can resize it.  Simplify callers who were doing the
1322         resizing themselves.
1323         (var_get_value_labels) New function.
1324         (var_has_value_labels) New function.
1325         (var_set_value_labels) New function.
1326         (alloc_value_labels) New function.
1327         (var_add_value_label) New function.
1328         (var_replace_value_label) New function.
1329         (var_clear_value_labels) New function.
1330         (var_lookup_value_label) New function.
1331         (var_get_value_name) Moved here from variable.c, renamed from
1332         var_get_value_name, transposed argument order, updated all
1333         callers.
1334         (var_to_string) Moved here, from variable-label.c.
1335         (var_set_leave) New function.
1336         (var_get_leave) New function.
1337         (var_must_leave) New function.
1338         (var_set_short_name_suffix) Moved to dictionary.c, renamed
1339         set_var_short_name_suffix.
1340         (var_get_dict_index) New function.
1341         (var_get_case_index) New function.
1342         (var_get_obs_vals) New function.
1343         (var_set_obs_vals) New function.
1344         (var_has_obs_vals) New function.
1345         (var_get_vardict) New function.
1346         (var_set_vardict) New function.
1347         (var_has_vardict) New function.
1348         (var_clear_vardict) New function.
1349         (value_dup) Moved to value.c.
1350         (compare_values) Ditto.
1351         (hash_value) Ditto.
1352
1353         * variable.h: (enum NUMERIC) Rename VAR_NUMERIC, update all users.
1354         (enum ALPHA) Rename VAR_STRING, update all users.
1355
1356         * vector.c: New file.
1357         (struct vector) Moved here, from variable.h.
1358         (check_widths) New function.
1359         (vector_create) New function.
1360         (vector_clone) New function.
1361         (vector_destroy) New function.
1362         (vector_get_name) New function.
1363         (vector_get_var) New function.
1364         (vector_get_var_cnt) New function.
1365         (compare_vector_ptrs_by_name) New function.
1366
1367         * vector.h: New file.
1368
1369 Sun Dec 10 11:32:56 WST 2006 John Darrington <john@darrington.wattle.id.au>
1370
1371         * casefilter.c (casefilter_variable_missing): Avoided comparision of
1372         string variables to SYSMIS.  Thanks to Ben Pfaff for reporting this
1373         problem.
1374
1375 Sat Dec  9 07:18:03 WST 2006 John Darrington <john@darrington.wattle.id.au>
1376
1377         * value-labels.c (destroy_atoms): New function.
1378         * value-labels.c (atom_create): Call destroy_atoms in atexit handler.
1379
1380 Thu Dec  7 17:38:26 2006  Ben Pfaff  <blp@gnu.org>
1381
1382         Thanks to Jason Stover for pointing out this problem.
1383         
1384         * data-out.c (output_number): Use gsl_finite from GSL, which is
1385         portable, instead of isfinite, which is not.
1386         (power256) Ditto.
1387
1388 Thu Dec  7 15:22:38 WST 2006 John Darrington <john@darrington.wattle.id.au>
1389
1390         * variable.c variable.h (value_dup): New function.
1391
1392 Mon Dec  4 22:20:17 2006  Ben Pfaff  <blp@gnu.org>
1393
1394         Start converting struct variable to an opaque type.  In this
1395         phase, we add a bunch of setter and getter functions and convert
1396         most of the PSPP code to use them.  The resulting changes are
1397         pervasive but mostly trivial, and only the notable changes are
1398         logged.
1399         
1400         * format.c (fmt_equal): New function.
1401         
1402         * variable.c (var_type_is_valid): New function.
1403         (measure_is_valid) Moved here, from format.c.
1404         (alignment_is_valid) Moved here, from format.c.
1405         (var_get_name) New function.
1406         (var_set_name) New function.
1407         (width_to_type) New function.
1408         (var_get_type) New function.
1409         (var_get_width) New function.
1410         (var_set_width) New function.
1411         (var_is_numeric) New function.
1412         (var_is_alpha) New function.
1413         (var_is_short_string) New function.
1414         (var_is_long_string) New function.
1415         (var_is_very_long_string) New function.
1416         (var_get_missing_values) New function.
1417         (var_set_missing_values) New function.
1418         (var_clear_missing_values) New function.
1419         (var_has_missing_values) New function.
1420         (var_is_value_missing) New function.
1421         (var_is_num_missing) New function.
1422         (var_is_str_missing) New function.
1423         (var_is_value_user_missing) New function.
1424         (var_is_num_user_missing) New function.
1425         (var_is_str_user_missing) New function.
1426         (var_is_value_system_missing) New function.
1427         (var_get_print_format) New function.
1428         (var_set_print_format) New function.
1429         (var_get_write_format) New function.
1430         (var_set_write_format) New function.
1431         (var_set_both_formats) New function.
1432         (var_get_label) New function.
1433         (var_set_label) New function.
1434         (var_clear_label) New function.
1435         (var_has_label) New function.
1436         (var_get_measure) New function.
1437         (var_set_measure) New function.
1438         (var_get_display_width) New function.
1439         (var_set_display_width) New function.
1440         (var_get_alignment) New function.
1441         (var_set_alignment) New function.
1442         (var_get_value_cnt) New function.
1443         (var_get_leave) New function.
1444         (var_get_short_name) New function.
1445
1446         * variable.h: (struct variable) Removed "type" and "nv" members;
1447         they are now computed from "width" where needed.
1448
1449 Mon Dec  4 21:38:40 2006  Ben Pfaff  <blp@gnu.org>
1450
1451         * missing-values.c (mv_resize): Don't write beyond end of the
1452         allocated buffer when resizing a long string.
1453
1454 Sat Dec  2 16:28:32 2006  Ben Pfaff  <blp@gnu.org>
1455
1456         Clean up identifier code: don't require identifier enumerations to
1457         be in a particular order; make better use of string library;
1458         expose less of the internals.
1459                 
1460         * identifier.c: (lex_skip_identifier) Rename lex_id_get_length,
1461         change interface.  Updated all callers.
1462         (lex_id_match) Change interface to use struct substring, update
1463         all callers.
1464         (lex_id_match_len) Removed.  Update callers to use lex_id_match.
1465         (global array keywords[]) Make static, change form.  Update all
1466         users to use lex_id_name instead.
1467         (lex_is_keyword) New function.
1468         (lex_id_to_token) Change interface to use struct substring, update
1469         all callers.
1470         (lex_id_name) New function.
1471
1472         * identifier.h: (T_FIRST_KEYWORD) Removed.  Changed users to call
1473         lex_is_keyword instead.
1474         (T_LAST_KEYWORD) Removed.
1475         (T_N_KEYWORDS) Removed.
1476         
1477 Sat Nov 18 20:46:35 2006  Ben Pfaff  <blp@gnu.org>
1478
1479         * format.c: (fmt_date_template) Distinguish characters for which a
1480         space is output and any date delimiter is allowed on input, from
1481         those for which a space is output and only a space is allowed on
1482         input.  The former is represented by X, the latter by a space.
1483         Also, drop distinction between h and H, changing the former to the
1484         latter.
1485
1486         * data-in.c: Completely rewrite internals to conform to SPSS input
1487         formats as closely as possible.
1488         (data_in) Changed external interface by replacing the structure
1489         that was used as a single argument by a set of arguments.  Updated
1490         all callers.
1491         (data_in_finite_line) Removed.  Converted all callers to use plain
1492         data_in.
1493         (data_in_get_integer_format) New function.
1494         (data_in_set_integer_format) New function.
1495         (data_in_get_float_format) New function.
1496         (data_in_set_float_format) New function.
1497
1498         * data-in.h: (enums DI_IGNORE_ERROR, DI_IMPLIED_DECIMALS) Removed.
1499         (struct data_in) Removed.
1500
1501         * data-out.c: (output_date) Drop each component from the input as
1502         it is output, to allow us to drop the distinction between h (a
1503         count of hours) and H (the hour of day) template characters.
1504         Also, handle new X template character.
1505         (output_scientific) Follow more rational rule on when to drop
1506         fraction introduced between SPSS 13 and 15.  Updated test case to
1507         match new behavior.
1508
1509 Sat Nov 11 11:41:26 2006  Ben Pfaff  <blp@gnu.org>
1510
1511         Fix buffer overflow reported by John Darrington.
1512
1513         * data-out.c (output_bcd_integer): In case of SYSMIS, etc.,
1514         realize that DIGITS is a count of nibbles, not of bytes.
1515
1516 Sat Nov  4 15:59:56 2006  Ben Pfaff  <blp@gnu.org>
1517
1518         * calendar.c (calendar_offset_to_gregorian) Also return the
1519         year-of-day.  Change callers to new interface.
1520
1521         * data-out.c: Completely rewrite internals to conform to SPSS
1522         output formats as completely as possible.
1523         (data_out) Change interface to put input parameters before output
1524         parameters, for consistency with the style I now prefer.  Update
1525         all callers.
1526         (data_out_get_integer_format) New public function.
1527         (data_out_set_integer_format) New public function.
1528         (data_out_get_float_format) New public function.
1529         (data_out_set_float_format) New public function.
1530
1531         * data-out.h: New file.  Move prototype for data_out here, from
1532         format.h.
1533
1534         * format.c: (fmt_step_width) Use equality comparison instead of
1535         bitwise and, for clarity.
1536         (fmt_is_string) Ditto.
1537         (fmt_input_to_output) Fix categories that are translated to F
1538         format.
1539
1540 Sun Nov  5 08:29:34 WST 2006 John Darrington <john@darrington.wattle.id.au>
1541
1542         * casefilter.c casefilter.h (new files), casefile.c casefile.h 
1543         casefile-private.h: Added casefilter to assist commands with missing 
1544         values.
1545
1546 Sat Nov  4 11:47:09 2006  Ben Pfaff  <blp@gnu.org>
1547
1548         Implement SET ERRORS, SHOW ERRORS.  Fixes bug #17609.
1549         
1550         * settings.c: (route_errors_to_terminal) New variable.
1551         (route_errors_to_listing) New variable. 
1552         (get_error_routing_to_terminal) New function.
1553         (set_error_routing_to_terminal) New function.
1554         (get_error_routing_to_listing) New function.
1555         (set_error_routing_to_listing) New function.
1556
1557         * settings.h: (SET_ROUTE_* enums) Removed, because unused.
1558
1559 Tue Oct 31 19:58:27 2006  Ben Pfaff  <blp@gnu.org>
1560
1561         * format.c: Completely rewrite, to achieve better abstraction.
1562         Rewrite all references to formats in other files.
1563         
1564         * format.def: Rewrite and reorganize.
1565
1566         * settings.c: Move everything related to custom currency formats
1567         into format.[ch], changing them in form, so as to group related
1568         code and definitions better.  Changed all references to use the
1569         new functions.
1570         (static var decimal) Removed.
1571         (static var grouping) Removed.
1572         (static var cc) Removed.
1573         (get_decimal) Removed.
1574         (set_decimal) Removed.
1575         (get_grouping) Removed.
1576         (set_grouping) Removed.
1577         (get_cc) Removed.
1578         (set_cc) Removed.
1579
1580         * settings.h: (macro CC_CNT) Removed.
1581         (macro CC_WIDTH) Removed.
1582         (struct custom_currency) Removed.
1583
1584 Tue Oct 31 19:56:19 2006  Ben Pfaff  <blp@gnu.org>
1585
1586         * data-in.c (data_in): Use switch statement instead of table, to
1587         avoid dependence on the order of the FMT_* enums.
1588
1589 Tue Oct 31 19:35:36 2006  Ben Pfaff  <blp@gnu.org>
1590
1591         * data-out.c: (num_to_string) Removed, because it was dead code.
1592
1593 Tue Oct 31 18:09:24 2006  Ben Pfaff  <blp@gnu.org>
1594
1595         * data-in.c (parse_trailer): Fix error message.
1596
1597 Sat Oct 28 11:56:50 2006  Ben Pfaff  <blp@gnu.org>
1598
1599         * format.c (fmt_is_binary): New function.
1600
1601 Thu Oct 19 22:59:56 WST 2006 John Darrington <john@darrington.wattle.id.au>
1602
1603         * procedure.c procedure.h: Encapsulated the static data into a single
1604         struct.  
1605
1606 Sat Oct 14 16:56:44 2006  Ben Pfaff  <blp@gnu.org>
1607
1608         * casefile.c (casereader_read_xfer): Always initialize the case,
1609         even on an error condition.
1610
1611 Wed Sep 27 09:37:49 WST 2006 John Darrington <john@darrington.wattle.id.au>
1612
1613         * procedure.c (case_limit_trns_proc): Fixed buglet which rendered the 
1614         entire function useless.
1615
1616 Mon Sep 25 17:11:46 WST 2006 John Darrington <john@darrington.wattle.id.au>
1617
1618         * casefile-private.h casefile.c casefile.h fastfile.c: Created new
1619         casereader method casereader_clone.   
1620         
1621         * procedure.c pransformations.h: Introduced new type casenum_t
1622
1623 Thu Sep 21 07:00:30 2006  Ben Pfaff  <blp@gnu.org>
1624
1625         * variable.c: (width_to_bytes) Rephrase code for clarify.
1626
1627 Sun Jul 16 19:52:03 2006  Ben Pfaff  <blp@gnu.org>
1628
1629         * format.c: (fmt_type_from_string) New function.
1630         (fmt_to_string) Include decimals in output if the format has
1631         decimals, even if the format type does not.  This way, we can
1632         accurately reproduce incorrect formats in user output.
1633         (check_common_specifier) Make the check for a bad format type an
1634         assertion, so we get bug reports if they show up.  Fix message.
1635         Check for decimal places with a format type that doesn't allow
1636         them.
1637         (check_input_specifier) Remove check for FMT_X, which has been
1638         deleted.
1639         (check_output_specifier) Ditto. 
1640
1641         * format.def: Remove FMT_T, FMT_X, FMT_DESCEND, FMT_NEWREC.
1642
1643         * format.h: (macro FMT_TYPE_LEN_MAX) New macro.
1644         (struct fmt_desc) Use FMT_TYPE_LEN_MAX in definition.
1645         (enum fmt_parse_flags) Removed.
1646
1647 Mon Jul 17 18:26:21 WST 2006 John Darrington <john@darrington.wattle.id.au>
1648
1649         * casefile.c casefile.h: Converted to  an abstract base class.
1650         * casefile-private.h fastfile.c fastfile.h: New files.
1651         * automake.mk procedure.c scratch-writer.c storage-stream.c
1652
1653 Wed Jul 12 21:02:26 2006  Ben Pfaff  <blp@gnu.org>
1654
1655         * procedure.c (internal_procedure): Create sink_case with only as
1656         many values as the compacted dictionary.
1657
1658 Wed Jul 12 21:01:00 2006  Ben Pfaff  <blp@gnu.org>
1659
1660         Remove "debugging" code that caused plenty of false positives and
1661         no true positives.
1662         
1663         * case.h (struct ccase): [DEBUGGING] Remove `this' member.
1664
1665         * case.c: Remove all references to `this' member.
1666
1667 Thu Jul  6 19:09:53 2006  Ben Pfaff  <blp@gnu.org>
1668
1669         Fix link error noted by Jason Stover.
1670         
1671         * storage-stream.c: Include <assert.h>.
1672
1673 Tue Jul  4 08:47:35 2006  Ben Pfaff  <blp@gnu.org>
1674
1675         Fix bug #15766 (/KEEP subcommand on SAVE doesn't fully support
1676         ALL) and additional underlying system file issues.
1677
1678         Thanks to John Darrington for review.
1679
1680         First problem: var_hash points to variables not owned by the
1681         sys-file-reader, which the caller may free or modify.  Use an
1682         array of sfm_vars instead, as done earlier (e.g. CVS version
1683         1.12).
1684         
1685         * sys-file-reader.c (struct sfm_reader): Remove var_hash, svars
1686         members and remove all code that references it.  Add vars, var_cnt
1687         members.  Remove fix_specials member, which was unused.
1688         (struct sfm_var) Remove name member, which was unused.
1689         (sfm_close_reader) Free vars member instead of var_hash.
1690         (compare_var_shortnames) Removed.
1691         (hash_var_shortname) Removed.
1692         (sfm_open_reader) Fill out vars array.
1693         (compare_var_index) Removed.
1694         (sfm_read_case) Use vars instead of var_hash.
1695         
1696         Second problem: we're confused about when we actually have very
1697         long strings, causing us to choose incorrectly between slow path
1698         and fast path in sfm_read_case.
1699
1700         * sys-file-reader.c: (sfm_open_reader) Only mark has_vls if we
1701         have very long strings, not when we have long variable names,
1702         which is an unrelated feature.
1703
1704 Tue Jun 27 12:06:49 2006  Ben Pfaff  <blp@gnu.org>
1705
1706         * variable.h: Move var_set and variable parsing declarations to
1707         new header, src/language/lexer/variable-parser.h.  Modified lots
1708         of files to include the new header.
1709
1710 Sun Jun 25 22:39:32 2006  Ben Pfaff  <blp@gnu.org>
1711
1712         * value-labels.c (value_to_string): When there's no value label,
1713         format the variable according to its print format, instead of
1714         always effectively using A or F format.
1715
1716 Mon Jun 19 18:05:42 WST 2006 John Darrington <john@darrington.wattle.id.au>
1717
1718         * casefile.c (casefile_get_random_reader): Nasty hack to get around 
1719         the mode assertion.
1720
1721         * format.c: Removed tortological assertion.
1722
1723 Fri Jun  9 12:20:09 2006  Ben Pfaff  <blp@gnu.org>
1724
1725         Reform string library.
1726         
1727         * file-name.c (fn_interp_vars): Change interface to take a
1728         substring as input.  Updated all users.
1729         
1730 Fri Jun  9 12:11:24 2006  Ben Pfaff  <blp@gnu.org>
1731
1732         * format.c (measure_is_valid): Really return false when m >=
1733         n_MEASURES.
1734
1735 Tue Jun  6 18:46:26 2006  Ben Pfaff  <blp@gnu.org>
1736
1737         Implement random access to casefiles, for use in GUI.
1738         
1739         * casefile.c: (struct casereader) Add `random', `file_ofs',
1740         `buffer_ofs' members.
1741         (casefile_get_random_reader) New function.
1742         (read_open_file) Break part into new function
1743         seek_and_fill_buffer().
1744         (fill_buffer) Update buffer_ofs, file_ofs.
1745         (casereader_seek) New function.
1746
1747 Tue May 30 19:52:33 WST 2006 John Darrington <john@darrington.wattle.id.au>
1748
1749         * settings.c: Added call to i18n{done, init}.
1750
1751 Tue May  9 21:09:17 2006  Ben Pfaff  <blp@gnu.org>
1752
1753         * procedure.h: Add WARN_UNUSED_RESULT to procedure function
1754         prototypes.
1755
1756 Tue May  9 21:08:05 2006  Ben Pfaff  <blp@gnu.org>
1757
1758         * casefile.c: Convert many uses of `int' to `bool'.
1759
1760 Sat May  6 22:49:43 2006  Ben Pfaff  <blp@gnu.org>
1761
1762         * transformations.c (trns_chain_destroy): Destroy chain's trns
1763         member, to fix memory leak.
1764
1765 Sat May  6 22:48:30 2006  Ben Pfaff  <blp@gnu.org>
1766
1767         * storage-stream.c (storage_source_decapsulate): Destroy case
1768         source to fix memory leak.
1769
1770 Sat May  6 22:46:47 2006  Ben Pfaff  <blp@gnu.org>
1771
1772         * scratch-reader.c (scratch_reader_read_case): Copy into existing
1773         case passed as argument instead of initializing the argument as a
1774         case.  Fixes memory leak that showed up in
1775         tests/command/aggregate.sh with scratch files.
1776
1777 Sat May  6 22:45:55 2006  Ben Pfaff  <blp@gnu.org>
1778
1779         * procedure.c (proc_done): Destroy default_dict, to fix memory
1780         leak.
1781
1782 Sat May  6 22:44:44 2006  Ben Pfaff  <blp@gnu.org>
1783
1784         Simplify procedure_with_splits().
1785         
1786         * procedure.c (struct split_aux_data): Removed case_count member.
1787         (procedure_with_splits) Don't initialize case_count.
1788         (split_procedure_case_func) Check whether prev_case is null
1789         instead of case_count.
1790         (split_procedure_end_func) Ditto.
1791
1792 Sat May  6 22:42:23 2006  Ben Pfaff  <blp@gnu.org>
1793
1794         * case.c (case_move): Do nothing if dst and src are the same
1795         object.
1796         (case_try_create) Merge two similar cases.
1797         (case_copy) Unshare only if data must be actually copied.
1798
1799 Sun May  7 10:04:06 WST 2006 John Darrington <john@darrington.wattle.id.au>
1800
1801         * data-in.c data-out.c dictionary.c sys-file-reader.c
1802         sys-file-writer.c variable.c variable.h:  Reworked very long string
1803         support for better encapsulation.
1804
1805 Sat May  6 19:02:00 2006  Ben Pfaff  <blp@gnu.org>
1806
1807         * value-labels.c (val_labs_can_set_width): New function.
1808         (val_labs_set_width) Clear labels if increasing width to long
1809         string.
1810         (val_labs_destroy) Remove unneeded test for null.
1811         
1812 Sat May  6 16:14:08 2006  Ben Pfaff  <blp@gnu.org>
1813
1814         * value-labels.h: Remove unneeded dependency on variable.h.
1815
1816 Sat May  6 15:58:36 2006  Ben Pfaff  <blp@gnu.org>
1817
1818         Get rid of `char *c' member in union value, for cleanliness.
1819         
1820         * value.h: (union value) Remove `c' member.
1821
1822 Sat May  6 15:36:59 2006  Ben Pfaff  <blp@gnu.org>
1823
1824         Make dictionary compacting functions a little more general.
1825         
1826         * sys-file-writer.c (sfm_open_writer): Use
1827         dict_compacting_would_change().
1828         (does_dict_need_translation) Removed.
1829
1830 Sat May  6 15:35:42 2006  Ben Pfaff  <blp@gnu.org>
1831
1832         Make dictionary compacting functions a little more general.
1833         
1834         * dictionary.c (dict_needs_compaction): Rename
1835         dict_compacting_would_shrink().  Update all callers.
1836         (dict_compacting_would_change) New function.
1837         
1838 Sat May  6 14:25:49 2006  Ben Pfaff  <blp@gnu.org>
1839
1840         * sys-file-writer.c: (does_dict_need_translation) Fix bug:
1841         inverted return value (!).
1842
1843 Sat May  6 13:37:52 2006  Ben Pfaff  <blp@gnu.org>
1844
1845         Continue reforming procedure execution.  
1846
1847         * procedure.c: Search and replace "vfm" by "proc".  Notably:
1848         (static var vfm_source) Rename proc_source.  Update all
1849         references.
1850         (static var vfm_sink) Rename proc_sink.  Update all references.
1851         
1852 Sat May  6 12:38:55 2006  Ben Pfaff  <blp@gnu.org>
1853
1854         Continue reforming procedure execution.  In this phase, remove
1855         PROCESS IF, which was deprecated anyway and can be easily
1856         simulated with TEMPORARY followed by SELECT IF.
1857
1858         * procedure.c: (open_active_file) Don't call
1859         add_process_if_trns().
1860         (discard_variables) Get rid of redundant call to
1861         proc_cancel_all_transformations().
1862         (add_process_if_trns) Removed.
1863         (process_if_trns_proc) Removed.
1864         (process_if_trns_free) Removed.
1865
1866 Sat May  6 10:58:05 2006  Ben Pfaff  <blp@gnu.org>
1867
1868         Continue reforming procedure execution.  In this phase, add
1869         `const' to the case passed to procedure()'s callback.
1870
1871         Updated all users of procedure() as well.
1872         
1873         * procedure.c: (struct write_case_data) Add "const" to ccase
1874         parameter for case_func member.
1875         (procedure) Add "const" to ccase parameter for proc_func
1876         parameter.
1877         (multipass_case_func) Make ccase parameter const.
1878         (internal_procedure) Add "const" to ccase parameter for case_func
1879         parameter.
1880         (split_procedure_case_func) Make ccase parameter const.
1881         (multipass_split_case_func) Make ccase parameter const.
1882         
1883 Sat May  6 10:30:33 2006  Ben Pfaff  <blp@gnu.org>
1884
1885         Continue reforming procedure execution.  In this phase, get rid of
1886         the output code for SPLIT FILE groups in procedure.c, which really
1887         shouldn't be doing any output.  Move it into the individual
1888         procedures instead.  This also adds some flexibility.
1889
1890         Updated many users of procedure_with_splits() and
1891         multipass_procedure_with_splits() to call
1892         output_split_file_values() and to deal with increased use of
1893         const.
1894
1895         * procedure.c: (struct split_aux_data) Add "const struct ccase *"
1896         parameter to begin_func member.
1897         (procedure_with_splits) Add "const struct ccase *" parameter to
1898         begin_func parameter.  Make ccase parameter const in proc_func
1899         parameter.
1900         (split_procedure_case_func) Don't dump split file group.  Pass
1901         case to begin_func.
1902         (dump_splits) Moved to language/dictionary/split-file.c as
1903         output_split_file_values().
1904         (struct multipass_split_aux_data) Add "const struct ccase *"
1905         parameter to split_func member.
1906         (multipass_procedure_with_splits) Add "const struct ccase *"
1907         parameter to split_func parameter.
1908         (multipass_split_case_func) Save new SPLIT FILE case before
1909         outputting case.
1910         (multipass_split_output) Pass saved SPLIT FILE case to split_func.
1911         
1912 Fri May  5 22:48:50 2006  Ben Pfaff  <blp@gnu.org>
1913
1914         Continue reforming procedure execution.  Change
1915         internal_procedure() so that it calls open_active_file() and
1916         close_active_file(), which isolates most of the actual procedure
1917         functionality.
1918
1919         * procedure.c: (struct write_case_data) Rename `proc_func' member
1920         to `case_func' and update all references.
1921         (procedure) Rewrite as one-line wrapper around
1922         internal_procedure().
1923         (struct multipass_aux_data) New.
1924         (multipass_callback) Renamed multipass_case_func().  Use struct
1925         multipass_aux_data as auxiliary data.
1926         (multipass_end_func) New function.
1927         (multipass_procedure) Rewrite as wrapper for internal_procedure()
1928         that uses multipass_case_func, multipass_end_func.
1929         (internal_procedure) Add `end_func' argument.  Move optimization
1930         of trivial case in here.  Move call to open_active_file() and
1931         close_active_file() in here.  Now assert that vfm_source is
1932         non-null.
1933         (procedure_with_splits_callback) Rename
1934         split_procedure_case_func().
1935         (split_procedure_end_func) New function.
1936         (multipass_split_callback) Rename multipass_split_case_func.
1937         (multipass_split_end_func) New function.
1938         (discard_variables) No need to test for nonnull vfm_source.
1939
1940 Fri May  5 21:34:02 2006  Ben Pfaff  <blp@gnu.org>
1941
1942         Continue reforming procedure execution.  Get rid of unused member.
1943
1944         * procedure.c: (struct write_case_data) Remove `cases_analyzed'
1945         member.
1946         (write_case) Don't increment cases_analyzed.
1947
1948 Thu May  4 21:50:11 2006  Ben Pfaff  <blp@gnu.org>
1949
1950         Continue reforming procedure execution.  In this phase, move
1951         procedure.c and procedure.h from src to src/data.  Update
1952         makefiles and #includes accordingly.
1953
1954         * procedure.c: Moved here from src/.
1955
1956         * procedure.h: Moved here from src/.
1957
1958 Wed May  3 22:42:12 2006  Ben Pfaff  <blp@gnu.org>
1959
1960         Continue reforming procedure execution.  In this phase, get rid of
1961         many global variables, consolidating procedure execution in
1962         procedure.c.  Encapsulate transformations in new "struct
1963         trns_chain".  Also, change implementation of N OF CASES, FILTER,
1964         and PROCESS IF from special cases to transformations.
1965          
1966         * automake.mk: (src_data_libdata_a_SOURCES) Add transformations.c,
1967         transformations.h.
1968
1969         * dictionary.c: (global variable default_dict) Move to
1970         src/procedure.c.
1971
1972         * variable.h: (TRNS_*) Move to transformations.h.
1973         (struct transformation) Move to transformations.c.
1974
1975 Thu May  4 13:47:06 WST 2006 John Darrington <john@darrington.wattle.id.au>
1976
1977         * sys-file-reader.c: Fixed invalid read problems.
1978
1979 Tue May  2 15:57:10 2006  Ben Pfaff  <blp@gnu.org>
1980
1981         * storage-stream.c: Add missing function comments.
1982
1983 Tue May  2 15:50:21 2006  Ben Pfaff  <blp@gnu.org>
1984
1985         Continue reforming procedure execution.  In this phase, add some
1986         new, needed functionality to storage-stream.
1987
1988         * storage-stream.c: (storage_source_decapsulate) New function.
1989
1990 Tue May  2 15:43:36 2006  Ben Pfaff  <blp@gnu.org>
1991
1992         * variable.c (width_to_bytes): Declarations must precede
1993         statements for C90 compliance.
1994
1995 Tue May  2 10:42:05 WST 2006 John Darrington <john@darrington.wattle.id.au>
1996
1997         * data-out.c, data-in.c, variable.c, variable.h: New functions 
1998         copy_mangle and copy_demangle for reading/writing cases; emulates the 
1999         way SPSS deals with strings > 255 bytes.
2000
2001         * sys-file-reader.c sys-file-writer.c: Added support for Record 7, 
2002         subtype 14 needed for strings longer than 255 bytes.
2003
2004         * dictionary.c, format.def, value.c : Updated to use MAX_STRING 
2005         instead of literal values. Also fixed some constness issues.
2006
2007         * format.h: Constness
2008
2009         * sfm-private.h: Renamed the case_size identifier, since I discovered 
2010         that SPSS's respect for this variable is very nominal.
2011
2012 Mon May  1 15:45:42 2006  Ben Pfaff  <blp@gnu.org>
2013
2014         Change case limit type from int to size_t.
2015
2016         * dictionary.c: (struct dictionary) Change type of case_limit
2017         member.
2018         (dict_get_case_limit) Change return type.
2019         (dict_set_case_limit) Change parameter type.
2020
2021 Wed Apr 26 20:01:19 2006  Ben Pfaff  <blp@gnu.org>
2022
2023         * variable.h: (struct variable) Rename `reinit' member as `leave'
2024         and invert sense.  Fix up all references.
2025
2026 Wed Apr 26 19:39:28 2006  Ben Pfaff  <blp@gnu.org>
2027
2028         Continue reforming procedure execution.  In this phase, break
2029         procedure.c into multiple files.
2030         
2031         * automake.mk: (src_data_libdata_a_SOURCES) Add all the new files.
2032
2033         * case-sink.c: New file.
2034
2035         * case-sink.h: New file.
2036         
2037         * case-source.c: New file.
2038
2039         * case-source.h: New file.
2040         
2041         * storage-stream.c: New file.
2042
2043         * storage-stream.h: New file.
2044
2045 Wed Apr 26 14:55:19 2006  Ben Pfaff  <blp@gnu.org>
2046
2047         * variable.h: (struct variable) Remove `init' member and all
2048         references to it from other files.  It was initialized in several
2049         places, but nothing really ever used it for anything worthwhile.
2050         Thanks to Jason Stover for pointing out how confusing this
2051         member is.
2052
2053 Sun Apr 23 22:04:45 2006  Ben Pfaff  <blp@gnu.org>
2054
2055         Continue reforming error message support.  In this phase, get rid
2056         of message "titles" and put the message text in `struct error'.
2057         Now `struct error' encapsulates a message more properly.
2058         
2059         * casefile.c: (io_error) Use err_msg() instead of err_vmsg().
2060         Format message ourselves.
2061
2062         * data-in.c: (vdls_error) Ditto.
2063
2064         * por-file-reader.c: (error) Ditto.
2065
2066         * sys-file-reader.c: (corrupt_msg) Ditto.
2067
2068 Sun Apr 16 18:49:51 2006  Ben Pfaff  <blp@gnu.org>
2069
2070         GNU standards require "file name" instead of "filename" in
2071         documentation.  It's nice for our code to follow the convention
2072         too.
2073         
2074         * casefile.c: (struct casefile) Rename `filename' member to
2075         `file_name'.  Updated all references.
2076
2077         * file-name.c: [!unix] (struct file_identity) Rename
2078         normalized_filename member to normalized_file_name.  Updated all
2079         references.
2080
2081 Sun Apr 16 18:35:33 2006  Ben Pfaff  <blp@gnu.org>
2082
2083         We don't really support anything but Unix-like environments well,
2084         so we might as well de-obfuscate by writing directory and path
2085         separators explicitly.
2086
2087         * file-name.h: (macro DIR_SEPARATOR) Removed.  Changed all usages
2088         to just '/'.
2089         (macro PATH_SEPARATOR) Removed.  Changed all usages to just ':'.
2090         (macro DIR_SEPARATOR_STRING) Removed.  Changed all usages to just
2091         "/".
2092         (macro PATH_SEPARATOR_STRING) Removed.  Changed all usages to just
2093         ":"
2094
2095 Sun Apr 16 18:28:35 2006  Ben Pfaff  <blp@gnu.org>
2096
2097         GNU standards require "file name" instead of "filename" in
2098         documentation.  It's nice for our code to follow the convention
2099         too.
2100         
2101         * filename.c: Rename to file-name.c.
2102
2103         * filename.h: Rename to file-name.h.  Update all inclusions.
2104         Update header guards.
2105
2106         * automake.mk: Update file names.
2107
2108 Sun Apr 16 16:42:47 2006  Ben Pfaff  <blp@gnu.org>
2109
2110         * filename.c: (fn_dirname) Renamed fn_dir_name(), all references
2111         updated.
2112         (fn_basename) Removed (dead code).
2113         (fn_absolute_p) Renamed fn_is_absolute(), all references updated.
2114         (fn_special_p) Renamed fn_is_special(), all references updated.
2115         (fn_exists_p) Renamed fn_exists(), all references updated.
2116
2117 Sun Apr 16 16:33:58 2006  Ben Pfaff  <blp@gnu.org>
2118
2119         * filename.c: (fn_tilde_expand) Rewrite for cleaner code.  
2120         Also, now it only tilde-expands file names, not paths.
2121         (fn_search_path) Tilde-expand one directory at a time.
2122
2123 Sun Apr 16 16:28:06 2006  Ben Pfaff  <blp@gnu.org>
2124
2125         * filename.c: (fn_search_path) rewrite for cleaner code.  Also,
2126         get rid of non-Unixlike version of the code, which has probably
2127         never been tested.
2128         (fn_prepend_dir) Removed (dead code).
2129
2130         * filename.h: (macro DIR_SEPARATOR_STRING) New.
2131         (macro PATH_SEPARATOR_STRING) New.
2132 Sun Apr 16 16:05:28 2006  Ben Pfaff  <blp@gnu.org>
2133
2134         Continue reforming error message support.  In this phase, we get
2135         rid of VM() and the other msg() support for "verbosity", replacing
2136         it by a new function verbose_msg().
2137
2138         * filename.c: (fn_search_path) Use verbose_msg() instead of
2139         msg(VM(), ...).  
2140
2141 Sat Apr 15 19:53:19 2006  Ben Pfaff  <blp@gnu.org>
2142
2143         * sfm-private.h: Get rid of #defines after #error, which makes no
2144         sense.
2145
2146 Sat Apr 15 19:48:57 2006  Ben Pfaff  <blp@gnu.org>
2147
2148         Get rid of our own int32 type in favor of the standard int32_t
2149         type.
2150         
2151         * sfm-private.h: (int32 macro) Don't define this anymore.  Do
2152         include <stdint.h>.
2153
2154         * sys-file-reader.c: Use int32_t instead of int32 throughout.
2155         
2156         * sys-file-writer.c: Use int32_t instead of int32 throughout.
2157
2158 Sat Apr 15 19:36:47 2006  Ben Pfaff  <blp@gnu.org>
2159
2160         Remove ill-considered file routines that are no longer used.
2161         
2162         * filename.c: (fn_open_ext) Removed.
2163         (fn_close_ext) Removed.
2164
2165         * filename.h: (struct file_ext) Removed.
2166
2167 Mon Apr  3 13:22:39 2006  Ben Pfaff  <blp@gnu.org>
2168
2169         * variable.c (var_is_valid_name): Move declarations before code
2170         for C90 compliance.
2171
2172 Tue Apr  4 15:28:40 WST 2006 John Darrington <john@darrington.wattle.id.au>
2173
2174         * filename.ch (fn_interp_vars): Fixed small buglet.
2175
2176 Tue Mar 28 13:47:16 WST 2006 John Darrington <john@darrington.wattle.id.au>
2177         
2178         * filename.[ch] (fn_interp_vars): Changed the signature and semantics
2179         so as to modify the string inline.   Thus makeing it easier to
2180         destroy the results when no longer needed.
2181         
2182 2006-03-25  Jason Stover  <jhs@math.gcsu.edu>
2183
2184         * category.c (cat_stored_values_destroy): Fixed memory leak.
2185
2186 Fri Mar 24 18:15:41 2006  Ben Pfaff  <blp@gnu.org>
2187
2188         Add some missing frees.  Thanks to John Darrington for reporting
2189         these.
2190
2191         * any-writer.c (any_writer_close): Free writer.
2192
2193         * any-reader.c (any_reader_close): Free reader.
2194
2195 Mon Mar 20 16:33:53 2006  Ben Pfaff  <blp@gnu.org>
2196
2197         * por-file-reader.c: (error) Mark as NO_RETURN.
2198
2199 Sat Mar 11 15:06:07 WST 2006 John Darrington <john@darrington.wattle.id.au>
2200
2201         * settings.c: Changed default value of scompress to true.
2202
2203 Sat Mar  4 13:22:51 2006  Ben Pfaff  <blp@gnu.org>
2204
2205         * sfm-private.h: Include variable.h, to get SHORT_NAME_LEN.
2206
2207         * value.h: Remove check on MAX_SHORT_STRING, which I don't think
2208         really applies.
2209
2210         * variable.h: Move definition of SHORT_NAME_LEN, LONG_NAME_LEN
2211         here from pref.h.orig.
2212
2213 Sat Mar  4 12:50:48 WST 2006 John Darrington <john@darrington.wattle.id.au>
2214
2215         * sys-file-reader.c: Fixed bug reading compressed files.
2216
2217 Thu Mar  2 08:40:33 WST 2006 John Darrington <john@darrington.wattle.id.au>
2218
2219         * Numerous renames.  See src/ChangeLog for details.
2220         
2221         * Moved files from src directory