2930c220824490d9feee9d11c27cea89e1d16843
[pspp-builds.git] / src / ChangeLog
1 Sun Apr 23 22:00:23 2006  Ben Pfaff  <blp@gnu.org>
2
3         Continue reforming error message support.  In this phase, get rid
4         of message "titles" and put the message text in `struct error'.
5         Now `struct error' encapsulates a message more properly.
6
7         * message.c: (tmsg) Removed.
8         (msg) Use err_msg() instead of err_vmsg().  Format message
9         ourselves.
10         (err_vmsg) Renamed err_msg().  Changed interface, dropping message
11         and va_list args which are now in the error struct.
12                 
13 Sun Apr 23 20:35:28 2006  Ben Pfaff  <blp@gnu.org>
14
15         Continue reforming error message support.
16
17         * message.c: Use linebreak module from gnulib instead of home-brew
18         line breaking.
19         (puts_stdout) Rewrote.
20         (dump_message) Rewrote.  Changed interface and updated all callers.
21         (compulsory_break) Removed.
22         (char_is_break) Removed.
23         (break_before) Removed.
24         (break_after) Removed.
25         (macro BREAK_LONG_WORD) Removed.
26
27 Sun Apr 16 20:41:10 2006  Ben Pfaff  <blp@gnu.org>
28
29         Continue reforming error message support.  In this phase, we
30         divide the classification of messages along "category" and
31         "severity" axes.
32
33         * message.c: (err_vmsg) Rewrite to deal with categories and
34         severities in a straightforward manner instead of mixing them into
35         classes.
36         [0] (puts_stderr) Removed (dead code).
37         (msg) Changed first argument from `int' to `enum msg_class'.
38         (tmsg) Ditto.
39
40 Sun Apr 16 18:53:12 2006  Ben Pfaff  <blp@gnu.org>
41
42         GNU standards require "file name" instead of "filename" in
43         documentation.  It's nice for our code to follow the convention
44         too.
45
46         Basically did search and replace in the whole source tree.  Major
47         changes in function names or struct member names have their own
48         change log entries.
49
50 Sun Apr 16 15:58:56 2006  Ben Pfaff  <blp@gnu.org>
51
52         Continue reforming error message support.  In this phase, we get
53         rid of VM() and the other msg() support for "verbosity", replacing
54         it by a new function verbose_msg().
55
56         * message.c: (verbose_msg) New function.
57         (err_vmsg) Remove support for verbosity levels.
58
59 Sun Apr 16 11:46:51 2006  Ben Pfaff  <blp@gnu.org>
60
61         Start reforming error message support.  In this phase, we get rid
62         of "installation errors" and change all uses of msg() in the
63         output drivers to uses of error() or error_at_line().
64
65         * message.c: (err_vmsg) Get rid of IE, IS support.
66
67 Sat Mar 11 14:17:47 WST 2006 John Darrington <john@darrington.wattle.id.au>
68
69         * automake.mk: Changed the pattern specific AM_CPPFLAGS to two target 
70           specific ones. Eventually there will be none at all.
71
72         * automake.mk: Moved the pspp binary to ui/terminal
73
74 Sat Mar  4 12:59:08 2006  Ben Pfaff  <blp@gnu.org>
75
76         * In many source files, #include "compiler.h" to get GCC attribute
77         definitions.
78
79 Sat Mar  4 12:28:09 2006  Ben Pfaff  <blp@gnu.org>
80
81         * In many source files, replace INT_DIGITS by
82         INT_STRLEN_BOUND(int) and include intprops.h.
83
84 John Darrington:
85         
86         * Replaced '_' with '-' in most filenames.
87
88         * Renamed files as follows:
89                 vfm.[ch] to procedure.[ch]
90                 error.[ch] to message.[ch]
91                 getl.[ch] to line-buffer.[ch]
92                 mkfile.[ch] to make-file.[ch]
93                 pfm-write.h to por-file-writer.h
94                 pfm-write.c to por-file-writer.c
95                 sfmP.h to sfm-private.h
96                 lex-def.c to identifier.c
97                 lex-def.h to identifier.h
98                 sfm-read.c to sys-file-reader.c
99                 sfm-read.h to sys-file-reader.h
100                 sfm-write.h to sys-file-writer.h
101                 sfm-write.c to sys-file-writer.c
102                 chart.[ch] to chart-geometry.[ch]
103                 val.h to value.h
104                 var.h to variable.h
105                 vars-atr.c to variable.c
106                 ctl-stack.c to control-stack.c
107                 ctl-stack.h to control-stack.h
108                 dfm-read.c to data-reader.c
109                 dfm-write.c to data-writer.c
110                 dfm-write.h to data-writer.h
111                 dfm-read.h to data-reader.h
112                 apply-dict.c to apply-dictionary.c
113                 mis-val.c to missing-values.c
114                 sysfile-info.c to sys-file-info.c
115                 modify-vars.c to modifiy-variables.c
116                 rename-vars.c to rename-variables.c
117                 val-labs.c to value-labels.c
118                 var-display.c to variable-display.c
119                 var-labs.c to variable-label.c
120                 format-prs.c to format-parser.c
121                 range-prs.c to range-parser.c
122                 range-prs.h to range-parser.h
123                 subclist.c to subcommand-list.c
124                 subclist.h to subcommand-list.h
125                 vars-prs.c to variable-parser.c
126                 descript.c to descriptives.c
127                 sort-prs.c to sort-criteria.c/sort-cases.c
128                 sort-prs.h to sort-criteria.h
129                 sel-if.c to select-if.c
130                 algorithm.c to array.c
131                 algorithm.h to array.h
132                 bitvector.h to bit-vector.h
133                 som.c to manager.c
134                 som.h to manager.h
135                 tab.h to table.h
136                 tab.c to table.c
137                 readln.c to read-line.c
138                 readln.h to read-line.h
139                 cmdline.c to command-line.c
140                 cmdline.h to command-line.h
141
142
143 Sat Feb 11 22:35:20 2006  Ben Pfaff  <blp@gnu.org>
144
145         General clean-ups and minor bug fixes.
146
147         * filename.h: Move DIR_SEPARATOR, PATH_SEPARATOR here from
148         pref.h.orig.
149
150         * lex-def.h: (macro CHAR_IS_ID1) Removed.  All references changed
151         to lex_is_id1().
152         (macro CHAR_IS_IDN) Removed.  All references changed to
153         lex_is_idn().
154         
155         * lex-def.c: (lex_is_id1) New function.
156         (lex_is_idn) New function.
157         (lex_skip_identifier) New function.
158         (lex_id_match_len) Return bool instead of int.
159         (lex_id_match) Ditto.
160
161         * command.c: (parse_command_name) Convert parsed words to
162         uppercase to make error messages easier to read.
163         (cmd_host) Fix return value.
164
165         * dfm-read.c: (read_inline_record) Use tokens to check for BEGIN
166         DATA, not specialized lexical analysis.
167
168         * print.c: (print_space_trns_proc) Count of lines should be `int',
169         otherwise we might never finish.
170         (print_space_trns_free) Close writer.
171
172         * lexer.c: (enum string_type) New enum.
173         (lex_get) Remove essentially unused local variable `cp'.
174         Use enum string_type values.  Use parse_id().
175         (parse_id) New function.
176         (lex_look_ahead) Recognize octal strings too.
177         (strip_comments) New function.
178         (lex_get_line) Rewrite.
179         (lex_preprocess_line) Removed.
180         (convert_numeric_string_to_char_string) Use enum string_type.
181         (parse_string) Ditto.
182
183         * autorecode.c: (recode) Clone correct number of bytes based on
184         source string width.
185
186 Sat Feb 11 22:34:38 2006  Ben Pfaff  <blp@gnu.org>
187
188         Reduce dependencies on getl, and of getl.
189
190         * data-in.c: (vdls_error) Don't output different message depending
191         on whether we're interactive.
192
193         * getl.h: (struct getl_line_list) Removed.
194         (struct getl_script) Removed.
195         (GETL_PRPT_*) Removed.
196         (GETL_MODE_*) Removed.
197         (GETL_PROMPT_FIRST, GETL_PROMPT_LATER, GETL_PROMPT_DATA,
198         GETL_PROMPT_CNT) New enums.
199
200         * settings.c: (static var prompt) Removed.
201         (static var cprompt) Removed.
202         (static var dprompt) Removed.
203         (settings_done) Don't initialize prompt, cprompt, dprompt.
204         (get_prompt) Removed.
205         (set_prompt) Removed.
206         (get_dprompt) Removed.
207         (set_dprompt) Removed.
208         (get_cprompt) Removed.
209         (set_cprompt) Removed.
210
211         * pfm-read.c: (corrupt_msg) Don't show filename and line number,
212         to get rid of getl_location().
213
214         * sfm-read.c: (corrupt_msg) Ditto.
215
216         * getl.c: (struct getl_source) New.
217         (static var cur_source) New.
218         (static var last_source) New.
219         (static var DO_REPEAT_level) Removed.
220         (global var getl_head) Removed.
221         (global var getl_tail) Removed.
222         (getl_initialize) Call init_prompts().
223         (getl_add_file) Removed.
224         (getl_include) Removed.
225         (getl_add_DO_REPEAT_file) Removed.
226         (getl_handle_line_buffer) Removed.
227         (getl_close_file) Removed.
228         (getl_close_all) Removed.
229         (getl_is_separate) Removed.
230         (getl_set_separate) Removed.
231         (getl_reading_script) Removed.
232         (append_source) New function.
233         (include_source) New function.
234         (create_source) New function.
235         (create_syntax_file_source) New function.
236         (create_filter_source) New function.
237         (create_function_source) New function.
238         (create_interactive_source) New function.
239         (getl_append_syntax_file) New function.
240         (getl_include_syntax_file) New function.
241         (getl_include_filter) New function.
242         (getl_include_function) New function.
243         (getl_append_interactive) New function.
244         (getl_abort_noninteractive) New function.
245         (getl_is_interactive) New function.
246         (close_source) New function.
247         (getl_location) Use new `cur_source' var.
248         (getl_uninitialize) Use close_source().  Call uninit_prompts().
249         (read_syntax_file) New function.
250         (read_line_from_source) New function.
251         (do_read_line) New function.
252         (getl_read_line) Rewrite.
253         (static var prompts) New.
254         (static var current_style) New.
255         (init_prompts) New function.
256         (uninit_prompts) New function.
257         (getl_get_prompt) New function.
258         (getl_set_prompt) New function.
259         (getl_set_prompt_style) New function.
260         (get_prompt) New function.
261
262         * command.c: Merge the EXIT (aka Q, aka QUIT) and FINISH commands,
263         and make EXIT undocumented.  EXIT was a PSPP extension that never
264         really entirely made sense.
265         (cmd_exit) Removed.
266         (cmd_finish) Return CMD_EOF unconditionally.
267         (cmd_clear_transformations) Drop requirement of interactivity.
268
269         * command.def: Merge the EXIT (aka Q, aka QUIT) and FINISH
270         commands.
271
272         * repeat.c: Major changes to match getl revision.
273         (struct line_list) New struct.
274         (enum repeat_entry_type) New.
275         (struct repeat_entry) Made `type' an enum repeat_entry_type.
276         (struct repeat_block) New.
277         (static var repeat_tab) Removed.
278         (static var count) Removed.
279         (static var line_buf_head) Removed.
280         (static var line_buf_tail) Removed.
281         (cmd_do_repeat) Rewritten.
282         (clean_up) Removed.
283         (append_record) Removed.
284         (recognize_keyword) New function.
285         (internal_cmd_do_repeat) Removed.
286         (parse_specification) New function.
287         (skip_indentor) New function.
288         (recognize_do_repeat) New function.
289         (recognize_end_repeat) New function.
290         (parse_lines) New function.
291         (create_vars) New function.
292         (parse_ids) Use enum repeat_entry_type.
293         (parse_strings) Ditto.
294         (find_DO_REPEAT_substitution) Renamed find_substitution(),
295         rewrote.
296         (perform_DO_REPEAT_substitutions) Renamed do_repeat_filter(),
297         rewrote.
298         (do_repeat_read) New function.
299         (do_repeat_close) New function.
300
301         * data-list.c: Don't need to keep track of eof from getl anymore,
302         because getl can tell us now.
303         (struct data_list_pgm) Removed `eof' member.
304         (cmd_data_list) Don't assign to `eof'.
305         (get_data_list_read_func) Renamed read_from_data_list(), changed
306         interface.
307         (read_from_data_list_fixed) Changed interface.
308         (read_from_data_list_free) Changed interface.
309         (read_from_data_list_list) Changed interface.
310         (data_list_trns_proc) Rewrote based on dfm_eof() and
311         dfm_reader_error().
312         (data_list_source_read) Check for dfm reader errors.
313
314         * dfm-read.c: (enum dfm_reader_flags) Removed DFM_EOF in favor of
315         new `eof_cnt' member in struct dfm_reader.
316         (struct dfm_reader) New `eof_cnt' member.
317         (dfm_close_reader) Check `eof_cnt', not DFM_EOF.
318         (dfm_open_reader) Initialize `eof_cnt'.
319         (read_inline_record) Set prompt style with
320         getl_set_prompt_style().  
321         (read_record) Rewrite.
322         (cmd_begin_data) Set prompt style with getl_set_prompt_style().
323
324         * include.c: (cmd_include) Use getl_include_syntax_file().
325
326         * set.q: (cmd_set) Use getl_set_prompt().
327
328         * html.c: (postopen) Remove "source-file" expansion variable, to
329         avoid use of getl_location().
330
331         * postscript.c: (postopen) Remove "source-file" expansion
332         variable, to avoid use of getl_location().
333
334         * cmdline.c: (parse_command_line) Drop -c command line option,
335         because it wasn't very useful.  -i command line option now calls
336         getl_append_interactive().  Use new getl function interfaces.
337         Drop support for clearing dictionary between syntax files and thus
338         the "+" command line syntax.
339         (static var pre_syntax_message) Remove description of now-gone -c
340         option.  Remove "+" command line syntax.
341
342         * main.c: (main) Only call handle_error() if the return value is
343         an error.
344         (execute_command) Use getl_set_prompt_style().  Drop support for
345         clearing dictionary between syntax files.
346         (handle_error) Handle CMD_CASCADING_FAILURE.  Don't call err_break().
347
348         * readln.c: Drop lots of #ifdefs.  Now that the Autoconf tests are
349         pickier, we can just use HAVE_READLINE.
350         (static var welcomed) Move into welcome().
351         (welcome) Make `welcomed' a local static var.  Check for and read
352         history file here.
353         (global var getl_mode) Removed.
354         (global var getl_interactive) Removed.
355         (global var getl_prompt) Removed.
356         (getl_read_line) removed.
357         (readln_read) New function.
358         (read_console) Removed.
359         
360
361 Sat Feb 11 22:16:21 2006  Ben Pfaff  <blp@gnu.org>
362
363         Try to reduce some of the nastier dependencies on the error
364         module, and at the same time make PSPP nicer to deal with, by
365         getting rid of fatal errors.  All the existing calls to msg (FE,
366         ...) or err_cond_fail() or err_failure() have been replaced by
367         propagating an error upward to the command-dispatch layer.
368         Unfortunately this propagation took a fair bit of extra mechanism,
369         because now a lot of functions can fail that couldn't before.
370
371         New command return value CMD_CASCADING_FAILURE which indicates to
372         the command processor that syntax file processing should be
373         abandoned.  Many commands were modified to return
374         CMD_CASCADING_FAILURE.  When this modification was trivial it
375         isn't mentioned in detail below.
376
377         Transformation procedures (trns_proc_func) and free functions
378         (trns_free_func) now have a `bool' return type, which is normally
379         true, but false when an I/O or other serious error occurs.  All
380         transformation functions were modified to have this return type.
381         When this modification was trivial it isn't mentioned in detail
382         below.
383
384         * pspp-error.h: (FE) Removed this error class.
385
386         * error.c: (err_failure) Removed.
387         (err_cond_fail) Removed.
388         (err_break) Removed (it was unused).
389         (err_check_count) Don't cause a fatal error--instead, stop reading
390         the syntax file.
391         (err_vmsg) Don't have FE anymore, so no need to call terminate().
392
393         * any-reader.c: (any_reader_error) New function.
394
395         * any-writer.c: (any_writer_write) Propagate
396         scratch_writer_write_case()'s new return value.
397         (any_writer_error) New function.
398         (any_writer_close) Propagate underlying function's new return
399         value.
400
401         * casefile.c: Add an "error state" to a casefile.  A casefile that
402         encounters an I/O error enters the error state, and afterward
403         reading and writing cases fails.
404         (struct casefile) Add `ok' member.
405         (casefile_create) Set `ok' to true.
406         (casefile_destroy) Use io_error().
407         (casefile_error) New function.
408         (casefile_sleep) Now returns bool to indicate success.
409         (casefile_append) Ditto.
410         (casefile_append_xfer) Ditto.
411         (casefile_to_disk) Ditto.
412         (write_case_to_disk) Don't do anything in error state.
413         (flush_buffer) Don't do anything in error state.  Use io_error().
414         (reader_open_file) Ditto.
415         (fill_buffer) Ditto.
416         (casereader_read) Don't do anything in error state.  Handle
417         errors.
418         (casereader_read_xfer_assert) Removed, because now an I/O error
419         can occur even if the caller knows a case exists.
420         (io_error) New function.
421
422         * mkfile.c: (make_temp_file) Make failure non-fatal.
423         (make_unique_file_stream) Ditto.
424
425         * pfm-read.c: Add an error state.
426         (struct pfm_reader) Add `ok' member to indicate error state.
427         (error) Set `ok' to false.
428         (pfm_open_reader) Set `ok' to true.  Make failure non-fatal.
429         (pfm_read_case) Don't do anything in error state.
430         (pfm_read_error) New function.
431
432         * pfm-write.c: Postpone most error checking in favor of checking
433         ferror() afterward.
434         (pfm_open_writer) Make failure non-fatal.  Check for write error
435         after writing header.
436         (buf_write) Don't do anything if error has occurred.  Postpone
437         error checking.  Change return type to void.
438         (write_float) Postpone error checking.  Change return type to
439         void.
440         (write_int) Ditto.
441         (write_string) Ditto.
442         (write_header) Ditto.
443         (write_version_data) Ditto.
444         (write_format) Ditto.
445         (write_value) Ditto.
446         (write_variables) Ditto.
447         (write_value_labels) Ditto.
448         (pfm_write_case) Don't do anything if error has occurred.
449         (pfm_write_error) New function.
450         (pfm_close_writer) Change return type to bool.  Return false if an
451         I/O error occurred.
452
453         * scratch-reader.c: (scratch_reader_error) New function.
454
455         * scratch-writer.c: (scratch_writer_write_case) Change return type
456         to bool.  Propagate casefile error return.
457         (scratch_writer_error) New function.
458         (scratch_writer_close) Change return type to bool.  Propagate
459         casefile error return.
460
461         * sfm-read.c: Add an error state.
462         (struct sfm_reader) Add `ok' member.
463         (sfm_open_reader) Initialize `ok'.  Make errors non-fatal.
464         (buf_read) Set `ok' to false on error.
465         (buffer_input) Do nothing in error state.  Set `ok' to false on
466         error.
467         (read_compressed_data) Set `ok' false on error.
468         (sfm_read_case) Return false in error state.
469         (fread_ok) Set `ok' false on error.
470         (sfm_read_error) New function.
471
472         * sfm-write.c: Postpone most error checking in favor of checking
473         ferror() afterward.
474         (sfm_open_writer) Make failure non-fatal.  Check for write error
475         after writing header.
476         (write_header) Postpone error checking.  Change return type to
477         void.
478         (write_variable) Ditto.
479         (write_value_labels) Ditto.
480         (write_documents) Ditto.
481         (write_variable_display_parameters) Ditto.
482         (write_longvar_table) Ditto.
483         (write_rec_7_34) Ditto.
484         (buf_write) Ditto.
485         (ensure_buf_space) Ditto.
486         (sfm_write_case) Do nothing if write error has occurred.
487         (sfm_write_error) New function.
488         (pfm_close_writer) Change return type to bool.  Return false if an
489         I/O error occurred.
490
491         * var.h: Introduced a new return value for trns_proc_func that
492         means "a serious error has occurred, so abort the procedure
493         entirely".  Because the hard-coded values of -1, -2, etc. were
494         becoming even a worse idea now, also introduced some macros for
495         them: TRNS_CONTINUE, TRNS_DROP_CASE, TRNS_ERROR, TRNS_NEXT_CASE,
496         TRNS_END_FILE.  Also replaced all references to the hard-coded
497         values by uses of the macros.
498         
499         * command.h: New command return value CMD_CASCADING_FAILURE which
500         indicates to the command processor that syntax file processing
501         should be abandoned.
502
503         * dfm-read.c: (dfm_open_reader) Make failure non-fatal.
504         (dfm_reader_error) New function.
505         (read_inline_record) Make unexpected end of file nonfatal.
506         (read_file_record) Make read error nonfatal.
507         (dfm_eof) Make second unexpected end of file nonfatal.
508         (cmd_begin_data) Make errors nonfatal.  
509         
510         * dfm-write.c: (dfm_open_writer) Make failure non-fatal.
511         (dfm_write_error) New function.
512         (dfm_put_record) Do nothing in error state.  Now return error
513         state.
514         (dfm_close_reader) Now return `bool' indicating error state.
515
516         * file-type.c: (file_type_source_read) Now return `bool'
517         indicating error state.
518
519         * get.c: (case_reader_source_read) Now return `bool' indicating
520         write error.
521         (case_writer_destroy) Ditto.
522         (case_writer_write_case) Ditto.
523         (struct mtf_proc) New member `ok' indicating error state.
524         (cmd_match_files) Initialize and deal with `ok'.
525         (mtf_processing_finish) Now return `bool' indicating I/O error.
526         (mtf_free_file) Renamed mtf_close_file().  Now return `bool'
527         indicating I/O error.
528         (mtf_free) Now return `bool' indicating I/O error.
529         (mtf_delete_file_in_place) Ditto.
530         (mtf_read_nonactive_records) Ditto.
531         (mtf_processing) Ditto.
532
533         * inpt-pgm.c: (input_program_source_read) Now return `bool'
534         indicating I/O error.  Handle new TRNS_ERROR transformation return
535         value.
536
537         * matrix-data.c: Introduce error state.
538         (cmd_matrix_data) Check error return values.
539         (read_matrices_without_rowtype) Now return `bool' indicating I/O
540         error.
541         (matrix_data_read_without_rowtype) Ditto.
542         (dump_cell_content) Ditto.
543         (nr_output_data) Ditto.
544         (read_matrices_with_rowtype) Ditto.
545         (matrix_data_read_with_rowtype) Ditto.
546         (wr_output_data) Ditto.
547
548         * lexer.c: (lex_init) Make unexpected eof non-fatal.
549         (lex_get) Ditto.
550         (lex_look_ahead) Ditto.
551         (unexpected_eof) Removed.
552         (convert_numeric_string_to_char_string) Make unexpected eof
553         non-fatal.
554         (parse_string) Ditto.
555
556         * flip.c: Make I/O errors non-fatal.
557         (struct flip_pgm) Add `pool', `output_buf' members.
558         (cmd_flip) Create and use pool.  Propagate errors.
559         (destroy_flip_pgm) Rewrite, using pool.
560         (struct flip_sink_info) Removed.
561         (flip_sink_create) Use pool.  Make errors non-fatal.
562         (flip_sink_write) Make errors non-fatal.
563         (flip_file) Make errors non-fatal.  Make `bool' return type to
564         indicate failure.
565         (flip_sink_destroy) Remove.
566         (static var flip_sink_class) Use NULL as destroy func, not
567         flip_sink_destroy().
568
569         * sort.c: Make I/O errors non-fatal.  Propagate errors.
570         (sort_active_file_in_place) Propagate errors.
571         (sort_active_file_to_casefile) Ditto.
572         (do_internal_sort) Ditto.
573         (do_external_sort) Ditto.
574         (write_runs) Ditto.
575         (destroy_initial_run_state) Propagate errors via new `bool' return
576         type.
577         (merge) Propagate errors.
578         (merge_once) Ditto.
579
580         * output.c: [GLOBAL_DEBUGGING] Remove reentrancy detection,
581         because it used msg (FE, ...) and wasn't very useful.
582
583         * main.c: (handle_error) Handle CMD_CASCADING_FAILURE.
584
585         * vfm.c: (struct write_case_data) Change `proc_func' return type
586         to bool.
587         (procedure) Add `bool' return type to indicate I/O error.
588         Propagate errors.
589         (internal_procedure) Ditto.
590         (write_case) Ditto.
591         (execute_transformations) If a transformation returns TRNS_ERROR,
592         propagate the error.
593         (close_active_file) Add `bool' return type to indicate I/O error.
594         Propagate errors.
595         (cancel_transformations) Add `bool' return type to indicate I/O
596         error.  Propagate errors.
597         (struct split_aux_data) Change `proc_func' return type to bool.
598         (procedure_with_splits) Change `proc_func' return type to bool.
599         Add `bool' return type to indicate I/O error.
600         (multipass_procedure_with_splits) Change `split_func' return type
601         to bool.  Add `bool' return type to indicate I/O error.
602         (multipass_split_callback) Add `bool' return type to indicate I/O
603         error.  Propagate errors.
604
605         * vfm.h: (struct case_source_class) Change `read' return type from
606         void to bool to allow reporting I/O errors.  Updated all
607         implementations to do so.
608         (struct case_sink_class) Change `write' return type from void to
609         bool to allow reporting I/O errors.  Updated all implementations
610         to do so.
611
612 Sun Feb 12 18:12:56 2006  Ben Pfaff  <blp@gnu.org>
613
614         * pool.c: Useful new functions.
615         (pool_tmpfile) New function.
616         (pool_attach_file) New function.
617         (pool_detach_file) New function.
618         (pool_fopen) Reimplement in terms of pool_attach_file().
619         (pool_fclose) Reimplement in terms of pool_detach_file().  Fix
620         double-free.
621
622         * str.c: Useful new functions.
623         (ds_swap) New function.
624         (ds_rtrim_spaces) New function.
625         (ds_chomp) New function.
626         (ds_is_empty) New function.
627         (ds_first) New function.
628         (ds_last) New function.
629
630 Sat Feb 11 21:51:21 2006  Ben Pfaff  <blp@gnu.org>
631
632         Get rid of finished, start_interactive globals.
633
634         * command.c: (cmd_exit) Instead of setting `finished', return
635         CMD_EOF.
636         (cmd_finish) Ditto.
637
638         * command.h: New enum CMD_EOF.
639
640         * main.c: (global var finished) Removed.
641         (global var start_interactive) Removed.
642         (main) Execute commands until CMD_EOF is the return value.
643         If parse_command_line() returns false, don't execute any commands
644         at all.
645
646         * cmdline.c: (parse_command_line) If the command line indicates we
647         shouldn't execute syntax files, return false instead of
648         terminating.
649         (usage) Don't terminate.
650
651 Sat Feb 11 21:48:31 2006  Ben Pfaff  <blp@gnu.org>
652
653         Get rid of cur_proc global.  Replace by functions in err and tab
654         modules, which were the users.
655
656         * error.c: (static var command_name) New static var.
657         (err_vmsg) Use command_name.
658         (err_set_command_name) New function.
659
660         * tab.c: (static var command_name) New static var.
661         (tabi_title) Use command_name.
662         (tab_set_command_name) New function.
663
664         * command.c: (global var cur_proc) Removed.
665         (cmd_parse) Call err_set_command_name(), tab_set_command_name()
666         around executing command to set and clear command name.
667
668 Sat Feb 11 21:44:50 2006  Ben Pfaff  <blp@gnu.org>
669
670         Get rid of glob.c, glob.h.
671
672         * Makefile.am: (pspp_SOURCES) Remove glob.c, glob.h.
673         
674         * dictionary.c: Move default_dict definition here.
675
676         * glob.c: Removed.
677         (global var FILTER_before_TEMPORARY) Variable removed.  All
678         references deleted.  The info in this var was redundant with
679         temp_dict, so they were changed to use temp_dict where needed.
680
681         * glob.h: Removed.
682
683         * start-date.c: New file. Moved get_start_date() here.
684
685         * start-date.h: New file.
686
687 Fri Feb  3 20:34:52 2006  Ben Pfaff  <blp@gnu.org>
688  
689         * font.h: (struct font_set) Removed, because unused.
690  
691 Sat Jan 28 17:45:36 2006  Ben Pfaff  <blp@gnu.org>
692
693         Cleaner (faster?) way to compact cases.
694
695         * dictionary.c: (dict_compact_case) Removed.
696         (dict_needs_compaction) New function.
697         (struct copy_map) New structure.
698         (struct dict_compactor) New structure.
699         (dict_make_compactor) New function.
700         (dict_compactor_compact) New function.
701         (dict_compactor_destroy) New function.
702         
703 Sat Jan 28 17:24:22 2006  Ben Pfaff  <blp@gnu.org>
704
705         Cleanups.
706
707         * data-list.c: Make data_list_source_class static.
708         (dump_fixed_table) Use fh_get_name() to describe source of data.
709         (dump_free_table) Ditto.
710         (cmd_repeating_data) Eliminate special cases for inline file.
711
712         * dictionary.c: (dict_contains_var) Change return value from int to
713         bool.
714         (dict_rename_vars) Ditto.
715         (dict_create_vector) Ditto.
716
717 Sat Jan 28 17:20:50 2006  Ben Pfaff  <blp@gnu.org>
718
719         Add scratch file handles.
720
721         Now a file handle can refer to a disk file, to an in-memory
722         structure, or to the "inline" file, instead of just to a disk
723         file.  The introduction of new categories means that special cases
724         for the inline file in a few places could be eliminated, but it
725         also means that code that assumed that a handle refers to a file
726         has to check for that.
727
728         Also, now file handles can be freed, so code now must be sure not
729         to access a handle after closing it (with fh_close()).
730
731         * Makefile.am: Add any-reader.c, any-reader.h, any-writer.c,
732         any-writer.h, scratch-handle.c, scratch-handle.h,
733         scratch-reader.c, scratch-reader.h, scratch-writer.c,
734         scratch-writer.h to pspp_SOURCES.
735
736         * any-reader.c: New file.
737         
738         * any-reader.h: New file.
739         
740         * any-writer.c: New file.
741         
742         * any-writer.h: New file.
743
744         * scratch-handle.c: New file.
745         
746         * scratch-handle.h: New file.
747
748         * scratch-reader.c: New file.
749         
750         * scratch-reader.h: New file.
751
752         * scratch-writer.c: New file.
753         
754         * scratch-writer.h: New file.
755
756         * aggregate.c: Use an any_writer instead of an sfm_writer, to add
757         flexibility.
758
759         * apply-dict.c: Use an any_reader instead of an sfm_reader, to add
760         flexibility.
761
762         * command.def: Add CLOSE FILE HANDLE command.
763
764         * dfm-reader.c: Now fewer special cases for inline file.
765         (static var inline_open_cnt) Removed.
766         (static var inline_file) Removed.
767         (dfm_close_reader) Eliminate a special case for inline file.
768         Reorganize to avoid access-after-free.
769         (dfm_open_reader) Eliminate a special case for inline file.
770         (read_inline_record) Use bool instead of int.  No need to
771         increment line number.
772         (read_file_record) Use bool instead of int.
773         (read_record) Check whether file handle is inline file, instead of
774         for null pointer.
775         (dfm_eof) Ditto.
776         (dfm_expand_tabs) Ditto.
777         (dfm_push) Ditto.
778         (dfm_pop) Ditto.
779         (cmd_begin_data) Fix inaccurate check for whether the inline file
780         is in use--now we can tell by checking whether the inline file's
781         open count is positive.
782         
783         * file-handle-def.c: (struct file_handle) Reorder members.  Add
784         `deleted' member.  Add `referent' member.  Add `sh' member.
785         (static var default_handle) New variable.
786         (static var inline_file) New variable.
787         (fh_init) Initialize inline file.
788         (free_handle) New function.
789         (fh_done) Rewrite.
790         (fh_from_name) Don't return deleted handles.
791         (fh_from_filename) Ditto.
792         (fh_create) Removed.
793         (create_handle) New function.
794         (fh_create_file) New function.
795         (fh_create_scratch) New function.
796         (fh_inline_file) New function.
797         (fh_free) Rewrite.
798         (fh_open) Now requires a referent type mask and verifies it.  All
799         references updated.
800         (fh_close) If open_cnt goes to 0 on a deleted handle, free it.
801         (fh_is_open) New function.
802         (fh_get_referent) New function.
803         (fh_get_filename) Limit to handles that refer to files.
804         (fh_get_mode) Ditto.
805         (fh_get_record_width) Limit to handles that refer to files or the
806         inline file.
807         (fh_get_tab_width) Ditto.
808         (fh_get_scratch_handle) New function.
809         (fh_set_scratch_handle) New function.
810         (fh_get_default_handle) New function.
811         (fh_set_default_handle) New function.
812
813         * file-handle.h: (enum fh_referent) New type.
814         (enum fh_mode) Rename MODE_TEXT to FH_MODE_TEXT, MODE_BINARY to
815         FH_MODE_BINARY, and update all usages.
816
817         * file-handle.q: Add "scratch" as a possible mode.
818         (cmd_file_handle) Mention CLOSE FILE HANDLE in error message.
819         Use lex_end_of_command(), lex_sbc_missing().  Support creating
820         scratch handles.
821         (cmd_close_file_handle) New function.
822         (referent_name) New function.
823         (fh_parse) Now takes a referent type mask to specify handles that
824         can be accepted.  Updated all references.
825         
826         * filename.c: (fn_extension) New function.
827
828         * get.c: Use any_reader and any_writer and thereby merge code that
829         has been duplicated for each kind of file.  Also, we had something
830         here called `any_writer' before, so its name had to be changed to
831         `case_writer'.
832         (enum operation) Removed, because unused.
833         (struct get_pgm) Removed.
834         (get_pgm_free) Removed.
835         (get_source_destroy) Removed.
836         (get_source_read) Removed.
837         (global var get_source_class) Removed.
838         (static var case_reader_source_class) Removed.
839         (enum reader_command) New enum.
840         (struct case_reader_pgm) New struct.
841         (parse_read_command) New function.
842         (case_reader_pgm_free) New function.
843         (case_reader_source_destroy) New function.
844         (case_Reader_source_Read) New function.
845         (cmd_get) Rewrote as a call to parse_read_command().
846         (cmd_import) Ditto.
847         (struct any_writer) Rename to case_writer.  Drop `writer_type',
848         `writer' members in favor of an `any_writer' member named
849         `writer'.
850         (any_writer_destroy) Rename case_writer_destroy.  Use
851         any_writer_close().
852         (parse_write_command) Allow scratch files.  Use any_writer.
853         (any_writer_write_case) Rename case_writer_write_case().  Use
854         any_writer_write().
855 `       (struct mtf_file) Use any_reader.
856         (cmd_match_files) Allow scratch files.  Use any_reader.
857         (mtf_free_file) Use any_reader_close().
858         (mtf_read_nonactive_records) Use any_reader_read().
859         (mtf_processing) Use any_reader_read().
860         (struct import_pgm) Removed.
861         (import_pgm_free) Removed.
862         (import_source_destroy) Removed.
863         (import_source_read) Removed.
864         (global var import_source_class) Removed.
865
866         * glob.c: (global var default_handle) Removed.  Replaced all
867         references by fh_get_default_handle() or fh_set_default_handle().
868
869         * pfm-read.c: (static var portable_to_local) Moved from inside
870         read_header() to top level.
871         (pfm_detect) New function.
872
873         * pfm-write.c: (pfm_write_case) Make case argument const.
874         Reorganize to avoid access-after-free.
875
876         * print.c: (dump_table) Use fh_get_name() to describe source of
877         data.
878
879         * sfm-read.c: (sfm_close_reader) Reorganize to avoid
880         access-after-free.
881         (sfm_detect) New function.
882
883         * str.c: (str_lowercase) New function.
884
885         * vfm.c: Use new compaction interface.
886         (static var compaction_necessary) Removed.
887         (static var compactor) New variable.
888         (open_active_file) Initialize compactor.
889         (write_case) Use compactor.
890         (close_active_file) Free compactor.
891         
892 Wed Jan 11 19:28:39 2006  Ben Pfaff  <blp@gnu.org>
893
894         Clean up file handle code in preparation to add scratch file
895         handles.
896         
897         * file-handle-def.c: Lots of formatting cleanup.  Added function
898         comments.
899         (struct file_handle) Renamed `length' member
900         to `record_width'.  All references updated.
901         (fh_init) New function.  Moved here from file-handle.q.
902         (fh_done) New function.  Moved here from file-handle.q and
903         rewrote.
904         (get_handle_with_name) Renamed fh_from_name().
905         (get_handle_for_filename) Renamed fh_from_filename().
906         (create_file_handle) Renamed fh_create().  Changed to take a
907         `struct fh_properties' instead of discrete values.  Updated all
908         references.
909         (create_file_handle_with_defaults) Removed.  Updated all
910         references to use fh_create() with fh_default_properties().
911         (fh_default_properties) New function.
912         (destroy_file_handle) Removed.  The code is now in fh_done().
913         (handle_get_name) Renamed fh_get_name().
914         (handle_get_filename) Renamed fh_get_filename().
915         (handle_get_record_width) Renamed fh_get_record_width().
916         (handle_get_tab_width) Renamed fh_get_tab_width().
917
918         * file-handle-def.h: Formatting, comment fixes.
919         (enum file_handle_mode) Renamed struct fh_mode.
920         (struct fh_properties) New structure.
921         (fh_init) Move prototype here from file-handle.h.
922         (fh_done) Ditto.
923         (fh_close) Ditto.
924
925         * file-handle.q: (static var handle_list) Removed.
926         (fh_parse) Don't add handle to handle_list, because
927         file-handle-def.c has its own list.
928         (fh_init) Moved to file-handle-def.c.
929         (fh_done) Ditto.
930
931 Sun Jan 9 01:09  Jason Stover  <jason@sakla.net>
932
933         * regression.q: (run_regression) Moved coefficient initialization
934         to the linreg library. Altered other functions accordingly.
935
936 Sat Jan  7 13:30:54 WST 2006 John Darrington <john@darrington.wattle.id.au>
937
938         * command.c data-in.c main.c: Fixed bug which crept in when 
939           separating getl from readline.
940
941         * vars-atr.c value-labels.h: Fixed constness of  val_labs_count.
942
943 Fri Dec 23 20:59:01 WST 2005 John Darrington <john@darrington.wattle.id.au>
944
945         * getl.c error.c: Separated file_loc functionality from error.c
946
947 Mon Dec 19 14:01:56 WST 2005 John Darrington <john@darrington.wattle.id.au>
948
949         * format.c: Additional error checking.
950         * getl.[ch]: Separated into getl.c and readln.c
951         * settings.[ch]: Made CC_CNT public
952
953 Fri Dec 16 09:11:48 WST 2005 John Darrington <john@darrington.wattle.id.au>
954
955         * examine.q: Fixed buglet when cleaning up at end of procedure.
956
957 Tue Dec 13 22:34:42 2005  Ben Pfaff  <blp@gnu.org>
958
959         Move global initialization and cleanup code into main.c.
960         Remove vestigial log infrastructure.
961         Minor related cleanups.
962         
963         * command.c: (shell) When execl() fails, use _exit(), not
964         err_hcf().
965
966         * error.c: (err_hcf) Move into main.c, rename terminate().  All
967         callers updated.
968         (err_done) New function with just the error.c-specific code for
969         err_hcf().  Called by terminate().
970
971         * glob.c: Removed all Borland C, DJGPP cruft.
972         (init_glob) Merged into main().
973         (done_glob) Merged into terminate().
974         (get_date) Removed.
975         (get_start_date) New function.  All users of curdate updated to call
976         this function instead.
977
978         * lexer.c: (lex_init) Moved initialization of tokstr here, from
979         init_glob().
980         (lex_done) Moved destruction of tokstr here, from done_glob().
981
982         * main.c: (global var pgmname) Removed.  Changed all references to
983         program_name, which is defined by gnulib.
984         (global var curdate) Removed.
985         (main) Moved init_glob() code here.  Merged parse_script() in
986         here.
987         (parse_script) Removed.
988         (terminate) Moved err_hcf() here from error.c and renamed
989         terminate().  Merged done_glob() code in here.  Call err_done().
990         All callers updated.
991         (i18n_init) New function.
992         (fpu_init) New function.
993
994         * output.c: (outp_init) Make void.
995         (init_default_drivers) New function.
996         (outp_read_devices) If no drivers are initialized successfully,
997         call init_default_drivers() to initialize a default driver.
998         (outp_done) Make void.
999         (static var prog) Make const.
1000         (parse_options) Make parameter const.
1001         (colon_tokenize) Make return value const.
1002         (configure_driver) Change prototype to take a broken-down driver
1003         configuration instead of a line of text.
1004         (configure_driver_line) New function that does what
1005         configure_driver() did before.
1006
1007         * q2c.c: (global var pgmname) Rename program_name.
1008
1009         * settings.c: (settings_init) Renamed from init_settings().
1010         (settings_done) Renamed from done_settings().
1011
1012         * vfm.c: (global var last_vfm_invocation) Make static.
1013         (vfm_last_invocation) New function.  All references to
1014         last_vfm_invocation update to call this.
1015         (procedure) Call update_last_vfm_invocation().
1016         (internal_procedure) Ditto.
1017         (update_last_vfm_invocation) New function.
1018         
1019 Sat Dec 10 23:30:19 2005  Ben Pfaff  <blp@gnu.org>
1020
1021         Separate random numbers from other settings because of GSL
1022         dependency.
1023
1024         * Makefile.am: Add random.c, random.h to sources.
1025
1026         * glob.c: (init_glob) Call random_init().
1027         (done_glob) Call random_done().
1028
1029         * settings.c: (static var rng) Move to random.c.
1030         (done_settings) Move freeing of RNG to random_done().
1031         (get_rng) Move to random.c
1032         (set_rng) Ditto.
1033
1034         * random.c: New file.
1035
1036         * random.h: New file.
1037
1038 Sat Dec 10 18:13:36 2005  Ben Pfaff  <blp@gnu.org>
1039
1040         Separate settings and the SET command, for modularity.
1041         
1042         * Makefile.am: Add settings.c to sources.
1043
1044         * glob.c: (global variable test_mode) Removed.
1045
1046         * set.q: Remove all the set_* variables.  Remove a lot of obsolete
1047         SPSS/PC+ settings.  Remove the aux_*() routines.  Moved the
1048         get_*() functions into settings.c.  Rewrite the settings code and
1049         functions to call the new set_*() functions.  Rewrite custom
1050         currency parsing.  Write new by-hand cmd_show().
1051
1052         * esttings.c: New file.  Moved the get_*() functions here from
1053         set.q.  Created new set_*() functions to correspond with them.
1054         Regularized the names and types of some functions and updated
1055         their callers.  Added static, file-scope variables to support the
1056         settings.
1057
1058         * q2c.c: Remove "aux" support, which was only needed by set.q.
1059         
1060 Sun Nov 27 06:43:46 WST 2005 John Darrington <john@darington.wattle.id.au>
1061
1062         * data-out.c format.h: Added return value to data_out function.
1063
1064         * value-labels.c: Fixed bug in val_labs_remove.
1065
1066 Sat Nov  5 18:37:26 2005  Ben Pfaff  <blp@gnu.org>
1067
1068         * Makefile.am: Remove devind.c, devind.h from list of source
1069         files.
1070
1071         * devind.c: Removed.
1072
1073         * devind.h: Removed.
1074
1075         * list.q: Removed "support" for devind.
1076
1077         * output.c: Don't add devind class.
1078
1079 Sat Nov  5 18:21:00 2005  Ben Pfaff  <blp@gnu.org>
1080
1081         * var.h: (struct variable) Make `init', `reinit' bool values.
1082         Rearrange fields.
1083
1084 Fri Nov  4 19:43:01 2005  Ben Pfaff  <blp@gnu.org>
1085
1086         * recode.c: Rewrote whole file, as clean-up.
1087
1088 Fri Nov  4 19:37:50 2005  Ben Pfaff  <blp@gnu.org>
1089
1090         * pool.c: Don't make alignment exception for x86.
1091         (pool_alloc) Return null for 0-size blocks.
1092         (pool_alloc_unaligned) New function.
1093         (pool_strndup) Removed.  Changed callers to use pool_clone_unaligned().
1094         (pool_clone_unaligned) New function.
1095         (pool_strdup) Use pool_clone_unaligned().
1096
1097         * var.h: (enum var_type) Give the NUMERIC, ALPHA enum this name.
1098         (struct variable) Use `enum var_type' for `type'.
1099
1100         * vars-atr.c: (var_type_adj) New function.
1101         (var_type_noun) New function.
1102
1103         * vars-prs: (parse_mixed_vars) Fix freeing code.
1104         (parse_mixed_vars_pool) New function.
1105
1106 Wed Nov  2 21:24:48 2005  Ben Pfaff  <blp@gnu.org>
1107
1108         * file-handle-def.c: Needed another #include, to avoid missing
1109         prototype warning.
1110
1111         * file-handle.q: (cmd_file_handle) Declarations must precede
1112         statements.  Free parse data on success as well as on failure, to
1113         avoid memory leak.
1114
1115         * get.c: (parse_write_command) Destroy dict on success, to avoid
1116         memory leak.
1117         
1118         * data-list.c: (cmd_repeating_data) Fix usage of saw_occurs,
1119         saw_length, saw_continued, saw_id, which were boolean but
1120         incorrectly treated as bitmaps as result of a previous
1121         half-finished cleanup.
1122
1123         * weight.c: (struct weight_trns) Unused, so removed.
1124
1125         * Makefile.am: Add range-prs.h to sources.
1126
1127 Wed Nov  2 21:24:15 2005  Ben Pfaff  <blp@gnu.org>
1128
1129         DO IF, LOOP cleanup.
1130
1131         * Makefile.am: Add ctl-stack.c, ctl-stack.h to source files.
1132         Reformat source file list to list one file per file, so that
1133         patches for future changes will be easier to read.
1134
1135         * ctl-stack.c, ctl-stack.h: New files.
1136
1137         * do-if.c: Rewrote whole file.
1138
1139         * do-ifP.h: Removed.
1140
1141         * loop.c: Rewrote whole file.
1142
1143         * glob.c: (global var ctl_stack) Move into ctl-stack.c.
1144
1145         * temporary.c: (cmd_temporary) Use ctl_stack_is_empty().
1146
1147         * vfm.c: (open_active_file) Use ctl_stack_clear().
1148
1149 Wed Nov  2 21:18:13 2005  Ben Pfaff  <blp@gnu.org>
1150
1151         New pool functions.
1152         
1153         * pool.c: (pool_create_at_offset) New function.
1154         (pool_add_subpool) New function.
1155
1156         * pool.h: (pool_create_container) New macro.
1157         
1158         * expressions/parse.c: (expr_parse_pool) New function.
1159         
1160         * autorecode.c: (recode) Use pool_create_container().
1161
1162         * count.c: (cmd_count) Ditto.
1163
1164 Wed Nov  2 19:59:32 2005  Ben Pfaff  <blp@gnu.org>
1165
1166         Clean up transformations, by getting rid of `struct trns_header',
1167         replacing it by `struct transformation' that has a void *
1168         `private' member.  Updated all uses of transformations to match,
1169         which was a lot of code.  Only major related changes listed below.
1170
1171         * compute.c: (cmd_if) Use get_proc_func().
1172         (cmd_compute) Use get_proc_func().
1173         (get_proc_func) New function.
1174
1175         * glob.c: (global var m_trns) Change type to size_t.
1176         (global var n_trns) Ditto.
1177         (global var f_trns) Ditto.
1178         (global var t_trns) Change type to struct transformation *.
1179
1180         * var.h: (struct trns_header) Removed.
1181         (struct transformation) New.
1182         (typedef trns_proc_func) Takes a void * instead of a struct
1183         trns_header *.
1184         (typedef trns_free_func) Ditto.
1185
1186         * vfm.c: (execute_transformations) Takes an array of
1187         transformations instead of trns_headers.
1188         (add_transformation) Change prototype from (trns_header *) to
1189         (trns_proc_func *, trns_free_func *, void *).
1190         (next_transformation) New function.
1191
1192 Sat Oct 29 16:25:36 2005  Ben Pfaff  <blp@gnu.org>
1193
1194         * count.c: Major cleanups.  Rename practically everything.
1195         Rewrite much of the code.  Use pools for memory management.  Use
1196         the new parse_num_range().
1197
1198         * mis-val.c: (cmd_missing_values) Use the new parse_num_range().
1199         (parse_number) Removed.
1200
1201         * missing-values.c: (mv_add_num_range) Don't add out-of-order
1202         ranges, e.g. where low > high.
1203
1204         * pool.c: (pool_2nrealloc) New function.
1205
1206         * range-prs.c: New file.
1207         (parse_num_range) New function.
1208         (parse_number) New function.
1209         
1210 Fri Oct 28 22:47:48 2005  Ben Pfaff  <blp@gnu.org>
1211
1212         Fix up potential overflows in size calculations by replacing
1213         instances of pool_alloc(p, x * sizeof *y) by pool_malloc(p, x,
1214         sizeof *y) everywhere I could find them.  Similarly by
1215         pool_malloc(), pool_realloc().
1216         (Order is important: pool_alloc(p, sizeof *y, x) will divide by 0
1217         if x is 0.)
1218
1219         * pool.c: (pool_nalloc) New function.
1220         (pool_nmalloc) New function.
1221         (pool_nrealloc) New function.
1222
1223 Thu Oct 27 11:16:53 WST 2005 John Darrington <john@darrington.wattle.id.au>
1224
1225         Separated the definition of a file handle object from the stuff 
1226         pertaining to the FILE HANDLE command.
1227
1228         * file-handle-def.[ch]: New files.
1229
1230         * dfm-read.c file-handle.h file-handle.q
1231         
1232 Tue Oct 25 21:56:23 2005  Ben Pfaff  <blp@gnu.org>
1233
1234         Fix up potential overflows in size calculations by replacing
1235         instances of xmalloc(x * sizeof *y) by xnmalloc(x, sizeof *y)
1236         everywhere I could find them.  Similarly by xrealloc(), malloc().
1237         (Order is important: xnmalloc(sizeof *y, x) will divide by 0 if x
1238         is 0.)
1239
1240         * alloc.c: (nmalloc) New function.
1241         (out_of_memory) Removed.  Replaced references by xalloc_die().
1242
1243         * sort.c: (allocate_cases) Fix segfault if memory allocation
1244         fails.
1245
1246         * subclist.c: (subc_list_double_create) Use xnmalloc() instead of
1247         malloc().
1248         (subc_list_double_push) Use xnrealloc() instead of realloc().
1249
1250 Wed Oct 26 08:43:51 WST 2005 John Darrington <john@darrington.wattle.id.au>
1251
1252         Dictionary abstraction part #2
1253
1254         * algorithm.c format.c str.c sysfile-info.c val.h var.h vars-atr.c:
1255           Removed unnecessary #include directives
1256
1257 Mon Oct 24 21:35:08 2005  Ben Pfaff  <blp@gnu.org>
1258
1259         * groff-font.c (font_msg): Use err_vmsg() instead of incorrectly
1260         trying to pass a va_list to tmsg().  Thanks to Jason Stover for
1261         reporting this bug.
1262
1263 Mon Oct 24 21:24:15 2005  Ben Pfaff  <blp@gnu.org>
1264
1265         Work to get rid of GCC 4.0 warnings, part 2.
1266
1267         In many files, change `unsigned char' to `char'.  This often
1268         requires adding casts to <ctype.h> functions.
1269
1270         * data-in.c: (parse_A) Use buf_copy_rpad().
1271
1272         * str.c: (str_copy_buf_trunc) New function.
1273
1274         * value-labels.c: (value_to_string) Fix mistaken use of strncpy(),
1275         by rewriting.
1276
1277 Mon Oct 24 13:42:32 WST 2005 John Darrington <john@darrington.wattle.id.au>
1278
1279         Moved some definitions to make it easier to abstract a dictionary 
1280         from the rest of PSPP.
1281
1282         * format-prs.c lex-def.[ch]:  New files.
1283
1284         * Makefile.am lexer.[ch] dictionary.c vars-atr.c vfm.c algorithm.c 
1285           format.c:  Moved some functions between modules.
1286         
1287 Sun Oct 23 19:28:08 2005  Ben Pfaff  <blp@gnu.org>
1288
1289         Work to get rid of GCC 4.0 warnings, part 1.
1290         
1291         In many files, change count parameters to parse_variables(),
1292         etc. from `int' to `size_t'.  Also change related variables and
1293         struct members.  Also change messages as needed (e.g. %d to %u
1294         with cast to unsigned).  Also change arithmetic as necessary
1295         (e.g. n >= m - 1 to n + 1 >= m). 
1296
1297         * crosstabs.q: (crs_custom_tables) Check for size_t overflow in
1298         multiplication.
1299
1300         * q2c.c: (dump_declarations) Generate code for size_t instead of
1301         int.
1302         
1303 Thu Oct 20 18:18:40 2005  Ben Pfaff  <blp@gnu.org>
1304
1305         * output.c: (outp_read_devices) Fix message.
1306
1307 Sat Sep 17 11:13:13 2005  Ben Pfaff  <blp@gnu.org>
1308
1309         * matrix-data.c: (cmd_matrix_data) Change type of variable whose
1310         address is passed to dict_get_vars() from size_t to int to match
1311         John's change below.
1312
1313         * modify-vars.c: (validate_var_modification) Ditto.
1314
1315 Mon Sep 12 19:26:06 WST 2005 John Darrington <john@darrington.wattle.id.au>
1316
1317         * dictionary.[ch]  Changed cnt from size_t* to int* since that's
1318         what it's called as, and on  x86_64 machines they're different sizes.
1319         
1320         * str.c: (ds_vprintf) Copied va_list args so they can be re-used
1321         
1322 Sun Aug 21 00:12:24 2005  Ben Pfaff  <blp@gnu.org>
1323
1324         * lexer.c: (lex_sbc_only_once) New function.
1325         (lex_sbc_missing) New function.
1326
1327 Sun Aug 21 00:00:47 2005  Ben Pfaff  <blp@gnu.org>
1328
1329         * case.h: (case_str) Make it return `unsigned char'.
1330
1331 Sat Aug 20 23:56:14 2005  Ben Pfaff  <blp@gnu.org>
1332
1333         Revamp SAVE, XSAVE, EXPORT.  Add (or at least parse) all the
1334         subcommands that we didn't support.  Fix bug 13911.  Fix bug
1335         reported by Adam Pierson (COMPRESSED and other subcommands didn't
1336         work on SAVE).  Refactor all related code.
1337         
1338         * command.def: Add XEXPORT command.
1339
1340         * dictionary.c: (dict_delete_scratch_vars) New function.
1341
1342         * get.c: (cmd_get) Fix parsing.
1343         (struct save_trns) Removed.
1344         (cmd_save_internal) Removed.
1345         (cmd_save) Removed.
1346         (do_write_case) Removed.
1347         (save_write_case_func) Removed.
1348         (save_trns_proc) Removed.
1349         (save_trns_free) Removed.
1350         (trim_dictionary) Removed.
1351         (struct export_proc) Removed.
1352         (cmd_export) Rewrote.
1353         (export_write_case_func) Removed.
1354         (export_proc_free) Removed.
1355         (enum writer_type) New enum.
1356         (enum command_type) New enum.
1357         (struct any_writer) New struct.
1358         (any_writer_destroy) New function.
1359         (parse_write_command) New function.
1360         (any_writer_write_case) New function.
1361         (parse_output_proc) New function.
1362         (output_proc) New function.
1363         (cmd_save) Rewrote.
1364         (cmd_xsave) Rewrote.
1365         (struct output_trns) New struct.
1366         (parse_output_trns) New function.
1367         (output_trns_proc) New function.
1368         (output_trns_free) New function.
1369         (cmd_xsave) Rewrote.
1370         (cmd_xexport) New function.
1371         (parse_dict_trim) New function.
1372         (struct mtf_proc) Change `by_cnt' member type to `int'.
1373         (cmd_import) Rewrote.
1374
1375         * pfm-write.c: (struct pfm_writer) Add `digits' member.
1376         (pfm_writer_default_options) New function.
1377         (pfm_open_writer) Add `opts' argument and handle options.
1378         (write_float) Write only as many digits as `digits' member says.
1379         (format_trig_double) Limit base-10 precision to LDBL_DIG.
1380
1381         * pfm-write.h: (enum pfm_type) Moved here from pfm-read.h.
1382         (struct pfm_write_options) New struct.
1383
1384         * sfm-write.c: (sfm_writer_default_options) New function.
1385         (sfm_open_writer) Remove `compress', `omit_long_names' args.  Add
1386         `opts' argument.  Implement options.
1387
1388         * sfm-write.h: (struct sfm_write_options) New struct.
1389
1390         * expressions/helpers.c: (copy_string) Make `old' arg `unsigned
1391         char *' instead of `char *'.
1392         
1393 Sat Aug  6 21:29:15 2005  Ben Pfaff  <blp@gnu.org>
1394
1395         * factor_stats.c: Needed <config.h> included earlier.
1396
1397         * percentiles.c: Needed to include <config.h>.
1398
1399         * val.h: Don't include "config.h".
1400
1401 Sat Aug  6 21:26:27 2005  Ben Pfaff  <blp@gnu.org>
1402
1403         Clean up treatment of missing values by moving all the code into
1404         one place.  All references to the missing value function were
1405         updated, but only major changes are detailed below.
1406
1407         * Makefile.am: Add missing-values.c, missing-values.h to sources.
1408
1409         * apply-dict.c: (cmd_apply_dictionary) Use mv_resize().
1410
1411         * dictionary.c: (dict_create_var) Initialize `miss' member with
1412         mv_init().
1413         (dict_clone_var) Copy `miss' member with mv_copy().
1414         
1415         * get.c: (mtf_merge_dictionary) Use mv_copy().
1416
1417         * missing-values.c: New file.
1418         
1419         * missing-values.h: New file.
1420
1421         * mis-val.c: Rewrite.  New version implements updated semantics.
1422
1423         * pfm-read.c: (read_variables) Rewrite missing value handling.
1424
1425         * pfm-write.c: (write_variables) Rewrite missing value handling.
1426
1427         * sfm-read.c: (read_variables) Rewrite missing value handling.
1428
1429         * sfm-write.c: (write_variable) Rewrite missing value handling.
1430
1431         * sfmP.h: Include "magic.h" to get definition of
1432         second_lowest_value.
1433
1434         * sysfile-info.c: (describe_variable) Rewrite missing value
1435         handling.
1436
1437         * val.h: Include "magic.h" to get definition of
1438         second_lowest_value.
1439
1440         * var.h: Include "missing-values.h".  Drop MISSING_* enums.
1441         (struct variable) Remove `miss_type', `missing'.  Add `miss'.
1442
1443         * vars-atr.c: (is_num_user_missing) Removed--use
1444         mv_is_num_user_missing().
1445         (is_str_user_missing) Removed--use mv_is_str_user_missing().
1446         (is_system_missing) Removed--use mv_is_value_system_missing().
1447         (is_missing) Removed--use mv_is_value_missing().
1448         (is_user_missing) Removed--use mv_is_value_user_missing().
1449         
1450 Sun Jul 31 14:09:57 2005  Ben Pfaff  <blp@gnu.org>
1451
1452         Adopt use of gnulib for portability.
1453
1454         * Make.build: Add $(top_srcdir)/gl and $(top_builddir)/gl to
1455         include path.
1456
1457         * Makefile.am: Remove bool.h, stat.h and change getline.[ch] to
1458         getl.[ch] in pspp_SOURCES.  Remove libmisc, add libgl in
1459         pspp_LDADD.
1460
1461         * In many source files, added an explicit inclusion of gettext.h
1462         and definition of _ macro.  These are no longer in pref.h because
1463         it interfered with definitions in a few gnulib source files.
1464
1465         * In many source files, changed #include "bool.h" to #include
1466         <stdbool.h>, which is provided by gnulib.
1467
1468         * alloc.c: Removed functions defined in gnulib:
1469         (xmalloc) Removed.
1470         (xcalloc) Removed.
1471         (xrealloc) Removed.
1472         (xstrdup) Removed.
1473         (out_of_memory) Redefined as wrapper for xalloc_die().
1474
1475         * alloc.h: Replace prototypes by #include "xalloc.h".
1476
1477         * casefile.c: Use full_read() and full_write() from gnulib instead
1478         of our home-grown versions.
1479         (full_read) Removed.
1480         (full_write) Removed.
1481
1482         * getline.c: Renamed getl.c.
1483
1484         * getline.h: Renamed getl.h, updated all references.
1485
1486         * filename.c: (fn_readlink) Change to wrapper around xreadlink()
1487         from gnulib.
1488
1489         * glob.c: Just #include <time.h> instead of the crazy rigmarole
1490         here before.
1491         (init_glob) Call set_program_name() to initial gnulib progname
1492         module.
1493
1494         * html.c: (postopen) Use getlogin_r(), gethostname() from gnulib.
1495
1496         * permissions.c: Use "stat-macros.h" from gnulib.
1497
1498         * postscript.c: Just #include <time.h> instead of the crazy
1499         rigmarole here before.
1500
1501         * q2c.c: (main) Make generated code #include "gettext.h".
1502
1503         * str.h: Get rid of most explicit declarations of standard
1504         functions, in favor of including gnulib header files.
1505
1506         * expressions/evaluate.c: Ditto.
1507
1508         * expressions/operations.h.pl: Make generated code #include
1509         <stdbool.h>, not "bool.h".
1510
1511 Sat Jul 30 23:13:17 2005  Ben Pfaff  <blp@gnu.org>
1512
1513         * expressions/parse.c: (validate_function_args) Fix two msg() bugs
1514         found by -Wformat.
1515
1516 Sat Jul 30 23:10:01 2005  Ben Pfaff  <blp@gnu.org>
1517
1518         * expressions/evaluate.c: (expr_debug_print_postfix) Don't pass
1519         null pointer to printf for %.*s.
1520
1521 Sat Jul 30 23:05:33 2005  Ben Pfaff  <blp@gnu.org>
1522
1523         * vars-atr.c: (var_is_valid_name) Fix three msg() bugs found by
1524         -Wformat.
1525
1526 Sat Jul 30 22:58:33 2005  Ben Pfaff  <blp@gnu.org>
1527
1528         * rank.q: (parse_rank_function) Fix msg() bug found by -Wformat.
1529
1530 Sat Jul 30 22:56:12 2005  Ben Pfaff  <blp@gnu.org>
1531
1532         * postscript.c: (postopen) Cast `char' to `unsigned char' before
1533         passing to isspace().
1534
1535 Sat Jul 30 22:52:09 2005  Ben Pfaff  <blp@gnu.org>
1536
1537         * pfm-read.c: (read_variables) Fix msg() bug found by -Wformat.
1538
1539 Sat Jul 30 22:50:57 2005  Ben Pfaff  <blp@gnu.org>
1540
1541         * histogram.c: Include <config.h>.
1542
1543 Sat Jul 30 22:48:50 2005  Ben Pfaff  <blp@gnu.org>
1544
1545         * get.c: (cmd_match_files) Fix msg() bug found by -Wformat.
1546
1547 Sat Jul 30 22:46:10 2005  Ben Pfaff  <blp@gnu.org>
1548
1549         * format.c: (check_common_specifier) Fix msg() bug found by
1550         -Wformat.
1551         (check_output_specifier) Ditto.
1552
1553 Sat Jul 30 22:43:57 2005  Ben Pfaff  <blp@gnu.org>
1554
1555         * file-handle.q: (cmd_file_handle) Fix msg() bug found by
1556         -Wformat.
1557
1558 Sat Jul 30 22:41:44 2005  Ben Pfaff  <blp@gnu.org>
1559
1560         * data-in.c: (parse_Z) [WORDS_BIGENDIAN] Don't declare buf[], to
1561         avoid "unused variable" warning.
1562
1563 Sat Jul 30 22:38:46 2005  Ben Pfaff  <blp@gnu.org>
1564
1565         * command.c: (find_word) Cast `char' to `unsigned char' before
1566         passing to isspace().
1567
1568 Sat Jul 30 22:36:29 2005  Ben Pfaff  <blp@gnu.org>
1569
1570         * case.c: (case_compare) Implement as delegating to
1571         case_compare_2dict().
1572
1573 Sat Jul 30 22:34:18 2005  Ben Pfaff  <blp@gnu.org>
1574
1575         * algorithm.c: Inclusion of <alloca.h> is unneeded.
1576
1577 Sat Jul 30 22:01:32 2005  Ben Pfaff  <blp@gnu.org>
1578
1579         * Make.build: Don't append -ansi to AM_CFLAGS for GCC.  Using
1580         -ansi changes the behavior of header files significantly.  It
1581         causes __STRICT_ANSI__ to be defined, and some headers interpret
1582         that as cause to e.g. not use `long long' or __attribute__.  The
1583         former example is bad when off_t is supposed to be `long long',
1584         and the latter prevents -Wformat from working.
1585
1586 Sun Jul 24 20:26:59 2005  Ben Pfaff  <blp@gnu.org>
1587
1588         Get rid of dependency on libgmp by writing our own routine for
1589         floating-point base conversion.
1590
1591         * pfm-write.c: (write_float) Rewrote.
1592         (write_int) Rewrote.
1593         (pow30_nonnegative) New function.
1594         (pow30) New function.
1595         (trig_to_char) New function.
1596         (format_trig_digits) New function.
1597         (recurse_format_trig_int) New function.
1598         (format_trig_int) New function.
1599         (should_round_up) New function.
1600         (try_round_up) New function.
1601         (format_trig_double) New function.
1602
1603 Sun Jul 24 18:49:20 2005  Ben Pfaff  <blp@gnu.org>
1604
1605         * data-in.c: (parse_numeric) Allow "1+23" even for F format, for
1606         compatibility.
1607
1608 Sun Jul 24 18:47:37 2005  Ben Pfaff  <blp@gnu.org>
1609
1610         * pfm-read.c: (read_version_data) Read and ignore author field.
1611
1612 Wed Jul  6 20:44:27 2005  Ben Pfaff  <blp@gnu.org>
1613
1614         * get.c: (mtf_processing) Don't assume that
1615         mtf_compare_BY_values() always returns -1, 0, or 1.  Actually, it
1616         returns a negative, zero, or positive result.  Fixes MATCH FILES
1617         bug on Mac OS X reported by "Marshall DeBerry" <mdb@radix.net>.
1618
1619 Mon Jul  4 18:01:15 2005  Ben Pfaff  <blp@gnu.org>
1620
1621         * flip.c: [HAVE_SYS_TYPES_H] Really include <sys/types.h>.  The
1622         preprocessor test for sys/types.h was accidentally inverted.  This
1623         was bug 12789.
1624
1625 Sun Jul  3 22:47:39 2005  Ben Pfaff  <blp@gnu.org>
1626
1627         * get.c: (cmd_match_files) Fix memory leak on `by' and on
1628         `vfm_source'.
1629
1630         * getline.c: [HAVE_LIBREADLINE] (read_console) Fix memory leak on
1631         `line'.
1632
1633         * vfm.c: (close_active_file) Remove unnecessary test.
1634
1635 Sun Jul  3 21:45:32 2005  Ben Pfaff  <blp@gnu.org>
1636
1637         Fix NDEBUG compile errors.
1638
1639         * hash.h: Needed explicit #include <assert.h>.
1640
1641         * linked-list.c: (ll_next) First arg is UNUSED when NDEBUG is
1642         defined.
1643
1644 Sun Jun 12 23:44:38 2005  Ben Pfaff  <blp@gnu.org>
1645
1646         Implement embedding for PostScript driver.  Fixes bug 12970.
1647
1648         * ascii.c: Fix compiler warnings.
1649
1650         * html.c: Ditto.
1651
1652         * chart.h: Add `file' member.
1653
1654         * output.h: (struct outp_class) initialise_chart, finalise_chart
1655         should take outp_driver *, not outp_class *.  Update all
1656         references.
1657
1658         * plot-chart.c: (chart_create) Fix segfault when there are no
1659         output drivers at all.
1660         (chart_submit) Call d->class->finalise_chart.
1661
1662         * postscript.c: (ps_open_page) Set cp_y to 0.
1663         (ps_submit) New function.
1664         (ps_chart_initialise) Implement.
1665         (ps_chart_finalise) Implement.
1666         (static var postscript_class) Add ps_submit.
1667         (static var epsf_class) Add ps_submit.
1668         
1669
1670 Sun Jun 12 14:54:40 2005  Ben Pfaff  <blp@gnu.org>
1671
1672         Did some more work on bug 12859 and then realized that a *good*
1673         solution would require some fundamental restructuring.  For now,
1674         I'm marking REPEATING DATA unimplemented, and then we can revisit
1675         it post-0.4.0.
1676         
1677         * command.def: Make REPEATING DATA unimplemented.
1678
1679         * data-list.c: (cmd_repeating_data) Assume inline file is 80
1680         characters wide.
1681         (realize_value) Revert previous changes; no longer needed.
1682         Updated all callers.
1683
1684         * error.c: (err_hcf) Set nfile_loc, mfile_loc to 0 after freeing
1685         file_loc, to avoid bad references later.
1686
1687         * str.c: Fix typo.
1688
1689 Tue Jun  7 00:14:09 2005  Ben Pfaff  <blp@gnu.org>
1690
1691         Make some code tolerant of reentry.  Should not be needed if other
1692         code is correct but it is good to be generally tolerant.
1693         
1694         * error.c: (err_hcf) Set file_loc to null after free().
1695
1696         * output.c: (outp_done) Similar changes.
1697
1698         * str.c: (ds_destroy) Ditto.
1699         
1700 Tue Jun  7 00:10:20 2005  Ben Pfaff  <blp@gnu.org>
1701
1702         Continue work on bug 12859, plus some code cleanup.
1703         
1704         * data-list.c: (cmd_repeating_data) Replace `seen' bitmap by
1705         boolean variables.  Don't try to compute starts_end, cont_end for
1706         inline file.  Calculate length only after parsing variable
1707         specifications.  Add proper transformation to list.
1708         (realize_value) If the rpd_num_or_var has no value, return new
1709         DEFAULT_MEMBER argument (for use with inline file).
1710         (repeating_data_trns_proc) Pass default values.
1711
1712         * dfm-read.c: (dfm_close_reader) Only skip data if *not* still
1713         open, and only if we actually started reading data.
1714
1715 Sun Jun  5 18:39:36 2005  Ben Pfaff  <blp@gnu.org>
1716
1717         Fix bug 11894.
1718         
1719         * output.c: (outp_read_devices) Fix message.
1720
1721 Fri May 27 12:34:43 WST 2005 John Darrington <john@darrington.wattle.id.au>
1722         
1723         * sort-prs.[ch] (newfiles), aggregate.c, sort.[ch]: Separated the guts 
1724         of the sort algorithm from the parser for the SORT command.
1725         
1726         * rank.q: Added the parser for the RANK command.
1727         
1728 Thu May 26 12:29:21 2005  Ben Pfaff  <blp@gnu.org>
1729
1730         Fix bug 13192.
1731
1732         * sort.c: (sort_parse_criteria) Only set *saw_direction if
1733         saw_direction is non-null.  Thanks to John Darrington for
1734         reporting this bug.
1735
1736 Tue May 24 21:52:55 2005  Ben Pfaff  <blp@gnu.org>
1737
1738         * get.c: (mtf_processing) Handle case of a lookup table as the
1739         active file.  Thanks to John Darrington for reporting this bug.
1740
1741 Wed May 25 10:27:02 WST 2005 John Darrington <john@darrington.wattle.id.au>
1742         
1743         * alloc.c alloc.h: (xcalloc) changed signature to imitate the
1744         POSIX  calloc function.
1745         
1746         * crosstabs.q get.c vars-prs.c: Updated calls to xcalloc to
1747         reflect new signature.
1748
1749         * sfm-read.c: Now much more robust in the face of badly formed
1750         system files.
1751
1752 Mon May 23 11:57:31 WST 2005 John Darrington <john@darrington.wattle.id.au>
1753
1754         *sfm-read.c: Fixed some bugs regarding long string continuation
1755         records, which the previous fix uncovered.
1756
1757 Sat May 21 12:48:34 WST 2005 John Darrington <john@darrington.wattle.id.au>
1758
1759         * sfm-read.c, sfmP.h:  Allow reading of system files when the 
1760         case_size value in the header is -1.  Also changed some Errors to 
1761         Warnings when reading system files.
1762
1763 Tue May 17 21:00:57 2005  Ben Pfaff  <blp@gnu.org>
1764
1765         * data-list.c: (data_list_trns_free) Don't free the argument
1766         because cancel_transformations() will do that itself.
1767         (data_list_source_destroy) Destroy the argument to
1768         data_list_trns_free(), because it no longer does so itself.
1769
1770 Tue May 17 18:29:35 2005  Ben Pfaff  <blp@gnu.org>
1771
1772         * data-out.c: (format_and_round) Don't output leading `-' if value
1773         rounds to zero.
1774
1775 Tue May 17 00:06:43 2005  Ben Pfaff  <blp@gnu.org>
1776
1777         Fix bug 11119.
1778
1779         * som.c: (output_encodings) If some cell in the table won't fit
1780         with the horizontal or vertical headers, cancel those headers.
1781
1782         * som.h: (struct som_table_class) Add fits_width, fits_length,
1783         set_headers members.
1784
1785         * tab.c: (tabi_fits_width) New function.
1786         (tabi_fits_length) New function.
1787         (tabi_set_headers) New function.
1788         (global var tab_table_class) Add the new functions as appropriate
1789         members.
1790         
1791 Mon May 16 22:34:06 2005  Ben Pfaff  <blp@gnu.org>
1792
1793         Fix rest of bug 13054.
1794
1795         * format.def: Fix EDATE, SDATE, ADATE, JDATE, QYR, MOYR, WKYR,
1796         DATETIME, TIME system/portable file values.
1797
1798 Mon May 16 22:31:15 2005  Ben Pfaff  <blp@gnu.org>
1799
1800         * data-list.c: (parse_free) Use make_input_format().
1801         
1802         * data-out.c: (num_to_string) Use make_output_format().
1803
1804         * dictionary.c: (dict_create_var) Ditto.
1805
1806         * format.c: (global var f8_2) New var.
1807         (make_input_format) New function.
1808         (make_output_format) New function.
1809
1810         * get.c: (cmd_match_files) Use make_output_format().
1811
1812         * list.q: (cmd_list) Ditto.
1813
1814         * matrix-data.c: Ditto.
1815
1816         * sfm-read.c: (parse_format_spec) Check output specifier
1817         thoroughly.
1818
1819         * tab.c: (tab_float) Use make_output_format().
1820
1821 Sun May 15 23:38:10 2005  Ben Pfaff  <blp@gnu.org>
1822
1823         Fix more of bug 13054.
1824         
1825         * format.def: FMT_A should allow 255-character output.  FMT_AHEX
1826         should allow 510-character input and output.
1827
1828         * data-out.c: (num_to_string) Get rid of NEW_STYLE option.
1829         (convert_E) Handle non-finite values.
1830         (try_F) Rewrite.
1831         (format_and_round) New function.
1832         (convert_infinite) New function used by try_F() and convert_E().
1833
1834 Sun May 15 23:36:55 2005  Ben Pfaff  <blp@gnu.org>
1835
1836         Regularize string and buffer function names so that they make some
1837         kind of sense.
1838
1839         * str.c: (mm_reverse) Rename buf_reverse().  Update all
1840         references.
1841         (mm_find_reverse) Rename buf_find_reverse().  Update all
1842         references.
1843         (mm_case_compare) Rename buf_compare_case().  Update all
1844         references.
1845         (st_compare_pad) Rename buf_compare_rpad().  Update all
1846         references.
1847         (str_compare_rpad) New function.
1848         (st_bare_pad_copy) Rename buf_copy_str_rpad().  Update all
1849         references.
1850         (buf_copy_str_lpad) New function.
1851         (st_bare_pad_len_copy) Rename buf_copy_rpad().  Update all
1852         references.
1853         (st_pad_copy) Rename str_copy_rpad().  Update all references.
1854         (st_trim_copy) Rename str_copy_trunc().  Update all references.
1855         (st_uppercase) Renamed str_uppercase().  Update all references.
1856         
1857 Sat May 14 08:22:26 WST 2005 John Darrington <john@darrington.wattle.id.au>
1858
1859         * dfm-read.c: Fixed polarity of test in dfm-close-reader.  Closes 
1860         Bug #13082
1861
1862 Tue May 10 20:08:18 2005  Ben Pfaff  <blp@gnu.org>
1863
1864         * data-in.c: (data_in) Add assertion to check input specifier.
1865
1866         * data-out.c: (data_out) Add assertion to check output specifier.
1867
1868 Tue May 10 19:56:35 2005  Ben Pfaff  <blp@gnu.org>
1869
1870         Start to fix bug 13054.
1871
1872         * format.c: (check_input_specifier) Improve error message.
1873         (check_input_specifier) Check F, COMMA, and DOLLAR formats for
1874         valid decimal places.
1875         (check_output_specifier) Ditto (but different criteria).
1876         (convert_fmt_ItoO) Assert valid input and output specifiers.
1877         Also, if input specifier has *any* decimal places, make the output
1878         specifier 1 place wider.
1879
1880 Mon May  9 07:14:29 WST 2005 John Darrington <john@darrington.wattle.id.au>
1881
1882         * sysfile-info.c: Fixed bug [# 13024 ]
1883
1884 Sun May  8 13:52:12 2005  Ben Pfaff  <blp@gnu.org>
1885
1886         "Fix" bug 13021 by disabling FILE TYPE.  Eventually, we should
1887         actually implement it.
1888
1889         * command.c: (FILE_TYPE_okay) Always return 1.
1890
1891         * command.def: Change FILE TYPE, END FILE TYPE into UNIMPL.
1892
1893         * file-type.c: Add prototypes to get rid of warnings.
1894
1895 Sun May  8 08:08:07 WST 2005 John Darrington <john@darrington.wattle.id.au>
1896
1897         * barchart.c box-whisker.c cartesian.c piechart.c plot-hist.c: Fixed 
1898         more ISO/IEC 9899:1990 conformance issues.
1899
1900 Wed May  4 23:54:02 2005  Ben Pfaff  <blp@gnu.org>
1901
1902         Fix bug 12948.  See also new test in
1903         tests/bugs/match-file-scratch.sh.
1904         
1905         * get.c: (mtf_merge_dictionary) Don't compact dictionary because
1906         that deletes scratch variables that someone else might be using,
1907         and because we can't reassign our sources' value indexes.
1908         Instead, simply don't copy scratch variables into the master
1909         dictionary.
1910
1911         * dictionary.c: (dict_compact_values) Delete variables from the
1912         dictionary passed in, not from default_dict (!).
1913
1914 Tue May  3 22:25:17 2005  Ben Pfaff  <blp@gnu.org>
1915
1916         Improve hash.c comments, error-checking.
1917         
1918         * hash.c: (struct hsh_table) [NDEBUG] Add hash_ordered member.
1919         (hsh_create) size == 0 should *not* return NULL!  Set
1920         hash_ordered.
1921         (hsh_clear) Set hash_ordered.
1922         (locate_matching_entry) Check hash_ordered.
1923         (hsh_rehash) Rename rehash().  Add assertion.  Set hash_ordered.
1924         (hsh_data) Set hash_ordered.  Add const-ness to return value and
1925         update all callers.
1926         (hsh_sort) Ditto.       
1927
1928 Wed May  4 08:50:11 WST 2005 John Darrington <john@darrington.wattle.id.au>
1929
1930         * casefile.c: Removed unnecessary #include <valgrind/valgrind.h>
1931
1932 Tue May  3 19:14:48 WST 2005 John Darrington <john@darrington.wattle.id.au>
1933
1934         * copyleft.c: Updated copyright date.
1935
1936         * Makefile.am: Removed erroneous explicit "-lplot"
1937
1938         * examine.q oneway.q: Made these files conform to ISO/IEC 9899:1990
1939
1940 Tue May  3 16:20:31 WST 2005 John Darrington <john@darrington.wattle.id.au>
1941
1942         * command.c command.def: Added description string for unimplemented commands.
1943
1944         * oneway.q: Sorted the hash tables before shipping out the results. Closes 
1945         bug [#12931].
1946
1947 Mon May  2 23:45:01 2005  Ben Pfaff  <blp@gnu.org>
1948
1949         Code improvements.
1950         
1951         * data-list.c:  (parse_fixed) Use lex_end_of_command().
1952         (parse_free) Ditto.
1953         (cmd_repeating_data) Set cont_end.num in right situations.
1954         (parse_repeating_data) Remove redundant test.
1955
1956 Mon May  2 23:37:19 2005  Ben Pfaff  <blp@gnu.org>
1957
1958         Partial fix for bug 12859.
1959         
1960         * data-list.c: (cmd_data_list) Add transformation properly in
1961         vfm_source == NULL case.
1962
1963 Mon May  2 23:27:28 2005  Ben Pfaff  <blp@gnu.org>
1964
1965         * lexer.c: (lex_error) Improve error messages.
1966
1967 Mon May  2 22:28:17 2005  Ben Pfaff  <blp@gnu.org>
1968
1969         * get.c: (cmd_match_files) Check token type before trying to match
1970         tokid.  Fixes bug 12923.
1971
1972 Mon May  2 22:16:51 2005  Ben Pfaff  <blp@gnu.org>
1973
1974         * flip.c: [HAVE_SYS_TYPES_H] Include <sys/types.h>.  Fixes bug
1975         12789.
1976
1977 Mon May  2 22:02:52 2005  Ben Pfaff  <blp@gnu.org>
1978
1979         * expressions/generate.pl: (get_token) Make use of /g
1980         backward-compatible with Perl 5.6.1.
1981
1982 Sun May  1 23:00:19 2005  Ben Pfaff  <blp@gnu.org>
1983
1984         * var-display.c: (cmd_variable_alignment) Fix memory leak.
1985         (cmd_variable_level) Ditto.
1986
1987 Sun May  1 22:49:04 2005  Ben Pfaff  <blp@gnu.org>
1988
1989         Hash table had buggy deletion function.  The fix required changing
1990         other functions to do probing in the required order.
1991
1992         * hash.c: (locate_matching_entry) Rewrite and change interface.
1993         (hsh_rehash) Rewrite to use locate_matching_entry().
1994         (hsh_probe) Ditto.
1995         (hsh_find) Ditto.
1996         (hsh_delete) Ditto.  Also, fix stupid bugs.
1997
1998 Sun May  1 22:24:58 2005  Ben Pfaff  <blp@gnu.org>
1999
2000         * dictionary.c: (dict_clone) Properly copy vectors.
2001
2002 Sun May  1 22:07:58 2005  Ben Pfaff  <blp@gnu.org>
2003
2004         New implementation of long variable names.  Each variable has a
2005         "normal" name, which may be up to 64 bytes long and which is used
2006         for all normal operations.  Variables may have a "short" name,
2007         which is limited to 8 bytes and used only for system and portable
2008         file input and output.
2009         
2010         Make tokid case-preserving.  Update most uses of tokid to treat it
2011         case-insensitively.
2012
2013         Update many commands to deal with long variable names.
2014
2015         * autorecode.c: (cmd_autorecode) Use strcasecmp() instead of strcmp().
2016
2017         * command.c: (cmd_parse) Ditto.
2018         (match_strings) Use toupper() before comparing characters.
2019         (conflicting_3char_prefixes) Use mm_case_compare() instead of
2020         memcmp().
2021         (cmd_match_words) Ditto.
2022
2023         * compute.c: (lvalue_parse) Use st_trim_copy() instead of
2024         strncpy().
2025
2026         * count.c: (struct cnt_var_info) Change n[] to fit long var name.
2027         Use st_trim_copy() instead of strcpy().
2028
2029         * data-in.c: (parse_enum) Use mm_case_compare() instead of
2030         memcmp().
2031
2032         * data-list.c: (struct dls_var_spec) Change name[] to fit long var
2033         name.
2034         (parse_free) Use st_trim_copy() instead of strcpy().
2035
2036         * descript.c: (struct dsc_var) Change z_name[] to fit long var
2037         name.
2038         (try_name) Use strcasecmp() instead of strcmp().
2039         (generate_z_varname) Use st_trim_copy() instead of strcpy().
2040         (descriptives_compare_dsc_vars) Use strcasecmp() instead of
2041         strcmp().
2042
2043         * dictionary.c: (struct dictionary) Removed `long_name_tab'
2044         member.
2045         (compare_long_names) Removed.
2046         (hash_long_name) Removed.
2047         (dict_create) Don't initialize `long_name_tab' member.
2048         (dict_clone) Copy short names into new dictionary. 
2049         (dict_clear) Don't clear `long_name_tab' member.
2050         (dict_get_varname_block) Removed.
2051         (dict_add_longvar_entry) Removed.
2052         (free_nte) Removed.
2053         (dict_destroy) Don't destroy `long_name_tab' member.
2054         (dict_create_var_from_short) Removed.
2055         (dict_create_var_x) Removed.
2056         (dict_create_var) Get rid of longname handling.
2057         Clear short name.
2058         (dict_clone_var) Get rid of longname parameter and longname
2059         handling.
2060         (dict_lookup_var) Get rid of longname handling.
2061         (dict_reorder_var) New function.
2062         (dict_rename_var) Clear short name.
2063         (dict_rename_vars) Get rid of longname handling.  Clear short
2064         names.
2065         (dict_create_vector) Support long vector names.
2066         (dict_lookup_vector) Use strcasecmp() instead of strcmp().
2067         (quasi_base27) Removed.
2068         (make_short_name) Removed.
2069         (compare_strings) New function.
2070         (hash_string) New function.
2071         (dict_assign_short_names) New function.
2072
2073         * file-handle.q: (get_handle_with_name) Use strcasecmp() instead
2074         of strcmp().
2075         (get_handle_for_filename) Support long handle names.
2076
2077         * file-type.c: (struct col_spec) Make `name' fit long var names.
2078         (cmd_file_type) Use strcasecmp() instead of strcmp().
2079
2080         * flip.c: (make_new_var) Rewrite.
2081         (flip_sink_write) Use st_trim_copy() instead of strncpy().
2082
2083         * format.c: (parse_format_specifier_name) Use mm_case_compare()
2084         instead of memcmp().
2085
2086         * get.c: (cmd_save_internal) Rephrase.
2087         (rename_variables) Drop test for identical variable name.
2088         (struct mtf_proc) Change `first', `last' to fit long var name.
2089
2090         * hash.c: (hsh_hash_case_string) New function for case-insensitive
2091         string hashing.
2092
2093         * lexer.c: (restore_token) Use st_trim_copy() instead of
2094         strncpy().
2095         (lex_get) Don't uppercase string when copying into tokid.
2096         (lex_put_back_id) Use st_trim_copy() instead of
2097         strncpy().
2098
2099         * list.q: (determine_layout) Consider length of variable names in
2100         choosing vertical layout.
2101
2102         * matrix-data.c: (cmd_matrix_data) Use strcasecmp() instead of
2103         strcmp().
2104         (string_to_content_type) Ditto.
2105
2106         * modify-vars.c: (compare_variables_given_ordering) Ditto.
2107         (struct var_renaming) Change `new_name' to fit long var name.
2108         (compare_var_renaming_by_new_name) Use strcasecmp() instead of
2109         strcmp().
2110
2111         * pfm-read.c: (read_variables) Disallow system variables in system
2112         files.
2113         (write_variables) Call dict_assign_short_names() and use
2114         short_name[] members.
2115
2116         * repeat.c: (internal_cmd_do_repeat) Use strcasecmp() instead of
2117         strcmp().
2118
2119         * sfm-read.c: (sfm_open_reader) Rewrite code for long variable
2120         map.  Reorder variables into same order as long variable map.
2121         (read_variables) Set short name.
2122
2123         * sfm-write.c: (sfm_open_writer) Call dict_assign_short_names().
2124         (write_variable) Use st_bare_pad_copy().
2125         (write_longvar_table) Rewrite.
2126
2127         * str.c: (mm_case_compare) New function.
2128
2129         * sysfile-info.c: (compare_vectors_by_name) Use strcasecmp()
2130         instead of strcmp().
2131
2132         * t-test.q: (tts_custom_groups) Remove redundant test.
2133         (tts_custom_pairs) Ditto.
2134
2135         * var.h: (struct variable) Change `name' to fit long var names.
2136         Remove `longname'.  Add `short_name' member.  Reorder some
2137         variables.
2138         (struct name_table_entry) Removed.
2139         (struct vector) Change `name' to fit long vector names.
2140
2141         * vars-atr.c: (var_is_valid_name) Allow long var names.
2142         (compare_var_names) Use strcasecmp() instead of strcmp().
2143         (compare_var_ptr_names) Ditto.
2144         (hash_var_name) Use hsh_hash_case_string().
2145         (hash_var_ptr_name) Ditto.
2146         (var_set_short_name) New function.
2147         (var_clear_short_name) New function.
2148         (var_set_short_name_suffix) New function.
2149
2150         * vars-prs.c: (parse_DATA_LIST_vars) Support long names.
2151         Use strcasecmp() instead of strcmp().
2152         (struct array_var_set) Removed `longname_tab'.
2153         (array_var_set_lookup_var_idx) Drop longname_tab support.
2154         (array_var_set_destroy) Don't destroy `longname_tab'.
2155         (var_set_create_from_array) Don't create `longname_tab'.
2156
2157         * vector.c: (cmd_vector) Use strcasecmp() instead of strcmp().
2158         Support long names.
2159
2160         * expressions/parse.c: (word_matches) Use mm_case_compare()
2161         instead of memcmp().
2162         (compare_strings) New function.
2163         (lookup_function) Use compare_strings() instead of strcmp().
2164         
2165 Sun May  1 22:07:43 2005  Ben Pfaff  <blp@gnu.org>
2166
2167         * algorithm.c: (move_element) New function.
2168
2169 Sun May  1 22:05:35 2005  Ben Pfaff  <blp@gnu.org>
2170
2171         * aggregate.c: (parse_aggregate_functions) Always initialize
2172         destvar.
2173
2174 Sun May  1 22:03:47 2005  Ben Pfaff  <blp@gnu.org>
2175
2176         * aggregate.c: (cmd_aggregate) Use dict_clone_var_assert().
2177
2178         * dictionary.c: (dict_clone) Ditto.
2179         (dict_clone_var_assert) New function.
2180
2181         * get.c: (mtf_merge_dictionary) Use dict_clone_var_assert().
2182
2183 Sun May  1 15:05:54 WST 2005 John Darrington <john@darrington.wattle.id.au>
2184
2185         * error.c: Added a string for the compiler version to the
2186         request_bug_report_and_abort function.
2187
2188         * groff_font.c, font.c: Removed manpage(1) style references from 
2189         comments, because RMS frowns upon them.
2190
2191 Thu Apr 28 18:52:06 2005  Ben Pfaff  <blp@gnu.org>
2192
2193         * expressions/parse.c: Improve previous fix for bug 12858 (LAG).
2194
2195 Fri Apr 29 09:28:00 WST 2005 John Darrington <john@darrington.wattle.id.au>
2196
2197         * expressions/parse.c: Added handler for OP_LAG_Vn and OP_LAG_Vs.  
2198         Fixed bug [#12858] .
2199
2200 Wed Apr 27 12:42:34 WST 2005 John Darrington <john@darrington.wattle.id.au>
2201
2202         * loop.c recode.c repeat.c: Fixed a couple of instances of SHORT_NAME_LEN 
2203         which should be LONG_NAME_LEN
2204
2205 Wed Apr 27 07:43:50 WST 2005 John Darrington <john@darrington.wattle.id.au>
2206
2207         * command.def echo.c:  Added the ECHO command.
2208
2209 Mon Apr 25 22:55:59 2005  Ben Pfaff  <blp@gnu.org>
2210
2211         Finish fixing MATCH FILES (bug 11677).
2212
2213         * get.c: (trim_dictionary) Rewrite in terms of drop_variables(),
2214         keep_variables(), rename_variables().
2215         (drop_variables) New function.
2216         (keep_variables) New function.
2217         (struct mtf_file) Rename `in' to `in_name'.  Add `in_var'.
2218         (cmd_match_files) Deal with in_var.  Use drop_variables(),
2219         keep_variables().  When IN is specified, require BY.  Set master
2220         variables after master dictionary is complete.  Add IN variables
2221         after master dictionary is complete.
2222         (mtf_free_file) Free `in_name'.
2223         (mtf_delete_file_in_place) Set in_var value to 0.
2224         (mtf_read_nonactive_records)  Rephrase.
2225         (mtf_processing) Support IN.  Rephrase.  Fix bugs.
2226         (mtf_merge_dictionary) Don't set master variables; we do that
2227         later now.
2228         (get_master) Don't insist that there's a master variable.
2229         
2230 Mon Apr 25 22:55:22 2005  Ben Pfaff  <blp@gnu.org>
2231
2232         Kluge to make some variable renaming sort of work.
2233         Needs real fix.
2234
2235         * dictionary.c: (dict_rename_var) Call dict_add_longvar_entry().
2236
2237 Mon Apr 25 22:52:28 2005  Ben Pfaff  <blp@gnu.org>
2238
2239         Add functions for comparing sets of variables between cases.
2240         Use the functions.
2241
2242         * case.c: (case_compare) New function.
2243         (case_compare_2dict) New function.
2244         
2245         * aggregate.c: (struct agr_proc) Remove `prev_break' member.  Add
2246         `break_case'.
2247         (cmd_aggregate) Nullify break_case.  Don't call
2248         initialize_aggregate_info().
2249         (agr_destroy) Destroy break_case.
2250         (aggregate_single_case) Rewrite.  Use case_compare().
2251         (dump_aggregate_info) Copy from break_case into output.
2252         (initialize_aggregate_info) Copy break_case from input.
2253
2254         * get.c: (mtf_compare_BY_values) Use case_compare_2dict().
2255
2256         * vfm.c: (equal_splits) Use case_compare().
2257
2258 Sat Apr 23 17:01:04 WST 2005 John Darrington <john@darrington.wattle.id.au>
2259
2260         * dictionary.c vars-prs.c sfm-write.c: Fixed some memory leaks
2261
2262 Sun Apr 17 23:08:15 2005  Ben Pfaff  <blp@gnu.org>
2263
2264         Start work on fixing MATCH FILES.
2265
2266         * get.c: (enum operation) Remove OP_MATCH.
2267         (trim_dictionary) Change return value to bool.  Don't support
2268         OP_MATCH.
2269         (struct mtf_file) Remove `first', `last' members.
2270         (struct mtf_proc) Add `first', `last' members.  Change mtf_case
2271         from `struct ccase *' to `struct ccase'.  Remove `by' member.
2272         (cmd_match_files) Essentially rewrite.
2273         (mtf_free) Don't free `by' member.  Destroy `mtf_case' member.
2274         (mtf_read_nonactive_records) mtf_ parameter is not unused.
2275         (mtf_processing) Ditto.  Also rephrase some code.
2276         (mtf_merge_dictionary) Rewrite for easy comprehension.  
2277
2278 Sun Apr 17 23:06:00 2005  Ben Pfaff  <blp@gnu.org>
2279
2280         * matrix-data.c: (wr_output_data) [DEBUGGING] Fix compilation
2281         error.
2282
2283         * q2c.c: (dump_token) [DEBUGGING] Fix compilation error.
2284         
2285 Thu Apr 14 2005 John Darrington
2286
2287         * var-display.c: New file.
2288
2289         * format.h var.h sfm-read.c sfm-write.c dictionary.c :  Added 
2290           display_width, measure and alignment parameters to variables.
2291
2292         * aggregate.c command.def compute.c count.c data-list.c descript.c
2293           dictionary.c dictionary.h expr-prs.c file-type.c flip.c get.c 
2294           lexer.c lexer.h loop.c modify-vars.c pfm-read.c recode.c repeat.c 
2295           sfm-read.c sfm-write.c sfm-write.h sfmP.h val-labs.c val.h var.h 
2296           vars-prs.c vector.c :  
2297               - Replaced literal constants representing maximum variable name 
2298                 length with macro definitions. 
2299               - Added support for long variable names.
2300               - Changed lexer such that it no longer makes tokens upper
2301                 case, but relies upon case insensitive behaviour of commands.
2302
2303 Mon Apr  4 22:27:34 2005  Ben Pfaff  <blp@gnu.org>
2304
2305         * aggregate.c: (parse_aggregate_functions) If dict_create_var()
2306         fails, don't dereference the resulting null pointer (bug 12427).
2307         Also, fix double free error.
2308
2309 Sat Mar 19 23:06:02 2005  Ben Pfaff  <blp@gnu.org>
2310
2311         * aggregate.c: (parse_aggregate_functions) Fix N_NO_VARS format.
2312         (accumulate_aggregate_info) Set int1 to 1 for SUM.
2313         (dump_aggregate_info) Only make SUM non-missing if there was at
2314         least one variate.
2315
2316 Sat Mar 19 14:48:19 2005  Ben Pfaff  <blp@gnu.org>
2317
2318         * aggregate.c: (dump_aggregate_info) Properly test whether the
2319         destination variable is numeric, when making the result
2320         system-missing for columnwise missing values.
2321
2322 Mon Mar 14 21:52:34 2005  Ben Pfaff  <blp@gnu.org>
2323
2324         * misc.h: Remove GCC specializations.
2325
2326 Mon Mar 14 21:07:23 2005  Ben Pfaff  <blp@gnu.org>
2327
2328         Make sort stable (bug 12313).
2329         
2330         * sort.c: Don't need to include some headers anymore.
2331         (static var min_buffers) New variable.
2332         (static var max_buffers) New variable.
2333         (static var allow_internal_sort) New variable.
2334         (cmd_sort_cases) Add test mode.
2335         (sort_execute) Rephrase.
2336         (do_internal_sort) Don't try internal sorting if
2337         allow_internal_sort is set.
2338         (struct external_sort) Renamed `initial_runs' to `runs' and
2339         updated all references.
2340         (macro MIN_BUFFER_TOTAL_SIZE_RECS) Removed.
2341         (macro MIN_BUFFER_SIZE_BYTES) Removed.
2342         (macro MIN_BUFFER_SIZE_RECS) Removed.
2343         (compare_initial_runs) Removed.
2344         (struct record_run) Add member `idx'.
2345         (write_initial_runs) Pass increasing values to process_case() as
2346         index.
2347         (process_case) Add `idx' parameter and use it to initialize new
2348         `idx' member.
2349         (allocate_cases) Limit allocated buffers to max_buffers.
2350         (compare_record_run) Use new `idx' member for last resort
2351         comparison, for stability.
2352         (end_run) Call casefile_sleep() on irs->casefile, to prevent
2353         running out of file descriptors.
2354         (struct merge_state) Removed.
2355         (merge) Don't need to allocate cases.  Always use MAX_MERGE_ORDER
2356         unless we have fewer runs left.  Always merge consecutive runs,
2357         for stability.  Return the final run.
2358         (mod) Removed.
2359         (choose_merge) New function.
2360         (merge_once) Rewritten.
2361
2362 Mon Mar 14 21:05:42 2005  Ben Pfaff  <blp@gnu.org>
2363
2364         * cmdline.c: (static var testing_mode) Move into
2365         parse_command_line().
2366         
2367 Mon Mar 14 21:05:13 2005  Ben Pfaff  <blp@gnu.org>
2368
2369         * algorithm.c: (remove_range) New function.
2370         (remove_element) New function.
2371
2372         * dictionary.c: (dict_delete_var) Use remove_element().
2373
2374         * flip.c: (cmd_flip) Ditto.
2375
2376 Sun Mar 13 22:52:05 2005  Ben Pfaff  <blp@gnu.org>
2377
2378         * file-handle.q: (struct file_handle) `open_mode' should not be
2379         const.
2380         
2381 Sun Mar 13 22:40:54 2005  Ben Pfaff  <blp@gnu.org>
2382
2383         First phase of making SORT CASES stable (bug 12313).
2384
2385         * sort.c: (struct indexed_case) New structure.
2386         (do_internal_sort) Rewrite to make internal sorting stable.
2387         (compare_case_dblptrs) Removed.
2388         (compare_indexed_cases) New function.
2389
2390 Sun Mar 13 22:38:40 2005  Ben Pfaff  <blp@gnu.org>
2391
2392         Clean-ups.
2393
2394         * casefile.c: (casereader_read_xfer_assert) New function.
2395
2396         * dictionary.c: (dict_compact_case) New function.
2397
2398         * flip.c: (struct flip_pgm) New member idx_to_fv.
2399         (cmd_flip) Initialize idx_to_fv member.
2400         (destroy_flip_pgm) Free idx_to_fv member.
2401         (flip_sink_write) Use struct flip_pgm member instead of case_sink
2402         member.
2403         (flip_sink_write) Ditto.
2404
2405         * vfm.c: (write_case) Use dict_compact_case() instead of
2406         compact_case().
2407         (compact_case) Removed.
2408         (storage_source_create) Removed `dict' parameter.  All references
2409         updated.
2410
2411         * vfm.h: (struct case_source) Removed `value_cnt' member.  All
2412         references removed.
2413         (struct case_sink) Removed `dict', `idx_to_fv' members.  All
2414         references removed.
2415
2416 Sun Mar 13 22:35:55 2005  Ben Pfaff  <blp@gnu.org>
2417
2418         More AGGREGATE fixes.
2419
2420         * aggregate.c: (accumulate_aggregate_info) Implement NMISS and
2421         NUMISS for strings.  Fix FOUT, POUT, FGT, FLT, FIN, FOUT for
2422         strings.
2423         (initialize_aggregate_info) Fix initialization for MIN, MAX for
2424         strings.
2425
2426 Sat Mar 12 23:26:21 2005  Ben Pfaff  <blp@gnu.org>
2427
2428         Start work on testing and debugging AGGREGATE.
2429
2430         * aggregate.c: (cmd_aggregate) Use discrete bool variables instead
2431         of a bit-map.  Require proper subcommand ordering.  Make OUTFILE
2432         subcommand mandatory.
2433         (parse_aggregate_functions) Check that PIN, POUT, FIN, FOUT
2434         functions' arguments are in the correct order and swap them if
2435         not.
2436         (accumulate_aggregate_info) Make SUM include weights.  Add various
2437         string functions.
2438         (dump_aggregate_info) Add various string functions.
2439         (initialize_aggregate_info) Initialize int1 for MIN, MAX.
2440
2441         * sort.c: (sort_parse_criteria) Add parameter for returning
2442         whether any directions were specified.  All callers updated.
2443
2444 Sun Mar 13 14:54:27 WST 2005 John Darrington <john@darrington.wattle.id.au>
2445
2446         * t-test.q: Fixed erroneous logic in compare_group_binary.
2447
2448 Sat Mar 12 13:29:21 2005  Ben Pfaff  <blp@gnu.org>
2449
2450         * split-file.c: (cmd_split_file) Ignore LAYERED and SEPARATE
2451         keywords (bug 11628).
2452
2453 Sat Mar 12 13:17:12 2005  Ben Pfaff  <blp@gnu.org>
2454
2455         * vfm.c: (procedure_with_splits) Fix bug 11492: end_func() must be
2456         called *before* close_active_file().
2457
2458 Sat Mar 12 12:20:57 2005  Ben Pfaff  <blp@gnu.org>
2459
2460         * file-handle.q: (struct file_handle) Change open_mode from
2461         character pointer to 3-char array, for safety.  Updated all
2462         references.
2463
2464 Sat Mar 12 12:15:49 2005  Ben Pfaff  <blp@gnu.org>
2465
2466         Thanks to Ben Kujala <bkujala@oregonchildcare.org> for reporting
2467         these bugs.
2468         
2469         * pfm-read.c: (read_header) Improve error message for many cases
2470         in which the input is not actually a portable file.
2471
2472         * file-handle.q: (fh_open) When we give an error message, actually
2473         return NULL.
2474
2475 Fri Mar 11 11:50:30 2005  Ben Pfaff  <blp@gnu.org>
2476
2477         * format.c: (check_common_specifier) New function for checks
2478         common to check_input_specifier() and check_output_specifier().
2479         (check_input_specifier) Use check_common_specifier().
2480         (check_output_specifier) Use check_common_specifier().
2481         (check_string_specifier) Removed.
2482         (check_specifier_type) New function.
2483         (check_specifier_width) New function.
2484         (get_format_var_width) Fix bug.
2485
2486         * formats.c: (internal_cmd_formats) Only accept numeric variables.
2487
2488         * lexer.c: (check_id) Rename lex_id_to_token(), make public,
2489         update all references.  Make case-insensitive.
2490
2491         * pfm-read.c: Essentially rewrite the whole file.  Now much
2492         cleaner.
2493
2494         * print.c: (check_string_width) New function.
2495         (fixed_parse_compatible) Use check_string_width(),
2496         check_specifier_type().
2497         (dump_fmt_list) Ditto.
2498
2499         * str.c: (st_trim_copy) New function.
2500         (st_uppercase) New function.
2501
2502         * vars-atr.c: (var_is_valid_name) New function.
2503         
2504         * expressions/parse.c: (type_coercion_core) Use
2505         check_specifier_type().
2506         
2507 Fri Mar 11 11:31:24 2005  Ben Pfaff  <blp@gnu.org>
2508
2509         * expressions/evaluate.c: (cmd_debug_evaluate) Fix memory leaks.
2510
2511         * expressions/parse.c: (no_match) Ditto.
2512
2513 Wed Mar  9 09:54:27 2005  Ben Pfaff  <blp@gnu.org>
2514
2515         * Makefile.am: (pspp_LDADD) Add libgsl-extras.a.
2516
2517         * expressions/helpers.c: (struct func_params) Removed.
2518         (generalized_idf) Removed.
2519         (cdf_beta) Removed.
2520         (idf_beta) Removed.
2521         (idf_fdist) Use gslextras_cdf_beta_Pinv() instead of idf_beta().
2522
2523         * expressions/operations.def: Implement IDF.BETA, CDF.BINOM,
2524         CDF.GEOM, CDF.HYPER, CDF.NEGBIN, CDF.POISSON using gsl-extras.
2525         Implement SIG.F, which I had overlooked previously.
2526
2527 Tue Mar  8 12:47:53 WST 2005 John Darrington <john@darrington.wattle.id.au>
2528
2529         * command.c command.def glob.[ch] cmdline.c: Made DEBUG cmds
2530         available only in testing mode.
2531
2532 Sun Mar  6 23:25:40 2005  Ben Pfaff  <blp@gnu.org>
2533
2534         * data-in.c: Use `bool' throughout, where relevant.
2535
2536 Sun Mar  6 19:52:22 2005  Ben Pfaff  <blp@gnu.org>
2537
2538         DATA LIST with free-field formats should not have implied decimal
2539         places (bug 12035).  Also clean up data-in.c a bit.
2540
2541         * data-in.h: (enum) Add DI_IMPLIED_DECIMALS.
2542
2543         * data-in.c: (apply_implied_decimals) New function.
2544         (parse_numeric) Don't adjust exponent if DI_IMPLIED_DECIMALS not
2545         set.  Also, get rid of gotos.
2546         (parse_Z) Use apply_implied_decimals() if the field doesn't
2547         contain a decimal point.
2548         (parse_N) Use apply_implied_decimals().
2549         (parse_IB) Ditto.
2550         (parse_PIB) Ditto.
2551         (parse_P) Ditto.
2552         (parse_PK) Ditto.
2553         (to_roman) Removed.
2554         (parse_enum) New function.
2555         (macro CHAR_IS_ROMAN) Removed.
2556         (macro ROMAN_VALUE) Removed.
2557         (parse_month) Use parse_enum().
2558         (parse_weekday) Use parse_enum().
2559         (parse_DATETIME) Use long for weekday.
2560
2561         * data-list.c: (read_from_data_list_fixed) Use
2562         DI_IMPLIED_DECIMALS.
2563
2564 Sun Mar  6 17:07:20 2005  Ben Pfaff  <blp@gnu.org>
2565
2566         When the lexer sees something like `-5' in the input, it has to
2567         decide whether it's a negative numeric constant token or a '-'
2568         token followed by a positive numeric constant token.  It always
2569         decides on the former, and then the parser can call
2570         lex_negative_to_dash() if it wants the latter.  However, this
2571         doesn't work for the case of `-0', because negative zero is
2572         (portably) indistinguishable from positive zero.  So now we divide
2573         T_NUM into two tokens, T_POS_NUM and T_NEG_NUM, to make the
2574         distinction clear.  This requires a little bit of extra effort,
2575         because there were several references to T_NUM in the code base.
2576         
2577         * lexer.c: (lex_get) Use T_NEG_NUM and T_POS_NUM to distinguish
2578         positive and negative numeric constants.
2579         (lex_double_p) Renamed lex_is_number().  Changed return type to
2580         bool.  Updated all relevant references to T_NUM to instead use
2581         this function.
2582         (lex_double) Renamed lex_number().  All references updated.
2583         (lex_integer_p) Renamed lex_is_integer().  Changed return type to
2584         bool.  All references updated.
2585         (lex_token_representation) Understand T_NEG_NUM and T_POS_NUM.
2586         (lex_negative_to_dash) Ditto.
2587         (dump_token) Ditto.
2588         
2589         * lexer.h: (enum) Add T_POS_NUM, T_NEG_NUM.  Remove T_NUM.
2590
2591 Sun Mar  6 22:09:20 2005  Ben Pfaff  <blp@gnu.org>
2592
2593         * expressions/operations.def: (NUMBER) Use DI_IMPLIED_DECIMALS.
2594
2595 Sun Mar  6 19:33:24 2005  Ben Pfaff  <blp@gnu.org>
2596
2597         * expressions/operations.def: (VEC_ELEM_NUM) Treat user-missing
2598         values as system-missing.
2599
2600         * expressions/parse.c: (parse_vector_element) Fix order of
2601         arguments in call to expr_allocate_binary().
2602
2603 Sun Mar  6 17:51:05 2005  Ben Pfaff  <blp@gnu.org>
2604
2605         * expressions/optimize.c: (optimize_tree) Fix optimization bug for
2606         x**2.
2607
2608         * expressions/parse.c: (type_coercion_core) Set *node to NULL on
2609         failure, as indicated by function comment.
2610         (parse_binary_operators) Always return NULL on type_coercion()
2611         failure.  Should have been doing this anyway, but bug in
2612         type_coercion_core() filtered through.
2613         (parse_add) Fix typo in user message.
2614         (parse_primary) Understand T_NEG_NUM and T_POS_NUM.
2615
2616 Sun Mar  6 10:47:13 2005  Ben Pfaff  <blp@gnu.org>
2617
2618         * expressions/operations.def: Add VALUE function.
2619
2620         * expressions/parse.c: (parse_function) Need an unary composite
2621         node for variables in A TO B, not a variable node.  Use
2622         allocate_unary_variable().
2623         (parse_primary) Use allocate_unary_variable().
2624         (allocate_unary_variable) New function.
2625
2626 Thu Mar  3 23:53:32 2005  Ben Pfaff  <blp@gnu.org>
2627
2628         * expressions/PSPP_expressions.pm: Renamed it back to generate.pl
2629         but fixed the real problem that was preventing the build from a
2630         separate directory.  I liked it my way better ;-)
2631         
2632 Thu Mar  3 23:17:51 2005  Ben Pfaff  <blp@gnu.org>
2633
2634         * expressions/parse.c: (expr_parse) Fix parameter type.  Thanks to
2635         John Darrington <john@darrington.wattle.id.au> for reporting this
2636         bug.
2637
2638 Thu Mar  3 22:10:25 WST 2005 John Darrington <john@darrington.wattle.id.au>
2639
2640         * expressions/Makefile.am expressions/evaluate.h.pl
2641           expressions/evaluate.inc.pl expressions/operations.h.pl
2642           expressions/optimize.inc.pl expressions/parse.inc.p:
2643
2644           Renamed generate.pl to PSPP_expressions.pm and adjusted *.pl
2645           to suit. 
2646
2647           Fixed everything so that it can be built from an arbitrary
2648           directory.
2649         
2650 Thu Mar  3 22:08:35 WST 2005 John Darrington <john@darrington.wattle.id.au>
2651
2652         * Makefile.am : Fixed up CLEANFILES target.
2653
2654 Mon Feb 28 23:49:56 2005  Ben Pfaff  <blp@gnu.org>
2655
2656         * str.h: Changed `struct len_string' to `struct fixed_string', a
2657         more accurate name.  Updated all references.
2658
2659 Mon Feb 28 23:35:30 2005  Ben Pfaff  <blp@gnu.org>
2660
2661         Redo calendar support.  Should now be bug-for-bug compatible.
2662         
2663         * calendar.c: New file.
2664
2665         * calendar.h: New file.
2666
2667         * data-in.c: Use new calendar functions.
2668         (parse_sign) Change sense of return value.
2669         (calendar_error) New function.
2670         (ymd_to_ofs) New function.
2671         (ymd_to_date) New function.
2672         (parse_DATE) Use new function.
2673         (parse_ADATE) Ditto.
2674         (parse_EDATE) Ditto.
2675         (parse_SDATE) Ditto.
2676         (parse_JDATE) Ditto.
2677         (parse_QYR) Ditto.
2678         (parse_MOYR) Ditto.
2679         (parse_WKYR) Ditto.
2680         (parse_TIME) Ditto.
2681         (parse_DTIME) Ditto.
2682         (parse_DATETIME) Ditto.
2683
2684         * data-out.c: (convert_date) Use new calendar functions.
2685
2686         * error.c: (err_vmsg) Changed interface to be more sensible.
2687         Updated all callers.
2688         (dump_message) Don't double new-lines (why did we do this
2689         anyway?).
2690
2691 Mon Feb 28 23:30:25 2005  Ben Pfaff  <blp@gnu.org>
2692
2693         * sfmP.h: (macro flt64) Moved here from pref.h.orig.
2694         (macro FLT64_MAX) Moved here from pref.h.orig.
2695
2696 Mon Feb 28 23:28:01 2005  Ben Pfaff  <blp@gnu.org>
2697
2698         * set.q: Support SET EPOCH.
2699         (static var set_epoch) New var.
2700         (aux_stc_custom_epoch) New function.
2701         (stc_custom_epoch) New function.
2702         (get_epoch) New function.
2703         (stc_custom_pager) [USE_INTERNAL_PAGER] Fix bug.
2704
2705         * format.c: Make it possible just to check whether a specifier is
2706         valid without emitting an error message.
2707         (parse_format_specifier_name) Change interface, update all
2708         callers.
2709         (check_input_specifier) Ditto.
2710         (check_output_specifier) Ditto.
2711         (parse_format_specifier) Ditto.
2712
2713 Mon Feb 28 23:24:08 2005  Ben Pfaff  <blp@gnu.org>
2714
2715         * command.def: Add DEBUG POOL.
2716
2717         * pool.c: (pool_destroy) Fix bug in deleting this pool from its
2718         parent.
2719         (pool_clear) Properly account for size of pool gizmo.
2720         (pool_realloc) Ditto.
2721         (pool_clone) New function.
2722
2723         * pool.h: Mark our allocation functions MALLOC_LIKE.
2724
2725 Mon Feb 28 23:21:26 2005  Ben Pfaff  <blp@gnu.org>
2726
2727         * Makefile.am: Move many definitions into new top-level
2728         Make.build.  Add expressions to SUBDIRS.  Add calendar.c,
2729         calendar.h.  Remove expr-evl.c, expr-opt.c expr-prs.c, expr.h,
2730         exprP.h, expr.def.
2731
2732         * case.c: (case_resize) New function.
2733         (case_swap) New function.
2734
2735         * casefile.c: Include mkfile.h.
2736
2737 Fri Feb 25 21:11:35 WST 2005 John Darrington <john@darrington.wattle.id.au>
2738
2739         * sfm-read.c: Fixed a buglet which caused a crash when trying
2740         to read a non-existent file.
2741
2742 Sun Feb 13 16:11:13 2005  Ben Pfaff  <blp@gnu.org>
2743
2744         Fix bug 11955.
2745
2746         * aggregate.c: (parse_aggregate_functions) Code cleanup.
2747         Important part: get rid of spurious copying of function->format to
2748         destvar->print and destvar->write.
2749
2750 Fri Feb 11 00:08:36 2005  Ben Pfaff  <blp@gnu.org>
2751
2752         Fix bug 11916, which was confusing a variable's `index' member
2753         with the variable's position in a var_set.  Although these are
2754         usually the same, they are not for array `var_set's.
2755         
2756         Took advantage of this bug as an opportunity to clean up and
2757         rewrite parse_var_set_vars().
2758
2759         * vars-prs.c: (parse_vs_variable_idx) New function.
2760         (parse_vs_variable) Reimplement in terms of
2761         parse_vs_variable_idx().
2762         (parse_var_idx_class) New function.
2763         (add_variable) New function.
2764         (add_variables) New function.
2765         (parse_var_set_vars) Rewritten.
2766         (struct var_set) Change `lookup_var' member that returns a
2767         variable into `lookup_var_idx' member that returns an int.
2768         Updated the var set implementations in obvious corresponding ways.
2769         Used compare_var_ptr_names(), hash_var_ptr_name() just added.
2770         
2771 Fri Feb 11 00:06:03 2005  Ben Pfaff  <blp@gnu.org>
2772
2773         Use our global variable compare & hash functions and give them
2774         better names.  Add similar functions for dealing with double
2775         pointers to variables.
2776         
2777         * vars-atr.c: (compare_variables) Renamed compare_var_names().
2778         (hash_variable) Renamed hash_var_name().
2779         (compare_var_ptr_names) New function.
2780         (hash_var_ptr_name) New function.
2781         
2782         * t-test.q: (cmd_t_test) Use global compare_var_names(),
2783         hash_var_name().
2784         (compare_var_name) Removed.
2785         (hash_var_name) Removed.
2786
2787 Fri Feb 11 00:04:39 2005  Ben Pfaff  <blp@gnu.org>
2788
2789         Fix dictionary bug.
2790         
2791         * dictionary.c: (compare_variable_dblptrs) Rename
2792         compare_var_ptrs() and fix it to properly dereference the double
2793         pointers.
2794
2795 Mon Feb  7 09:58:15 WST 2005 John Darrington <john@darrington.wattle.id.au>
2796
2797         crosstabs.q examine.q oneway.q q2c.c:  Added a q2c feature to 
2798         declare subcommands as mandatory.  Closed bug #11843
2799
2800 Sat Feb  5 20:35:10 WST 2005 John Darrington <john@darrington.wattle.id.au>
2801         
2802         * getline.c command.[ch] command.def:  Added (very rudimentary)
2803         support for line  completion when in interactive mode.  Partially 
2804         addresses bug #11693
2805         
2806 Mon Jan 31 09:52:51 WST 2005 John Darrington <john@darrington.wattle.id.au>
2807
2808         * examine.q factor_stats.c oneway.q output.c pfm-read.c: Fixed some
2809         problems revealed by valgrind.
2810
2811
2812 Wed Jan 26 11:44:11 WST 2005 John Darrington <john@darrington.wattle.id.au>
2813
2814         * set.q: Affixed a fix to the previous fix such that we'll be OK now
2815         whether or not PAGER is set.
2816
2817 Wed Jan 26 09:25:54 WST 2005 John Darrington <john@darrington.wattle.id.au>
2818
2819         * set.q: Copied the string produced by getenv("PAGER") thus avoiding
2820         "invalid free" errors.  Hopefully fixes bug #11722
2821
2822         * compute.c expr-prs.c: Check that lvalues are populated before 
2823         attempting to destroy them.  Closes bug #11676
2824
2825 Tue Jan 25 21:01:43 WST 2005 John Darrington <john@darrington.wattle.id.au>
2826
2827         * aggregate.c: Initialised the complete agr_proc structure.
2828         Closes bug #11675
2829
2830
2831 Sun Jan 23 23:02:21 2005  Ben Pfaff  <blp@gnu.org>
2832
2833         * print.c: (print_trns_free) Close the dfm writer if there is one,
2834         fixing a memory leak.
2835
2836 Mon Jan 24 12:24:36 WST 2005 John Darrington <john@darrington.wattle.id.au>
2837
2838         * glob.c oneway.q q2c.c t-test.q vfm.c: Still *more* memory leaks 
2839         fixed.
2840
2841
2842 Fri Jan 21 19:54:14 WST 2005 John Darrington <john@darrington.wattle.id.au>
2843
2844         * linked-list.[ch] Added
2845
2846         * examine.q file-handle.[hq] font.h glob.c groff-font.c postscript.c 
2847           set.q:    Yet more memory leaks
2848
2849 Tue Jan 18 23:12:40 WST 2005 John Darrington <john@darrington.wattle.id.au>
2850
2851         * t-test.q examine.q : More memory leaks fixed.
2852
2853 Tue Jan 18 19:26:59 WST 2005 John Darrington <john@darrington.wattle.id.au>
2854
2855         * examine.q  factor_stats.[ch] get.c pfm-read.c: Plugged numerous
2856         memory leaks.
2857
2858 Mon Jan 10 14:43:45 WST 2005 John Darrington <john@darrington.wattle.id.au>
2859
2860         * ascii.c cartesian.c casefile.c chart.h devind.c 
2861           examine.q frequencies.q
2862           html.c output.h piechart.c plot-chart.c plot-hist.c
2863
2864           Integrated the chart rendering into the output stream
2865           (currently only works for html).
2866           
2867           Removed gratuitous use of ifndef NO_CHARTS, and replaced with
2868           dummy-chart.c for compiling without charts.
2869
2870         * mkfile.[ch] Created.  
2871
2872         * som.[ch] tab.[ch]: Changed name of som_table to som_entity
2873         Added type element so we can tell if it's a chart or a table.
2874
2875         * chart.h examine.q piechart.c plot-chart.c plot-hist.c: changed the 
2876         API of charts to be more like that of tables.
2877
2878 Thu Jan 13 21:00:02 WST 2005 John Darrington <john@darrington.wattle.id.au>
2879
2880         * casefile.c main.c: Moved the SIGINT handler from casefile.c to
2881         main.c. Removed the handler for SIGQUIT.
2882
2883 Mon Jan 10 14:43:45 WST 2005 John Darrington <john@darrington.wattle.id.au>
2884
2885         * casefile.c: Added a signal handler to delete temp files on 
2886         SIGINT and SIGQUIT
2887
2888         * permissions.c Inhibited the PERMISSIONS command when SAFER is on.
2889
2890         * command.def Added a lot more unimplemented commands.
2891
2892         * copyleft.[ch] cmdline.c Moved legal information to copyleft.c
2893
2894 Sat Jan  8 23:58:34 2005  Ben Pfaff  <blp@gnu.org>
2895
2896         * sort.c: (compare_initial_runs) Needed additional level of
2897         dereferencing.
2898         (merge_once) Fix plenty of stupid mistakes.
2899
2900 Sat Jan  8 23:55:27 2005  Ben Pfaff  <blp@gnu.org>
2901
2902         * casefile.c: (casefile_sleep) Need to flush_buffer() after
2903         calling casefile_to_disk() or we will lose the last block in the
2904         file if the casefile started out as disk-based.
2905         (casefile_get_reader) Initialize reader->destructive to 0.
2906         (cmd_debug_casefile) Add new test pattern.
2907         (test_casefile) Define new test pattern to make sure
2908         casefile_sleep() works properly.
2909
2910 Fri Jan  7 08:00:05 WST 2005 John Darrington <john@darrington.wattle.id.au>
2911
2912         * Makefile.am chart.[ch]  histogram.[ch] piechart.c (Modified);
2913           plot-hist.c plot-chart.c (Added) Reorganised these files in an
2914           attempt to seperate the creation and processing of charts from their
2915           actuall renedering.
2916
2917         * examine.q frequencies.q generated charts conditional upon the NO_CHARTS
2918           macro.
2919
2920 Thu Jan  6 18:48:58 WST 2005 John Darrington <john@darrington.wattle.id.au>
2921
2922         * main.c Added a signal handler for SIGFPE
2923
2924         * sort.c Somewhat more robust fix to the previous entry.
2925
2926 Wed Jan  5 21:23:31 2005  Ben Pfaff  <blp@gnu.org>
2927
2928         * sort.c: (merge) Fix assertion for proper Huffman merge pattern:
2929         0 == 1 modulo 1.  See Knuth 5.4.9 (vol. 3, 2nd ed.,
2930         pp. 361).  Thanks to John Darrington <john@cellform.com.au> for
2931         reporting the bug.
2932
2933 Wed Jan  5 22:42:26 WST 2005 John Darrington <john@darrington.wattle.id.au>
2934
2935         * case.h Fixed bug # 11307
2936         
2937 Wed Jan  5 08:30:48 WST 2005 John Darrington <john@darrington.wattle.id.au>
2938
2939         * val-labs.c Fixed bug which caused a crash if VALUE LABELS had
2940         a trailing slash.
2941
2942 Mon Jan  3 17:44:37 2005  Ben Pfaff  <blp@gnu.org>
2943
2944         * pfm-read.c: (read_variables) Remove direct manipulation of
2945         v->aux, which is no longer needed.  Fixes bug 11483.
2946
2947 Sat Jan  1 19:01:16 WST 2005 John Darrington <john@darrington.wattle.id.au>
2948
2949         * data-list.c Fixed a bug in parsing delimiters.
2950
2951         * group.c vars-atr.c Fixed buglet in hash/compare functions for alpha
2952         values.
2953
2954         * percentiles.c Properly handled calculation of Tukey hinges where
2955         the number of data is small.
2956
2957         * oneway.q Used the generic value_to_string function for independent
2958         variable instead of trying to do it ourselves.
2959
2960         * box-whisker.c Fixed a buglet which caused a crash if the number of
2961         data was zero
2962
2963
2964 Fri Dec 31 16:47:45 WST 2004 John Darrington <john@darrington.wattle.id.au>
2965
2966         * examine.q box-whisker.c chart.h Implemented boxplots in EXAMINE
2967
2968         * percentiles.c Fixed some bugs when calculating percentiles when
2969         there's a small number of cases.
2970
2971 Wed Dec 29 08:18:08 WST 2004 John Darrington <john@darrington.wattle.id.au>
2972
2973         * percentiles.[ch] Added. Calculates percentiles and Tukey hinges
2974
2975         * examine.q factor_stats.[ch]  Added calculation of percentiles
2976
2977 Fri Dec 24 15:09:11 WST 2004 John Darrington <john@darrington.wattle.id.au>
2978
2979         * t-test.q Fixed bug #11227 Made t-test work when the independent
2980         variable is alpha
2981
2982 Sat Dec 11 11:43:45 WST 2004 John Darrington <john@darrington.wattle.id.au>
2983
2984         * factor_stats.c Fixed calculation of trimmed mean under various
2985         special conditions.
2986
2987 Sat Dec  4 17:14:45 WST 2004 John Darrington <john@darrington.wattle.id.au>
2988
2989         * histogram.c chart.[ch] factor_stats.c frequencies.q
2990
2991         Added code to calculate sensible histogram ranges and limits.
2992
2993 Thu Dec  2 13:37:43 WST 2004 John Darrington <john@darrington.wattle.id.au>
2994
2995         * chart.h Updated to reflect many API changes.
2996
2997         * cartesian.c chart.c Moved the definitions of chart_write_{xy}scale from 
2998         cartesian.c and into chart.c
2999
3000         * factorstats.[ch] Added the histogram calculations
3001
3002         * casefile.c Removed an unused variable.
3003
3004         * frequencies.q examine.q histogram.c  Reworked the API for 
3005         histograms.
3006
3007         * piechart.c  Revised the API for piecharts.
3008
3009         * var.h  Moved the definitions of freq_tab and freq out of var.h
3010         and into frequencies.q where they belong.
3011         
3012 Tue Nov 30 21:10:20 2004  Ben Pfaff  <blp@gnu.org>
3013
3014         * flip.c: (flip_file) Check for off_t separately from fseeko(),
3015         using AC_TYPE_OFF_T.
3016
3017 Tue Nov 30 08:47:41 2004  Ben Pfaff  <blp@gnu.org>
3018
3019         * flip.c: (flip_file) If fseeko() is not available, use long int
3020         for off_t.  Thanks to "Marshall DeBerry" <mdb@radix.net> for
3021         reporting the problem.
3022
3023 Mon Nov 29 12:20:59 WST 2004 John Darrington <john@darrington.wattle.id.au>
3024
3025         * examine.q factor_stats.[ch] Changed stderr to se_mean to avoid
3026         conflict with stdio.
3027
3028 Sun Nov 21 10:32:41 WST 2004 John Darrington <john@darrington.wattle.id.au>
3029
3030         * var-labs.c (var_to_string) Now returns null if the variable is null
3031
3032         * value-labels.c (value_to_string) Made it return null if either the 
3033         value or the variable is null.
3034
3035         * hash.c (hsh_clear) Fixed a buglet.
3036
3037         * examine.q  factor_stats.[ch] Largely  rewrote, because I'd started 
3038         with  the wrong model.
3039
3040         * casefile.[ch] Added a function to return the casereader.case_idx 
3041         member
3042
3043         * examine.q  Implemented the extreme values results.
3044
3045 John Darrington <john@darrington.wattle.id.au>
3046
3047         * settings.h set.c glob.[ch] frequencies.q q2c.c error.c lexer.[ch] 
3048           output.[ch] getline.c 
3049
3050           Plugged some memory leaks
3051
3052 Mon Nov 15 23:47:40 2004  Ben Pfaff  <blp@gnu.org>
3053
3054         Adopt GSL random number generators, paving the way for providing
3055         the complete suite of random number generators on expressions.
3056         
3057         * Makefile.am: Remove random.c, random.h.
3058
3059         * random.c: Removed.
3060
3061         * random.h: Removed.
3062
3063         * algorithm.c: (algo_default_random) Use GSL functions.
3064
3065         * casefile.c: (test_casefile) Use GSL RNG functions.
3066
3067         * expr-evl.c: (expr_evaluate) Use GSL RNG functions for OP_NORMAL,
3068         OP_UNIFORM.
3069
3070         * sample.c: (cmd_sample) Use GSL RNG functions.
3071         (sample_trns_proc) Ditto.
3072
3073         * set.q: (static var set_seed) Removed.
3074         (static var seed_flag) Removed.
3075         (static var rng) New variable.
3076         (aux_stc_custom_seed) No seed value anymore, don't print anything.
3077         (stc_custom_seed) Use new seed functions.
3078         (seed_is_set) Removed.
3079         (get_rng) New function that composes the entire external
3080         interface.
3081         (set_rng) New function.
3082         (random_seed) New function.
3083
3084 Mon Nov 15 22:08:25 2004  Ben Pfaff  <blp@gnu.org>
3085
3086         * expr-evl.c: (expr_evaluate) Fix XDATE.JDAY formula.  Thanks to
3087         John Darrington <john@darrington.wattle.id.au> for reporting this
3088         bug.
3089
3090 Tue Nov 16 13:19:18 WST 2004 John Darrington <john@darrington.wattle.id.au>
3091
3092         * permissions.c command.def Added the PERMISSIONS command
3093
3094 Mon Nov 15 01:33:32 2004  Ben Pfaff  <blp@gnu.org>
3095
3096         * q2c.c: (dump_header) Don't try to emit #includes at very top of
3097         output file because that will precede #include <config.h>, which
3098         is bad.
3099         (main) Add needed headers to /* (header) */ code.
3100
3101 Mon Nov 15 01:21:36 2004  Ben Pfaff  <blp@gnu.org>
3102
3103         Instead of making system or portable file readers responsible for
3104         dropping and reordering variables, make them read full cases and
3105         let the caller take care of any changes.
3106
3107         * get.c: New "case map" structure to handle this.  Use for GET,
3108         IMPORT, MATCH FILES.  Essentially rewrite the whole file.
3109
3110         * pfm-read.c: (pfm_read_case) Read into provided case.  Signature
3111         changed appropriately.
3112
3113         * sfm-read.c: (sfm_read_case) Ditto.
3114
3115 Mon Nov 15 00:47:45 2004  Ben Pfaff  <blp@gnu.org>
3116
3117         Decided that case_serialize() and case_unserialize() were too
3118         abstract.  Also we need a couple more functions to avoid excessive
3119         copying for data in/out fast paths.
3120
3121         * case.c: (case_serial_size) Removed.
3122         (case_serialize) Rename case_to_values() and make its argument
3123         explicitly an array of union values.
3124         (case_unserialize) Rename case_from_values() and make its argument
3125         explicitly an array of union values.
3126         (case_data_all) New function.
3127         (case_data_all_rw) New function.
3128
3129         * casefile.c: (struct casefile) Change buffer from array of
3130         unsigned char to array of union value for better accuracy.
3131         Redefine buffer_used and buffer_size in terms of values, not
3132         bytes.  Remove case_size because it is now redundant with
3133         value_cnt.  Fix up all references to these members.
3134
3135 Mon Nov 15 00:45:46 2004  Ben Pfaff  <blp@gnu.org>
3136
3137         * barchart.c: (struct subcat) Make `label' member const to silence
3138         GCC warning with -Wwrite-strings.
3139
3140         * cartesian.c: (struct dataset) Ditto.
3141
3142         * case.c: Don't re-define NDEBUG if already defined.
3143         Add lots of comments.
3144
3145         * str.c: Fix includes.
3146
3147         * crosstabs.q: Fix includes.
3148
3149         * examine.q: Fix includes.  Fix GCC warning about unused
3150         variables.
3151         
3152         * frequencies.q: (stat macro) Removed and replaced where used by
3153         its expansion.
3154
3155         * list.q: Fix includes.
3156
3157         * oneway.q: Fix includes.
3158
3159         * piechart.c: Fix includes.  Only define M_PI if not already
3160         defined.
3161
3162         * sfm-read.c: (bswap) New function.
3163         (bswap_int32) Write in terms of bswap.
3164         (bswap_flt64) Ditto.
3165
3166         * str.c: (ds_data) Add external definition here, needed because
3167         str.h has only an `extern inline' version.
3168
3169         * value-labels.c: Fix includes.
3170
3171 Mon Nov 15 00:40:55 2004  Ben Pfaff  <blp@gnu.org>
3172
3173         Instead of providing a system or portable file writer with a raw
3174         case in the format needed for output, provide it with a regular
3175         case.  The writer takes care of any needed translation.
3176
3177         * aggregate.c: Adopt new scheme for AGGREGATE.
3178         (struct agr_proc) sfm_agr_case member removed.
3179         (write_case_to_sfm) Removed because the new interface is easier to
3180         use.
3181
3182         * get.c: Adopt new scheme for SAVE, XSAVE, EXPORT.
3183
3184         * pfm-write.c: Implement new scheme.
3185
3186         * sfm-write.c: Ditto.
3187
3188 Mon Nov 15 00:32:24 2004  Ben Pfaff  <blp@gnu.org>
3189
3190         Instead of treating `struct file_handle' as a class to subclass
3191         into data files, system files, and portable files, instead use it
3192         as a helper that coordinates access.  Now it is opaque, too.
3193
3194         This means that most references to a struct file_handle are now
3195         changed into references to one of struct dfm_reader, struct
3196         dfm_writer, struct sfm_reader, struct sfm_writer, struct
3197         pfm_reader, or struct pfm_writer, according to what's being read
3198         or written.
3199
3200         Most related changes are only worth summarizing briefly.
3201
3202         * dictionary.c: (dict_clear) Destroy aux data in deleted
3203         variables.
3204         (dict_clear_aux) New function.
3205         (dict_create_var) Initialize aux, aux_dtor.
3206         (dict_delete_var) Destroy aux data in deleted variable.
3207
3208         * file-handle.h: (struct fh_ext_class) Removed.
3209         (struct file_handle) Removed.
3210         (fh_init_files) Removed.
3211
3212         * file-handle.q: Changed references to a handle's `private' member
3213         to direct references.
3214         (struct private_file_handle) Renamed file_handle.
3215         Add next, open_cnt, type, open_mode, aux members.
3216         (struct file_handle_list) Removed.
3217         (extern var inline_file) Removed.
3218         (static var file_handles) Changed from file_handle_list * to
3219         file_handle *.
3220         (create_file_handle) Initialize new members.
3221         (fh_close_handle) Removed.
3222         (mode_name) New function.
3223         (fh_open) New function.
3224         (fh_close) New function.
3225         (fh_parse_file_handle) Renamed fh_parse().
3226
3227         * glob.c: (init_glob) Remove fh_init_files() call.
3228         
3229         * aggregate.c: use sfm_writer.
3230         (create_sysfile) Removed because the new interface is simpler.
3231         
3232         * apply-dict.c: Use sfm_reader.
3233
3234         * data-list.c: Use dfm_reader.
3235
3236         * file-type.c: Use dfm_reader.
3237
3238         * get.c: Use sfm_reader, sfm_writer, pfm_reader, pfm_writer.
3239
3240         * inpt-pgm.c: Use dfm_reader.
3241
3242         * print.c: Use dfm_writer.
3243
3244         * sysfile-info: Use sfm_reader.
3245
3246         * dfm-read.c: Adopt new file handle infrastructure.
3247
3248         * dfm-write.c: Ditto.
3249
3250         * pfm-read.c: Ditto.
3251         
3252         * pfm-write.c: Ditto.
3253
3254         * sfm-read.c: Ditto.
3255
3256         * sfm-write.c: Ditto.
3257         
3258 Mon Nov 15 00:31:44 2004  Ben Pfaff  <blp@gnu.org>
3259
3260         Break dictionary functions into separate header file.
3261
3262         * dictionary.h: New file.
3263
3264         * var.h: Moved dict_*() functions to dictionary.h.
3265
3266 Mon Nov 15 00:30:33 2004  Ben Pfaff  <blp@gnu.org>
3267
3268         Get rid of procedure-specific union in struct variable, using
3269         instead a void * pointer and a destructor function.
3270
3271         Most related changes are only worth brief summaries.
3272
3273         * crosstabs.q: Fix includes.  Use new struct var_range in lieu of
3274         old p.crs member in struct variable.
3275         
3276         * frequencies.q: Fix includes.  Use new struct var_freqs in lieu
3277         of old p.frq member in struct variable.
3278
3279         * histogram.c: (draw_histogram) Takes new freq_tab arg because
3280         it's no longer possible to grab this from var->p.frq.
3281
3282         * piechart.c: (draw_piechart) Ditto.
3283
3284         * group.c: (group_proc_get) New function.
3285
3286         * levene.c: Use group_proc_get() in lieu of old p.grp_data member
3287         in struct variable.
3288
3289         * oneway.q: Ditto.
3290
3291         * t-test.q: Ditto.
3292
3293         * main.c: (execute_command) Clear aux data in default_dict after
3294         each command.  (It's debatable whether this should be done.)
3295
3296         * matrix-data.c: Use new struct mxd_var in lieu of old p.mxd
3297         member in struct variable.
3298
3299         * means.q: Get rid of integer mode, which is not included in
3300         recent SPSS and was the only code that wanted per-variable private
3301         data.
3302
3303         * var.h: (struct crosstab_proc) Removed.
3304         (struct frequencies_proc) Removed.
3305         (struct list_proc) Removed.
3306         (struct get_proc) Removed.
3307         (struct means_proc) Removed.
3308         (struct matrix_data_proc) Removed.
3309         (struct match_files_proc) Removed.
3310         (lots of enums) Removed.
3311         (struct variable) Removed members `p', `get'.  Add member
3312         `aux_dtor'.
3313
3314         * vars-atr.c: (var_attach_aux) New function.
3315         (var_detach_aux) New function.
3316         (var_clear_aux) New function.
3317         (var_dtor_free) New function.
3318         (discard_variables) Use NULL instead of inline_file.
3319
3320 Fri Nov 12 10:07:11 WST 2004 John Darrington <john@darrington.wattle.id.au>
3321
3322         * value-labs.c  Fixed the implmentation of value_to_string, so 
3323         that it properly handles alpha values.
3324
3325         * oneway.q  Changed instances where labels were being probed manually, 
3326         to use the canonical {var,value}_to_string functions
3327
3328 Thu Nov 11 21:01:31 WST 2004 John Darrington <john@darrington.wattle.id.au>
3329
3330         * examine.q cartesian.c chart.[ch]   Added normal and detrended normal
3331         plots.  Changed the API of the cartesian plot to be a much lower level
3332         thing.
3333
3334 Sun Nov  7 17:25:04 WST 2004 John Darrington <john@darrington.wattle.id.au>
3335
3336         * examine.q Added some of the parametric calculations
3337
3338         * factor_stats.[ch]  Created
3339         
3340 Sat Nov  6 21:24:31 WST 2004 John Darrington <john@darrington.wattle.id.au>
3341
3342         * examine.q  Changed the definition of factors to be a composite, and
3343         dealt with the consequences.
3344
3345 Sat Nov  6 20:40:38 WST 2004 John Darrington <john@darrington.wattle.id.au>
3346
3347         * examine.q Fixed problem where examine wasn't dealing properly with 
3348         splits
3349
3350 Sat Nov  6 14:49:47 WST 2004 John Darrington <john@darrington.wattle.id.au>
3351
3352         * oneway.q Fixed problem where oneway wasn't dealing properly with 
3353         splits
3354
3355 Thu Nov  4 11:09:01 WST 2004 John Darrington <john@darrington.wattle.id.au>
3356
3357         * q2c.c examine.q  Fixed a bug (feature?) whereby arrays in the
3358         command which had settings didn't get the appropriate code
3359         generated.
3360
3361         * val.h value-labels.[ch] var-labs.c Added v*to_string functions
3362         to convert variables/values to strings.
3363
3364         * examine.q  Added framework for the EXAMINE command.
3365
3366 Mon Nov  1 12:46:17 WST 2004 John Darrington <john@darrington.wattle.id.au>
3367
3368         * q2c.c frequencies.q set.q t-test.q  Fixed the q2c parsing of DBL 
3369         subcommand types.  Changed frequencies.q to use it rather then the 
3370         custom parser.  Dealt with the consequences.  Added a test for NTILES
3371         subcommand of frequencies.
3372
3373 Sat Oct 30 09:16:29 WST 2004 John Darrington <john@darrington.wattle.id.au>
3374
3375         * oneway.q   Fixed up the behaviour when given missing values
3376
3377         * levene.c oneway.q Fixed a buglet with the levene statistic and
3378         incorporated the levene test into the oneway command.
3379
3380         * group.h  t-test.q  Moved the CMP_EQ and CMP_LE symbols out of 
3381         global scope, since they're only relevant to T-TEST
3382
3383 Fri Oct 29 17:39:03 WST 2004 John Darrington <john@darrington.wattle.id.au>
3384
3385         * group.c group.h group_proc.h levene.c oneway.q t-test.q
3386
3387         Made the t-test more consistent
3388         with the way it handles groups.  That is, it now uses a hash instead
3389         of an array of 2.  Also, made the levene.c file independent of the 
3390         implementation of the t-test.  So now levene should be fine for both
3391         t-test and anova.
3392
3393         * Added an oneway.q file for one way anova
3394
3395 Wed Jun  2 22:08:02 2004  Ben Pfaff  <blp@gnu.org>
3396
3397         * descript.c: (cmd_descriptives) Remove harmless but bogus test in
3398         STATISTICS parsing.
3399
3400 Mon May 31 20:45:24 2004  Ben Pfaff  <blp@gnu.org>
3401
3402         Fix memory leaks.
3403
3404         * data-list.c: (cmd_data_list) Free dls->delims on lossage.
3405         (data_list_trns_free) Free dls->delims.
3406
3407         * t-test.q: (tts_custom_pairs) Free vars.
3408         (ssbox_one_sample_init) Fix tab_vline() argument.
3409         (ssbox_independent_samples_init) Ditto.
3410         (trbox_paired_init) Ditto.
3411         (trbox_one_sample_init) Ditto.
3412
3413 Mon May 31 17:19:27 2004  Ben Pfaff  <blp@gnu.org>
3414
3415         Generalize casefiles to the extent that we can use them for
3416         sorting and other kinds of data transformations.  Change cases to
3417         be copy-on-write to improve memory efficiency in common cases.
3418         Every access to a member of a `struct ccase' was changed to be a
3419         call to a case_*() function, especially case_data(), case_num(),
3420         case_str(), or case_data_rw().  Many instances of a local variable
3421         named "case_num" were changed to "case_idx" as a consequence.
3422         Many `struct ccase *' were changed to actual `struct ccase'
3423         because of copying semantics of cases.  In several places there
3424         was a choice between updating debug code to work with the new ADTs
3425         or just deleting it because it was useless; I chose to delete it.
3426  
3427         * Makefile.am: (pspp_SOURCES) Add case.c, case.h.
3428
3429         * case.c: New file.
3430
3431         * case.h: New file.
3432
3433         * aggregate.c: (struct agr_proc) Change type of `sort' to
3434         sort_criteria *.  Add `break_vars', `break_var_cnt' members.
3435         Rename `vars' to `agr_vars', all references updated.  Change
3436         `agr_case' to type `struct ccase'.
3437         (cmd_aggregate) Deal with new members.  Use case_create(),
3438         sort_active_file_in_place(), sort_active_file_to_casefile().
3439         (agr_destroy) Deal with new members.
3440         (aggregate_single_case) Ditto.
3441         (dump_aggregate_info) Ditto.
3442         (initialize_aggregate_info) Ditto.
3443         (agr_to_active_file) Ditto.
3444         (presorted_agr_to_sysfile) Ditto.
3445         (sort_agr_to_sysfile) Removed.
3446
3447         * alloc.c: (out_of_memory) Make non-static.
3448
3449         * alloc.h: Prototype out_of_memory().
3450
3451         * casefile.c: Switched from a linked list in-memory representation
3452         to a two-level array-style representation.  The linked list was
3453         appropriate when we could stick a header onto cases, but that's no
3454         longer the case.  Also, the two-level array will allow for random
3455         in-memory access in case that's ever wanted.  Also added the
3456         concept of a `destructive casereader', one that destroys cases in
3457         the underlying casefile as they are read out.
3458         (macro CASES_PER_BLOCK) New macro.
3459         (struct casefile) New members `value_cnt', `case_list_size',
3460         `case_acct_size', `being_destroyed', `cases'.  Removed `head',
3461         `tail'.
3462         (struct casereader) Removed `cur'.  Added `destructive', `c'.
3463         (global var casefiles) Made static.
3464         (static var case_bytes) New var.
3465         (casefile_create) Takes a value count, not a case size in bytes,
3466         to conform to the case interface.  All callers updated.  Deal with
3467         new and removed members.
3468         (casefile_destroy) Deal with new and removed members.
3469         (casefile_sleep) New function.
3470         (casefile_get_case_size) Removed.
3471         (casefile_get_value_cnt) New function.
3472         (casefile_append) Rewritten to deal with new and removed members.
3473         (casefile_append_xfer) New function.
3474         (write_case_to_disk) Use case_serialize().
3475         (call_posix_fadvise) Removed because posix_fadvise64 segfaults.
3476         Couldn't figure out why.
3477         (casefile_to_disk) Don't call call_posix_fadvise.  Rewritten to
3478         deal with new and removed members.
3479         (merge) Removed.
3480         (merge_sort) Removed.
3481         (casefile_sort) Removed.
3482         (casefile_get_reader) Deal with new and removed members.
3483         (casefile_get_destructive_reader) New function.
3484         (reader_open_file) Make code more readable.  Create case for
3485         reader.
3486         (casereader_get_casefile) New function.
3487         (casereader_read) Deal with new and removed members.  Now returns
3488         a copy of the case, so that the caller is responsible for
3489         destroying the returned case.
3490         (casereader_read_xfer) New function.
3491         (casereader_destroy) Destroy reader's case.
3492         (test_casefile) Second arg is now a value count, all callers
3493         updated.  Now tests destructive readers too.
3494         (get_random_case) Deal with new case ADT.
3495         (write_random_case) Ditto.
3496         (read_and_verify_random_case) Ditto.
3497
3498         * crosstabs.q: Remove debug code.
3499
3500         * descript.q: (calc_descriptives) Deal with new case, casefile
3501         ADTs.
3502
3503         * dfm.c: (cmd_begin_data) There's no storage_source_class anymore.
3504
3505         * do-if.c: Remove unneeded header inclusion.
3506
3507         * expr-prs.c: Remove debug code.
3508
3509         * exprP.h: Remove debug code.
3510
3511         * flip.c: (flip_file) Use fseeko() if available.
3512
3513         * formats.c: Remove debug code.
3514
3515         * get.c: Remove debug code.
3516         (struct mtf_file) Change `input' from `union value *' to `struct
3517         ccase', all references updated.
3518
3519         * levene.c: (levene) Deal with new case, casefile ADTs.
3520
3521         * list.q: Remove debug code.
3522
3523         * loop.c: Remove debug code.
3524         
3525         * matrix-data.c: Remove debug code.
3526
3527         * means.q: Remove debug code.
3528
3529         * mis-val.c: Remove debug code.
3530
3531         * pfm-read.c: Remove debug code.
3532         (pfm_read_code) Change second arg from `union value *' to `struct
3533         ccase *', all references updated.
3534
3535         * recode.c: (string_to_long) Make first arg const.
3536         (convert_to_double) Ditto.
3537
3538         * repeat.c: Remove debug code.
3539
3540         * sample.c: Remove debug code.
3541
3542         * sfm-read.c: Remove debug code.
3543         (sfm_read_case) Change second arg from `union value *' to `struct
3544         ccase *'.
3545
3546         * sort.c: Redone in terms of casefiles.
3547         (enum sort_direction) Moved here from sort.h.
3548         (struct sort_criterion) New structure.
3549         (struct sort_criteria) New structure.
3550         (cmd_sort_cases) Rewritten.
3551         (prepare_to_sort_active_file) New function.
3552         (sort_active_file_in_place) New function.
3553         (sort_active_file_to_casefile) New function.
3554         (parse_sort) Renamed sort_parse_criteria(), rewritten & interface
3555         changed, all callers updated.
3556         (destroy_sort_cases_pgm) Renamed sort_destroy_criteria(),
3557         rewritten & interface changed, all callers updated.
3558         (sort_cases) Renamed sort_execute(), rewritten & interface
3559         changed, all callers updated.
3560         (struct internal_sort) Removed.
3561         (do_internal_sort) Rewritten, interface changed.
3562         (destroy_internal_sort) Removed.
3563         (compare_case_dblptrs) Use sort_criteria instead of sort_case_pgm.
3564         (struct initial_run) Removed; an initial run is now just a
3565         casefile.
3566         (compare_initial_runs) Rewritten.
3567         (struct external_sort) Changed almost completely.
3568         (do_external_sort) Rewritten, interface changed.
3569         (destroy_external_sort) Rewritten.
3570         [HAVE_MKDTEMP] (make_temp_dir) Removed.
3571         [!HAVE_MKDTEMP] (do_mkdir) Removed.
3572         [!HAVE_MKDTEMP] (make_temp_dir) Removed.
3573         (init_external_sort) Removed.
3574         (simulate_error) Removed.
3575         (rmdir_temp_dir) Removed.
3576         (get_temp_file_name) Removed.
3577         (open_temp_file) Removed.
3578         (close_temp_file) Removed.
3579         (remove_temp_file) Removed.
3580         (write_temp_file) Removed.
3581         (read_temp_file) Removed.
3582         (struct record_run) Change `record' from `struct case_lit *' to
3583         `struct ccase'.
3584         (struct initial_run_state) Remove `idx_to_fv', `free_list',
3585         `file_idx', `output_file'.  Add `run', casefile'.  Change
3586         `last_output' from `struct case_list *' to `struct ccase'.
3587         (write_initial_runs) Change interface, rewrite.
3588         (sort_sink_write) Renamed process_case(), changed interfaced,
3589         rewrote.
3590         (destroy_initial_run_state) Rewritten.
3591         (allocate_cases) Rewritten.
3592         (compare_record) Interface changed, rewritten.
3593         (start_run) Rewritten.
3594         (end_run) Rewritten.
3595         (output_record) Rewritten.
3596         (grab_case) Removed.
3597         (release_case) Removed.
3598         (struct merge_case) Change `cases' from double pointer to single
3599         pointer.
3600         (merge) Deal with new case and casefile ADTs.
3601         (struct run) Removed.
3602         (merge_once) Rewritten, interface changed.
3603         (fill_run_buffer) Removed.
3604         (sort_sink_make_source) Removed.
3605         (sort_sink_class) Removed.
3606         (struct sort_source_aux) Removed.
3607         (sort_source_read_helper) Removed.
3608         (sort_source_read) Removed.
3609         (read_sort_output) Removed.
3610         (read_internal_sort_output) Removed.
3611         (read_external_sort_output) Removed.
3612         (sort_source_destroy) Removed.
3613         (sort_source_class) Removed.
3614
3615         * sort.h: (struct sort_cases_pgm) Removed.
3616         (enum sort_direction) Moved to sort.c.
3617
3618         * t-test.q: (calculate) Deal with new case, casefile ADTs.
3619
3620         * tab.c: Remove debug code.
3621
3622         * var-labs.c: Remove debug code.
3623
3624         * var.h: (struct ccase) Removed.
3625         (struct case_list) Removed.
3626
3627         * vars-atr.c: (discard_variables) Use free_case_source().
3628
3629         * vars-prs.c: (parse_vs_variable) Make arg const.
3630         (parse_dict_variable) Ditto.
3631         (parse_variables) Make struct dictionary * arg const.
3632         (parse_var_set_vars) Make struct var_set * arg const.
3633         (struct var_set) Add const to some of the function pointers' args.
3634         (var_set_get_cnt) Make arg const.
3635         (var_set_get_var) Make first arg const.
3636         (var_set_lookup_var) Make first arg const.
3637         (dict_var_set_get_cnt) Make arg const.
3638         (dict_var_set_get_var) Make first arg const.
3639         (dict_var_set_lookup_var) Make first arg const.
3640         (var_set_create_from_dict) Make arg const.  Add cast to aux
3641         assignment.
3642         (struct array_var_set) Add const to var member.
3643         (array_var_set_get_cnt) Make arg const.
3644         (array_var_set_get_var) Make first arg const.
3645         (array_var_set_lookup_var) Make first arg const.
3646         (var_set_create_from_array) Make first arg const.  Insert cast.
3647
3648         * vfm.c: (struct write_case_data) Change trns_case, sink_case
3649         members from `struct ccase *' to `struct ccase'.
3650         (static var lag_queue) Change from double to single pointer.
3651         (procedure) Optimize trivial case.
3652         (internal_procedure) Deal with changed case, case_source ADTs.
3653         (create_trns_case) Changed interface, rewrote.
3654         (open_active_interface) Initialize modified lag queue.
3655         (write_case) Deal with changed case ADT.
3656         (lag_case) Deal with modified lag queue.
3657         (close_active_file) Destroy modified lag queue.
3658         Deal with changed case_source, case_sink ADTs.
3659         (destroy_storage_stream_info) Make null arg into no-op.
3660         (storage_sink_make_source) Set aux in created source.
3661         (storage_source_read) Deal with changed case, casefile ADTs.
3662         (storage_source_create) New function.
3663         (lagged_case) Rewrite.
3664         (free_case_source) New function.
3665         (free_case_sink) Rewrite.
3666         (struct split_aux_data) Changed prev_case from `struct ccase *' to
3667         `struct ccase'.
3668         (procedure_with_splits) Deal with changed prev_case.
3669         (procedure_with_splits_callback) Ditto.
3670         (multipass_split_aux_data) Changed prev_case from `struct ccase *' to
3671         `struct ccase'.
3672         (multipass_procedure_with_splits) Deal with changed prev_case.
3673         (multipass_split_callback) Ditto.
3674         
3675         
3676 Mon May 31 17:19:06 2004  Ben Pfaff  <blp@gnu.org>
3677
3678         The workspace idea didn't work out.
3679
3680         * Makefile.am: (pspp_SOURCES) Remove workspace.c, workspace.h.
3681         
3682         * workspace.c: Removed.
3683
3684         * workspace.h: Removed.
3685
3686 Sun May 30 18:35:19 2004  Ben Pfaff  <blp@gnu.org>
3687
3688         Fully implement arbitrary delimiters on DATA LIST, extending the
3689         half implementation that was already there.
3690
3691         * data-list.c: (struct data_list_pgm) Remove `delim', add
3692         `delims', `delim_cnt'.
3693         (cmd_data_list) Initialize new members.  Parse delimiters and
3694         clean up code a bit.
3695         (cut_field) Extract fields with arbitrary delimiters.  Also, fix
3696         handling of leading commas.
3697         (read_from_data_list_fixed) Expand tabs.  Adapt to new DFM
3698         interfaces.
3699         (read_from_data_list_free) Adapt to new DFM interfaces.
3700         (read_from_data_list_list) Ditto.
3701         (repeating_data_trns_proc) Ditto.
3702
3703         * dfm.c: Split up reader and writer into separate code, because
3704         they do different things.  Use struct string instead of explicit
3705         allocation code, for clarity.
3706         (enum dfm_reader_flags) New enum.
3707         (struct dfm_fhuser_ext) Removed.
3708         (struct dfm_reader_ext) New.
3709         (get_reader) New function, used by just about all the reader
3710         functions.
3711         (dfm_close) Removed.
3712         (close_reader) New function.
3713         (dfm_open_for_reading) Rewrite initialization of dfm_fhuser_ext.
3714         (dfm_open_for_writing) Ditto.
3715         (macro force_line_buffer_expansion) Removed.
3716         (count_tabs) Removed.
3717         (tabs_to_spaces) Removed.
3718         (read_record) Deal with new dfm_reader_ext.  Use struct string
3719         functions.  Don't convert tabs to spaces.
3720         (dfm_eof) New function.
3721         (dfm_get_record) Changed interface, rewrote.
3722         (dfm_expand_tabs) New function.
3723         (dfm_fwd_record) Renamed dfm_forward_record(), updated to new
3724         dfm_reader_ext, rewritten.
3725         (dfm_bkwd_record) Renamed dfm_reread_record(), updated to new
3726         dfm_reader_ext, rewritten.
3727         (dfm_set_record) Removed in favor of dfm_forward_columns().
3728         (dfm_forward_columns) New function.
3729         (dfm_get_cur_col) Renamed dfm_column_start, updated to new
3730         dfm_reader_ext, rewritten.
3731         (static var dfm_r_class) Use close_reader for the destructor.
3732         (struct dfm_writer_ext) New.
3733         (dfm_put_record) Updated to new dfm_writer_ext, rewritten.  Uses
3734         bounce buffer now instead of local allocation.
3735         (close_writer) New function.
3736         (static var dfm_writer_ext) Use close_writer for destructor.
3737         (cmd_begin_data) Adapt to new dfm_reader_ext.
3738
3739         * file-handle.q: Add support for per-file tab width.
3740         (struct private_file_handle) Add tab_width member.
3741         (q2c specifications) Add tabwidth subcommand.
3742         (cmd_file_handle) Put parsed tab width into private_file_handle.
3743         (create_file_handle) Set default tab width.
3744         (handle_get_tab_width) New function.
3745
3746         * file-type.c: (file_type_source_read) Adapt to new DFM interface.
3747
3748         * inpt-pgm.c: (reread_trns_proc) Ditto.
3749
3750         * matrix-data.c: (context) Ditto.
3751         (another_token) Ditto.
3752         (mget_token) Ditto.
3753         (force_eol) Ditto.
3754
3755 Sun May 30 18:33:59 2004  Ben Pfaff  <blp@gnu.org>
3756
3757         * casefile.c: (casefile_destroy) Fix memory leak by freeing
3758         cf->filename.
3759         (casereader_destroy) Don't close file descriptor -1.
3760
3761         * recode.c: (cmd_recode) Fix memory leak.
3762
3763         * set.q: (q2c specifications) Fix typo in user message.
3764
3765         * str.c: (st_bare_pad_len_copy) Change memcpy to memmove to avoid
3766         undefined behavior for overlapping arguments.
3767
3768 Sun May 30 18:31:48 2004  Ben Pfaff  <blp@gnu.org>
3769
3770         * casefile.c: valgrind doesn't implement posix_fadvise() yet, so
3771         don't call it when we're running under valgrind.
3772         (call_posix_fadvise) New function.
3773         (casefile_to_disk) Use call_posix_fadvise().
3774         (reader_open_file) Ditto.
3775         
3776 Sun May 30 18:20:12 2004  Ben Pfaff  <blp@gnu.org>
3777
3778         Update our string ADTs, struct string and struct len_string.  Get
3779         rid of pool support, which was largely unused.  Rename lots of
3780         functions to have more obvious or consistent names.
3781         
3782         * ascii.c: Get rid of ascii_pool.  It was only used for string
3783         allocations.
3784         (ascii_open_global) Don't create ascii_pool.
3785         (ascii_close_driver) Don't destroy ascii_pool.
3786         (ascii_postopen_driver) Don't use pool.
3787         (ascii_close_driver) Destroy strings manually.
3788
3789         * str.c: (ds_create) Remove pool argument, all references updated.
3790         (ds_init) Ditto.
3791         (ds_replace) Remove pool support, make more efficient when we
3792         don't need to reallocate.
3793         (ds_destroy) Remove pool support.
3794         (ds_rpad) New function.
3795         (ds_size) Renamed ds_capacity(), all references updated.
3796         (ds_value) Renamed ds_c_str(), all references updated.
3797         (ds_concat) Renamed ds_puts(), all references updated.
3798         (ds_concat_buffer) Renamed ds_concat(), all references updated.
3799         (ds_putchar) Renamed ds_putc(), all references updated.
3800         (ds_getline) Renamed ds_gets(), all references updated.
3801         (ls_create) Remove pool argument, all references updated.
3802         (ls_create_buffer) Ditto.
3803         (ls_destroy) Removed pool support.
3804         (ls_value) Renamed ls_c_str(), all references updated.
3805
3806         * str.h: (ls_length) [__GNUC__] Add inline version.
3807         (ls_c_str) [__GNUC__] Add inline version.
3808         (ls_end) [__GNUC__] Add inline version.
3809         (struct string) Remove pool member.  Rename `size' to `capacity',
3810         all references updated.
3811
3812         * tab.c: (text_format) Instead of using pool argument to
3813         ls_create_buffer(), call pool_register() on allocated data.
3814
3815 Mon Apr 26 22:40:07 2004  Ben Pfaff  <blp@gnu.org>
3816
3817         We're abusing the current ASCII driver by telling it to allocate a
3818         9999-line, 9999-character page in the tests.  This causes some
3819         systems to curl up and die because it allocates 20 MB of
3820         contiguous RAM.  This change alleviates at least part of the
3821         problem.  It is mostly a stop-gap until the new output system is
3822         ready.
3823         
3824         * ascii.c: (struct line) New structure.
3825         (struct ascii_driver_ext) Remove `page', `page_size', `line_len',
3826         `line_len_size', `n_output' members.  Add `lines', `lines_cap'.
3827         (ascii_preopen_driver) Initialize new members, not old ones.
3828         (ascii_close_driver) Destroy new members, not old ones.
3829         (ascii_open_page) Allocate new members, not old ones.
3830         (expand_line) Allocate room in line.
3831         (draw_line) Use new members.
3832         (ascii_line_horz) Ditto.
3833         (ascii_line_vert) Ditto.
3834         (ascii_line_intersection) Ditto.
3835         (text_draw) Ditto.
3836         (output_lines) Ditto.
3837         (ascii_close_page) Ditto.
3838
3839 Sun Apr 25 23:40:15 2004  Ben Pfaff  <blp@gnu.org>
3840
3841         * matrix.c: Dead code.  Removed.
3842
3843         * matrix.h: Dead code.  Removed.
3844
3845 Fri Apr 16 23:59:51 2004  Ben Pfaff  <blp@gnu.org>
3846
3847         Contrary to what I'd always understood, there is an efficient
3848         algorithm for deletion from a hash table populated via linear
3849         probing.  This change implements it.
3850         
3851         * hash.c: (hsh_rehash) Probe in increasing order.
3852         (hsh_probe) Ditto.
3853         (locate_matching_entry) Ditto.
3854         (hsh_delete) Use Knuth's Algorithm 6.4R for deletion.
3855
3856 Tue Apr 13 19:24:15 2004  Ben Pfaff  <blp@gnu.org>
3857
3858         * moments.c (calc_moments): Adjust calculation of kurtosis to
3859         avoid subtracting huge numbers from huge numbers, on Michael
3860         Kiefte's advice.
3861
3862 Sun Apr 11 14:22:12 2004  Ben Pfaff  <blp@gnu.org>
3863
3864         Rework moments routines for improved numerical stability based on
3865         Michael Kiefte's advice.  Any bugs or remaining numerical problems
3866         are still mine though.
3867
3868         There is now a struct moments1 for use with one-pass moments.  It
3869         uses a provisional means algorithm as an attempt to improve
3870         accuracy of higher moments.  The older struct moments now only
3871         handles two-pass moments.
3872         
3873         * aggregate.c: Use moments1 instead moments.
3874
3875         * descript.c: Revert previous change, which is no longer needed
3876         due to the moments revision.
3877
3878         * moments.c: (calc_moments) New function for calculating variance,
3879         skewness, kurtosis.
3880         (moments_pass_one) Only accumulate weights bigger than zero.
3881         (moments_calculate) Allow calculating the mean on pass one, others
3882         require pass two.  Implement in terms of calc_moments().
3883         (struct moments1) New structure.
3884         (init_moments1) New function.
3885         (moments1_clear) Ditto.
3886         (moments1_create) Ditto.
3887         (moments1_add) Ditto.
3888         (moments1_calculate) Ditto.
3889         (moments1_destroy) Ditto.
3890         (cmd_debug_moments) Deal with `struct moments' or `struct
3891         moments1' as requested by user.
3892
3893 Sun Apr 11 14:21:55 2004  Ben Pfaff  <blp@gnu.org>
3894
3895         * Makefile.am (pspp_SOURCES): Remove debug.c.
3896
3897         * debug.c: Removed.  It was empty anyway.
3898
3899 Fri Apr  9 20:04:49 2004  Ben Pfaff  <blp@gnu.org>
3900
3901         * descript.c (calc_descriptives): Fix assert failure when only
3902         MOMENT_MEAN is needed.
3903
3904 2004-04-09  Michael Kiefte  <mkiefte@dal.ca>
3905
3906         * descript.c: 
3907
3908         fixed problem with parsing in match_statistic() causing
3909         "DESCRIPTIVE STAT=MEAN." to barf.
3910
3911         "MEAN" is now default if "SORT" given without specification.
3912
3913         Fixed infinite loop with "DESCRIPT GIBBERISH=ALL."  Parsing is
3914         generally less forgiving of syntax errors: better to have it do
3915         nothing and type it in again then to not know what it actually did
3916         instead.  
3917
3918         z-score transformation now checks score for user-missing values
3919         and checks std_dev for SYSMIS.
3920
3921 2004-04-06  Michael Kiefte  <mkiefte@dal.ca>
3922
3923         * aggregate.c, crosstabs.q, descript.c, dictionary.c, frequencies.q, levene.c, t-test.q, var.h: 
3924         Changed dict_get_case_weight() to accept an additional int * flag
3925         to complain about system-missing, user-missing, zero, or negative
3926         weights and updated existing functions to pass int * to
3927         dict_get_case_weight().
3928
3929 2004-04-05  jmd  <jmd@gnu.org>
3930
3931         * main.c: Fixed configuration problems with gsl
3932
3933         * t-test.q: Fixed some problems encountered when compiling under Cygwin
3934
3935 2004-04-03  blp  <blp@gnu.org>
3936
3937         * lexer.c, ChangeLog:
3938         Fix infinite loop on comment at end of file, add test.
3939
3940 2004-04-03  jmd  <jmd@gnu.org>
3941
3942         * settings.h, var.h, ChangeLog, Makefile.am, cmdline.c, command.c, command.h, error.h, filename.c, frequencies.q, lexer.h, main.c, q2c.c, set.q:
3943         Fixed the calculation of percentiles and added --syntax and --algorithm options
3944
3945 Sat Apr  3 11:43:37 2004  Ben Pfaff  <blp@gnu.org>
3946
3947         * lexer.c: (lex_skip_comment) Handle end-of-file correctly (I
3948         hope).
3949
3950 Sat Apr  3 15:00:18 WST 2004 John Darrington <john@darrington.wattle.id.au>
3951
3952         * frequencies.q:  Fixed the calculation of percentiles
3953
3954         * Makefile.am:  Added the --ansi flag and dealt with the
3955         consequences.  Added some entries to PSPP_sources so that
3956         make distcheck would pass
3957
3958         * cmdline.c:   Added the --syntax and --algorithm options
3959
3960         * q2c.c:  Added an implicit /ALGORITHM subcommand to everything.
3961
3962 Fri Apr  2 11:25:22 WAST 2004 John Darrington <john@darrington.wattle.id.au>
3963
3964         * t-test.q, levene.c, levene.h  Converted t-test (incl levene) to 
3965         use the new multipass_split_... mechanism.
3966
3967 Wed Mar 31 22:36:22 2004  Ben Pfaff  <blp@gnu.org>
3968
3969         * frequencies.q: (calc_stats) Use moments data structure and
3970         calc_seskew(), calc_sekurt() functions.
3971
3972         * set.q main.c settings.h Added support for --syntax and --algorithm 
3973         options
3974
3975 Tue Mar 30 22:04:19 2004  Ben Pfaff  <blp@gnu.org>
3976
3977         * vfm.c: Had to get last call to multipass_split_output() inside
3978         open_active_file()/close_active_file() pairing, so introduce new
3979         function.
3980         (internal_procedure) Move procedure() code here, except for calls
3981         to open_active_file() and close_active_file().
3982         (procedure) Wrap open_active_file() and close_active_file() around
3983         internal_procedure().
3984         (multipass_procedure_with_splits) Wrap open_active_file() and
3985         close_active_file() around internal_procedure().
3986
3987 Tue Mar 30 22:01:57 2004  Ben Pfaff  <blp@gnu.org>
3988
3989         * descript.c: (cmd_descriptives) Free `vars' to avoid memory leak.
3990
3991 Mon Mar 29 16:26:40 2004  Ben Pfaff  <blp@gnu.org>
3992
3993         * debug.c: Removed.  Moved cmd_debug_evaluate() into expr-evl.c.
3994
3995         * expr-evl.c: (cmd_debug_evaluate) Moved here from debug.c.
3996
3997 Mon Mar 29 16:03:08 2004  Ben Pfaff  <blp@gnu.org>
3998
3999         * algorithm.c: By default turn off some of the more expensive
4000         assertions.
4001         (expensive_assert) New macro which expands to assert if
4002         EXTRA_CHECKS is defined, to nothing otherwise.
4003         (unique) Use expensive_assert().
4004         (binary_search) Ditto.
4005         (push_heap) Ditto.
4006         (pop_heap) Ditto.
4007         (make_heap) Ditto.
4008         (sort_heap) Ditto.
4009
4010         * command.c: (conflicting_3char_prefixes) Words that are the same
4011         don't cause conflicts when they are abbreviated to the first three
4012         letters.
4013
4014         * expr-evl.c: (CONCAT_func) Fix memory leak by incrementing struct
4015         nonterm_node's n earlier.
4016         (generic_str_func) Ditto.
4017         
4018 Mon Mar 29 15:32:17 2004  Ben Pfaff  <blp@gnu.org>
4019
4020         Add support for multipass procedures.  Rewrite DESCRIPTIVES to
4021         test multipass support, take advantage of new moments
4022         calculation, and to not be such crappy code.  Get rid of q2c
4023         processing for DESCRIPTIVES.
4024
4025         * vfm.c: (struct multipass_split_aux_data) New structure.
4026         (multipass_procedure_with_splits) New function.
4027         (multipass_split_callback) New function.
4028         (multipass_split_output) New function.
4029         * descript.q: Removed.
4030
4031         * descript.c: New file.
4032
4033         * var.h: Removed descriptives enums.
4034         (struct descriptives_proc) Removed.
4035         (struct variable) Removed p.dsc.
4036
4037         * Makefile.am: (q_sources_c) Remove descript.c.
4038         (q_sources_q) Removed descript.q.
4039         
4040 Mon Mar 29 15:31:55 2004  Ben Pfaff  <blp@gnu.org>
4041
4042         New manager for keeping track of used workspace.
4043         
4044         * workspace.c: New file.
4045
4046         * workspace.h: New file.
4047
4048         * Makefile.am: (pspp_SOURCES) Add workspace.c, workspace.h.
4049
4050         * sort.c: (do_internal_sort) Use workspace_malloc().
4051         (destroy_internal_sort) Use workspace_free().
4052
4053 Mon Mar 29 15:31:08 2004  Ben Pfaff  <blp@gnu.org>
4054
4055         New `struct casefile' for managing sets of cases.
4056
4057         * casefile.c: New file.
4058
4059         * casefile.h: New file.
4060
4061         * command.def: Add DEBUG CASEFILE command.
4062
4063         * Makefile.am: (pspp_SOURCES) Add casefile.c, casefile.h.
4064
4065         * sort.c: (sort_cases) Move logic for sending storage file to disk
4066         into do_external_sort().
4067         (struct internal_sort) Use an array of ccase pointers instead of a
4068         case_list.
4069         (do_internal_sort) Rewrite to handle casefiles.
4070         (compare_case_list) Removed.
4071         (compare_cases) New function.
4072         (compare_case_dblptrs) New function.
4073         (read_internal_sort_output) Deal with new struct internal_sort.
4074
4075         * vfm.c: (static var workspace_overflow) Removed.
4076         (struct storage_stream_info) Removed all the members.  Added
4077         struct casefile * member.
4078         (storage_sink_open) Use casefile.
4079         (open_storage_file) Removed.
4080         (write_storage_file) Removed.
4081         (storage_to_disk) Removed.
4082         (destroy_storage_stream_info) Use casefile.
4083         (storage_sink_write) Use casefile.
4084         (storage_sink_make_source) Use casefile.
4085         (storage_source_count) Use casefile.
4086         (storage_source_read) Use casefile.
4087         (storage_source_on_disk) Removed.
4088         (storage_source_get_cases) Removed.
4089         (storage_source_set_cases) Removed.
4090         (storage_source_get_casefile) New function.
4091         
4092 Mon Mar 29 15:30:09 2004  Ben Pfaff  <blp@gnu.org>
4093
4094         New `struct moments' for calculating moments.
4095
4096         * stats.c: Removed.
4097
4098         * stats.h: Removed.
4099
4100         * moments.c: New file.
4101
4102         * moments.h: New file.
4103
4104         * command.def: Add DEBUG MOMENTS command.
4105
4106         * Makefile.am: (pspp_SOURCES) Add moments.c, moments.h.  Remove
4107         stats.c, stats.h.
4108
4109         * aggregate.c: Modify AGGREGATE to use the new moments
4110         calculation, even if not in such a great way.
4111         (struct agr_var) Add `moments' member.
4112         (parse_aggregate_functions) Set `moments' member to null.
4113         (agr_destroy) Destroy `moments' member.
4114         (accumulate_aggregate_info) Use `moments' for standard deviation.
4115         (dump_aggregate_info) Ditto.
4116         (initialize_aggregate_info) Create or clear `moments'.
4117
4118         * misc.h: Add pow2(), pow3(), pow4() functions in place of sqr(),
4119         cube(), pow4() that were in stats.h.  All references updated.
4120
4121         * crosstabs.q: stats.h had chi-square significance functions.  Use
4122         GSL instead.
4123         (display_chisq) Use gsl_cdf_chisq_Q() instead of chisq_sig().
4124
4125         * expr-evl.c: (expr_evaluate) Use moments_of_values() for
4126         OP_CFVAR, OP_MEAN, OP_SD, OP_VARIANCE.
4127                 
4128 Fri Mar 26 14:21:23 2004  Ben Pfaff  <blp@gnu.org>
4129
4130         * dictionary.c: (dict_compact_values) Compacted values need to
4131         start off from 0.
4132
4133 Fri Mar 26 00:54:57 2004  Ben Pfaff  <blp@gnu.org>
4134
4135         * var-labs.c: (cmd_variable_labels) For compatibility, don't allow
4136         `/' at start.  Check return value of parse_variables() for error
4137         return.
4138
4139 Fri Mar 26 00:19:27 2004  Ben Pfaff  <blp@gnu.org>
4140
4141         Revamp expressions: make the code a little nicer, and fix bugs
4142         found in testing.
4143         
4144         * expr-evl.c: (expr_evaluate) Make expression argument const.
4145         Support OP_ADD, OP_SUB, OP_MUL, OP_DIV instead of OP_PLUS, OP_MUL.
4146         OP_POW is missing for arg 2 <= 0.  OP_LOG is natural log, not
4147         base-10 log.  Fix OP_ANY, OP_ANY_STRING, OP_RANGE, OP_RANGE_STRING
4148         off-by-ones.  Add OP_MAX_STRING, OP_MIN_STRING.  Fix OP_TIME_HMS,
4149         OP_DATE_WKYR boundary conditions.  Add OP_CTIME_DAYS,
4150         OP_CTIME_HOURS, OP_CTIME_MINUTES, OP_CTIME_DAYS, OP_CTIME_SECONDS.
4151         Support OP_INDEX_2, OP_INDEX_3, OP_RINDEX_2, OP_RINDEX_3 instead
4152         of OP_INDEX, OP_INDEX_OPT, OP_RINDEX, OP_RINDEX_OPT.  Merge
4153         OP_LPAD_OPT into OP_LPAD, OP_RPAD_OPT into OP_RPAD, OP_LTRIM_OPT
4154         into OP_LTRIM, OP_RTRIM_OPT into OP_RTRIM, OP_NUMBER_OPT into
4155         OP_NUMBER.  Fix OP_RTRIM fragility.  Support OP_SUBSTR_2,
4156         OP_SUBSTR_3 instead of OP_SUBSTR, OP_SUBSTR_OPT.  Remove OP_INV.
4157         Simplify OP_SYSMIS.  Remove OP_STR_MIS.
4158
4159         * expr-opt.c: (optimize_expression) Rewrite.
4160         (macro n0) Removed.
4161         (macro n1) Removed.
4162         (macro n2) Removed.
4163         (macro s0) Removed.
4164         (macro s0l) Removed.
4165         (macro s1) Removed.
4166         (macro s1l) Removed.
4167         (macro s2) Removed.
4168         (macro s2l) Removed.
4169         (macro s) Removed.
4170         (macro sl) Removed.
4171         (eq_num_con) New function.
4172         (optimize_tree) New function.
4173         (macro rnc) Removed.
4174         (macro frnc) Removed.
4175         (str_search) Add const to string params.
4176         (str_rsearch) Ditto.
4177         (evaluate_tree_no_missing) Renamed from evaluate_tree.  Add num[],
4178         str[], str_len[] locals to substitute for most of removed macros.
4179         Support OP_ADD, OP_SUB, OP_MUL, OP_DIV instead of OP_PLUS, OP_MUL.
4180         Removed support for missing values because we're never called with
4181         missing values.  Use set_number() or set_number_errno() instead of
4182         rnc or frnc.  Removed any stuff that caused trouble in testing.
4183         We can re-add it later if it really slows anything.  Fix some
4184         random problems.
4185         (evaluate_tree_with_missing) Not yet supported.  To be added later
4186         if it's important.
4187         (repl_num_con) Removed.
4188         (collapse_node) New function.
4189         (force_repl_num_con) Removed.
4190         (set_number) New function.
4191         (set_number_errno) New function.
4192         (repl_str_con) Removed.
4193         (set_string) New function.
4194         (yrmoda) Tighten boundary conditions.  Adopt 2030 cut-off for
4195         2-digit years.
4196         (dump_node) No special case for OP_AND, OP_OR.
4197
4198         * expr-prs.c: (expr_prs) Honor EXPR_NO_OPTIMIZE bit.  Rewrite.
4199         (expr_get_type) New function.
4200         (type_check) Rewrite.
4201         (type_coercion) New function.
4202         (struct operator) New structure.
4203         (match_operator New function.
4204         (parse_binary_operators) New function.
4205         (parse_inverting_unary_operator) New function.
4206         (parse_or) Rewritten.
4207         (parse_and) Rewritten.
4208         (parse_not) Rewritten.
4209         (parse_rel) Rewritten.
4210         (parse_add) Rewritten.
4211         (parse_mul) Rewritten.
4212         (parse_neg) Rewritten.
4213         (parse_exp) Rewritten.
4214         (parse_sysvar) Add $TRUE, $FALSE system variables.
4215         Get $LENGTH, $WIDTH from get_viewlength(), get_viewwidth().
4216         (parse_primary) Use allocate_var_node(), allocate_num_con(),
4217         allocate_str_con().
4218         (struct function) Remove desc, change `func' prototype.
4219         (unary_func) Remove special cases.
4220         (MISSING_func) Reduce to unary_func() that just returns a boolean.
4221         (SYSMIS_func) Handle SYSMIS((x)) like SYSMIS(x).
4222         (VALUE_func) Use allocate_var_node().
4223         (nary_num_func) Allow MIN and MAX for strings.
4224         Use allocate_var_node().  Properly clean up.
4225         Fix return type.
4226         (generic_str_func) Use local table instead of removed `desc'
4227         member.  Mostly rewrite.
4228         (get_num_args) Revise error message.
4229         (parse_function) Return EXPR_ERROR, not 0 on error.
4230         (macro op) Removed.
4231         (macro varies) Removed.
4232         (ops[]) Use expr.def.
4233         (free_node) Do nothing if node is null.
4234         (allocate_num_con) New function.
4235         (allocate_str_con) New function.
4236         (allocate_var_node) New function.
4237         (allocate_binary_nonterminal) New function.
4238         (append_nonterminal_arg) Removed.
4239         (static var func_tab[]) Revised.
4240         (expr_debug_print_postfix) Make parameter const.
4241         Use printf() instead of debug_printf().
4242
4243         * expr.def: New file.
4244         
4245         * expr.h: Change PXP_* to EXPR_*, all references updated.  Also
4246         use named enum instead of unnamed, all references updated.  Add
4247         EXPR_ANY, EXPR_NO_OPTIMIZE.
4248
4249         * exprP.h: Remove EX_*.  Add DEFINE_OPERATOR.  Use expr.def
4250         instead of defining OP_* directly.
4251         (macro IS_TERMINAL) New macro.
4252         (macro IS_NONTERMINAL) New macro.
4253         (enum OP_NO_FLAGS) New.
4254         
4255 Fri Mar 26 00:18:01 2004  Ben Pfaff  <blp@gnu.org>
4256
4257         * error.c: (err_assert_fail) msg variable needs to be non-const.
4258
4259 Fri Mar 26 00:17:24 2004  Ben Pfaff  <blp@gnu.org>
4260
4261         * debug.c: (cmd_debug_evaluate) Rewrite.
4262
4263 Fri Mar 26 00:15:13 2004  Ben Pfaff  <blp@gnu.org>
4264
4265         Fix some CROSSTABS bit rot stupidity.
4266
4267         * crosstabs.q: Reorder the CELLS subcommands for compatibility.
4268         (internal_cmd_crosstabs) Initializes cells[] correctly.
4269         (float_M_suffix) Rename format_cell_entry(), change prototype,
4270         rewrite.
4271         (display_crosstabulation) Fix cell formatting.
4272
4273 Fri Mar 26 00:14:09 2004  Ben Pfaff  <blp@gnu.org>
4274
4275         Make lex_rest_of_line(), lex_entire_end() not discard lines.  Have
4276         to call lex_discard_line() to do that.
4277
4278         * command.c: (run_command) Call lex_discard_line() after
4279         lex_rest_of_line().
4280
4281         * lexer.c: (lex_entire_end) Change behavior.
4282         (lex_rest_of_line) Change behavior.  Return const char *.
4283         (lex_discard_line) Don't clear getl_buf, don't emit message.
4284
4285         * main.c: (handle_error) Emit message here.
4286
4287         * repeat.c: (internal_cmd_do_repeat) Use lex_discard_line()
4288         instead of lex_entire_line().
4289
4290         * str.c: (mm_find_reverse) Make length params size_t.  Rewrite.
4291
4292         * title.c: (get_title) Call lex_discard_line() after
4293         lex_rest_of_line().
4294         (cmd_file_label) Ditto.
4295         (cmd_document) Deal with const char * return value.
4296
4297 Fri Mar 26 00:10:16 2004  Ben Pfaff  <blp@gnu.org>
4298
4299         Removed REMARK command.
4300
4301         * command.c: (extract_prefix) Removed.
4302         (output_line) Removed.
4303         (cmd_remark) Removed.
4304
4305         * command.def: Remove REMARK.
4306
4307 Fri Mar 26 00:08:38 2004  Ben Pfaff  <blp@gnu.org>
4308
4309         Added abort() after lots of assert(0) invocations to avoid some
4310         compiler warnings.  We really need a NOT_REACHED macro.
4311
4312 Tue Mar 23 08:00:42 WAST 2004 John Darrington <john@darrington.wattle.id.au>
4313
4314         * sort.c: Added missing call to temp_file_close.  Changed error 
4315         messages to warnings.
4316
4317         * set.q: Improved setting of set_view{length,width} to be more tolerant
4318         of buggy OSes.
4319
4320 Sun Mar 21 10:11:14 WST 2004 John Darrington <john@darrington.wattle.id.au>
4321
4322         * val-labs.c: Fixed a bug where PSPP would crash, if VALUE LABELS was
4323         used with incorrect syntax.
4324
4325         * error.c, error.h et al:  Overridden definition of assert for a
4326         custom one.
4327
4328         * test-q.c: Fixed a buglet where it would crash if no /VARIABLES
4329         subcommand was given when it ought to have been.
4330
4331 Sat Mar 20 22:19:08 2004  Ben Pfaff  <blp@gnu.org>
4332
4333         * tab.c: (tab_vline) Fix assertions to respect row_ofs and
4334         col_ofs.
4335         (tab_hline) Ditto.
4336         (tab_box) Ditto.
4337         (tab_joint_text) Ditto.
4338
4339 Sat Mar 20 17:57:23 2004  Ben Pfaff  <blp@gnu.org>
4340
4341         * levene.c: Add #include.
4342
4343         * set.q: (set_viewport) Add `int' argument to make its prototype
4344         correct for signal().
4345
4346 Sat Mar 20 15:35:17 2004  Ben Pfaff  <blp@gnu.org>
4347
4348         * expr-evl.c: (expr_evaluate) Assert that `c' is nonzero before
4349         using it.
4350
4351 Sat Mar 20 15:18:16 2004  Ben Pfaff  <blp@gnu.org>
4352
4353         Changed DFM from open-at-first-access to explicit-open.  Before,
4354         calling dfm_get_record() or dfm_put_record() would automatically
4355         open the file.  Now, you have to call dfm_open_for_reading() or
4356         dfm_open_for_writing() explicitly.  This makes it possible to
4357         check permissions, file existence, etc. earlier.
4358
4359         Also made struct file_handle more opaque, and clean up in general.
4360
4361         * data-list.c: (cmd_data_list) Open handle for reading.
4362
4363         * dfm.c: (struct dfm_fhuser_ext) Add `where', `saw_begin_data'
4364         members.
4365         (open_file_r) Renamed dfm_open_for_reading(), rewrote.
4366         (open_file_w) Renamed dfm_open_for_writing(), rewrote.
4367         (open_inline_file) Removed.
4368         (read_record) For inline_file, if we haven't seen BEGIN DATA, read
4369         it.  Deal with line_number in extension record instead of file
4370         handle.
4371         (dfm_get_record) Rewrote.
4372         (dfm_put_record) Rewrote.
4373         (dfm_push) Assert file is open and one of ours.  Deal with
4374         line_number in extension record instead of file handle.
4375         (dfm_pop) Assert file is open and one of ours.  Deal with
4376         line_number in extension record instead of file handle.
4377         (cmd_begin_data) Use dfm_open_for_reading().  Mark that we saw
4378         BEGIN DATA.     
4379
4380         * file-handle.h: (enum constants RH_RF_*) Removed.
4381         (enum constants FH_MD_*) Removed.
4382         (struct file_handle) Removed `name', `norm_fn', `fn', `where',
4383         `recform', `lrecl', `mode' members.  Public references to
4384         `recform' changed to use handle_get_mode(), references to `lrecl'
4385         changed to use handle_get_record_width().  Added `private' member.
4386         (enum file_handle_mode) New.
4387
4388         * file-handle.q: (struct private_file_handle) New structure.
4389         (struct file_handle_list) New structure.
4390         (static var files) New.
4391         (static var file_handles) Removed.
4392         (init_file_handle) Removed.
4393         (create_file_handle) Removed.
4394         (get_handle_with_name) New function.
4395         (get_handle_for_filename) New function.
4396         (cmd_file_handle) Rewritten.
4397         (hash_file_handle) Removed.
4398         (cmp_file_handle) Removed.
4399         (fh_init_files) Rewritten.
4400         (fh_parse_file_handle) Rewritten.  Allows identifiers as
4401         filenames.
4402         (fh_get_handle_by_name) Renamed handle_get_name(), all references
4403         updated.  Rewritten.
4404         (fh_get_handle_by_filename) Renamed handle_get_filename(), all
4405         references updated.  Rewritten.
4406         (fh_record_width) Renamed handle_get_record_width(), all
4407         references updated.  Rewritten.
4408         (handle_get_mode) New function.
4409
4410         * file-type.c: (cmd_file_type) Open handle for reading.
4411
4412         * filename.c: [unix] (struct file_identity) New structure.
4413         [unix] (fn_get_identity) New function.
4414         [unix] (fn_free_identity) New function.
4415         [unix] (fn_compare_file_identities) New function.
4416         [!unix] (struct file_identity) New structure.
4417         [!unix] (fn_get_identity) New function.
4418         [!unix] (fn_free_identity) New function.
4419         [!unix] (fn_compare_file_identities) New function.
4420
4421         * lexer.c: (static var put) Renamed put_token, all references
4422         updated.
4423         (static var put_tokstr) New.
4424         (static var put_tokval) New.
4425         (lex_init) Initialize put_tokstr().
4426         (restore_token) New function.
4427         (save_token) New function.
4428         (lex_get) Use restore_token().
4429         (lex_put_back) Use save_token().
4430         (lex_put_back_id) New function.
4431         (lex_put_forward) Removed.
4432         (lex_preprocess_line) Set put_token instead of using
4433         lex_put_forward().
4434         (lex_negative_to_dash) Use save_token(), set put_token directly.
4435         (dump_token) Use stderr instead of stdout.
4436
4437         * main.c: (main) Remove call to cmd_init().
4438         
4439         * matrix-data.c: (cmd_matrix_data) Open file for reading.
4440
4441         * pfm-read.c: Use handle_get_filename() instead of trying to use
4442         h->fn directly, all over.
4443
4444         * pfm-write.c: Ditto.
4445
4446         * print.c: (internal_cmd_print) Open handle for writing.
4447         (dump_table) Use handle_get_filename().
4448         (print_trns_proc) Use handle_get_mode().
4449         (cmd_print_space) Use fh_parse_file_handle().
4450         Open handle for writing.
4451         [0] (debug_print) Removed.
4452
4453         * sfm-read.c: Use handle_get_filename() instead of trying to use
4454         h->fn directly, all over.
4455
4456         * sfm-write.c: Ditto.
4457
4458 Sat Mar 20 14:35:48 2004  Ben Pfaff  <blp@gnu.org>
4459
4460         Fix memory leaks.
4461         
4462         * autorecode.c: (arc_free) Free arc->src_values.
4463
4464         * error.c: (msg) Free buf.
4465
4466         * val-labs.c: (do_value_labels) Always free vars.
4467
4468         * vfm.c: (close_active_file) If sink has no make_source then call
4469         its destroy function.
4470
4471 Sat Mar 20 14:00:24 2004  Ben Pfaff  <blp@gnu.org>
4472
4473         Fixed cmd_parse() so that it always skips past a full command
4474         name.  A few special commands for which this would be bad get
4475         special treatment.  This lets us drop code for skipping past the
4476         end of a command name in most cmd_*() functions.  It's not worth
4477         listing all the commands affected.
4478
4479         * command.c: (struct command) Remove `cmd' member, replace by
4480         `name' member, all references updated.  Remove `word', `next',
4481         `skip_entire_name' members.
4482         (macro DEFCMD) Deal with revised `struct command'.
4483         (macro UNIMPL) Ditto.
4484         (macro SPCCMD) New macro for commands whose last word shouldn't be
4485         skipped.
4486         (static array cmd_table[]) Make const, rename `commands', remove
4487         sentinel element.
4488         (macro COMMAND_CNT) New macro.
4489         (split_words) Removed.
4490         (cmd_init) Removed.
4491         (FILE_TYPE_okay) Make parameter const.
4492         (cmd_parse) Improve error messages.
4493         (match_strings) New function.
4494         (next_word) New function.
4495         (enum command_match) New enum.
4496         (conflicting_3char_prefixes) New function.
4497         (conflicting_3char_prefix_command) New function.
4498         (cmd_match_words) New function.
4499         (count_matching_commands) New function.
4500         (get_command_name) New function.
4501         (free_words) New function.
4502         (unknown_command_error) New function.
4503         (figure_out_command) Renamed parse_command_name(), rewritten.
4504
4505         * command.def: Removed @ command.  Marked BEGIN DATA, DOCUMENT,
4506         FILE LABEL, REMARK, SUBTITLE, TITLE as special.  Renamed EVALUATE
4507         to DEBUG EVALUATE.  Added N alias for N OF CASES, SORT alias for
4508         SORT CASES.
4509
4510         * command.h: (macro SPCCMD) New.
4511
4512         * include.c: (cmd_include_at) Removed.
4513         (cmd_include) Allow identifier to be used as filename.
4514
4515         * inpt-pgm.c: (cmd_reread) Use fh_parse_file_handle().
4516
4517         * t-test.q: (cmd_t_test) Command name is now parsed for us.
4518         
4519
4520 Sat Mar 20 13:56:00 2004  Ben Pfaff  <blp@gnu.org>
4521
4522         Start work on better test framework.
4523         
4524         * Makefile.am: (pspp_sources) Add debug.c.
4525         
4526         * debug.c: New file.
4527
4528         * compute.c: (cmd_evaluate) Moved to debug.c, renamed
4529         cmd_debug_evaluate().
4530
4531         * expr-prs.c: (expr_parse) Remove PXP_DUMP support.
4532
4533         * expr.h: (enum constant PXP_DUMP) Removed.
4534
4535 Sat Mar 20 00:05:42 WST 2004 John Darrington <john@darrington.wattle.id.au>
4536
4537         * set.q:  Implemented the SHOW command, and synced it to the existing 
4538         SET cmd.
4539
4540         Added a handler for SIGWINCH so that viewlength and viewwidth follow
4541         changes as the window size is changed.
4542
4543         Added fallback to set viewlength and viewwidth from LINES and COLUMS
4544         environment variables if other methods are not available.
4545
4546         glob.c: Removed a lot of global variables from glob.c and encapsulated 
4547         them in set.q
4548
4549         random.c: Tidied up the way the random seed is set.
4550
4551         str.c: Added a ds_vprintf function.
4552
4553         error.c: Extended dump_message so that messages are always broken at
4554         '\n' characters.
4555         
4556 Thu Mar 18 11:07:14 2004  Ben Pfaff  <blp@gnu.org>
4557
4558         * pfm-write.c: (bufwrite) Write out the correct element for string
4559         variables.  From Andreas Streichardt <streichardt@globalpark.de>.
4560
4561 Mon Mar 15 20:48:03 2004  Ben Pfaff  <blp@gnu.org>
4562
4563         Get rid of static and global (!) vars in matrix-data.c.
4564
4565         * matrix-data.c: (static var nr_data) Removed.
4566         (static var nr_factor_values) Removed.
4567         (static var max_cell_index) Removed.
4568         (static var split_values) Removed.
4569         (struct nr_aux_data) New structure.
4570         (read_matrices_without_rowtype) Use a local struct nr_aux_data in
4571         place of static vars, pass to create_case_source() and procedure()
4572         as aux data.
4573         (nr_read_data_lines) Use struct nr_aux_data * parameter instead of
4574         struct matrix_data_pgm *.
4575         (nr_read_splits) Ditto.
4576         (nr_read_factors) Ditto.
4577         (nr_output_data) Ditto.
4578         (static var wr_content) Removed.
4579         (global var wr_data) Removed.
4580         (global var wr_current) Removed.
4581         (struct wr_aux_data) New structure.
4582         (read_matrices_with_rowtype) Use a local struct wr_aux_data in
4583         place of static vars, pass to create_case_source() and procedure()
4584         as aux data.
4585         (matrix_data_read_with_rowtype) Use struct wr_aux_data * parameter
4586         instead of matrix_data_pgm *.
4587         (wr_read_splits) Ditto.
4588         (wr_output_data) Ditto.
4589         (wr_read_rowtype) Ditto.
4590         (wr_read_factors) Ditto.
4591         (wr_read_indeps) Ditto.
4592         
4593 Mon Mar 15 20:07:29 2004  Ben Pfaff  <blp@gnu.org>
4594
4595         Get rid of static vars in autorecode.c.
4596
4597         * autorecode.c: (struct autorecode_trns) Rename `arc' to `specs',
4598         `n_arc' to `spec_cnt'.  All references updated.
4599         (static var v_src) Removed.
4600         (static var v_dest) Removed.
4601         (static var h_trns) Removed.
4602         (static var nv_src) Removed.
4603         (static var descend) Removed.
4604         (static var print) Removed.
4605         (enum direction) New enum.
4606         (struct autorecode_pgm) New structure.
4607         (cmd_autorecode) Use struct autorecode_pgm instead of static vars.
4608         Move n_dest local var into struct autorecode_pgm for ease of
4609         clean-up.  Use arc_free().
4610         (arc_free) New function.
4611         (recode) Modify to take struct autorecode_pgm * parameter instead
4612         of using statics.  Let the caller clean up.
4613         (autorecode_proc_func) Use struct autorecode_pgm * auxiliary data
4614         instead of statics.  Rearrange code a little.
4615
4616 Mon Mar 15 00:25:02 2004  Ben Pfaff  <blp@gnu.org>
4617
4618         Get rid of static, global vars in recode.c.  Remove debug code.
4619
4620         * recode.c: (static var head) Removed.
4621         (global var v) Removed.
4622         (global var nv) Removed.
4623         (cmd_recode) New local variables head, v, nv.  Initialize and free
4624         v.  Don't call debug_print().
4625         [DEBUGGING] (dump_dest) Removed.
4626         [DEBUGGING] (debug_print) Removed.
4627
4628 Mon Mar 15 00:14:49 2004  Ben Pfaff  <blp@gnu.org>
4629
4630         Get rid of static vars in expr-opt.c.
4631
4632         * expr-opt.c: (static var e) Removed.
4633         (static var nop) Removed.
4634         (static var mop) Removed.
4635         (static var ndbl) Removed.
4636         (static var mdbl) Removed.
4637         (static var nstr) Removed.
4638         (static var mstr) Removed.
4639         (static var nvars) Removed.
4640         (static var mvars) Removed.
4641         (struct expr_dump_state) New structure.
4642         (dump_expression) Use new struct expr_dump_state instead of static
4643         vars and pass to functions we call.
4644         (dump_node) Use struct expr_dump_state * parameter.
4645         (emit) Ditto.
4646         (emit_num_con) Ditto.
4647         (emit_str_con) Ditto.
4648         (emit_var) Ditto.
4649         
4650 Mon Mar 15 00:03:51 2004  Ben Pfaff  <blp@gnu.org>
4651
4652         Get rid of static var in COUNT.
4653
4654         * count.c: (static var head) Move into cmd_count().
4655         (cmd_count) [DEBUGGING] Don't call debug_print.
4656         [DEBUGGING] (debug_print) Removed.
4657
4658 Sun Mar 14 23:56:09 2004  Ben Pfaff  <blp@gnu.org>
4659
4660         Get rid of static vars in VALUE LABELS, ADD VALUE LABELS.
4661
4662         * val-labs.c: (static var v) Removed.
4663         (static var nv) Removed.
4664         [DEBUGGING] (debug_print) Removed.
4665         (verify_val_labs) Add struct variable **, int parameters.
4666         (get_label) Ditto.  Improve error messages, streamline.
4667         (erase_labels) New function for erasing value labels, taking over
4668         part of verify_val_labs()'s function.
4669         (init) Removed.
4670         (done) Removed.
4671         (cmd_value_labels) No need to call init() or done() anymore.
4672         (cmd_add_value_labels) Ditto.
4673         (do_value_labels) Add vars, var_cnt local variables.  Clean up
4674         after them internally.  Call erase_labels() if we should.  Don't
4675         call debug_print().
4676
4677 Sun Mar 14 23:33:53 2004  Ben Pfaff  <blp@gnu.org>
4678
4679         Get rid of static vars in MATCH FILES.
4680         
4681         * get.c: (static var mtf_head) Removed.
4682         (static var mtf_tail) Removed.
4683         (static var mtf_by) Removed.
4684         (static var mtf_n_by) Removed.
4685         (static var mtf_master) Removed.
4686         (static var mtf_seq_num) Removed.
4687         (static var mtf_seq_nums) Removed.
4688         (static var mtf_sink) Removed.
4689         (static var mtf_case) Removed.
4690         (struct mtf_proc) New structure.
4691         (cmd_match_files) Use struct mtf_proc instead of static vars.
4692         (mtf_processing_finish) Ditto.
4693         (mtf_free) Ditto.
4694         (mtf_delete_file_in_place) Ditto.
4695         (mtf_read_nonactive_records) Ditto.
4696         (mtf_compare_BY_values) Ditto.
4697         (mtf_processing) Ditto.
4698         (mtf_merge_dictionary) Ditto.
4699
4700 Sun Mar 14 22:48:12 2004  Ben Pfaff  <blp@gnu.org>
4701
4702         * command.def: Add CASESTOVARS, VARSTOCASES unimplemented commands.
4703
4704         * dictionary.c: (dict_rename_var) Add assertion.
4705         (dict_contains_var) Check by index instead of name.
4706
4707 Sun Mar 14 22:01:02 2004  Ben Pfaff  <blp@gnu.org>
4708
4709         Get rid of compaction_necessary, compaction_nval, compaction_case.
4710         Redo VFM interface.  Replace disk_sink and memory_sink by
4711         storage_sink, disk_source and memory_source by storage_source.
4712
4713         * vfm.h: (struct case_sink) Add `dict', `idx_to_fv', `value_cnt'
4714         members.
4715
4716         * vfm.c: 
4717         (struct write_case_data) Remove `begin_func', `end_func',
4718         `func_aux' members.  Add `aux', `trns_case', `sink_case',
4719         `cases_written', `cases_analyzed' members.
4720         (global var compaction_necessary) Make static.
4721         (global var compaction_nval) Removed.
4722         (global var compaction_case) Removed.
4723         (static var case_count) Removed.
4724         (struct procedure_aux_data) Removed.
4725         (struct split_aux_data) Removed.
4726         (procedure) Remove begin_func, end_func parameters.  Rewrite.
4727         (static var not_canceled) Removed.
4728         (process_active_file) Removed.
4729         (process_active_file_write_case) Removed.
4730         (process_active_file_output_case) Removed.
4731         (prepare_for_writing) Moved into open_active_file().
4732         (arrange_compaction) Ditto.
4733         (setup_lag) Ditto.
4734         (open_active_file) Rewrote.
4735         (write_case) New function.
4736         [DEBUGGING] (index_to_varname) Removed.
4737         (execute_transformations) New function.
4738         (exclude_this_case) Renamed filter_case(), changed interface.
4739         (clear_case) Added struct ccase * parameter to interface.
4740         (close_active_file) Added struct write_case_data * parameter,
4741         rewrote.
4742         (disk_sink_create) Removed.
4743         (disk_sink_destroy) Removed.
4744         (disk_sink_make_source) Removed.
4745         (disk_sink_write) Removed.
4746         (disk_source_count) Removed.
4747         (disk_source_destroy) Removed.
4748         (disk_source_read) Removed.
4749         (global var disk_sink_class) Removed.
4750         (global var disk_source_class) Removed.
4751         (global var memory_sink_class) Removed.
4752         (global var memory_source_class) Removed.
4753         (memory_sink_create) Removed.
4754         (memory_sink_destroy) Removed.
4755         (memory_sink_make_source) Removed.
4756         (memory_sink_write) Removed.
4757         (memory_source_count) Removed.
4758         (memory_source_destroy) Removed.
4759         (memory_source_get_cases) Removed.
4760         (memory_source_read) Removed.
4761         (memory_source_set_cases) Removed.
4762         (struct disk_stream_info) Removed.
4763         (struct memory_sink_info) Removed.
4764         (struct memory_source_info) Removed.
4765         (write_active_file_to_disk) Removed.
4766         (destroy_storage_stream_info) New function.
4767         (global var null_sink_class) New var.
4768         (global var storage_sink_class) New var.
4769         (global var storage_source_class) New var.
4770         (open_storage_file) New function.
4771         (storage_sink_destroy) New function.
4772         (storage_sink_make_source) New function.
4773         (storage_sink_open) New function.
4774         (storage_sink_write) New function.
4775         (storage_source_count) New function.
4776         (storage_source_destroy) New function.
4777         (storage_source_get_cases) New function.
4778         (storage_source_on_disk) New function.
4779         (storage_source_read) New function.
4780         (storage_source_set_cases) New function.
4781         (storage_source_to_disk) New function.
4782         (storage_to_disk) New function.
4783         (struct storage_stream_info) New structure.
4784         (write_storage_file) New function.
4785         (procedure_write_case) Removed.
4786         (create_case_source) Add `struct dictionary *' parameter, all
4787         references updated.
4788         (create_case_sink) Ditto.
4789         (free_case_sink) New function.
4790         (struct split_aux_data) New structure.
4791         (procedure_with_splits) New function implementing what procedure()
4792         used to.
4793         (SPLIT_FILE_proc_func) Removed.
4794         (procedure_with_splits_callback) New function.
4795         (equal_splits) New function.
4796         
4797         * aggregate.c: Pass around a struct instead of using statics.
4798         (static var outfile) Remove.
4799         (enum type) Give it tag `missing_treatment'.
4800         (static var missing) Remove.
4801         (static var sort) Remove.
4802         (static var agr_first) Remove.
4803         (static var agr_next) Remove.
4804         (static var case_count) Remove.
4805         (static var prev_case) Remove.
4806         (static var buf64_1xx) Remove.
4807         (static var buf_1xx) Remove.
4808         (struct agr_proc) New structure incorporating the above.
4809         (cmd_aggregate) Use new struct.  Clean up error handling using
4810         agr_destroy().  Completely rewrite actual implementation of
4811         aggregation.
4812         (create_sysfile) Add struct agr_proc * parameter, modify
4813         accordingly.
4814         (parse_aggregate_functions) Ditto.
4815         (free_aggregate_functions) Ditto.  Rename agr_destroy().
4816         (aggregate_single_case) Add struct agr_proc * parameter, modify
4817         accordingly.
4818         (accumulate_aggregate_info) Ditto.
4819         (dump_aggregate_info) Ditto.
4820         (initialize_aggregate_info) Ditto.
4821         (agr_00x_trns_proc) Removed.
4822         (agr_00x_end_func) Removed.
4823         (agr_10x_trns_proc) Removed.
4824         (agr_10x_trns_free) Removed.
4825         (agr_10x_end_func) Removed.
4826         (agr_11x_read) Removed.
4827         (agr_11x_finish) Removed.
4828         [DEBUGGING] (debug_print) Removed.
4829         (write_case_to_sfm) Add struct agr_proc * parameter, modify
4830         accordingly.
4831         (agr_to_active_file) New function.
4832         (presorted_agr_to_sysfile) New function.
4833         (sort_agr_to_sysfile) New function.
4834
4835         * autorecode.c: (cmd_autorecode) Use procedure_with_splits().
4836
4837         * crosstabs.q: (internal_cmd_crosstabs) Ditto.
4838
4839         * descript.q: (cmd_descriptives) Ditto.
4840
4841         * dfm.c: (cmd_begin_data) Check for storage_source_class.  Adapt
4842         to new procedure() interface.
4843
4844         * command.c: (cmd_execute) Adapt to new procedure() interface.
4845
4846         * dictionary.c: (dict_compact_values) Also delete scratch
4847         variables.
4848         (dict_get_compacted_value_cnt) New function.
4849         (dict_get_compacted_idx_to_fv) New function.
4850
4851         * flip.c: (cmd_flip) Warn about and cancel TEMPORARY.
4852         (cmd_flip) Adapt to new procedure() interface.
4853         (flip_sink_write) Use sink->idx_to_fv.
4854
4855         * frequencies.q: (internal_cmd_frequencies) Use
4856         procedure_with_splits().
4857
4858         * get.c: (cmd_save_internal) Adapt to new procedure() interface.
4859         (static var mtf_sink) New static var.
4860         (static var mtf_case) New static var.
4861         (cmd_match_files) Warn about and cancel TEMPORARY.  Redo the way
4862         we actually implement the matching.
4863         (mtf_delete_file_in_place) Use mtf_case.
4864         (mtf_processing) Use mtf_case and mtf_sink.
4865         (cmd_export) Adapt to new procedure() interface.
4866
4867         * levene.c: (levene) Use procedure_with_splits().
4868
4869         * list.q: (cmd_list) Use procedure_with_splits().
4870
4871         * matrix-data.c: (read_matrices_without_rowtype) Adapt to new
4872         procedure() interface.
4873         (read_matrices_with_rowtype) Ditto.
4874
4875         * modify-vars.c; (cmd_modify_vars) Warn about and cancel
4876         TEMPORARY.  Adapt to new procedure() interface.
4877
4878         * rename-vars.c: Warn about and cancel TEMPORARY.
4879
4880         * sort.c: (cmd_sort_cases) Warn about TEMPORARY.
4881         (sort_cases) Use dict_get_compacted_value_cnt() instead of
4882         compaction_nval.  Adapt to new procedure() interface.  Use
4883         storage_source_to_disk().
4884         (do_internal_sort) Don't try to dump the cases to memory.
4885         (compare_case_lists) Pass null idx_to_fv.
4886         (struct initial_run_state) Add `idx_to_fv' member.  Remove
4887         `case_size' member.
4888         (write_initial_runs) Don't initialize irs->case_size.  Adapt to
4889         new procedure() interface.  Reset irs->idx_to_fv after calling
4890         procedure().
4891         (sort_sink_write) Set irs->idx_to_fv.  Use case_size from struct
4892         sort_cases_pgm.  Pass irs, not struct sort_cases_pgm to
4893         push_heap().
4894         (destroy_initial_run_state) Don't dereference irs after freeing
4895         it.
4896         (allocate_cases) Don't calculate case_size locally.
4897         (compare_record) Add idx_to_fv parameter.
4898         (compare_record_run) Change parameter from struct sort_cases_pgm *
4899         to struct initial_run_state *.  Pass irs->idx_to_fv to
4900         compare_record().
4901         (compare_record_run) Third parameter now a struct
4902         initial_run_state *.
4903         (output_record) No need for out_case anymore.  Pass irs, not
4904         struct sort_cases_pgm to pop_heap().  Use case_size from struct
4905         sort_cases_pgm.
4906         (merge) Use case_size from struct sort_cases_pgm.
4907         (merge_once) Use case_size from struct sort_cases_pgm.
4908         Pass null pointer to compare_record() as idx_to_fv.
4909         (global var sort_sink_class) Make static.
4910
4911         * t-test.q: (cmd_t_test) Use procedure_with_splits().
4912
4913         * temporary.c: Remove debugging crap.
4914
4915 Sat Mar 13 14:19:52 WST 2004 John Darrington <john@darrington.wattle.id.au>
4916
4917         * t-test.q, levene.c: Fixed up the handling of MISSING values
4918         int the T-TEST
4919
4920 Fri Mar 12 16:23:35 WST 2004 John Darrington <john@darrington.wattle.id.au>
4921
4922         * t-test.q, levene.c: Added support for T-TEST /GROUP where only 
4923         one value is given.
4924
4925 Wed Mar 10 23:25:13 2004  Ben Pfaff  <blp@gnu.org>
4926
4927         Change explicit variable name checks into use of
4928         dict_class_from_id().
4929
4930         * dictionary.c: (dict_create_var)  Change explicit variable name
4931         check into use of dict_class_from_id().
4932
4933         * get.c: (trim_dictionary) Ditto.
4934
4935         * sel-if.c: (cmd_filter) Ditto.
4936
4937         * sysfile-info.c: (cmd_display) Ditto.
4938
4939         * vars-prs.c: (parse_DATA_LIST_vars) Ditto.
4940
4941         * vfm.c: (arrange_compaction) Ditto.
4942
4943         * weight.c: (cmd_weight) Ditto.
4944
4945 Wed Mar 10 21:16:34 2004  Ben Pfaff  <blp@gnu.org>
4946
4947         * temporary.c: (cmd_temporary) When TEMPORARY was the first
4948         transformation following the input program, if any, for some
4949         reason we special-cased f_trns.  That's just wrong.  It should
4950         always be set to n_trns.
4951
4952 Tue Mar  9 23:44:40 2004  Ben Pfaff  <blp@gnu.org>
4953
4954         * format.c: (parse_format_specifier_name) Fix brown-bag bug
4955         introduced in last check-in.
4956
4957 Tue Mar  9 23:10:41 2004  Ben Pfaff  <blp@gnu.org>
4958
4959         * format.c: (global array translate_fmt[]) Removed.
4960         (translate_fmt) New function as replacement.
4961         (parse_format_specifier_name) Rewrite.
4962
4963         * pfm-read.c: (convert_format) Use translate_fmt() instead of
4964         translate_fmt[].
4965
4966         * sfm-read.c: (parse_format_spec) Ditto.
4967
4968         * postscript.c: (text) Fix handling of fonts with missing
4969         ligatures.
4970
4971         * sort.c: (struct external_sort) Add temp_name member.
4972         (destroy_external_sort) Free temp_dir, temp_name members.
4973         (init_external_sort) Allocate temp_name.
4974         (get_temp_file_name) Change prototype.
4975         (open_temp_file) Deal with change to get_temp_file_name().
4976         (close_temp_file) Ditto.
4977         (remove_temp_file) Ditto.
4978         (write_temp_file) Ditto.
4979         (read_temp_file) Ditto.
4980         (sort_sink_destroy) Removed.
4981         (sort_sink_class) Change destroy member to null.
4982
4983 Tue Mar  9 22:36:34 2004  Ben Pfaff  <blp@gnu.org>
4984
4985         Eliminate temp_case.
4986
4987         * aggregate.c: (cmd_aggregate) No need to save/restore temp_case
4988         anymore.  Use agr_11x_finish().
4989         (aggregate_single_case) Make first param const.
4990         (accumulate_aggregate_info) Ditto.
4991         (agr_00x_end_func) Use compaction_case, not temp_case.
4992         (agr_11x_func) Break into agr_11x_read(), agr_11x_finish().
4993
4994         * data-list.c: (struct data_list_pgm) Add `case_size' member.
4995         (cmd_data_list) Initialize case_size.
4996         (read_from_data_list_fixed) Add struct ccase * param, use instead
4997         of temp_case.
4998         (read_from_data_list_free) Ditto.
4999         (read_from_data_list_list) Ditto.
5000         (read_one_case) Rename data_list_trns_proc(), all references
5001         updated.  Add argument in calling above functions.  Use c
5002         argument instead of temp_case.
5003         (destroy_dls) Rename data_list_trns_free(), all references
5004         updated.
5005
5006         * expr-evl.c: (expr_evaluate) Make second parameter const.
5007
5008         * file-type.c: (struct file_type_pgm) Add `case_size' member.
5009         (cmd_end_file_type) Initialize `case_size'.
5010         (file_type_source_read) Add struct ccase * parameter.  Use instead
5011         of temp_case.
5012
5013         * flip.c: Rewritten.
5014
5015         * get.c: (struct get_pgm) New structure to keep track of
5016         case_size.
5017         (cmd_get) Initialize case_size.
5018         (cmd_import) Ditto.
5019         (get_source) Deal with struct get_pgm.
5020         (get_source_read) Add struct ccase * parameter, use instead of
5021         temp_case.
5022         (import_source_read) Ditto.
5023
5024         * get.c: Use a null pointer instead of temp_case to represent the
5025         "current case" in a struct mtf_file's input member.
5026         (mtf_processing_finish) Pass null to mtf_processing(), not
5027         temp_case.
5028         (mtf_read_nonactive_records) Don't set iter->input to temp_case.
5029         (mtf_compare_BY_values) Add extra arg, use instead of null input
5030         members.
5031         (mtf_processing) Use c parameter instead of temp_case.  Pass
5032         compaction_case to process_active_file_output_case().
5033         
5034         * glob.c: (global variable temp_case) Removed.
5035
5036         * inpt-pgm.c: (struct input_program_pgm) Add `case_size' member.
5037         (cmd_input_program) Initialize case_size.  Set
5038         vfm_source->value_cnt.
5039         (init_case) Add struct ccase * parameter, use instead of
5040         temp_case.
5041         (clear_case) Ditto.
5042         (input_program_source_read) Ditto.
5043
5044         * matrix-data.c: (matrix_data_read_without_rowtype) Ditto.
5045         (dump_cell_content) Ditto.
5046         (nr_output_data) Ditto.
5047         (read_matrices_without_rowtype) Ditto.
5048         (matrix_data_read_with_rowtype) Ditto.
5049         (wr_read_splits) Ditto.
5050         (wr_output_data) Ditto.
5051
5052         * sort.h: (struct sort_cases_pgm) New member `case_size'.
5053         
5054         * sort.c: (sort_cases) Initialize scp->case_size.
5055         (struct external_sort) Remove `case_size' member.
5056         (write_initial_runs) Only call vfm_sink->class_destroy if
5057         non-null.
5058         (struct sort_source_aux) New structure.
5059         (sort_source_read_helper) New function.
5060         (sort_source_read) Use sort_source_read_helper().
5061         (read_sort_output) Change interface to be more reasonable.
5062         (read_internal_sort_output) Ditto.
5063         (read_external_sort_output) Ditto.
5064
5065         * vars-prs.c: (dict_class_to_name) Pass return value through
5066         gettext.
5067
5068         * vfm.c: (struct procedure_aux_data) Add `trns_case' member.
5069         (procedure) Initialize trns_case.
5070         (procedure) Pass trns_case to vfm_source->class->read().
5071         Free trns_case.
5072         (process_active_file) Start using struct procedure_aux_data.
5073         (process_active_file_write_case) Pass trns_case to
5074         transformations, lag_case(), clear_case().
5075         (process_active_file_output_case) Add struct ccase * parameter.
5076         (create_trns_case) New function.
5077         (make_temp_case) Removed.
5078         (vector_initialization) Removed.
5079         (close_active_file) Only call make_source if non-null, otherwise
5080         set vfm_source to null pointer.  Don't free temp_case.
5081         (disk_source_read) Add struct ccase * parameter, use instead of
5082         temp_case.
5083         (memory_source_read) Ditto.
5084         (lag_case) Add const struct ccase * member.
5085         (procedure_write_case) Use trns_case instead of temp_case.
5086         (clear_case) Add struct ccase * member, use instead of temp_case.
5087         (exclude_this_case) Ditto.
5088         (create_case_source) Add struct dictionary * parameter, use to
5089         initialize source->value_cnt.
5090
5091         * vfm.h: (struct case_source) Add `value_cnt' member.
5092         (struct case_source_class) Add struct ccase * parameter to `read'
5093         member function pointer.
5094         (struct case_sink_class) Make struct ccase * parameter const in
5095         `write' member function pointer.
5096         
5097 Wed Mar  3 20:44:37 2004  Ben Pfaff  <blp@gnu.org>
5098
5099         Fix a lot of "possibly uninitialized variable" warnings.  Some of
5100         them are even real bugs.  A few of them make me wonder how the
5101         code ever worked.
5102
5103         * aggregate.c: (parse_aggregate_functions) Initialize `function.
5104
5105         * ascii.c: (output_lines) Add default case to switch.
5106
5107         * crosstabs.q: Remove static variable `expected' and all
5108         references to it.
5109         (display_crosstabulation) Always calculate expected value.
5110         (calc_chisq) Ditto.
5111         (output_pivot_table) Initialize `cmp'.
5112         (display_crosstabulation) New variable `last_row', which is
5113         initialized.
5114
5115         * data-in.c: (parse_numeric) Always initialize sign.  How did this
5116         work at all?!
5117
5118         * data-list.c: (repeating_data_trns_proc) Always initialize code.
5119         Always set info.ofs.  (How did this work?!)
5120
5121         * expr-opt.c: (optimize_tree) Always initialize `m'.
5122         (evaluate_tree) Always initialize `c'.  (How did this work?)
5123
5124         * frequencies.q: (frq_custom_variables) Always initialize min,
5125         max.
5126         (frq_custom_grouped) Always initialize `dl'.
5127
5128         * groff-font.c: (groff_read_font) Always initialize char_set.
5129
5130         * matrix-data.c: (nr_output_data) Initialize `split'.
5131         (wr_read_splits) Remove shadowing split_cnt declaration.
5132         (wr_output_data) Initialize `split'.
5133
5134         * output.c: (tokener) Skip add character on syntax error.
5135
5136         * pool.c: (pool_strndup) Always set `copy'.  (How did this work?!)
5137
5138         * postscript.c: (read_ps_encodings) Use line.string instead of
5139         uninitialized `bp'.
5140         (write_text) Add default case to switch.
5141         (text) Always initialize multiple variables.  Fix bug with
5142         ligatures.
5143
5144         * print.c: (fixed_parse_fortran) Initialize head.
5145         (alloc_line) Add default case to switch.
5146
5147         * recode.c: (parse_dest_spec) Handle case where nothing matches.
5148         (recode_trns_proc) Move variable declaration inward.  Add default
5149         case to switch.
5150
5151         * sfm-read.c: (read_header) Initialize skip_amt.
5152
5153         * sysfile-info.c: (display_variables) Always initialize pc.
5154
5155         * vars-prs.c: Initialized `included'.
5156
5157 Wed Mar  3 09:30:09 2004  Ben Pfaff  <blp@gnu.org>
5158
5159         * main.c: (main) sigaction()'s sa_flags member was uninitialized.
5160         Just use signal() instead.
5161
5162 Wed Mar  3 09:26:30 2004  Ben Pfaff  <blp@gnu.org>
5163
5164         Get rid of vfm_sink_info and vfm_source_info.
5165         
5166         * aggregate.c: (agr_00x_end_func) Don't increment
5167         sfm_sink_info.ncases.
5168
5169         * sort.c: (do_internal_sort) Get case count from
5170         vfm_source->class->count().
5171         (struct external_sort) Add `case_size' member.
5172         (do_external_sort) Initialize case_size.
5173         (struct initial_run_state) Add `case_size' member.
5174         (write_initial_runs) Initialize case_size.
5175         (sort_sink_write) Use case_size.
5176         (read_external_sort_output) Use case_size.  Get case_cnt from
5177         initial_runs.
5178
5179         * vfm.c: (struct write_case_data) Add underscores to existing arg
5180         names, all references updated.  Renamed `aux' as `func_aux', all
5181         references updated.  Added new `aux' member.
5182         (global var vfm_source_info) Removed.
5183         (global var vfm_sink_info) Removed.
5184         (struct procedure_aux_data) New.
5185         (struct split_aux_data) New.
5186         (procedure) Use `aux' fields for procedure_aux_data,
5187         split_aux_data.
5188         (process_active_file_write_case) Pass case_count + 1 to
5189         transformation procedures, exclude_this_case().
5190         (process_active_file_output_case) Don't increment
5191         vfm_sink_info.ncases.
5192         (prepare_for_writing) Don't initialize vfm_sink_info.  Don't try
5193         to send data to disk early.
5194         (make_temp_case) Don't use vfm_sink_info.case_size.
5195         (close_active_file) Don't initialize vfm_source_info.
5196         (struct disk_stream_info) New, to allow for case_cnt and case_size fields.
5197         (disk_sink_create) Initialize and/or update disk_stream_info.
5198         (disk_sink_write) Ditto.
5199         (disk_sink_destroy) Ditto.
5200         (disk_sink_make_source) Ditto.
5201         (disk_source_read) Ditto.
5202         (disk_source_destroy) Ditto.
5203         (global var disk_source_class) Add disk_source_count().
5204         (disk_source_count) New function.
5205         (struct memory_sink_info) Add `case_cnt', `case_size' members.
5206         (struct memory_source_info) Ditto.
5207         (memory_sink_create) Deal with case_cnt, case_size.
5208         (memory_sink_write) Ditto.
5209         (memory_sink_make_source) Ditto.
5210         (memory_source_read) Ditto.
5211         (memory_source_count) New function.
5212         (memory_source_class) Add memory_source_count().
5213         (procedure_write_case) Don't use vfm_sink_info.ncases.  Do use
5214         proc_aux->cases_written, and pass it to transformation procedures
5215         and exclude_this_case ().
5216         (exclude_this_case) Add case_num parameter.  Pass it to
5217         expr_evaluate().
5218         (SPLIT_FILE_procfunc) Use split_aux->prev_case instead of static
5219         variable.
5220
5221         * vfm.h: (struct case_source_class) Add `count' member.
5222
5223         * vfmP.h: (struct stream_info) Removed.
5224         (global variable vfm_source_info) Removed.
5225         (global variable vfm_sink_info) Removed.
5226         
5227 Tue Mar  2 23:38:17 2004  Ben Pfaff  <blp@gnu.org>
5228
5229         * var.h: (typedef trns_proc_func) New typedef.
5230         (trns_free_func) New typedef.
5231         (struct trns_header) Change `proc' to type trns_proc_func, `free'
5232         to type trns_free_func.  This only changes the actual type of
5233         trns_proc_func, adding a `case_num' parameter.  Updated all
5234         implementations to use the typedefs instead.
5235
5236         * compute.c: (compute_num) Pass case_num to expr_evaluate().
5237         (compute_num_vec) Ditto.
5238         (compute_str) Ditto.
5239         (compute_str_vec) Ditto.
5240
5241         * do-if.c: (do_if_trns_proc) Ditto.
5242
5243         * expr-evl.c: (expr_evaluate) Add new case_num parameter, use for
5244         OP_CASENUM.
5245
5246         * inpt-pgm.c: (input_program_source_read) Maintain case count,
5247         pass to transformation functions.
5248         (reread_trns_proc) Pass case_num arg to expr_evaluate().
5249
5250         * loop.c: (loop_1_trns_proc) Ditto.
5251         (loop_2_trns_proc) Ditto.
5252         (loop_3_trns_proc) Ditto.
5253
5254         * print.c: (print_space_trns_proc) Ditto.
5255
5256         * sel-if.c: (select_if_proc) Ditto.
5257
5258 Tue Mar  2 11:36:52 2004  Ben Pfaff  <blp@gnu.org>
5259
5260         * frequencies.q: (cleanup_freq_tab) Avoid memory leak by
5261         destroying hash table.
5262
5263         * glob.c: (read_active_file) Variable not referenced, removed.
5264         (cancel_input_pgm) Ditto.
5265
5266         * levene.c: Add #include <stdlib.h> needed to call free().
5267
5268         * aggregate.c: (parse_aggregate_functions) Make `function'
5269         variable const.
5270
5271 Tue Mar  2 11:30:56 2004  Ben Pfaff  <blp@gnu.org>
5272
5273         Start working to eliminate VFM dependence on static variables.
5274
5275         * command.c: (cmd_parse) Use case_source_is_class().
5276
5277         * data-list.c: Rewrite to eliminate use of static variables.
5278
5279         * dfm.c: (cmd_begin_data) Use case_source_is_class().
5280
5281         * file-handle.q: (fh_handle_name) Make parameter const.
5282
5283         * file-type.c: Rewrite to eliminate use of static variables.
5284
5285         * flip.c: Rewrite to eliminate use of static variables.
5286
5287         * format.c: (get_format_var_width) New function.
5288
5289         * get.c: Eliminate use of static variables.
5290
5291         * inpt-pgm.c: Eliminate use of static variables.
5292
5293         * matrix-data.c: Eliminate use of static variables.
5294
5295         * set.q: (set_max_workspace) New variable.
5296         (cmd_set) Use SET WORKSPACE to modify set_max_workspace.
5297
5298         * var.h: (struct case_list) Move here from vfmP.h.
5299
5300         * vars-atr.c: (discard_variables) Handle new vfm_source type.
5301
5302         * vfm.c: (vfm_source) Change type from struct case_stream to
5303         struct case_source.
5304         (vfm_sink) Change type from struct case_stream to struct
5305         case_sink.
5306         (static var paging) Rename workspace_overflow, all references
5307         updated.
5308         (procedure) Use new class structures.
5309         (process_active_file) Ditto.
5310         (process_active_file_write_case) Ditto.
5311         (prepare_for_writing) Use set_max_workspace.  Use new class
5312         structures.
5313         (close_active_file) Use new class structures.  Free old sink.
5314         (global var disk_source_file) Removed.
5315         (global var disk_sink_file) Removed.
5316         (disk_stream_init) Removed.
5317         (disk_stream_read) Removed.
5318         (disk_stream_write) Removed.
5319         (disk_stream_mode) Removed.
5320         (disk_stream_destroy_source) Removed.
5321         (disk_stream_destroy_sink) Removed.
5322         (global var vfm_disk_stream) Removed.
5323         (disk_sink_create) New function.
5324         (disk_sink_write) New function.
5325         (disk_sink_destroy) New function.
5326         (disk_sink_make_source) New function.
5327         (disk_sink_class) New static var.
5328         (disk_source_read) New function.
5329         (disk_source_destroy) New function.
5330         (global var vfm_source_class) New var.
5331         (global var memory_source_cases) Removed.
5332         (global var memory_sink_cases) Removed.
5333         (global var memory_sink_max_cases) Removed.
5334         (struct memory_sink_info) New struct.
5335         (memory_stream_init) Removed.
5336         (memory_stream_read) Removed.
5337         (memory_stream_write) Removed.
5338         (memory_stream_mode) Removed.
5339         (memory_stream_destroy_source) Removed.
5340         (memory_stream_destroy_sink) Removed.
5341         (global var vfm_memory_stream) Removed.
5342         (page_to_disk) Renamed write_active_file_to_disk().
5343         (memory_sink_create) New function.
5344         (memory_sink_write) New function.
5345         (memory_sink_destroy) New function.
5346         (memory_sink_make_source) New function.
5347         (memory_sink_class) New static var.
5348         (memory_source_read) New function.
5349         (memory_source_destroy) New function.
5350         (memory_source_get_cases) New function.
5351         (memory_source_set_cases) New function.
5352         (global var vfm_source_class) New var.
5353         (procedure_write_case) Use new class structures.
5354         (create_case_source) New function.
5355         (case_source_is_complex) New function.
5356         (case_source_is_class) New function.
5357         (create_case_sink) New function.
5358
5359         * vfm.h: (global variable reinit_sysmis) Not used, removed.
5360         (global variable reinit_blanks) Not used, removed.
5361         (global variable init_zero) Not used, removed.
5362         (global variable init_blanks) Not used, removed.
5363         (struct case_source) New struct.
5364         (struct case_source_class) New struct.
5365         (struct case_sink) New struct.
5366         (struct case_sink_class) New struct.
5367         (struct case_stream) Removed.
5368
5369         * vfmP.h: (struct case_list) Moved to var.h.
5370
5371 Tue Mar  2 11:28:30 2004  Ben Pfaff  <blp@gnu.org>
5372
5373         * algorithm.c: (count_equal) New function.
5374         (count_if) New function.
5375         (unique) Add assertions.
5376         (partition) Add assertions.
5377         (is_partitioned) New function.
5378         (copy_if) Add assertions.
5379         (remove_equal) Add assertions.
5380         (lexicographical_compare) Rename lexicographical_compare_3way.
5381         (sort) Add assertions.  Rephrase some code.
5382         (is_sorted) New function.
5383
5384 Sun Feb 29 23:24:57 2004  Ben Pfaff  <blp@gnu.org>
5385
5386         Rewrite SORT CASES.
5387
5388         * sort.c: Completely rewrite.
5389
5390         * sort.h: Expose interface via struct sort_cases_pgm, not via
5391         global variables.
5392
5393         * aggregate.c: (sort) New static var.
5394         (cmd_aggregate) Use sort.
5395         (create_sysfile) Ditto.
5396         (aggregate_single_case) Ditto.
5397         (dump_aggregate_info) Ditto.
5398         (agr_00x_end_func) Ditto.
5399         (debug_print) Ditto.
5400
5401         * var.h: (enum SRT_ASCEND) Removed.
5402         (enum SRT_DESCEND) Removed.
5403         (struct sort_cases_proc) Removed.
5404         (struct variable) Remove p.srt member.
5405
5406 Sun Feb 29 23:22:45 2004  Ben Pfaff  <blp@gnu.org>
5407
5408         Get rid of the old, crappy heap structure and replace it by a new,
5409         shiny, C++ STL-like heap structure.
5410         
5411         * Makefile.am: (pspp_SOURCES) Remove heap.c, heap.h.
5412
5413         * algorithm.c: (push_heap) New function.
5414         (heapify) Ditto.
5415         (pop_heap) Ditto.
5416         (make_heap) Ditto.
5417         (sort_heap) Ditto.
5418         (is_heap) Ditto.
5419         
5420         * heap.c: Removed.
5421
5422         * heap.h: Removed.
5423
5424 Sun Feb 29 23:21:53 2004  Ben Pfaff  <blp@gnu.org>
5425
5426         Increase warning level.
5427         
5428         * Makefile.am: (AM_CFLAGS) Remove -Wnouninitialized.
5429
5430 Sat Feb 21 17:38:58 WST 2004 John Darrington <john@darrington.wattle.id.au>
5431
5432         * main.c: Added a signal handler for SIGSEGV requesting a bug report.
5433          
5434 Fri Feb 20 23:22:14 2004  Ben Pfaff  <blp@gnu.org>
5435
5436         * dictionary.c: (dict_create_var) Fix root cause of bug worked
5437         around by previous change log entry.
5438         
5439         * compute.c: (lvalue_finalize) Remove workaround from previous
5440         change log entry.
5441
5442 Fri Feb 20 14:37:41 WAST 2004 John Darrington <john@darrington.wattle.id.au>
5443
5444         * compute.c: Fixed a bug where the Format was not getting set for 
5445           computed variables (thus causing a crash when SAVEing).
5446
5447         * Added a test to stop this bug ever coming back
5448
5449 Wed Feb 18 22:21:35 2004  Ben Pfaff  <blp@gnu.org>
5450
5451         Got rid of approx.h.  In general, replaced all references to
5452         approx_eq() by ==, approx_lt() by <, etc.  Other types of changes
5453         noted below.
5454
5455         * Makefile.am: (pspp_SOURCES) Removed approx.h.
5456
5457         * data-out.c: (try_F) Replaced test for approx_eq(number, 0.0) by
5458         test for mag < EPSILON.
5459
5460         * misc.h: Add definition of EPSILON.
5461
5462 Wed Feb 18 21:32:44 2004  Ben Pfaff  <blp@gnu.org>
5463
5464         * vfm.c: (procedure) Add check to prevent recursive call.
5465
5466 Wed Feb 18 21:48:54 WST 2004 John Darrington <john@darrington.wattle.id.au>
5467
5468         * Moved the declarations relating to values to their own header file
5469           (val.h)
5470
5471         * Added levene.c and levene.h
5472
5473         * vars-atr.c: Changed the signature of compare_values to 
5474         take const * arguments.
5475                 
5476         * t-test.q: Changed the structure of struct t_test_proc 
5477        variables now contain their own group statistics information.
5478        Eventually, t_test_proc might get renamed, because it'd be 
5479        applicable to other commands too.
5480
5481 Mon Feb 16 23:15:51 2004  Ben Pfaff  <blp@gnu.org>
5482
5483         * data-out.c: Clean up.  Changed interface of convert_*() to take
5484         either a `double' or a `const char *' instead of a `const union
5485         value *'.  Update all implementations of those interfaces.
5486         (data_out) Use switch statements instead of a table.
5487         (convert_AHEX) Rewrite.
5488
5489         * format.h: Update comment.
5490
5491 Mon Feb 16 22:14:36 2004  Ben Pfaff  <blp@gnu.org>
5492
5493         * q2c.c: (dump_header) Add an Emacs header line to output files
5494         that makes generated .c files read-only by default, to make it
5495         difficult to accidentally change generated files.
5496
5497 Mon Feb 16 22:12:07 2004  Ben Pfaff  <blp@gnu.org>
5498
5499         * frequencies.q: (compare_freq_numeric_a) Compare by frequency,
5500         not bogus a->v.c <=> b->v.c pointer compare.
5501         (compare_freq_alpha_a) Ditto.
5502         (compare_freq_numeric_d) Ditto.
5503         (compare_freq_alpha_d) Ditto.
5504         
5505 Mon Feb 16 22:00:53 2004  Ben Pfaff  <blp@gnu.org>
5506
5507         Changed data_out() to store string data directly into a `union
5508         value''s s member, not indirectly into c.
5509
5510         * crosstabs.q: (output_pivot_table) Use format_short() instead of
5511         data_out().
5512         (table_value_missing) Ditto.
5513         (float_M_suffix) Ditto.
5514         (format_short) New function.
5515
5516         * data-in.h: (data_in_finite_line) Remove inline definition.
5517
5518         * data-list.c: (destroy_dls_var_spec) New function.
5519         (destroy_dls) Rewrite in terms of destroy_dls_var_spec().
5520         (data_list_source_destroy_source) Avoid cast.
5521         (struct repeating_data_trns) New field `id_value'.  Update
5522         comments.
5523         (cmd_repeating_data) Initialize id_value.  Use new
5524         repeating_data_trns_free() for freeing REPEATING DATA
5525         transformations.
5526         (rpd_parse_record) Rewrite support for record ID to be less bogus.
5527         (repeating_data_trns_free) New function.
5528
5529         * data-out.c: (data_out) Change return type to `void' by replacing
5530         error returns by writing a message into the output buffer.
5531         (convert_A) Read from v->s instead of v->c.
5532         (convert_AHEX) Ditto.
5533
5534         * expr-evl.c: Update comment.
5535         (expr_evaluate) Add assertion in OP_STRING case.
5536
5537         * format.h: (macro MAX_FORMATTED_LEN) New macro.
5538
5539         * list.q: (list_cases) Update for new data_out() semantics.
5540
5541         * print.c: (print_trns_proc) Ditto.
5542
5543         * tab.c: (tab_value) Ditto.
5544         (tab_float) Avoid stupid cast.
5545
5546         * var.h: Update comments.
5547         (macro MAX_STRING) New macro.
5548         (macro MAX_ELEMS_PER_VALUE) New macro.
5549
5550         * vars-atr.c: (compare_values) New function.
5551
5552         * vfm.c: (dump_splits) Update for new data_out() semantics.
5553
5554 Mon Feb 16 21:45:47 2004  Ben Pfaff  <blp@gnu.org>
5555
5556         * crosstabs.q: (struct table_entry) Rename v[] to values[].  All
5557         references updated.
5558         (struct crosstab) Rename v[] to vars[].  All references updated.
5559         (hash_table_entry) Replace the hash algorithm and fix a bug at the
5560         same time, which caused the hash value to depend only on a single
5561         value, not all of the variables' values.
5562         
5563 Mon Feb 16 12:49:53 2004  Ben Pfaff  <blp@gnu.org>
5564
5565         Clean up struct dictionary's value_cnt usage.
5566
5567         * dictionary.c: Add a function comment to each function.
5568         (struct dictionary) Rename value_cnt to next_value_idx, which more
5569         accurately reflects its meaning.  All references updated.
5570         (dict_rename_vars) Add assertion.
5571         (dict_get_value_cnt) Rename dict_get_next_value_idx().  All
5572         references updated.
5573         (dict_get_case_size) New function.
5574
5575         * aggregate.c: (create_sysfile) Use dict_get_case_size().
5576
5577         * get.c: (mtf_read_nonactive_records) Ditto.
5578
5579         * sort.c: (allocate_cases) Ditto.
5580         (write_initial_runs) Ditto.
5581         (merge) Ditto.
5582         (merge_once) Ditto.
5583
5584         * vfm.c: (prepare_for_writing) Ditto.
5585         (setup_lag) Ditto.
5586         (lag_case) Ditto.
5587
5588 Mon Feb 16 00:17:55 2004  Ben Pfaff  <blp@gnu.org>
5589
5590         Make vfm.c slightly less grotesque.
5591
5592         * vfm.c: (filter_var) Removed.
5593         (filter_index) Removed.
5594         (FILTERED macro) Removed.
5595         (exclude_this_case) New function.
5596         (process_active_file_write_case) Use exclude_this_case() instead
5597         of FILTERED and inline tests.
5598         (procedure_write_case) Ditto.
5599         (setup_filter) Removed.
5600         (open_active_file) Don't call setup_filter().
5601         (close_active_file) Call dict_get_filter() instead of checking
5602         filter_var.
5603
5604 Mon Feb 16 00:01:53 2004  Ben Pfaff  <blp@gnu.org>
5605
5606         * var.h: (struct variable) Update comments.
5607
5608 Sun Feb 15 23:14:59 2004  Ben Pfaff  <blp@gnu.org>
5609
5610         New functions dict_create_var_assert(), dict_lookup_var_assert().
5611         Converted several dict_*_var()/assert pairs into a single
5612         dict_*_var_assert().
5613
5614         * dictionary.c: (dict_create_var_assert) New function.
5615         (dict_lookup_var_assert) New function.
5616
5617 Sun Feb 15 23:06:08 2004  Ben Pfaff  <blp@gnu.org>
5618
5619         Got rid of "struct long_vec", envector(), devector(), etc.  Added
5620         two members `init', `reinit' to struct variable as a substitute.
5621         
5622         * Makefile.am: (pspp_SOURCES) Removed cases.c, cases.h.
5623         
5624         * cases.c: Removed.
5625
5626         * cases.h: Removed.
5627
5628         * aggregate.c: (parse_aggregate_functions) destvar doesn't need
5629         init.
5630
5631         * autorecode.c: (cmd_autorecode) destvars don't need init.
5632
5633         * compute.c: (lvalue_finalize) Set reinit.
5634
5635         * data-list.c: (fixed_parse_compatible) Don't need init usually.
5636         (dump_fmt_list) Ditto.
5637         (parse_free) Ditto.
5638
5639         * descript.q: (run_z_pass) Don't need init for z-scores.
5640
5641         * dictionary.c: (dict_create_var) Initialize `init', `reinit'
5642         members.
5643         (dict_clone_var) Copy `reinit' member, initialize `init' member.
5644
5645         * glob.c: (init_glob) Remove vec_init() calls.
5646
5647         * inpt-pgm.c: (cmd_end_input_program) Use `reinit', not `left'.
5648         
5649         * loop.c: (internal_cmd_loop) Don't need to call envector().
5650
5651         * numeric.c: (cmd_numeric) Ditto.
5652         (cmd_string) Ditto.
5653         (cmd_leave) Ditto.  Set `init', `reinit' members.
5654
5655         * recode.c: (cmd_recode) Don't need to call envector().
5656
5657         * repeat.c: (internal_cmd_do_repeat) Ditto.
5658
5659         * var.h: (struct variable) Remove `left'.  Add `init', `reinit'.
5660         (force_create_variable) Removed prototype.
5661         (force_dup_variable) Ditto.
5662
5663         * vector.c: (cmd_vector) Don't need to call envector().
5664
5665         * vfm.c: (reinit_sysmis) Removed.
5666         (reinit_blanks) Removed.
5667         (init_zero) Removed.
5668         (init_blanks) Removed.
5669         (process_active_file_write_case) No need to deal with vectors.
5670         Call clear_temp_case().
5671         (vector_initialization) Rewrite to use `init', `reinit'.
5672         (close_active_file) No need to call vec_clear().
5673         (procedure_write_case) Call clear_temp_case().
5674         (clear_temp_case) New function.
5675
5676 Sun Feb 15 20:50:36 2004  Ben Pfaff  <blp@gnu.org>
5677
5678         * pfm-write.c: (bufwrite) Get rid of nasty cast that also invoked
5679         undefined behavior.
5680
5681 Thu Feb 12 23:35:15 2004  Ben Pfaff  <blp@gnu.org>
5682
5683         Add auxiliary argument to procedure() interface.  Associated small
5684         clean-ups of vfm interface.
5685         
5686         * Updated every caller of procedure() and process_active_file() to
5687         reflect modified interface.  Simple, ordinary changes not listed
5688         otherwise below.
5689
5690         * Updated every function that implements struct case_stream's
5691         `read' function to take a write_case_func and a write_case_data.
5692         Also updated every caller of write_case() to instead call them
5693         through these arguments.  In some cases this meant that the extra
5694         args had to be threaded through a couple of extra levels.  This
5695         wasn't difficult or interesting so the details won't be given.
5696
5697         * data-list.c: (struct repeating_data_trns) Add members
5698         `write_case', `wc_data' as kluge.
5699         (read_one_set_of_repetitions) Rename repeating_data_trns_proc and
5700         make non-static.
5701         (repeating_data_set_write_case) New function.
5702
5703         * data-list.h: New file to declare repeating_data_trns_proc() and
5704         repeating_data_set_write_case().
5705
5706         * inpt-pgm.c: (input_program_source_read) Call
5707         repeating_data_set_write_case() for all the REPEATING DATA
5708         transformations, so that they know where to send their cases.
5709         It's a big kluge.  Also kluge in END CASE.
5710         (end_case_trns_proc) Never called anymore, but we still need it,
5711         so just assert(0).
5712
5713         * sort.c: (read_sort_output) Update to match struct case_stream
5714         `read' member.
5715
5716         * vfm.c: (struct write_case_data) New structure.
5717         (proc_func) Removed.
5718         (virt_proc_func) Removed.
5719         (begin_func) Removed.
5720         (virt_begin_func) Removed.
5721         (end_func) Removed.
5722         (write_case) Removed.
5723         (procedure) Added an auxiliary parameter to each function pointer
5724         argument's prototype.  Added an auxiliary data parameter.
5725         Rewrote.
5726         (process_active_file) Ditto.
5727         (process_active_file_write_case) Pass aux data along.
5728         (close_active_file) Ditto.
5729         (procedure_write_case) Ditto.
5730         (SPLIT_FILE_procfunc) Ditto.
5731
5732         * vfm.h: (typedef write_case_data) New.
5733         (typedef write_case_func) New.
5734         (struct case_stream) Add parameters to `read' member prototype.
5735         
5736 Thu Feb 12 19:24:53 WST 2004 John Darrington <john@darrington.wattle.id.au>
5737
5738         * t-test.q:  Added calculations for independent samples. (But no Levene
5739         test yet!)
5740
5741         * Makefile.am: Moved q_sources_c into own variable 
5742
5743 Wed Feb 11 23:56:51 2004  Ben Pfaff  <blp@gnu.org>
5744
5745         Miscellaneous cleanups.
5746         
5747         * Change unused to UNUSED in many source files to reflect modified
5748         pref.h.  Change use of __WIN32__, __MSDOS, __DJGPP__,
5749         __CYGWIN32__, __unix__, and unix not to assume that they're
5750         defined to a nonzero value.  Change use of __attribute__ to use
5751         NO_RETURN or PRINTF_FORMAT instead.
5752         
5753         * alloc.h: Move definitions for local_alloc(), local_free() here
5754         from ../pref.h.orig and simplify.
5755
5756         * expr-evl.c: Instead of working differently based on PAGED_STACK,
5757         use a pool allocator unconditionally.
5758         (CHECK_STRING_SPACE) Removed.
5759         (ALLOC_STRING_SPACE) Removed.
5760         (expr_evaluate) Use e->pool instead of CHECK_STRING_SPACE and
5761         ALLOC_STRING_SPACE.
5762
5763         * expr-opt.c: (dump_expression) Allocate string pool.
5764
5765         * expr-prs.c: (expr_free) Free string pool.
5766
5767         * pool.c: (pool_destroy) This pool must be removed from its
5768         parent's list of gizmos, not from its own.  Use free_all_gizmos().
5769         (pool_clear) New function.
5770         (free_all_gizmos) New function.
5771         (pool_alloc) Use space in empty block after this one if any.
5772         (pool_release) Only empty out blocks, don't actually free() them.
5773
5774         * print.c: Get rid of PAGED_STACK special case by always
5775         dynamically allocating line buffers.
5776         (struct print_trns) Always include the `line' member.
5777         (internal_cmd_print) Always initialize the `line' member.
5778         (alloc_line) Always allocate memory for `line'.
5779         (print_trns_proc) Always initialize buf from `line' member.
5780         (print_trns_free) Always free `line' memory.
5781
5782         * sort.c: (allocate_file_handles) Special-case MS-DOS for mkdir()
5783         call.
5784         
5785 Wed Feb 11 20:33:18 2004  Ben Pfaff  <blp@gnu.org>
5786
5787         * flip.c: Fixed crash from FLIP when a numeric variable is
5788           specified on NEWNAMES and a large value is used, and a couple of
5789           other minor bugs besides.
5790           (struct varname) Make name a 9-character fixed-size array
5791           instead of a 1-character variable size array.
5792           (make_new_var) Allow digits in variable names.
5793           (flip_stream_write) Limit numeric values to 8 characters and
5794           format system missing and very large and small values more
5795           appropriately.
5796
5797 Thu Feb  5 13:19:06 WAST 2004 John Darrington <john@darrington.wattle.id.au>
5798
5799         * command.c: Fixed test on command return status for the correct 
5800           value,  which had been causing a crash under certain invalid input.
5801
5802 Wed Feb  4 15:34:11 WST 2004 John Darrington <john@darrington.wattle.id.au>
5803
5804         * t-test.q: Added calculations for the one sample variant of the T-TEST
5805
5806 Tue Feb  3 20:09:54 2004  Ben Pfaff  <blp@gnu.org>
5807
5808         * tab.c: (render_strip) Fix bug that sometimes caused joined text
5809           in joined cells to be rendered outside box boundaries.
5810
5811 Tue Feb  3 18:56:45 WST 2004 John Darrington <john@darrington.wattle.id.au>
5812
5813         * random.c (rng_create): Fixed seeding so that it gets reseeded after
5814         SET seed=xx has been called.
5815
5816 Mon Jan 19 14:08:09 2004  Ben Pfaff  <blp@gnu.org> 
5817
5818         * random.c (rng_get_double): Fix always-returning-zero bug in my
5819         preferred way, and at the same time make sure rounding doesn't
5820         bite us.
5821
5822 Thu Jan  1 23:16:41 2004  Ben Pfaff  <blp@gnu.org>
5823
5824         * html.c: (change_attributes) Dead code, removed.
5825         (escape_string) Eliminate code to call change_attributes() that
5826         never actually called it.
5827         (output_tab_table) Get rid of dependence on tab_hit
5828         and struct tab_joined_cell's hit member, which are abominations.
5829
5830         * tab.c: (tab_output_text) Don't call
5831         d->class->text_set_font_by_name if it's a null pointer.
5832         (macro UNROLL_LOOP) Eliminate.
5833         (macro UNROLL_3_LOOPS) Eliminate.
5834         (tabi_render) Rewrite not to use the above macros.
5835
5836 Thu Jan  1 23:09:07 2004  Ben Pfaff  <blp@gnu.org>
5837
5838         Start working on a new output driver system, one that doesn't suck
5839         so much, by adding a "device-independent" output driver.  The idea
5840         is to write out only a single output stream, then use separate
5841         processes to translate them into whatever formats we want.  This
5842         is similar to how "groff" works with its various output drivers
5843         (grops, grotty, grodvi, ...).
5844         
5845         * Makefile.am: (pspp_SOURCES) Add devind.c, devind.h.
5846
5847         * list.q: (write_all_headers) Stub out devind class.
5848         (clean_up) Ditto.
5849         (determine_layout) Ditto.
5850         (list_cases) Ditto.
5851
5852         * output.c: (outp_init) Add devind class.
5853
5854         * devind.c: New file.
5855
5856         * devind.h: New file.
5857
5858 Thu Jan  1 23:08:14 2004  Ben Pfaff  <blp@gnu.org>
5859
5860         * frequencies.q: (hash_value_alpha) Fixed up the previous change
5861         to use the proper string length.
5862
5863 Wed Dec 31 16:27:33 WAST 2003 John Darrington <john@darrington.wattle.id.au>
5864
5865         * Fixed bug where FREQ would crash on alpha values
5866
5867 Tue Dec 30 22:42:57 2003  Ben Pfaff  <blp@gnu.org>
5868
5869         * Removed bletcherous alloca() workarounds for AIX from top of
5870         many files.  AIX can use the alternative alloca() implementation
5871         instead.
5872
5873 Tue Dec 30 22:35:16 2003  Ben Pfaff  <blp@gnu.org>
5874
5875         * ascii.c: (ascii_option) Fix implementation of headers option.
5876
5877 Tue Dec 30 22:32:53 2003  Ben Pfaff  <blp@gnu.org>
5878
5879         * ascii.c: Add a "squeeze" option to the ASCII driver to squeeze
5880         multiple blank lines into one.
5881         (struct ascii_driver_ext) Add squeeze_blank_lines option.
5882         (ascii_preopen_driver) Initialize squeeze_blank_lines.
5883         (static var option_tab) Add squeeze entry.
5884         (ascii_option) Set squeeze_blank_lines.
5885         (output_lines) Implement squeezing blank lines.
5886
5887 Wed Dec 31 07:19:46 WST 2003 John Darrington <john@darrington.wattle.id.au>
5888
5889         * Removed redundant code from output.h
5890
5891 Sat Dec 27 22:17:52 2003  Ben Pfaff  <blp@gnu.org>
5892
5893         Dictionary classes: each variable is "ordinary", "system", or
5894         "scratch".
5895
5896         * var.h: (enum dict_class) New enum.
5897
5898         * vars-prs.c: (dict_class_from_id) New function.
5899         (dict_class_to_name) New function.
5900
5901 Sat Dec 27 22:16:06 2003  Ben Pfaff  <blp@gnu.org>
5902
5903         * var.h: (struct freq_tab_set) Removed (not used).
5904
5905 Sat Dec 27 22:15:21 2003  Ben Pfaff  <blp@gnu.org>
5906
5907         * value-labels.c: (val_labs_destroy) vls needs to be freed too.
5908
5909 Sat Dec 27 22:10:49 2003  Ben Pfaff  <blp@gnu.org>
5910
5911         * stats.c: (hypercube) Rename pow4().  All references updated.
5912
5913 Sat Dec 27 22:05:49 2003  Ben Pfaff  <blp@gnu.org>
5914
5915         * rename-vars.c: (cmd_rename_variables) Rewritten.
5916         (compare_name) Removed.
5917
5918 Sat Dec 27 22:03:51 2003  Ben Pfaff  <blp@gnu.org>
5919
5920         var_set feature, and code taking advantage of it.
5921         
5922         * crosstabs.q: (static var var_dict) Removed.
5923         (static var variables) New variable.
5924         (static var variables_cnt) New variable.
5925         (cmd_crosstabs) Free variables instead of var_dict.
5926         (internal_cmd_crosstabs) Initialize and use variables,
5927         variables_cnt instead of var_dict.
5928         (free_var_dict) Removed.
5929         (crs_custom_tables) Use var_set instead of a copied dictionary.
5930         (crs_custom_variables) Set up variables, variables_cnt instead of
5931         var_dict.
5932         [DEBUGGING] (debug_print) Ditto.
5933
5934         * means.q: (mns_custom_tables) Use var_set instead of a copied
5935         dictionary.
5936
5937         * vars-prs.c: (parse_vs_variable) New function.
5938         (parse_dict_variable) Rewritten.
5939         (parse_variable) Rewritten.
5940         (parse_variables) Renamed parse_var_set_vars(), rewritten.
5941         (parse_variables) New function in terms of parse_var_set_vars().
5942         Now requires its first argument to be non-null.  All references
5943         that passed a null pointer updated to pass default_dict instead.
5944         (macro id_dict) Removed.
5945         (parse_DATA_LIST_vars) Add assertions.
5946         (parse_mixed_vars) Ditto.
5947         (struct var_set) New structure.
5948         (var_set_get_cnt) New function.
5949         (var_set_get_var) New function.
5950         (var_set_lookup_var) New function.
5951         (var_set_destroy) New function.
5952         (dict_var_set_get_cnt) New function.
5953         (dict_var_set_get_var) New function.
5954         (dict_var_set_lookup_var) New function.
5955         (dict_var_set_destroy) New function.
5956         (var_set_create_from_dict) New function.
5957         (struct array_var_set) New structure.
5958         (array_var_set_get_cnt) New function.
5959         (array_var_set_get_var) New function.
5960         (array_var_set_lookup_var) New function.
5961         (array_var_set_destroy) New function.
5962         (var_set_create_from_array) New function.
5963
5964         * q2c.c: (dump_parser) Use parse_variables(default_dict, ...)
5965         instead of parse_variables(NULL, ...) in output code.
5966
5967 Sat Dec 27 21:38:53 2003  Ben Pfaff  <blp@gnu.org>
5968
5969         Change inp_init from a 2-bit vector to an ordinary array.
5970         Initialize it all in cmd_end_input_program() instead of in
5971         create_variable().
5972
5973         * inpt-pgm.c: (enum value_init_type) New enum.
5974         (global var inp_init) Change to `enum value_init_type *', make
5975         static.
5976         (inp_init_size) Removed.
5977         (inp_nval) Change to `size_t', make static.
5978         (cmd_input_program) Don't initialize inp_init or inp_init_size.
5979         (cmd_end_input_program) Initialize inp_init, inp_nval.
5980         (init_case) Rewrite.
5981         (clear_case) Rewrite.
5982
5983         * inpt-pgm.h: Removed.
5984
5985 Sat Dec 27 21:36:38 2003  Ben Pfaff  <blp@gnu.org>
5986
5987         * hash.c: (hsh_hash_bytes) Use Fowler-Noll-Vo hash instead of
5988         Colin Plumb hash.  It is simpler and should better resist
5989         collisions.
5990         (hsh_hash_string) Ditto.
5991
5992 Sat Dec 27 21:34:57 2003  Ben Pfaff  <blp@gnu.org>
5993
5994         * get.c: (export_write_case_func) Remove debug printing code.
5995
5996 Sat Dec 27 21:11:09 2003  Ben Pfaff  <blp@gnu.org>
5997
5998         * get.c: (cmd_save_internal) Rename parameter.  Use &t->h instead
5999         of cast.
6000         (save_write_case_func) Use &trns->h instead of cast.
6001         (cmd_export) Use &t->h instead of cast.
6002
6003 Sat Dec 27 20:57:42 2003  Ben Pfaff  <blp@gnu.org>
6004
6005         Moved vectors into the dictionary.
6006
6007         * var.h: (struct vector) Moved here from vector.h.  `index' member
6008         renamed `idx', `v' renamed `var', `nv' renamed `cnt'.  All
6009         references updated.
6010         
6011         * vector.h: Removed.
6012
6013         * vector.c: (global var vec) Removed.
6014         (global var nvec) Removed.
6015         (cmd_vector) Rewritten.
6016         (find_vector) Removed.
6017
6018         * dictionary.c: (dict_create_vector) New function.
6019         (dict_get_vector) New function, replaces reading global vec[]
6020         array.
6021         (dict_get_vector_cnt) New function, replaces reading global nvec
6022         variable.
6023         (dict_lookup_vector) New function, replaces find_vector().
6024         (dict_clear_vectors) New function.
6025
6026 Sat Dec 27 20:54:01 2003  Ben Pfaff  <blp@gnu.org>
6027
6028         Start to move away from `struct variable' p `union' member to void
6029         * aux member.
6030
6031         * var.h: (struct variable) Add `aux' member.
6032
6033 Sat Dec 27 20:36:25 2003  Ben Pfaff  <blp@gnu.org>
6034
6035         Get rid of struct variable `foo' member.
6036
6037         * frequencies.q: (internal_cmd_frequencies) Use p.frq.used instead
6038         of foo.
6039         (frq_custom_variables) Ditto.
6040         (frq_custom_grouped) Ditto.
6041
6042         * get.c: (struct save_trns) Change `var' member from `int *' to
6043         `struct variable **'.
6044         (cmd_save_internal) Use aux instead of foo.
6045         (save_trns_proc) Use revised `var' member.
6046         (static var mtf_seq_no) Renamed mtf_seq_num.
6047         (static var mtf_seq_nums) New static var.
6048         (cmd_match_files) Initialize mtf_seq_nums.
6049         (mtf_free) Free mtf_seq_nums.
6050         (mtf_processing) Use mtf_seq_nums instead of foo.
6051         (mtf_merge_dictionary) No need to initialize mv->foo.
6052         (cmd_export) Use aux instead of foo.  Use revised `var' member.
6053         (mns_custom_tables) Don't use foo to check for duplicates, that's
6054         what PV_NO_DUPLICATE is for.
6055
6056         * var.h: (struct variable) Remove `foo' member.
6057         (struct frequencies_proc) New member.
6058         
6059 Sat Dec 27 19:46:13 2003  Ben Pfaff  <blp@gnu.org>
6060
6061         Clean up COMPUTE and IF.
6062
6063         * compute.c: More or less rewrite the darn thing.
6064         (struct compute_trns) Rename and reorder and add and delete
6065         members.
6066         (cmd_compute) Rewrite.
6067         (compute_num) Make conditional on test expression.  Now used for
6068         both COMPUTE and IF.
6069         (compute_num_vec) Ditto.
6070         (compute_str) Ditto.
6071         (compute_str_vec) Ditto.
6072         (cmd_if) Rewrite.
6073         (if_num) Removed.
6074         (if_num_vec) Removed.
6075         (if_str) Removed.
6076         (if_str_vec) Removed.
6077         (parse_target_expression) Renamed parse_rvalue_expression(),
6078         rewritten.
6079         (new_trns) Renamed compute_trns_create(), rewritten.
6080         (delete_trns) Removed.
6081         (free_trns) Renamed compute_trns_free(), rewritten.
6082         (struct lvalue) New structure.
6083         (parse_var_or_vec) Renamed lvalue_parse(), rewritten.
6084         (lvalue_get_type) New function.
6085         (lvalue_is_vector) New function.
6086         (lvalue_finalize) New function.
6087         (lvalue_destroy) New function.
6088         
6089 Sat Dec 27 19:44:14 2003  Ben Pfaff  <blp@gnu.org>
6090
6091         * command.def: Disallow MODIFY VARS in input mode, so that
6092         variables can't get dropped and confuse cmd_end_input_program()'s
6093         attempt to fill inp_init[].
6094         
6095         * modify-vars.c: (static var forward_positional_ordering) New
6096         variable.
6097         (struct var_modification) Entirely changed.
6098         (rearrange_dict) Interface changed, rewritten.
6099         (cmd_modify_vars) Deal with modified struct var_modification, much
6100         rewritten.
6101         (struct var_renaming) New structure.
6102         (compare_var_renaming_by_new_name) New function.
6103         (validate_var_modification) New function.
6104
6105         * var.h: (struct modify_vars_proc) Removed.
6106         (struct variable) Removed member p.mfv.
6107
6108 Sat Dec 27 19:40:26 2003  Ben Pfaff  <blp@gnu.org>
6109
6110         Make EVALUATE a valid command whether we're debugging or not, so
6111         that `make check' can succeed regardless of whether debugging is
6112         turned on.
6113         
6114         * command.def: [GLOBAL_DEBUGGING] Drop the #if.
6115
6116         * compute.c: [GLOBAL_DEBUGGING] (cmd_evaluate) Drop the #if.
6117
6118 Sat Dec 27 19:34:40 2003  Ben Pfaff  <blp@gnu.org>
6119
6120         * apply-dict.c: (cmd_apply_dictionary) Replace a ghastly switch
6121         statement by a simple if test.
6122
6123         * dfm.c: (dfm_get_record) Add assertion.
6124
6125 Sat Dec 27 17:51:26 2003  Ben Pfaff  <blp@gnu.org>
6126
6127         For each file x.c, move #include "x.h" to the very top of the
6128         include list, to catch x.h failing to include the proper headers.
6129
6130 Sat Dec 27 17:50:19 2003  Ben Pfaff  <blp@gnu.org>
6131
6132         * algorithm.c: (find) New function.
6133         (remove_equal) New function.
6134         (set_difference) New function.
6135         (adjacent_find_equal) New function.
6136         [TEST_UNIQUE] Removed test case.
6137         (copy_if) Find end test.
6138
6139 Sat Dec 27 17:42:45 2003  Ben Pfaff  <blp@gnu.org>
6140
6141         * dictionary.c: (dict_get_case_weight) New convenience function.
6142
6143         * aggregate.c: (accumulate_aggregate_info) Use
6144         dict_get_case_weight().
6145
6146         * frequencies.q: (calc_general) Ditto.
6147         (calc_integer) Ditto.
6148         (calc) Ditto.
6149
6150         * t-test.q: (groups_calc) Ditto.
6151         (z_calc) Ditto.
6152
6153 Sat Dec 27 17:29:45 2003  Ben Pfaff  <blp@gnu.org>
6154
6155         * glob.c: (global var default_dict) Change from `struct
6156         dictionary' to `struct dictionary *'.  All references changed.
6157         (init_glob) Initialize default_dict with dict_create().
6158
6159 Sat Dec 27 17:06:06 2003  Ben Pfaff  <blp@gnu.org>
6160
6161         struct dictionary now made opaque.  All related functions:
6162
6163         * get.c: (rename_variables) Removed.
6164         (dict_delete_run) Removed.
6165         
6166         * temporary.c: (copy_variable) Removed.
6167         (new_dictionary) Removed.
6168         (save_dictionary) Removed.
6169         (restore_dictionary) Removed.
6170         (free_dictionary) Removed.
6171
6172         * vars-atr.c: (clear_default_dict) Removed.
6173         (find_variable) Removed.
6174         (find_dict_variable) Removed.
6175         (create_variable) Removed.
6176         (delete_variable) Removed.
6177         (common_init_stuff) Removed.
6178         (init_variable) Removed.  Updating of inp_init moved into
6179         cmd_end_input_program().
6180         (replace_variable) Removed.
6181         (rename_variable) Removed.
6182         (clear_variable) Removed.
6183         (dup_variable) Removed.
6184
6185         * vars-prs.c: (is_varname) Removed.
6186         (is_dict_varname) Removed.
6187         (fill_all_vars) Removed.
6188
6189         * vector.c: (find_vector) Removed.
6190
6191         * weight.c: (stop_weighting) Removed.
6192
6193         * dictionary.c: New file.
6194         (dict_create) New, replaces new_dictionary().
6195         (dict_clone) New, replaces save_dictionary() and
6196         restore_dictionary().
6197         (dict_clear) New, replaces clear_default_dict().
6198         (dict_destroy) New, replaces free_dictionary().
6199         (dict_get_var_cnt) New function, replaces references to
6200         dict->nvar.
6201         (dict_get_var) New function, replaces references to dict->var[i].
6202         (dict_get_vars) New function, replaces fill_all_vars().
6203         (dict_create_var) New, replaces create_variable().  Interface
6204         drops `type' parameter, using a zero `width' to designate numeric.
6205         (dict_clone_var) New, replaces dup_variable().
6206         (dict_rename_var) New, replaces rename_variable().
6207         (dict_lookup_var) New, replaces find_variable(),
6208         find_dict_variable(), is_varname().
6209         (dict_contains_var) New function.
6210         (compare_variable_dblptrs) New function.
6211         (dict_delete_var) New function, replaces clear_variable().
6212         (dict_delete_vars) New function, replaces dict_delete_run().
6213         (dict_reorder_vars) New function.
6214         (dict_rename_vars) New function, replaces rename_variables().
6215         (dict_get_weight) New function, replaces reading dict->weight_var.
6216         (dict_set_weight) New function, replaces writing dict->weight_var
6217         or calling stop_weight(dict).
6218         (dict_get_filter) New function, replaces reading dict->filter_var.
6219         (dict_set_filter) New function, replaces writing dict->filter_var.
6220         (dict_get_case_limit) New function, replaces reading dict->N.
6221         (dict_set_case_limit) New function, replaces writing dict->N.
6222         (dict_get_value_cnt) New function, replaces reading dict->nval.
6223         (dict_compact_values) New function, replaces a loop that was
6224         replicated in several places.
6225         (dict_get_split_vars) New function, replaces reading dict->splits.
6226         (dict_get_split_cnt) New function, replaces reading
6227         dict->n_splits.
6228         (dict_set_split_vars) New function, replaces writing dict->splits.
6229         (dict_get_label) New function, replaces reading dict->label.
6230         (dict_set_label) New function, replaces writing dict->label.
6231         (dict_get_documents) New function, replaces reading
6232         dict->documents.
6233         (dict_set_documents) New function, replaces writing
6234         dict->documents.
6235         
6236         All references to above functions updated.
6237         
6238         * aggregate.c: (cmd_aggregate) Copy file label and documents from
6239         old dictionary to new by hand, because dict_create() can't do it
6240         itself.  Use dict_set_documents(), dict_set_split_vars().
6241
6242         * temporary.c: (cancel_temporary) Also set temp_dict to NULL after
6243         calling dict_destroy().
6244
6245         * data-list.c: (dls_var_spec) Remove `type' member, replace by
6246         `width'.
6247         (fixed_parse_compatible) Some slightly nontrivial changes for
6248         dict_create_var().
6249         (dump_fmt_list) Ditto.
6250         (parse_free) Ditto.
6251
6252         * file-type.c: (create_col_var) Ditto.
6253
6254         * get.c: (cmd_get) Use dict_compact_values() instead of a loop.
6255         (trim_dictionary) Use dict_delete_vars(), dict_reorder_vars().
6256         (rename_variables) Use dict_rename_vars().
6257         (mtf_merge_dictionary) Use dict_get_documents(),
6258         dict_set_documents(), dict_compact_values().
6259
6260         * pfm-read.c: (read_variables) Deal with changes to weighting.
6261
6262         * q2c.c: (dump_parser) Use dict_lookup_var() instead of
6263         is_varname() in output code.
6264
6265         * sfm-read.c: (read_header) Use dict_create(), dict_set_label(),
6266         other dictionary functions.
6267
6268         * title.c: (add_document_line) Use dict_get_documents(),
6269         dict_set_documents().
6270
6271         * vars-atr.c: (discard_variables) Use dict_clear(default_dict),
6272         reset default_handle by hand.  dict_clear() will clear vectors so
6273         there's no need for that by hand.
6274
6275         * vfm.c: (close_active_file) Move call to finish_compaction()
6276         earlier, so that we can do the compaction as a single step using
6277         dict_compact_values().  Use dict_clear_vectors().
6278         (finish_compaction) Use dict_delete_var(), dict_compact_values().
6279                 
6280         Some functions don't have replacements:
6281
6282         * vars-atr.c: (force_create_variable) Removed.  All references
6283         updated to dict_create_var() followed by an assertion.
6284         (force_dup_variable) Removed.  All references updated to
6285         dict_clone_var() followed by an assertion.
6286         
6287         * weight.c: (update_weighting) Removed.  No longer necessary, so
6288         all references removed.
6289
6290 Sat Dec 27 16:43:01 2003  Ben Pfaff  <blp@gnu.org>
6291
6292         Clean up AGGREGATE.
6293         
6294         * aggregate.c: Eliminate separation of weighted and unweighted
6295         case.  It made the code too obscure and I doubt it was actually
6296         faster.  Instead, all code uses the "weighted" code, because
6297         that's a generalization of the "unweighted" code.
6298         (FWEIGHT) Removed.
6299         (FOPTIONS) Ditto.
6300         (parse_aggregate_functions) No need to set FWEIGHT.
6301         (accumulate_aggregate_info) Get rid of FWEIGHT cases.
6302         (dump_aggregate_info) Ditto.
6303         (initialize_aggregate_info) No need for special plain_function
6304         that gets rid of FWEIGHT option.
6305
6306         * aggregate.c: Get rid of approximations.
6307         (accumulate_aggregate_info) Don't use approx_gt(), approx_lt(),
6308         approx_in_range().
6309         (aggregate_single_case) Don't use approx_ne().
6310
6311 Sat Dec 27 16:19:36 2003  Ben Pfaff  <blp@gnu.org>
6312
6313         * ascii.c (ascii_line_width): Dead code, removed.
6314
6315         * postscript.c (ps_line_width): Ditto.
6316
6317         * q2c.c (xrealloc): Ditto.
6318
6319         * count.c (internal_cmd_count): Ditto.
6320
6321         * means.q (validate_dependent_endpoint): Ditto.
6322
6323         * set.q: (cmd_gset) Ditto.
6324
6325         * weight.c: [0] (weight_trns_proc) Ditto.
6326
6327 Sat Dec 27 16:18:16 2003  Ben Pfaff  <blp@gnu.org>
6328
6329         Make the code -Wmissing-prototypes clean.
6330
6331         * Makefile.am (version.c): Add #include "version.h".
6332         
6333         * ascii.c: (ascii_open_global) Make static.
6334         (ascii_close_page) Ditto.
6335         (ascii_font_sizes) Ditto.
6336         (ascii_postopen_driver) Ditto.
6337         (ascii_close_driver) Ditto.
6338         (ascii_option) Ditto.
6339         (ascii_open_page) Ditto.
6340         (ascii_line_horz) Ditto.
6341         (ascii_line_vert) Ditto.
6342         (ascii_line_intersection) Ditto.
6343         (ascii_box) Ditto.
6344         (ascii_polyline_begin) Ditto.
6345         (ascii_polyline_point) Ditto.
6346         (ascii_polyline_end) Ditto.
6347         (ascii_text_set_font_by_name) Ditto.
6348         (ascii_text_set_font_by_position) Ditto.
6349         (ascii_text_set_font_by_family) Ditto.
6350         (ascii_text_get_font_name) Ditto.
6351         (ascii_text_get_font_family) Ditto.
6352         (ascii_text_set_size) Ditto.
6353         (ascii_text_get_size) Ditto.
6354         (ascii_text_metrics) Ditto.
6355         (ascii_text_draw) Ditto.
6356         (ascii_close_page) Ditto.
6357
6358         * cmdline.h: New header for parse_command_line().  Used where
6359         needed.
6360
6361         * command.c: Move prototypes for cmd_*() functions to command.h.
6362
6363         * command.h: Prototypes for cmd_*() functions moved here from
6364         command.c.
6365
6366         * crosstabs.q: (gamma_int) Ditto.
6367
6368         * file-handle.h: Add fh_init_files() prototype.
6369         
6370         * getline.c: (welcome) Ditto.
6371
6372         * glob.h: New header for init_glob().  Used where appropriate.
6373
6374         * hash.c: (comparison_helper) Ditto.
6375
6376         * html.c: (html_open_global) Ditto.
6377         (html_close_global) Ditto.
6378         (html_preopen_driver) Ditto.
6379         (html_postopen_driver) Ditto.
6380         (html_close_driver) Ditto.
6381         (html_option) Ditto.
6382         (html_open_page) Ditto.
6383         (html_close_page) Ditto.
6384         (html_submit) Ditto.
6385
6386         * inpt-pgm.c: (input_program_source_read) Ditto.
6387
6388         * output.c: (find_defn_value) Ditto.
6389         (destroy_list) Ditto.
6390
6391         * pfm-read.c: (read_int) Ditto.
6392
6393         * postscript.c: (ps_open_global) Ditto.
6394         (ps_close_global) Ditto.
6395         (ps_font_sizes) Ditto.
6396         (ps_preopen_driver) Ditto.
6397         (ps_postopen_driver) Ditto.
6398         (ps_close_driver) Ditto.
6399         (ps_option) Ditto.
6400         (ps_open_page) Ditto.
6401         (ps_close_page) Ditto.
6402         (ps_line_horz) Ditto.
6403         (ps_line_vert) Ditto.
6404         (ps_line_intersection) Ditto.
6405         (ps_box) Ditto.
6406         (ps_polyline_begin) Ditto.
6407         (ps_polyline_point) Ditto.
6408         (ps_polyline_end) Ditto.
6409         (ps_text_set_font_by_name) Ditto.
6410         (ps_text_set_font_by_position) Ditto.
6411         (ps_text_set_font_family) Ditto.
6412         (ps_text_get_font_name) Ditto.
6413         (ps_text_get_font_family) Ditto.
6414         (ps_text_set_size) Ditto.
6415         (ps_text_get_size) Ditto.
6416         (ps_text_metrics) Ditto.
6417         (ps_text_draw) Ditto.
6418
6419         * q2c.c: (finish_up) Ditto.
6420         (xmalloc) Ditto.
6421         (xstrdup) Ditto.
6422         (get_buffer) Ditto.
6423         (st_lower) Ditto.
6424         (st_upper) Ditto.
6425         (skip_ws) Ditto.
6426         (get_line) Ditto.
6427         (add_symbol) Ditto.
6428         (find_symbol) Ditto.
6429         (lex_get) Ditto.
6430         (force_id) Ditto.
6431         (force_string) Ditto.
6432         (match_id) Ditto.
6433         (match_token) Ditto.
6434         (skip_token) Ditto.
6435         (parse) Ditto.
6436         (parse_setting) Ditto.
6437         (parse_specifier) Ditto.
6438         (parse_specifiers) Ditto.
6439         (parse_subcommand) Ditto.
6440         (dump_specifier_vars) Ditto.
6441         (is_keyword) Ditto.
6442         (make_identifier) Ditto.
6443         (dump_declarations) Ditto.
6444         (dump_specifier_init) Ditto.
6445         (dump_vars_init) Ditto.
6446         (make_match) Ditto.
6447         (dump_specifier_parse) Ditto.
6448         (dump_subcommand) Ditto.
6449         (dump_parser) Ditto.
6450         (dump_header) Ditto.
6451         (dump_free) Ditto.
6452         (recognize_directive) Ditto.
6453
6454         * recode.c: (string_to_long) Ditto.
6455
6456         * repeat.c: (find_DO_REPEAT_substitution) Ditto.
6457
6458         * repeat.h: New header for perform_DO_REPEAT_substitutions, used
6459         where appropriate.
6460
6461         * sort.c: (sort_stream_read) Ditto.
6462         (sort_stream_mode) Ditto.
6463         
6464 Fri Dec 19 23:35:04 2003  Ben Pfaff  <blp@gnu.org>
6465
6466         * algorithm.c (binary_search): Fix comparison.
6467
6468 Fri Dec 19 23:27:45 2003  Ben Pfaff  <blp@gnu.org>
6469
6470         * algorithm.c: (binary_search) Fix assertion.
6471
6472 Fri Dec 19 21:31:48 2003  Ben Pfaff  <blp@gnu.org>
6473
6474         * sysfile-info.c: (compare_vectors_by_name) Rewrite.
6475
6476 Fri Dec 19 21:30:24 2003  Ben Pfaff  <blp@gnu.org>
6477
6478         * sort.c: (compare_case_lists) Rewrite.
6479
6480 Fri Dec 19 16:44:22 2003  Ben Pfaff  <blp@gnu.org>
6481
6482         * quicksort.c: Removed (not used).
6483
6484         * quicksort.h: Removed (not used).
6485
6486         * sort.c: Removed blp_quicksort() prototype.
6487
6488 Fri Dec 19 16:42:13 2003  Ben Pfaff  <blp@gnu.org>
6489
6490         * postscript.c: (int_2_compare) Rewrite.
6491         (compare_line) Rewrite.
6492
6493 Fri Dec 19 16:38:35 2003  Ben Pfaff  <blp@gnu.org>
6494
6495         * matrix-data.c (compare_factors) Use lexicographical_compare()
6496         algorithm.
6497         (compare_doubles) New function.
6498         
6499         * algorithm.c: (lexicographical_compare) New algorithm.
6500
6501 Fri Dec 19 16:23:45 2003  Ben Pfaff  <blp@gnu.org>
6502
6503         * matrix-data.c (compare_variables_by_mxd_vartype): Rewrite.
6504
6505 Fri Dec 19 15:54:45 2003  Ben Pfaff  <blp@gnu.org>
6506
6507         * expr-prs.c: (cmp_func) Removed.
6508         (parse_function) Use binary_search() algorithm.
6509         (compare_functions) New function.
6510         (init_func_tab) Use sort() algorithm.
6511
6512         * algorithm.c: (binary_search) New algorithm.
6513
6514 Fri Dec 19 15:50:45 2003  Ben Pfaff  <blp@gnu.org>
6515
6516         * descript.q: (display) Use sort() algorithm instead of qsort().
6517         (compare_func) Removed.
6518         (descriptives_compare_variables) New function.
6519
6520 Fri Dec 19 15:08:38 2003  Ben Pfaff  <blp@gnu.org>
6521
6522         Get rid of AVL trees.  Hashes are more appropriate for everything
6523         PSPP does.
6524
6525         * Makefile.am: (pspp_SOURCES) Remove avl.c, avl.h.
6526         
6527         * avl.c: Removed.
6528
6529         * avl.h: Removed.
6530
6531 Fri Dec 19 14:33:31 2003  Ben Pfaff  <blp@gnu.org>
6532
6533         Much code can be clarified by using C++ STL-like algorithms.  Not
6534         all uses of these algorithms are listed below, only the ones where
6535         the change to an algorithm was the only change of interest.
6536         
6537         * Makefile.am: (pspp_SOURCES) Add algorithm.c, algorithm.h.
6538         
6539         * algorithm.c: New file.
6540
6541         * algorithm.h: New file.
6542
6543         * modify-vars.c: (static var forward) Removed.
6544         (static var positional) Removed.
6545         (compare_variables) Removed.
6546         (struct ordering) New.
6547         (cmd_modify_vars) Use sort() algorithm.
6548         (compare_variables_given_ordering) New function.
6549         (rearrange_dict) Use sort() algorithm.
6550
6551         * sysfile-info.c: (cmd_display) Use sort() algorithm.
6552         (cmp_var_by_name) Removed.
6553
6554 Fri Dec 19 14:26:17 2003  Ben Pfaff  <blp@gnu.org>
6555
6556         Make file handles use a hash table.
6557         
6558         * file-handle.q: (files) Change to hash table, make static.
6559         (cmd_file_handle) Use hash table functions.
6560         (fh_get_handle_by_filename) Ditto.
6561         (fh_get_handle_by_name) Ditto.
6562         (hash_file_handle) New function.
6563         (cmp_file_handle) Rewrite.
6564         (fh_init_files) Use hash table functions.
6565
6566 Fri Dec 19 14:24:38 2003  Ben Pfaff  <blp@gnu.org>
6567
6568         Clean up FREQUENCIES.
6569         
6570         * Makefile.am: (pspp_SOURCES) Remove frequencies.g.
6571
6572         * frequencies.q: Remove a lot of old #if'd out code at the end.
6573         (internal_cmd_frequencies) Use calc() instead of calc_no_weight()
6574         or calc_weight().  Initialize percentile_values.
6575         (calc) New function based on calc_weight() from frequencies.g.
6576         (precalc) Use hash functions.
6577         (static var comparison_func) Removed.
6578         (static var comparison_param) Removed.
6579         (comparison_helper) Removed.
6580         (get_freq_comparator) New function.
6581         (not_missing) New function.
6582         (add_freq) Removed.
6583         (postprocess_freq_tab) Use hash table functions, algorithms,
6584         get_freq_comparator().  Rewrite.
6585         (cleanup_freq_tab) Rephrase.
6586         (add_percentile) Clean up spacing.
6587         (hash_value_numeric) New function.
6588         (hash_value_alpha) New function.
6589         (compare_value_numeric_a) Rewrite.
6590         (compare_value_alpha_a) Rewrite.
6591         (compare_value_numeric_d) Rewrite.
6592         (compare_value_alpha_d) Rewrite.
6593         (compare_freq_numeric_a) Rewrite.
6594         (compare_freq_alpha_a) Rewrite.
6595         (compare_freq_numeric_d) Rewrite.
6596         (compare_freq_alpha_d) Rewrite.
6597         (calc_stats) Clean up mode, percentiles, max.
6598         (dump_statistics) Clean up spacing.
6599         
6600         * frequencies.g: Removed.
6601
6602         * var.h: (struct freq_tab) Change `data' to hash table.
6603
6604 Fri Dec 19 14:15:46 2003  Ben Pfaff  <blp@gnu.org>
6605
6606         * file-handle.h: Remove declaration of global variable `files',
6607         which wasn't used anywhere.
6608
6609         * postscript.c: (add_encoding) Remove superfluous cast.
6610         (line) Ditto.
6611
6612         * sfm-read.c: [linux] (bswap_int32) Drop ntohl() non-portable
6613         version.
6614
6615         * temporary.c: [0] (display_tree) Removed.
6616
6617 Fri Dec 19 14:13:04 2003  Ben Pfaff  <blp@gnu.org>
6618
6619         Implement a new random number generator based on the alleged RC4
6620         algorithm.
6621
6622         * expr-evl.c: (expr_evaluate) Use rng_get_double_normal() instead
6623         of rand_normal().
6624
6625         * random.c: [!HAVE_GOOD_RANDOM] (real_rand) Removed.
6626         [!HAVE_GOOD_RANDOM] (real_srand) Removed.
6627         (macro k) Removed.
6628         (static var V[]) Removed.
6629         (static var Y) Removed.
6630         (static var X2) Removed.
6631         (setup_randomize) Removed.
6632         (shuffle) Removed.
6633         (rand_uniform) Removed.
6634         (rand_normal) Removed.
6635         (struct rng) New structure.
6636         (rng_create) New function.
6637         (rng_destroy) New function.
6638         (swap_byte) New static function.
6639         (rng_seed) New function.
6640         (rng_get_bytes) New function.
6641         (rng_get_int) New function.
6642         (rng_get_unsigned) New function.
6643         (rng_get_double) New function.
6644         (rng_get_double_normal) New function.
6645         (pspp_rng) New function.
6646
6647         * random.h: Sync up to random.c.
6648
6649         * sample.c: (struct sample_trns) Make `frac' unsigned and a
6650         fraction of UINT_MAX, not 65536.
6651         (cmd_sample) Use rng_get_unsigned(), rng_get_double(), UINT_MAX
6652         fraction.
6653
6654         * vfm.c: (open_active_file) No need to call setup_randomize() any
6655         longer.
6656
6657 Fri Dec 19 12:05:56 2003  Ben Pfaff  <blp@gnu.org>
6658
6659         Change dictionary name indexes to use hash tables instead of AVL
6660         trees.
6661
6662         * crosstabs.q: (free_var_dict) Use hash tables.
6663         (crs_custom_tables) Ditto.
6664         (calc_general) Ditto.
6665         (compare_table_entry) Rewrite.
6666         (enum_var_values) Reorder parameters.  All references updated.
6667         Rewrite.
6668
6669         * get.c: (rename_variable) Use hash tables.
6670         (mtf_merge_dictionary) Ditto.
6671
6672         * glob.c: (init_glob) Use hash tables.
6673         (cmp_variable) Removed.
6674
6675         * means.q: (mns_custom_tables) Use hash tables.
6676
6677         * modify-vars.c: (rearrange_dict) Use hash tables.
6678
6679         * rename-vars.c: (cmd_rename_variables) Use hash tables.
6680
6681         * sfm-read.c: (read_header) Use hash tables.
6682         (read_variables) Ditto.
6683
6684         * temporary.c: (new_dictionary) Use hash tables.
6685         (save_dictionary) Ditto.
6686         (restore_dictionary) Ditto.
6687
6688         * var.h: (struct dictionary) Change AVL tree `var_by_name' into
6689         hash table `name_tab'.
6690
6691         * vars-atr.c: [DEBUGGING] (dump_one_var_node) Removed.
6692         [DEBUGGING] (dump_var_tree) Removed.
6693         (find_variable) Use hash tables.
6694         (find_dict_variable) Ditto.
6695         (common_init_stuff) Ditto.
6696         (rename_variable) Ditto.
6697         (clear_variable) Ditto.  Also, remove debug code.
6698         (dup_variable) Use hash tables.
6699
6700         * vars-prs.c: (fill_all_vars) Use hash tables.
6701         (is_dict_varname) Ditto.
6702         (parse_dict_variable) Ditto.
6703         
6704 Fri Dec 19 11:46:23 2003  Ben Pfaff  <blp@gnu.org>
6705
6706         Change value labels to use hash tables instead of AVL trees, and
6707         change value labels into an ADT.
6708
6709         * Makefile.am: (pspp_SOURCES) Add value-labels.c, value-labels.h.
6710         
6711         * value-labels.c: New file.
6712
6713         * value-labels.h: New file.
6714
6715         * apply-dict.c: (cmd_apply_dictionary) Use value label ADT.
6716         Get rid of a stupid use of goto.
6717
6718         * autorecode.c: (compare_alpha_value) Rewrite.
6719         (hash_alpha_value) Ditto.
6720         (compare_numeric_value) Rewrite.
6721         (hash_numeric_value) Ditto.
6722
6723         * frequencies.q: (dump_full) Use value label ADT.
6724
6725         * pfm-read.c: (read_value_label) Use value label ADT.
6726
6727         * pfm-write.c: (write_value_labels) Use value label ADT.
6728
6729         * sfm-read.c: (read_variables) Use value label ADT.
6730         (read_value_labels) Rewrite.
6731
6732         * sfm-write.c: (write_value_labels) Rewrite.
6733
6734         * sysfile-info.c: (cmd_sysfile_info) Use value label ADT.
6735         (display_variables) Ditto.
6736         (describe_variable) Ditto.
6737
6738         * t-test.q: (print_t_groups) Use value label ADT.
6739
6740         * temporary.c: (copy_variable) Use value label ADT.
6741         (free_dictionary) Ditto.
6742
6743         * val-labs.c: (verify_val_labs) Use value label ADT.
6744         (get_label) Ditto.
6745         (debug_print) Ditto.
6746         (val_lab_cmp) Removed.
6747         (inc_ref_count) Removed.
6748         (copy_value_labels) Removed.
6749
6750         * var.h: (struct value_label) Removed.
6751         (struct variable) Change AVL tree `val_lab' into hash table
6752         `val_labs'.
6753
6754         * vars-atr.c: (init_variable) Use value label ADT.
6755         (clear_variable) Ditto.
6756         (free_value_label) Removed.
6757         (free_val_lab) Removed.
6758         (get_val_lab) Removed.
6759         (compare_variables) New function.
6760         (hash_variable) New function.
6761
6762         * vfm.c: (dump_splits) Use value label ADT.
6763
6764 Fri Dec 19 11:18:11 2003  Ben Pfaff  <blp@gnu.org>
6765
6766         Add to the hash table interface.
6767
6768         * hash.c: (hsh_hash_bytes) Add assertion.
6769         (hsh_hash_string) Ditto.
6770         (hsh_clear) Ditto.
6771         (hsh_rehash) Ditto.
6772         (hsh_probe) Ditto.
6773         (hsh_create) Ditto.  Also make minimum `size'.
6774         (hsh_destroy) Rephrase.
6775         (sort_nulls_last) Removed.
6776         (not_null) New function.
6777         (hsh_data) Ditto.
6778         (comparison_helper) Ditto.
6779         (hsh_sort) Rewritten.
6780         (hsh_data_copy) New function.
6781         (hsh_sort_copy) Ditto.
6782         (hsh_insert) Ditto.
6783         (hsh_replace) Ditto.
6784         (hsh_hash_double) Ditto.
6785         (hsh_delete) Fix stupid bug.
6786         
6787 Thu Dec 18 12:27:03 WAST 2003 John Darrington <john@darrington.wattle.id.au>
6788         * added a calculation of the mode to FREQUENCIES
6789
6790 Wed Dec 17 12:53:01 WAST 2003 John Darrington <john@darrington.wattle.id.au>
6791
6792         * moved (un)defs of DEBUGGING to config.h
6793
6794 Mon Dec 15 21:35:59 2003  Ben Pfaff  <blp@gnu.org>
6795
6796         * groff-font.c: (add_kern) Fix indentation.
6797         (add_kern) Use & instead of % to take power-of-2 modulus.
6798         (font_get_kern_adjust) Likewise.
6799
6800 Fri Dec 12 23:54:37 2003  Ben Pfaff  <blp@gnu.org>
6801
6802         * autorecode.c: (recode) Replace stupid use of memcpy() by
6803         memberwise copy.
6804         (hash_alpha_value) Use hsh_hash_bytes().  Get rid of nasty casts.
6805         (hash_numeric_value) Ditto.
6806         (autorecode_proc_func) pool_strdup() was wrong here because the
6807         source string was not null-terminated.  Use new pool_strndup()
6808         instead.
6809
6810         * crosstabs.q: (enum_var_values) Remove superfluous and bizarre
6811         use of hsh_iterator_init().
6812
6813         * data-in.c: (parse_N) Initialize i->v->f.
6814
6815         * flip.c: (cmd_flip) Use memmove(), not memcpy(), to copy
6816         overlapping arrays.
6817
6818         * groff-font.c: Use power-of-2 hash table sizes, not prime.
6819         (groff_read_font) Don't call hsh_next_prime().  Don't call
6820         fclose(NULL).
6821         (static var hash) Remove `size_p', `max_used' members.
6822         (font_char_name_to_index) Don't call hsh_next_prime().  Use
6823         hsh_hash_string() instead of hashpjw(), & instead of %.
6824         (default_font) Don't call hsh_next_prime().
6825
6826         * pool.c: (pool_strndup) New function.
6827         (pool_strdup) Reimplement in terms of pool_strndup.
6828
6829         * postscript.c: (hash_font_entry) Use hsh_hash_string().  Get rid
6830         of nasty casts.
6831         (hash_ps_encoding) Use hsh_hash_string().
6832         (hash_ps_combo) Use hsh_hash_string(), hsh_hash_int().
6833         (hash_filename2font) Use hsh_hash_string().
6834
6835         * som.c: Add #include <stdlib.h>.
6836
6837         * tab.c: (tab_destroy) Don't set t->container after freeing `t'
6838         (by destroying its pool).
6839         
6840 Fri Dec 12 23:18:59 2003  Ben Pfaff  <blp@gnu.org>
6841
6842         Miscellaneous hash table code cleanup:
6843         
6844         * hash.h: (struct hsh_table) Moved into hash.c.
6845         (hsh_count) Ditto, and transformed into function.
6846         (hsh_compare_func) New typedef, used for defining otherwise-long
6847         function types here and in hash.c
6848         (hsh_hash_func) Ditto.
6849         (hsh_free_func) Ditto.
6850         
6851         * hash.c: (struct hsh_table) Renamed `n' to `used', `m' to `size',
6852         `table' to `entries'.  Removed `mp'.  All references updated.
6853         (hsh_clear) Don't shrink entries array; if the hash was this big
6854         once, it probably will be again.
6855         (hsh_rehash) Made static.
6856         (force_hsh_insert) Renamed hsh_force_insert.
6857         (force_hsh_find) Renamed hsh_force_find.
6858
6859         Made hash table sizes powers of 2, because that's fine with any
6860         reasonable hash function and because taking a power-of-2 modulus
6861         is faster than any other:
6862         
6863         (hsh_prime_tab) Removed;
6864         (hsh_next_prime) Ditto.
6865         (next_power_of_2) New function.
6866         (hsh_create) Use next_power_of_2.
6867         (hsh_rehash) Use & instead of %.
6868
6869         Cleaned up hsh_sort:
6870         
6871         (internal_comparison_fn) Removed.
6872         (sort_nulls_last) New function.
6873         (hsh_sort) Removed second parameter, switched to using the new
6874         quicksort() function from quicksort.h to avoid using nasty need
6875         for static variables with qsort().  All references updated.
6876
6877         Changed the hash functions offered, because there are better hash
6878         functions than the ones we had, and cleaned up the names to boot:
6879         
6880         * hash.c: (hashpjw_d) Removed.
6881         (hashpjw) Ditto.
6882         (hsh_hash_bytes) New function.
6883         (hsh_hash_string) New function.
6884         (hsh_hash_int) New function.
6885
6886         Improved the hash table iteration interface:
6887         
6888         * hash.h: (hsh_iterator_init) Removed.
6889         (struct hsh_iterator) Removed `init' member, change `next' to
6890         size_t.
6891
6892         * hash.c: (hsh_foreach) Removed.  All references updated to use
6893         hsh_first/hsh_next instead.
6894         (hsh_first) New function.  Notably, unlike hsh_foreach() it does
6895         not treat a null pointer as an empty hash table.
6896         (hsh_next) New function.
6897
6898         Made deletion possible, though slow:
6899
6900         * hash.c: (locate_matching_entry) New function.
6901         (hsh_find) Use locate_matching_entry().
6902         (hsh_delete) New function also using locate_matching_entry().
6903         (hsh_force_delete) New function.
6904
6905 Fri Dec 12 23:16:10 2003  Ben Pfaff  <blp@gnu.org>
6906
6907         * quicksort.c: New file implementing a sort routine with a
6908         interface better than qsort() because it passes a user-provided
6909         parameter to the sort routine.
6910
6911         * Makefile.am: Add quicksort.c, quicksort.h.
6912
6913 Fri Dec 12 13:31:58 2003  Ben Pfaff  <blp@gnu.org>
6914
6915         * All source files: Get rid of nasty special cases for Checker,
6916         which is pretty obsolete now.
6917
6918 Thu Dec 11 21:38:24 WST 2003 John Darrington <john@darrington.wattle.id.au>
6919
6920         * Fixed a bug apparent when using the FREQUENCIES command with the
6921         html driver.  The html driver was incorrectly trying to display 
6922         empty cells.
6923
6924 Sun Jan  2 21:40:13 2000  Ben Pfaff  <blp@gnu.org>
6925
6926         * Makefile.am: Reorganized.  Put locale dir in version.c instead
6927         of passing it to each compile command.  Only put local gmp libs in
6928         LD_ADD if not installed on system.  Remove `boast' target.
6929
6930         * All source files: struct and union typedefs eliminated.
6931         `sizeof type' replaced by `sizeof object' where practical.  Moved
6932         `unused' qualifiers from start to end of declarations for gcc
6933         2.7.2 compatibility.  Change `while (1)' to `for (;;)'.  Made
6934         assertions on pointers strictly compliant.  Removed _ prefixes on
6935         some function parameter names.
6936
6937         * alloc.c: New source file, containing these external linkage
6938         functions removed from common.c: xmalloc, xcalloc, xrealloc,
6939         xstrdup.
6940
6941         * arena.c: Removed.
6942         
6943         * arena.h: Removed.
6944
6945         * ascii.c: Migrated from arenas to pools.
6946         (struct ascii_driver_ext) ops[], box[], fonts[] changed from
6947         c_string to len_string.  All references changed.
6948         (ascii_option) Signature changed to comply to new output.c
6949         interface.
6950         (count_fancy_chars) Removed.
6951         (delineate) Removed support for rich text.
6952         (ascii_text_metrics) Ditto.
6953         (text_draw) Ditto.
6954         (output_shorts) Change `box', `off', `on' from c_string to
6955         len_string.  Change `remaining' from int to size_t.
6956         (ascii_close_page) Make page numbering less haphazard.
6957
6958         * autorecode.c: Migrate from arenas to pools.
6959
6960         * avl.c: Migrate from arenas to pools.  Synch from libavl 1.4.0.
6961
6962         * bitvector.h: New file containing these macros from misc.h:
6963         SET_BIT, CLEAR_BIT, SET_BIT_TO, TEST_BIT, BIT_INDEX.
6964
6965         * command.c: (struct command) cmd1, cmd2, cmd3 members changed to
6966         word[3].  ncmd removed.
6967         (var empty_string) Removed.
6968         (var cmd_table) Declaration updated.
6969         (var cmdtab) Removed.
6970         (cmp_command) Removed.
6971         (split_words) Rewritten to use strtok_r().
6972         (init_cmd_parser) Renamed cmd_init().  Rewritten.
6973         (find_command) Removed.
6974         (FILE_TYPE_okay) Rewritten.
6975         (cmd_parse) Rewritten.  Semantics of the return value of command
6976         handlers has changed: they must now return one of the new CMD_*
6977         enumerals, rather than a magic value.  This meant that all
6978         commands had to be modified, and they were.
6979         (figure_out_command) New function.
6980
6981         * command.def: Add CORRELATIONS, PEARSON CORRELATIONS.  Add
6982         #defines for INIT, INPU, etc.
6983
6984         * command.h: New CMD_* enum series.
6985         (cur_proc) Make const char *, not char *.
6986         (cmd_init) Prototype.
6987         (cmd_parse) Ditto.
6988
6989         * common.c: Removed.
6990
6991         * common.h: Removed.
6992
6993         * correlations.q: New file.
6994
6995         * crosstabs.q: Migrate from arenas to pools.  Migrate to new-style
6996         q2c.
6997         (custom_tables) Renamed crs_custom_tables().
6998         (custom_variables) Renamed crs_custom_variables().
6999         (calc_integer) Add in some `const' qualifiers.
7000         (table_value_missing) Change from a_string to len_string.
7001         (float_M_suffix) Change from a_string to len_string.
7002
7003         * data-in.c: Rewritten.  All references to
7004         parse_string_as_format() changed to data_in().
7005
7006         * data-in.h: New file.
7007
7008         * data-list.c: Change DLS_* from #define's to enums.  Move from
7009         rpd_msg() to tmsg().
7010         (RPD_ERR) New #define.
7011         (do_reading) Change dfm_push_cust() to dfm_push(), pop_cust() to
7012         dfm_pop().
7013         (read_from_data_list_fixed) Change from old
7014         parse_string_as_format() to new data_in().
7015         (read_from_data_list_free) Ditto.
7016         (read_from_data_list_list) Ditto.
7017         (cmd_repeating_data) Modify approach to checking for end of
7018         command.
7019         (rpd_msg) Removed.
7020         (rpd_parse_record) Change from old parse_string_as_format() to new
7021         data_in().  Change from old convert_format_to_string() to new
7022         data_out().
7023         (read_one_set_of_repetitions) Change dfm_push_cust() to
7024         dfm_push(), pop_cust() to dfm_pop().
7025
7026         * data-out.c: Rewritten.  All references to
7027         convert_format_to_string() changed to data_out().
7028
7029         * descript.q: Migrate to new q2c.
7030         (cmd_descriptives) Removed.
7031         (internal_cmd_descriptives) Renamed cmd_descriptives ().
7032         (custom_variables) Renamed dsc_custom_variables().
7033
7034         * dfm.c: (struct dfm_fhuser_ext) `ln' removed.  All references
7035         removed.
7036         (open_file_r) Initialize h->where.line_number.  Migrate to new
7037         struct string.
7038         (open_file_w) Initialize h->where.line_number.
7039         (read_record) Change from ext->ln to h->where.line_number.
7040         Migrate to struct string.
7041         (dfm_put_record) Rephrased.
7042         (dfm_push_cust) Renamed dfm_push(), rewritten.
7043         (dfm_pop) New function.
7044
7045         * error.c: All references updated.
7046         (glob var error_count) Renamed err_err_count.
7047         (glob var warning_count) Renamed err_warning_count.
7048         (glob var error_already_flagged) Renamed err_already_flagged.
7049         (glob var verbosity) Renamed err_verbosity.
7050         (glob var cust_fn) Removed.
7051         (glob var cust_ln) Removed.
7052         (static var file_loc) New.
7053         (static var nfile_loc) New.
7054         (static var mfile_loc) New.
7055         (tmsg) New function.
7056         (push_cust) Removed.
7057         (pop_cust) Removed.
7058         (msg) Rewritten.
7059         (static var terminating) Removed.
7060         (failure) Renamed err_failure().
7061         (hcf) Renamed err_hcf().
7062         (err_push_file_locator) New function.
7063         (err_pop_file_locator) New function.
7064         (err_location) New function.
7065         (check_error_count) Renamed err_check_count().
7066         (vmsg) Renamed err_vmsg().  Interface changed.
7067         (verbose_msg) Removed.
7068         (err_cond_fail) New function.
7069         (error_break) Renamed err_break().
7070
7071         * error.h: All references updated.
7072         (enum MSG_CLASS_COUNT) Renamed ERR_CLASS_COUNT.
7073         (enum ERR_CLASS_MASK, ERR_VERBOSITY_SHIFT, ERR_VERBOSITY_MASK)
7074         New.
7075         (struct file_locator) New.
7076         (struct error) New.
7077         (macro verbose_msg) Removed.
7078         (macro cond_fail) Removed.
7079
7080         * expr-opt.c: (evaluate_tree) sizeof(char) == 1.
7081
7082         * expr-prs.c: Reorganized.  All references updated.
7083         (exprtypename) Renamed expr_type_name().
7084         (typename) Renamed type_name().
7085         (free_expression) Renamed expr_free().
7086         (parse_expression) Renamed expr_parse().  Uses new type_check()
7087         function.
7088         (init_functab) Renamed init_func_tab().
7089         (type_check) New function.
7090         (parse_or) Rewritten to use new allocate_nonterminal() and
7091         append_nonterminal_arg() functions.
7092         (parse_and) Ditto.
7093         (parse_not) Ditto.
7094         (parse_rel) Ditto.  Also simplified logic.
7095         (parse_add) Ditto.
7096         (parse_mul) Ditto.
7097         (parse_neg) Ditto.
7098         (parse_exp) Ditto.
7099         (SYSMIS_func) Ditto.
7100         (VALUE_func) Rephrased.
7101         (CONCAT_func) Fix memory leak by replacing free by free_node on
7102         lossage.
7103         (generic_str_func) Ditto.
7104         (parse_function) Ditto.  Also rephrasings.  Uses bsearch() to find
7105         function.
7106         (allocate_nonterminal) New function.
7107         (append_nonterminal_arg) New function.
7108         (static func_tab[]) Now at file level.
7109         (cmp_func) Moved.
7110         (init_func_tab) Moved.  Now just uses qsort() to sort func_tab[].
7111
7112         * expr.h: (enum series OP_*) Moved to exprP.h.
7113         (OP_* defines) Ditto.
7114         (struct op_desc) Ditto.
7115         (global ops[]) Ditto.
7116         (struct num_con_node) Ditto.
7117         (struct str_con_node) Ditto.
7118         (struct var_node) Ditto.
7119         (struct lag_node) Ditto.
7120         (struct casenum_node) Ditto.
7121         (struct nonterm_node) Ditto.
7122         (union any_node) Members renamed.
7123         (struct sys_node) Removed.
7124         (struct val_node) Removed.
7125         (operator typedef) Removed.
7126         (typedef exprtype) Removed.
7127         (enum series EX_*) Moved to exprP.h.
7128         (struct expression) Ditto.  Also renamed a lot of the members.
7129         (PXP_* defines) Changed to enums.
7130         (free_node prototype) Moved to exprP.h.
7131
7132         * file-handle.h: (struct file_handle) New member `where'.
7133
7134         * file-handle.q: Migrated to new q2c format.
7135         (prepend_current_directory) Removed (dead code).
7136         (cmd_file_handle) Incorporated all of internal_cmd_file_handle().
7137         (fh_get_handle_by_filename) Removed dead code.
7138         Set new `where' member.
7139
7140         * file-type.c: (file_type_source_read) References to
7141         parse_string_as_format() changed to data_in().
7142         dfm_push_cust()/pop_cust() changed to dfm_push()/dfm_pop().
7143
7144         * filename.c: All references updated.
7145         (init_filename) Renamed fn_init().
7146         (expand_line) Removed.
7147         (macro EXPAND_LINE) Removed.
7148         (interp_vars) Renamed fn_interp_vars().  Now uses st_*() instead
7149         of custom functions.
7150         (gnu_getcwd) Renamed fn_get_cwd(), rewritten.
7151         (tilde_expand) Renamed fn_tilde_expand(), uses ds_*().
7152         (normalize_filename) Renamed fn_normalize().
7153         (search_path) Renamed fn_search_path(), rewritten.
7154         (prepend_dir) Renamed fn_prepend_dir().
7155         (blp_getenv) Renamed fn_getenv().
7156         (blp_dirname) Renamed fn_dirname().
7157         (fn_basename) New function, not used.
7158         (absolute_filename_p) Renamed fn_absolute_p().
7159         (is_special_filename) Renamed fn_special_p().
7160         (file_exists) Renamed fn_exists_p().
7161         (readlink_malloc) Renamed fn_readlink().
7162         (getenv_default) Renamed fn_getenv_default().
7163         (open_file) Renamed fn_open().
7164         (close_file) Renamed fn_close().
7165         (open_file_ext) Renamed fn_open_ext().
7166         (close_file_ext) Renamed fn_close_ext().
7167
7168         * font.h: Migrate from arenas to pools.
7169
7170         * format.c: (parse_format_specifier_name) Deal with ds_* strings.
7171
7172         * frequencies.g: Migrate from arenas to pools.
7173
7174         * frequencies.q: Migrate to new q2c version.  Migrate from arenas
7175         to pools.
7176
7177         * getline.c: All references updated.
7178         (global getl_buf) Changed from char * to struct string.
7179         (static getl_include_path) Ditto.
7180         (global getl_buf_len) Removed.
7181         (global getl_buf_size) Removed.
7182         (getl_include_path) Deal with new getl_buf, getl_include_path.
7183         (getl_uninitialize) New function.
7184         (getl_get_current_directory) Rewritten.
7185         (getl_clear_include_path) Rewritten.
7186         (getl_add_include_dir) Rewritten.
7187         (getl_add_file) Assertion fixed.
7188         (getl_add_virtual_file) Change initial value of `remaining_loops'
7189         from 2 to 1.
7190         (welcome) Rewritten.
7191         (handle_line_buffer) Make static.  Change logic to make
7192         getl_add_virtual_file() change sensible.  Use ds_*() strings.
7193         (getl_read_line) Use ds_*() strings.  Implement SET ECHO.
7194         (getl_close_file) Moved.
7195         (getl_location) New function.
7196
7197         * getline.h: All references updated.
7198         (macro curln) Removed.
7199         (macro curfn) Removed.
7200         (macro am_interactive) Renamed getl_am_interactive.
7201         (macro am_reading_script) Renamed getl_reading_script.
7202
7203         * glob.c: (global fmt_parse_ignore_error) Removed.
7204         (init_glob) Use locale_dir not LOCALEDIR.  Use feholdexcept() on
7205         systems that support it (C99).  Turn off SET ECHO by default.  No
7206         necessary julcal initialization anymore.
7207
7208         * groff-font.c: Migrate from arenas to pools.
7209         (groff_read_font) Use err_push_file_locator().
7210         (groff_read_DESC) Ditto.
7211         (font_msg) Use tmsg().
7212
7213         * hash.c: (hsh_sort) Fix debug code.
7214         [GLOBAL_DEBUGGING] Include stdio.h.
7215
7216         * hash.h: (macro force_hsh_insert) Rephrase.
7217
7218         * heap.c: Rewritten.
7219         
7220         * heap.h: Rewritten.
7221
7222         * html.c: (html_option) Change from outp_value to struct string.
7223         (postopen) Change from curfn to getl_location().
7224         (escape_string) Remove rich-text code.  Signature changed.
7225         (output_tab_table) Switch from a_string to struct len_string.
7226         Remove rich text support.
7227
7228         * lexer.c: All references updated.  Largely rewritten.  Major
7229         changes listed below.  Removed tagged quote support.  Adapted to
7230         struct string tokstr.
7231         (global tokstr) Changed to struct string.
7232         (global tokstr_size) Removed.
7233         (global tokstr_len) Removed.
7234         (global tokid) New.
7235         (global tokint) Removed.
7236         (global toklongstr) Removed.
7237         (C* defines) Removed.
7238         (static tbl[]) Removed.
7239         (static id[]) Removed.
7240         (static une[]) Removed.
7241         (discard_line) Renamed lex_discard_line().
7242         (get_entire_line) Renamed lex_entire_line().
7243         (get_rest_of_line) Renamed lex_rest_of_line().
7244         (get_dotted_rest_of_line) Merged into lex_rest_of_line().
7245         (make_hexit) Removed.
7246         (syntax_error) Renamed lex_error().  Return value removed.
7247         (get_token_representation) Renamed lex_token_representation().
7248         (putback) Renamed lex_put_back().
7249         (putfwd) Renamed lex_put_forward().
7250         (convert_negative_to_dash) Renamed lex_negative_to_dash().
7251         (set_prog) Renamed lex_set_prog().
7252         (init_lex) Renamed lex_init().
7253         (reset_eof) Renamed lex_reset_eof().
7254         (lookahead) Renamed lex_look_ahead().
7255         (check_id) Rewritten.
7256         (yylex) Renamed lex_get(), rewritten.
7257         (lex_end_of_command) New function.  Many commands were rephrased
7258         using this.
7259         (lex_integer_p) New function.  Replaces compare of tokint against
7260         NOT_LONG.
7261         (lex_integer) New function.  Replaces tokint.
7262         (match_tok) Renamed lex_match().
7263         (match_id) Renamed lex_match_id().
7264         (match_int) Renamed lex_match_int().
7265         (force_match_id) Renamed lex_force_match_id(), added return value.
7266         (force_match) Renamed lex_force_match(), added return value.
7267         (force_string) Renamed lex_force_string(), added return value.
7268         (force_int) Renamed lex_force_int(), added return value.
7269         (lex_id_match_len) New function.
7270         (id_match) Renamed lex_id_match(), rewritten.
7271         (get_line) Renamed lex_get_line().
7272         (preprocess_line) Renamed lex_preprocess_line().
7273         (tokname) Renamed lex_token_name().
7274         (bin_value_func) Removed.
7275         (oct_value_func) Removed.
7276         (hex_value_func) Removed.
7277         (unexpected_eof) New function.
7278         (convert_numeric_string_to_char_string) New function.
7279         (parse_string) Rewritten, signature changed.
7280         (add_tokstr_char) Removed.
7281         (add_tokstr_unsigned) Removed.
7282         (add_tokstr_string) Removed.
7283         (parse_tagged_quote) Removed.
7284         (skip_comment) Renamed lex_skip_comment().
7285
7286         * lexer.h: All references updated.
7287         (macro is_id1) Renamed CHAR_IS_ID1.
7288         (macro is_idn) Renamed CHAR_IS_IDN.
7289         (token names ID, NUM, STRING, STOP, ... WITH, EXP) Renamed with
7290         prefix T_: T_ID, T_NUM, T_STRING, T_STOP, ... T_WITH, T_EXP.
7291         (macro get_token) Removed.
7292         (macro id_match) Removed.
7293         (macro force_match_id) Removed.
7294         (macro force_match) Removed.
7295         (macro force_string) Removed.
7296         (macro force_int) Removed.
7297         (macro force_num) Removed.
7298         (macro force_id) Removed.
7299
7300         * lexerP.h: Removed.
7301
7302         * list.q: Migrated to new q2c format.
7303         (write_line) Deal with struct len_string.
7304         (write_varname) Ditto.
7305         (write_fallback_headers) Ditto.
7306
7307         * magic.c: New file, incorporating the following global variables
7308         previously in other files: endian, second_lowest_value.  And both
7309         of those are conditional on #define's.
7310
7311         * magic.h: New file, incorporating the following global variable
7312         declarations: endian, second_lowest_value, and the following macro
7313         declarations: NOT_DOUBLE, NOT_LONG, NOT_INT.
7314
7315         * main.c: Added declarations of pgmname, finished, curdate,
7316         start_interactive.
7317         (main) Call new parse_script() function.
7318         (parse_script) New function.
7319         (execute_command) New function.
7320         (dump_token) Removed.
7321         (handle_error) New function.
7322
7323         * matrix.c: New file.
7324
7325         * matrix.h: New file.
7326
7327         * matrix-data.c: Migrated from arenas to pools.
7328         (mget_token) Change from parse_string_as_format() to data_in().
7329
7330         * means.q: Migrate to new q2c.
7331         (custom_tables) Renamed mns_custom_tables().
7332         (custom_crossbreak) Renamed mns_custom_crossbreak().
7333         (custom_variables) Renamed mns_custom_variables().
7334
7335         * mis-val.c: (static var width) Changed from `int' to `size_t'.
7336         (parse_varnames) Prototype.
7337         (parse_numeric) Rephrasings.
7338         (parse_alpha) Adapt to new struct string tokstr.
7339
7340         * misc.c: (intlog10) Rewritten.
7341         (spacing) Removed.
7342         (ansi_rand) Renamed real_rand(), moved into random.c.
7343         (ansi_srand) Renamed real_srand(), moved into random.c.
7344         (setup_randomize) Moved to random.c.
7345         (rand_uniform) Ditto.
7346         (rand_normal) Ditto.
7347         (rand_simple) Ditto.
7348         (get_config_line) Removed.
7349         (reverse) Removed (dead code).
7350
7351         * misc.h: (macro SET_BIT) Moved to bitvector.h.
7352         (macro CLEAR_BIT) Ditto.
7353         (macro TEST_BIT) Ditto.
7354         (macro SET_BIT_TO) Ditto.
7355         (macro BIT_INDEX) Ditto.
7356
7357         * output.c: (outp_read_devices) Move to err_push_file_locator()
7358         from push_cust().  Use struct string.
7359         (expand_op_tokstr) Removed.
7360         (static var op_tokstr) Changed to struct string.
7361         (static var op_tokstr_size) Removed.
7362         (tokener) Rephrasings.  Use struct string.
7363         (parse_options) Use struct string.
7364         (destroy_driver) Fix assertion.
7365         (outp_get_paper_size) Move to err_push_file_locator().
7366         [0] Removed dead code.
7367         (outp_string_width) Move to len_string.
7368
7369         * output.h: Comment fixes.
7370         (TAG_* enum series) Removed.
7371         (struct outp_value) Removed.
7372         (enum OUTP_T_FANCY) Removed.
7373         (struct outp_text) `s' changed from a_string to len_string.
7374         (struct outp_class) `option' change arg 3 from outp_value to
7375         struct string.
7376
7377         * pfm-read.c: (corrupt_msg) Rewritten.
7378
7379         * pfm-write.c: (bufwrite) Fix assertion.
7380
7381         * pool.c: New file, reference version.
7382
7383         * pool.h: New file, reference version.
7384
7385         * postscript.c: (ps_font_sizes) Fix assertion.
7386         (ps_option) Change arg 3 from outp_value to struct string.
7387         Adapt to struct string.
7388         (macro output_line) Removed.
7389         (macro add_string) Removed.
7390         (output_encodings) Adapted to struct string.  Moved to
7391         err_push_file_locator().
7392         (find_encoding_file) Fix assertion.
7393         (read_ps_encodings) Move to err_push_file_locator().
7394         (postopen) Use getl_location() instead of curfn.
7395         (out_text_plain) Move to len_string.
7396         (text) Ditto.  Remove rich text support.
7397
7398         * print.c: (cmd_print) Remove now-unneeded resource cleanup code.
7399         (cmd_print_eject) Ditto.
7400         (cmd_write) Ditto.
7401         (internal_cmd_print) Now cleans up after itself.  Uses
7402         fh_parse_file_handle() now.
7403         (cmd_print_space) Use PXP_NUMERIC to type-check.
7404
7405         * q2c.c: Overhauled.  Removed _("") i18n support.  All references
7406         updated.  All output functions updated to handle structures rather
7407         than local or static variables.  Adapt to new PSPP lex_*()
7408         functions.
7409         (macro _) Removed.
7410         (macro N_) Removed.
7411         (macro MAX_N_SBC) Removed.
7412         (global bare) Removed.
7413         (enum STRING) Renamed T_STRING.
7414         (enum ID) Renamed T_ID.
7415         (get_buffer) Buffer size increased.
7416         (strlower) Renamed st_lower(), rephrased.
7417         (strupper) Renamed st_upper(), rephrased.
7418         (skip_ws) New function.
7419         (get_line) Don't special-case any types of lines (like those
7420         beginning with ! or $, for instance).
7421         (get_token) Renamed lex_get().  Rephrased.
7422         (static var `prefix') New.
7423         (parse) New function.
7424         (parse_setting) Minor rephrasing.
7425         (dump_specifier_vars) Ditto.
7426         (make_identifier) Put null terminator on identifier, duh.
7427         (dump_vars) Renamed dump_declarations().  Never indent.  Never
7428         static.  Output changed entirely.
7429         (dump_specifier_init) Rephrase.
7430         (dump_vars_init) No index variable needed.  Other modifications.
7431         (dump_parser) Don't parse command name.  Do dump functions instead
7432         of just code fragments.
7433         (dump_free) Dump function instead of code fragment.
7434         (recognize_directive) New function.
7435         (main) Use recognize_directive().  Don't rely on magic $ line
7436         beginning: instead, parse comments.  Update list of headers.
7437
7438         * random.c: New file, containing the following functions:
7439         real_rand(), real_srand(), setup_randomize, shuffle, rand_uniform,
7440         rand_normal, rand_simple.
7441
7442         * random.h: New file.
7443
7444         * recode.c: (cmd_recode) Merge internal_cmd_recode() into this
7445         function.  `max_src_width', `max_dst_width' changed to size_t.
7446         (internal_cmd_recode) Removed.
7447         (parse_dest_spec) Merge similar cases.
7448         (parse_src_spec) Add assertion.
7449
7450         * repeat.c: (recognize_keyword) New function.
7451         (internal_cmd_do_repeat) Parse and handle PRINT keyword on END
7452         REPEAT.  Improve recognition of END REPEAT (use
7453         recognize_keyword()).  Move from curfn to getl_location().  Use
7454         struct string.
7455                 
7456         (perform_DO_REPEAT_substitutions) Adapt to struct string.
7457
7458         * set.q: Adapt to new q2c.
7459         (cmd_set) Range-check some values better.
7460         (custom_blanks) Renamed stc_custom_blanks().
7461         (custom_length) Renamed stc_custom_length().
7462         (custom_results) Renamed stc_custom_results().
7463         (custom_seed) Renamed stc_custom_seed().
7464         (custom_width) Renamed stc_custom_width().
7465         (custom_format) Renamed stc_custom_format().
7466         (custom_journal) Renamed stc_custom_journal().
7467         (custom_color) Renamed stc_custom_color().
7468         (custom_listing) Renamed stc_custom_listing().
7469         (custom_disk) Renamed stc_custom_disk().
7470         (custom_log) Renamed stc_custom_log().
7471         (custom_rcolor) Renamed stc_custom_rcolor().
7472         (custom_viewlength) Renamed stc_custom_viewlength().
7473         (custom_workdev) Renamed stc_custom_workdev().
7474
7475         * settings.h: Not necessary to include format.h any longer.
7476
7477         * sfm-read.h: (macro bswap_int32) Moved here from sfmP.h.
7478         (corrupt_msg) Rewritten.
7479
7480         * sort.c: Adapt to rewritten heap ADT.
7481
7482         * str.c: (aa_strcpy) Removed.
7483         (ab_strcpy) Removed.
7484         (ac_strcpy) Removed.
7485         (ba_strcpy) Removed.
7486         (bb_strcpy) Removed.
7487         (ca_strcpy) Removed.
7488         (aa_strdup) Removed.
7489         (aa_strdupcpy) Removed.
7490         (ba_strdup) Removed.
7491         (sa_strdup) Removed.
7492         (memrev) Renamed mm_reverse().
7493         (memrmem) Renamed mm_find_reverse().
7494         (cmp_str) Renamed st_compare_pad().
7495         (strmaxcpy) Removed.
7496         (strbarepadcpy) Renamed st_bare_pad_copy(), signature changed.
7497         (strbarepadlencpy) Renamed st_bare_pad_len_copy(), signature
7498         changed.
7499         (strpadcpy) Renamed st_pad_copy(), signature changed.
7500         (blpstrset) Removed.
7501         (ds_create) New function.
7502         (ds_init) New function.
7503         (ds_replace) New function.
7504         (ds_destroy) New function.
7505         (ds_clear) New function.
7506         (ds_extend) New function.
7507         (ds_shrink) New function.
7508         (ds_truncate) New function.
7509         (ds_length) New function.
7510         (ds_size) New function.
7511         (ds_value) New function.
7512         (ds_end) New function.
7513         (ds_concat) New function.
7514         (ds_concat_buffer) New function.
7515         (ds_printf) New function.
7516         (ds_putchar) New function.
7517         (ds_getline) New function.
7518         (ds_get_config_line) New function derived from the old
7519         misc.c:get_config_line().
7520         (ls_create) New function.
7521         (ls_create_buffer) New function.
7522         (ls_init) New function.
7523         (ls_shallow_copy) New function.
7524         (ls_destroy) New function.
7525         (ls_null) New function.
7526         (ls_null_p) New function.
7527         (ls_empty_p) New function.
7528         (ls_length) New function.
7529         (ls_value) New function.
7530         (ls_end) New function.
7531
7532         * str.h: Reformatted.
7533         (struct a_string) Removed.
7534         (struct b_string) Removed.
7535         (struct c_string) Removed.
7536         (struct len_string) New.
7537         (struct string) New.
7538         (macro as_streq) Removed.
7539         (macro bs_streq) Removed.
7540         (macro cs_streq) Removed.
7541         (macro sa_streq) Removed.
7542         (macro sb_streq) Removed.
7543         [__GNUC__] (inline function ds_putchar) New function.
7544         [__GNUC__] (inline function ds_length) New function.
7545         [__GNUC__] (inline function ds_value) New function.
7546         [__GNUC__] (inline function ds_end) New function.
7547
7548         * sysfile-info.c: (cmd_sysfile_info) Rephrased.
7549         (display_vectors) Fix missing i18n.
7550
7551         * t-test.q: Migrate to new q2c.
7552
7553         * tab.c: Migrate from arenas to pools.
7554         (tab_create) Use struct len_string.
7555         (tab_realloc) Ditto.
7556         (text_format) Ditto.
7557         (tab_joint_text) Ditto.
7558         (tab_natural_width) Remove rich text support.
7559         (tab_natural_height) Ditto.
7560         (tab_output_text) Handle TAT_FIX.
7561         (tab_raw) Change arg from a_string to len_string.
7562         (tabi_driver) Fix assertion.  Use struct len_string.
7563         (render_strip) Use struct len_string.  Remove rich text support.
7564         Add `const' qualifiers.
7565
7566         * tab.h: (enum TAB_RICH) Remove.
7567         (enums TAB_COL_NONE, TAB_COL_DONE) New.  Where appropriate,
7568         SOM_COL_* updated to read TAB_COL_*.
7569         (struct tab_table) Change arena to pool.  Change a_string to
7570         len_string.
7571
7572         * temporary.c: (restore_dictionary) Rewrite Checker code.
7573
7574         * var.h: (macros MAX_SHORT_STRING, MIN_LONG_STRING, SYSMIS,
7575         LOWEST, HIGHEST) Moved here from common.h.
7576         (typedef any_trns) Removed.  All references changed to `struct
7577         trns_header'.
7578
7579         * vars-atr.c: (force_create_variable) Fix assertion.
7580         (force_dup_variable) Fix assertion.
7581         
7582 Thu Jun  3 18:40:42 1999  Ben Pfaff  <blp@gnu.org>
7583
7584         Using alphanumeric variables in functions under AGGREGATE
7585         segfaulted.  Fixed.  Thanks to Dr. Dirk Melcher
7586         <BZN-mdksh@t-online.de> for reporting this bug.
7587         
7588         * aggregate.c: (parse_aggregate_functions) When setting the
7589         FSTRING bit, also allocate memory for the `string' member of
7590         agr_next.
7591         (free_aggregate_functions) Free iter->string.  Don't use the
7592         non-function bits when indexing the array of functions.
7593         [DEBUGGING] (debug_print) Don't use the non-function bits when
7594         indexing the array of functions.        
7595
7596 Sun May 30 00:00:54 1999  Ben Pfaff  <blp@gnu.org>
7597
7598         Under certain circumstances, the final case would be omitted from
7599         the results of an AGGREGATE operation.  Fixed.  Thanks to Dr. Dirk
7600         Melcher <BZN-mdksh@t-online.de> for reporting this bug.
7601         
7602         * aggregate.c (agr_00x_end_func): Increment number of cases in
7603         sink before writing case.  For streams that keep track of how many
7604         cases there are based on this value, this means that the last case
7605         will be read in on the next stream read.
7606
7607 Sat May 29 22:03:31 1999  Ben Pfaff  <blp@gnu.org>
7608
7609         Undefined behavior was invoked by referencing a freed pointer.
7610         
7611         * vfm.c (memory_stream_write): Free pointer *after* checking for
7612         non-null status.
7613
7614 Sat May 29 22:02:22 1999  Ben Pfaff  <blp@gnu.org>
7615
7616         A wrong record size was displayed when paging the active file to
7617         disk.
7618         
7619         * vfm.c: (memory_stream_write) Fix off-by-one error.
7620
7621 Sat May 29 21:50:26 1999  Ben Pfaff  <blp@gnu.org>
7622
7623         Not having enough temporary space for sorting caused a core dump.
7624         Fixed.
7625         
7626         * sort.c: (allocate_cases) Initialize i.
7627
7628 Sat May 29 21:40:54 1999  Ben Pfaff  <blp@gnu.org>
7629
7630         Syntax errors in function descriptions on AGGREGATE caused core
7631         dumps.  Fixed.
7632         
7633         * aggregate.c (cmd_aggregate): Don't free agr_dict after calling
7634         free_aggregate_functions(), since that function already frees
7635         agr_dict.
7636         
7637 Sat May 29 21:06:10 1999  Ben Pfaff  <blp@gnu.org>
7638
7639         A null pointer was dereferenced, causing a core dump, when
7640         PERCENTILES was specified on FREQUENCIES.  This fixes the problem,
7641         but PSPP still doesn't calculate percentiles.  Thanks to Regnor
7642         Jernsletten <rjernsle@eunet.no> for reporting this problem.
7643         
7644         * arena.c: (arena_malloc) If the arena hasn't been initialized
7645         already, initialize it.
7646
7647 Sat May 29 20:47:29 1999  Ben Pfaff  <blp@gnu.org>
7648
7649         * Makefile.cygwin: New file supplied by Hankin <hankin@dunno.com>
7650         for compilation with Cygnus Windows B20.  Not used by other
7651         systems.
7652
7653 Sat May 29 20:36:04 1999  Ben Pfaff  <blp@gnu.org>
7654
7655         SORT always sorted in ascending order.  Fixed.  Thanks to Dr. Dirk
7656         Melcher <BZN-mdksh@t-online.de> for reporting this bug.
7657
7658         * sort.c: (compare_case_lists) Reverse sense of comparison if
7659         sorting in descending order.
7660         (compare_record) Ditto.
7661
7662 Tue Mar  9 13:18:54 1999  Ben Pfaff  <blp@gnu.org>
7663
7664         SPLIT FILE with a string variable caused a core dump.  Fixed.
7665
7666         * vfm.c: If the variable is a string then make a temporary value
7667         struct pointing to it.  The underlying problem is a lot bigger
7668         than this (see TODO) but this is a stopgap for the simple case at
7669         least.
7670         
7671 Tue Mar  9 13:15:53 1999  Ben Pfaff  <blp@gnu.org>
7672
7673         Nested INCLUDEs didn't work.  Fixed.
7674
7675         * getline.c: (getl_include) Set first_line to NULL in allocated
7676         structure.
7677
7678 Tue Mar  9 13:13:46 1999  Ben Pfaff  <blp@gnu.org>
7679
7680         The MATCH FILES procedure set the values of variables not present
7681         to 0.  It should have been SYSMIS.  This is now fixed.
7682
7683         * get.c: (mtf_delete_file_in_place) Replace 0.0 by SYSMIS.
7684
7685 Tue Mar  9 12:52:23 1999  Ben Pfaff  <blp@gnu.org>
7686
7687         The REMARK command was too aggressive about skipping lines.  It
7688         didn't like being the last command in a file.
7689
7690         * command.c: (cmd_remark) Call get_entire_line() instead of
7691         get_line().
7692
7693 Tue Mar  9 12:48:05 1999  Ben Pfaff  <blp@gnu.org>
7694
7695         Comment parsing wasn't consistent with the rest of the code in its
7696         idea of where one command ends and another starts.  This meant
7697         that sometimes commands would be mysteriously ignored.  Thanks to
7698         Dr. Dirk Melcher <BZN-mdksh@t-online.de> for reporting this bug.
7699          
7700         * command.c: (parse_cmd) Hand off comment parsing to new function
7701         skip_comment() in lexer.c.
7702         * lexer.c: (skip_comment) New function.
7703
7704 Wed Jan 20 20:22:07 1999  Ben Pfaff  <blp@gnu.org>
7705
7706         The TABLE subcommand on MATCH FILES worked only erratically at
7707         best.  This fixes it.  Thanks to Dr. Dirk Melcher
7708         <BZN-mdksh@t-online.de> for reporting this bug.
7709
7710         * get.c: (mtf_compare_BY_values) When comparing string values, a
7711         difference of 1 is still a difference :-)
7712         (mtf_processing) Inverted TABLE reading logic fixed.  Also don't
7713         advance TABLE files automatically when matched.  Comment fixes.
7714
7715 Tue Jan 19 22:32:31 1999  Ben Pfaff  <blp@gnu.org>
7716
7717         VARIABLE LABELS rejected a slash before the first variable
7718         specification, contradicting the documentation.  Thanks to Walter
7719         M. Gray <graywm@northernc.on.ca> for reporting this bug.
7720
7721         * var-labs.c: (cmd_variable_labels) Ignore a leading slash in
7722         command specification.
7723
7724 Tue Jan 19 22:29:54 1999  Ben Pfaff  <blp@gnu.org>
7725
7726         Because of an incorrect optimization in memory allocation,
7727         CROSSTABS sometimes segfaulted when asked to output multiple
7728         tables.  Thanks to Walter M. Gray <graywm@northernc.on.ca> for
7729         reporting this bug.
7730
7731         * crosstabs.q: (postcalc) New variables maxcols, maxcells, which
7732         are passed to output_pivot_table() for its use.
7733         (output_pivot_table) Instead of assuming the number of columns is
7734         constant, keep track with maxcols.  In general mode, use maxcells
7735         to determine whether more matrix cells need to be allocated.    
7736
7737 Tue Jan 19 22:27:46 1999  Ben Pfaff  <blp@gnu.org>
7738
7739         CROSSTABS didn't display value labels for column and row
7740         variables.  Thanks to Walter M. Gray <graywm@northernc.on.ca> for
7741         reporting this bug.
7742
7743         * crosstabs.q: (table_value_missing) If the specified value has a
7744         value label for this variable, then show it instead of the raw
7745         value.
7746         (display_dimensions) Delegate display of value_labels to
7747         table_value_missing.
7748
7749 Mon Jan 18 20:04:06 1999  Ben Pfaff  <blp@gnu.org>
7750
7751         WRITE didn't write line ends.  Fixed.  Thanks to Dr. Dirk Melcher
7752         <BZN-mdksh@t-online.de> for reporting this bug.
7753
7754         * print.c: (print_trns_proc) Write (CR/)LF if PRINT is used _or_
7755         if the file isn't declared as binary.
7756
7757 Mon Jan 18 19:56:45 1999  Ben Pfaff  <blp@gnu.org>
7758
7759         MATCH FILES corrupted memory and dumped core on some syntax
7760         errors.  Fixed.
7761
7762         * get.c: (cmd_match_files) Set file->handle to NULL before
7763         jumping to lossage.
7764         (mtf_free_file) Don't free a null dictionary.   
7765
7766 Mon Jan 18 19:27:57 1999  Ben Pfaff  <blp@gnu.org>
7767
7768         MATCH FILES should set numeric values not available to the
7769         system-missing value, not to 0.  Thanks to Dr. Dirk Melcher
7770         <BZN-mdksh@t-online.de> for reporting this bug.
7771
7772         * get.c: (mtf_processing) Set unused records to system-missing,
7773         not 0.
7774
7775 Mon Jan 18 15:06:46 1999  Ben Pfaff  <blp@gnu.org>
7776
7777         KEEP didn't work properly on the SAVE procedure.  Fixed.  Thanks
7778         to Ralf Geschke <ralf@kuerbis.org> for reporting this bug.
7779
7780         * temporary.c: (save_dictionary) Initialize var_by_name AVL tree
7781         in newly created dictionary, and add each copied variable to the
7782         tree.
7783  
7784 Mon Jan 18 15:04:48 1999  Ben Pfaff  <blp@gnu.org>
7785
7786         Memory leak fix.
7787         
7788         * get.c: (trim_dictionary) Free variable list for KEEP after
7789         finishing with it.
7790
7791 Mon Jan 18 12:57:36 1999  Ben Pfaff  <blp@gnu.org>
7792
7793         Some systems didn't like the way open_file was coded.  Thanks to
7794         Hankin <hankin@rogue.consultco.com> for pointing this out.
7795
7796         * filename.c: (open_file) Don't try to store stdin, stdout,
7797         stderr as part of an array, because that doesn't always work.
7798
7799 Mon Jan 18 12:53:27 1999  Ben Pfaff  <blp@gnu.org>
7800
7801         The SAVE procedure didn't save long string variables properly.
7802         Fixed by this patch.  Thanks to Hankin
7803         <hankin@rogue.consultco.com> for this patch.
7804         
7805         * sfm-write.c: (write_variable) Fix off-by-one error in writing
7806         out variable pad records.
7807
7808 Tue Jan  5 14:29:27 1999  Ben Pfaff  <blp@gnu.org>
7809
7810         Previously, if PRINT SPACE were given a negative argument, it
7811         would report an error, then spin in an (almost) infinite loop.
7812         This fixes that behavior.
7813
7814         * print.c: (print_space_trns_proc) After reporting a negative
7815         argument, set number of lines to print to 1.
7816
7817 Tue Jan  5 13:59:55 1999  Ben Pfaff  <blp@gnu.org>
7818
7819         SPSS 8.0 outputs some new record types in its system files, and it
7820         allows longer value labels.  Accept these system files.
7821
7822         * sfm-read.c: (sfm_read_dictionary) Ignore record type 7 subtype
7823         11 emitted by SPSS 8.0.
7824         
7825 Tue Jan  5 13:55:50 1999  Ben Pfaff  <blp@gnu.org>
7826
7827         The LIST procedure was too conservative in allocating space for
7828         buffers, which caused a bug that only showed up with very long
7829         output variables.  Thanks to Hankin <hankin@dunno.com> for this
7830         bug report.
7831
7832         * list.q: (determine_layout) Allocate 1022 bytes instead of 256.
7833
7834 Tue Jan  5 13:34:34 1999  Ben Pfaff  <blp@gnu.org>
7835
7836         Typo meant string format specifiers weren't checked properly.  I
7837         think that Hankin <hankin@dunno.com> sent me this report, but I'm
7838         willing to be corrected on this point.
7839  
7840         * format.c: (check_string_specifier) Fix obvious typo.  
7841
7842 Tue Jan  5 12:50:42 1999  Ben Pfaff  <blp@gnu.org>
7843
7844         Using $CASENUM in an expression didn't work.  Here's a fix.
7845         Thanks to Dirk Melcher <BZN-mdksh@t-online.de> for reporting this
7846         bug.
7847          
7848         * expr-evl.c: (evaluate_expression) Add OP_CASENUM case.
7849
7850         * expr-opt.c: (dump_node) OP_CASENUM is acceptable.
7851
7852 Tue Jan  5 12:47:48 1999  Ben Pfaff  <blp@gnu.org>
7853
7854         The changes in 0.2.1 to fix DATA LIST FREE parsing broke some
7855         other behavior, *sigh*.  This patch hopefully fixes that.  This
7856         time I've actually tested it.
7857
7858         Thanks to Hankin <hankin@dunno.com> for reporting this bug.
7859
7860         * data-list.c: (read_from_data_list_free,
7861         read_from_data_list_list) Call parse_string_as_format() directly
7862         without mucking around with the field width.
7863
7864 Tue Jan  5 12:31:19 1999  Ben Pfaff  <blp@gnu.org>
7865
7866         Occasionally, you may encounter a script that wants to be
7867         interpreted in interactive mode.  Make -i emulate this behavior to
7868         allow such scripts to be executed with PSPP.
7869
7870         Thanks to Hankin <hankin@dunno.com> for reporting this behavior.
7871
7872         * cmdline.c: (pre_syntax_message[]) Update -i description.
7873
7874         * lexer.c: (preprocess_line) When getl_interactive is 2 (i.e.,
7875         when -i is given on the command line) don't treat unindented lines
7876         as starting a new command.
7877
7878 Tue Jan  5 12:30:10 1999  Ben Pfaff  <blp@gnu.org>
7879
7880         In conjunction with egcs 1.1.1, Checker emits some bogus warnings,
7881         mostly caused by local initialized aggregates.  After egcs is
7882         fixed upstream these can be removed, but for now they're not a big
7883         deal.
7884         
7885         * ascii.c: (ascii_postopen_driver) Checker chokes on local
7886         initialized arrays.  Avoid this.
7887
7888         * sfm-write.c: (sfm_write_dictionary) Don't use a local
7889         initialized struct.
7890
7891 Tue Jan  5 12:07:24 1999  Ben Pfaff  <blp@gnu.org>
7892
7893         egcs 1.1.1 has some new warnings relative to gcc 2.8.1, which the
7894         following changes avoid.  Currently I compile sources with egcs
7895         1.1.1 and gcc 2.7.2.3 before sending them out.
7896
7897         * apply-dict.c: (apply_dict) Use new avl_traverser_init() macro.
7898         
7899         * ascii.c: (option_tab[]) Initialize all struct members.
7900
7901         * avl.h: (avl_traverser_init) New macro.
7902         
7903         * command.c: (DEFCMD, UNIMPL macros, cmd_table[]) Initialize all
7904         struct members.
7905
7906         * crosstabs.q: (enum_var_values) Use new hsh_iterator_init()
7907         macro.
7908
7909         * hash.c: Comment fix.
7910
7911         * hash.h: (hsh_iterator_init) New macro.
7912
7913         * html.c: (option_tab[]) Initialize all struct members.
7914
7915         * pfm-write.c: (write_value_labels) Use new avl_traverser_init()
7916         macro.
7917
7918         * postscript.c: (option_tab[]) Initialize all struct members.
7919         (output_encodings, preclose, dump_lines) Use new
7920         hsh_iterator_init() macro.
7921
7922         * sfm-write.c: (write_value_labels) Use new avl_traverser_init()
7923         macro.
7924
7925         * sysfile-info.c: (describe_variable) Use new avl_traverser_init()
7926         macro.
7927
7928 Thu Nov 19 12:32:45 1998  Ben Pfaff  <blp@gnu.org>
7929
7930         * data-in.c: Examined each of the parsing functions to make sure
7931         that they wouldn't dump core if they were passed a string of the
7932         wrong length, since now the DATA LIST FREE/LIST routines don't
7933         check for field width before passing it to the data parser.
7934         (parse_RBHEX, parse_AHEX) Reject odd length input.
7935         (parse_string_as_format) Reject input that's too short or too
7936         long.
7937
7938         * data-list.c: Before, the DATA LIST FREE/LIST routines would pad
7939         a field to its entire declared output width then pass it to the
7940         data-in parsing routines.  This contradicted the documented
7941         behavior.  This is fixed in these changes.  Thanks to Mark H. Wood
7942         <mwood@IUPUI.Edu>.  In addition, this fixes a few more details of
7943         free-format parsing that differed from SPSS.
7944         (cut_field) Commas and spaces are treated identically.  Returns
7945         the proper column instead of a fixed 1 value.
7946         (parse_field) Removed.
7947         (read_from_data_list_free, read_from_data_list_list) Call
7948         parse_string_as_format directly instead of parse_field.
7949
7950         * heap.c: (heap_delete) Stylistic fixes.
7951
7952 Sun Aug  9 11:12:13 1998  Ben Pfaff  <blp@gnu.org>
7953
7954         * loop.c: (loop_2_trns_proc) Formatting fix.
7955
7956         * sel-if.c: (cmd_filter) Set FILTER_before_TEMPORARY.
7957
7958         * var.h: (glob var FILTER_before_TEMPORARY) New global var.
7959
7960         * vfm.c: (macro FILTERED) New.
7961         (static var filter_var) New.
7962         (process_active_file_write_case) Use FILTERED.
7963         (setup_filter) Set filter_var.
7964         (close_active_file) Delete the filter if not
7965         FILTER_before_TEMPORARY.
7966         (procedure_write_case) Use FILTERED.
7967
7968 Sat Aug  8 00:20:14 1998  Ben Pfaff  <blp@gnu.org>
7969
7970         * crosstabs.q: Changed /PIVOT={ON,OFF} to /FORMAT={PIVOT,NOPIVOT}.
7971
7972         * data-in.c: (parse_day_count) Message fix.
7973         (parse_month) Style fix.
7974
7975         * data-list.c: (struct data_list_pgm) New member eof.
7976         (cmd_data_list) Init eof to 0.
7977         (do_reading) Implement the /END subcommand and read-past-eof
7978         checking.
7979
7980         * do-if.c: Include stdio.h when debugging.
7981         (cmd_else_if) Make sure the command is .-terminated.
7982
7983         * glob.c: (init_glob) Capitalize the command prompt.
7984
7985         * inpt-pgm.c: (end_case_trns_proc) Debugging message.
7986         (end_file_trns_proc) Debugging message.
7987
7988         * loop.c: (internal_cmd_loop) Make it work when there's no loop
7989         index!
7990         (loop_2_trns_proc) Enable MXLOOPS (why was this disabled?)
7991
7992         * main.c: (dump_token) Make kwtab[] const.
7993
7994         * set.q: Spelling, comment fixes.
7995
7996         * sysfile-info.c: (cmd_display) DISPLAY VECTORS not DISPLAY
7997         VECTOR.
7998
7999         * vars-prs.c: (fill_all_vars) Style fix.
8000
8001         * vfm.c: (index_to_varname) Return const.
8002
8003 Tue Aug  4 23:49:23 1998  Ben Pfaff  <blp@gnu.org>
8004
8005         * Changes in many source files for partial -ansi -pedantic and
8006         no-debugging compliance: Remove trailing common in enum
8007         declarations; add `unused' attributes; insert some appropriate
8008         casts.
8009
8010         * cmdline.c: (parse_command_line) Add new --testing-mode flag.
8011
8012         * command.c: (shell) Make static.
8013         (run_command) Make static.
8014
8015         * data-list.c: (dump_fixed_table) Remove use of local_strdup().
8016
8017         * dfm.c: (cmd_begin_data) I18n fix.
8018
8019         * error.c: (verbose_msg) Define if __STRICT_ANSI__.
8020
8021         * error.h: (macro verbose_msg) Define if __STRICT_ANSI__.
8022
8023         * expr-opt.c: (evaluate_tree) Don't initialize local arrays if
8024         __STRICT_ANSI__.
8025
8026         * file-handle.q: Don't prepend the source file directory name to
8027         the data file name.  (Ongoing issue.)
8028         (prepend_current_directory) Comment out.
8029         (internal_cmd_file_handle) Don't call prepend_current_directory().
8030         (fh_get_handle_by_filename) Ditto.
8031
8032         * filename.c: Append zero byte to readlink() return value.
8033
8034         * getline.c: (getl_read_line) I18n fix.
8035
8036         * lexer.h: Don't use gcc features if __STRICT_ANSI__.
8037
8038         * misc.h: Don't use gcc features if __STRICT_ANSI__.
8039
8040         * pfm-write.c: (bufwrite) Don't try to increment a void * pointer
8041         directly.
8042
8043         * postscript.c: (output_encodings) Don't use local_strdup().
8044         (postopen) Ditto.
8045
8046         * print.c: Don't use gcc features if __STRICT_ANSI__.
8047
8048         * q2c.c: (dump_vars) Don't put a , at the end of the last enum.
8049
8050         * recode.c: (parse_src_spec) Fully brace nested if's.
8051
8052         * set.q: (global var set_testing_mode) New var.
8053
8054 Wed Jul 29 22:01:44 1998  Ben Pfaff  <blp@gnu.org>
8055
8056         * ascii.c: Add some more `unused' attributes that only come into
8057         play when NDEBUG is defined.
8058         (ascii_close_page) Set s_len when reallocating s.
8059         
8060         * crosstabs.q: (delete_missing) New function.
8061         (output_pivot_table) Call delete_missing() if /MISSING=REPORT.
8062         (make_summary_table) Create summary table reallocable.
8063
8064         * postscript.c: Add more `unused' attributes as above.
8065
8066         * tab.c: (tab_create) [GLOBAL_DEBUGGING] Set reallocable member.
8067         (tab_realloc) [GLOBAL_DEBUGGING] Assert that table is reallocable.
8068          
8069         * tab.h: (struct tab_table) [GLOBAL_DEBUGGING] New `reallocable'
8070         member.
8071
8072         * var.h: (macro force_dup_variable) [!GLOBAL_DEBUGGING] Remove
8073         gratuitous space between parameter definition.
8074
8075         * vars-atr.c: Changed some assert(0)'s to abort()'s to prevent
8076         complaints about running off the end of functions with NDEBUG
8077         enabled.
8078
8079 Sun Jul  5 00:17:25 1998  Ben Pfaff  <blp@gnu.org>
8080
8081         * Several source files: Removed some PORTME notes when reflection
8082         revealed that ANSI forbids that sort of breakage.  Also, added
8083         lots of `unused' qualifiers here and there.
8084
8085         * aggregate.c: (accumulate_aggregate_info) Remove local var
8086         weighting that turned out not to be used.
8087
8088         * avl.c: Update to version 1.1.0.  Add unused specifier.
8089         (avl_destroy) Initialize ab to 0.  Comment fixes.  Cast return
8090         value to void *.
8091         (avl_probe) Replace some instances of 1 with +1 where appropriate.
8092         (avl_find) Cast return value to void *.
8093         (avl_delete) q doesn't need to be initialized at the beginning of
8094         the function.  Replace some instances of 1 with +1.
8095         (force_avl_delete) Renamed avl_force_delete, all references changed.
8096         (compare_ints) `param' marked unused.
8097         (print_int) `param' marked unused.
8098         (recurse_tree) Replace some instances of 1 with +1.
8099
8100         * avl.h: Update to version 1.1.0.  Only declares avl function
8101         types if not already declared.
8102         (AVL_MAX_HEIGHT) Only define if not already defined.
8103         (struct avl_node) New unused member char pad[2].
8104         [GLOBAL_DEBUGGING] Change conditionalization to NDEBUG instead.
8105         (force_avl_insert) Renamed avl_force_insert.
8106         (force_avl_delete) Renamed avl_force_delete.
8107
8108         * crosstabs.q: (struct table_entry) Put `freq' into a union with
8109         new member `data'.
8110         (struct crosstab) Add new member `ofs'.
8111         (glob var int_tab) Removed.
8112         (custom_tables) In integer mode, assign v[i] properly through the
8113         indirect var_dict.
8114         (custom_variables) Now p.crs.max == max + 1.
8115         [DEBUGGING] (debug_print) p.crs.min and p.crs.max are now ints.
8116         (precalc) Implement integer mode.
8117         (calc_integer) Implement integer mode.
8118         (compare_table_entry) Remove unused local variable `comparing'.
8119         (make_summary_table) Implement integer mode.
8120         (macro ns_rows) Implemented as static variable now.
8121         (several variables) Made static, from global.
8122         (output_pivot_table) Use table_value_missing() for column heads.
8123         Remove several unused local variables.  Implement integer mode
8124         table summing.  Count up ns_rows.
8125         (crosstabs_dim) Make columns wider when /MISSING=REPORT requested.
8126         (find_pivot_extent) Moved into find_pivot_extent_general; now just
8127         calls that function or find_pivot_extent_integer.
8128         (find_pivot_extent_integer) New function.
8129         (enum_var_values) Implemented for integer mode.
8130         (table_value_missing) New function.
8131         (display_dimensions) Call table_value_missing() for heads.
8132         (float_M_suffix) New function.
8133         (display_crosstabulation) Call table_value_missing() for row
8134         heads.  Handle missing values in /MISSING=REPORT mode.
8135         (calc_fisher) Remove unused var N.
8136         (calc_r) Remove unused var fact.
8137
8138         * data-list.c: (dump_fixed_table) Fix table dimensioning.
8139         (read_one_set_of_repetitions) Remove unused vars var_spec, column.
8140
8141         * data-out.c: (insert_commas) Remove unused var cp.
8142         (convert_CCx) Remove unused vars save_set_decimal,
8143         save_set_grouping.
8144
8145         * descript.q: (dump_z_table) Fix table dimensioning.
8146         (pre_calc) Remove unused var j.
8147         (display) Remove unused vars title, s.  Fix table dimensioning.
8148
8149         * expr-evl.c: Comment fixes.
8150
8151         * frequencies.q: (full_dim) New function.
8152         (dump_full) Fix table dimensioning.
8153         (condensed_dim) New function.
8154         (dump_condensed) Fix table dimensioning.
8155
8156         * get.c: (cmd_match_files) Remove unused var n_val.  Remove unused
8157         label winnage.
8158
8159         * html.c: (html_close_drive) Remove unused var i.
8160         (postopen) Remove unused vars title, curfn_len, cp.
8161         (preclose) Remove unused vars this, x.
8162
8163         * lexer.c: Comment fixes.
8164
8165         * matrix-data.c: (cmd_matrix_data) Remove unused var index.
8166
8167         * means.q: (custom_tables) Remove unused var m_dim.
8168
8169         * mis-val.c: Format fix.
8170
8171         * modify-vars.c: (cmd_modify_vars) Remove unused var new_dict.
8172
8173         * output.c: (outp_get_paper_size) Remove unused var cp.
8174
8175         * pfm-read.c: (read_float) Remove unused var save, unused label
8176         underflow.
8177         (read_variables) Remove unused vars cp, j.
8178         (read_value_label) Remove unused var j.
8179
8180         * pfm-write.c: (bufwrite) Remove unused var i.
8181
8182         * postscript.c: (ps_postopen_drive) Remove unused vars dev_info,
8183         fn.
8184         (output_encodings) Remove unused vars char_cp, n_output.
8185         (read_ps_encodings) Remove unused var ep.
8186         (postopen) Remove unused var title.
8187         (preclose) Remove unused var fp.
8188         (ps_open_page) Remove unused vars true, false, orientation,
8189         mirror_horz, mirror_vert, width, length.
8190         (ps_text_metrics) Remove unused var x.
8191
8192         * q2c.c: (find_symbol) Remove unused var y.
8193         (parse_setting) Remove unused parameter sbc, all references
8194         changed.
8195         (dump_parser) Remove unused var cp.
8196         (dump_free) Remove unused var i.
8197
8198         * set.q: (static vars args, n) Removed.
8199         (internal_cmd_gset) Removed.
8200
8201         * sfm-read.c: (sfm_read_dictionary) Removed unused var i.
8202         (read_machine_flt64_info) Removed unused var file_endian.
8203         (read_documents) Removed unused var i.
8204         (read_compressed_data) Removed unused parameter dict, all
8205         references changed.
8206
8207         * sfm-write.c: (bufwrite) Removed unused var i.
8208         (sfm_write_case) Removed unused var i.
8209
8210         * sort.c: (merge_once) Remove unused var t.
8211         (write_separate) #if 0 out as dead code.
8212
8213         * split-file.c: (cmd_split_file) Remove unused var i.
8214
8215         * sysfile-info.c: (sysfile_info_dim) New function.
8216         (cmd_sysfile_info) Fix table dimensioning.
8217         (variables_dim) New function.
8218         (display_variables) Fix table dimensioning.
8219         (describe_variable) Remove unused var prev_r.
8220
8221         * t-test.q: (z_postcalc) Removed.
8222         (pairs_calc) Remove unused var bad_weight.
8223         (postcalc) Remove unused vars dfn, dfd.
8224
8225         * tab.c: (tab_create) Set t->dim to NULL.
8226         (tab_dim) Make sure t->dim is NULL first.
8227         (tab_natural_width) Remove parameter `clamp'.
8228         (tab_value) Remove duplicate assertion for table.
8229         (tab_raw) New function.
8230         (nowrap_dim) New function.
8231         (wrap_dim) New function.
8232         (tab_output_text) Fix table dimensioning.
8233
8234         * tab.h: (tab_raw) New macro.
8235
8236         * val-labs.c: (get_label) Remove unused var type.
8237         (copy_value_labels) Remove unused var trav.
8238
8239         * var.h: (struct crosstab_proc) Completely changed.
8240
8241         * vars-prs.c: (parse_dict_variable) Remove unused var v.
8242
8243         * vfm.c: (open_active_file) Remove unused vars i, lp.
8244
8245         * weight.c: (weight_trns_proc) #if 0 out as dead code.
8246         
8247 Tue Jun  2 23:37:21 1998  Ben Pfaff  <blp@gnu.org>
8248
8249         * Makefile.am: Add apply-dict.c, flip.c.
8250
8251         * apply-dict.c: New file.
8252         
8253         * command.c: (struct command) Make cmd[] larger for CLEAR
8254         TRANSFORMATIONS command name.
8255         (parse_cmd) Make sure we're in a valid state before using it as an
8256         index.  Discard variables and reset state on invalid transitions.
8257         (cmd_clear_transformations) New function.
8258
8259         * command.def: Add APPLY DICTIONARY, CLEAR TRANSFORMATIONS, FLIP.
8260         Add unimplemented PRESERVE, RESTORE.
8261
8262         * file-handle.h: Include stddef.h.
8263
8264         * flip.c: New file.
8265         
8266         * pfm-read.c: (parse_value) Pad value label values with spaces,
8267         not nulls.
8268
8269         * sfm-read.c: (struct sfm_fhuser_ext) Add reference count.
8270         (sfm_close) Decrement reference count, make sure it's zero.
8271         (sfm_maybe_close) New function.
8272         (sfm_read_dictionary) Handle reference counts.
8273
8274         * vars-atr.c: (clear_default_dict) New function.
8275         (discard_variables) Use clear_default_dict().
8276
8277 Sun May 31 00:58:05 1998  Ben Pfaff  <blp@gnu.org>
8278
8279         * Makefile.am: Add pfm-write.c.
8280         (LDADD) Add the libgmp2 libraries.
8281
8282         * command.def: Define EXPORT.
8283
8284         * get.c: (cmd_export) New function.
8285         (export_write_case_func) New function.
8286
8287         * pfm-read.c: (static spss2ascii[]) Make it const.
8288
8289         * pfm-write.c: New file.
8290
8291         * sfm-write.c: Formatting, comment fixes.
8292
8293         * var.h: Comment fix.
8294
8295 Fri May 29 21:44:12 1998  Ben Pfaff  <blp@gnu.org>
8296
8297         * Makefile.am: Add pfm.h, pfm-read.c.
8298
8299         * command.def: IMPORT is now implemented.
8300
8301         * format.c: (glob var translate_fmt[]) New var.
8302
8303         * get.c: (enum GTSV_NONE) Renamed GTSV_OPT_NONE.
8304         (cmd_import) New function.
8305         (import_source_read) New function.
8306         (glob var import_source) New var.
8307
8308         * pfm-read.c: New file.
8309
8310         * pfm.h: New file.
8311         
8312         * sfm-read.c: (parse_format_spec) Local variable translate_fmt[]
8313         moved in format.c.
8314         (dump_dictionary) Disabled printing a couple of items.
8315
8316 Mon May 25 12:42:37 1998  Ben Pfaff  <blp@gnu.org>
8317
8318         * crosstabs.q: (postcalc) Call make_summary_table().
8319         (make_summary_table) New function.
8320         (insert_summary) New function.
8321         (display_dimensions) Remove some unnecessary arguments, all
8322         references changed.
8323         (output_pivot_table) Fix lots of problems with the risk table
8324         setup.
8325         (submit) Don't display an empty table.
8326         (display_risk) Fix order of arguments to calc_risk().
8327
8328         * glob.c: Always include assert.h and stdlib.h.
8329
8330         * output.h: (enum OUTP_T_JUST_FULL) Removed, all references
8331         removed.
8332
8333         * tab.c: (tab_create) Cosmetic changes.
8334
8335         * tab.h: (enum TAB_JUSTIFY) Removed, all references removed.
8336
8337 Sun May 24 22:39:23 1998  Ben Pfaff  <blp@gnu.org>
8338
8339         * tab.def: Removed.
8340
8341         * crosstabs.q: (output_pivot_table) Headers drawing and submission
8342         code simplified, moved into new function submit().
8343         (submit) New function.
8344         (crosstabs_dim) New function.
8345         (display_directional) Substitute variable names for %s where
8346         appropriate.
8347         (somers_d_v[], somers_d_ase[], somers_d_t[]) New static vars.
8348         (calc_symmetric) Initialize parameters only if non-NULL.
8349         Calculate Somers' d.
8350         (calc_directional) Calculate Somers' d (or copy it, really).
8351         Calculate eta.
8352
8353         * output.c: (outp_string_width) New function.
8354
8355         * postscript.c: (postopen) Calculate font widths based on the
8356         width of the zero '0' character, not the width of the space
8357         character.  Set paper-width and paper-length based on points, not
8358         device units.
8359         (ps_open_page) Fix page setup string for landscape mode.
8360
8361         * som.h: (struct som_dimension) Removed.
8362         (struct som_table_class) height, width members take int * not
8363         som_dimesion * now.
8364
8365         * tab.c: Many functions now have added parameter validation.
8366         (tab_height, tab_width) These functions were removed and merged
8367         into a single function tab_resize(), and all references changed.
8368         (tab_dim) Rewritten since the interface changed; reduced from
8369         hundreds of lines to two.  All callers were changed.  Currently
8370         most of them just use tab_natural_dimensions as their callback and
8371         await detailed translation of functionality.
8372         (tab_natural_width) New function.
8373         (tab_natural_height) New function.
8374         (tab_natural_dimensions) New function.  This is a callback
8375         function, not something that you'd want to call directly.
8376         (tab_nat_dim) Removed.
8377         (tabi_table) Allocates t->w and t->h.
8378         (tabi_driver) Inlined sum_columns()'s functionality.  Calls the
8379         dimensions callback.
8380         (evaluate_dimensions) Removed.
8381         (sum_columns) Removed.
8382
8383         * tab.h: (enum TAL_1THIN) Removed.
8384         (enum series t_*) Removed.
8385         (struct tab_table) Members trh, trv changed to unsigned char *
8386         from int *.  Member dim changed to a function pointer from a
8387         unsigned char *.  Member max_stack_height removed.  New members
8388         hr_tot, vr_tot.
8389         (macros tab_l, tab_r, tab_t, tab_b) New.
8390
8391 Sat May 23 23:22:13 1998  Ben Pfaff  <blp@gnu.org>
8392
8393         * ascii.c: (delineate) Assign last_space_nchars before skipping
8394         spaces, to fix right justification.
8395
8396         * crosstabs.q: (static vars risk, direct) New vars.
8397         (static var pearson_r) Removed.
8398         (glob var chisq_fisher) Made static.
8399         (static vars row_tot[], col_tot[]) Don't include grand total
8400         anymore.
8401         (static var grand_total) Renamed W, all references changed.
8402         (output_pivot_table) Only make `table' if num_cells != 0.  Make
8403         risk and directional tables.  Deal with grand total no longer part
8404         of col_tot[].  Free rows and cols after we're done with them.
8405         (display_risk) New function.
8406         (display_directional) New function.
8407         (clac_r) Rewritten so that it stores all its results into its
8408         arguments, so it can be used for Spearman's correlation too.
8409         (calc_symmetric) Added a t[] argument, all references changed.
8410         Calculates ASEs for tau-b, tau-c, gamma.  Calculates Spearman's r,
8411         Pearson's r, Cohen's kappa.
8412         (calc_risk) New function.
8413         (calc_directional) New function.
8414
8415         * som.c: (som_submit) Improved debugging code.
8416
8417         * stats.c: (hypercube) New function.
8418         (cube) New function.
8419         (sqr) New function.
8420         (normal_sig) Went back to old implementation, which actually
8421         worked.
8422
8423         * stats.h: (macros square, cube, hypercube) Removed.  The
8424         equivalent functions in stats.c are inlined here; all references
8425         to square changed to sqr.
8426
8427 Fri May 22 00:03:41 1998  Ben Pfaff  <blp@gnu.org>
8428
8429         * crosstabs.q: (N_SYMMETRIC) New define.
8430         (postcalc) Disable debug printing.
8431         (static vars chisq_fisher, pearson_r) New.
8432         (output_pivot_table) Add support for symmetric measures.  Add
8433         chi-square output of exact sigs.
8434         (display_chisq) Rewritten.
8435         (display_symmetric) New function.
8436         (gamma_int) New function.
8437         (Pr) New function.
8438         (swap) New function.
8439         (calc_fisher) New function.
8440         (calc_chisq) Check boundary conditions better. Calculate Yates,
8441         Fisher, Mantel-Haenszel tests.
8442         (calc_r) New function.
8443         (calc_symmetric) New function.
8444
8445         * stats.c: (normal_sig) Rewritten with new algorithm.  Renamed
8446         from calc_normal.
8447         (chisq_sig) Better boundary conditions.  Renamed from
8448         calc_significance.
8449
8450         * tab.h: (struct tab_table) New member cf.
8451
8452         * tab.c: (tab_create) Set cf.
8453         (tab_width) New function.
8454         (tab_realloc) Handle cf.
8455         (tab_vline) Handle cf.
8456         (tab_hline) Handle cf.
8457         (tab_box) Handle cf.
8458         (tab_value) Handle cf.
8459         (tab_float) Handle cf.
8460         (tab_text) Handle cf.
8461         (tab_joint_text) Handle cf.
8462         (tab_offset) Handle cf.
8463         (tab_next_row) Handle cf.
8464         (evaluate_dimensions) Handle cf.
8465         (render_strip) Handle cf.
8466
8467 Wed May 20 00:03:59 1998  Ben Pfaff  <blp@gnu.org>
8468
8469         * crosstabs.q: (postcalc) New vars row_tot, col_tot, pass them to
8470         output_pivot_table().
8471         (output_pivot_table) Moved lots of local variables outside and
8472         made them static.  Add beginnings of chi-square statistic
8473         support.  Now column and row totals aren't in the main matrix.
8474         Always zero out any leftover rows & columns after we're done with
8475         the table entries.  Move all output stuff into
8476         display_dimensions(), display_crosstabs(), display_chisq().
8477         (display_dimensions) New function.
8478         (display_crosstabulation) New function.
8479         (display_chisq) New function.
8480         (calc_chisq) Implemented Pearson and likelihood-ratio chisquares.
8481
8482         * frequencies.q: (dump_full, dump_condensed) Remove tab_null()
8483         references, simplify logic.
8484
8485         * postscript.c: Remove scale, translate-x, translate-y,
8486         mirror-horz, mirror-vert, rotate-180 options.
8487         (struct ps_driver_ext) Remove scale, translate_x, translate_y.
8488         All references deleted.
8489         (macro YT) New macro.
8490         (array option_tab[]) Removed options.
8491         (ps_option) Removed options.
8492         (ps_open_page) Write page setup explicitly to output file, without
8493         using now-deleted BP function.
8494         (macro dump_line) Use YT().
8495         (macro dump_thick_line) Use YT().
8496         (draw_headers) Use YT().
8497         (switch_font) Reorder arguments to SF function.
8498         (write_text) Use YT().
8499
8500         * sfm-read.c: (sfm_read_case) Don't attempt to read variables that
8501         have get.fv == -1.
8502
8503         * sysfile-info.c: (describe_variables) Don't use tab_nulls().
8504
8505         * tab.c: (tab_create) Initialize t->ct to zeros.  Remove
8506         null-debugging code.
8507         (tab_realloc) Remove null-debugging code.  Initialize new regions
8508         of t->ct to zeros.
8509         (tab_vline) Support offsets.
8510         (tab_hline) Support offsets.
8511         (tab_box) Support offsets.
8512         (tab_null) Removed.
8513         (tab_nulls) Removed.
8514         (tab_row) Removed.
8515         (tab_col) Removed.
8516         (evaluate_dimensions) Remove null-debugging code.  Understand
8517         TAB_EMPTY attribute.  Assert that text.s.s is always non-NULL if
8518         TAB_EMPTY not present.
8519
8520         * tab.h: New cell attribute TAB_EMPTY.
8521         (macros tab_nr, tab_nc, tab_row, tab_col) New.
8522
8523         * vars-atr.c: (init_variable) Set get.fv to -1 so that GET doesn't
8524         try to read them from system files.
8525
8526         * vfm.c: (dump_splits) Don't call tab_null().   
8527
8528 Sat May 16 19:36:55 1998  Ben Pfaff  <blp@gnu.org>
8529
8530         * crosstabs.q: (struct crosstab) Added `missing' member.
8531         (custom_tables) Init missing.
8532         (calc_general) Handle missing values.
8533         (calc_chisq) New function.
8534         (output_pivot_table) Start work on chi-square output.  Update for
8535         new tab offset support functions.  Shorten statistic names.
8536
8537         * Several files: add in more `const's to placate gcc's warnings.
8538
8539         * tab.h: (struct tab_table) Add col_ofs, row_ofs members.  Comment
8540         fixes.
8541
8542         * tab.c: (tab_height, tab_realloc, tab_vline, tab_hline, tab_box,
8543         tab_null, tab_nulls, tab_value, tab_float, tab_text,
8544         tab_joint_text) Add col_ofs and row_ofs support.
8545         (tab_offset) New function.
8546         (tab_next_row) New function.
8547         (tab_row) New function.
8548         (tab_col) New function.
8549         (tabi_table) Add col_ofs and row_ofs support.
8550
8551         * vars-atr.c: (is_system_missing) New function.
8552
8553 Tue May 12 16:14:30 1998  Ben Pfaff  <blp@gnu.org>
8554
8555         * crosstabs.q: Expanded subcommand names RESID --> RESIDUAL, etc.
8556         (static var no_cells) Removed.
8557         (static var num_cells) New.
8558         (static var expected) New.
8559         (static var cells[]) New.
8560         (internal_cmd_crosstabs) Deal with new variables.
8561         (postcalc) Removed most of the meat and put it in new function
8562         output_pivot_table().
8563         (output_pivot_table) Calculates and outputs an entire pivot table.
8564
8565         * postscript.c: (postopen) Fix problems with free()ing addresses
8566         not obtained from malloc().
8567
8568         * som.c: (som_submit) Add assertion.
8569
8570         * sysfile-info.c: (describe_variable) Use new tab_nulls()
8571         function.
8572
8573         * tab.c: (static var tab_names[]) New.
8574         (tab_realloc) -1 for nc or nr indicates no change.
8575         (tab_nulls) New function.
8576         (tab_dim) Use tab_names[].
8577         (tabi_cumulate) Don't include bottom or right headers.  Furrfu.
8578         (evaluate_dimensions) Don't terminate on uninited cells, just put
8579         an X in them and emit a notice.  Use tab_names[].
8580
8581         * tab.h: Move bits into tab.def.
8582
8583         * tab.def: New.  Don't try to declare tab_table_class because then
8584         som.h has to be included.       
8585         
8586 Thu May  7 22:55:04 1998  Ben Pfaff  <blp@gnu.org>
8587
8588         * command.def: New file, contains all the command definitions
8589         previously included bodily in command.c.
8590
8591         * format.def: New file, contains all of the format definitions
8592         previously split across format.h, format.c, and sfm-write.c.
8593
8594         * lexer.h: Renamed from tokens.h in order to match corresponding
8595         .c file name.
8596
8597         * lexerP.h: Moved some rarely used functions exported by lexer.c
8598         into here.
8599
8600         * Makefile.am: Commemorate renamed files.
8601         (EXTRA_DIST) Add command.def, format.def.
8602
8603         * command.c: [0] (walk_cmdtable_func) Removed.
8604
8605         * crosstabs.q: (postcalc) Made it work and print out matrices
8606         proving it.
8607         (enum_column_values) Renamed enum_var_values, generalized for any
8608         variable.
8609
8610         * format.h: (struct fmt_desc) New member `spss'.
8611
8612         * q2c.c: (main) Generated code includes lexer.h instead of
8613         tokens.h.
8614
8615         * sfm-write.c: (write_format_spec) Use new spss member of fmt_spec
8616         instead of an independent translation table.
8617
8618 Tue May  5 13:19:03 1998  Ben Pfaff  <blp@gnu.org>
8619
8620         * Lots of source files: Added const to declarations.
8621
8622         * aggregate.c: (parse_aggregate_function) Rename inner i to j.
8623         
8624         * arena.c: (arena_clear) Set prev pointer to null when done.
8625
8626         * ascii.c: (ascii_option) Rename index as indx.
8627
8628         * avl.c: This is now a separate library called libavl.
8629         (xmalloc) Make static.
8630         (avl_probe) Step A7 can use the cache instead of an explicit
8631         compare.
8632         (avl_delete) Don't maintain a q pointer because it's always
8633         available in the pointer stack.  Comment fix.
8634
8635         * avl.h: This is now a separate library called libavl.
8636
8637         * command.c: (cmd_table[]) Remove spurious trailing "".
8638
8639         * common.h: Only include random() fix if this system needs it.
8640
8641         * crosstabs.q: Include alloca headers.
8642         (n_sorted_tab) New global var.
8643         (postcalc) Mostly rewritten.
8644         (find_pivot_extent) Rewritten.
8645         (enum_column_values) Rewritten.
8646
8647         * data-out.c: (convert_F) Rename inner n as n_spaces.
8648
8649         * error.c: (dump_message) Don't have an outer var i.
8650
8651         * file-handle.q: (static var f) Removed.  All references removed.
8652         (internal_cmd_file_handle) Uses a local variable instead of f.
8653
8654         * get.c: (trim_dictionary) Change scope of i, i1, i2.
8655         (cmd_match_files) Don't strcpy tokstr into sbc (why was this ever
8656         done?)
8657
8658         * getline.h: Declare getl_history as extern.  Reported by
8659         palme@uni-wuppertal.de (Hubert Palme).
8660
8661         * postscript.c: (postopen) Some large mods for constness.
8662
8663         * recode.c: Remove spurious copyrights since PSPP is owned by FSF
8664         anyway.
8665
8666 Fri Apr 24 12:52:47 1998  Ben Pfaff  <blp@gnu.org>
8667
8668         * Makefile.am: Rename BUILT_SOURCES to q_sources, all references
8669         changed.  Add avl.c, avl.h to pspp_SOURCES.  Remove avllib from
8670         LDADD.
8671
8672         * avl.c, avl.h: New files.  These form a clean-room
8673         reimplementation of avllib.  Iterative algorithms are used in
8674         place of recursive ones, so there is no resemblance in the code.
8675
8676         * Lots of headers: Don't include other headers by default.
8677
8678         * Lots of source files: Explicitly include all needed headers.
8679
8680         * arena.c: (arena_clear) New function.
8681
8682         * crosstabs.q: (ROW_VAR, COL_VAR) New enums.
8683         (static var ar) Removed.
8684         (staitc vars ar_tc, ar_col) New.
8685         (cmd_crosstabs) Destroy the arenas.
8686         (internal_cmd_crosstabs) Create the arenas.
8687         (precalc) Don't need a free function for the hash.
8688         (calc_general) Make sure to zero out the trailer on the key data
8689         before inserting.
8690         (print_table_entries) Updated.
8691         (postcalc) Worked on actually implementing.
8692         (find_pivot_extent) New function.
8693         (compare_value) New function.
8694         (enum_column_values) New function.
8695
8696         * data-in.c: (parse_month) Make local array `static const'.
8697         
8698         * data-out.c: (convert_date) Make local array `static const'.
8699         (convert_WKDAY) Same.
8700         (convert_MONTH) Same.
8701
8702         * frequencies.q: (postprocess_freq_tab) avl_walk_inorder() has
8703         been renamed to avl_walk().
8704         
8705         * hash.c: Rewritten more efficiently.
8706
8707         * hash.h: Add attribute const to hsh_next_prime declaration.
8708
8709         * lexer.c: (id_match) Make arguments const.
8710
8711         * postscript.c: (ps_postopen_driver) Make default fonts the
8712         Helvetica family.
8713
8714         * q2c.c: (main) Generated code needs stdlib.h.
8715
8716         * sfm-write.c: (write_value_labels) An avl_traverser needs to be
8717         initialized to 0 now, not to NULL.  All other references to
8718         avl_traverser were updated in the same way.
8719
8720         * tokens.h: Macro version of id_match updated to use const
8721         properly.
8722
8723         * val-labs.c: (inc_ref_count) New function.
8724         (copy_value_labels) Simply through use of new avl_copy() function.
8725
8726 Wed Apr 15 13:01:58 1998  Ben Pfaff  <blp@gnu.org>
8727
8728         * crosstabs.q: Probably doesn't compile.  New PIVOT subcommand.
8729         (postcalc) Worked on this.
8730
8731         * postscript.c: (OPO_DOUBLE_LINE) New enum.
8732         (struct ps_driver_ext) New line_width_thick member.
8733         (ps_preopen_drive) Init line_width_thick.
8734         (option_tab[]) Add line-* options.
8735         (ps_option) Parse line-* options.
8736         (postopen) Add line_width_thick support.  Strip leading spaces on
8737         prologue output lines.
8738         (ps_open_page) Include line_width_thick in output.
8739         (macro dump_thick_line) New.
8740         (dump_fancy_line) Support thick lines as well as double lines.
8741
8742 Tue Apr 14 00:50:08 1998  Ben Pfaff  <blp@gnu.org>
8743
8744         * Makefile.am: Add crosstabs.c to BUILT_SOURCES.  Add crosstabs.q
8745         to pspp_SOURCES.  Add crosstabs.q to EXTRA_DIST.
8746
8747         * Many source files: Rename `options' to `pv_opts' as appropriate.
8748
8749         * command.c: (static var cmd_table[]) Add CROSSTABS command.
8750
8751         * common.c: (xcalloc) New function.
8752
8753         * crosstabs.q: New file.  Not finished yet, though.
8754                 
8755         * data-list.c: Comment fix.
8756
8757         * error.c: Remove some old Checker cruft.
8758
8759         * frequencies.q: (dump_full) Cumulate valid percent instead of
8760         regular percent.
8761
8762         * getline.c: Comment fix.
8763
8764         * hash.c: Comment fixes.
8765
8766         * hash.h: (struct hsh_table) Make hash functions return unsigned
8767         instead of int to avoid problems with taking the modulo of
8768         negative return values.  All references changed.
8769
8770         * misc.c: (intlog10) Make its table static const instead of auto.
8771
8772         * sfm-read.c: (read_header) Make `prefix' static const instead of
8773         auto.
8774
8775         * var.h: (union value) Add member `hash'.
8776         (struct variable) Rename prv_index as `foo'--all references
8777         changed.  Reorder.
8778         (typedef pv_opts) Removed.  All references changed.
8779
8780         * vars-prs.c: (parse_variables) Message fixes.
8781         
8782 Mon Mar  9 15:35:08 1998  Ben Pfaff  <blp@gnu.org>
8783
8784         * get.c: (cmd_match_files) Don't reverse the order of FILEs as
8785         they are being inserted.  Don't check for BY variables of
8786         different types.  Discard variables if the active file isn't
8787         included in the merge.
8788         (mtf_processing) Essentially rewritten.
8789         (mtf_merge_dictionary) Check for master/slave variables of
8790         different types/widths.
8791
8792         * vfm.c: (static var not_canceled) New var.
8793         (process_active_file) Don't call vfm_source->read() if
8794         there's no vfm-source.  Initialize not_canceled.
8795         (process_active_file_write_case) Honor and update not_canceled.
8796         (prepare_for_writing) Rollback changes from yesterday, they were
8797         wrong.
8798         (close_active_file) Don't destroy vfm_source unless it exists.
8799         
8800 Mon Mar  9 00:56:16 1998  Ben Pfaff  <blp@gnu.org>
8801
8802         * Lots of source files: Added { } around nested if/else constructs
8803         to avoid new gcc 2.8 warnings.
8804
8805         * data-in.c: (parse_Z) Declare `int' type explicitly.
8806         (convert_Z) Ditto.
8807
8808         * get.c: (struct mtf_file) Add prev, next_min, by, input members.
8809         (cmd_match_files) Initialize mtf_by_values.  Manage by, input,
8810         prev members.  Put TABLEs at the end of the chain and FILEs at the
8811         beginning.  Don't allow the active file in STATE_INIT.  Use proper
8812         `seen' value for the active file.  Fill out the by members and
8813         make sure they're of consistent type.  Do the actual merge
8814         operation.
8815         (mtf_processing_finish) New function.
8816         (var_type_description) New function.
8817         (mtf_free_file) New function.
8818         (mtf_free) Rewritten.
8819         (mtf_delete_file_in_place) New function.
8820         (mtf_read_nonactive_records) New function.
8821         (mtf_compare_BY_values) New function.
8822         (static var mtf_seq_no) New var.
8823         (mtf_processing) New function.
8824         (mtf_merge_dictionary) Assign nval members for the system file
8825         dictionary.  Assign fv values for its variables.  Point each slave
8826         variable to the corresponding master variable.
8827
8828         * hash.c: Include str.h.
8829
8830         * mis-val.c: (copy_missing_values) src arg is const.
8831
8832         * misc.c: (spacing) Make `max' var explicitly int.
8833
8834         * sfm-read.c: (dump_dictionary) Message reformatting.
8835         (sfm_read_case) Add assertion.
8836
8837         * sort.c: Esthetic fixes.
8838
8839         * var.h: (struct match_files_proc) New struct.
8840         (struct variable) Add private data match_files_proc.
8841
8842         * vars-atr.c: (delete_variable) Implement.  Add argument for the
8843         dictionary that owning the variable.
8844         (dup_variable) Add assertion.
8845
8846         * vfm.c: Comment fixes, hopefully the comments are correct now.
8847         (process_active_file) New function.
8848         (process_active_file_write_case) New function.
8849         (process_active_file_output_case) New function.
8850         (prepare_for_writing) Use temp_dict->nval for vfm_info, not
8851         default_dict.nval.
8852         (write_case) Renamed procedure_write_case().  Now write_case is a
8853         pointer to a function.  Style fixes.
8854         
8855 1998-03-05  Ben Pfaff  <blp@gnu.org>
8856
8857         * Makefile.am: (q2c) Link with libmisc.
8858         (version.c) Define default_config_path, include_path,
8859         groff_font_path.
8860
8861         * ascii.c: (ascii_postopen_driver) When the default newline string
8862         is requested, open file in text mode.  Suggested by
8863         palme@uni-wuppertal.de (Hubert Palme).
8864         (static vars line_buf, line_p) Change from char * to unsigned char
8865         *.
8866         (ascii_close_page) char * to unsigned char *.
8867
8868         * cmdline.c: (parse_command_line) Implement -r option by
8869         prepending ~/.pspp/rc to the list of files to process.
8870
8871         * command.c: (cmd_remark) Reset getl_prompt to the standard prompt
8872         before pulling in a final line.
8873         (null_func, null_int_func) Removed (dead code).
8874
8875         * descript.q: (display) Calculate width of variable name column
8876         properly.  Calculate number of valid cases properly.  Reported by
8877         palme@uni-wuppertal.de (Hubert Palme).
8878
8879         * filename.c: (init_filename) Use default_config_path instead of
8880         now obsolete CONFIG_PATH.
8881
8882         * getline.c: (getl_initialize) Use include_path instead of now
8883         obsolete INCLUDE_PATH.
8884         (getl_add_file) New argument `where'.  All references changed.
8885
8886         * groff.c: (find_font_file) Use groff_font_path instead of now
8887         obsolete GROFF_FONT_PATH.
8888         
8889         * postscript.c: (find_ps_file) Use groff_font_path instead of now
8890         obsolete GROFF_FONT_PATH.  Copy through temporary variable to
8891         avoid problems with constness.
8892
8893         * str.h: (macro cs_streq) New macro.
8894
8895         * version.h: (glob var default_config_path, include_path,
8896         groff_font_path) New vars.
8897         
8898 1998-02-23  Ben Pfaff  <blp@gnu.org>
8899
8900         * Many source files: Change verbose_msg() priority levels and
8901         messages.
8902
8903         * aggregate.c: Include debug-print.h.
8904
8905         * cmdline.c: (parse_command_line) Add --safer/-s and --command/-c
8906         options.
8907         (static var pre_syntax_message) Document --safer/-s and
8908         --command/-c.
8909
8910         * command.c: (cmd_erase, cmd_host) Disable if set_safer is set.
8911
8912         * dfm.c: (open_inline_file) [__CHECKER__] Zero out ext->file,
8913         because it's not used but it's still copied.
8914         (open_file_r) Remove gratuitous debug message.
8915
8916         * filename.c: (safety_violation) New function.
8917         (open_file) Remove gratuitous debug messages.  Don't allow pipe
8918         files if set_safer is set.
8919
8920         * get.c: Turn off debugging.
8921
8922         * getline.c: (getl_add_virtual_file) New function.
8923         (getl_read_line) Add verbose_msg() call for opening new syntax
8924         file.
8925         (getl_perform_delayed_reset) Add a return value describing whether
8926         any action was taken.  Call reset_eof().
8927
8928         * getline.h: Comment fix.
8929
8930         * groff-font.c: (groff_read_font) Use `goto next_iteration' in
8931         place of incorrect `continue'.  Use strtok_r() instead of
8932         strtok().  Always check strtok_r() return value.
8933         (groff_read_DESC) Use strtok_r() instead of strtok().
8934
8935         * lexer.c: (reset_eof) New function.
8936
8937         * main.c: (parse) Get a token after performing a delayed reset
8938         action; allow empty syntax files.
8939
8940         * postscript.c: (output_encodings) Use strtok_r() instead of
8941         strtok().
8942
8943         * q2c.c: (dump_parser) Use strtok_r() instead of strtok().
8944
8945         * set.q: Comment fixes.
8946         (glob var set_safer) New var.
8947         (internal_cmd_set) Support SAFER.
8948
8949         * str.h: [!HAVE_STRTOK_R] Declare strtok_r() prototype.
8950
8951         * temporary.c: (free_dictionary) Set d->splits to NULL after
8952         freeing.
8953
8954         * vars-atr.c: (clear_variable) Decrement dict->n_splits if
8955         variable deleted, not if it *isn't* deleted.
8956
8957 1998-02-16  Ben Pfaff  <blp@gnu.org>
8958
8959         * command.c: (array cmd_table[]) Add MATCH FILES.
8960
8961         * common.c: Comment fixes.
8962
8963         * data-list.c, dfm.c, error.c, filename.c, list.q, matrix-data.c,
8964         modify-vars.c, postscript.c, sfm-read.c, sfm-write.c, tab.c:
8965         Include alloca.h.  Problem reported by palme@uni-wuppertal.de
8966         (Hubert Palme).
8967
8968         * expr-opt.c: Include str.h.  Problem reported by
8969         palme@uni-wuppertal.de (Hubert Palme).
8970
8971         * get.c: (cmd_get) [DEBUGGING] Update v->p.get to v->get.
8972         (static var mtf_by) Change from char ** to variable **.
8973         (static var mtf_master) New var.
8974         (mtf_merge_dictionary) New function.
8975         (cmd_match_files) Init mtf_master.  Parse mtf_by according to new
8976         var type.  Reorder tests properly.  Initialize file->dict.  Detect
8977         TABLE= without BY=.  Read file dictionaries and merge them.  Give
8978         subcommand name with IN, LAST, FIRST error messages.  Create IN,
8979         LAST, FIRST variables.  Comment fixes.
8980         (mtf_free) Don't free default_dict.  Free mtf_master.
8981
8982         * getline.c: Define getl_mode.  Change getl_buf_size to size_t
8983         from int.
8984         (handle_line_buffer) Cast int to size_t in comparison to avoid
8985         warning.
8986
8987         * getline.h: Declare getl_mode extern.
8988
8989         * groff-font.c: (groff_read_font) Type-fix calls to getline.
8990         (groff_read_DESC) Make line_size a size_t.
8991         (match_tok) Parenthesize name to avoid macro expansion.
8992
8993         * mis-val.c: (copy_missing_values) New function.
8994
8995         * postscript.c: (postopen) Make buf_size a size_t.
8996
8997         * sfm-read.c: (dump_dictionary) Make global from static.  Print
8998         variable info in parts for easier debugging with Checker.
8999
9000         * temporary.c: (copy_variable) Use copy_value_labels().
9001         (new_dictionary) New arg: whether to copy file label, documents.
9002
9003         * val-labs.c: (copy_value_labels) New function.
9004
9005         * var.h: (enums MISSING_*) Add MISSING_COUNT.
9006
9007         * vars-atr.c: [GLOBAL_DEBUGGING] (force_dup_variable) New
9008         function.
9009         (dup_variable) Set prv_index, get.fv, get.nv.
9010
9011 Fri Feb 13 15:38:36 1998  Ben Pfaff  <blp@gnu.org>
9012
9013         * Makefile.am: (pspp_SOURCE) Add htmlP.h.
9014
9015         * Many source files: For ANSI-compliance, add empty statement
9016         after label.  Reported by palme@uni-wuppertal.de (Hubert Palme)
9017         and Micah Altman <maltman@www-vdc.fas.harvard.edu>.
9018
9019         * data-in.c: (parse_numeric) Some header files break on
9020         -DBL_MIN_10_EXP because they get a --; add () for safety.
9021         Reported by palme@uni-wuppertal.de (Hubert Palme).
9022
9023         * dfm.c: Idea by Dr Eberhard W Lisse <el@linux.lisse.na>.
9024         (struct dfm_fhuser_ext) Change `file' from FILE * to file_ext.
9025         (dfm_close) Use close_file_ext.
9026         (open_inline_file) Set file.file to NULL, not file.
9027         (open_file_r, open_file_w) Initialize file.file; fill in file_ext
9028         struct and use open_file_ext().
9029         (read_record) Use file.file.
9030
9031         * file-handle.q: (prepend_current_directory) Pass through special
9032         filenames.
9033
9034         * filename.c: Only include unistd.h if HAVE_UNISTD_H.
9035         (normalize_filename) Pass through special filenames.
9036         (open_file, close_file) Accept pipe| and |pipe syntaxes as
9037         equivalent.
9038         (dirname) Rename blp_dirname() because of name conflict on some
9039         OS.  All references changed.  Reported by palme@uni-wuppertal.de
9040         (Hubert Palme).
9041         (is_special_filename) New function.
9042
9043         * get.c: (GTSV_OPT*) Add GTSV_OPT_MATCH_FILES.
9044         (trim_dictionary) Conditionalize some of the options on whether
9045         GTSV_OPT_MATCH_FILES is in *options.
9046         (rename_variables) Don't allow variables to be renamed as scratch
9047         variables.
9048         (MTF_*) New enum series.
9049         (struct mtf_file) New struct.
9050         (static vars mtf_head, mtf_tail, mtf_by, mtf_n_by, mtf_free) New
9051         vars.
9052         (cmd_match_files, mtf_free) New functions.
9053
9054         * lexer.c: (match_int) Needed parentheses around name to escape
9055         macro expansion.  Reported by Micah Altman
9056         <maltman@www-vdc.fas.harvard.edu>.
9057
9058         * print.c: Needed to include alloca.h.  Reported by Micah Altman
9059         <maltman@www-vdc.fas.harvard.edu>.
9060
9061         * recode.c: (convert_to_double) Parenthesize -DBL_MIN_10_EXP to
9062         -(DBL_MIN_10_EXP).  Reported by palme@uni-wuppertal.de (Hubert
9063         Palme).
9064         
9065         * str.h: Include stdarg.h.  Reported by palme@uni-wuppertal.de
9066         (Hubert Palme) and Micah Altman <maltman@www-vdc.fas.harvard.edu>.
9067
9068 Thu Feb  5 00:18:21 1998  Ben Pfaff  <blp@gnu.org>
9069
9070         * html.c: (struct html_driver_ext) Move into htmlP.h.
9071         (html_preopen_driver) Initialize cp_x, cp_y.
9072         (html_submit) Implement as call to output_tab_table().
9073         (change_attributes) New function.
9074         (escape_string) New function.
9075         (output_tab_table) New function.
9076
9077         * list.q: (write_all_headers) Add code for writing headers for the
9078         html driver.
9079         (clean_up) Write out the html close-table tag.
9080         (determine_layout) Ignore html driver.
9081         (list_cases) Write html data.
9082
9083         * som.c: (som_submit) Move more of the code into output_table().
9084
9085         * tab.c: (static var hit) Make a global var and rename tab_hit.
9086         (static var tab_table_class) Make a global var.
9087
9088         * htmlP.h: New file.
9089
9090 Tue Feb  3 16:12:18 1998  Ben Pfaff  <blp@gnu.org>
9091
9092         * dump-sysfile.c: Removed.
9093
9094         * html.c: (preclose) Change comment in emitted code.
9095
9096         * matrix-data.c: Debugging off by default.  Comment fixes.
9097         (static var container) New var.
9098         (cmd_matrix_data) Create and destroy container.  Initialize
9099         is_per_factor[] to 0s.  Move code into new function
9100         string_to_content_type().  Require split values to be present in
9101         the data when ROWTYPE_ is explicit.  Call specific function, not
9102         general read_matrices().
9103         (string_to_content_type) New function.
9104         (context) Exclude all whitespace, not just spaces.
9105         (mget_token) A dot is a number.  Add assertion.
9106         (static var data) Renamed nr_data.
9107         (static var factor_values) Renamed nr_factor_values.
9108         (read_matrices) Renamed read_matrices_without_rowtype().  Handle
9109         only specific case.  Close data_file before exit.
9110         (fill_matrix) New function.
9111         (read_data_lines) Renamed nr_read_data_lines().  Remove debug
9112         printing.  Style fixes.  Message fixes.  Move code into
9113         fill_matrix().
9114         (read_matrices_without_rowtype) Rename
9115         matrix_data_read_without_rowtype().  Fix off-by-one error on
9116         loops.  Allocate nr_data[] memory from arena.
9117         (read_matrices_with_rowtype) Removed.
9118         (read_splits) Renamed nr_read_splits().  Style fixes.
9119         (read_factors) Renamed nr_read_factors().
9120         (dump_cell_content) Comment fixes.  Arguments changed.  Change
9121         debug printing.  All references changed.
9122         (output_data) Renamed nr_output_data().
9123         (static var wr_content) New var.
9124         (struct factor_data) New struct.
9125         (static var wr_data) New var.
9126         (static var wr_current) New var.
9127         (matrix_data_source_destroy_source) Removed.
9128         (read_matrices_with_rowtype) New function.
9129         (matrix_data_read_with_rowtype) New function.
9130         (wr_read_splits) New function.
9131         (compare_factors) New function.
9132         (wr_output_data) New function.
9133         (wr_read_rowtype) New function.
9134         (wr_read_factors) New function.
9135         (wr_read_indeps) New function.
9136         (glob var matrix_data_source) Make destroy_source member NULL as
9137         well.
9138
9139 Fri Jan 23 00:09:08 1998  Ben Pfaff  <blp@gnu.org>
9140
9141         * lexer.c: (syntax_error) Give better error message when at end of
9142         file.
9143
9144         * matrix-data.c: (var content_names[]) Fix PROX spelling.  Change
9145         N_SCALAR to output as plain N.
9146         (mdump_token) Change output format.
9147         (context) Fix message output interaction with spaces in input.
9148         (another_token) New function.
9149         (force_eol) Improved error message.
9150         (static var max_cell_index) New var.
9151         (read_matrices) Init `cells'.  factor_values is now per-cell.
9152         Init max_cell_index.
9153         (read_data_lines) Replace `compare' local with new `compare' arg.
9154         Debugging messages changed.  Only read factors if per_factor.
9155         Propagate error return from read_factors(), force_eol().
9156         Copy N_SCALAR values across the N vector.
9157         (read_matrices_without_rowtype) Don't init `cells'.  Don't need to
9158         check parentheses manually since we now have is_per_factor[].
9159         Call read_data_lines() with new args.  Check for end of data after
9160         looping, using another_token().
9161         (read_factors) Arguments changed.  Use max_cell_index to determine
9162         whether to read or compare factors.  Message fixes.
9163         (dump_cell_content) New function.
9164         (output_data) Completely rewritten because content types were
9165         supported to be nested inside factor values, not vice versa.
9166         
9167 Thu Jan 22 00:26:38 1998  Ben Pfaff  <blp@gnu.org>
9168
9169         * lexer.c: (syntax_error) Support formatted varargs messages.
9170
9171         * matrix-data.c: Turn debugging on by default.
9172         (static content_type[]) New array.
9173         (static content_names[]) New array.
9174         (static rowtype_, varname_) New vars.
9175         (static is_per_factor[]) New array.
9176         (static split_values) Moved declaration.
9177         (static n_continuous, first_continuous) New var.
9178         (cmd_matrix_data) Don't init split_values.  Assign ROWTYPE_ to
9179         rowtype_.  Simplify SPLIT code.  Init is_per_factor[].  Assign
9180         VARNAME_ to varname_.  Initialize first_continuous, n_continuous.
9181         Check for continuous variables.
9182         [DEBUGGING] (debug_print) Remove content_names[].
9183         (mdump_token) New macro.
9184         (mget_token_dump) New function.
9185         (mdump_token) New function.
9186         (context) New function.
9187         (mget_token) Fix messages.
9188         (static var data, split_values, factor_values) New vars.
9189         (read_matrices) Manage split_values, factor_values.
9190         (read_data_lines) New function.
9191         (read_matrices_without_rowtype) Implemented.
9192         (read_splits) Message fixes.  Uses `just_read'.
9193         (read_factors) New function.
9194         (output_data) New function.
9195         (matrix_data_source_destroy_source) Close the file handle.
9196         (glob var matrix_source) Change name from "DATA LIST" to "MATRIX
9197         DATA".
9198
9199         * str.c: (strpadcmp) Removed.
9200
9201         * vfm.c: (dump_splits) Initialize i; fix test for end of splits.
9202
9203 Sun Jan 18 00:30:59 1998  Ben Pfaff  <blp@gnu.org>
9204
9205         * Lots of source files: Add cast to unsigned character to calls to
9206         tolower() and toupper().
9207
9208         * aggregate.c: Set default_dict.splits to NULL.
9209
9210         * command.c: (static variable tab[]) Add MATRIX DATA.
9211
9212         * data-in.c: Add debugging defines.  Formatting fixes.
9213
9214         * expr-opt.c: Formatting fixes.
9215
9216         * lexer.c: (syntax_error) Message fixes.
9217
9218         * matrix-data.c: New enum series.
9219         (static vars fmt, section, diag, explicit_rowtype, signle_split,
9220         split_values, n_factors, factors, cells, pop_n, contents,
9221         n_contents) New vars.
9222         (cmd_matrix_data) Finished implementation.
9223         (compare_variables_by_mxd_vartype) New function.
9224         [DEBUGGING] (debug_print) New function.
9225         (static vars mtoken, mtokstr, mtoklen, mtokval) New vars.
9226         (read_matrices) New function.
9227         (read_matrices_without_rowtype) New function.
9228         (read_matrices_with_rowtype) New function.
9229         (read_splits) New function.
9230         (mget_token) New function.
9231         (force_eol) New function.
9232         [0] (test_tokenizer) New function.
9233         (matrix_data_source_destroy_source) New function.
9234         (glob var matrix_data_source) New var.
9235
9236         * misc.h: Include ieeefp.h if present.
9237
9238         * split-file.h: (cmd_split_file) Changes corresponding to struct
9239         dictionary changes.
9240
9241         * str.h: Fix memmem prototype.
9242
9243         * temporary.c: (save_dictionary, restore_dictionary,
9244         free_dictionary) Changes corresponding to struct dictionary
9245         changes.
9246
9247         * var.h: (MXD_* enums) New enum series.
9248         (struct matrix_data_proc) New struct.
9249         (struct split) Removed.
9250         (struct dictionary) Changed `splits' member from `split *' to
9251         `variable **'.
9252         (macro force_create_variable) New macro.  Replaced lots of
9253         create_variable()/assert() calls with calls to this macro.
9254
9255         * vars-atr.c: (discard_variables) Changed assertion.
9256         [GLOBAL_DEBUGGING] (force_create_variable) New function
9257         called by the macro of the same name.
9258         (clear_variable) Changes to delete splits from the dictionary
9259         corresponding to struct dictionary changes.
9260
9261         * vars-prs.c: (parse_variables) [GLOBAL_DEBUGGING] Check for
9262         corrupted variable `index' values in the dictionary passed in
9263         every time this function is called.
9264
9265         * vfm.c: (dump_splits, SPLIT_FILE_procfunc) Changes corresponding
9266         to struct dictionary changes.
9267
9268 Tue Jan 13 23:45:02 1998  Ben Pfaff  <blp@gnu.org>
9269
9270         * Makefile.am: (pspp_SOURCES) Add matrix-data.c.
9271
9272         * command.c: New includes.
9273         (static array cmd_table[]) Add ERASE, HOST, NEW FILE.
9274         (cmd_erase) New function.
9275         [unix] (shell) New function.
9276         (run_command) New function.
9277         (cmd_host) New function.
9278         (cmd_new_file) New function.
9279
9280         * expr-prs.c: (parse_primary) Message fix.
9281
9282         * inpt-pgm.c: Formatting fix.
9283         (cmd_reread) Implement the FILE subcommand.
9284
9285         * matrix-data.c: New file.
9286
9287         * q2c.c: (dump_header) Change output commenting style.
9288
9289         * weight.c: Comment fix.
9290
9291 Tue Jan 13 00:53:39 1998  Ben Pfaff  <blp@gnu.org>
9292
9293         * aggregate.c: (buf64_10x) Renamed buf64_1xx, all references
9294         changed.
9295         (buf_10x) Renamed buf_1xx, all references changed.
9296         (cmd_aggregate) Implemented cases 010, 011, 110, and 111 (all
9297         cases now implemented).
9298         (create_sysfile) New function.
9299         (agr_11x_func) New function.
9300
9301         * data-in.c: (parse_numeric) Work properly if there's an
9302         explicitly coded decimal point in the data and decimal places are
9303         specified on DATA LIST.  Bug reported by Dr Eberhard W Lisse
9304         <el@linux.lisse.na>.
9305
9306         * get.c: (cmd_get, cmd_save_internal) Allow extraneous slash
9307         before file specification on GET, SAVE, XSAVE.  Bug reported by Dr
9308         Eberhard W Lisse <el@linux.lisse.na>.
9309
9310         * q2c.c: [!HAVE_STRERROR] Include misc/strerror.c, not
9311         strerror.c.  Bug reported by Alexandre Oliva
9312         <oliva@dcc.unicamp.br>.
9313
9314         * sort.c: Include sort.h.  Comment fixes.  A few esthetic fixes.
9315         (static var separate_case_tab) New var.
9316         (cmd_sort_cases) Cancel temporary transformations here.  Free
9317         v_sort before return.
9318         (sort_cases) Run an EXECUTE procedure if SEPARATE is nonzero and
9319         we're reading from a sort stream.  Don't cancel temporary
9320         transformations.  Offload internal sorting to do_internal_sort().
9321         (do_internal_sort) New function.  Handles internal sorting even
9322         when SEPARATE is nonzero.  Doesn't free v_sort.
9323         (do_external_sort) Take new arg SEPARATE.  Only destroy `x' if
9324         it's non-NULL.
9325         (write_initial_runs) Take new arg SEPARATE.  Only destroy the old
9326         sink if SEPARATE is zero.
9327         (read_output_cases) Renamed read_sort_output(), all references
9328         changed.  Now uses separate_case_tab when it exists.
9329         (write_separate) New function.
9330
9331         * vfm.c: (page_to_disk) Destroy memory_source_cases, not
9332         memory_sink_cases.  Don't redundantly call
9333         vfm_source->destroy_source().
9334         (memory_stream_mode) After switching over, set memory_sink_cases
9335         to NULL.
9336
9337 Sat Jan 10 23:35:51 1998  Ben Pfaff  <blp@gnu.org>
9338
9339         * aggregate.c: (struct agr_var) Expand dbl[] array from 2 to 3
9340         elements.
9341         (static var prev_case) New, moved out of aggregate_single_case()
9342         local scope.
9343         (static var buf64_10x, buf_10x) New.
9344         (cmd_aggregate) Initialize prev_case.  Comment fixes.  Implement
9345         the 000, 001, 100, and 101 cases.  Free prev_case.
9346         (parse_aggregate_functions) Disallow scratch variables.
9347         (free_aggregate_functions) Only free agr_dict if non-null.  Use
9348         iter->function to determine numeric/string type, not
9349         iter->src->type.
9350         (aggregate_single_case) Don't manage prev_case.  Initialize
9351         aggregate info after dumping it.
9352         (accumulate_aggregate_info) Fix sum, weighted sum, mean, weighted
9353         mean, stddev, weighted stddev definitions.
9354         (dump_aggregate_info) Implemented.
9355         (initialize_aggregate_info) Renamed from
9356         initialize_aggregate_functions().  Initializes dbl[2].
9357         (agr_00x_trns_proc, agr_00x_end_func, write_case_to_sfm,
9358         agr_10x_trns_proc, agr_10x_trns_free, agr_10x_end_func) New.
9359
9360         * cases.c: (alloc_val) Removed.
9361
9362         * get.c: (cmd_save_internal) Initialize new `dict' member.
9363
9364         * sfm-write.c: (sfm_write_dictionary, write_header,
9365         write_variable, write_value_labels, write_documents) Reorganize,
9366         simplify for new parameter structure.
9367         (write_variable) Only one variable * argument now.
9368
9369         * sfm.h: (struct sfm_write_info) Removed `pri', `sec', and
9370         replaced by new `dict' member.
9371
9372         * temporary.c: (new_dictionary) Initialize n_documents.
9373
9374         * vars-atr.c: (dup_variable) Allocate `value's from dict into
9375         v->fv manually.
9376         (init_variable, replace_variable) Eliminate usage of alloc_val().
9377
9378         * vars-prs.c: (parse_DATA_LIST_vars) Accept PV_NO_SCRATCH option.
9379
9380         * vfm.c: (arrange_compaction) Allow `temporary' value of 2 to
9381         signal that AGGREGATE is to be used for forming final cases.
9382         (close_active_file) Call end_func before stopping lagging.  Cancel
9383         temporary after finishing compaction.
9384         (write_case) Comment fixes.  Cleaned up.
9385         (compact_case) Let AGGREGATE handle compaction when `temporary' is
9386         2.
9387
9388 Sat Jan 10 02:10:47 1998  Ben Pfaff  <blp@gnu.org>
9389
9390         * Makefile.am: (BUILT_SOURCES) Add means.c.
9391         (pspp_SOURCES) Add means.c.
9392         (EXTRA_DIST) Add means.q.
9393
9394         * command.c: (array cmd_table[]) Add MEANS.
9395
9396         * common.h: Esthetic fixes.  Comment fixes.  Test for
9397         MAX_SHORT_STRING greater than 8.
9398         (macros LOWEST, HIGHEST) New.
9399
9400         * data-in.c, data-list.c, recode.c: Comment fixes.
9401
9402         * means.q: New file, base version.
9403
9404         * mis-val.c: (parse_num_or_range, parse_numeric) Replace -DBL_MAX
9405         with LOWEST, DBL_MAX with HIGHEST.
9406
9407         * q2c.c: (dump_vars) Add an enum to array types giving the number
9408         of values for the enum.
9409
9410         * sfm-read.c: (sfm_read_dictionary, read_machine_flt64_info)
9411         Replace second_lowest_value with second_lowest_flt64.
9412
9413         * sfm-write.c: (write_variable, write_rec_7_34) Replace
9414         second_lowest_value with second_lowest_flt64.
9415
9416         * t-test.q: Comment fix.
9417
9418         * temporary.c: (restore_dictionary) Esthetic fix.
9419
9420         * tokens.h: (force_match_id, force_match, force_string, force_int,
9421         force_num, force_id) Replace msg() with syntax_error().
9422
9423         * var.h: (struct means_proc) New.
9424         (struct variable) Add mns member to `p' union.
9425
9426         * vars-prs.c: (parse_variable, parse_dict_variable,
9427         parse_variables, parse_DATA_LIST_vars) Replace msg() with
9428         syntax_error().
9429
9430 Thu Jan  8 22:28:41 1998  Ben Pfaff  <blp@gnu.org>
9431
9432         * Makefile.am: (pspp_SOURCES) Add tab.h.
9433
9434         * Most source files: Added a cast to unsigned char in usages of
9435         the ctype is*() functions.  Replaced `end of command expected'
9436         calls to msg() with calls to syntax_error().
9437
9438         * frequencies.q: (dump_condensed) Fix tab_dim() column reference.
9439
9440         * lexer.c: (hex_val) Removed (was dead code).
9441         (idmatch) Parenthesize function name to avoid macro expansion.
9442
9443         * postscript.c: Comment fixes.
9444         (ps_preopen_driver) Change default font size to 10pt.
9445
9446         * sfm-read.c: (read_variables) Byteswap sv.print, sv.write as
9447         int32s.
9448         (parse_format_spec) Change system-file format spec argument type
9449         to int32.  Parse the format spec with bitwise operators.
9450
9451         * sfmP.h: (struct sysfile_format) Removed.
9452         (struct sysfile_variable) Changed print, write members from
9453         sysfile_format to int32.
9454
9455         * tokens.h: Esthetic fixes.
9456         [__GNUC__] (macro id_match) New macro to hopefully speed up
9457         identifier matching.
9458         (macros match_id, match_tok, match_int) Implemented in
9459         compiler-independent manner; no longer GNU C only.
9460
9461         * vfm.h: Include time.h.
9462
9463 Mon Jan  5 11:06:15 1998  Ben Pfaff  <blp@gnu.org>
9464
9465         * data-list.c: (dump_fixed_table) Change tab_dim().
9466
9467         * dump-sysfile.c: (open_sysfile) Fix mmap() call.
9468
9469         * error.c: Include command.h.
9470
9471         * frequencies.g: Formatting fixes.
9472
9473         * frequencies.q: Add tab_dim() calls.  Make the total cell a
9474         joined cell.
9475
9476         * glob.c: Include command.h.
9477
9478         * sfm-read.c: (struct sfm_fhuser_ext) New members sysmis, highest,
9479         lowest.
9480         (sfm_read_dictionary) Initialize sysmis, highest, lowest.
9481         (sfm_read_machine_flt64_info) Update sysmis, highest, lowest.
9482         (read_variables) Byteswap sv.type; byteswap sv.print, sv.write as
9483         the other elements (is this right?).
9484         (read_variables) Use lowest, highest members.
9485         (parse_format_spec) New arg `vv' for more stringent checking.
9486         (dump_dictionary) Byteswaps nonexplicit data.
9487         (sfm_read_case) Byteswap numeric data.
9488
9489         * som.c: Initialize table_num to 1.
9490         (render_segments) Remember to increment y_index after each table
9491         segment.
9492
9493         * sysfile-info.c: (cmd_sysfile_info) Change tab_dim().  Don't call
9494         avl_count() on a NULL tree.  No title for the second table.
9495         (cmd_display) Handle DISPLAY VECTORS by calling display_vectors().
9496         Handle AS_SCRATCH as AS_NAMES.  Warn if no variables.  Re-enable;
9497         fix call to display_variables().
9498         (display_variables) Default to 4 columns, not 3.  Set up headers.
9499         Column title is Variable, not Name.  Fix index column.
9500         Add joint text.  Add tab_dim().  Handle value labels properly.
9501         Handle DISPLAY LABELS properly.  Draw boxes correctly.
9502         (describe_variable) Value labels don't need titles.  Don't clear
9503         nonexistent index column.
9504         (compare_vectors_by_name) New function.
9505         (display_vectors) New function.
9506
9507         * tab.c: (tab_height) Add assertion.
9508         (tab_null) Add debug code.
9509         (evaluate_dimensions) Add debug code.
9510
9511         * var.h: (struct variable) get_proc data is sometimes used
9512         simultaneously with other per-procedure info, therefore it was
9513         removed from the union.  All references changed.        
9514
9515 Sun Jan  4 18:13:33 1998  Ben Pfaff  <blp@gnu.org>
9516
9517         * ascii.c: (ascii_close_page) Put title on second line of headers
9518         if there is no subtitle.
9519
9520         * command.c: (glob var cur_proc) Move definition here, from
9521         common.c.
9522         (cmd_remark) Emit blank line before remarks.
9523
9524         * command.h: (glob var cur_proc) Move declaration here, from
9525         common.h.
9526
9527         * data-list.c: (dump_fixed_table) Fix messages.
9528         (dump_free_table) Call tab_nat_dim().
9529
9530         * descript.q: (dump_z_table) Modify tab_dim() call.
9531
9532         * frequencies.q: (dump_condensed, dump_statistics) Add tab_dim()
9533         call.
9534         (dump_statistics) Don't output header.
9535
9536         * groff-font.c: Minor format fix.
9537
9538         * html.c: Comment fix.
9539
9540         * list.q: (write_varname) Indent after advancing page.
9541
9542         * output.h: Minor reordering.
9543
9544         * postscript.c: Comment fixes.  Many places, '\n' was replaced by
9545         a reference to eol[].
9546         (struct ps_driver_ext) New member eol[].
9547         (ps_preopen_driver) Initialize eol[].
9548         (ps_postopen_driver) Fix sense of text for text_opt, line_opt
9549         defaults.  Handle headers.  Fix test for minimum page length.
9550         (static var option_tab[]) Add `line-ends'.
9551         (ps_option) Handle line-ends to change eol[].
9552         (postopen) Scale prop_em_width and fixed_width properly.  Set the
9553         prologue title to outp_title if applicable.  Replace the prologue
9554         line ends with eol[].  Call draw_headers() if headers are enabled.
9555         (text_width) New function.
9556         (out_text_plain) New function.
9557         (draw_headers) New function.
9558
9559         * print.c: (dump_table) Call tab_nat_dim().
9560
9561         * som.c: (som_blank_line) Only advance a line if not at the top of
9562         a page.
9563         (som_submit) Move several informational table calls here.
9564         Increment subtable_num if SOMF_NO_TITLE not set.
9565         (output_table) Advance a line if SOMF_NO_SPACING not set.
9566         (render_columns, render_segments, render_simple) Handle spacing
9567         between tables.  Handle table titles.  Remove debug output.
9568
9569         * som.h: (SOMF_*) New enum series.
9570         (struct som_table_class) New member `flags'.
9571
9572         * sysfile-info.c: (cmd_sysfile_info) Calls tab_nat_dim().  No
9573         headers or spacing.
9574         (display_variables) Calls tab_nat_dim().
9575         (describe_variable) Remove restriction on number of value labels.
9576         Make value labels separated by thin lines.
9577
9578         * tab.c: (tab_create) Default `flags' to none.
9579         (tab_float) New arg `w'.  All references changed.
9580         (tab_nat_dim) New function.
9581         (tab_output_text) No title or spacing.
9582         (tab_flags) New function.
9583         (tabi_flags) New function.
9584         (tabi_title) New function.
9585         (strip_height) Removed.
9586         (tabi_render) Skip title when necessary.
9587         (static var tab_tab_class) Add tabi_flags, tabi_title.
9588         (evaluate_dimensions) Disable display of column, row size.
9589         (sum_columns) Add title height to top header.
9590         (render_strip) Moved within file.
9591
9592         * tab.h: (struct tab_table) New member `flags'.
9593
9594         * vfm.c: (dump_splits) Calls tab_nat_dim().  No title.
9595
9596 Sat Jan  3 16:55:44 1998  Ben Pfaff  <blp@gnu.org>
9597
9598         * Most source files: Add `const' attribute in all appropriate
9599         places.
9600         
9601         * sysfile-info.c: (cmd_sysfile_info) Add tab_dim() call, add a
9602         column to the variables table for use by describe_variable().
9603         (cmd_display) Disable for the present.
9604         (display_documents) Don't wrap documents.
9605         (display_variables) Table has four columns now.
9606         (describe_variable) Table has four columns now.  Don't use a
9607         subtable, use joined cells instead.
9608
9609         * tab.c: (tab_create) Don't set `join'.
9610         (tab_realloc) ct array is not made up of a_string's.
9611         Reallocate trh, hrh, h arrays, initialize trh array.  Initialize
9612         cell contents on GLOBAL_DEBUGGING, not DEBUGGING.
9613         (text_format) New function.
9614         (tab_title) Rewritten, uses text_format().
9615         (tab_text) Rewritten, uses text_format().
9616         (tab_joint_text) New function.
9617         (tab_join) Removed.
9618         (static var hit) New variable.
9619         (render_strip) New args r1, r2.  Implement joined cells that fit
9620         on a single page.
9621         (tabi_render) Increment hit.  Pass new args to render_strip().
9622         (evaluate_dimensions) [GLOBAL_DEBUGGING] Check for uninitialized
9623         cells.  For t_naw and t_nah, ignore joined cells and null cells in
9624         calculations.
9625         
9626         * tab.h: (struct tab_join_rect) Removed.
9627         (struct tab_table) Removed `join'.
9628         (TAB_JOIN_MAIN) Removed.
9629         (struct tab_joined_cell) New struct.
9630         (TAT_NOWRAP) New enum.
9631
9632 Fri Jan  2 01:39:58 1998  Ben Pfaff  <blp@gnu.org>
9633
9634         * ascii.c: (ascii_postopen) Replace ASCII_* macros with their
9635         expansions.
9636         (ascii_postopen_driver) Fix initialization of *_spacing so that
9637         the TAL_0 bit doesn't count.
9638
9639         * data-list.c: (dump_fixed_table) Use natural width for Format
9640         column.
9641
9642         * glob.c: (rerange) Removed.
9643         (get_date) Formatting fixes.  Internationalization fix.
9644
9645         * html.c: (html_postopen_driver) Replace HTML_DEFAULT_OUTPUT_FILE
9646         with "pspp.html".
9647
9648         * postscript.c: (ps_postopen_driver) Replace
9649         PS_DEFAULT_OUTPUT_FILE with "pspp.ps".
9650
9651         * som.c: (som_submit) Don't eject page before every table.
9652         (output_table) Fix order of arguments on call to area().
9653         (render_columns) Fix calculation of max_len.
9654         
9655         * tab.c: (tabi_cumulate) Minor change to increase elegance.
9656         (render_strip) New function.
9657         (strip_height) New function.
9658         (tabi_render) Rewrite as calls to render_strip().
9659
9660         * tab.h: (TAT_* enums) Removed TAT_RICH, all references removed.
9661         Renumbered TAT_PRINTF, TAT_TITLE, TAT_FIX to correspond better
9662         with the TAB_* and OUTP_T_* constants.
9663         
9664 Thu Jan  1 11:53:52 1998  Ben Pfaff  <blp@gnu.org>
9665
9666         * Makefile.am: Formatting fixes.
9667
9668         * ascii.c: (ascii_postopen_driver) Initialize *_line_spacing[],
9669         *_line_width[].
9670
9671         * data-list.c: (dump_fixed_table) Add tab_dim() call.
9672
9673         * descript.q: (dump_z_table, display) Add tab_dim() calls.
9674
9675         * dump-sysfile.c: (glob var length) Make type off_t.
9676         (usage) Fix arguments.
9677         (main) Return 0.
9678
9679         * output.h: (OUTP_T_*) Change constants' value to match tab.h.
9680         Now right-justification is the default so many references had to
9681         change.
9682         (struct outp_class) Removed line_width, all references changed.
9683         (OUTP_DEV_*) Add OUTP_DEV_DISABLED.
9684         (struct outp_driver) Add elements horiz_line_width,
9685         vert_line_width, horiz_line_spacing, vert_line_spacing.  Remove
9686         som element.
9687
9688         * postscript.c: (outp_encodings) Formatting fixes.  Fix garbage
9689         collection.
9690         (postopen) Initialize all the informational members of
9691         outp_driver.
9692
9693         * som.c: (som_blank_line) New function, renamed from blank_line(),
9694         all references changed.
9695         (som_submit) Disables drivers whose pages can't be opened.
9696         (render_columns, render_simple, render_segments) Add debug output.
9697         (render_columns) Fix loop range.
9698         (render_simple) Don't try to render the headers, they're taken
9699         care of automatically.  Advance cp_y past the table when done.
9700         (render_segments) Fix loop ranges.
9701
9702         * tab.c: Initialize new members of tab_table.
9703         (tab_vline) Handle trv[]; don't set style for spacing-only lines.
9704         (tab_hline) Handle trh[]; don't set style for spacing-only lines.
9705         (tab_box) Handle trh[], trv[]; don't set style for spacing-only
9706         lines.
9707         (set_expr) Removed.
9708         (tab_dim) New function.
9709         (tab_col_width) Removed.
9710         (tab_row_height) Removed.
9711         (tab_output_text) Call tab_dim().
9712         (tabi_driver) Call evaluate_dimensions(), sum_columns().
9713         (tabi_area) Implemented.
9714         (tabi_cumulate) Implemented.
9715         (tabi_render) Partially implemented, but broken.
9716         (var tab_table_class) Made static.
9717         (evaluate_dimensions) New function.
9718         (sum_columns) New function.
9719
9720         * tab.h: (enum t_*) Now start at t_end.  New: t_ptw, t_nr, t_nc,
9721         t_nah, t_naw, t_neg, t_xch, t_dup, t_lbl, t_jnz, t_sac, t_sar,
9722         t_scr, t_srr, t_sentinel.  Removed: t_nat.
9723         (struct tab_table) New: wl, wr, ht, hb, trh, hrh, trv, wrv, dim,
9724         max_stack_height, w, h.  Removed: ce, re.
9725         (macro blank_line) Removed.
9726         (glob var zero_length) Removed.
9727
9728 Fri Dec 26 15:44:31 1997  Ben Pfaff  <blp@gnu.org>
9729
9730         * Most source files: include some of the new include files broken
9731         out of var.h.
9732         
9733         * Makefile.am: (pspp_SOURCES) Add all the new source files to the
9734         list.
9735
9736         * aggregate.c: (glob var outfile) Make static.
9737
9738         * command.c: (glob var pgm_state) Move here.
9739
9740         * common.c: (glob vars endian, second_lowest_value, pgmname,
9741         finished, curdate, cur_proc, start_interactive, history_file) Move
9742         here.
9743
9744         * descript.q: (structs dsc_z_score, descriptives_trns) Move here.
9745
9746         * file-handle.q: (glob vars files, inline_file) Move here.
9747
9748         * glob.c: Lost lots of glob vars, detailed in individual file
9749         entries.
9750         (init_glob) set_printer, set_screen were obsolete, deleted.
9751         set_cprompt has fewer spaces because pspp has fewer letters than
9752         fiasco.
9753
9754         * inpt-pgm.c: (glob vars inp_init, inp_init_size) Move here.
9755         (inp_nval) Made static.
9756
9757         * lexer.c: (glob vars token, tokval, tokstr, tokstr_size,
9758         tokstr_len, toklongstr, tokint) Move here.
9759
9760         * misc.c: Lost several vars and functions.
9761
9762         * set.q: (all the set_* variables) Move here.
9763
9764         * str.c: (strmaxcpy, strbarepadcpy, strbarepadlencpy, strpadcpy,
9765         blpstrset, strpadcmp, memrev, memrmem, cmp_str) Move here from
9766         misc.c.
9767
9768         * tab.c: (set_expr, tab_col_width, tab_row_height) New functions.
9769
9770         * tab.h: (enum series t_*) New enums.
9771         (struct tab_table) Use arena struct tag.  New members ce, re.
9772
9773         * tokens.h: Comment fixes.
9774
9775         * var.h: Move lots of enums and variables and functions and
9776         structures to other files.  Use and declare a lot more union and
9777         struct tags.  Comment fixes.  
9778
9779         * vector.c: (glob vars vec, nvec) Move here.
9780
9781         * vfm.c: (glob vars reinit_sysmis, reinit_blanks, init_zero,
9782         init_blanks, last_vfm_invocation) Move here.
9783
9784         * cases.h: New file.
9785         (struct long_vec) Move here.
9786         (vec_init, vec_clear, vec_insert, vec_delete, devector, envector)
9787         Move here.
9788
9789         * command.h: New file.
9790         (STATE_* enums) Move here.
9791         (glob var pgm_state) Move here.
9792
9793         * format.c: New file.
9794         (glob var formats) Move here.
9795         (parse_format_specifier_name, fmt_to_string,
9796         check_input_specifier, check_output_specifier,
9797         check_string_specifier, convert_fmt_ItoO, parse_format_specifier)
9798         Move here.
9799
9800         * format.h: New file.  Move functions now in format.c here.
9801         (FMT_* enums) Move here.
9802         (struct fmt_desc) Move here.
9803         (FCAT_* enums) Move here.
9804         (struct fmt_spec) Move here.
9805         (glob vars formats, fmt_parse_ignore_error) Move here.
9806
9807         * inpt-pgm.h: New file.
9808         (INP_* enums) Move here, make #defines into enums.
9809         (glob vars inp_init, inp_init_size) Move here.
9810
9811         * sort.h: New file.
9812         (glob vars v_sort, nv_sort) Move here.
9813         (sort_cases, read_sort_output) Move here.
9814
9815         * vector.h: New file.
9816         (struct vector) Move here, add struct tag.
9817         (glob vars vec, nvec) Move here.
9818         (find_vector) Move here.
9819
9820         * New file.
9821         (glob vars last_vfm_invocation, temp_case, reinit_sysmis,
9822         reinit_blanks, init_zero, init_blanks) Move here.
9823         (struct case_stream) Move here.
9824         (glob vars vfm_source, vfm_sink, vfm_memory_stream,
9825         vfm_disk_stream, sort_stream, data_list_source,
9826         input_program_source, file_type_source, get_source, n_lag) Move
9827         here.
9828         (procedure, write_case, lagged_case, compact_case, page_to_disk)
9829         Move here.
9830                 
9831 Wed Dec 24 22:40:42 1997  Ben Pfaff  <blp@gnu.org>
9832
9833         * Makefile.am: (pspp_SOURCES) Added html.c, som.c, som.h.
9834         (LDADD) Add libdcdflib.
9835
9836         * ascii.c: Comment and formatting fixes.  Almost every external
9837         function had an assert added, checking driver_open and page_open.
9838         (ascii_init_driver) Broken into ascii_preopen_driver,
9839         ascii_postopen_driver, ascii_close_driver.  Manages driver_open.
9840         (ascii_open_page) Sets page_open.
9841         (ascii_close_page) Clears page_open.
9842
9843         * html.c: Comment and formatting fixes.  Almost every external
9844         function had an assert added, checking driver_open and page_open.
9845         (html_init_driver) Broken into html_preopen_driver,
9846         html_postopen_driver, html_close_driver.  Manages driver_open.
9847         (html_open_page) Sets page_open.
9848         (html_close_page) Clears page_open.
9849         (html_submit) Disabled.
9850
9851         * lexer.c: (parse_string) Remove debugging printf.
9852
9853         * list.q: (determine_layout) Open a page if one is not yet open.
9854
9855         * output.c: Comment fixes.
9856         (add_class) Set the class member of the new list element.
9857         (parse_options) Don't handle device type.
9858         (colon_tokenize) New function.
9859         (configure_driver) New four-field format with a field for device
9860         type.  Now initialize driver_open, page_open, next, and prev
9861         fields.  Use new colon_tokenize() function.  Don't do a memory
9862         copy to replace a driver, it doesn't work; instead delete the old
9863         driver and insert a new one.
9864         (destroy_driver) Don't call som_destroy_driver().  Close the page
9865         if it's open.  Find the class in the list of classes and decrement
9866         that reference count.  Remove the driver from the global driver
9867         list.
9868         (outp_iterate_enabled_drivers) Renamed outp_drivers().  All
9869         references changed.  Rewritten.  Don't return a driver that's not
9870         enabled.
9871         (outp_eject_page) All references to som_internal_eject_page()
9872         changed to use this.  Sets cp_x to 0 as well as cp_y.
9873
9874         * output.h: (OUTP_I_* enums) Removed.
9875         (struct som_submission_form) Removed.
9876         (struct outp_class) init_driver broken into preopen_driver,
9877         postopen_driver, and close_driver.  submit changed to take a
9878         som_table argument.
9879
9880         * postscript.c: Comment and formatting fixes.  Almost every
9881         external function had an assert added, checking driver_open and
9882         page_open.
9883         (ps_init_driver) Broken into ps_preopen_driver,
9884         ps_postopen_driver, ps_close_driver.  Manages driver_open.
9885         (ps_open_page) Sets page_open.
9886         (ps_close_page) Clears page_open.
9887
9888         * som.c: New file, base implementation.
9889         
9890         * som.h: (struct som_table) Add struct tag.
9891         (enum SOM_COL_ACROSS) Removed.
9892         (SOM_ROWS, SOM_COLUMNS) New enums.
9893         (struct som_table_class) Add member `cumulate'.  Remove `segment';
9894         change `render' arguments.
9895         (struct som_point, struct som_rect) Removed.
9896         (som_submit_table) Fixed typo, should have been som_submit.
9897
9898         * sysfile-info: (describe_variable) Don't try to insert a
9899         subtable; just destroy it for now.
9900
9901         * t-test.q: Include dcdflib/cdflib.h instead of cdflib.h.  Fix
9902         references to value labels.
9903
9904         * tab.c: (tab_destroy) New function.
9905         (tab_columns) Change argument.
9906         [0] (tab_submit) Remove dead code.
9907         (tab_title) Allocate string from the table's arena.
9908         (tab_output_text) Only free the buffer if we allocated it.
9909         (tab_submit) New function.
9910         (static vars t, d) New static vars.
9911         (tabi_table, tabi_driver, tabi_count, tabi_area, tabi_columns,
9912         tabi_headers, tabi_cumulate, tabi_render) New functions.
9913         (glob var tab_table_class) New global var.
9914
9915         * tab.h: (struct tab_join_rect) Don't use a som_rect; directly
9916         encapsulate the rectangle.  All references changed.
9917         
9918 Sun Dec 21 16:18:58 1997  Ben Pfaff  <blp@gnu.org>
9919
9920         * All header files updated to use struct tags in addition to
9921         typedefs for all structures.  Don't use word `struct' in struct
9922         tags.
9923         
9924         * Makefile.am: (pspp_SOURCES) Remove html.c.
9925         (INCLUDES) Replace the lib/* includes with a single lib/ include;
9926         all references updated.
9927
9928         * command.c: (parse_cmd) Remove call to som_check_workspace.
9929         (output_line) Update to new som.
9930
9931         * data-in.c: (parse_numeric) A single dot is not an error; it is
9932         the system-missing value.
9933
9934         * data-list.c: (dump_fixed_table, dump_free_table) Update to new
9935         som.
9936
9937         * data-out.c: Added `const' as appropriate to many prototypes.
9938         (convert_E, convert_F, convert_CCx) Take double argument instead
9939         of value * argument.
9940         (convert_format_to_string) Call changed functions appropriately.
9941         Instead of modifying the caller's value for FCAT_SHIFT_DECIMAL,
9942         make a local copy of the value.
9943
9944         * descript.q: Remove custom_variables() prototype now provided by
9945         q2c.  
9946         (custom_variables) Don't increment sbc_variables, the caller does
9947         this.
9948         (dump_z_table, display) Update to new som.
9949
9950         * error.c: (vmsg) Add const to prototype.  Remove code to handle
9951         `too many errors' condition.
9952         (check_error_count) New function.
9953         (msg) Add const to prototype.
9954
9955         * filename.c: (open_file) Rewrite for elegance.
9956
9957         * frequencies.q: Remove custom_*() prototypes now provided by q2c.
9958         (dump_full, dump_condensed, dump_statistics) Update for new som.
9959
9960         * list.q: Don't include somP.h.  Change all references to
9961         som_driver_ext to refer to the new members of som_driver.  Change
9962         som_internal_eject_page() references to outp_eject_page().
9963
9964         * main.c: (parse) Rewrite for elegance.  Add call to
9965         check_error_count().
9966
9967         * output.c: (add_class, outp_list_classes, outp_configure_driver)
9968         Rewrite or revise for new outp_driver_class_list structure.
9969         (outp_iterate_enabled_drivers) Fix comparison between disabled
9970         devices and current device type.
9971         (outp_eject_page) New function.
9972
9973         * output.h: Comment fixes.
9974         (struct outp_driver) New members driver_open, page_open, cp_x,
9975         cp_y, font_height, prop_em_width, fixed_width.  Deleted members
9976         ref_count, next.
9977         (struct outp_driver_class_list) New struct.
9978         (outp_class_list) Changed to type outp_driver_class_list; all
9979         references updated.
9980
9981         * print.c: (dump_table, print_trns_proc) Updated for new som.
9982
9983         * q2c.c: (dump_vars) Simplify array subcommand code.  Declare
9984         prototypes for custom subcommands.
9985         (dump_subcommand) Always include the `else'.
9986         (dump_parser) Fix comments in output code.
9987
9988         * set.q: Reordered functions.
9989
9990         * som-frnt.c, som-high.c, som-low.c, somP.h: Removed.
9991         
9992         * som.h: Rewritten from scratch.
9993
9994         * str.h: Remove dead code.
9995
9996         * tab.c, tab.h: New files, base implementation.
9997
9998         * sysfile-info.c: (cmd_sysfile_info, describe_variable) Update to
9999         new som.
10000
10001         * t-test.q: New code from John Williams
10002         <johnr.williams@stonebow.otago.ac.nz>.  Include math.h, cdflib.h.
10003         Many many new static vars and defines.
10004         (precalc, postcalc, g_postcalc, z_postcalc, t_pairs, t_groups,
10005         groups_calc, pairs_calc, z_dev_calc, z_calc) New functions.
10006         (struct value_list) New struct.
10007         (variance, covariance, pooled_variance, oneway, pearson_r, f_sig,
10008         t_crt, t_sig, print_t_groups) New functions.
10009         (cmd_t_test) Implemented.
10010
10011         * temporary.c: (cancel_temporary) Only free the temp_dict if it's
10012         non-NULL.
10013
10014         * vfm.c: (dump_splits) Update to new som.
10015
10016 Thu Dec  4 23:02:22 1997  Ben Pfaff  <blp@gnu.org>
10017
10018         * Makefile.am: (fiasco_SOURCES) Add html.c.
10019
10020         * aggregate.c: Base source.
10021
10022         * ascii.c: (postopen, preclose) Reformat.
10023
10024         * data-out.c, expr-evl.c: Comment fixes.
10025         
10026         * filename.c: (open_file) When opening a file for writing, use
10027         line buffering instead of full buffering for better interactive
10028         performance.  Suggested by Valerio Aimale
10029         <valerio@svpop.com.dist.unige.it>.  Also, recognize special file
10030         names `stdin', `stdout', `stderr'.
10031
10032         * groff-font.c: Comment fixes.
10033
10034         * html.c: New file; base version.
10035
10036         * list.q: (write_all_headers, clean_up, determine_layout,
10037         list_cases) Ignore `special' devices for now.  Needs to be fixed
10038         later.
10039
10040         * output.c: (outp_init) Add html driver to list; reverse list
10041         order.
10042
10043         * output.h: (struct outp_class_struct) New members `special',
10044         `submit'; comment fixes.  All references changed.
10045
10046         * postscript.c: (ps_init_driver) Make defaults for text_opt,
10047         line_opt depend on whether the OUTP_DEV_SCREEN bit is set on the
10048         device.
10049         (postopen) Comment fix.
10050         (preclose) Comment fixes, formatting fixes.  Change x->file.file
10051         references to more proper f->file.
10052
10053         * som-high.c: (som_submit_table) Special classes use their own
10054         renderers.
10055
10056         * som.h: Comment fixes.
10057
10058         * temporary.c: (new_dictionary) Don't try to xstrdup() a NULL
10059         string.
10060         
10061 Tue Dec  2 14:36:07 1997  Ben Pfaff  <blp@gnu.org>
10062
10063         * Makefile.am: (fiasco_SOURCES) Add aggregate.c back in.
10064
10065         * aggregate.c: Still working on this.
10066
10067         * command.c: (cmd_table[]) Add AGGREGATE back in.
10068         (split_words) Make '-' a legal word separator as well as ' '.
10069
10070         * main.c: Comment fixes.
10071
10072         * q2c.c: (dump_parser) Don't require the procedure's full name to
10073         be present, in the generated source.
10074
10075         * t-test.q: Change name to `t-test' from `t test'.  Let PAIRS be
10076         multiply specified and let it be default; let MISSING, CRITERIA,
10077         FORMAT be multiply specified.
10078         (cmd_t_test) Parse command name.  [DEBUGGING] Call debug_print().
10079         (custom_groups) Fix defaults.
10080         (custom_pairs) Check whether this is a PAIRS subcommand before
10081         attempting to parse.  Better garbage collection.  Proper storage
10082         allocation.
10083         [DEBUGGING] (debug_print) New function.
10084
10085         * temporary.c: Comment fixes.
10086         (copy_variable) Don't copy variable name and index.
10087         (save_dictionary) Copy variable name and index by hand.
10088
10089         * vars-atr.c: Comment fixes.
10090         (create_variable) New dictionary argument.  All references
10091         changed.
10092         (common_init_stuff) New dictionary argument.  All references
10093         changed.
10094         (init_variable) New dictionary argument.  All references changed.
10095         (dup_variable) New function.
10096
10097         * vars-prs.c: (parse_variables) If there are any errors, we always
10098         return 0.  Previously, it was possible for some types of errors to
10099         be ignored.
10100         
10101 Sat Nov 22 01:20:59 1997  Ben Pfaff  <blp@gnu.org>
10102
10103         * Makefile.am: (fiasco_SOURCES) For 0.1.5 release, remove
10104         aggregate.c.
10105
10106         * command.c: (cmd_table[]) Comment out AGGREGATE; add T TEST.
10107
10108         * list.q, t-test.q: Remove ALL option from VARLIST declaration in
10109         grammar rules.
10110
10111         * q2c.c: Comment fixes.
10112         (SBC_* enums) Remove SBC_VARLIST_ALL; all references removed.
10113         
10114         * t-test.q: (cmd_list) Rename cmd_t_test.
10115
10116         * temporary.c: (new_dictionary) Don't declare as static.
10117         
10118 Fri Nov 21 00:03:06 1997  Ben Pfaff  <blp@gnu.org>
10119
10120         * aggregate.c: Changes, still not finished.
10121
10122         * file-handle.q, frequencies.q, list.q, set.q: Comment fixes.
10123
10124         * q2c.c: Comment fixes.  Now its output is internationalized.
10125         (get_token) Fix parsing of escapes within literal strings.
10126         (main) Fix bad #line directives in output.
10127
10128         * t-test.q: Base implementation.
10129
10130         * temporary.c: (new_dictionary) New function.
10131         (restore_dictionary) [__CHECKER__] Change fill character to *
10132         (from @).
10133         
10134 Sun Nov 16 01:29:57 1997  Ben Pfaff  <blp@gnu.org>
10135
10136         * Makefile.am: (BUILT_SOURCES, fiasco_SOURCES) Add t-test.c
10137
10138         * aggregate.c: Changes, still not finished.
10139
10140         * descript.q, list.q: Comment fixes.
10141
10142         * q2c.c: Almost completely rewritten.
10143
10144         * t-test.q: New file, not complete.
10145
10146 Fri Nov 14 00:14:48 1997  Ben Pfaff  <blp@gnu.org>
10147
10148         * aggregate.c: Changes, still not finished.
10149
10150         * sort.c: (sort_cases) Call cancel_temporary() instead of doing it
10151         by hand.
10152
10153         * temporary.c: (cancel_temporary) New function.
10154
10155         * vars-atr.c: (discard_variables) Call cancel_temporary() instead
10156         of doing it by hand.
10157
10158         * vfm.c: (close_active_file) After restoring a TEMPORARY
10159         dictionary, set temp_dict to NULL.  Cancel TEMPORARY through
10160         cancel_temporary().
10161         (SPLIT_FILE_procfunc) Comment fix.
10162
10163 Tue Oct 28 16:08:45 1997  Ben Pfaff  <blp@gnu.org>
10164
10165         * Makefile.am: (fiasco_SOURCES) Add aggregate.c.
10166
10167         * aggregate.c: New file, not finished yet.
10168
10169         * command.c: (cmd_table) Add AGGREGATE.
10170
10171         * common.h: (pgm_state) Move declaration to var.h.
10172
10173         * lexer.c: (bin_value_func, oct_value_func, hex_value_func) i18n
10174         fixes.
10175         (parse_string) Message fix.
10176
10177         * recode.c: Comment fix.
10178
10179         * sfm-read.c: (read_variables) Code esthetic fixes.
10180         (write_header) Default date is `Jan', not `JAN'.
10181
10182         * sfmP.h: (bswap_int32) [!__linux__] Fix off-by-one errors.
10183
10184         * sort.c: (cmd_sort_cases) Farm the work out to new function
10185         parse_sort_variables().
10186         (parse_sort_variables) New function.
10187         (sort_cases) New function.  Cancels temporary transformations,
10188         which sorting didn't do previously.
10189         (cmd_sort_cases) Better garbage collection on error.  Uses
10190         do_external_sort().
10191         (write_initial_runs, merge_once) Improved code esthetics.
10192         (sort_stream_read) Reduced to one call to read_output_cases().
10193         (read_output_cases) New function.
10194
10195         * var-labs.c: (cmd_variable_labels) Re-enabled truncation of
10196         variable labels to 120 characters.
10197
10198         * var.h: Comment fixes.
10199         (glob var pgm_state) From common.h.
10200
10201         * vars-atr.c: (discard_variables) Set pgm_state to STATE_INIT.
10202
10203         * vars-prs.c: (parse_DATA_LIST_vars) Support PV_SINGLE in
10204         options.  Set *names to NULL on error.
10205
10206         * vfm.c: (memory_stream_init) Assert compaction_nval != 0.
10207
10208 Thu Oct  9 09:59:49 1997  Ben Pfaff  <blp@gnu.org>
10209
10210         * sfm-write.c, vfm.c: [HAVE_UNISTD] #include <unistd.h>, needed by
10211         SunOS4.  From Alexandre Oliva <oliva@dcc.unicamp.br>.
10212
10213 Wed Oct  8 18:55:24 1997  Ben Pfaff  <blp@gnu.org>
10214
10215         * vfm.c: (page_to_disk) Added missing local variables.
10216
10217 Tue Oct  7 20:23:17 1997  Ben Pfaff  <blp@gnu.org>
10218
10219         * get.c: Comment fix.
10220
10221         * sort.c: (cmd_sort_cases) Attempt to perform internal sort if the
10222         source is anything other than a disk stream, not just if it's in a
10223         memory stream.  Call page_to_disk() before external sort.
10224         (allocate_cases) Message fix.
10225
10226         * vfm.c: (prepare_for_writing) Warn user when paging workspace to
10227         disk.
10228         (page_to_disk) New function.
10229
10230 Sun Oct  5 15:56:14 1997  Ben Pfaff  <blp@gnu.org>
10231
10232         * Makefile.am: (INCLUDES) Include .. instead of $(top_srcdir).
10233
10234         * common.h: (macro strerror) Remove.  From Alexandre Oliva
10235         <oliva@dcc.unicamp.br>.
10236
10237         * get.c: (dict_delete_run) The number of variables to delete is
10238         not necessarily the number of variables that need to be shifted
10239         up.
10240         (trim_dictionary) Don't set *options to 0.  Fix bug that caused
10241         too many variables to be deleted.
10242
10243         * postscript.c: Comment fix.
10244
10245         * q2c.c: Include strerror.c.  From Alexandre Oliva
10246         <oliva@dcc.unicamp.br>.
10247
10248         * set.q: #undef ON and OFF.  From Alexandre Oliva
10249         <oliva@dcc.unicamp.br>.
10250
10251         * sfm-read.c: (sfm_read_dictionary) Don't set the file class too
10252         early, otherwise errors cause a bad free().
10253
10254         * str.h: (macro nvsprintf) s/FORMATS/FORMAT/ typo.  From Alexandre
10255         Oliva <oliva@dcc.unicamp.br>.
10256
10257         * temporary.c: (save_dictionary) Don't allocate memory if
10258         n_documents is 0.
10259
10260         * vfm.c: (memory_stream_write) Message fix.
10261
10262 Sat Oct  4 16:20:43 1997  Ben Pfaff  <blp@gnu.org>
10263
10264         * command.c: (static var cmd_table[]) Define REPEATING DATA
10265         command.
10266
10267         * common.h: Added support for broken systems that are missing
10268         EXIT_SUCCESS, EXIT_FAILURE, RAND_MAX, and/or strerror().
10269
10270         * Many source files: Replace syntax error messages via msg() with
10271         call to syntax_error().
10272
10273         * data-list.c: (dump_fixed_table) Add support for dumping table
10274         for REPEATING DATA as well as DATA LIST FIXED.
10275         (cmd_repeating_data) Allows and requires `/' between subcommands.
10276         Does proper thing with allowing rpd.starts_end to stay 0.  Allows
10277         CONTINUED specifications to be omitted.  Forces CONTINUED to be
10278         specified if ID is.  Calculates starts_end, cont_end from logical
10279         record length as reported by fhp.  Calls dump_fixed_table() if
10280         requested.  Fixed length of record copied by memcpy.
10281         (parse_num_or_var) Sets `num' to 0, not NOT_INT, for variables.
10282         Message fix.
10283         (realize_value) Returns sensible value for out-of-range variable
10284         values.
10285         (rpd_parse_record) New argument `ofs'.  Fixed confusion between
10286         length of occurrences and length of line.  Added warning for
10287         fields that exceed the line length.  Fixed infinite loop.
10288         (read_one_set_of_repetitions) Numerous minor changes for more
10289         complete SPSS compliance.  Message fixes.
10290
10291         * dfm.c: (dfm_close) If the file being closed is the inline file,
10292         read all the remaining data before closing it.
10293         (dfm_get_record) Don't close the file on lossage, as either it
10294         has been closed already or it doesn't belong to us.
10295
10296         * error.c: (puts_stdout) New function.
10297         (vmsg) Use puts_stdout instead of puts.
10298
10299         * file-handle.q: (fh_record_width) New function.
10300
10301         * inpt-pgm.c: (init_case) Fixed buffer overrun when inp_nval % 4
10302         == 0.
10303         (clear_case) Ditto.
10304         (input_program_source_read) Made an old kluge an approved method.
10305
10306         * lexer.c: (syntax_error) New function.
10307
10308         * misc.c: [BROKEN_RAND] (ansi_rand, ansi_srand; static var next)
10309         New.
10310
10311         * output.c: (oupt_get_paper_size) Message fix.
10312
10313         * q2c.c: Numerous fixes to formatting of generated code made to
10314         conform to GNU coding standards.  Uses syntax_error() in generated
10315         code.  Other miscellaneous generated message fixes.  Added support
10316         for broken systems that are missing EXIT_SUCCESS, EXIT_FAILURE,
10317         RAND_MAX, and/or strerror().
10318
10319 Sat Oct  4 02:09:56 1997  Ben Pfaff  <blp@gnu.org>
10320
10321         * data-in.c: Comment fixes.
10322
10323         * data-list.c: (struct repeating_data_trns) New member `id_spec'.
10324         (find_variable_input_spec) New function.
10325         (cmd_repeating_data) Initializes id_spec.
10326         (rpd_parse_record) Implemented.
10327         (read_one_set_of_repetitions) Returns -3 by default in order to
10328         kluge out some potential bugs.
10329
10330         * data-out.c: Comment fixes.
10331
10332         * file-type.c: (internal_cmd_record_type) Message fix.
10333
10334         * inpt-pgm.c: (input_program_source_read) Special temporary kluge
10335         for handling -3 return value.
10336
10337 Sat Sep 20 23:58:15 1997  Ben Pfaff  <blp@gnu.org>
10338
10339         * data-list.c: Comment fixes.
10340         (struct dls_var_spec) Reordered members.
10341         (read_from_data_list_fixed) Restructured.
10342         (struct repeating_data_trns) Reordered members.  Renamed `starts'
10343         as `starts_beg', `ends' as `starts_end'.
10344         (cmd_repeating_data) Calculates length of repeated data if
10345         necessary and possible.
10346         (parse_num_or_var) Don't allow string variables.
10347         (realize_value) New function.
10348         (rpd_msg) New function.
10349         (rpd_parse_record) New function.  Currently stubbed out.
10350         (read_one_set_of_repetitions) Implemented.
10351
10352         * inpt-pgm.c: (input_program_source_read) Comment fix.
10353
10354 Thu Sep 18 21:34:57 1997  Ben Pfaff  <blp@gnu.org>
10355
10356         * command.c: (cmd_end_repeat_p) Removed.
10357         (init_cmd_parser) Doesn't set cmd_end_repeat_p.
10358         (parse_cmd_name) Removed.
10359
10360         * data-list.c: Comment fixes.
10361         (data_list_pgm) Removed `eof' member.
10362         (static var first) New var.
10363         (cmd_data_list) Sets `first'.  Ensures that DATA LIST uses the
10364         FILE TYPE file inside FILE TYPE structures.
10365         (append_var_spec) Appends to *first, not dls.spec.
10366         (parse_fixed) Message fixes.
10367         (struct rpd_num_or_var) New.
10368         (struct repeating_data_trns) New.
10369         (static var rpd) New.
10370         (cmd_repeating_data) New function.
10371         (parse_num_or_var) New function.
10372         (parse_repeating_data) New function.
10373         (read_one_set_of_repetitions) New function.
10374
10375         * file-type.c: (cmd_file_type) Message fixes.  Always
10376         default_handle to FILE TYPE file handle.
10377         (internal_cmd_record_type) Message fixes.
10378
10379 Wed Aug 20 14:22:03 1997  Ben Pfaff  <blp@gnu.org>
10380
10381         * repeat.c: Comment fix.  Disable debugging.
10382
10383         * temporary.c: (restore_dictionary) Sets splits to NULL and
10384         n_splits to 0 before destroying the variables because now doing
10385         this tries to remove split variables.
10386
10387         * vars-atr.c: (discard_variables) Asserts that n_splits is 0 after
10388         destroying the dictionary.
10389         (clear_variable) Removes a variable from splits after destroying
10390         it.
10391
10392 Mon Aug 18 18:06:55 1997  Ben Pfaff  <blp@gnu.org>
10393
10394         * cmdline.c: (set_compat) Removed.
10395         (pick_compat) Removed.
10396         (parse_command_line) Removed -c option.
10397         (pre_syntax_message) Removed -c option.
10398         (usage) Remove compatibility code.
10399
10400         * common.h: (macros VER_PC, VER_WND, VER_X) Removed.
10401         (glob var compat) Removed.
10402
10403         * compute.c: (type_check) Fixed messages about type mismatches.
10404
10405         * data-list.c: (cmd_data_list) Removed compatibility code.
10406         (fixed_parse_compatible) Calls convert_negative_to_dash().
10407         Fixed bug where it only set the variable in fx.spec if it created
10408         the variable itself.
10409         (dump_fmt_list) Spelling fix.
10410         (cut_field) Removed compatibility code.
10411
10412         * dfm.c: (cmd_begin_data) Don't require a command terminator on
10413         BEGIN DATA command.
10414
10415         * expr-evl.c: (evaluate_expression) Implement LAG.
10416
10417         * expr-prs.c: (parse_add) Calls convert_negative_to_dash().
10418         (parse_neg) Calls convert_negative_to_dash().
10419         (LAG_func) Increases n_lag to the lag requested.  Fixed assignment
10420         bug.
10421
10422         * expr.h: (struct expression_struct) Removed member max_lag.
10423
10424         * file-type.c: (parse_col_spec) Calls convert_negative_to_dash().
10425         (internal_cmd_record_type) Removed special handling to produce
10426         negative numbers from dash tokens.
10427
10428         * getline.c: (static var DO_REPEAT_level) New var.
10429         (getl_add_DO_REPEAT_file) Increments DO_REPEAT_level.
10430         (handle_line_buffer) Copies the line into getl_buf; doesn't call
10431         copy_with_DO_REPEAT_substitutions().
10432         (getl_read_line) Maintains value of getl_mode.  Calls
10433         perform_DO_REPEAT_substitutions() whenever DO_REPEAT_level is
10434         positive.
10435         (getl_close_file) Decrements DO_REPEAT_level when appropriate.
10436
10437         * getline.h: (getl_mode) New glob var.
10438
10439         * glob.c: Comment fixes.
10440         (init_glob) Restructured.  Sets set_seed.
10441         (init_compat_dependent) Removed.  All references removed.
10442         (get_date) Format changed from MM/DD/YY to DD MMM YYYY.
10443         (__htonl, __htons) Removed.  (What were these for?)
10444
10445         * lexer.c: (static var tbl) Dash set to class CNUM.
10446         (make_hexit) New function from data-out.c.
10447         (get_token_representation) Rewritten.
10448         (convert_negative_to_dash) New function.
10449         (lex_init_compat_dependent) Removed.
10450         (yylex) A dash is parsed as part of a number if it is followed by
10451         a digit.  The ASCII representation of a number is copied to
10452         tokstr.  String parsing farmed out to parse_string().  Comment
10453         fixes.
10454         (bin_value_func, oct_value_func, hex_value_func, parse_string) New
10455         functions.
10456         (preprocess_line) Line processing depends on interactive/batch
10457         mode, not on compatibility mode.  Removed PC+ compatibility code.
10458
10459         * loop.c: (loop_3_trns_proc) Comment fix.
10460
10461         * main.c: Remove dead code.
10462         (main) Remove call to init_compat_dependent().
10463
10464         * misc.c: (convert_fmt_ItoO) Make E format conversion more
10465         conformant.
10466
10467         * print.c: (parse_string_argument) Calls
10468         convert_negative_to_dash().
10469         (fixed_parse_compatible) Calls convert_negative_to_dash().
10470
10471         * repeat.c: (RPT_* defines) Removed.
10472         (struct rpt_numeric) Removed.
10473         (struct repeat_entry) New member type, changed `replacement' from
10474         char * to char **.
10475         (clean_up) Deallocation adapted to new repeat_entry.
10476         (internal_cmd_do_repeat) `type' defaults to 0.  Remove lookahead()
10477         usage.  Creates vars for `type' of 1.
10478         (parse_ids) Sets type of 1.  Adapted to new repeat_entry.
10479         (store_numeric) Rewritten, new interface.
10480         (parse_numbers) Rewritten.
10481         (parse_strings) Rewritten.
10482         (find_DO_REPEAT_substitution) New function.
10483         (perform_DO_REPEAT_substitutions) New function.
10484         (copy_with_DO_REPEAT_substitutions) Removed.
10485         (debug_print) Rewritten.
10486
10487         * set.q: Comment fix.
10488         (custom_results) Removed compatibility code.
10489         (internal_cmd_set) Removed SET EMULATION subcommand.  Removed
10490         compatibility code.
10491
10492         * sysfile-info.c: (cmd_display) Removed compatibility code.
10493
10494         * tokens.h: Comment fixes.
10495         (token types enum) Removed `toktype' typedef name for this int
10496         type.  Removed SUBST.  Restructured.
10497
10498         * vars-atr.c: (discard_variables) Sets n_lag to 0.
10499
10500         * vars-prs.c: Comment fix.
10501
10502         * vfm.c: Comment fixes.
10503         (glob var n_lag) New var.
10504         (static vars lag_count, lag_head, lag_queue) New vars.
10505         (procedure) Removed argument nlag.
10506         (setup_lag) New function.
10507         (close_active_file) Discards lagging state.
10508         (lag_case) New function.
10509         (lagged_case) New function.
10510         (write_case) Lags a case if lagging.
10511
10512         * weight.c: (cmd_weight) Removed compatibility code.
10513         
10514 Sun Aug 17 22:34:40 1997  Ben Pfaff  <blp@gnu.org>
10515
10516         * getline.h: (struct getl_script) New members loop_index, macros.
10517
10518         * getline.c: (getl_add_file) Sets first_line field to NULL.
10519         (getl_add_DO_REPEAT_file) New function.
10520         (handle_line_buffer) When the current line's length is negative,
10521         set the filename and line number.  Increment line number after
10522         reading line.  Pass the line to
10523         copy_with_DO_REPEAT_substitutions() for processing.
10524         (getl_close_file) Free DO REPEAT lines before freeing the
10525         filename, and just set the filename to NULL when doing this,
10526         because otherwise the filename gets freed twice.
10527
10528         * glob.c: (glob var queuing) Removed.  All references removed.
10529
10530         * lexer.c: Comment fixes.
10531         (get_token_representation) New function.
10532
10533         * repeat.c: Comment fixes.
10534         (struct repeat_entry) Replaced type and v union members with a
10535         simple string.
10536         (append_record) New function.
10537         (internal_cmd_do_repeat) Started reforming it for the new
10538         repeat_entry struct.  Properly records filename changes in the
10539         getl_line_buf.  Fixed improper use of = for ==.  Fixed sense of
10540         strncasecmp() result usage.  Uses append_record() to simplify.
10541         Properly discards END REPEAT line.  Calls getl_add_DO_REPEAT_file
10542         to add in the file.
10543
10544         (copy_with_DO_REPEAT_substitutions) Started coding.
10545
10546         [DEBUGGING] (debug_print_lines) New function.
10547
10548         * set.q: (custom_results, internal_cmd_set) s/VER_PCP40/VER_PC/;
10549
10550         * tokens.h: (macro is_id1, is_idn) New macros.
10551
10552 Sat Aug 16 10:57:41 1997  Ben Pfaff  <blp@gnu.org>
10553
10554         * cmdline.c: (static var pre_syntax_message) Changed `win'
10555         compatibility mode to `wnd'.
10556
10557         * data-list.c: (fixed_parse_spss) Renamed
10558         fixed_parse_compatible().
10559
10560         * glob.c: (init_glob) Excise unused code for
10561         program_invocation_short_name.
10562
10563         * lexer.c: (preprocess_line) Leading indentors are ignored in Wnd
10564         as well as in X.
10565
10566         * print.c: (fixed_parse_spss) Renamed fixed_parse_compatible().
10567
10568         * set.q: `win' compatibility renamed `wnd'.
10569
10570 Thu Aug 14 22:11:12 1997  Ben Pfaff  <blp@gnu.org>
10571
10572         * filename.c: [__WIN32__] Change the included Windows header files
10573         (again).
10574         (absolute_filename_p) [__MSDOS__] A filename with a colon as the
10575         second character is absolute.
10576         (dirname) Fix logic error.  Don't printf() the results.
10577         (prepend_dir) Don't printf() the results.
10578
10579         * getline.c: (handle_line_buffer) New function.
10580         (getl_read_line) Reads line with handle_line_buffer() when
10581         appropriate.
10582         (getl_close_file) Discard line buffer data.
10583
10584         * getline.h: Comment fixes.
10585         (struct getl_line_list) New struct.
10586         (getl_script_struct) Added line buffer members.  These are hooks
10587         for use by DO REPEAT to allow it to insert virtual source code
10588         into the program.
10589
10590         * glob.c: (init_glob) [__DJGPP__ || (__WIN32__ && __BORLANDC__)]
10591         Override Borland C++ stupidity that claims Windows has a console
10592         window size of 0x3.
10593
10594         * repeat.c: This is in the process of being restructured from
10595         using a token-buffering approach to the DO REPEAT facility to
10596         using the more flexible approach of a line-buffering approach in
10597         conjunction with the getline module.  Comment fixes.
10598         (struct tok_struct) Removed.
10599         (static vars queue_index, queue_head, queue) Removed.
10600         (static vars line_buf_head, line_buf_tail) New vars.
10601         (internal_cmd_do_repeat) Instead of queuing tokens, queue lines.
10602         Not complete.
10603         (pull_queue, destroy_queue) Removed.
10604         [DEBUGGING] (debug_print_tokens) Removed.
10605
10606 Tue Aug  5 13:57:58 1997  Ben Pfaff  <blp@gnu.org>
10607
10608         * file-handle.q: (prepend_current_directory) New function.
10609         (internal_cmd_file_handle, fh_get_handle_by_filename) Prepends
10610         current directory before normalizing filename.
10611
10612         * filename.c: (gnu_getcwd) New function.
10613         (absolute_filename_p) New function.
10614         (search_path) New argument, PREPEND.  All references changed to
10615         pass NULL except those explicitly mentioned.  Uses
10616         absolute_filename_p().  Prepends PREPEND before trying the
10617         filename.
10618         (dirname, prepend_dir) New functions.
10619
10620         * getline.c: (getl_get_current_directory) New function.
10621         (getl_include) Passes getl_get_current_directory() as PREPEND arg
10622         to search_path().
10623                 
10624 Sun Aug  3 11:42:36 1997  Ben Pfaff  <blp@gnu.org>
10625
10626         * In several source files, the term `script' was replaced with
10627         `syntax file' inside error messages.  Usage of the term `script'
10628         in the sense of a syntax file is now deprecated.
10629
10630         * cmdline.c: (static vars pre_syntax_message, post_syntax_message)
10631         Updated messages.
10632
10633         * dump-sysfile.c: (usage) Update message.
10634
10635         * getline.c: (getl_read_line) Ignore lines beginning with `#!'.
10636
10637         * getline.h: (glob var getl_include_path) Declare extern.
10638
10639         * list.q: Define EXTERN as extern before #including somP.h.
10640
10641         * var.h: Remove declaration of `disptype' variable.
10642
10643         * vfm.c: (close_active_file) After switching the data sink to a
10644         data source, set vfm_sink to NULL, because it doesn't exist any
10645         more.
10646
10647 Thu Jul 17 21:41:44 1997  Ben Pfaff  <blp@gnu.org>
10648
10649         * glob.c: [__BORLANDC__] Include math.h.  Define _matherr() and
10650         _matherrl() to ignore all math errors.
10651
10652         * sfm-read.c: (read_value_labels) When reading the labels from
10653         disk, read the little parts separately instead of as a struct;
10654         this avoids alignment problems.
10655
10656         * sfm-write.c: (struct sfm_fhuser_ext) New member `elem_type'.
10657         (sfm_write_dictionary) Sets elem_type and frees it on lossage.
10658         (write_header) Allocates and initializes elem_type.
10659         (sfm_write_case) Uses elem_type to determine how to handle each
10660         flt64 element.
10661         (sfm_close) Frees elem_type.
10662
10663         * sfmP.h: Comment fix.
10664         [__BORLANDC__] Uses #pragma -a to adjust structure member
10665         alignment.
10666         
10667 Thu Jul 17 01:55:12 1997  Ben Pfaff  <blp@gnu.org>
10668
10669         * Makefile.am: (fiasco_SOURCES) Remove display.c.
10670
10671         * common.c: Fix typo.
10672
10673         * dfm.c: (read_record) Remove strncasecmp() emulation and fix the
10674         sense of the condition.
10675
10676         * expr-evl.c: (macro ALLOC_STRING_SPACE) [!PAGED_STACK] Add
10677         line-continuation backslash.
10678
10679         * filename.c: [__WIN32__] Include <windef.h> before <winbase.h>.
10680
10681         * frequencies.q: (custom_grouped, add_percentile) Don't use a
10682         non-constant expression as an argument to sizeof.
10683
10684         * glob.c: [__WIN32__ && __BORLANDC__] When including <conio.h>,
10685         undefine gettext macro because that's a conio function.
10686
10687         * hash.h: (hsh_prime_tab declaration) Remove.
10688
10689         * list.q: (write_fallback_headers) Move `leader' allocation out of
10690         main loop.  Change to local_alloc() allocation.
10691
10692         * output.h: Formatting fixes.  Put __attribute__ in right place on
10693         function prototypes.
10694
10695         * sfm-read.c: (read_machine_flt64_info, read_variables) Change
10696         incorrect `SECOND_LOWEST_VALUE' references to proper
10697         `second_lowest_value'.
10698
10699         * som-frnt.c: (EXTERN macro) Define as `extern' instead of null
10700         value.  This way 2 out of 3 of the som files define the vars
10701         extern, the correct way, that actually works under BC++.
10702         (som_set_float) Don't use nonconstant initializers for a struct.
10703
10704         * som-high.c: Add the standard alloca() header.
10705         (replicate_table) Add prototype.
10706
10707         Merged DISPLAY routine.
10708         * sysfile-info.c: (AS_*) New enum series.
10709         (cmd_sysfile_info) Gutted.  Calls describe_variable() to do the
10710         dirty work.
10711         (cmd_display, display_macros, display_documents,
10712         display_variables) Stolen from defunct display.c.
10713         (describe_variable) New function.
10714
10715         * temporary.c: [0] (display_tree) New debug function.
10716         (copy_variable) Performs shallow copy of value labels instead of
10717         deep copy; i.e., just copys the AVL tree and increments the
10718         reference counts.
10719
10720         * val-labs.c: Comment fixes.
10721         (do_value_labels) Optionally skip leading forward slash.
10722         (get_label) Creates only a single value label instead of many
10723         copies of one, and sets the reference count.
10724
10725         * display.c: Removed.
10726
10727         * dump-sysfile.c: New file, not yet complete.
10728
10729 Fri Jul 11 23:02:18 1997  Ben Pfaff  <blp@gnu.org>
10730
10731         For lots of source files I added more verbose_msg's.  These aren't
10732         listed below as they have tested as being benign.  In some cases
10733         these replaced debug_printf() calls.
10734
10735         * output.c: (outp_read_devices) Message fix.
10736
10737         * postscript.c: (output_encodings) Message fix.  Reports errors on
10738         fclose().
10739         (postopen) Message fix.
10740         
10741 Fri Jul 11 14:09:40 1997  Ben Pfaff  <blp@gnu.org>
10742
10743         * dfm.c: (dfm_close) Don't call fclose() for a NULL FILE.
10744
10745         * filename.c: (close_file_ext) Set f->file to NULL *after* closing
10746         it.
10747
10748         * main.c: Remove <malloc.h> #include.
10749
10750         * mis-val.c: (parse_numeric) Set .f member for each missing[]
10751         instead of trying to just set the missing[] itself, which is a
10752         gcc-specific idiom.
10753
10754         * sfm-read.c: (read_variables) Same.
10755
10756         * str.h: Add memmem() prototype.
10757
10758         * val-labs.c, var-labs.c: Replace <malloc.h> with <stdlib.h>.
10759
10760 Thu Jul 10 22:13:53 1997  Ben Pfaff  <blp@gnu.org>
10761
10762         * Makefile.am: (q2c) Don't include any libraries in the link.
10763
10764         * dfm.c: (force_line_buffer_extension) New macro.
10765         (count_tabs) New function.
10766         (tabs_To_spaces) New function.
10767         (read_record) Calls tabs_to_spaces() on the line being processed.
10768
10769         * q2c.c: Disabled i18n for this proglet so that libintl.a doesn't
10770         have to be compiled twice (once for CC, once for LOCAL_CC).
10771  
10772 Sun Jul  6 19:14:33 1997  Ben Pfaff  <blp@gnu.org>
10773
10774         * Makefile.am: (INCLUDES) Add intl directory; fix directories.
10775         (LDADD) Add @INTLLIBS@.
10776         (q2c) Add LIBS, @INTLLIBS@ to link step.
10777
10778         * inpt-pgm.c: Turn off debugging.
10779
10780         * postscript.c: (postopen) Format fix.  local_free() blocks
10781         returned by local_alloc(); don't free() them.
10782
10783 Sat Jul  5 23:44:51 1997  Ben Pfaff  <blp@gnu.org>
10784
10785         * data-in.c: (parse_string_as_format) Comment fix.  Fix check for
10786         string length.
10787
10788         * data-list.c: (read_from_data_list_fixed) Pass proper value for
10789         LEN arg, not simply the full string length.
10790
10791         * sort.c: (allocate_file_handles) Check SPSS compatible temp file
10792         directories before generic temp file directories.
10793
10794         * vfm.c: Disable debugging.
10795
10796 Fri Jul  4 13:26:41 1997  Ben Pfaff  <blp@gnu.org>
10797
10798         * get.c: Comment fix.
10799         (cmd_save_internal) Always passes GTSV_OPT_SAVE option.
10800
10801 Wed Jun 25 22:52:28 1997  Ben Pfaff  <blp@gnu.org>
10802
10803         * expr-prs.c: (debug_print_postfix) Conditionally included on
10804         GLOBAL_DEBUGGING.  Removed out_header() reference.
10805
10806         * exprP.h: Removed #undef GLOBAL_DEBUGGING.
10807
10808 Sun Jun 22 22:00:28 1997  Ben Pfaff  <blp@gnu.org>
10809
10810         * ascii.c: Removed obsolete ascii_close_page() prototype.
10811
10812         * command.c: (output_line) Comment fix.
10813
10814         * data-in.c: Formatting fix.
10815         (parse_string_as_format) Now the `fc' argument is used only for
10816         the purpose of error messages; it is not an index into the string
10817         passed.  All references changed.
10818
10819         * data-list.c: Comment fix.
10820         (cut_field) Comment fix.  Now returns the column number of the
10821         position of the field cut out on success.
10822         (parse_field) Added `column' argument.  Puts the column numbers in
10823         the error message.
10824         (read_from_data_list_free, read_from_data_list_list) Record the
10825         column number returned by cut_field(), pass it to parse_field().
10826
10827         * dfm.c: Comment fix.
10828
10829         * do-ifP.h: Comment fix.
10830
10831         * expr-prs.c: (SYSMIS_func) Implemented string-type arguments for
10832         the SYSMIS function.
10833
10834         * expr.h, exprP.h: Comment fix.
10835
10836         * glob.c: (init_glob) Only calls setlocale() and family if
10837         ENABLE_NLS set.
10838
10839         * hash.h: Comment fix.
10840
10841         * include.c: Comment fix.
10842
10843         * output.c: Comment fix.
10844
10845         * postscript.c: (ps_line_intersection) Simplified assertion.
10846
10847         * repeat.c: Comment fix.
10848
10849         * vars-atr.c: Comment fix.
10850
10851         * vars-prs.c: Comment fix.
10852
10853         * vfm.c: (vector_initialization) [DEBUGGING] Fixed undefined
10854         behavior with usage of postincrement.
10855         (memory_stream_read) Discards cases as it goes. 
10856
10857 Sun Jun 15 16:45:17 1997  Ben Pfaff  <blp@gnu.org>
10858
10859         * Makefile.am: Cleans q2c, not just distcleans it.  Distcleans
10860         foo.
10861
10862         * Most source files: Includes debug-print.h, related comment
10863         fixes.
10864
10865         * cases.c: (alloc_val) Removed complex allocation code.  Merely
10866         increments default_dict.nval and returns the former value.
10867         (envector, devector) Removed references to lv member of struct
10868         variable.
10869
10870         * common.h: (macro VME) Replaced complex definition with simple
10871         one.
10872
10873         * data-list.c: (cmd_data_list) Sets vfm_source instead of
10874         read_active_file and cancel_input_pgm.
10875         (read_from_data_list, cancel_data_list) Removed.
10876         (data_list_source_read, data_list_source_destroy_source) New
10877         functions.
10878         (glob var data_list_source) New var.
10879
10880         * dfm.c: (open_file_r, open_file_w) Simplified debug output.
10881         (cmd_begin_data) Improved criteria for an input program accessing
10882         the inline file.  Still not perfect.
10883
10884         * do-if.c: (do_if_trns_proc) Simplified debug output.
10885
10886         * expr-prs.c: Comment fixes.
10887         [DEBUGGING] (debug_print_postfix) Simplified debug output.
10888
10889         * file-handle.q: (fh_close_handle) Simplified debug output.
10890
10891         * file-type.c: Comment fixes.
10892         (cmd_file_type) Sets vfm_source instead of read_active_file and
10893         cancel_input_pgm.
10894         (cmd_end_file_type) On failure, discards variables in place of
10895         just canceling the input program.
10896         (read_from_file_type) Renamed file_type_source_read.
10897         (cancel_file_type) Renamed file_type_source_destroy_source.
10898         (glob var file_type_source) New var.
10899
10900         * get.c: (GTSV_* enum series) New enums GTSV_OPT_SAVE, GTSV_NONE.
10901         (cmd_get) Initializes options to GTSV_NONE before passing to
10902         trim_dictionary().  Removed `lv' reference.  Sets vfm_source
10903         instead of read_active_file and cancel_input_pgm.
10904         (cmd_save_internal) Initializes options before passing to
10905         trim_dictionary().  Local var `nval' removed.
10906         (dict_delete_run) Comment fixes.
10907         (trim_dictionary) Comment fixes.  Disallows scratch variables if
10908         GTSV_OPT_SAVE set in options.
10909         (read_from_get) Renamed get_source_read.
10910         (cancel_get) Renamed get_source_destroy_source.
10911         (glob var get_source) New var.
10912
10913         * inpt-pgm.c: (cmd_input_program) Sets vfm_source instead of
10914         read_active_file and cancel_input_pgm.
10915         (read_from_input_program) Renamed input_program_source_read.
10916         Simplified debug output.
10917         (cancel_input_program) Renamed
10918         input_program_source_destroy_source.
10919         (glob var input_program_source) New var.
10920
10921         * loop.c: (loop_1_trns_proc) Simplified debug output.
10922
10923         * main.c: (dump_token) Made eof output more explicit.
10924
10925         * sfm-read.c: (read_variables, dump_dictionary) Removed `lv'
10926         references.
10927
10928         * sort.c: (cmd_sort_cases) Disallows scratch variables.  Removed
10929         code for always-memory or always-disk cases.  malloc's case-list
10930         based on vfm_source_info.ncases.  Explicit support for
10931         memory_stream via memory_source_cases.
10932         (do_external_sort) Sets vfm_source instead of read_active_file and
10933         cancel_input_pgm.
10934         (allocate_file_handles) The temporary directory permissions are
10935         set to 0700 instead of 0777.
10936         (allocate_cases) Formatting fixes.  Simplified debug output.
10937         (output_record) Compacts the case if necessary before writing it
10938         out.
10939         (close_handle, open_handle_w) Simplified debug output.
10940         (write_initial_runs) Destroys vfm_sink, then sets it to
10941         sort_stream.  Writes records to memory based on
10942         vfm_sink_info.case_size.
10943         (write_to_sort_cases) Renamed sort_stream_write().
10944         (merge) Simplified error handling.  Simplified debug output.
10945         Formatting fixes.
10946         (read_from_external_sort) Renamed sort_stream_read().
10947         Reads records based on vfm_source_info.case_size.
10948         (sort_stream_write) Writes records to memory based on
10949         vfm_sink_info.case_size.
10950         (sort_stream_mode) New function.
10951         (glob var sort_stream) New variable.
10952
10953         * temporary.c: (cmd_temporary) Simplified debug output.
10954         (copy_variable) Removed references to `lv'.
10955
10956         * title.c: (get_title) Simplified debug output.
10957
10958         * var.h: Comment fixes.
10959         (struct get_proc) Removed member `lv'.
10960         (struct variable) Removed member `lv'.  Comment fixes.
10961         (glob vars read_active_file, write_active_file, cancel_input_pgm)
10962         Removed.
10963         (struct case_stream) New.
10964
10965         * vars-atr.c: (discard_variables) Changed cancel_input_pgm,
10966         read_active_file references to use vfm_source.
10967         (init_variable, replace_variable) Removed references to `lv'.
10968
10969         * vfm.c: Comment fixes.
10970         (glob var vfm_source, vfm_sink, vfm_source_info, vfm_sink_info)
10971         New variables.
10972         (static var queue, qh, qt, n_lag) Removed.  All references
10973         removed.
10974         (glob var compaction_necessary, compaction_nval, compaction_case,
10975         paging) New variables.
10976         (record_case) Removed.
10977         (procedure) Comment fixes.  Calls vfm_source->read() instead of
10978         read_active_file().
10979         (lag) Removed.
10980         (prepare_for_writing, arrange_compaction, make_temp_case,
10981         vector_initialization, setup_filter) New function.
10982         (open_active_file) Most of the code moved into the abovementioned
10983         new functions.  Now sets temp_dict to &default_dict if there is no
10984         temporary dictionary, for convenience.  New debug output.
10985         (close_active_file) Deals with changing the sink to the source.
10986         Calls finish_compaction().  Frees compaction_case.  Mostly
10987         rewritten.
10988         (glob vars disk_source_file, disk_sink_file) New vars.
10989         (destroy_active_file, read_from_memory) Removed.
10990         (disk_stream_init, disk_stream_read, disk_stream_write,
10991         disk_stream_mode, disk_stream_destroy_source,
10992         disk_stream_destroy_sink) New functions.
10993         (glob var vfm_disk_stream) New var.
10994         (glob vars memory_source_cases, memory_sink_cases,
10995         memory_sink_iter, memory_sink_max_cases) New vars.
10996         (memory_stream_init, memory_stream_read, memory_stream_write,
10997         memory_stream_mode, memory_stream_destroy_source,
10998         memory_stream_destroy_sink) New functions.
10999         (glob var vfm_memory_stream) New var.
11000         (write_case) Local var `i' renamed `cur_trns'; local var `retval'
11001         named `more_cases'.  Simplified debug output.  Otherwise mostly
11002         rewritten.
11003         (record_case) Moved into the stream drivers.  Removed.
11004         (transform) Removed (was dead code).
11005         (SPLIT_FILE_procfunc) s/vfm_replacement/vfm_sink_info/.  In the
11006         common case that the splits don't change, we don't need to copy
11007         the case into prev_case again--pointless.
11008         (compact_case) New function.
11009         (finish_compaction) New function.
11010
11011         * vfmP.h: Comment fixes.
11012         (DEV_* enum series) Removed. 
11013         (struct storage) Renamed `stream_info'.  Removed variant record.
11014         Removed `device' member.
11015
11016         * debug-print.h: New file.
11017         
11018 Sun Jun  8 01:12:38 1997  Ben Pfaff  <blp@gnu.org>
11019
11020         * autorecode.c: Turned off debugging.
11021
11022         * data-list.c: (destroy_dls) Closes the associated file handle.
11023
11024         * descript.q: (custom_variables) Added PV_NO_SCRATCH to
11025         parse_variables() options.
11026
11027         * dfm.c: (open_file_r) Removed gratuituous argument to msg() call.
11028
11029         * display.c: (display_variables) Really fixed null cell bug.
11030
11031         * file-handle.q: (fh_close_handle) Changed debugging message.
11032
11033         * frequencies.q: (custom_variables) Added PV_NO_SCRATCH to
11034         parse_variables() options.
11035
11036         * list.q: Added PV_NO_SCRATCH in q2c varlist options.
11037         (cmd_list) Fails if no variables specified.
11038         (determine_layout) Writes blank lines manually.
11039
11040         * loop.c: (loop_1_trns_proc) Made debugging code only print
11041         messages if debugging.
11042
11043         * q2c.c: (dump_subcommand) Appends sbc->message to SBC_VARLIST
11044         parse_variables() arguments.
11045         (main) Parses optional parenthesized options to varlist
11046         subcommands into sbc->message.
11047
11048         * sfm-read.c: Format fix.
11049
11050         * var.h: (FV_*) New enum series.
11051         (PV_*) New enum PV_NO_SCRATCH.
11052
11053         * vars-prs.c: (find_var) Removed.
11054         (fill_all_vars) Takes FV_* enum instead of boolean third
11055         argument.  Rewritten to deal with scratch as well as system
11056         variables.
11057         (parse_variables) Error message on scratch variable if
11058         PV_NO_SCRATCH set.
11059
11060         * vfm.c: (static var virt_begin_func) New var.
11061         (procedure) Sets up virt_begin_func.
11062         (SPLIT_FILE_procfunc) For the first case, calls virt_begin_func()
11063         after dump_splits().  For succeeding groups changes, calls
11064         virt_begin_func() instead of begin_func().      
11065
11066 Fri Jun  6 22:42:23 1997  Ben Pfaff  <blp@gnu.org>
11067
11068         * count.c, data-out.c, file-handle.q, list.q, loop.c: Turned off
11069         debugging.
11070
11071         * dfm.c: Added some debugging messages, disabled by default.
11072         (open_file_r) Fixed error message.
11073         (read_record) On eof on inline_file, instead of calling
11074         fh_close_handle(), simply jump to eof label like a normal file.
11075         Message fixes.
11076
11077         * display.c: Thin lines between rows for certain kinds of
11078         listing.  Fixed `null cell' bug.
11079
11080         * error.c: (failure) Flush stdout, stderr before failing.
11081
11082         * file-handle.q: (fh_close_handle) Added debugging message.
11083
11084         * frequencies.q: (dump_full) Bottom line extends across entire
11085         table width.  Changed title formatting.
11086         (dump_condensed) Changed title formatting.
11087         (dump_statistics) Fixed title formatting.
11088
11089         * glob.c: (init_glob) Moved initialization of cur_proc out of #if.
11090         Sets default value of set_format.
11091
11092         * list.q: (cmd_list) Calls blank_line() before determine_layout().
11093         Passes write_all_headers() to procedure() as pre-group func.
11094         (write_all_headers) New function.
11095         (determine_layout) Removed calls to write_header().
11096         Calls blank_line() before and after write_fallback_headers().
11097
11098         * recode.c: (recode_trns_free) Only attempts to free head->map if
11099         non-NULL.
11100
11101         * sfm-read.c: (read_variables) Allows `#' at beginning of system
11102         file variable names but gives a warning.  Sets `left' based on
11103         first character being/not being `#'.  On lossage frees dict->var.
11104
11105         * som-high.c: (som_draw_title) Simplified title formatting.
11106
11107         * vfm.c: (dump_splits) Fixed and changed splits formatting.
11108
11109 Thu Jun  5 22:51:15 1997  Ben Pfaff  <blp@gnu.org>
11110
11111         * autorecode.c: (cmd_autorecode) Sets h_trans to NULL at
11112         beginning.  Frees v_src, v_dest on successful exit.  Frees
11113         h_trans[*], h_trans on lossage.
11114         (recode) Frees h_trans[*], h_trans.
11115
11116         * dfm.c: (dfm_close) Formatting change.
11117         (open_inline_file) Now passed a dfm_fhuser_ext to initialize; no
11118         longer allocates its own in inline_file.
11119         (open_file_r) Passes the local dfm_fhuser_ext to
11120         open_inline_file().
11121         (open_file_w) Message fix. 
11122         (read_record) Buffer reallocation strategy changed.  Frees
11123         ext->line even in inline_file to prevent leaks.
11124         (dfm_put_record) Fixed bug where `ext' was cached before the file
11125         was opened and thus it would be NULL when the file really was
11126         open.
11127         (cmd_begin_data) Sets up inline_file basics itself, then calls
11128         open_inline_file() for the dfm_fhuser_ext.  Formatting fix.
11129
11130         * list.q: (write_line) Formatting fix.
11131         (clean_up) Minor strategy change.  Sets proportional font after
11132         finishing cleanup.
11133         (determine_layout) Sets fixed font before writing regular headers,
11134         or after writing fallback headers.
11135
11136         * modify-vars.c: (cmd_modify_vars) Frees variable lists for DROP
11137         and KEEP vars after using them.
11138
11139         * postscript.c: (ps_init_driver) Frees x->family.
11140         (postopen) When loading fonts, free the temporary font name buffer
11141         after using it.
11142         (ps_text_set_font_by_position) Free temporary font name buffer
11143         after using it.
11144         (text) Fixed code that calculated `lig' so that `lig' always gets
11145         initialized.  Formatting fix.
11146
11147         * som-low.c: (get_cell_size, som_get_table_size) `prop_height' ->
11148         `font_height'.
11149         [GLOBAL_DEBUGGIGN] (check_table) Use arena_alloc() to allocate
11150         cells, not xmalloc(), so that the cells will get destroyed
11151         automatically.
11152
11153         * sysfile-info.c: (cmd_sysfile_info) Frees the dictionary after
11154         using it.
11155
11156 Tue Jun  3 23:33:22 1997  Ben Pfaff  <blp@gnu.org>
11157
11158         * ascii.c: (ascii_text_draw) Always sets metrics for strings that
11159         are drawn.
11160
11161         * dfm.c: Comment fix.
11162
11163         * list.q: Comment fixes.  Include somP.h.  Removed static vars
11164         table, n_columns, n_rows, part.  New struct list_ext.  New static
11165         var line_buf.
11166         (n_lines_remaining, n_chars_width, write_line) New functions.
11167         (cmd_list, list_cases) Rewritten.
11168         (begin_row, end_row, flush_table) Removed.
11169         (write_header, clean_up, write_varname, write_fallback_headers,
11170         determine_layout) New functions.
11171
11172         * output.c: (outp_iterate_enabled_drivers) Minor reformat.
11173
11174         * output.h: Comment fix.
11175
11176         * postscript.c: Comment fix.
11177         (struct ps_driver_ext) Removed prop_size, fixed_size members;
11178         added font_size.  All references changed.
11179         (ps_init_driver) Initializes font_size.  Simplified space checking
11180         code.
11181         (static var option_tab[]) Removed prop-size, fixed-size; added
11182         font-size.
11183         (ps_option) Handles font_size.
11184
11185         * som-high.c: Moved prototypes into somP.h.
11186         (som_init_driver) New function.
11187         (som_submit_table) Moved some code into new function
11188         som_init_driver().
11189         (build_target) Moved some code into new function
11190         som_internal_eject_page().
11191         (som_eject_page) Uses som_internal_eject_page().
11192         (som_internal_eject_page) New function.
11193
11194         * som-low.c: Moved prototypes into somP.h.
11195
11196         * som.h: Formatting fixes.
11197
11198         * somP.h: (struct som_driver_ext) Removed em_width;
11199         added prop_em_width, fixed_width.
11200
11201 Mon Jun  2 14:25:25 1997  Ben Pfaff  <blp@gnu.org>
11202
11203         * Makefile.am: Added `localedir' definition.  Added
11204         -DLOCALEDIR="..." to DEFS.  Added -I. to INCLUDES.
11205
11206         * ascii.c: (macro draw_line) Fixed capitalization.
11207
11208         * ascii.c, autorecode.c, cases.c, cmdline.c, command.c, common.c,
11209         compute.c, count.c, data-in.c, data-list.c, data-out.c,
11210         descript.q, dfm.c, display.c, do-if.c, error.c, expr-evl.c,
11211         expr-opt.c, expr-prs.c, file-handle.q, file-type.c, filename.c,
11212         formats.c, frequencies.q, get.c, getline.c, glob.c, groff-font.c,
11213         hash.c, heap.c, include.c, inpt-pgm.c, lexer.c, list.q, loop.c,
11214         main.c, mis-val.c, misc.c, modify-vars.c, numeric.c, output.c,
11215         postscript.c, print.c, q2c.c, recode.c, rename-vars.c, repeat.c,
11216         sample.c, sel-if.c, sfm-read.c, sfm-write.c, sfmP.h, som-frnt.c,
11217         som-high.c, som-low.c, sort.c, split-file.c, sysfile-info.c,
11218         temporary.c, title.c, tokens.h, val-labs.c, var-labs.c,
11219         vars-atr.c, vars-prs.c, vector.c, vfm.c, weight.c: Marked strings
11220         for internationlization.
11221
11222         * glob.c: [HAVE_LOCALE_H] Includes locale.h.
11223
11224 Sun Jun  1 23:31:18 1997  Ben Pfaff  <blp@gnu.org>
11225
11226         * do-if.c, sort.c, val-labs.c: Comment fixes.
11227
11228         * glob.c: (init_glob) Uncommented, updated i18n support.
11229         
11230         * arena.c, ascii.c, data-in.c, descript.q, error.c, expr-evl.c,
11231         expr-opt.c, expr-prs.c, filename.c, frequencies.q, groff-font.c,
11232         output.c, postscript.c, sfm-read.c, som-high.c, vars-prs.c: Made
11233         the declarations of macros taking arguments a lot nicer.
11234
11235 Sun Jun  1 17:22:04 1997  Ben Pfaff  <blp@gnu.org>
11236
11237         * error.h: Removed CE, CW aliases for SE, SW.
11238
11239         * q2c.c: Removed explicit streq() definition since it's duplicated
11240         in str.h.
11241         
11242         * approx.h, error.h, font.h, hash.h, misc.h, output.h, somP.h,
11243         stats.h, str.h, tokens.h: Made the declarations of macros taking
11244         arguments a lot nicer-looking of <pinard@iro.umontreal.ca>.
11245         Comment fixes.
11246
11247 Sun Jun  1 12:02:06 1997  Ben Pfaff  <blp@gnu.org>
11248
11249         * cmdline.c: Comment fixes.
11250         (pick_compat) Changed return type to int.  Now, instead of setting
11251         glob var `compat' to the emulation, returns the emulation.  All
11252         references changed.
11253         (parse_command_line) Added terminating null to end of
11254         `long_options' array definition.
11255         (pre_syntax_message) Fixes.
11256         (usage) Shows the default emulation in the syntax message by
11257         calling pick_compat().
11258
11259         * getline.c: (getl_add_include_dir) Separates paths with
11260         PATH_DELIMITER, not DIR_SEPARATOR.
11261
11262         * glob.c: (init_glob) Fixed references to DEFAULT_VER_PCP40,
11263         DEFAULT_VER_WIN61, DEFAULT_VER_X40.
11264
11265         * output.c: (outp_configure_macro) Make earlier definitions for a
11266         particular key override later ones for the same key.
11267         
11268 Fri May 30 19:40:49 1997  Ben Pfaff  <blp@gnu.org>
11269
11270         * ascii.c: Comment fixes.
11271
11272         * output.c: (outp_get_paper_size)
11273         s/STAT_OUTPUT_INIT_FILE/STAT_OUTPUT_PAPERSIZE_FILE/.
11274         
11275 Sun May 25 22:34:07 1997  Ben Pfaff  <blp@gnu.org>
11276
11277         * ascii.c, postscript.c, sfm-read.c, sfm-write.c, sort.c: Include
11278         <errno.h>.  GNU libc 2 enforces this!
11279
11280         * command.c: (parse_cmd) Fixed problem with `else' clause being
11281         paired with wrong `if'.  Comment fix.
11282
11283 Fri May  9 16:53:52 1997  Ben Pfaff  <blp@gnu.org>
11284
11285         * getline.c: [!HAVE_LIBREADLINE] (read_console) Changed
11286         blp_getline() to getline().
11287
11288         * output.c: (outp_eval_dimension) Changed the fix from last time;
11289         there was no variable `a'.
11290
11291         * q2c.c: (get_line) Fixed boundary condition overrun bug.
11292
11293 Mon May  5 21:58:22 1997  Ben Pfaff  <blp@gnu.org>
11294
11295         * output.c: (outp_evaluate_dimension) Fixed handling of negative
11296         numbers having fractional parts.  Added case of a fraction without
11297         a whole-number part.
11298
11299 Fri May  2 22:08:05 1997  Ben Pfaff  <blp@gnu.org>
11300
11301         * ascii.c: (ascii_text_get_font_position) Removed.
11302
11303         * expr.h, exprP.h: Disabled debugging.
11304
11305         * groff-font.c, postscript.c: Changed `groff' to `Groff' in
11306         several places.
11307
11308         * output.h: (struct outp_class_struct) Removed
11309         text_get_font_position method.  All references deleted.
11310
11311         * postscript.c: Big change here.  Fontmaps were completely
11312         eliminated because of a change in philosophy.  Comment fixes.
11313         (struct ps_fontmap, ps2dit_map, font_family, dit2family_map)
11314         Removed.
11315         (struct ps_driver_ext) `position', `fontmap', `prop_name',
11316         `fixed_name' members removed.  New members `prop_family',
11317         `fixed_family'.  `family' member changed to type char *.
11318         (static var ps_fontmaps) Removed.
11319         () Removed.
11320         (ps_init_driver) Removed obsolete references, updated.
11321         Initializes `translate_x', `translate_y', `scale'.  Doesn't read
11322         fontmap, of course.  Refers to font names through internal_name
11323         rather than subversive means.  Frees proper items.
11324         (static var option_tab[]) Removed `fontmap-file' option; renamed
11325         `fixed-font', `prop-font'.
11326         (ps_option) Corresponds to option_tab[].
11327         (read_fontmap, release_fontmap, ps_to_dit, compare_ps2dit,
11328         hash_ps2dit, compare_dit2family, hash_dit2family, compare_family,
11329         hash_family) Removed.
11330         (postopen) Generates font names from family names.  Gets
11331         PostScript font name properly.  New prologue file comment `!!!'
11332         style.
11333         (ps_open_page) Adds translate_x, translate_y to BP prologue
11334         function; gives SF argument floating-point format.
11335         (ps_text_set_font_by_name) Doesn't try to map PostScript->Groff
11336         font name.  Doesn't change font family.
11337         (ps_text_set_font_by_position) Generates Groff font name from font
11338         family name instead of through table lookup.
11339         (ps_text_set_font_by_family) Renamed `ps_text_set_font_family',
11340         all references changed.  Reduced to simple string assignment.
11341         (ps_get_font_name) Removed.
11342         (ps_get_font_family) Reduced to string return.
11343         (text) Doesn't save `position' since it no longer exists.  Ugly
11344         kluge to save font family--fix soon?
11345         (load_font) Removed PostScript name argument.
11346         
11347 Thu May  1 14:58:59 1997  Ben Pfaff  <blp@gnu.org>
11348
11349         * postscript.c: Comment fix.
11350         (ps_open_page) Puts scale factor in PostScript output.
11351         
11352 Sat Apr 26 11:49:32 1997  Ben Pfaff  <blp@gnu.org>
11353
11354         * Makefile.am: Distcleans q2c.
11355
11356 Wed Apr 23 21:33:48 1997  Ben Pfaff  <blp@gnu.org>
11357
11358         * ascii.c: (delineate) Sets text size even if width is zero.
11359
11360         * command.c: Comment fix.
11361         (static var cmd_table[]) Re-enabled EVALUATE command.
11362         (parse_cmd) Lotsa comment fixes.  Fixed infinite loop in parsing
11363         of comments in script files.  Now more liberal on criteria for
11364         performing a state transition--if *anything* happened correctly,
11365         not just if *everything* happened correctly.
11366
11367         * data-out.c: (convert_F) Comment fix.  Why in the fsck does
11368         Checker segfault on formatting large numbers and why in the fsck
11369         hadn't I noticed this before?
11370
11371         * expr.h, exprP.h: No longer turn off GLOBAL_DEBUGGING.
11372
11373         * list.q: (cmd_list) Commented out the actual output routine
11374         because of various problems.  Probably will abandon the idea of
11375         using the general `crushed tables' for the LIST procedure.
11376
11377         * temporary.c: (restore_dictionary) Sets var_by_name to NULL after
11378         clearing it.  Allocates a new var_by_name dictionary before trying
11379         to add members to it.
11380
11381         * vars-atr.c: [DEBUGGING] (dump_one_var_node) Removed argument
11382         `sib'.  Changed type of `node' argument.
11383         [DEBUGGING] (dump_var_tree) Replaced avlwalk() with
11384         avl_walk_inorder().
11385         (clear_variable) Only dumps the var tree if var_by_name non-NULL.
11386         [DEBUGGING] Only deletes the variable from var_by_name if that var
11387         non-NULL.
11388
11389 Fri Apr 18 16:48:41 1997  Ben Pfaff  <blp@gnu.org>
11390
11391         * Makefile.am: Added include files to SOURCES.  Added
11392         frequencies.q to EXTRA_DIST.  Removed include/ from INCLUDES.  Now
11393         includes rules for q2c.  Added `boast' target.
11394
11395 Fri Apr 18 15:42:22 1997  Ben Pfaff  <blp@gnu.org>
11396
11397         * Makefile.am: Maintainer-clean Makefile.in.
11398         
11399         * Makefile.am: Fixed redundant EXTRA_DIST line.
11400
11401         * ascii.c: Comment fixes.
11402         (ascii_line_vert) Fixed overly aggressive range check.
11403
11404         * display.c: Removed dead code.
11405
11406         * list.q: Turn debugging on.
11407         (flush_table) New debug code.
11408
11409         * sfm-read.c: (read_value_labels) malloc's the structure before
11410         trying to assign to its members.
11411
11412         * sfm-write.c: Comment fix.
11413
11414         * som-high.c: (som_submit_table) Sets som.t and som.d on each call
11415         to output_table().
11416         (output_table) No arguments anymore--gets them through `som'
11417         global.  New debug code.  In crushed tables, now sets `htv' as
11418         well as `hv' to avoid bad confusion later.
11419         (dump_crush_page) New debug code.
11420
11421         * som-low.c: (som_dump_crush_page) New debug code.
11422
11423 Thu Mar 27 01:11:29 1997  Ben Pfaff  <blp@gnu.org>
11424
11425         All source files: Broke long lines into multiple lines.
11426         
11427         * ascii.c: (ascii_close_page) Uses host_system var in place of
11428         HOST_SYSTEM constant.
11429
11430         * cmdline.c: (var syntax_message[]) Broke into
11431         pre_syntax_message[] and post_syntax_message[].
11432         (usage) Outputs both parts, separated by driver list.
11433
11434         * error.h: Fixed broken formatting.
11435
11436         * expr-opt.c: (str_search, str_rsearch) New functions.
11437
11438         * misc.c: (blp_getdelim) Removed.  All references changed to
11439         `getdelim'.
11440         (str_search, str_rsearch) Removed.
11441         (memrmem) New function.
11442
11443         * misc.h: (blp_getline) Removed.  All reference changed to
11444         `getline'.
11445
11446         * stat.h: New file.
11447
11448         * filename.c: Includes "stat.h", not <sys/stat.h>.
11449         (blp_getenv) Uses host_system var instead of HOST_SYSTEM constant.
11450
11451         * output.c: (outp_list_classes) Changed output formatting.
11452
11453         * sfm-write.c: (write_header) Uses host_system var instead of
11454         HOST_SYSTEM constant.
11455         (write_rec_7_34) Extracts version numbers from the version string.
11456         Untested.
11457
11458         * sort.c: Includes "stat.h", not <sys/stat.h>.
11459
11460         * str.c: (strcasecmp) Removed.
11461
11462         * title.c: (cmd_document) Uses host_system var instead of
11463         HOST_SYSTEM constant.
11464
11465         * version.c: Generated on-the-fly by the Makefile instead of being
11466         static.
11467
11468         * str.h: Comment fixes.  Doesn't substitute for missing memmove or
11469         memcpy.
11470         [!HAVE_STRNCASECMP] Declares strncasecmp().
11471
11472         * version.h: Removed stray character.  Comment fixes.
11473         (vars host_system, build_system) New vars.
11474
11475 Mon Mar 24 21:47:31 1997  Ben Pfaff  <blp@gnu.org>
11476
11477         * Most source files: Changed formatting of copyright notice; fixed
11478         FSF address; reformatted to better conform to GNU standards;
11479         comment fixes.  Added markups to prevent GNU indent from messing
11480         up my beautiful formatting :-).
11481         
11482         * q2c.c: (get_line) Ignores lines that begin with `/* *INDENT' so
11483         that GNU indent markups can be passed through without problems.
11484
11485 Wed Feb 19 21:30:31 1997  Ben Pfaff  <blp@gnu.org>
11486
11487         * get.c: Turned off debugging.
11488
11489         * glob.c: (init_glob) Turned on save-file compression by default.
11490
11491         * sfm-write.c: (sfm_write_case) Fixed bug which resulted in less
11492         compression than was possible in save files.
11493
11494 Sun Feb 16 20:57:20 1997  Ben Pfaff  <blp@gnu.org>
11495
11496         * data-out.c: (convert_F) Comment fixes.  Debug message fixes.
11497
11498         * frequencies.q: Removed Fiasco extensions.  Updated calculation
11499         algorithms.  Polished output format. 
11500         (struct frq_info_struct) Removed members `max_degree', `min_n',
11501         all references removed.
11502         (macro frq_extensions) Removed.
11503         (static vars min_n, max_degree) Removed, all references removed.
11504         (internal_cmd_frequencies) Doesn't handle extensions.  Doesn't
11505         calculate `min_n', `max_degree'.
11506         (postcalc) Passes new arg to dump_statistics().
11507         (dump_full) Honor NOLABEL option.  Buggy?  Adds variable name
11508         title.
11509         (dump_condensed) Adds variable name title.
11510         (sum_freqs) Removed.
11511         (calc_stats) Updated calculation algorithm.
11512         (dump_statistics) Removed warning for too-few observations.
11513         Changed table formatting.  Adds variable name title if passed new
11514         arg is nonzero.
11515
11516         * output.h: Comment fix.
11517
11518         * recode.c, sample.c, sort.c: Disabled debug code.
11519
11520         * som-frnt.c: (som_set_value, som_set_float, som_set_text)
11521         Improved debug code.
11522
11523         * var.h: (enum series frq_*) Removed Fiasco extensions.
11524
11525 Sat Feb 15 21:26:53 1997  Ben Pfaff  <blp@gnu.org>
11526
11527         * command.c: Added PROCESS IF to command table.
11528
11529         * Lots & lots of places, removed checks for NULLs preceding calls
11530         to free_expression(), which itself checks.
11531
11532         * descript.q: Removed Fiasco extensions.  Removed optimizations
11533         for non-weighted active files.  Implemented some options.
11534         Finished polishing output format.  Comment fixes.  Merged
11535         `descript.g'.
11536         (static vars n_glob_miss_list, n_glob_valid, n_glob_missing,
11537         max_degree, min_n) Removed.
11538         (macro dsc_extensions) Removed.
11539         (struct dsc_info_struct) Removed `min_n' member, all references
11540         fixed.
11541         (internal_cmd_descriptives) Removed calculation of min_n,
11542         max_degree.  Only deals with one `calc' routine instead of two
11543         flavors.
11544         (precalc) Eliminated redundancy.  Updated for changes to
11545         descriptives_proc structure.
11546         (calc) Moved here from `descript.g'.  Rewritten to calculate
11547         statistics via `moments about the mean' rather than by summing,
11548         summing squares, summing cubes, and so on.
11549         (postcalc) Rewritten for new-style statistical calculation.
11550         (display) Removed support for displaying variables across rows.
11551         No longer crushes the descriptives table.  Removed ancient code.
11552         Added display of N, by variable and listwise.
11553
11554         * descript.g: Removed; merged into `descript.q'.
11555
11556         * expr-evl.c: (evaluate_expression) Now returns a double.  For
11557         numeric results, it returns the result as well as storing it in
11558         the passed `value' structure if non-NULL.  For string results it
11559         just returns 0.0 and it must be passed non-NULL.  Many references
11560         to this function were optimized by use of this change, especially
11561         but not exclusively in `compute.c'.
11562
11563         * frequencies.g: Comment fix.
11564
11565         * glob.c: (glob var process_if_expr) New global var.
11566
11567         * postscript.c: (static var option_tab[]) Corrected entry for
11568         `fixed_size'.
11569         (postopen) Sets x->size to x->prop_size.
11570         (ps_text_set_font_by_name) Sets font size as well as typeface for
11571         PROP and FIXED fonts.
11572         
11573         * sel-if.c: (cmd_process_if) New function.
11574
11575         * sfm-write.c: (struct sfm_fhuser_ext) New member `n_cases'.
11576         (sfm_write_dictionary) Sets `n_cases' to 0.
11577         (sfm_write_case) Increments `n_cases'.
11578         (sfm_close) Attempts to seek the system file back to the header
11579         and write the number of cases in its proper slot.
11580
11581         * som-frnt.c: (som_insert_table) Masks off expansion options since
11582         only SOPT_X_NORM seems to work sensibly.
11583
11584         * som-low.c: (get_cell_size) Fixed bug when a table cell was sized
11585         with a `fixed' value of 2.
11586
11587         * sort.c: (cmd_sort_cases) Cancels PROCESS IF.
11588
11589         * sysfile-info.c: (cmd_sysfile_info) Doesn't display more than 10
11590         value labels; uses SOPT_NONE instead of SOPT_X_BOTH.
11591
11592         * var.h: (enum series dsc_*) Removed Fiasco extensions.
11593         (struct descriptives_proc) Removed `miss_noweight'; new members
11594         `X_bar', `M2', `M3', `M4', `min', `max'.
11595
11596         * vars-atr.c: (discard_variables) Cancels PROCESS IF.
11597
11598         * vfm.c: (close_active_file) Cancels PROCESS IF.
11599         (write_case) Doesn't process cases unselected by PROCESS IF.
11600
11601 Fri Feb 14 23:32:58 1997  Ben Pfaff  <blp@gnu.org>
11602
11603         * glob.c: (glob var err) Removed.
11604
11605         * sysfile-info.c: (cmd_sysfile_info) When adjusting table size,
11606         doesn't have to take into account number of value labels since
11607         they're in a subtable anyway.  Also, doesn't display more than 10
11608         value labels since we can't yet break pages in subtables.
11609
11610 Tue Feb  4 15:15:50 1997  Ben Pfaff  <blp@gnu.org>
11611
11612         * som-frnt.c: (som_change_table_size) Simple change for elegance
11613         that shouldn't change behavior.
11614         (som_set_value) Comment fix.
11615
11616         * som-high.c: (som_submit_table) Message fix.
11617
11618 Wed Jan 22 21:54:00 1997  Ben Pfaff  <blp@gnu.org>
11619
11620         * command.c: Added SYSFILE INFO to command table.
11621
11622         * file-handle.q: (fh_handle_filename) New function.
11623
11624         * get.c: (save_trns_proc) Fixed a bug in padding of output data
11625         with spaces.
11626
11627         * main.c: (parse) New return value for command functions, -3.
11628
11629         * misc.h: Comment fix.
11630
11631         * output.h: Comment fixes.
11632         (macro COMPONENTS) Removed.
11633
11634         * postscript.c: (write_text) Modified literal_chars[] so that `('
11635         and ')' are not written to the output in strings as literals.
11636
11637         * sfm-read.c: (sfm_read_dictionary) New argument.
11638         (read_header) New argument.  Sets the information structure's
11639         values from the header information.  
11640         (read_variables) [__CHECKER__] Redefines isalnum()--some sort of
11641         bizarre Checker problem, I guess.
11642         (read_variables) Proper cleanup on lossage.
11643
11644         * sfm.h: (struct sfm_read_info) New struct for use by
11645         sfm_read_dictionary().
11646
11647         * som-frnt.c: (som_create_table) New argument CREATE_FLAGS,
11648         currently used just for tables that can be dynamically resized and
11649         thus have to be allocated with arena_malloc() instead of
11650         arena_alloc().  All references changed.
11651         (som_change_table_size) New function.
11652         (som_insert_table) Bugfix: now inserts `cell', not `c'!
11653
11654         * som-high.c: [GLOBAL_DEBUGGING] (check_table) Moved to som-low.c.
11655         (som_submit_table) [GLOBAL_DEBUGGING] Doesn't call check_table()
11656         any more.
11657
11658         * som-low.c: (draw_cell) Calls draw_table_cell() for SCON_TABLE
11659         cells.
11660         (draw_intersection) Now takes an argument specifying the table in
11661         question.  All references changed.
11662         (draw_table_cell) New function.
11663         (som_get_table_size) [GLOBAL_DEBUGGING] Calls check_table().
11664         (som_get_table_size) Many nice new explanatory comments.
11665         [GLOBAL_DEBUGGING] (check_table) Moved here from som-high.c.
11666
11667         * som.h: New enum series SOM_CREATE_* for use as create flags with
11668         som_create_table().
11669
11670         * str.h: Moved a comment here from TODO.
11671
11672         * sysfile-info.c: New file.  Reference implementation.
11673
11674 Sun Jan 19 14:22:11 1997  Ben Pfaff  <blp@gnu.org>
11675
11676         * command.c: Added RENAME VARIABLES to table of commands.
11677
11678         * data-in.c: (dls_error) Sets `cust_field'.
11679         (parse_N) Message fix.
11680         (parse_day_count) New function.
11681         (to_roman) Never outputs VX as a `short form' of V.
11682         (parse_month) Fixed parsing of Roman numerals.
11683         (parse_trailer) Message fix.
11684         (parse_DATE, parse_ADATE, parse_EDATE, parse_SDATE, parse_JDATE,
11685         parse_QYR, parse_MOYR, parse_WKYR, parse_DTIME) Issue a message if
11686         the date is invalid.
11687         (parse_SDATE) Fixed swapped day, year.
11688         (parse_JDATE) Fixed bug for dates in 1582.
11689         (parse_DTIME) Allows days not between 1 and 31.
11690         (parse_numeric) Makes local copy of f.type for easier usage.
11691         FMT_DOLLAR fixed.
11692
11693         * data-out.c: (convert_F) When outputting as scientific, properly
11694         sets f.type as fp->type.
11695         (insert_commas) Fixed operator precedence problem with setting of
11696         nitems.  Changed strcpy to memcpy (no null terminator). 
11697         (convert_date) Fixed FMT_JDATE: added 1900 to year.
11698         (convert_CCx) Essentially rewritten, but now it works.
11699
11700         * display.c: (cmd_display) Added DISPLAY FILE LABEL (undocumented
11701         feature of Fiasco).
11702         (display_documents) Implemented.
11703
11704         * error.c: (glob var cust_field) New var.
11705         (vmsg) Displays cust_field as part of message classes DE and DW.
11706
11707         * formats.c: (debug_print) Fixed to compile under updated
11708         dictionary format.
11709
11710         * get.c: (cmd_get, cmd_save_internal) Close file handle on
11711         failure.
11712
11713         * misc.c: (parse_format_specifier) Formatting fix.
11714
11715         * modify-vars.c: (struct var_modification) Renamed `n_reorder' as
11716         `n_rename' for clarity.
11717         (cmd_modify_vars) Initializes `forward' and `positional' at
11718         appropriate times.  Frees lists of vars to rename on failure.
11719         Comment fix.  Frees memory on success.  
11720         (rearrange_dict) Simplified `for' loop condition.
11721
11722         * rename-vars.c: New file (reference implementation).
11723         
11724         * set.q: (internal_cmd_set) Fixed `emu' test condition.
11725
11726         * sfm-read.c: (read_header) File label is created only if file
11727         label in file is not blank.
11728         (read_variables) Initializes `dict' local variable.
11729         (read_documents) Proper behavior on lossage.
11730
11731         * sfm-write.c: (write_header) Doesn't blank out the file label
11732         (why was this here to begin with?!)
11733
11734         * temporary.c: (save_dictionary) File label is copied only if
11735         non-NULL.  Doesn't try to xstrdup() dictionary documents.
11736         Adapted so as to not irritate Checker.
11737         (free_dictionary) Only destroys var_by_name if non-NULL.
11738
11739         * title.c: (cmd_file_label) Doesn't skip FILE, LABEL tokens.
11740         (cmd_document) Doesn't skip DOCUMENT token.  Adds some header
11741         lines to the document, indents the document.  Also, it works now.
11742         (add_document_line) New function.
11743
11744         * var.h: (struct dictionary) Reordering.
11745
11746         * vars-prs.c: (parse_variables) On lossage, only local_free()'s
11747         bits if it was allocated to begin with.
11748
11749 Thu Jan 16 13:08:57 1997  Ben Pfaff  <blp@gnu.org>
11750
11751         * command.c: Added MODIFY VARS to list of commands.
11752
11753         * configure.in: Updated custom macros for autoconf 2.12.  Removed
11754         mmap reference; fixed termcap library reference.
11755
11756         * display.c: (display_variables) Fixed a few bugs although it's
11757         still not well written.
11758
11759         * error.c: [!__CHECKER__] (chkr_disp_call_chain) New function.
11760         (induce_segfault) Calls chkr_disp_call_chain() instead of
11761         inducing an actual SIGSEGV.
11762
11763         * expr-opt.c: (evaluate_tree) Swapped order of arguments to
11764         str_search() and str_rsearch().  Fixed tests for matches on
11765         OP_INDEX and OP_RINDEX.
11766
11767         * filename.c: (good_getcwd) Removed as the new libc for Checker
11768         doesn't contain this bug, apparently.
11769
11770         * misc.c: (str_search, str_rsearch) Changed order of arguments for
11771         consistency with GNU memmem.
11772         (blp_getdelim) Changed `len' from `int' to `size_t'.
11773
11774         * modify-vars.c: Reference implementation.
11775
11776         * som-frnt.c: (zero_length) New global var.
11777         (som_create_table) Message fix.
11778
11779         * som.h: Added gcc attributions to som_set_text(),
11780         som_output_text() prototypes.  blank_line() refers to
11781         zero_length[] instead of a literal null string to suppress gcc
11782         warnings.
11783
11784         * sort.c: (do_external_sort) Fixed fencepost error on lossage.
11785         (allocate_cases) Decrements x_max so the last element of x[] can
11786         be used by the algorithm.
11787
11788         * var.h: Changed minor details of `variable' declaration.  
11789         (struct modify_vars_proc) New struct.
11790         (struct variable) Added field p.mfv.
11791
11792         * vars-atr.c: Comment fix.
11793
11794         * vars-prs.c: (fill_all_vars) More optimal implementation.
11795
11796         * vfm.c: (dump_splits) Sets the last byte of temp_buf to a null
11797         character, which it shouldn't have to do but printf() seems to
11798         read the null byte even though I supply a maximum length...
11799
11800 Fri Jan 10 20:22:08 1997  Ben Pfaff  <blp@gnu.org>
11801
11802         * command.c: Removed command alias X for QUIT.
11803         (parse_cmd) Fixed comment parsing.
11804
11805         * dfm.c: (struct dfm_fhuser_ext) Fields `len', `size' are now of
11806         type size_t.
11807         (read_record) Fixed references to len, size.
11808         (dfm_get_record) Restructured.
11809
11810         * file-handle.h: (struct file_handle) Field `lrecl' now of type
11811         size_t.
11812
11813         * file-handle.q: (internal_cmd_file_handle) Checks for nonpositive
11814         record length.
11815
11816         * modify-vars.c: New file.  Not complete.
11817         
11818         * set.q: (set_ccx) Fixed operator precedence problem regarding ^
11819         and ==.
11820
11821         * sfm-read.c: (bswap_flt64, read_header, write_variable) Fixed
11822         problems caused by int/size_t differences.
11823
11824         * sort.c: (output_record, merge_once) Cast `size_t's to `int's in
11825         appropriate spots.
11826
11827         * str.c: (strcasecmp) Fixed bug that cropped up when the strings
11828         being compared were of equal length.
11829
11830 Thu Jan  2 19:08:23 1997  Ben Pfaff  <blp@gnu.org>
11831
11832         * command.c: Added DOCUMENT, DROP DOCUMENTS, FILE LABEL.
11833
11834         * lexer.c: (get_dotted_rest_of_line) New function.
11835
11836         * sel-if.c: (cmd_filter) Cannot choose string or scratch variables
11837         as filters.
11838
11839         * sfm-read.c: (sfm_read_dictionary) Calls read_documents() to read
11840         type 6 records.  Frees the dictionary properly.
11841         (read_header) Initializes the dictionary instead of letting
11842         read_variables() do it.  Sets the dictionary file label from the
11843         system file.
11844         (read_documents) New function.
11845
11846         * sfm-write.c: (sfm_write_dictionary) Calls write_documents() to
11847         write type 6 record if appropriate.
11848         (write_header) Writes file label from dictionary.
11849         (write_documents) New function.
11850
11851         * temporary.c: (save_dictionary, restore_dictionary,
11852         free_dictionary) Properly handle new fields in dictionary struct.
11853
11854         * title.c: (get_title) Returns after failure().
11855         (cmd_file_label, cmd_document, cmd_drop_documents) New functions
11856         for new commands FILE LABEL, DOCUMENT, DROP DOCUMENTS.  Untested.
11857
11858         * var.h: (struct dictionary) New fields `label', `n_documents',
11859         `documents'.
11860
11861 Wed Jan  1 22:08:10 1997  Ben Pfaff  <blp@gnu.org>
11862
11863         * command.c: Added FILTER to list of commands.
11864
11865         * frequencies.g: [WEIGHTING] Removed test for weighting!=-1 since
11866         it's always true.
11867
11868         * get.c: (cmd_save_internal) Removed weighting code since it's now
11869         handled by sfm-write.c.  Properly commented out debug code.
11870
11871         * glob.c: (glob var weighting) Removed.
11872
11873         * sel-if.c: Comment fixes.
11874         (cmd_filter) New function.
11875
11876         * sfm-read.c: (struct sfm_fhuser_ext) New field `weight_index'.
11877         (sfm_read_dictionary) Sets weighting variable direct in the
11878         created dictionary now.  (Apparently we previously didn't support
11879         weighting on GET?)
11880         (read_header) Sets weight_index field in sfm_fhuser_ext from
11881         header read from disk.
11882
11883         * sfm-write.c: (sfm_write_dictionary) Comment fix.
11884         (write_header) Now sets the weighting in the header from the
11885         passed primary dictionary instead of from the sfm_write_info.
11886
11887         * sfm.h: (struct sfm_write_info) Removed field `weight'.
11888
11889         * som-high.c: (dump_crush_table) Fixed a couple of assertions that
11890         broke on boundary conditions.
11891
11892         * var.h: (struct dictionary) New fields `weight_var',
11893         `weight_index', and `filter_var'.
11894         (glob var weighting) Removed.  This is now part of struct
11895         dictionary.  All references changed; the less mechanical changes
11896         are described above.
11897
11898         * vars-atr.c: (find_dict_variable) New function.
11899
11900         * vfm.c: (static var filter_index) New variable.
11901         (open_active_file) Initializes filter_index from default_dict.
11902         (write_case) Calls proc_func() only if the filter variable is
11903         nonzero; this implements FILTER behavior.
11904
11905         * weight.c: (static var weight_varname) Removed.
11906         (cmd_weight) Modified default_dict instead of glob vars.
11907         (update_weighting) Changed the signature to modify a dictionary
11908         instead of glob vars.  Now returns the weighting variable.
11909         (get_weighting_variable) Removed; its function is absorbed by
11910         update_weighting().
11911         (stop_weighting) Operates on a dictionary now.
11912
11913 Wed Jan  1 17:00:59 1997  Ben Pfaff  <blp@gnu.org>
11914
11915         * sort.c: Removed debugging info from messages.
11916         (do_external_sort) Cleans up after itself by deleting the
11917         temporary directory on failure.  (On success it is deleted by the
11918         input program.)
11919         (allocate_cases) Removed debug code.  Added clean up code.
11920         (output_record) Removed debug code.
11921         (merge) Added code to close all the input files that are currently
11922         open.  This is a likely location for bugs, because I'm not sure
11923         about boundary conditions.  Removed an unnecesary heap_delete().
11924         (merge_once) Removed input file "optimization" that in fact
11925         screwed up the rest of the code.  Message and comment fixes.
11926
11927 Sun Dec 29 21:36:48 1996  Ben Pfaff  <blp@gnu.org>
11928
11929         * error.c: [__CHECKER__] (induce_segfault) Flushes output streams.
11930
11931         * heap.c: (heap_delete) New argument.
11932
11933         * sort.c: Finished implementation of external sort.
11934
11935         * vfm.c: (read_from_disk) Returns after a disk error.
11936
11937 Sun Dec 22 23:10:39 1996  Ben Pfaff  <blp@gnu.org>
11938
11939         * sort.c: (static var state) Removed.
11940         (static vars max_handles, tmp_basename, tmp_extname,
11941         huffman_queue) New variables.
11942         (do_external_sort) Moved most code to new functions.
11943         Creates huffman_queue.
11944         (allocate_file_handles, allocate_cases) New functions.
11945         (static vars run_no, run_length, file_index, case_count) New
11946         variables. 
11947         (output_record) Returns success.  Now really writes to the output
11948         file.
11949         (begin_run, end_run) New functions.
11950         (write_initial_runs) Returns success.  Initializes run_no to -1.
11951         Calls begin_run(), end_run() at appropriate times.  Outputs debug
11952         messages.
11953         (write_to_sort_cases) Calls begin_run(), end_run() at appropriate
11954         times.
11955         (merge) New function.
11956
11957         * heap.c, heap.h: New files.  Hopefully in near-final form.
11958
11959 Sat Dec 21 21:51:04 1996  Ben Pfaff  <blp@gnu.org>
11960
11961         * glob.c: Added write_active_file to global vars.
11962
11963         * sort.c: Several new miscellaneous static variables.
11964         (cmd_sort_cases) Big comment fix.
11965         (perform_case_2) Renamed `do_external_sort' and completely
11966         rewritten.
11967         (case_2_proc_func) Removed.
11968         (output_record, write_initial_runs, write_to_sort_cases,
11969         compare_record) New functions.
11970
11971         * vfm.c: [DEBUGGING] (index_to_varname) Excised bit rot.
11972
11973 Tue Dec 17 18:57:59 1996  Ben Pfaff  <blp@gnu.org>
11974
11975         * sort.c: (perform_case_2) Changed the method for allocation of
11976         lots of memory--now allocates one case at a time in hopes that
11977         more cases can be allocated with heavily fragmented memory.
11978
11979         * var.h: (write_active_file) New global var.
11980
11981         * vfm.c: (procedure, close_active_file, write_case,
11982         SPLIT_FILE_procfunc) Now allow beginfunc, procfunc, and endfunc
11983         arguments to procedure() to be NULL.  All references to
11984         procedure() that made use of dummy functions were changed to NULL
11985         functions.
11986         (open_active_file) If write_active_file is non-NULL, the output
11987         device becomes DEV_PGM (a new enum).
11988         (close_active_file) Sets write_active_file to NULL.
11989         (read_from_memory) Comment fix.
11990         (record_case) Calls write_active_file() when the output device is
11991         DEV_PGM.
11992
11993 Sun Dec 15 15:32:16 1996  Ben Pfaff  <blp@gnu.org>
11994
11995         * sort.c: New file.
11996
11997         * autorecode.c: (cmd_autorecode) Fixed parsing of options.
11998         Fixed checking for duplicate varnames.
11999         (recode) xmalloc()'s the transformation instead of arena_alloc()'ing
12000         it.
12001         (autorecode_trns_free) Destroys hash tables for each recoding
12002         specification.
12003         (autorecode_proc_func) Compares NULL to *vpp instead of vpp.
12004
12005         * command.c: Added SORT CASES to cmd_table.
12006         (null_func, null_int_func) Prototyped.
12007
12008         * descript.g: (calc_weight, calc_noweight) Computes own case
12009         number now.
12010         
12011         * frequencies.q: (dump_statistics) Fixed problem with
12012         too-few-cases warning message.
12013
12014         * get.c: (cmd_save_internal) Handles weighting properly.
12015
12016         * hash.c: (hsh_dump) Output format changed.
12017         (force_hsh_insert) Actually works now, prototype changed.
12018
12019         * list.q: (static var case_num) New variable.
12020         (cmd_list) Initializes case_num.
12021         (list_cases) Increments case_num.
12022
12023         * var.h: Added definitions for SORT CASES.  Comment fixes.
12024
12025         * vfm.c: Some definitions moved to new file vfmP.h.  Comment
12026         fixes.  `active' renamed vfm_active, `rep' renamed
12027         vfm_replacement, all references changed.
12028         (procedure) The procfunc no longer receives a case number.  All
12029         references changed.
12030         (write_case) Subtle reordering.
12031         (SPLIT_FILE_procfunc) Counts cases differently.  Slightly less
12032         redundant.
12033
12034         * weight.c: (get_weighting_variable) New function.
12035
12036         * vfmP.h: New file with definitions from vfm.c.
12037
12038 Sat Dec 14 10:35:30 1996  Ben Pfaff  <blp@gnu.org>
12039
12040         * command.c: (FILE_TYPE_okay) Commented out some tests because
12041         they're clumsy and not yet needed.
12042
12043         * var.h: Most *_trns structures moved to their respective source
12044         files.  Some were moved into a new file, do-ifP.h.  Comment fixes.
12045         (union any_trns) Changed to a typedef for trns_header.
12046         (struct input_program_pgm) Removed.
12047
12048         * vars-prs.c: (parse_variables) Only local_free()'s bits if it
12049         was allocated in the first place.
12050
12051 Fri Dec 13 21:30:53 1996  Ben Pfaff  <blp@gnu.org>
12052
12053         * autorecode.c: New file.
12054         
12055         * command.c: Added AUTORECODE to command table; re-enabled SET.
12056
12057         * data-out.c: (convert_F) Handles infinities and NaNs properly.
12058
12059         * error.c: (vmsg) Comment fixes.
12060
12061         * hash.c: Comment fix.
12062         (hashpjw_d) New function.
12063         (hashpjw) Reimplemented as call to more general function
12064         hashpjw_d().
12065         (internal_comparison_fn) Initializes pointers properly.
12066         (hsh_sort) [GLOBAL_DEBUGGING] New debugging code.
12067         (force_hsh_insert, force_hsh_find) New debugging wrapper
12068         functions.
12069
12070         * main.c: (main) Message fix.
12071
12072         * output.c: (outp_read_devices) Message fix.
12073
12074         * set.q: Comment fixes.
12075         (custom_results) Implemented Wnd/X form of subcommand.
12076         (set_routing) New function.
12077         (internal_cmd_set) Implemented ERRORS, MESSAGES.
12078
12079         * settings.h: (SET_ROUTE_*) New enum series.
12080         (set_results) Renamed set_results_file, all references changed.
12081         (set_messages) Removed.
12082         (glob vars set_errors, set_messages, set_results) New vars.
12083
12084         * title.c: (get_title) Remembers to xstrdup() the result of
12085         get_rest_of_line().
12086
12087         * var.h: (arc_item, arc_spec, autorecode_trns) New structures for
12088         use by AUTORECODE.
12089         (union any_trns) New element `arc'.
12090
12091 Fri Dec  6 23:53:47 1996  Ben Pfaff  <blp@gnu.org>
12092
12093         * command.c: (output_line) Removed references to set_screen.
12094
12095         * error.c: (static var terminating) New var.
12096         (hcf) Sets terminating to 1.
12097         (vmsg) If terminating is nonzero, does not attempt to call hcf().
12098         This prevents an infinite loop if an error occurs within hcf().
12099
12100         * expr-evl.c: (evaluate_expression) [__CHECKER__] Replaced case
12101         statement circumlocution with `case 42000' trick.
12102         (evaluate_expression) New support for OP_STR_MIS.
12103
12104         * expr-opt.c: (evaluate_expression) [__CHECKER__] Replaced case
12105         statement circumlocution with `case 42000' trick.
12106         (dump_node) Handles OP_STR_MIS.
12107
12108         * expr-prs.c: (MISSING_func, SYSMIS_func) Rewrote to handle string
12109         variables exceptions.
12110         (parse_function) Message fix.
12111         (ops[]) Added OP_STR_MIS.
12112
12113         * expr.h: Added OP_STR_MIS to OP_* enum.  Comment fixes.
12114
12115         * exprP.h: [__CHECKER__] Removed case statement circumlocution.
12116
12117         * glob.c: Removed set_scrnfile glob var.
12118         (init_glob) set_errorbreak set to 0 by default.
12119
12120         * groff-font.c: Changed included files.
12121         (groff_read_font) Initializes font_arena local var correctly.
12122         (default_font) New function.
12123
12124         * output.c: Comment fixes.
12125         (glob var disabled_devices) New variable.
12126         [GLOBAL_DEBUGGING] (static var iterating_driver_list) New
12127         variable.
12128         [GLOBAL_DEBUGGING] (reentrancy) New function.
12129         [GLOBAL_DEBUGGING] (outp_read_devices, outp_done, find_driver,
12130         outp_iterate_enabled_drivers) Calls to reentrancy().
12131         (destroy_list) New function.
12132         (outp_done) Moved code to destroy_list().
12133         (parse_options) Parses `listing', `screen', `printer' options
12134         internally.
12135         (configure_driver) Sets new `device' member of driver.
12136         (outp_iterate_enabled_drivers, outp_enable_device) New functions.
12137
12138         * output.h: Comment fixes.  New enum series OUTP_DEV_*.
12139         (struct outp_driver_struct) New member `device'.
12140
12141         * postscript.c: (find_encoding_file) Doesn't display its own error
12142         messages.
12143         (default_encoding) New function.
12144         (switch_font) Calls default_encoding() if no encoding can be
12145         found.
12146         (text) Makes up a character metric if none exists for the desired
12147         character.
12148         (load_font) Properly copies a fallback filename.  Calls
12149         default_font() for a font if none at all are known.
12150
12151         * set.q: Comment fixes.  Removed OUTPUT subcommand.
12152         (custom_listing) Calls outp_enable_device() to enable/disable
12153         listing device.
12154         (turn_screen_on) Removed.
12155         (internal_cmd_set) Calls outp_enable_device() to enable/disable
12156         screen, printer devices.
12157
12158         * settings.h: Comment fixes.
12159         (glob vars set_output, set_printer, set_screen, set_scrnfile)
12160         Removed.
12161
12162         * som-high.c: (som_submit_table, som_eject_page) Use
12163         outp_iterate_enabled_drivers() instead of iterating
12164         outp_driver_list directly.
12165
12166 Wed Dec  4 21:34:17 1996  Ben Pfaff  <blp@gnu.org>
12167
12168         * data-in.c: (parse_EDATE, parse_SDATE) New functions.
12169         (parse_string_as_format) Handles new formats.
12170         (parse_numeric) Now handles DOT and PCT formats.
12171
12172         * data-out.c: (convert_E, convert_F, insert_commas) Handle DOT
12173         format now.
12174         (convert_date) Handle EDATE and SDATE formats.
12175         (convert_CCx) Now if there's not room for the currency characters,
12176         converts it as F format if it's positive instead of giving up
12177         quickly.  Also fixed save-and-restore bug with decimal point
12178         characters.  
12179         (convert_format_to_string) Handles new formats.
12180
12181         * misc.c: (formats[]) Added new formats.
12182         (convert_fmt_ItoO) Supports new formats.
12183
12184         * sfm-read.c: (parse_format_spec) Supports new formats.  Better
12185         data checking.  New argument, all references changed.
12186
12187         * sfm-write.c: (write_format_spec) Supports new formats.
12188
12189         * var.h: New formats FMT_DOT, FMT_PCT, FMT_EDATE, FMT_SDATE.
12190         Comment fixes.
12191
12192 Sun Dec  1 17:19:00 1996  Ben Pfaff  <blp@gnu.org>
12193
12194         * cmdline.c: Comment fixes.
12195         (parse_command_line) Changed return type to void.
12196
12197         * data-in.c: (parse_string_as_format) Added FMT_CCA...FMT_CCE to
12198         switch.
12199         (parse_numeric) Handles international numbers (comma as decimal
12200         point).  Some reformatting.
12201
12202         * data-list.c: (parse_free) Default output format is now
12203         set_format instead of hard-coded F8.2.
12204         (read_from_data_list_list) Emits error message on undefined data
12205         only if set_undefined is nonzero.
12206
12207         * data-out.c: (convert_E) Changes decimal point from period to
12208         comma if appropriate.  Restructured.  Better comments.
12209         (convert_F) Changes decimal point from period to comma if
12210         appropriate.
12211         (insert_commas) Major bug with handling of negative values fixed.
12212         Also, inserts periods instead of commas if appropriate.
12213         (convert_CCx) New function.
12214         (convert_format_to_string) Added FMT_CCA...FMT_CCE to switch.
12215         (num_to_string) Changed `.' to set_decimal.
12216
12217         * dfm.c: Comment fixes.
12218         (dfm_close) Frees ext->line even in inline_file.
12219         (open_inline_file) New function.
12220         (open_file_r) When opening the inline file: now properly
12221         recognizes `BEGIN DATA.' line, and calls open_inline_file() to
12222         finish up.
12223         (read_record) Calls fh_close_handle() instead of dfm_close() to
12224         close the inline file.  Makes a copy of the line getl_buf to avoid
12225         interlock problems.
12226         (dfm_get_record) Restructured.  Now checks the return value of
12227         open_file_r().
12228         (cmd_begin_data) Moved open code into open_inline_file().  Relaxed
12229         checking for use of inline file.  No longer tries to close inline
12230         file.
12231
12232         * error.c: (glob var error_already_flagged) New var.
12233         (vmsg) Message change.  Now checks max number of errors/warnings,
12234         acts on it.
12235
12236         * file-handle.q: (fh_handle_name) Now allows closing of
12237         inline_file.
12238         (fh_init_files) Reformatted.
12239
12240         * get.c: (trim_dictionary) Checks SCOMP option instead of COMP.
12241
12242         * getline.c: (getl_include) Fixed bug that popped up when called
12243         when file queue was empty.
12244         (read_console) Resets error_count, warning_count,
12245         error_already_flagged to zero.
12246
12247         * glob.c: Many changes to update list of variables.
12248         (init_compat_dependent) Now this function is called whenever
12249         `compat' changes.  It now sets set_seed only if it hasn't
12250         previously been referenced.  It now calls
12251         lex_init_compat_dependent().
12252
12253         * include.c: (cmd_include_at) Frees temporary buffer instead of
12254         line buffer.  
12255         (cmd_include) Doesn't make copy of include file name.
12256
12257         * lexer.c: Comment fixes.
12258         (init_lex) Moved some code into new function
12259         lex_init_compat_dependent().
12260         (lex_init_compat_dependent) New function.
12261         (hex_val) Simplified.
12262         (preprocess_line) Uses set_endcmd instead of hardcoding `.'.
12263
12264         * main.c: Comment fixes.
12265         (main) Reformatted.
12266
12267         * misc.c: (formats[]) Added FMT_CCA...FMT_CCE.
12268         (check_input_specifier) Disallows FMT_CCA...FMT_CCE.
12269         (convert_fmt_ItoO) Detects FMT_CCA...FMT_CCE.
12270         (setup_randomize) Sets set_seed_used.
12271
12272         * set.q: Comment fixes.
12273         (custom_results) Conditionalizes on `compat'.
12274         (custom_log) Calls custom_journal().
12275         (set_ccx) New function.
12276         (cmd_set) Calls init_compat_dependent() when `compat' changes.
12277         Calls set_ccx() to handle CCA...CCE.  Sets set_grouping
12278         when set_decimal changes.  Range-checks values for MITERATE,
12279         MNEST.  Message fixes.
12280
12281         * settings.h: Comment fixes.
12282         (struct set_cust_currency) New struct.
12283         (set_cc[], set_grouping, set_seed_used) New global vars.
12284
12285         * var.h: (FMT_CCA...FMT_CCE) New output formats.
12286         (FCAT_OUTPUT_ONLY) New FCAT_* constant.
12287
12288 Thu Nov 28 23:14:07 1996  Ben Pfaff  <blp@gnu.org>
12289
12290         * glob.c: Revised variables to correspond to settings.h.
12291         (init_glob) Initializes variables from settings.h properly.
12292
12293         * set.q: Began long-overdue major revision to correspond to new
12294         philosophy.  Most code changed. 
12295
12296         * settings.h: Mostly changed; reorganized, reordered, large new
12297         comment.
12298
12299 Thu Nov 28 19:46:10 1996  Ben Pfaff  <blp@gnu.org>
12300
12301         * get.c: (cmd_save_internal) No longer forces compression off.
12302
12303         * sfm-read.c: (read_compressed_data) If eof is reached when
12304         reading a new instruction octet, only signal error if we're in the
12305         middle of a case.
12306
12307         * sfm-write.c: (COMPRESSION_BIAS) New #define.
12308         (struct sfm_fhuser_ext) New member `end'.
12309         (write_header) Refers to COMPRESSION_BIAS instead of magic 100.0.
12310         (ensure_buf_space) New function.
12311         (sfm_write_case) Reimplemented in order to support compression.
12312         (sfm_close) Writes out the remaining contents of the compression
12313         buffer if any.
12314
12315 Wed Nov 27 23:18:35 1996  Ben Pfaff  <blp@gnu.org>
12316
12317         * command.c: Defined SAVE and XSAVE commands in command table.
12318
12319         * common.h: second_lowest_value is of type flt64, not double.
12320
12321         * file-handle.h: Comment fix.
12322
12323         * get.c: Comment fixes.
12324         (static var `trns') New.
12325         (save_write_case_func, save_trns_proc, save_trns_free, null_func,
12326         cmd_save_internal, cmd_save, cmd_xsave) New functions.
12327         (dict_delete_run) Clears the variables and frees them now.
12328         (trim_dictionary) Sets default for compression.
12329         On KEEP subcommand, frees deleted variables as well as clearing
12330         them.  Finally got the sense of the test for deleting all
12331         variables correct.
12332         [DEBUGGING] (dump_dict_variables) Message fix.
12333
12334         * glob.c: (init_glob) set_compression set to 1 by default.
12335
12336         * list.q: Properly #includes config.h.
12337
12338         * misc.h: New macro REM_RND_UP.
12339
12340         * settings.h: Comment fix.
12341
12342         * sfm-read.c: (structs sysfile_header, sysfile_format,
12343         sysfile_variable; inline function bswap_int32) Moved to new file
12344         sfmP.h.
12345         (corrupt_msg) [__CHECKER__] No longer induces segfault.
12346         (sfm_read_dictionary) Fixed bug caused by failing to initialize
12347         var_by_index.
12348         (read_machine_flt64_info) Fixed some problems caused by confusion
12349         between flt64 and double types.
12350         (read_header) Message fix.
12351         (read_variables) Fixed set of cases in which we byte-swap sv.print
12352         and sv.write.  Fixed confusion of flt64 and double.
12353
12354         * sfm.h: (struct sfm_write_info) New.
12355
12356         * som-high.c: (som_draw_title) Properly frees `s'.
12357
12358         * temporary.c: (save_dictionary) Comment fix.
12359
12360         * var.h: Comment fixes.  New FMT_* enum, FMT_NUMBER_OF_FORMATS.
12361         (struct trns_header) Formatting fix.
12362         (struct save_trns) New.
12363
12364         * vars-atr.c: (discard_variables) Comment fix.
12365
12366         * sfm-write.c: New file, baseline release.
12367
12368         * sfmP.h: New file, baseline release.
12369
12370 Sun Nov 24 14:53:53 1996  Ben Pfaff  <blp@gnu.org>
12371
12372         * cmdline.c: (parse_command_line) `--version' output updated.
12373         (glob var syntax_message[]) Added my e-mail address.
12374
12375         * file-handle.q, lexer.c, vfm.c: Changed many instances of
12376         `illegal' to `invalid'.
12377
12378         * sfm-read.c: (struct sfm_fhuser_ext) New fields used as
12379         uncompression buffer.
12380         (sfm_close) Frees decompression buffer.
12381         (sfm_read_dictionary) Initializes decompression buffer.
12382         (buffer_input, read_compressed_data) New functions.
12383         (sfm_read_case) Restructured; now calls read_compressed_data() to
12384         handle compressed system file data.
12385
12386         * var.h: Comment fix.
12387
12388 Mon Nov 11 15:34:09 1996  Ben Pfaff  <blp@gnu.org>
12389
12390         * dfm.c: (dfm_close) Does not set h->{ext,class} because the
12391         caller handles it.
12392          
12393         * get.c: New comments.  New static var `get_file'.
12394         (cmd_get) Now fully implemented.  Calls discard_variables();
12395         initializes fv and lv for all variables; new debug code; sets
12396         up the dictionary; sets up the input program.
12397         (read_from_get, cancel_get) New functions.
12398
12399         * sfm-read.c: Comment fixes.
12400         (sfm_close) New static function.
12401         (sfm_read_dictionary) Properly sets up the class of the
12402         file_handle.  No longer cares what size the data is in records of
12403         type 7.  Also, on failure, properly cleans up the file_handle and
12404         free()s some stuff.
12405         (read_variables) No longer thinks it knows `nval' of the
12406         dictionary.  Now sets p.get.fv, etc., instead of speculatively
12407         setting fv itself.
12408         (read_value_labels) Fixed off-by-one error in indexing of
12409         var_by_index[].
12410         (sfm_read_case) New function.
12411         (sfm_r_class) New static var.
12412
12413         * var.h: (get_proc) New struct.
12414         (struct variable) New member p.get.
12415
12416 Thu Nov  7 20:52:28 1996  Ben Pfaff  <blp@gnu.org>
12417
12418         * get.c: Removed GTSV_OPT_MAP because of a misinterpretation of
12419         the manual's meaning.
12420         (rename_variables) New function.
12421         (trim_variables) Doesn't try to parse MAP any more.  Removed debug
12422         code.  Now properly reorders the dictionary on the KEEP keyword.
12423
12424         * sfm-read.c: (read_value_labels) Fixed some bugs regarding
12425         garbage collection.
12426
12427         * vars-atr.c: (clear_variable) New argument `dictionary *'.
12428         (rename_variable) New function.
12429         (free_val_lab) Reformatted.
12430
12431 Thu Nov  7 17:29:16 1996  Ben Pfaff  <blp@gnu.org>
12432
12433         * var.h: Reindented entire file.  Comment fixes.
12434         (glob vars var, var_by_name, nvar, N, nval, n_splits, splits)
12435         Removed.
12436         (glob var default_dict) New.
12437         (struct indirect_dictionary) Removed.
12438
12439         * Many other source files were changed to add `default_dict.'
12440         before all references to the dictionary of the active file.
12441         
12442         * vars-atr.c: (make_indirect_dictionary) Removed.
12443
12444         * glob.c: Reindented all variable declarations.  Updated for
12445         changed var.h.  Comment fixes.
12446
12447         * temporary.c: (restore_dictionary, save_dictionary) Simplified
12448         because now we can mainly copy dictionary structs.
12449
12450         * vars-prs.c: (is_dict_varname, parse_dict_variable,
12451         parse_variables) Takes dictionary instead of indirect_dictionary
12452         first argument.
12453         (parse_variables) Instead of calling make_indirect_dictionary,
12454         just sets DICT to &default_dict if DICT is NULL.  Of course, lots
12455         of `*dict.' references had to be changed to `dict->'.  Removed
12456         debug code.
12457
12458 Thu Nov  7 15:48:52 1996  Ben Pfaff  <blp@gnu.org>
12459
12460         * get.c: Added GTSV_OPT_* series of enums.
12461         (trim_dictionary, dict_delete_run) New functions.
12462         [DEBUGGING] (dump_dict_variables) New function.
12463         (cmd_get) Calls trim_dictionary() to get dictionary fully set-up.
12464         [DEBUGGING] Calls dump_dict_variables() to display results.
12465
12466         * glob.c: (cmp_variable) Now a public function declared in var.h.
12467
12468         * sfm-read.c: Turned off debug code.  Comment fixes.
12469         (read_machine_int32_info, read_machine_flt64_info) New functions
12470         to parse type 7 records.
12471         (sfm_read_dictionary) Properly byteswaps several fields now.
12472         Calls read_machine_*_info() to parse type 7 subtypes 3 and 4
12473         records.  [DEBUGGING] Dumps dictionary.
12474         (read_variables) Sets `index' field of variables created properly.
12475         Constructs avl tree of variables in dictionary.  [DEBUGGING] No
12476         longer dumps dictionary.
12477         (read_value_labels) Properly byteswaps fields.  [DEBUGGING] New
12478         debug code.
12479         [DEBUGGING] (dump_dictionary) No longer stubbed out.
12480
12481         * temporary.c: (restore_dictionary) Destroys `var_by_name' glob
12482         var before destroying any variables just to save a little time.
12483
12484         * var.h: (struct variable) Reordered in order to make name[] the
12485         first member; this makes pointers to `variable' pointers to the
12486         variable name, simplifying avl trees, etc.
12487         (struct indirect_dictionary) New struct.
12488
12489         * vars-atr.c: (find_variable) Rewritten for efficiency.
12490         (make_indirect_dictionary, is_dict_varname, parse_dict_variable)
12491         New functions.
12492         (is_varname) Rewritten for efficiency.
12493         (parse_variables) New argument, which is a `dictionary *'.  All
12494         references changed.  This function now reads variable names from
12495         the dictionary passed, or from the default dictionary if NULL.
12496
12497 Tue Nov  5 18:34:59 1996  Ben Pfaff  <blp@gnu.org>
12498
12499         * misc.h: Added new macro DIV_RND_UP to perform integer division,
12500         rounding up.  Changed many references to ROUND_UP to use this
12501         instead.
12502
12503         * sfm-read.c: Includes avl.h.
12504         (corrupt_msg) Induces a segfault under Checker.
12505         (macro assertive_bufread) New.  Many references to bufread() now
12506         use this instead.
12507         (sfm_read_dictionary) Split up into several functions.  Added code
12508         to read dictionary records following the the type 2 records.  Not
12509         quite complete.  New variable `var_by_index'.
12510         (read_header, read_variables) New functions extracted from
12511         sfm_read_dictionary().
12512         (read_value_labels) New function.
12513         (bufread) Checks ferror() if fread() doesn't return the expected
12514         value; if ferror() is zero it's just EOF.
12515         (dump_dictionary) Stubbed out.
12516
12517         * BTW: The source code now exceeds 50000 lines!
12518         
12519 Mon Nov  4 22:03:28 1996  Ben Pfaff  <blp@gnu.org>
12520
12521         * command.c: Added GET to cmd_table[].
12522
12523         * list.q: Removed reference to alloca headers.
12524         (cmd_list) Gave prototype.
12525
12526         * sfm-read.c: Added DEBUGGING comments.
12527         (sfm_read_dictionary) Checks bias correctly.  Sets
12528         dict->var_by_name to NULL.  Calculates long_string_count
12529         correctly.  realloc's dict->var[] array to minimum size.
12530         [DEBUGGING] Calls dump_dictionary.
12531         [DEBUGGING] (dump_dictionary) New function.
12532
12533         * temporary.c: (save_dictionary) Sets var_by_name to NULL.
12534         (restore_dictionary) If the dictionary contains a non-NULL
12535         var_by_name, uses that instead of generating one.
12536         (free_dictionary) Destroys var_by_name.
12537
12538         * var.h: (struct dictionary) Added field `var_by_name'.
12539
12540         * get.c: New file, not complete.
12541
12542 Sun Nov  3 12:24:36 1996  Ben Pfaff  <blp@gnu.org>
12543
12544         * mis-val.c: New enums MV_NOR_*.  New struct num_or_range.
12545         (parse_num_or_range) New function.
12546         (parse_numeric) Reimplemented in order to support LOW THRU <n> and
12547         <n> THRU HIGH missing values.
12548
12549         * output.h: [__GNUC__>1 && __OPTIMIZE__] (width, height) Made
12550         __attribute__((const)).
12551
12552         * q2c.c: (get_token) Merged isdigit || isalpha into isalnum.
12553
12554         * sfm-read.c: Finished reference implementation.
12555
12556         * sfm.h: Includes var.h.
12557
12558         * var.h: Comment fixes.
12559         (struct `variable') Reordered some fields.
12560
12561         * vars-atr.c: (is_num_user_missing) Added support for MISSING_*
12562         constants added previously.
12563
12564 Wed Oct 30 17:13:08 1996  Ben Pfaff  <blp@gnu.org>
12565
12566         * common.h: Comment fixes.  Added declaration of
12567         `second_lowest_value' as variable or macro.  Made `compat_type',
12568         `pgm_state_type' into anonymous enums.
12569
12570         * display.c: Comment fix.
12571
12572         * glob.c: [ENDIAN==UNKNOWN] Added definition for `endian' global
12573         var.
12574         [!defined SECOND_LOWEST_VALUE] Added definition for
12575         `second_lowest_value' global var.
12576         (compat, pgm_state global vars) Changed types to `int'.
12577         (init_glob) Initializes `second_lowest_value'.
12578
12579         * sfm-read.c: Continued work, not complete.
12580
12581         * var.h: Added new MISSING_* constants to handle LOWEST and
12582         HIGHEST.
12583
12584 Sat Oct 26 23:06:06 1996  Ben Pfaff  <blp@gnu.org>
12585
12586         * sfm-read.c: New file, not complete.
12587
12588         * cases.c: (vec_insert) Changed vector expansion algorithm.
12589         (vec_delete) Fixed bug that screwed up deletion sometimes, it was
12590         mucking up the RECODE transformation in particular.
12591         (envector) Harmless change in notation.
12592
12593         dfm is now fairly well tested again.  
12594         * dfm.c: (dfm_get_record) Only returns ext->ptr if ext is
12595         non-NULL--duh.
12596         (cmd_begin_data) if(ext->line) replaced by if(ext && ext->line).
12597
12598         * recode.c: Comment fix.
12599
12600         * sfm.h: Interface should be fairly final now, or at least for a
12601         day or so...
12602
12603         * vfm.c: [DEBUGGING] (index_to_varname) New function.
12604         (open_active_file) [DEBUGGING] Translates ccase indices into
12605         variable names now to make it easier to understand what's really
12606         going on.
12607
12608 Sat Oct 26 20:46:31 1996  Ben Pfaff  <blp@gnu.org>
12609
12610         * data-in.c: Comment fix.
12611
12612         * data-list.c: Includes dfm.h.
12613         (do_reading) Uses new function dfm_push_cust().
12614
12615         * data-out.c: (convert_time, convert_WKDAY, convert_MONTH) Added
12616         `return 1;' at end.
12617
12618         * file-handle.h: Completely changed.  Some parts split off into
12619         new file dfm.h.  Implemented in file-handle.q.
12620         (enum FH_*) Removed.
12621         (struct fh_ext_class) New struct.
12622         (struct file_handle) Retained only these fields: name, norm_fn,
12623         fn, recform, lrecl, mode.  New fields class, ext.
12624         (get_handle_by_name, get_handle_by_filename, parse_file_handle,
12625         close_handle, handle_name) Added `fh_' prefix to name, all
12626         references changed.
12627
12628         * dfm.h: New file, implemented in dfm.c.
12629         (get_record, put_record, fwd_record, bkwd_record, set_record,
12630         get_cur_col) Functions moved from file-handle.h, now prefixed with
12631         `dfm_'.
12632         (dfm_push_cust) New function.
12633
12634         * sfm.h: New file.  Incomplete.
12635
12636         * dfm.c: All functions adjusted/rewritten for new dfm/fhp
12637         interface.  Functions reordered, comments changed.  Not well
12638         tested, probably full of bugs.
12639         (struct dfm_fhuser_ext) New struct.
12640         (dfm_close) New function.
12641         (open_file_r) Pickier about finding `BEGIN DATA.' line.
12642         (open_file_w) User messages changed.
12643         (get_record) Comment fixed.
12644         (read_record) Increments ext->ln even for inline_file.  Calls
12645         dfm_close() for inline_file when `END DATA.' encountered.
12646         (dfm_get_record) Experimental restructuring.
12647         (dfm_push_cust) New function.
12648         (cmd_begin_data) Detects whether the inline file was fully read by
12649         checking whether it is still open; detects whether it was read at
12650         all by checking whether the line number is greater than zero.
12651
12652         * file-handle.q: All functions adjust/rewritten for new dfm/fhp
12653         interface.  Functions reordered, comments changed.  Not well
12654         tested, probably full of bugs.
12655         (init_file_handle) Removed initializers for obsolete fields, added
12656         new fields.
12657         (fh_close_handle) Much simpler, now mainly calls the class
12658         function.
12659         (fh_init_files) Renamed inline file internal filename.
12660
12661         * file-type.c: Includes dfm.h.
12662         (read_from_file_type) Doesn't use dfm internal state anymore.
12663
12664         * inpt-pgm.c, print.c: Include dfm.h.
12665
12666         * recode.c: (internal_cmd_recode) Casts strlen() return value to
12667         int in comparison with other int.
12668
12669         * som-high.c: (build_target) Fixed operator precedence problem in
12670         if statement (& versus ==).
12671
12672 Sat Oct 26 10:39:25 1996  Ben Pfaff  <blp@gnu.org>
12673
12674         * dfm.c: (read_record) Can now read fixed-length records; not
12675         tested.
12676         (put_record) Can now write fixed-length records; not tested.
12677
12678         * file-handle.h: FH_* defines changed to enums.  New enum series
12679         FH_RF_*, FH_MD_*.
12680         (struct file_handle) New members recform, lrecl, mode.
12681
12682         * file-handle.q: Parser changed.
12683         (internal_cmd_file_handle) Added support for new /RECFORM, /MODE,
12684         /LRECL subcommands.  These are compatible with Windows.
12685         (init_file_handle) Initializes recform, mode fields.
12686
12687         * q2c.c: (get_line) When outputting `!' comment lines, now
12688         increments the output file line number so that `#line' directives
12689         are correct.
12690         (make_identifier) New function that converts an arbitrary string
12691         into a valid C identifier.
12692         (dump_vars) Calls make_identifier() in two places in order to
12693         suppress some errors for bad identifiers.
12694         (make_match) Allows TRUE as synonym for YES and FALSE as synonym
12695         for NO.  Allows numbers to be prefixed by underscores to make them
12696         acceptable C identifiers but still to be parsed as numbers by the
12697         Fiasco lexer.
12698
12699 Thu Oct 24 20:13:42 1996  Ben Pfaff  <blp@gnu.org>
12700
12701         * command.c: Re-enabled RECODE, SAMPLE, SELECT IF.
12702         
12703         * dfm.c: Comment fixes. (get_record) Gives error if file handle
12704         was opened for writing.
12705         (open_file_w) New function.
12706         (read_record) Uses strncasecmp if available.  Improved error
12707         messages, comments.
12708         (put_record) New function.
12709
12710         * file-handle.h: Moved function comments into dfm.c and
12711         file-handle.q.  Comment fixes.  Removed declarations of
12712         tilde_expand() and normalize_filename().
12713         (struct file_handle) Changed `open' from boolean to enumerated
12714         field to allow for three states--closed, open for reading, open
12715         for writing--all references changed.
12716
12717         * file-handle.q: Includes filename.h.
12718
12719         * print.c: (CMD_* enums) Renamed PRT_* and moved into var.h; all
12720         references changed.
12721         (alloc_line) Makes allowance for line terminator characters in
12722         calculations.
12723         (print_trns_proc) Now handles OUTFILE, WRITE differences.
12724         (print_space_trns_proc) Handles OUTFILE differences.
12725
12726         * recode.c, sample.c: Comment fixes.
12727
12728         * var.h: (struct print_trns) Changed boolean field `eject' to
12729         bitmapped field `options'; all references changed.  New enums
12730         PRT_* for use with this field.
12731
12732         * exception.h, test-exception.c: Removed.
12733
12734 Thu Oct 24 17:47:14 1996  Ben Pfaff  <blp@gnu.org>
12735
12736         * ascii.c: (delineate) Turned off debug output.
12737
12738         * common.c: [Checker and Linux] (__assert_fail, __eprintf) Moved
12739         to error.c.
12740
12741         * data-in.c: (parse_string_as_format) Sets the entire string value
12742         to spaces, not just the short string part of it.  Is this correct
12743         now? 
12744
12745         * data-out.c: (convert_date) Fixed DATETIME format problems with
12746         decimal places, removed debug code.
12747
12748         * dfm.c: (open_file_r) Fixed bug where an error would occur in the
12749         middle of parsing BEGIN DATA that would cause the lexer to read
12750         from a wild pointer `prog'; now calls new function
12751         preprocess_line() in lexer.c.
12752
12753         * error.c: [__CHECKER__] (hcf) Calls induce_segfault() on improper
12754         termination.
12755         [Checker and Linux] (__assert_fail, _eprintf) Moved from common.c.
12756         Now call induce_segfault() to induce the segfault.
12757         (induce_segfault) New function.
12758
12759         * expr-opt.c: Comment fix.
12760         (parse_sysvar) New function.
12761         (parse_primary) Added system variable support--calls
12762         parse_sysvar().
12763         (global var ops) Added OP_CASENUM operator.
12764
12765         * expr.h: Comment fixes.
12766         (OP_* enum) added OP_CASENUM operator.
12767         (struct casenum_node) New struct.
12768         (union any_union_union) New member `cas' of type `casenum_node'.
12769
12770         * glob.c: (global var last_vfm_invocation) New var.
12771         (init_glob) Initializes last_vfm_invocation.
12772
12773         * lexer.c: (lookahead) Fixed reversed condition on if statement.
12774
12775         * getline.c: (get_line) Split into get_line() and preprocess_line().
12776         (preprocess_line) New function.
12777
12778         * var.h: Declares last_vfm_invocation.
12779
12780         * vfm.c: (procedure) Sets last_vfm_invocation.
12781
12782 Wed Oct 23 21:53:43 1996  Ben Pfaff  <blp@gnu.org>
12783
12784         * command.c: (parse_cmd) Fixed bad assertion related to
12785         lookahead().
12786
12787         * data-in.c: (parse_month) Implemented to parse months according
12788         to full interpretation of standard.
12789         (to_roman) New function.
12790         (parse_wk_delimiter) Bug fix (forgot to skip `WK' in string).
12791         (parse_weekday) Bug fix (forgot to skip all the day name).
12792
12793         * data-list.c: (read_from_data_list_fixed) Fixed bug that screwed
12794         up parsing of multirecord data items.  Also fixed user message.
12795
12796         * data-out.c: Comment fix.
12797         (year2, year4, convert_date, convert_time, convert_WKDAY,
12798         convert_MONTH) New functions to support time & date output.
12799         (convert_format_to_string) Calls new time & date output routines.
12800
12801         * expr-prs.c: (nary_num_func) Found a bug, but didn't fix it yet.
12802
12803         * lexer.c: (lookahead) Noted a previously unnoticed caveat in
12804         comment.
12805
12806         * main.c: [DEBUGGING] (dump_token) Updated to handle getline.h.
12807
12808         * misc.c: (global var formats) Fixed declarations of DATETIME,
12809         TIME, DTIME.
12810
12811         * postscript.c: (text) Fixed a pair of bugs in the reallocation of
12812         the output_char buffer.
12813
12814         * vars-prs.c: (parse_DATA_LIST_vars) Fixed a failure to free
12815         memory bug.  Fixed user messages.
12816
12817 Tue Oct 22 17:27:04 1996  Ben Pfaff  <blp@gnu.org>
12818
12819         * Removed #pragma argsused from lots of places.
12820         
12821         * data-in.c: Implemented zoned decimal and time-date formats.
12822         Untested.  This is a huge chunk of code--maybe 1000 lines and 50
12823         new functions.
12824
12825         * data-out.c: Implemented zoned decimal format.
12826
12827         * expr.h: Moved yrmoda() declaration here from exprP.h.
12828
12829         * misc.c: (global var formats) Minor fixes--added
12830         FCAT_SHIFT_DECIMAL to formats N and Z.
12831         (convert_fmt_ItoO) Added support for format Z.
12832
12833         * som-frnt.c: (som_set_value) Fixed bug regarding string values.
12834
12835 Mon Oct 21 20:39:59 1996  Ben Pfaff  <blp@gnu.org>
12836
12837         * command.c: (parse_cmd) [GLOBAL_DEBUGGING] Inserted call to
12838         som_check_workspace() that is activated between commands.
12839
12840         * data-list.c: (dump_fixed_table, dump_free_table) Finished these
12841         for good, I hope.
12842
12843         * list.q: (begin_row) Changed title expansion style from
12844         SOPT_X_VERT to SOPT_X_SHSP.
12845
12846         * som-frnt.c: Now includes `somP.h'.
12847         (som_push_workspace, som_pop_workspace) New functions that, taken
12848         together, form a solution to the recursive table building problem
12849         mentioned yesterday.  Surrounded every table output routine
12850         throughout the program with calls to these functions.
12851         [GLOBAL_DEBUGGING] (som_check_workspace) New function.
12852         (som_create_table) Checks that there's an active workspace.
12853         (som_destroy_all_tables, som_crush) Removed.
12854
12855         * som-high.c: (global var som_preserve_tables) Removed, all
12856         references deleted.
12857         (som_submit_table) Checks that there's an active workspace.
12858         (dump_columnated_table) Doesn't columnate tables that would have
12859         just one row per column.
12860         (dump_crush_page, som_dump_crush_page) Removed debugging code.
12861         (som_dump_crush_page) Moved row number labels from left side of
12862         tables to right side.
12863         (som_get_table_size) Added support for SOPT_X_SHSP.
12864
12865         * som.h: New cell expansion type SOPT_X_SHSP.
12866
12867         * somP.h: (global vars arena_stack, n_arena_stack, m_arena_stack)
12868         New vars.
12869         (global var curtab_arena) Moved from som-frnt.c.
12870
12871 Sun Oct 20 13:45:28 1996  Ben Pfaff  <blp@gnu.org>
12872
12873         * ascii.c: [GLOBAL_DEBUGGING] (SUPPRESS_WARNINGS) New debug option
12874         that causes bad location warnings to be suppressed.
12875         (delineate) Saves current font when calling draw_text(); fixed
12876         handling of NULLs when backing up.  Also fixed line-wrapping bug.
12877
12878         * command.c: Re-enabled `LEAVE', `NUMERIC', `PRINT', `PRINT EJECT',
12879         `PRINT FORMATS', `PRINT SPACE', `STRING', `TITLE', `WRITE'.
12880
12881         * common.c: Added code to cause assertion failure to dump core
12882         when run under Checker.
12883
12884         * data-list.c: (dump_fixed_table) Fixed some inconsistencies, but
12885         there are still bugs.
12886
12887         * glob.c: (__eprintf) Removed.
12888
12889         * list.q: Inserted som_preserve_tables kluge that prevents tables
12890         from being thrown away due to recursive table building through
12891         som_output_line being called from a transformation during the LIST
12892         procedure invocation.  This is a general problem that must be
12893         solved in a better way since it applies to all procedures in
12894         general.
12895         (begin_row) Changed title options to SOM_X_VERT from SOM_X_BOTH.
12896         (flush_table) Removed SOM_TOPT_PRESERVE from submission options.
12897
12898         * numeric.c: Fixed several errors in the form of msg() calls.
12899
12900         * print.c: Updated for use of som.
12901         (dump_table) Reimplemented.
12902         (print_trns_proc) Calls som_eject_page() instead of eject_page().
12903         Calls som_output_text() instead of outs_line().
12904
12905         * som-frnt.c: (som_destroy_all_tables) Sets som_preserve_tables to
12906         0.
12907         (som_output_text) Function moved from som-low.c.  Interface
12908         changed.
12909
12910         * som-high.c: (som_preserve_tables) New global public variable
12911         declared in som.h.
12912         (som_submit_table) Destroys the tables only if som_preserve_tables
12913         is 0.
12914         (paginate_horizontally) Bugfix: sets som.mpw even if there's only
12915         one subrow per row.  Now labels subrows if there's more than one
12916         subrow per row.
12917         (dump_crush_table) Added wishlist comment.
12918         (som_eject_page) New public function declared in som.h.
12919
12920         * som-low.c: (som_dump_crush_page) Draws row labels if there's
12921         more than one subrow per row.
12922         (som_output_text) Moved to som-frnt.c.
12923
12924         * som.h: (SOM_TOPT_PRESERVE) Removed.
12925
12926         * title.c: (get_title) Changed interface.
12927         (cmd_title) Changed `title' to `outp_title'.
12928         (cmd_subtitle) Changed `subtitle' to `outp_subtitle'.
12929
12930 Sun Oct 20 09:04:15 1996  Ben Pfaff  <blp@gnu.org>
12931
12932         * list.q: (flush_table) Conforms to new partial options in
12933         som_submission_form.
12934
12935         * som-high.c: (paginate_horizontally) Changed form of subrow
12936         number labels.
12937         (build_target) Omits spacing before table if
12938         SOM_TOPT_PARTIAL_OMIT_TOP is selected.
12939         (dump_crush_page) Changed interface.  Only trims bottom rule if
12940         SOM_TOPT_PARTIAL_OMIT_BTM is not selected.
12941         (dump_crush_table) Handles partial tables.
12942         (output_row_label) New function.
12943         (som_dump_crush_page) Emits subrow number labels.  Draws vertical
12944         rule on the right edge of narrow subrows.
12945
12946         * som.h: Changed SOM_SUB_PARTIAL_* series of submission type
12947         constants to a series of SOM_TOPT_PARTIAL_* submission options.
12948         All references updated.
12949
12950 Fri Oct 18 19:46:49 1996  Ben Pfaff  <blp@gnu.org>
12951
12952         * misc.c: Comment fix.
12953
12954         * som-high.c: (examine_table) Treats crushed tables separates for
12955         purpose of determining header size.
12956         (paginate_horizontally) Allots space for line numbers in crushed
12957         tables with lots of subrows per row.  Calculates the `maximum page
12958         width', the width of the widest horizontal page.
12959         (build_target) Removed trim argument; all references changed.
12960         Stricter assertions.  (dump_crush_page) New function.
12961         (dump_crush_table) Reimplemented.
12962
12963         * som-low.c: (som_dump_page) Uses new RULE_ROW &c. constants.
12964         (som_dump_crush_page) Reimplemented, interface changed.
12965
12966         * somP.h: Many many new helper macros for use with crushed tables.
12967         (global var som) Removed `tv', `cum_y' members; all references
12968         removed.  New members `mpw', `digit_space'.
12969
12970 Sun Sep 29 19:37:03 1996  Ben Pfaff  <blp@gnu.org>
12971
12972         * arena.c: (arena_alloc) [!DISCRETE_BLOCKS] Removed `size'
12973         variable, changed to constant 1024.
12974         (arena_ca_strdup) Changed `sizeof(a_string)' to
12975         `sizeof(c_string)'.
12976         (arena_ca_strdup) [!DISCRETE_BLOCKS] Changed bad cast from
12977         `(c_string *)' to `(char *)'; this fixed some offset problems.
12978
12979         * filename.c: (readlink_malloc) Changed initial allocation from
12980         100 bytes to 128.
12981         (good_getcwd) Changed from xmalloc() to local_alloc(); removed
12982         comment.
12983
12984         * postscript.c: (read_fontmap) Fixed leak by changing &owner to
12985         &fm->owner in several places.
12986
12987         * som-high.c: (output_table) Changed interface to rest of world.
12988         (examine_crush_table) Removed.  Crushed tables are re-broken now,
12989         in preparation for rewrite.
12990
12991         * som.h: Comment fix.
12992
12993 Sat Sep 28 21:28:07 1996  Ben Pfaff  <blp@gnu.org>
12994
12995         * ascii.c: (ascii_init_driver) Disposes of x->file.filename and x
12996         itself in the cleanup stage.
12997
12998         * descript.q: (display) At least temporarily, changed the table
12999         format to a crushed table.
13000
13001         * list.q: (begin_row) At least temporarily, added horizontal lines
13002         between cases.
13003
13004         * som-high.c: (examine_crush_table) Sets som.hh to the width of
13005         the horizontal "headers," that is, to the width of the far left
13006         and far right rules.
13007         (justify_pagination) Sets som.th to the width of the widest row
13008         in the crushed table.  Fixed inner loop off-by-one error.
13009
13010         * som-low.c: (som_dump_crush_page) Added code to draw horizontal
13011         rules.
13012
13013         * somP.h: Comment fix.
13014
13015 Fri Sep 27 20:08:39 1996  Ben Pfaff  <blp@gnu.org>
13016
13017         * filename.c: (open_file_ext) Now, doesn't set f->file to NULL
13018         before closing it; also, opens the constructed filename `s'
13019         instead of f->filename.
13020
13021         * postscript.c: Moved initialization of x->loaded, x->prop,
13022         x->fixed, x->current, also the add_encoding() calls, into
13023         postopen().
13024         (preclose) Destroys x->combos; sets x->loaded, x->combos to NULL;
13025         sets x->last_font to NULL; sets x->next_combo to zero.
13026
13027         * som-high.c: (crushed_row_height) Moved definition farther up.
13028         (som_submit_table) Doesn't calculate line width, font size until
13029         after calling open_page(), to accomodate changes to PostScript
13030         driver.
13031         (vert_headers) Removed; equivalent functionality moved to
13032         examine_table(), examine_crush_table().
13033         (justify_pagination) Replaced with different algorithm.
13034         (dump_crush_table) Bugfix that caused tables to fail to be clipped
13035         at the bottom of the page.
13036
13037 Thu Sep 26 22:20:26 1996  Ben Pfaff  <blp@gnu.org>
13038
13039         * command.c: Added cmd_list back into cmd_table.
13040
13041         * freq.c, frequencies.q, repeat.c, list.q, vars-atr.c, vfm.c:
13042         Comment fix: `#define DEBUGGING' --> `#define DEBUGGING 1'.
13043
13044         * list.q: (flush_table) Updated to new som_submission_form format.
13045
13046         * som-frnt.c: Comment fix.
13047
13048         * som-high.c: Changed `#endif' to `#undef EXTERN'.
13049         (output_table) Calls som_get_table_size() directly; handles
13050         crushed tables.
13051         (examine_crush_table) New function; calls vert_headers().
13052         (examine_table) Moved some code into new function, vert_headers().
13053         (justify_pagination) New function.
13054         (dump_plain_table) Removed `static' from `cy'.
13055         (dump_crush_table) New function.
13056
13057         * som-low.c: (som_dump_crush_page) New function.
13058
13059         * som.h: Comment fixes.
13060         (enum SOM_TOPT_CRUSH) New.
13061         (SOM_SUB_PARTIAL_BEG, SOM_SUB_PARTIAL_MID, SOM_SUB_PARTIAL_END)
13062         Temporarily set to zero to make do with LIST procedure.
13063
13064         * somP.h: Re-ordering.
13065
13066 Wed Sep 25 19:36:11 1996  Ben Pfaff  <blp@gnu.org>
13067
13068         * som.c: Split into som-frnt.c, som-high.c, som-low.c.
13069
13070         * somP.h: New file for use by som-high.c, som-low.c.
13071
13072         * q2c.c: Added definition for VME.
13073         (get_line) Now dumps `!' comment lines to the output file
13074         verbatim.
13075
13076         * crosstabs.q, descript.q, file-handle.q, frequencies.q, list.q,
13077         set.q: Changed format of `!' comment lines.
13078
13079 Tue Sep 24 18:39:09 1996  Ben Pfaff  <blp@gnu.org>
13080
13081         * All source files: Added copyright notice.
13082
13083         * common.c: (xmalloc, xrealloc, xstrdup) Cast size_t's to unsigned
13084         longs in msg() calls.
13085
13086         * con32s.c: (xmalloc, xrealloc) Updated from common.c.
13087
13088         * q2c.c: (xmalloc, xrealloc, xstrdup) Updated from common.c.
13089
13090 Sat Sep 21 23:16:31 1996  Ben Pfaff  <blp@gnu.org>
13091
13092         * output.c: (outp_read_devices) Changed criteria for
13093         distinguishing different types of lines.
13094
13095 Fri Sep 20 22:52:28 1996  Ben Pfaff  <blp@gnu.org>
13096
13097         * cmdline.c: Changed syntax message.
13098
13099         * filename.c: (good_getcwd) Bug fix (?).
13100         (normalize_filename) [__BORLANDC__] Uses _fullpath() library
13101         function.
13102         (search_path) Appends DIR_SEPARATOR to directory name only if it
13103         does not already end with one.
13104
13105         * glob.c: Checks STAT_PAGER envvar before PAGER.
13106
13107         * output.c: Checks environment variables instead of just local
13108         macros.
13109
13110 Tue Sep 10 21:39:00 1996  Ben Pfaff  <blp@gnu.org>
13111
13112         * arena.c: (arena_destroy) Swatted a subtle bug that cropped up
13113         when the pointer passed to the function was within the arena
13114         itself, so that it couldn't properly be set to NULL _after the
13115         arena was freed_.
13116
13117         * command.c: Re-enabled DISPLAY.
13118
13119         * display.c: Rewritten to handle tables.  Untested.
13120
13121         * filename.c: (search_path) Fixed memory leak.
13122
13123         * frequencies.q: (cmd_frequencies) Frees v_variables.
13124         (postcalc) Calls cleanup_freq_tab() after displaying statistics.
13125         (cleanup_freq_tab) New function to garbage collect.
13126         (dump_full) Elegantized.
13127
13128         * main.c: New comment.
13129
13130         * output.h: New tag for tagged quotes: TAG_NEWLINE.
13131
13132         * postscript.c: Comment fix.
13133         (release_fontmap, free_font_entry) New functions.
13134         (ps_init_driver) Sets free_font_entry() as the freefunc for
13135         hashtable `loaded'.  Calls release_fontmap() when destroying a
13136         driver; also frees the output filename; also frees the
13137         ps_driver_ext block.
13138         (free_ps_encoding) Frees the filename as well as the encoding
13139         block.
13140         (output_encodings) Frees the line buffer and pops the msg-filename
13141         stack.
13142         (read_fontmap) Frees the fontmap filename and the line buffer.
13143         (postopen, preclose) Misc. garbage collection fixes.
13144         (ps_open_page) Destroys the `combos' hash table; sets `last_font'
13145         to NULL; this fixes some output problems.
13146         (text) Handles TAG_NEWLINE.  Untested.
13147
13148         * som.c: (cell_byte_size) Merged SCON_VALUE and SCON_TEXT cases.
13149         (som_set_string) Removed.  All references changed to
13150         `som_set_text'.
13151         (som_set_text) Rewritten.  New interface.  More general.
13152
13153         * som.h: Minor format changes.
13154         (struct som_value_cell) Removed; all references changed to
13155         `som_text_cell'.
13156         (enums SOT_*) Changed.
13157
13158 Mon Sep  9 21:43:13 1996  Ben Pfaff  <blp@gnu.org>
13159
13160         * command.c: Re-enabled SPLIT FILE.
13161
13162         * postscript.c: Comment fix.
13163
13164         * som.h: Added `SOT_NONE'.
13165
13166         * split-file.h: (cmd_split_file) Removed superfluous parenthesis.
13167
13168         * vfm.c: (dump_splits) Reimplemented.
13169
13170 Sat Sep  7 22:35:12 1996  Ben Pfaff  <blp@gnu.org>
13171
13172         * Compiled the project under gcc 2.7.2, which gave some new
13173         warnings.  This led to many additions of casts from unsigned to
13174         int sprinkled throughout the code.
13175         
13176         * arena.c: Many uses of `unsigned' changed to `size_t'.
13177
13178         * command.c: Added END FILE, END REPEAT to command table.
13179         (var cmd_end_repeat) Renamed cmd_end_repeat_p.
13180         (find_command, FILE_TYPE_okay) Not commented out anymore.
13181         (parse_cmd) Calls FILE_TYPE_okay again.
13182         (output_line) Added calls to som_output_text() to put the line
13183         in the output files.
13184
13185         * common.c: (macro VME) Format changes.
13186         (xstrdup) Asserts that its argument is not NULL.
13187         
13188         * data-list.c: Implemented dump_fixed_table().
13189         
13190         * inpt-pgm.c: Formatting changes.  Comment changes.
13191         (end_case_proc) Renamed end_case_trns_proc.
13192         (cmd_end_file, end_file_trns_proc) New functions.
13193
13194         * misc.c: Many uses of `int' and `unsigned' changed to `size_t'.
13195
13196         * misc.h: (local_strdup) New macro corresponding to strdup() but
13197         allocating its data through local_alloc() if possible--that is, if
13198         GNU C is in use.
13199
13200         * postscript.c: Comment changes.
13201         (quote_ps_name, quote_ps_string, output_encodings) New functions.
13202         (output_line, add_string) New macros supporting
13203         output_encodings().
13204         (postopen) Fixed contents of ${fixed-font} and ${prop-font}
13205         substitution vars.  Calls output_encodings() when a line
13206         consisting of `!encodings' is encountered.
13207         (preclose) Some code moved into quote_ps_string().
13208         (dump_line) Changed into macro supporting dump_fancy_line().
13209         (switch_font) Now outputs DSC "%%IncludeResource: font (...)"
13210         command when appropriate.
13211         (write_text) Fixed `literal_char' array (I think it's fixed, at
13212         least.)
13213         (text) Fixed bug when width was zero.  Now exits immediately on
13214         zero height_left.  Now, when executing `goto restart;', checks
13215         that cp<end, so that we don't read beyond end-of-string.  Also,
13216         outputs the correct code to the output file by outputting the code
13217         from the metric instead of the internal metric index.
13218
13219         * repeat.c: (cmd_end_repeat) New function.
13220
13221         * som.c: (var som) `headers' renamed `options' and semantics
13222         changed.  All references changed.
13223         (draw_title) `if(px!=-1 || px!=-1)' --> `if(px!=-1 || py!=-1)'.
13224         (build_target) Only inserts spacing if SOM_TOPT_SPACING not
13225         selected.
13226         (som_text_table) Removed.
13227         (som_output_text) New function.
13228
13229         * som.h: (struct som_submission_form) Removed `header', `reuse',
13230         replaced with bitmapped field `options'.
13231         (SOM_TOPT_*) New enum set for som_submission_form.options.
13232         (SOT_*) New enum set for som_output_text().
13233
13234         * temporary.c: (copy_variable) When copying the var label, only
13235         calls xstrdup() if it's non-NULL.
13236
13237         * var.h: (enum type `vartype') Removed; all references changed to
13238         `int'.
13239
13240         * vars-atr.c: (init_variable) Changed local var `nbytes' from
13241         `int' to `size_t'.
13242
13243 Thu Sep  5 22:05:56 1996  Ben Pfaff  <blp@gnu.org>
13244
13245         * font.h: Comment changes.
13246
13247         * groff-font.c: (groff_read_font) Initializes `name' field to
13248         NULL.  Handles `encoding' field.
13249
13250         * hash.c: (hsh_dump) [GLOBAL_DEBUGGING] Output formatting changes.
13251
13252         * postscript.c: (struct font_entry) Removed `position' field.
13253         (struct ps_font_combo) New struct.
13254         (struct ps_driver_ext) Removed field `next_position'.  New fields
13255         `combos', `next_combo'.  `last_font' field changed from
13256         `font_entry *' to `ps_font_combo *'.
13257         (ps_init_driver) Reformatted; handles new fields.  When
13258         OPO_AUTO_ENCODE is set, adds the two default fonts' encodings to
13259         the encoding list.
13260         (get_encoding, find_encoding_file) New functions.
13261         (add_encoding) Some code moved out into find_encoding_file().
13262         (postopen) Changed value for ${title}.
13263         (preclose) Sets `loaded' field to NULL after destroying the hash
13264         table.
13265         (ps_open_page) Added comment.  Inits the `combos' and `next_combo'
13266         fields.
13267         (ps_text_set_font_by_position) Figures out the current family if
13268         not known.
13269         (compare_ps_combo, hash_ps_combo, free_ps_combo) New functions.
13270         (switch_font) Implemented.
13271         (write_text) Calls switch_font() more often.  Format changes.
13272         #undefs its macros after they're no longer useful.
13273         (text) Changed `continue' at one point to a jump to the top of the
13274         loop because we don't want `separate' reset to 0 at that point.
13275         (load_font) No longer sets `position' in the font_entry created.
13276
13277 Wed Sep  4 21:45:35 1996  Ben Pfaff  <blp@gnu.org>
13278
13279         * font.h: (struct font_desc) New member `encoding', which is not
13280         properly handled yet.
13281
13282         * glob.c: (init_glob) Some new i18n code, which is probably
13283         screwed up.
13284
13285         * output.c: (outp_read_devices, outp_get_paper_size) Changed
13286         `size' local from `int' to `size_t'.
13287
13288         * postscript.c: New driver configuration parameter `auto-encode'.
13289         New enums OPO_AUTO_ENCODE, ODA_COUNT.
13290         (struct font_entry) New member `position'.
13291         (struct ps_driver_ext) Reordered.  New hash table member
13292         `encodings'; new members `next_position', `next_encoding',
13293         `last_font'.  Members `current', `prop', `fixed' changed from type
13294         `font_desc *' to `font_entry *'; all references changed.
13295         (struct ps_encoding) New struct.
13296         (read_ps_encodings, compare_ps_encoding, hash_ps_encoding,
13297         free_ps_encoding, add_encoding) New functions.
13298         (ps_init_driver) Added OPO_AUTO_ENCODE to default
13299         x->output_options.  Initializes new members of ps_driver_ext.
13300         Changed default value for prologue_fn, encoding_fn.  Calls
13301         read_ps_encodings after loading default fonts.
13302         (option_tab[], ps_option) Handle new configuration parameter.
13303         (switch_font) New function.
13304         (struct output_char) `font' member changed from `font_desc *' to
13305         `font_entry *'.  New member `separate'.
13306         (read_fontmap) Changed `size' from `int' to `size_t'.
13307         (output_line, put_number) New macros for write_text().
13308         (write_text) Optimizes text output by consolidating multiple
13309         calls to PostScript `show' operator.
13310         (text) Keeps track of when text arguments can't be consolidated by
13311         write_text(), and marks those spots in the output stream.
13312         (load_font) Sets `position' of the allocated font_entry to -1, cuz
13313         the font hasn't been switched to by switch_font(), which is where
13314         the position is important--the PostScript is what cares about the
13315         position.
13316
13317 Sat Aug 31 23:52:38 1996  Ben Pfaff  <blp@gnu.org>
13318
13319         * hash.c: (hsh_destroy) Ignores NULL argument.  Doesn't try to
13320         call a NULL free_func.
13321         (hsh_rehash) Elegantized.
13322         (hsh_probe) Fix bug that manifested when the table was expanded
13323         and thus had to change location in memory.  Good thing
13324         too--otherwise could have been much more subtle.
13325         (hsh_find) [GLOBAL_DEBUGGING] Not stubbed out anymore.
13326         (hsh_foreach) New function for hash table iteration.
13327
13328         * hash.h: (struct hsh_iterator) New.
13329
13330         * lexer.c: (parse_tagged_quote) Font and family name strings in
13331         tags are now null-terminated.
13332
13333         * output.c: (outp_evaluate_dimension) Fixed over-aggressive unit
13334         parsing.
13335         (internal_get_paper_size, outp_get_paper_size) Fixed; now work as
13336         documented.  (Never before tested?)
13337
13338         * output.h: Comment changes.
13339
13340         * postscript.c: New driver options `optimize-text-size',
13341         `optimize-line-size', `max-fonts-simult'.  New enum set for
13342         specing cached line types.  Comment fixes.
13343         (struct line_form) New struct.
13344         (struct ps_driver_struct) New members `text_opt', `line_opt',
13345         `max_fonts', `lines'.
13346         (ps_init_driver) Initializes new members of ps_driver_struct.
13347         (user option type enum set) New member `nonneg_int_arg'.
13348         (static var option_tab[]) Supports new options.
13349         (ps_option) Handles new options.
13350         (find_ps_file) Made static.  No longer calls hsh_dump().
13351         (ps_get_var) Made static.
13352         (preclose) Dumps out proper DSC trailer.
13353         (ps_open_page) Elegantized.
13354         (ps_close_page) Calls dump_lines() if appropriate.
13355         (ps_line_horz, ps_line_vert, ps_line_intersection) Reduced to
13356         wrappers around line().
13357         (int_2_compare, compare_line, dump_line, dump_fancy_line,
13358         dump_lines, hash_line, free_line, line) New functions for support
13359         of line caching.
13360         (write_text, text) Made static.
13361         (text) Added to font support, not finished.
13362
13363 Thu Aug 29 21:36:41 1996  Ben Pfaff  <blp@gnu.org>
13364
13365         * font.h: (struct font_desc) New members ascent, descent.
13366
13367         * groff-font.c: (groff_read_font) Calculates font ascent and
13368         descent from the ascent and descent of the `d' and `p' characters,
13369         respectively, as per a suggestion on comp.fonts.
13370
13371         * postscript.c: (ps_open_page, ps_close_page, ps_line_horz,
13372         ps_line_vert, ps_line_intersection) Rewritten to deal with changed
13373         prologue.
13374         (write_text) Handles text right-justification and centering (not
13375         full justification).  Still very inefficient.  (One output line
13376         per character?!)
13377         (struct output_char) Added fields for font and font size.
13378         (text) Many bugfixes.
13379
13380 Sat Aug 24 23:26:00 1996  Ben Pfaff  <blp@gnu.org>
13381
13382         * cmdline.c: (usage) Calls outp_list_classes().
13383
13384         * font.h: Comment fix.
13385
13386         * groff-font.c: New exported global var `space_index'.
13387         (groff_init) New function to initialize `space_index'.
13388         (hash_kern) Casts result to unsigned.
13389         (font_name_to_index) Renamed font_char_name_to_index.  All
13390         references changed.  Also, now returns the value of `space_index'
13391         when passed an ASCII space character as an argument.  Fixed
13392         handling of nulls.
13393         (font_get_kern_adjust) Changed i from `int' to `unsigned'.
13394         Handles passed NULL pointers properly.
13395
13396         * lexer.c: (parse_tagged_quote) Comment fix.  Better range
13397         checking.
13398
13399         * output.c: (outp_list_drivers) Removed.  Removed all references.
13400         
13401         * output.h: Comment fixes.
13402
13403         * postscript.c: (ps_open_global) Calls groff_init().
13404         (output_char) New structure.
13405         (write_text) New function.
13406         (text) No longer stubbed out!  Now the output is correct--with a
13407         few exceptions, one of them being that the page has to be held
13408         upside down into a mirror.
13409
13410 Sun Aug 11 21:31:22 1996  Ben Pfaff  <blp@gnu.org>
13411
13412         * font.h: Comment fix.
13413         
13414         * font.c: (name_to_index) Renamed font_name_to_index, made extern.
13415         All callers changed.
13416         (number_to_index) Renamed font_number_to_index, made extern.  All
13417         callers changed.
13418         (font_get_kern_adjust, font_get_char_metrics) New functions.
13419
13420         * output.h: New constant OUTP_T_INTERNAL_DRAW.
13421
13422         * postscript.c: Changed default line width back to 1/2 point.
13423         (ps_line_horz, ps_line_vert, ps_line_intersection) Now lines are
13424         in the center of the space allotted for them, not just a fixed
13425         offset from the edge of the space; this fixes some bugs.
13426         (ps_line_intersection) Now supports all command line styles.
13427         (ps_text_get_size) Bug fix in computation of em width.
13428         (text) New function, the meat behind ps_text_metrics and
13429         ps_text_draw.  Not complete.
13430         (ps_text_metrics, ps_text_draw) Removed the stub taken from
13431         ascii.c; call text().
13432
13433 Sat Aug 10 23:28:17 1996  Ben Pfaff  <blp@gnu.org>
13434
13435         * arena.c: (arena_free) Assert that the argument is non-NULL.
13436         
13437         * groff-font.c: (add_kern) Calls arena_free() for old_kern if and
13438         only if old_kern is non-NULL.
13439
13440         * postscript.c: (ps_init_driver) Changed default line width to 1
13441         point.
13442         (postopen) New prologue variables.
13443         (ps_line_horz, ps_line_vert, ps_line_intersection) Implements some
13444         more of the common line styles properly, but not all.
13445         (ps_text_metrics) Fixed problem with this stubbed out version that
13446         kept it from taking font sizes into account.
13447
13448 Thu Aug  8 22:31:11 1996  Ben Pfaff  <blp@gnu.org>
13449
13450         * arena.c: (arena_malloc) Bug fix.
13451         (arena_dump) [GLOBAL_DEBUGGING] New function.
13452
13453         * ascii.c: Comment fix.
13454         (count_fancy_chars, delineate) Now static functions.
13455         
13456         * filename.c: (interp_vars) Bug fixes.
13457
13458         * font.h: Comment fixes.
13459
13460         * glob.c: (init_glob) Sets set_viewwidth, set_viewlength at
13461         beginning in case we have an error message to display before
13462         initializing the display.
13463
13464         * groff-font.c: Comment fix.  Changed rehash threshold from 2/3
13465         full to 1/2 full.
13466         (groff_read_font) Bug fixes.
13467         (name_to_index) Increments hash.used.  Sets `name' field of hash
13468         entry properly.
13469         (add_kern) Sets kern_max_used after rehashing.  Other bug fixes.
13470
13471         * hash.c: Return type changed.
13472
13473         * postscript.c: Continued development.  Now marks lines on the
13474         paper, but very buggy.
13475
13476 Sat Aug  3 20:50:35 1996  Ben Pfaff  <blp@gnu.org>
13477
13478         * Changed comments in many source files from `/* xxx /* yyy */' to
13479         `/* xxx */ /* yyy */' for cleanliness.
13480
13481         * arena.c: (arena_sd_strdup) New function.
13482         
13483         * ascii.c: (struct ascii_driver_ext) New member `file'.
13484         (ascii_init_driver) Fills out member `file' for initing; uses
13485         close_file_ext for closing drivers.
13486         (ascii_option) Changed %.*s back to %s because the a_string's are
13487         always null-terminated.
13488         (postopen, preclose) New functions.
13489         (ascii_open_page) Uses new style of open_file_ext.
13490         (ascii_option, commit_line_buf, output_lines) Use ext->file.file
13491         instead of this->output.
13492         (__assert_fail) Removed.
13493
13494         * cmdline.c: Changed syntax_message[].
13495
13496         * error.c: #include's <readline/history.h> only if the history
13497         library is available, not if just the readline library is
13498         available.
13499
13500         * filename.c: (expand_line) Removed alloca() support.
13501         (interp_vars) No longer tilde-expands argument.  Limit on output
13502         length removed.
13503         (tilde_expand) Now treats argument as path rather than filename.
13504         [!unix] Now is a no-op function.
13505         (search_path) Better verbose message formatting.
13506         (open_file, close_file) Comment fixes.
13507         (close_file) [!unix] Doesn't bother with pipes.
13508         (open_file_ext) Completely rewritten, interface revamped.
13509         (close_file_ext) New function.
13510
13511         * font.h: Comment changes.
13512
13513         * frequencies.q: Removed AIX alloca support since it doesn't use
13514         alloca.
13515
13516         * hash.c: Comment changes & additions.
13517         (hsh_create) Initializes entire table instead of first M entries.
13518         (hsh_probe) Stupid bug fixed.  Now it works.
13519         (hsh_dump) [GLOBAL_DEBUGGING] New function.
13520
13521         * main.c: (parse) Detects EOF properly in token-eating loop.
13522         Should the STOP token have its value changed to 0?
13523
13524         * misc.c: (blp_getdelim) [HAVE_GETDELIM] Now it's a macro.
13525         (blp_getline) Now it's a macro.
13526
13527         * output.h: (struct outp_driver) Removed members output, filename.
13528         
13529         * output.c: (outp_init) [!NO_POSTSCRIPT] Installs PostScript
13530         drivers in driver table.
13531         (outp_read_devices) Frees buf.  Warns if there are no active
13532         output drivers.
13533         (outp_configure_clear) Sets outp_configure_vec to NULL after
13534         deleting its elements.
13535         (configure_driver, destroy_driver) Removed references to output,
13536         filename members of outp_driver.
13537         (outp_evaluate_dimension, internal_get_paper_size,
13538         outp_get_paper_size) New functions.
13539
13540         * postscript.c: Continued development.  Now links but doesn't make
13541         any marks on the page.  Lotsa bugs I suppose.
13542
13543         * str.c: (strcasecmp) [!HAVE_STRCASECMP] New function.
13544
13545         * str.h: Comment changes.
13546
13547 Sat Jul 27 22:32:38 1996  Ben Pfaff  <blp@gnu.org>
13548
13549         * Removed dependencies on non-nested comments in several files.
13550         Also removed references to (unix || __unix__) in #if's since
13551         prefh.orig makes those two equivalent.
13552         
13553         * ascii.c: (ascii_open_global) Creates ascii_arena.
13554         (ascii_close_global) Destroys ascii_arena.
13555         (ascii_init_driver) Doesn't create ascii_arena.
13556         (ascii_copy_driver) Removed.
13557         (ascii_option) Possible bugfix regarding %s vs. %.*s with a_string's.
13558         (outp_class ascii_class) Removed ascii_copy_driver reference.
13559
13560         * frequencies.q: Now can display all statistics except median.
13561         Still not finished.
13562
13563         * output.c: Handles outp_class.ref_count so output class
13564         destructors are called properly.
13565         (add_class) Sets ref_count to 0.
13566         (configure_driver) Initializes class if ref_count++ is 0.
13567         (destroy_driver) Destructs class if --ref_count is 0.  Frees the
13568         class output file name.
13569         
13570         * output.h: (struct outp_class) Removed copy_driver, inited.
13571         Added ref_count.
13572
13573         * postscript.c: Completely replaced but not finished.
13574         
13575 Tue Jul 23 21:48:36 1996  Ben Pfaff  <blp@gnu.org>
13576
13577         * approx.h: #includes <float.h>.
13578
13579         * arena.h, arena.c: Many functions changed to take an arena **
13580         instead of an arena *, for consistency.  All callers changed.
13581         (arena_alloc) Now creates a new arena if passed *A that is NULL.
13582         (arena_destroy) Sets *A to NULL.
13583         
13584         * ascii.c: (delineate) Implements OUTP_T_VERT correctly.  Removed
13585         assertion that `width' be positive.
13586
13587         * command.c: Removed #if's from cmd_table.
13588         (walk_cmdtable_func) [0] New function (debug code).
13589         (init_cmd_parser) [0] Dumps out cmd_table (debug code).
13590         (parse_cmd) Doesn't return failure for unimplemented commands.
13591
13592         * common.h: (SYSMIS) Changed from DBL_MAX to -DBL_MAX.
13593         (SYSCODE) New constant macro.
13594
13595         * descript.q: Checks for positive n_variables before performing
13596         analysis.
13597
13598         * file-handle.q: (get_handle_by_filename) Bug fix: passes &f to
13599         avl_find instead of &fp as arg 2.
13600
13601         * frequencies.g, frequencies.q: Continued updating; now compiles &
13602         works again, but not complete.
13603
13604         * main.c: Changes to user messages.
13605
13606         * misc.c: (reverse) [0] New function.
13607
13608         * settings.h: Comment removed.  #includes "common.h".
13609
13610         * som.c: (som_set_null) New function.
13611         (som_set_value, som_set_string, som_set_text) More detailing
13612         assertions.
13613         (som_set_float) Implemented function.
13614         (dump_columnated_table) Bug fix regarding page breaks.
13615         (draw_cell) Bug fix regarding text that spilled out of a cell.
13616         (draw_intersection, draw_horz_rule, draw_vert_rule) No longer draw
13617         null lines.
13618         (get_cell_size) Support SCON_EMPTY cells.
13619         (get_table_size) When calculating rules' widths and heights, mask
13620         out SLIN_SPACING bit.  Added SOPT_X_HLTL support.
13621         
13622         * som.h: (som_any_cell) New option SOPT_X_HTLT.  Removed
13623         SOPT_X_SHADE.
13624         (struct som_submission_form) New member `header'; all users
13625         changed.
13626
13627         * val-labs.c: (get_label) User messages changed.
13628
13629         * var.h: Changed FREQUENCIES structures.
13630
13631         * vars-atr.c: (is_num_user_missing, is_str_user_missing) Made
13632         inline.
13633         
13634 Fri Jul 19 19:11:13 1996  Ben Pfaff  <blp@gnu.org>
13635
13636         * approx.h: Definition of EPSILON now depends on system's
13637         DBL_EPSILON.  Removed GNU C specific code.
13638         (cmpapx) Renamed approx_compare.
13639
13640         * frequencies.g, frequencies.q: Continued updating; still doesn't
13641         compile.
13642
13643         * groff-font.c: (name_to_index) Fix bug that kept it from
13644         compiling.
13645
13646         * hash.c, hash.h: Completed work.
13647
13648         * var.h: Changes to freq_tab, frequencies_proc.
13649         
13650 Wed Jul 17 21:23:36 1996  Ben Pfaff  <blp@gnu.org>
13651
13652         New hashing code.
13653         * hash.c, hash.h: New files.  Not completed.
13654         * Makefile.am: Added hash.c to source file list.
13655         * font.h: (struct font_desc) New member kern_size_p.
13656         * groff-font.c: Uses hash.h.
13657         (hashpjw) Moved to hash.c.
13658         (next_prime_power) Rewrote, renamed hsh_next_prime, moved to
13659         hash.c.
13660         (static var hash) New member size_p.
13661         * var.h: Includes hash.h.
13662         (struct freq_tab) Changed AVL_TREE to hash_tab.
13663
13664         * vars-prs.c: Comment, formatting fixes.
13665
13666         * frequencies.g, frequencies.q: Continued updating.  Not yet
13667         working.
13668
13669         * formats.c: Bug fix.
13670
13671 Tue Jul 16 22:10:04 1996  Ben Pfaff  <blp@gnu.org>
13672
13673         Increasing parallelism between DESCRIPTIVES and FREQUENCIES.
13674         * descript.g: Comment fixes.
13675         * descript.q: Comment fixes.  Moved some declarations into var.h.
13676         Made dsc_info a static table.  Updated FIXMEs.
13677         (internal_cmd_descriptives) Beautified.
13678         
13679         * frequencies.q: Started updating into working order.
13680         * frequencies.g: New file analogous to descript.g.
13681         * var.h: Comment fixes.  Added structures for FREQUENCIES.
13682         
13683         * som.c: Removed vestiges of crushing and partial table support.
13684
13685 Sun Jul 14 15:45:31 1996  Ben Pfaff  <blp@gnu.org>
13686
13687         * Many more changes to som.c especially, but these will not be
13688         documented as I have resolved to remove them.  This patchlevel is
13689         being released solely so that I can fall back to it if I decide
13690         that removing the changes is not a good idea.
13691
13692 Sat Jul 13 09:58:44 1996  Ben Pfaff  <blp@gnu.org>
13693
13694         * som.c: (global var som) New member `cum_y'.
13695         (build_target) Properly handles titles for partial tables.
13696         (dump_partial_beg, dump_partial_mid, dump_partial_end)
13697         Merged into single new function dump_partial().  Fixed problem
13698         with titles on partial tables.
13699         (dump_table) Calls dump_partial() for all parts of partial tables.
13700         (dump_page) Criteria for drawing title changed.
13701         
13702 Fri Jul 12 22:03:36 1996  Ben Pfaff  <blp@gnu.org>
13703
13704         * command.c: (cmd_table) Added LIST, WEIGHT.
13705
13706         * command.c: (cmd_remark) No longer frees `s' since it's not
13707         dynamically allocated.
13708         
13709         * data-out.c: (convert_f) Now correctly handles the case where
13710         abs(v->f)<1 but v->f rounds to a value of 1.00 given the specified
13711         number of decimals.
13712         (som_destroy_all_tables) Removed argument.  All callers changed.
13713         (som_vline, som_hline) Argument validity checking corrected.
13714         (som_set_value) Implemented half-heartedly.
13715         (replicate_table) Copies tables piece-by-piece when using Checker.
13716
13717         * som.h: New line style SLIN_1THIN, currently equivalent to
13718         SLIN_0.  New enum set SOM_SUB_*.
13719         (struct som_submission_form) Removed `seq_no'.  Added `type'.
13720         
13721         * list.q: Newly working file; uses partial tables.
13722         
13723         * som.c: (som_reduce_table) Renamed som_set_table_height().
13724         (som_crush) Removed argument `group'.
13725         (global var som) Removed `nt', `seq_no'.  Added `type'.
13726         (som_submit_table) Arguments changed.
13727         (output_table) Removed partial table code.
13728         (build_target) New arg; partial table support added.  All callers
13729         changed.
13730         (dump_plain_table) Removed partial table code.
13731         (dump_partial_beg, dump_partial_mid, dump_partial_end) New functions.
13732         (dump_table) Supports partial tables.
13733         (dump_page) New argument to allow not drawing top and/or bottom
13734         headers.  All callers changed.  Supports partial tables.
13735
13736 Sat Jul  6 22:22:25 1996  Ben Pfaff  <blp@gnu.org>
13737
13738         * data-out.c: Changed `#include <approx.h>' to `#include
13739         "approx.h".
13740         (convert_F) Comment fix.  Now won't print `-.000', etc.
13741
13742         * descript.q: Now Z-scores work, although there appears to
13743         be a bug (which might actually be in data-out.c:convert_F()).
13744         (descriptives_trns_proc, descriptives_trns_free) New functions.
13745         (run_z_pass) Implemented.
13746         
13747         * var.h: Comment fixes.
13748         (dsc_z_score, descriptives_trns) New structs.
13749         (descriptives_trns) Added to any_trns as `dsc'.
13750
13751         * error.c, error.h: New error class, IS (Installation Script
13752         error), used in those instances where the error is in the
13753         installation, but there is a script file or installation file that
13754         can be usefully referred to.
13755         
13756         * output.c: Change many IE classes to IS classes.
13757
13758         * cases.c, command.c, common.c, crosstabs.q, expr-evl.c,
13759         frequencies.q, list.q, vars-prs.c, vfm.c: Removed reference to
13760         HAVE_MALLOC_H because Borland C++ alloca() is broken, so why
13761         include the corresponding header?
13762         
13763         * glob.c: (init_glob) Don't malloc term_buffer under Checker.
13764         Don't bail out if termcap can't be read.
13765
13766         * som.c: (som_destroy_table) Removed.
13767         (som_reduce_table, som_destroy_all_tables) New functions.
13768         (som_crush) New function, not implemented.
13769         
13770         * som.h: New table option STAB_CRUSH.  Comment fix.  New struct
13771         som_submission_form.  Function prototypes revised.
13772
13773         Outputting huge tables (1000s of rows) a few rows at a time
13774         is supported, though untested.  May even break everything.
13775         Actually, the code doesn't even compile right now.
13776         * som.c: (struct som) New fields htv, nt, seq_no.
13777         (som_submit_table) Multiple arguments changed to a single
13778         pointer to struct submission_form.  Only increments subtable_num
13779         if seq_no is zero.  Only destroys table if it's not going to
13780         be reused.
13781         (replicate_table) New function.
13782         (output_table) Comment fix.
13783         (examine_table) Changed inline code to code calling
13784         replicate_table().  Calculates htv.  Supports partial tables.
13785         (draw_title) Removed comment.
13786         (build_target) Only allows for title on first part of partial
13787         tables.
13788         (dump_plain_table) Only resets table chunk number on first part
13789         of partial tables; FIXME: doesn't work quite right.  Supports
13790         partial tables.
13791         (dump_page) Titles only on first part of partial tables.
13792
13793 Fri Jul  5 20:16:19 1996  Ben Pfaff  <blp@gnu.org>
13794
13795         * Thanks to an unreliable IDE hard drive, I have spent the last
13796         day reconstructing my Debian GNU/Linux installation and redoing
13797         the previous day's changes--somehow I managed to save every file
13798         except for output.c and output.h.  So the following changes could
13799         really be considered independent of the output.c, output.h changes
13800         from Jul 4.
13801
13802         * output.h, output.c: Moved the outp_configure_vec global var,
13803         outp_names struct, and enum set OUTP_S_* from output.h to output.c.
13804         outp_configure_vec is now static.
13805         
13806 Thu Jul  4 20:20:24 1996  Ben Pfaff  <blp@gnu.org>
13807
13808         * The entire philosophy behind configuration of the output drivers
13809         changed.  Now there is a termcap-type configuration where drivers
13810         to be read are determined beforehand, rather than parsing the
13811         entire output init file and storing it in memory & deciding what
13812         to actually use later.  Faster & more memory-efficient at the same
13813         time, cool.
13814         
13815         * output.c: Comment fix.  Removed outp_init_drivers global var.
13816         Removed all references to synonyms.  New structure outp_defn.  New
13817         global vars outp_macros, outp_configure_vec.
13818         (search_name, delete_name, add_name, check_configure_vec,
13819         expand_name, find_defn_value) New static functions.
13820         (outp_configure_clear, outp_configure_add, outp_configure_macro,
13821         outp_read_devices) New extern functions.
13822         (outp_init) Much functionality moved into outp_read_devices.
13823         (outp_read_devices) Format of output init file changed; name of
13824         file is `devices' rather than `output' to avoid Makefile
13825         conflicts.
13826         (outp_clear) Renamed outp_done.
13827         (outp_list_classes) Bug fix, cleaned up.
13828         (outp_list_drivers) Not implemented anymore.
13829         (outp_configure_driver) Now a static function; simplified; now
13830         interpolates macros; supports new structure.
13831         (outp_enable_driver, match_synonym) Removed; all references
13832         removed.
13833         (find_driver) First argument removed.
13834         
13835         * output.h: Global var outp_init_drivers removed; new structure
13836         outp_names; new enum set OUTP_S_*; new global var
13837         outp_configure_vec; function prototypes for output.c exports
13838         updated.
13839         
13840         * main.c: (main) Calls outp_read_devices() after parsing the
13841         command line.
13842         
13843         * cmdline.c: (parse_command_line) New option -v --verbose;
13844         --version changed to -V.  --device option changed syntax to just
13845         take a single device name.  Accepts key=value declaration of
13846         output init file macros.  Syntax message updated.
13847
13848         * filename.c: (expand_line) New function.
13849         (interp_environ_vars) Renamed interp_vars; no longer uses
13850         fixed-size buffer.
13851         (blp_getenv) Allows $ARCH and $VER pseudo-environment-vars to be
13852         overridden by real environment vars.
13853         (search_path) Uses verbose_msg() instead of #ifdef'd printf().
13854         * filename.h: interp_environ_vars() renamed interp_vars().
13855         
13856         * error.c, error.h: Added extern variable `verbosity', message
13857         class MM.
13858         
13859         * error.c: (vmsg) Support message class MM.
13860         (verbose_msg) New function.
13861
13862         * descript.q: (generate_z_varname) Bug fix in generation of
13863         Z-score varnames.
13864         (dump_z_table) Bug fix in column headers.
13865         
13866         * ascii.c: (ascii_init_driver) Changed minimum number of lines per
13867         page from 29 to 15.  Don't set a default for ops[OPS_INIT,
13868         OPS_DONE].  Writes the uninit string when the driver is closed.
13869         (ascii_open_page) Write the init string before the first page.
13870         (output_shorts) Form of main loop changed from `while' to `for'.
13871         Bug fix with overstrikes: the character is printed *after* the
13872         backspace.  Eliminated a lot of `& 0xff' modifiers.
13873         (advance_to_left_margin) New function.
13874         (return_carriage, output_lines) Handle left margin.
13875
13876 Thu Jul  4 00:35:59 1996  Ben Pfaff  <blp@gnu.org>
13877
13878         * ascii.c: New option `carriage-return-style'.
13879
13880         * ascii.c: (count_fancy_chars) New function.
13881         (delineate, text_metrics) Use new function; bug fixes regarding
13882         rich text strings.
13883         (text_draw) Bug fix with rich text.
13884         (output_string, output_shorts) Reordered.
13885         (output_shorts) Now handles boxchars and some overstrike font
13886         changes.
13887         (output_char, return_carriage) New functions.
13888         (output_lines) Now handles overstriking and font changes properly;
13889         some code moved to output_shorts.
13890
13891 Tue Jul  2 22:13:23 1996  Ben Pfaff  <blp@gnu.org>
13892
13893         [GLOBAL_DEBUGGING]
13894         * ascii.c: New member `debug' in ascii_driver_ext.
13895         (ascii_init_driver, delineate) Uses new member.
13896
13897         Now you can set a vertical height on writing text.
13898         * ascii.c: (delineate) Keeps track of vertical position.
13899         (text_draw) No longer considers fully justified text an internal
13900         error.
13901         
13902         * output.h: New flag OUTP_T_VERT; other OUTP_T_ values changed.
13903
13904         Tables' titles are drawn; they can have variable height.
13905         * som.c: `som' struct has new member, title_height.
13906         (draw_title) New argument.  Moved within file.  All caller
13907         changed.
13908         (build_target) New argument, amount of space needed for first row.
13909         Calculates height of title, takes that into account.  All callers
13910         changed.
13911         (dump_plain_table, dump_columnated_table) Took calculation of y1,
13912         y2 out of loop.
13913         (dump_columnated_table) [GLOBAL_DEBUGGING] Debugging code
13914         improved.
13915         (dump_columnated_table) Organized for readability.
13916         (dump_page) Makes use of som.title_height.
13917
13918         * som.c: Many comment bug fixes.
13919
13920         * descript.q: (try_name, generate_z_name) Bug fix regarding
13921         generation of Z-score variable names.
13922         * var.h: Removed num from descriptives_proc; all referents removed.
13923
13924 Mon Jul  1 22:13:39 1996  Ben Pfaff  <blp@gnu.org>
13925
13926         * ascii.c: (ascii_line_horz, ascii_line_vert,
13927         ascii_line_intersection) Added debugging code.
13928
13929         Added a descriptive line above each table to describe it.
13930         * command.c: (parse_cmd) Calls som_new_series.
13931         
13932         * som.c: New static vars table_num, subtable_num.  New `som'
13933         member `title'.
13934         (dump_page) New arguments.
13935         (som_submit_table) Handle new variables.
13936         
13937         * som.c, som.h: (som_submit_table) New arguments.  All callers
13938         changed.
13939         (som_new_series) New function.
13940         (build_target) Makes room for extra line.
13941         (draw_title) New function.
13942         (dump_page) Calls draw_title.  Bug fix: doesn't always set
13943         som.ext->cp to 0.
13944         
13945         Columnation of tables support.
13946         * som.h: Deleted fr, lr, ri from som_table.  Reorganized.
13947         
13948         * som.c: Deleted references to fr, lr, ri.
13949         (som_columnate) Bux fix: sets group member of table.
13950         (som_add_options) Function removed.
13951         (dump_table) Split into three functions; extensively reworked.
13952         
13953         * descript.q: (dump_z_table) Better output table formatting; added
13954         title support to correspond to som.h changes.
13955         (display) Title support.
13956
13957         * output.h: Added OUTP_T_NONE.
13958         
13959 Mon Jul  1 13:00:00 1996  Ben Pfaff  <blp@gnu.org>
13960
13961         * descript.q: Improved handling of Z scores; still not perfect.
13962         
13963         * output.h, ascii.c: Added hook for getting em width of current
13964         font.
13965         
13966         * som.c: Uses new em-width hook.  Added debugging code to
13967         several functions.
13968         (som_columnate) New argument.
13969         (som_add_options) Removed.
13970
13971 Jun 29 17:40:47 1996  Ben Pfaff  <blp@gnu.org>
13972
13973         * som.h, som.c, output.c, output.h, ascii.c: Updated to work with
13974         rules as a property of the table instead of as a property of the
13975         cells.
13976         
13977         * ascii.c: Added `header' to table of options.
13978         
13979         * descript.q: Added even shorter statistic names; modified to work
13980         with new som interface.
13981         
13982         * misc.c (blp_getdelim): Bug fix.
13983         
13984         * version.c: includes 'conf.h'.
13985         
13986 ----------------------------------------------------------------------
13987 Local Variables:
13988 mode: change-log
13989 version-control: never
13990 End: