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