f18ea50a28602be59c5db6f9c313bcd6f70a731e
[pspp-builds.git] / src / language / data-io / ChangeLog
1 2007-12-04  Ben Pfaff  <blp@gnu.org>
2
3         Make GET DATA a separate command, instead of something invoked
4         indirectly from GET.
5
6         * automake.mk: Remove get-data.h from sources.
7
8         * get-data.h: Removed.
9
10         * get-data.c (parse_get_data_command): Rename cmd_get_data.
11
12         * get.c (parse_read_command): No longer any need to check for DATA
13         keyword.
14
15 2007-12-04  Ben Pfaff  <blp@gnu.org>
16
17         * src/language/data-io/data-reader.c (struct dfm_reader): New
18         `file_size' member to support dfm_get_percent_read.
19         (dfm_open_reader): Initialize file_size.
20         (dfm_get_percent_read): New function.
21
22 2007-11-08  Ben Pfaff  <blp@gnu.org>
23
24         Patch #6256: add support for binary, 360 file formats.  Reviewed
25         by John Darrington.
26
27         * data-reader.c (struct dfm_reader): New member `block_left'.
28         (dfm_open_reader): Initialize block_left.  For FH_MODE_TEXT, open
29         the file in text mode.
30         (read_error): New function.
31         (partial_record): New function.
32         (try_to_read_fully): New function.
33         (enum descriptor_type): New enum.
34         (read_descriptor_word): New function.
35         (corrupt_size): New function.
36         (read_size): New function.
37         (read_file_record): Implement new modes.
38         (read_record): Now take care of tracking line numbers here.
39         (dfm_reader_get_legacy_encoding): New function.
40
41         * data-writer.c (dfm_put_record): Implement new modes.
42         (dfm_writer_get_legacy_encoding): New function.
43
44         * file-handle.q: Parse new formats.
45         (cmd_file_handle): Set up new formats.
46
47         * print.c (struct print_trns): New member `encoding'.
48         (internal_cmd_print): Set encoding.
49         (print_trns_proc): Recode output data if necessary.
50         (flush_records): Recode leader byte.
51
52 2007-11-03  Ben Pfaff  <blp@gnu.org>
53
54         Allow output files to overwrite input files (bug #21280).
55
56         * data-list.c (cmd_data_list): Manage file handle reference
57         counts.
58
59         * data-reader.c (struct dfm_reader): Add `lock' member.
60         (dfm_close_reader): Simplify, as reference counting is now
61         separate from locking.
62         (dfm_open_reader): Lock file.
63
64         * data-writer.c (struct dfm_writer): Add fh_lock, replace_file
65         members.
66         (dfm_open_writer): Lock file and prepare for replacement.
67         (dfm_close_writer): Unlock file and replace it.
68
69         * file-handle.q (cmd_close_file_handle): Use fh_unname.
70         (fh_parse): Don't distinguish existing handles for a given file
71         name from new ones.  Manage file handle reference counts.
72
73         * get.c (parse_read_command): Manage file handle reference counts.
74         (parse_write_command): Ditto.
75         (mtf_close_all_files): Ditto.
76
77         * inpt-pgm.c (cmd_reread): Manage file handle reference counts.
78
79         * print-space.c (cmd_print_space): Manage file handle reference
80         counts.
81
82         * print.c (internal_cmd_print): Manage file handle reference
83         counts.
84
85 2007-11-03 John Darrington <john@darrington.wattle.id.au>
86
87         * get.c: Add GET DATA command variant.
88
89         * get-data.c get-data.h (new files): Added support for
90          GET DATA /TYPE='gnm'  command.
91
92 2007-09-23  Ben Pfaff  <blp@gnu.org>
93
94         Bug #21111.  Reviewed by John Darrington.
95
96         * data-list.c (data_list_trns_proc): Properly set retval when END
97         subcommand is in use.
98         (cmd_data_list): Don't allow END subcommand to be used with DATA
99         LIST FREE or LIST.
100
101 2007-09-12  Ben Pfaff  <blp@gnu.org>
102
103         * get.c (get_translate_case): Change input case parameter from
104         const struct ccase * to struct ccase *, to match change in
105         casereader and casewriter translators.  Destroy input case, to fix
106         memory leak.
107
108 2007-08-12  Ben Pfaff  <blp@gnu.org>
109
110         * get.c (parse_read_command): Compact the values in the target
111         dictionary, to save space.
112
113 2007-08-12  Ben Pfaff  <blp@gnu.org>
114
115         * get.c (struct case_map): Move into new file src/data/case-map.c.
116         (start_case_map): Ditto, and rename case_map_prepare_dict.
117         (finish_case_map): Ditto, and rename case_map_from_dict.
118         (map_case): Ditto, and rename case_map_execute.
119         (destroy_case_map): Ditto, and rename case_map_destroy.
120         (case_map_get_value_cnt): Ditto.
121
122 2007-08-12  Ben Pfaff  <blp@gnu.org>
123
124         * get.c (case_map_get_value_cnt): New function.
125
126 2007-07-25  Ben Pfaff  <blp@gnu.org>
127
128         Fix bug #17100.
129         * data-list.c (read_from_data_list_fixed): Handle multi-record
130         DATA LIST correctly.
131
132 2007-07-11  Ben Pfaff  <blp@gnu.org>
133
134         * get.c (map_case): Create destination case instead of leaving it
135         undefined.  Fixes bug #20285.
136         Reviewed by John Darrington.
137
138 2007-06-06  Ben Pfaff  <blp@gnu.org>
139
140         * get.c: Essentially rewrite MATCH FILES to support FIRST and
141         LAST.
142
143 2007-06-06  Ben Pfaff  <blp@gnu.org>
144
145         Adapt case sources, sinks, and clients of procedure code to the
146         new infrastructure.
147         
148         * data-list.c: Make DATA LIST into a casereader.
149
150         * get.c: Change GET, IMPORT, SAVE, EXPORT to use casereaders,
151         casewriters.
152
153         * inpt-pgm.c: Use caseinit code.  Turn INPUT PROGRAM into a
154         casereader.
155
156         * list.q: Adapt to new procedure code.
157
158 2007-05-06  Ben Pfaff  <blp@gnu.org>
159
160         Abstract the documents within a dictionary a little better.
161         Thanks to John Darrington for suggestion, initial version, and
162         review.  Patch #5917.
163
164         * get.c (mtf_merge_dictionary): Simplify creating merged document.
165
166         * sys-file-info.c (display_documents): Use new
167         dict_get_document_line_cnt and dict_get_document_line functions.
168
169 Thu Feb  1 16:56:02 2007  Ben Pfaff  <blp@gnu.org>
170
171         * file-handle.q (fh_parse): Update to new fh_create_file
172         prototype.
173
174 Sat Dec 16 22:16:18 2006  Ben Pfaff  <blp@gnu.org>
175
176         Make it possible to pull cases from the active file with a
177         function call, instead of requiring indirection through a callback
178         function.
179
180         * automake.mk: Removed matrix-data.c.
181
182         * matrix-data.c: Removed.
183
184         * data-list.c (data_list_source_read): Conform with new
185         case_source_class interface.
186         (data_list_source_destroy): Ditto.
187
188         * get.c (case_reader_source_class): Ditto.
189         (case_reader_source_destroy): Ditto.
190         (parse_output_proc): Take advantage of new procedure interface.
191         (output_proc): Removed.
192         (struct mtf_file): Add "struct ccase *" member to allow use of new
193         procedure interface.
194         (cmd_match_files): Take advantage of new procedure interface.
195         (mtf_processing_finish): Removed.
196         (mtf_read_nonactive_records): Renamed mtf_read_records.  Now reads
197         from every file, without any exception for the active file.
198         (mtf_compare_BY_values): Simplify for new interface.
199         (mtf_processing): Simplify for new interface.
200
201         * inpt-pgm.c (is_valid_state): New function.
202         (input_program_source_read): Conform with new case_source_class
203         interface.
204         (input_program_source_destroy): Ditto.
205         (end_case_trns_proc): Now just needs to return TRNS_END_CASE.
206
207 Sat Dec  9 18:43:34 2006  Ben Pfaff  <blp@gnu.org>
208
209         * list.q (cmd_list): Use new var_create, var_destroy functions.
210
211 Thu Nov 30 21:51:58 2006  Ben Pfaff  <blp@gnu.org>
212
213         * inpt-pgm.c (cmd_reread): Always return error code upon detecting
214         syntax error.  Fixes bug #18419.  Thanks to John Darrington for
215         reporting this bug.
216
217 Sun Nov 19 09:17:45 2006  Ben Pfaff  <blp@gnu.org>
218
219         * data-list.c (parse_free): Follow documented (but odd) rule that
220         N format is treated as F format for free-field input.
221         
222         * data-reader.c (read_file_record): Drop new-line character from
223         input text lines.  This is symmetrical with the recently changed
224         dfm_put_record semantics.
225
226 Thu Nov  2 20:56:03 2006  Ben Pfaff  <blp@gnu.org>
227
228         Implement SKIP keyword on DATA LIST.  Fixes bug #17099.
229         
230         * data-list.c: (struct data_list_pgm) Add `skip_records' members.
231         (cmd_data_list) Set skip_records based on user input.
232         (data_list_source_read) Skip records requested by user.
233
234 Tue Oct 31 20:04:06 2006  Ben Pfaff  <blp@gnu.org>
235
236         * placement-parser.c: (PRS_TYPE_T) Now that struct fmt_spec uses
237         an enum fmt_type for its type member, we can't depend on the
238         ability to put negative values into that member as out-of-band
239         values, because enum fmt_type might be an unsigned type.  So use
240         values around SCHAR_MAX instead, because we know that SCHAR_MAX
241         will fit into any type, signed or unsigned, and there aren't
242         nearly that many format types.
243         (parse_var_placements) Add for_input parameter to specify whether
244         we're parsing input or output formats.  Update all callers.
245         (fixed_parse_columns) Ditto.
246         (fixed_parse_fortran) Ditto.
247         
248 Tue Oct 31 18:21:48 2006  Ben Pfaff  <blp@gnu.org>
249
250         * print-space.c (print_space_trns_proc): Let dfm_put_record add
251         the new-line character, to match dfm_put_record change below.
252
253 Sat Oct 28 11:57:19 2006  Ben Pfaff  <blp@gnu.org>
254
255         * data-writer.c (struct dfm_writer): Removed `bounce' member, and
256         all references to it.
257         (dfm_put_record) Change semantics so that it adds formatting
258         itself, such as new-line characters, instead of putting that
259         responsibility on the caller.  Also, pad binary records with
260         spaces instead of zeros, for compatibility.
261
262         * print.c (struct prt_out_spec) New member `sysmis_as_spaces'.
263         (struct print_trns) Remove `omit_new_lines' and all references,
264         since dfm_put_record() is taking care of that.  Add
265         `include_prefix'.
266         (internal_cmd_print) Allow an empty set of data to print.  Set
267         include_prefix.
268         (parse_specs) Allow an empty set of data to print.
269         (parse_variable_argument) Only add space with PRINT command.  Set
270         sysmis_as_spaces.
271         (print_trns_proc) Indent records if include_prefix is set, for
272         compatibility.  Output SYSMIS as spaces if sysmis_as_spaces is
273         set.  Put "1" in first column if PRINT EJECT is used with an
274         external output file.
275         (flush_records) Ditto.
276
277 Sat Oct 28 16:19:57 WST 2006 John Darrington <john@darrington.wattle.id.au>
278
279         * data-reader.c: Eliminated references to extern variable getl_buf
280
281 Sat Aug  5 08:25:07 2006  Ben Pfaff  <blp@gnu.org>
282
283         Fix bug #17329 in REREAD parsing, reported by John Darrington.
284
285         * inpt-pgm.c (cmd_reread): Fix file handle parsing.
286
287 Mon Jul 31 10:32:31 2006  Ben Pfaff  <blp@gnu.org>
288
289         * print.c (parse_specs): Allow a comma between specifications.
290
291 Sun Jul 16 19:57:10 2006  Ben Pfaff  <blp@gnu.org>
292
293         * automake.mk: (src_language_data_io_libdata_io_a_SOURCE) Add
294         print-space.c, placement-parser.c, placement-parser.h.
295
296         * data-list.c: Basically rewrote the whole thing.  Broke out a lot
297         of code into placement-parser.c.  Code is much cleaner now.
298
299         * placement-parser.c: New file.
300
301         * placement-parser.h: New file.
302
303         * print.c: Basically rewrote the whole thing.  Broke out PRINT
304         SPACE into print-space.c.  Code is much cleaner now.
305
306         * print-space.c: New file.
307
308 Sat Jul  1 17:39:40 2006  Ben Pfaff  <blp@gnu.org>
309
310         Fix bug #11612, "q2c documentation does not agree with code".
311         
312         * list.q: Audit use of q2c "+" prefixes that indicate that a
313         command may appear multiple times.
314
315 Sat Jul  1 20:44:22 2006  Ben Pfaff  <blp@gnu.org>
316
317         Fix bug #15786: System File Creation crashes if directoy is
318         nonexistent.
319         
320         * get.c (parse_write_command): Check that the any_writer open
321         succeeds.
322
323 Tue Jun 27 22:44:28 2006  Ben Pfaff  <blp@gnu.org>
324
325         Fix regression in command name completion reported by John
326         Darrington.  Now completion is again state-dependent and occurs
327         only on the first line of a command.
328         
329         * inpt-pgm.c: (cmd_input_program) Reading of first token in
330         command moved into cmd_parse.
331
332 Fri Jun  9 13:56:00 2006  Ben Pfaff  <blp@gnu.org>
333
334         Reform string library.
335         
336         * matrix-data.c (context): Use dynamic string.
337         (another_token) Deal with changed dfm_get_record() interface.
338         (mget_token) Ditto.
339         (force_eol) Ditto.
340
341         * data-list.c (struct data_list_pgm) Delete delims, delim_cnt
342         members, replacing them by struct string delims.  Update all
343         references to use struct string functions.
344         (cut_field) Change interface to avoid needing "end_blank", by
345         getting the data-reader to remember that state for us.  Change
346         internals to use substring.  Update both callers.
347
348         * data-reader.c (read_file_record): Use ds_read_stream().
349         (dfm_get_record) Change interface to return substring.  Updated
350         all callers.
351         (dfm_expand_tabs) Use ds_find_char().  Now maintain position
352         relative to end-of-line.  Use ds_swap().
353         (dfm_reread_record) Don't limit position by line length.
354         (dfm_column_start) Make parameter const.
355         (dfm_columns_past_end) New function.
356         (dfm_get_column) New function.
357
358 Thu May 25 18:26:26 WST 2006 John Darrington <john@darrington.wattle.id.au>
359
360         * print.c (print_trns_free): Made the code agree with the comment, by
361         not freeing PRT.  Has the side effect that the command no longer
362         crashes on invalid syntax.
363
364 Tue May  9 20:55:46 2006  Ben Pfaff  <blp@gnu.org>
365
366         * get.c (cmd_match_files): Fix memory leak replacing default_dict.
367
368 Sat May  6 22:25:09 2006  Ben Pfaff  <blp@gnu.org>
369
370         Fix segfault.
371         
372         * list.q (write_fallback_headers): (write_fallback_headers)
373         Properly record width of leader and pass it to write_varname().
374
375 Sat May  6 19:03:13 2006  Ben Pfaff  <blp@gnu.org>
376
377         * get.c: (mtf_merge_dictionary) Fix value label memory leak.
378
379 Sat May  6 13:51:16 2006  Ben Pfaff  <blp@gnu.org>
380
381         Use a casefile, instead of a case sink, for MATCH FILES output.
382         It's more straightforward, although it has the same effect.
383         
384         * get.c: (struct mtf_proc) Replace `sink' case sink member by
385         `output' casefile member.
386         (cmd_match_files) Work with casefile instead of sink.
387         (mtf_processing) Add case to casefile instead of sink.
388
389 Sat May  6 10:43:07 2006  Ben Pfaff  <blp@gnu.org>
390
391         Continue reforming procedure execution.  In this phase, get rid of
392         the output code for SPLIT FILE groups in procedure.c, which really
393         shouldn't be doing any output.  Move it into the individual
394         procedures instead.  This also adds some flexibility.
395
396         * list.q (write_all_headers): Call output_split_file_values().
397
398 Wed May  3 23:00:17 2006  Ben Pfaff  <blp@gnu.org>
399
400         Continue reforming procedure execution.  In this phase, get rid of
401         many global variables, consolidating procedure execution in
402         procedure.c.  Encapsulate transformations in new "struct
403         trns_chain".  Also, change implementation of N OF CASES, FILTER,
404         and PROCESS IF from special cases to transformations.
405          
406         * data-list.c: (data_list_trns_proc) Return TRNS_END_FILE at end
407         of file.  (Why didn't we do this before?)
408         (cmd_match_files) Direct procedure output to null sink.
409         Use discard_variables() instead of indirect version.
410
411         * inpt-pgm.c: Use transformation chain.
412         (struct input_program_pgm) Add trns_chain member.
413         (cmd_input_program) Initialize trns_chain member and capture
414         transformations with proc_capture_transformations().
415         (input_program_source_read) Use trns_chain_execute().
416         (destroy_input_program) Destroy input chain.
417
418 Tue May  2 10:39:56 WST 2006 John Darrington <john@darrington.wattle.id.au>
419
420         * list.q Changed from using fixed length char buffers to struct 
421         string so that any length variables can be used.
422
423 Mon May  1 18:21:19 2006  Ben Pfaff  <blp@gnu.org>
424
425         Further clean up the CMD_* command result codes.
426         
427         * (enum cmd_result_extensions) New.  Add CMD_END_INPUT_PROGRAM and
428         CMD_END_CASE result codes.
429         (struct input_program_pgm) Added case_nr, write_case, wc_data
430         members for use by END CASE transformation.
431         (emit_END_CASE) New function.
432         (cmd_input_program) Interpret CMD_END_CASE by outputting an END
433         CASE transformation.  If none is output by the input program
434         itself, add one automatically at the end.  Change lack of
435         variables from warning to error.
436         (cmd_end_input_program) Return CMD_END_INPUT_PROGRAM instead of
437         CMD_END_SUBLOOP.
438         (input_program_source_read) No longer any need to special-case END
439         CASE.  Handle TRNS_DROP_CASE properly.  Initialize new members in
440         inp for use by END CASE transformation.
441         (destroy_input_program) New function.
442         (input_program_source_destroy) Just call destroy_input_program().
443         (cmd_end_case) Just return CMD_END_CASE.
444         (end_case_trns_proc) No longer a stub handled by
445         input_program_source_read().  Actually output the case and
446         increment the case number.
447
448 Mon May  1 16:06:30 2006  Ben Pfaff  <blp@gnu.org>
449
450         Remove vestiges of REPEATING DATA support.
451         
452         * data-list.c: (struct rpd_num_or_var) Removed.
453         (struct repeating_data_trns) Removed.
454         (cmd_repeating_data) Removed.
455         (find_variable_input_spec) Removed.
456         (parse_num_or_var) Removed.
457         (parse_repeating_data) Removed.
458         (realize_value) Removed.
459         (struct rpd_parse_info) Removed.
460         (rpd_parse_record) Removed.
461         (repeating_data_trns_proc) Removed.
462         (repeating_data_trns_free) Removed.
463         (repeating_data_set_write_case) Removed.
464         (rpd_msg) Removed.
465
466         * inpt-pgm.c: (input_program_source_read) Don't deal with
467         REPEATING DATA.
468
469         * data-list.h: Removed.
470
471         * automake.mk (src_language_data_io_libdata_io_a_SOURCES): Removed
472         data-list.h.
473
474 Mon May  1 15:58:28 2006  Ben Pfaff  <blp@gnu.org>
475
476         Remove vestiges of FILE TYPE support. 
477         
478         * data-list.c: (cmd_data_list) Don't check for FILE TYPE.
479         (cmd_repeating_data) Ditto.
480         
481         * automake.mk (src_language_data_io_libdata_io_a_SOURCES): Remove
482         file-type.c, file-type.h.
483
484         * file-type.c: Removed.
485         
486         * file-type.h: Removed.
487
488 Wed Apr 26 13:16:28 2006  Ben Pfaff  <blp@gnu.org>
489
490         Improve the way we handle the various parsing "states".  Until now
491         we've hard-coded the state transitions in the command definition
492         file, but that's error-prone and, worse, it's redundant--we can
493         figure out what state we're in anyhow.  We can cleanly handle
494         INPUT PROGRAM and FILE TYPE with a nested command-processing loop.
495         
496         * data-list.c: (cmd_data_list) Use in_file_type() or
497         in_input_program() in place of case_source_is_class() or
498         case_source_is_complex().
499
500         * file-type.c: NB: Not really fixed except minimally to compile,
501         because it doesn't work anyway.
502         (in_file_type) New function.
503         (cmd_record_type) No need to check that we're in FILE TYPE.
504         (cmd_end_file_type) Ditto.
505         (var file_type_source_class) Make static.
506
507         * get.c: (cmd_match_files) Check vfm_source instead of pgm_state.
508
509         * inpt-pgm.c: (in_input_program) New function.
510         (cmd_input_program) Rewrite to include nested command processing
511         loop.
512         (cmd_end_input_program) Just return CMD_END_SUBLOOP.
513         (var input_program_source_class) Make static.
514         (cmd_end_case) No need to check that we're in INPUT PROGRAM.
515         (cmd_end_file) Ditto.
516         
517         * automake.mk (src_language_data_io_libdata_io_a_SOURCES): Add
518         file-type.h, inpt-pgm.h.
519
520         * file-type.h: New file.
521
522         * inpt-pgm.h: New file.
523
524 Tue Apr 25 13:11:55 2006  Ben Pfaff  <blp@gnu.org>
525
526         * print.c: Don't special-case MS-DOS line terminators.
527         (macro LINE_END_WIDTH) Removed.
528         (alloc_line) Line ends are 1 byte.
529         (print_trns_proc) Just output \n for line end.
530
531 Sun Apr 23 22:05:58 2006  Ben Pfaff  <blp@gnu.org>
532
533         Continue reforming error message support.  In this phase, get rid
534         of message "titles" and put the message text in `struct error'.
535         Now `struct error' encapsulates a message more properly.
536         
537         * data-list.c: (macro RPD_ERR) Removed.
538         (rpd_msg) New function.  Updated all references to tmsg() to call
539         this function instead.
540
541 Sat Apr 15 19:38:13 2006  Ben Pfaff  <blp@gnu.org>
542
543         Remove last users of struct file_ext so we can get rid of it
544         entirely.
545         
546         * data-reader.c: (struct dfm_reader) Change file member from
547         struct file_ext to FILE *.  Updated all references.
548         (dfm_close_reader) Close file with fn_close() instead of
549         fn_close_ext().  Also, make a copy of the file name from the file
550         handle before closing it, because we can't extract it after we
551         close the file.
552         (dfm_open_reader) Open file with fn_open() instead of
553         fn_open_ext().
554
555         * data-writer.c: (struct dfm_writer) Change file member 
556         struct file_ext to FILE *.  Updated all references.
557         (dfm_close_writer) Close file with fn_close() instead of
558         fn_close_ext().  Also, make a copy of the file name from the file
559         handle before closing it, because we can't extract it after we
560         close the file.
561         (dfm_open_writer) Open file with fn_open() instead of
562         fn_open_ext().
563
564 Sat Apr 15 18:00:32 2006  Ben Pfaff  <blp@gnu.org>
565
566         * data-list.c: Add prototype to suppress warning for
567         cmd_repeating_data().
568         
569 Thu Mar  2 08:40:33 WST 2006 John Darrington <john@darrington.wattle.id.au>
570         
571         * Moved files from src directory