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