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