Change type of variables whose addresses are passed to dict_get_vars()
[pspp-builds.git] / src / ChangeLog
1 Sat Sep 17 11:13:13 2005  Ben Pfaff  <blp@gnu.org>
2
3         * matrix-data.c: (cmd_matrix_data) Change type of variable whose
4         address is passed to dict_get_vars() from size_t to int to match
5         John's change below.
6
7         * modify-vars.c: (validate_var_modification) Ditto.
8
9 Mon Sep 12 19:26:06 WST 2005 John Darrington <john@darrington.wattle.id.au>
10
11         * dictionary.[ch]  Changed cnt from size_t* to int* since that's
12         what it's called as, and on  x86_64 machines they're different sizes.
13         
14         * str.c: (ds_vprintf) Copied va_list args so they can be re-used
15         
16 Sun Aug 21 00:12:24 2005  Ben Pfaff  <blp@gnu.org>
17
18         * lexer.c: (lex_sbc_only_once) New function.
19         (lex_sbc_missing) New function.
20
21 Sun Aug 21 00:00:47 2005  Ben Pfaff  <blp@gnu.org>
22
23         * case.h: (case_str) Make it return `unsigned char'.
24
25 Sat Aug 20 23:56:14 2005  Ben Pfaff  <blp@gnu.org>
26
27         Revamp SAVE, XSAVE, EXPORT.  Add (or at least parse) all the
28         subcommands that we didn't support.  Fix bug 13911.  Fix bug
29         reported by Adam Pierson (COMPRESSED and other subcommands didn't
30         work on SAVE).  Refactor all related code.
31         
32         * command.def: Add XEXPORT command.
33
34         * dictionary.c: (dict_delete_scratch_vars) New function.
35
36         * get.c: (cmd_get) Fix parsing.
37         (struct save_trns) Removed.
38         (cmd_save_internal) Removed.
39         (cmd_save) Removed.
40         (do_write_case) Removed.
41         (save_write_case_func) Removed.
42         (save_trns_proc) Removed.
43         (save_trns_free) Removed.
44         (trim_dictionary) Removed.
45         (struct export_proc) Removed.
46         (cmd_export) Rewrote.
47         (export_write_case_func) Removed.
48         (export_proc_free) Removed.
49         (enum writer_type) New enum.
50         (enum command_type) New enum.
51         (struct any_writer) New struct.
52         (any_writer_destroy) New function.
53         (parse_write_command) New function.
54         (any_writer_write_case) New function.
55         (parse_output_proc) New function.
56         (output_proc) New function.
57         (cmd_save) Rewrote.
58         (cmd_xsave) Rewrote.
59         (struct output_trns) New struct.
60         (parse_output_trns) New function.
61         (output_trns_proc) New function.
62         (output_trns_free) New function.
63         (cmd_xsave) Rewrote.
64         (cmd_xexport) New function.
65         (parse_dict_trim) New function.
66         (struct mtf_proc) Change `by_cnt' member type to `int'.
67         (cmd_import) Rewrote.
68
69         * pfm-write.c: (struct pfm_writer) Add `digits' member.
70         (pfm_writer_default_options) New function.
71         (pfm_open_writer) Add `opts' argument and handle options.
72         (write_float) Write only as many digits as `digits' member says.
73         (format_trig_double) Limit base-10 precision to LDBL_DIG.
74
75         * pfm-write.h: (enum pfm_type) Moved here from pfm-read.h.
76         (struct pfm_write_options) New struct.
77
78         * sfm-write.c: (sfm_writer_default_options) New function.
79         (sfm_open_writer) Remove `compress', `omit_long_names' args.  Add
80         `opts' argument.  Implement options.
81
82         * sfm-write.h: (struct sfm_write_options) New struct.
83
84         * expressions/helpers.c: (copy_string) Make `old' arg `unsigned
85         char *' instead of `char *'.
86         
87 Sat Aug  6 21:29:15 2005  Ben Pfaff  <blp@gnu.org>
88
89         * factor_stats.c: Needed <config.h> included earlier.
90
91         * percentiles.c: Needed to include <config.h>.
92
93         * val.h: Don't include "config.h".
94
95 Sat Aug  6 21:26:27 2005  Ben Pfaff  <blp@gnu.org>
96
97         Clean up treatment of missing values by moving all the code into
98         one place.  All references to the missing value function were
99         updated, but only major changes are detailed below.
100
101         * Makefile.am: Add missing-values.c, missing-values.h to sources.
102
103         * apply-dict.c: (cmd_apply_dictionary) Use mv_resize().
104
105         * dictionary.c: (dict_create_var) Initialize `miss' member with
106         mv_init().
107         (dict_clone_var) Copy `miss' member with mv_copy().
108         
109         * get.c: (mtf_merge_dictionary) Use mv_copy().
110
111         * missing-values.c: New file.
112         
113         * missing-values.h: New file.
114
115         * mis-val.c: Rewrite.  New version implements updated semantics.
116
117         * pfm-read.c: (read_variables) Rewrite missing value handling.
118
119         * pfm-write.c: (write_variables) Rewrite missing value handling.
120
121         * sfm-read.c: (read_variables) Rewrite missing value handling.
122
123         * sfm-write.c: (write_variable) Rewrite missing value handling.
124
125         * sfmP.h: Include "magic.h" to get definition of
126         second_lowest_value.
127
128         * sysfile-info.c: (describe_variable) Rewrite missing value
129         handling.
130
131         * val.h: Include "magic.h" to get definition of
132         second_lowest_value.
133
134         * var.h: Include "missing-values.h".  Drop MISSING_* enums.
135         (struct variable) Remove `miss_type', `missing'.  Add `miss'.
136
137         * vars-atr.c: (is_num_user_missing) Removed--use
138         mv_is_num_user_missing().
139         (is_str_user_missing) Removed--use mv_is_str_user_missing().
140         (is_system_missing) Removed--use mv_is_value_system_missing().
141         (is_missing) Removed--use mv_is_value_missing().
142         (is_user_missing) Removed--use mv_is_value_user_missing().
143         
144 Sun Jul 31 14:09:57 2005  Ben Pfaff  <blp@gnu.org>
145
146         Adopt use of gnulib for portability.
147
148         * Make.build: Add $(top_srcdir)/gl and $(top_builddir)/gl to
149         include path.
150
151         * Makefile.am: Remove bool.h, stat.h and change getline.[ch] to
152         getl.[ch] in pspp_SOURCES.  Remove libmisc, add libgl in
153         pspp_LDADD.
154
155         * In many source files, added an explicit inclusion of gettext.h
156         and definition of _ macro.  These are no longer in pref.h because
157         it interfered with definitions in a few gnulib source files.
158
159         * In many source files, changed #include "bool.h" to #include
160         <stdbool.h>, which is provided by gnulib.
161
162         * alloc.c: Removed functions defined in gnulib:
163         (xmalloc) Removed.
164         (xcalloc) Removed.
165         (xrealloc) Removed.
166         (xstrdup) Removed.
167         (out_of_memory) Redefined as wrapper for xalloc_die().
168
169         * alloc.h: Replace prototypes by #include "xalloc.h".
170
171         * casefile.c: Use full_read() and full_write() from gnulib instead
172         of our home-grown versions.
173         (full_read) Removed.
174         (full_write) Removed.
175
176         * getline.c: Renamed getl.c.
177
178         * getline.h: Renamed getl.h, updated all references.
179
180         * filename.c: (fn_readlink) Change to wrapper around xreadlink()
181         from gnulib.
182
183         * glob.c: Just #include <time.h> instead of the crazy rigmarole
184         here before.
185         (init_glob) Call set_program_name() to initial gnulib progname
186         module.
187
188         * html.c: (postopen) Use getlogin_r(), gethostname() from gnulib.
189
190         * permissions.c: Use "stat-macros.h" from gnulib.
191
192         * postscript.c: Just #include <time.h> instead of the crazy
193         rigmarole here before.
194
195         * q2c.c: (main) Make generated code #include "gettext.h".
196
197         * str.h: Get rid of most explicit declarations of standard
198         functions, in favor of including gnulib header files.
199
200         * expressions/evaluate.c: Ditto.
201
202         * expressions/operations.h.pl: Make generated code #include
203         <stdbool.h>, not "bool.h".
204
205 Sat Jul 30 23:13:17 2005  Ben Pfaff  <blp@gnu.org>
206
207         * expressions/parse.c: (validate_function_args) Fix two msg() bugs
208         found by -Wformat.
209
210 Sat Jul 30 23:10:01 2005  Ben Pfaff  <blp@gnu.org>
211
212         * expressions/evaluate.c: (expr_debug_print_postfix) Don't pass
213         null pointer to printf for %.*s.
214
215 Sat Jul 30 23:05:33 2005  Ben Pfaff  <blp@gnu.org>
216
217         * vars-atr.c: (var_is_valid_name) Fix three msg() bugs found by
218         -Wformat.
219
220 Sat Jul 30 22:58:33 2005  Ben Pfaff  <blp@gnu.org>
221
222         * rank.q: (parse_rank_function) Fix msg() bug found by -Wformat.
223
224 Sat Jul 30 22:56:12 2005  Ben Pfaff  <blp@gnu.org>
225
226         * postscript.c: (postopen) Cast `char' to `unsigned char' before
227         passing to isspace().
228
229 Sat Jul 30 22:52:09 2005  Ben Pfaff  <blp@gnu.org>
230
231         * pfm-read.c: (read_variables) Fix msg() bug found by -Wformat.
232
233 Sat Jul 30 22:50:57 2005  Ben Pfaff  <blp@gnu.org>
234
235         * histogram.c: Include <config.h>.
236
237 Sat Jul 30 22:48:50 2005  Ben Pfaff  <blp@gnu.org>
238
239         * get.c: (cmd_match_files) Fix msg() bug found by -Wformat.
240
241 Sat Jul 30 22:46:10 2005  Ben Pfaff  <blp@gnu.org>
242
243         * format.c: (check_common_specifier) Fix msg() bug found by
244         -Wformat.
245         (check_output_specifier) Ditto.
246
247 Sat Jul 30 22:43:57 2005  Ben Pfaff  <blp@gnu.org>
248
249         * file-handle.q: (cmd_file_handle) Fix msg() bug found by
250         -Wformat.
251
252 Sat Jul 30 22:41:44 2005  Ben Pfaff  <blp@gnu.org>
253
254         * data-in.c: (parse_Z) [WORDS_BIGENDIAN] Don't declare buf[], to
255         avoid "unused variable" warning.
256
257 Sat Jul 30 22:38:46 2005  Ben Pfaff  <blp@gnu.org>
258
259         * command.c: (find_word) Cast `char' to `unsigned char' before
260         passing to isspace().
261
262 Sat Jul 30 22:36:29 2005  Ben Pfaff  <blp@gnu.org>
263
264         * case.c: (case_compare) Implement as delegating to
265         case_compare_2dict().
266
267 Sat Jul 30 22:34:18 2005  Ben Pfaff  <blp@gnu.org>
268
269         * algorithm.c: Inclusion of <alloca.h> is unneeded.
270
271 Sat Jul 30 22:01:32 2005  Ben Pfaff  <blp@gnu.org>
272
273         * Make.build: Don't append -ansi to AM_CFLAGS for GCC.  Using
274         -ansi changes the behavior of header files significantly.  It
275         causes __STRICT_ANSI__ to be defined, and some headers interpret
276         that as cause to e.g. not use `long long' or __attribute__.  The
277         former example is bad when off_t is supposed to be `long long',
278         and the latter prevents -Wformat from working.
279
280 Sun Jul 24 20:26:59 2005  Ben Pfaff  <blp@gnu.org>
281
282         Get rid of dependency on libgmp by writing our own routine for
283         floating-point base conversion.
284
285         * pfm-write.c: (write_float) Rewrote.
286         (write_int) Rewrote.
287         (pow30_nonnegative) New function.
288         (pow30) New function.
289         (trig_to_char) New function.
290         (format_trig_digits) New function.
291         (recurse_format_trig_int) New function.
292         (format_trig_int) New function.
293         (should_round_up) New function.
294         (try_round_up) New function.
295         (format_trig_double) New function.
296
297 Sun Jul 24 18:49:20 2005  Ben Pfaff  <blp@gnu.org>
298
299         * data-in.c: (parse_numeric) Allow "1+23" even for F format, for
300         compatibility.
301
302 Sun Jul 24 18:47:37 2005  Ben Pfaff  <blp@gnu.org>
303
304         * pfm-read.c: (read_version_data) Read and ignore author field.
305
306 Wed Jul  6 20:44:27 2005  Ben Pfaff  <blp@gnu.org>
307
308         * get.c: (mtf_processing) Don't assume that
309         mtf_compare_BY_values() always returns -1, 0, or 1.  Actually, it
310         returns a negative, zero, or positive result.  Fixes MATCH FILES
311         bug on Mac OS X reported by "Marshall DeBerry" <mdb@radix.net>.
312
313 Mon Jul  4 18:01:15 2005  Ben Pfaff  <blp@gnu.org>
314
315         * flip.c: [HAVE_SYS_TYPES_H] Really include <sys/types.h>.  The
316         preprocessor test for sys/types.h was accidentally inverted.  This
317         was bug 12789.
318
319 Sun Jul  3 22:47:39 2005  Ben Pfaff  <blp@gnu.org>
320
321         * get.c: (cmd_match_files) Fix memory leak on `by' and on
322         `vfm_source'.
323
324         * getline.c: [HAVE_LIBREADLINE] (read_console) Fix memory leak on
325         `line'.
326
327         * vfm.c: (close_active_file) Remove unnecessary test.
328
329 Sun Jul  3 21:45:32 2005  Ben Pfaff  <blp@gnu.org>
330
331         Fix NDEBUG compile errors.
332
333         * hash.h: Needed explicit #include <assert.h>.
334
335         * linked-list.c: (ll_next) First arg is UNUSED when NDEBUG is
336         defined.
337
338 Sun Jun 12 23:44:38 2005  Ben Pfaff  <blp@gnu.org>
339
340         Implement embedding for PostScript driver.  Fixes bug 12970.
341
342         * ascii.c: Fix compiler warnings.
343
344         * html.c: Ditto.
345
346         * chart.h: Add `file' member.
347
348         * output.h: (struct outp_class) initialise_chart, finalise_chart
349         should take outp_driver *, not outp_class *.  Update all
350         references.
351
352         * plot-chart.c: (chart_create) Fix segfault when there are no
353         output drivers at all.
354         (chart_submit) Call d->class->finalise_chart.
355
356         * postscript.c: (ps_open_page) Set cp_y to 0.
357         (ps_submit) New function.
358         (ps_chart_initialise) Implement.
359         (ps_chart_finalise) Implement.
360         (static var postscript_class) Add ps_submit.
361         (static var epsf_class) Add ps_submit.
362         
363
364 Sun Jun 12 14:54:40 2005  Ben Pfaff  <blp@gnu.org>
365
366         Did some more work on bug 12859 and then realized that a *good*
367         solution would require some fundamental restructuring.  For now,
368         I'm marking REPEATING DATA unimplemented, and then we can revisit
369         it post-0.4.0.
370         
371         * command.def: Make REPEATING DATA unimplemented.
372
373         * data-list.c: (cmd_repeating_data) Assume inline file is 80
374         characters wide.
375         (realize_value) Revert previous changes; no longer needed.
376         Updated all callers.
377
378         * error.c: (err_hcf) Set nfile_loc, mfile_loc to 0 after freeing
379         file_loc, to avoid bad references later.
380
381         * str.c: Fix typo.
382
383 Tue Jun  7 00:14:09 2005  Ben Pfaff  <blp@gnu.org>
384
385         Make some code tolerant of reentry.  Should not be needed if other
386         code is correct but it is good to be generally tolerant.
387         
388         * error.c: (err_hcf) Set file_loc to null after free().
389
390         * output.c: (outp_done) Similar changes.
391
392         * str.c: (ds_destroy) Ditto.
393         
394 Tue Jun  7 00:10:20 2005  Ben Pfaff  <blp@gnu.org>
395
396         Continue work on bug 12859, plus some code cleanup.
397         
398         * data-list.c: (cmd_repeating_data) Replace `seen' bitmap by
399         boolean variables.  Don't try to compute starts_end, cont_end for
400         inline file.  Calculate length only after parsing variable
401         specifications.  Add proper transformation to list.
402         (realize_value) If the rpd_num_or_var has no value, return new
403         DEFAULT_MEMBER argument (for use with inline file).
404         (repeating_data_trns_proc) Pass default values.
405
406         * dfm-read.c: (dfm_close_reader) Only skip data if *not* still
407         open, and only if we actually started reading data.
408
409 Sun Jun  5 18:39:36 2005  Ben Pfaff  <blp@gnu.org>
410
411         Fix bug 11894.
412         
413         * output.c: (outp_read_devices) Fix message.
414
415 Fri May 27 12:34:43 WST 2005 John Darrington <john@darrington.wattle.id.au>
416         
417         * sort-prs.[ch] (newfiles), aggregate.c, sort.[ch]: Separated the guts 
418         of the sort algorithm from the parser for the SORT command.
419         
420         * rank.q: Added the parser for the RANK command.
421         
422 Thu May 26 12:29:21 2005  Ben Pfaff  <blp@gnu.org>
423
424         Fix bug 13192.
425
426         * sort.c: (sort_parse_criteria) Only set *saw_direction if
427         saw_direction is non-null.  Thanks to John Darrington for
428         reporting this bug.
429
430 Tue May 24 21:52:55 2005  Ben Pfaff  <blp@gnu.org>
431
432         * get.c: (mtf_processing) Handle case of a lookup table as the
433         active file.  Thanks to John Darrington for reporting this bug.
434
435 Wed May 25 10:27:02 WST 2005 John Darrington <john@darrington.wattle.id.au>
436         
437         * alloc.c alloc.h: (xcalloc) changed signature to imitate the
438         POSIX  calloc function.
439         
440         * crosstabs.q get.c vars-prs.c: Updated calls to xcalloc to
441         reflect new signature.
442
443         * sfm-read.c: Now much more robust in the face of badly formed
444         system files.
445
446 Mon May 23 11:57:31 WST 2005 John Darrington <john@darrington.wattle.id.au>
447
448         *sfm-read.c: Fixed some bugs regarding long string continuation
449         records, which the previous fix uncovered.
450
451 Sat May 21 12:48:34 WST 2005 John Darrington <john@darrington.wattle.id.au>
452
453         * sfm-read.c, sfmP.h:  Allow reading of system files when the 
454         case_size value in the header is -1.  Also changed some Errors to 
455         Warnings when reading system files.
456
457 Tue May 17 21:00:57 2005  Ben Pfaff  <blp@gnu.org>
458
459         * data-list.c: (data_list_trns_free) Don't free the argument
460         because cancel_transformations() will do that itself.
461         (data_list_source_destroy) Destroy the argument to
462         data_list_trns_free(), because it no longer does so itself.
463
464 Tue May 17 18:29:35 2005  Ben Pfaff  <blp@gnu.org>
465
466         * data-out.c: (format_and_round) Don't output leading `-' if value
467         rounds to zero.
468
469 Tue May 17 00:06:43 2005  Ben Pfaff  <blp@gnu.org>
470
471         Fix bug 11119.
472
473         * som.c: (output_encodings) If some cell in the table won't fit
474         with the horizontal or vertical headers, cancel those headers.
475
476         * som.h: (struct som_table_class) Add fits_width, fits_length,
477         set_headers members.
478
479         * tab.c: (tabi_fits_width) New function.
480         (tabi_fits_length) New function.
481         (tabi_set_headers) New function.
482         (global var tab_table_class) Add the new functions as appropriate
483         members.
484         
485 Mon May 16 22:34:06 2005  Ben Pfaff  <blp@gnu.org>
486
487         Fix rest of bug 13054.
488
489         * format.def: Fix EDATE, SDATE, ADATE, JDATE, QYR, MOYR, WKYR,
490         DATETIME, TIME system/portable file values.
491
492 Mon May 16 22:31:15 2005  Ben Pfaff  <blp@gnu.org>
493
494         * data-list.c: (parse_free) Use make_input_format().
495         
496         * data-out.c: (num_to_string) Use make_output_format().
497
498         * dictionary.c: (dict_create_var) Ditto.
499
500         * format.c: (global var f8_2) New var.
501         (make_input_format) New function.
502         (make_output_format) New function.
503
504         * get.c: (cmd_match_files) Use make_output_format().
505
506         * list.q: (cmd_list) Ditto.
507
508         * matrix-data.c: Ditto.
509
510         * sfm-read.c: (parse_format_spec) Check output specifier
511         thoroughly.
512
513         * tab.c: (tab_float) Use make_output_format().
514
515 Sun May 15 23:38:10 2005  Ben Pfaff  <blp@gnu.org>
516
517         Fix more of bug 13054.
518         
519         * format.def: FMT_A should allow 255-character output.  FMT_AHEX
520         should allow 510-character input and output.
521
522         * data-out.c: (num_to_string) Get rid of NEW_STYLE option.
523         (convert_E) Handle non-finite values.
524         (try_F) Rewrite.
525         (format_and_round) New function.
526         (convert_infinite) New function used by try_F() and convert_E().
527
528 Sun May 15 23:36:55 2005  Ben Pfaff  <blp@gnu.org>
529
530         Regularize string and buffer function names so that they make some
531         kind of sense.
532
533         * str.c: (mm_reverse) Rename buf_reverse().  Update all
534         references.
535         (mm_find_reverse) Rename buf_find_reverse().  Update all
536         references.
537         (mm_case_compare) Rename buf_compare_case().  Update all
538         references.
539         (st_compare_pad) Rename buf_compare_rpad().  Update all
540         references.
541         (str_compare_rpad) New function.
542         (st_bare_pad_copy) Rename buf_copy_str_rpad().  Update all
543         references.
544         (buf_copy_str_lpad) New function.
545         (st_bare_pad_len_copy) Rename buf_copy_rpad().  Update all
546         references.
547         (st_pad_copy) Rename str_copy_rpad().  Update all references.
548         (st_trim_copy) Rename str_copy_trunc().  Update all references.
549         (st_uppercase) Renamed str_uppercase().  Update all references.
550         
551 Sat May 14 08:22:26 WST 2005 John Darrington <john@darrington.wattle.id.au>
552
553         * dfm-read.c: Fixed polarity of test in dfm-close-reader.  Closes 
554         Bug #13082
555
556 Tue May 10 20:08:18 2005  Ben Pfaff  <blp@gnu.org>
557
558         * data-in.c: (data_in) Add assertion to check input specifier.
559
560         * data-out.c: (data_out) Add assertion to check output specifier.
561
562 Tue May 10 19:56:35 2005  Ben Pfaff  <blp@gnu.org>
563
564         Start to fix bug 13054.
565
566         * format.c: (check_input_specifier) Improve error message.
567         (check_input_specifier) Check F, COMMA, and DOLLAR formats for
568         valid decimal places.
569         (check_output_specifier) Ditto (but different criteria).
570         (convert_fmt_ItoO) Assert valid input and output specifiers.
571         Also, if input specifier has *any* decimal places, make the output
572         specifier 1 place wider.
573
574 Mon May  9 07:14:29 WST 2005 John Darrington <john@darrington.wattle.id.au>
575
576         * sysfile-info.c: Fixed bug [# 13024 ]
577
578 Sun May  8 13:52:12 2005  Ben Pfaff  <blp@gnu.org>
579
580         "Fix" bug 13021 by disabling FILE TYPE.  Eventually, we should
581         actually implement it.
582
583         * command.c: (FILE_TYPE_okay) Always return 1.
584
585         * command.def: Change FILE TYPE, END FILE TYPE into UNIMPL.
586
587         * file-type.c: Add prototypes to get rid of warnings.
588
589 Sun May  8 08:08:07 WST 2005 John Darrington <john@darrington.wattle.id.au>
590
591         * barchart.c box-whisker.c cartesian.c piechart.c plot-hist.c: Fixed 
592         more ISO/IEC 9899:1990 conformance issues.
593
594 Wed May  4 23:54:02 2005  Ben Pfaff  <blp@gnu.org>
595
596         Fix bug 12948.  See also new test in
597         tests/bugs/match-file-scratch.sh.
598         
599         * get.c: (mtf_merge_dictionary) Don't compact dictionary because
600         that deletes scratch variables that someone else might be using,
601         and because we can't reassign our sources' value indexes.
602         Instead, simply don't copy scratch variables into the master
603         dictionary.
604
605         * dictionary.c: (dict_compact_values) Delete variables from the
606         dictionary passed in, not from default_dict (!).
607
608 Tue May  3 22:25:17 2005  Ben Pfaff  <blp@gnu.org>
609
610         Improve hash.c comments, error-checking.
611         
612         * hash.c: (struct hsh_table) [NDEBUG] Add hash_ordered member.
613         (hsh_create) size == 0 should *not* return NULL!  Set
614         hash_ordered.
615         (hsh_clear) Set hash_ordered.
616         (locate_matching_entry) Check hash_ordered.
617         (hsh_rehash) Rename rehash().  Add assertion.  Set hash_ordered.
618         (hsh_data) Set hash_ordered.  Add const-ness to return value and
619         update all callers.
620         (hsh_sort) Ditto.       
621
622 Wed May  4 08:50:11 WST 2005 John Darrington <john@darrington.wattle.id.au>
623
624         * casefile.c: Removed unnecessary #include <valgrind/valgrind.h>
625
626 Tue May  3 19:14:48 WST 2005 John Darrington <john@darrington.wattle.id.au>
627
628         * copyleft.c: Updated copyright date.
629
630         * Makefile.am: Removed erroneous explicit "-lplot"
631
632         * examine.q oneway.q: Made these files conform to ISO/IEC 9899:1990
633
634 Tue May  3 16:20:31 WST 2005 John Darrington <john@darrington.wattle.id.au>
635
636         * command.c command.def: Added description string for unimplemented commands.
637
638         * oneway.q: Sorted the hash tables before shipping out the results. Closes 
639         bug [#12931].
640
641 Mon May  2 23:45:01 2005  Ben Pfaff  <blp@gnu.org>
642
643         Code improvements.
644         
645         * data-list.c:  (parse_fixed) Use lex_end_of_command().
646         (parse_free) Ditto.
647         (cmd_repeating_data) Set cont_end.num in right situations.
648         (parse_repeating_data) Remove redundant test.
649
650 Mon May  2 23:37:19 2005  Ben Pfaff  <blp@gnu.org>
651
652         Partial fix for bug 12859.
653         
654         * data-list.c: (cmd_data_list) Add transformation properly in
655         vfm_source == NULL case.
656
657 Mon May  2 23:27:28 2005  Ben Pfaff  <blp@gnu.org>
658
659         * lexer.c: (lex_error) Improve error messages.
660
661 Mon May  2 22:28:17 2005  Ben Pfaff  <blp@gnu.org>
662
663         * get.c: (cmd_match_files) Check token type before trying to match
664         tokid.  Fixes bug 12923.
665
666 Mon May  2 22:16:51 2005  Ben Pfaff  <blp@gnu.org>
667
668         * flip.c: [HAVE_SYS_TYPES_H] Include <sys/types.h>.  Fixes bug
669         12789.
670
671 Mon May  2 22:02:52 2005  Ben Pfaff  <blp@gnu.org>
672
673         * expressions/generate.pl: (get_token) Make use of /g
674         backward-compatible with Perl 5.6.1.
675
676 Sun May  1 23:00:19 2005  Ben Pfaff  <blp@gnu.org>
677
678         * var-display.c: (cmd_variable_alignment) Fix memory leak.
679         (cmd_variable_level) Ditto.
680
681 Sun May  1 22:49:04 2005  Ben Pfaff  <blp@gnu.org>
682
683         Hash table had buggy deletion function.  The fix required changing
684         other functions to do probing in the required order.
685
686         * hash.c: (locate_matching_entry) Rewrite and change interface.
687         (hsh_rehash) Rewrite to use locate_matching_entry().
688         (hsh_probe) Ditto.
689         (hsh_find) Ditto.
690         (hsh_delete) Ditto.  Also, fix stupid bugs.
691
692 Sun May  1 22:24:58 2005  Ben Pfaff  <blp@gnu.org>
693
694         * dictionary.c: (dict_clone) Properly copy vectors.
695
696 Sun May  1 22:07:58 2005  Ben Pfaff  <blp@gnu.org>
697
698         New implementation of long variable names.  Each variable has a
699         "normal" name, which may be up to 64 bytes long and which is used
700         for all normal operations.  Variables may have a "short" name,
701         which is limited to 8 bytes and used only for system and portable
702         file input and output.
703         
704         Make tokid case-preserving.  Update most uses of tokid to treat it
705         case-insensitively.
706
707         Update many commands to deal with long variable names.
708
709         * autorecode.c: (cmd_autorecode) Use strcasecmp() instead of strcmp().
710
711         * command.c: (cmd_parse) Ditto.
712         (match_strings) Use toupper() before comparing characters.
713         (conflicting_3char_prefixes) Use mm_case_compare() instead of
714         memcmp().
715         (cmd_match_words) Ditto.
716
717         * compute.c: (lvalue_parse) Use st_trim_copy() instead of
718         strncpy().
719
720         * count.c: (struct cnt_var_info) Change n[] to fit long var name.
721         Use st_trim_copy() instead of strcpy().
722
723         * data-in.c: (parse_enum) Use mm_case_compare() instead of
724         memcmp().
725
726         * data-list.c: (struct dls_var_spec) Change name[] to fit long var
727         name.
728         (parse_free) Use st_trim_copy() instead of strcpy().
729
730         * descript.c: (struct dsc_var) Change z_name[] to fit long var
731         name.
732         (try_name) Use strcasecmp() instead of strcmp().
733         (generate_z_varname) Use st_trim_copy() instead of strcpy().
734         (descriptives_compare_dsc_vars) Use strcasecmp() instead of
735         strcmp().
736
737         * dictionary.c: (struct dictionary) Removed `long_name_tab'
738         member.
739         (compare_long_names) Removed.
740         (hash_long_name) Removed.
741         (dict_create) Don't initialize `long_name_tab' member.
742         (dict_clone) Copy short names into new dictionary. 
743         (dict_clear) Don't clear `long_name_tab' member.
744         (dict_get_varname_block) Removed.
745         (dict_add_longvar_entry) Removed.
746         (free_nte) Removed.
747         (dict_destroy) Don't destroy `long_name_tab' member.
748         (dict_create_var_from_short) Removed.
749         (dict_create_var_x) Removed.
750         (dict_create_var) Get rid of longname handling.
751         Clear short name.
752         (dict_clone_var) Get rid of longname parameter and longname
753         handling.
754         (dict_lookup_var) Get rid of longname handling.
755         (dict_reorder_var) New function.
756         (dict_rename_var) Clear short name.
757         (dict_rename_vars) Get rid of longname handling.  Clear short
758         names.
759         (dict_create_vector) Support long vector names.
760         (dict_lookup_vector) Use strcasecmp() instead of strcmp().
761         (quasi_base27) Removed.
762         (make_short_name) Removed.
763         (compare_strings) New function.
764         (hash_string) New function.
765         (dict_assign_short_names) New function.
766
767         * file-handle.q: (get_handle_with_name) Use strcasecmp() instead
768         of strcmp().
769         (get_handle_for_filename) Support long handle names.
770
771         * file-type.c: (struct col_spec) Make `name' fit long var names.
772         (cmd_file_type) Use strcasecmp() instead of strcmp().
773
774         * flip.c: (make_new_var) Rewrite.
775         (flip_sink_write) Use st_trim_copy() instead of strncpy().
776
777         * format.c: (parse_format_specifier_name) Use mm_case_compare()
778         instead of memcmp().
779
780         * get.c: (cmd_save_internal) Rephrase.
781         (rename_variables) Drop test for identical variable name.
782         (struct mtf_proc) Change `first', `last' to fit long var name.
783
784         * hash.c: (hsh_hash_case_string) New function for case-insensitive
785         string hashing.
786
787         * lexer.c: (restore_token) Use st_trim_copy() instead of
788         strncpy().
789         (lex_get) Don't uppercase string when copying into tokid.
790         (lex_put_back_id) Use st_trim_copy() instead of
791         strncpy().
792
793         * list.q: (determine_layout) Consider length of variable names in
794         choosing vertical layout.
795
796         * matrix-data.c: (cmd_matrix_data) Use strcasecmp() instead of
797         strcmp().
798         (string_to_content_type) Ditto.
799
800         * modify-vars.c: (compare_variables_given_ordering) Ditto.
801         (struct var_renaming) Change `new_name' to fit long var name.
802         (compare_var_renaming_by_new_name) Use strcasecmp() instead of
803         strcmp().
804
805         * pfm-read.c: (read_variables) Disallow system variables in system
806         files.
807         (write_variables) Call dict_assign_short_names() and use
808         short_name[] members.
809
810         * repeat.c: (internal_cmd_do_repeat) Use strcasecmp() instead of
811         strcmp().
812
813         * sfm-read.c: (sfm_open_reader) Rewrite code for long variable
814         map.  Reorder variables into same order as long variable map.
815         (read_variables) Set short name.
816
817         * sfm-write.c: (sfm_open_writer) Call dict_assign_short_names().
818         (write_variable) Use st_bare_pad_copy().
819         (write_longvar_table) Rewrite.
820
821         * str.c: (mm_case_compare) New function.
822
823         * sysfile-info.c: (compare_vectors_by_name) Use strcasecmp()
824         instead of strcmp().
825
826         * t-test.q: (tts_custom_groups) Remove redundant test.
827         (tts_custom_pairs) Ditto.
828
829         * var.h: (struct variable) Change `name' to fit long var names.
830         Remove `longname'.  Add `short_name' member.  Reorder some
831         variables.
832         (struct name_table_entry) Removed.
833         (struct vector) Change `name' to fit long vector names.
834
835         * vars-atr.c: (var_is_valid_name) Allow long var names.
836         (compare_var_names) Use strcasecmp() instead of strcmp().
837         (compare_var_ptr_names) Ditto.
838         (hash_var_name) Use hsh_hash_case_string().
839         (hash_var_ptr_name) Ditto.
840         (var_set_short_name) New function.
841         (var_clear_short_name) New function.
842         (var_set_short_name_suffix) New function.
843
844         * vars-prs.c: (parse_DATA_LIST_vars) Support long names.
845         Use strcasecmp() instead of strcmp().
846         (struct array_var_set) Removed `longname_tab'.
847         (array_var_set_lookup_var_idx) Drop longname_tab support.
848         (array_var_set_destroy) Don't destroy `longname_tab'.
849         (var_set_create_from_array) Don't create `longname_tab'.
850
851         * vector.c: (cmd_vector) Use strcasecmp() instead of strcmp().
852         Support long names.
853
854         * expressions/parse.c: (word_matches) Use mm_case_compare()
855         instead of memcmp().
856         (compare_strings) New function.
857         (lookup_function) Use compare_strings() instead of strcmp().
858         
859 Sun May  1 22:07:43 2005  Ben Pfaff  <blp@gnu.org>
860
861         * algorithm.c: (move_element) New function.
862
863 Sun May  1 22:05:35 2005  Ben Pfaff  <blp@gnu.org>
864
865         * aggregate.c: (parse_aggregate_functions) Always initialize
866         destvar.
867
868 Sun May  1 22:03:47 2005  Ben Pfaff  <blp@gnu.org>
869
870         * aggregate.c: (cmd_aggregate) Use dict_clone_var_assert().
871
872         * dictionary.c: (dict_clone) Ditto.
873         (dict_clone_var_assert) New function.
874
875         * get.c: (mtf_merge_dictionary) Use dict_clone_var_assert().
876
877 Sun May  1 15:05:54 WST 2005 John Darrington <john@darrington.wattle.id.au>
878
879         * error.c: Added a string for the compiler version to the
880         request_bug_report_and_abort function.
881
882         * groff_font.c, font.c: Removed manpage(1) style references from 
883         comments, because RMS frowns upon them.
884
885 Thu Apr 28 18:52:06 2005  Ben Pfaff  <blp@gnu.org>
886
887         * expressions/parse.c: Improve previous fix for bug 12858 (LAG).
888
889 Fri Apr 29 09:28:00 WST 2005 John Darrington <john@darrington.wattle.id.au>
890
891         * expressions/parse.c: Added handler for OP_LAG_Vn and OP_LAG_Vs.  
892         Fixed bug [#12858] .
893
894 Wed Apr 27 12:42:34 WST 2005 John Darrington <john@darrington.wattle.id.au>
895
896         * loop.c recode.c repeat.c: Fixed a couple of instances of SHORT_NAME_LEN 
897         which should be LONG_NAME_LEN
898
899 Wed Apr 27 07:43:50 WST 2005 John Darrington <john@darrington.wattle.id.au>
900
901         * command.def echo.c:  Added the ECHO command.
902
903 Mon Apr 25 22:55:59 2005  Ben Pfaff  <blp@gnu.org>
904
905         Finish fixing MATCH FILES (bug 11677).
906
907         * get.c: (trim_dictionary) Rewrite in terms of drop_variables(),
908         keep_variables(), rename_variables().
909         (drop_variables) New function.
910         (keep_variables) New function.
911         (struct mtf_file) Rename `in' to `in_name'.  Add `in_var'.
912         (cmd_match_files) Deal with in_var.  Use drop_variables(),
913         keep_variables().  When IN is specified, require BY.  Set master
914         variables after master dictionary is complete.  Add IN variables
915         after master dictionary is complete.
916         (mtf_free_file) Free `in_name'.
917         (mtf_delete_file_in_place) Set in_var value to 0.
918         (mtf_read_nonactive_records)  Rephrase.
919         (mtf_processing) Support IN.  Rephrase.  Fix bugs.
920         (mtf_merge_dictionary) Don't set master variables; we do that
921         later now.
922         (get_master) Don't insist that there's a master variable.
923         
924 Mon Apr 25 22:55:22 2005  Ben Pfaff  <blp@gnu.org>
925
926         Kluge to make some variable renaming sort of work.
927         Needs real fix.
928
929         * dictionary.c: (dict_rename_var) Call dict_add_longvar_entry().
930
931 Mon Apr 25 22:52:28 2005  Ben Pfaff  <blp@gnu.org>
932
933         Add functions for comparing sets of variables between cases.
934         Use the functions.
935
936         * case.c: (case_compare) New function.
937         (case_compare_2dict) New function.
938         
939         * aggregate.c: (struct agr_proc) Remove `prev_break' member.  Add
940         `break_case'.
941         (cmd_aggregate) Nullify break_case.  Don't call
942         initialize_aggregate_info().
943         (agr_destroy) Destroy break_case.
944         (aggregate_single_case) Rewrite.  Use case_compare().
945         (dump_aggregate_info) Copy from break_case into output.
946         (initialize_aggregate_info) Copy break_case from input.
947
948         * get.c: (mtf_compare_BY_values) Use case_compare_2dict().
949
950         * vfm.c: (equal_splits) Use case_compare().
951
952 Sat Apr 23 17:01:04 WST 2005 John Darrington <john@darrington.wattle.id.au>
953
954         * dictionary.c vars-prs.c sfm-write.c: Fixed some memory leaks
955
956 Sun Apr 17 23:08:15 2005  Ben Pfaff  <blp@gnu.org>
957
958         Start work on fixing MATCH FILES.
959
960         * get.c: (enum operation) Remove OP_MATCH.
961         (trim_dictionary) Change return value to bool.  Don't support
962         OP_MATCH.
963         (struct mtf_file) Remove `first', `last' members.
964         (struct mtf_proc) Add `first', `last' members.  Change mtf_case
965         from `struct ccase *' to `struct ccase'.  Remove `by' member.
966         (cmd_match_files) Essentially rewrite.
967         (mtf_free) Don't free `by' member.  Destroy `mtf_case' member.
968         (mtf_read_nonactive_records) mtf_ parameter is not unused.
969         (mtf_processing) Ditto.  Also rephrase some code.
970         (mtf_merge_dictionary) Rewrite for easy comprehension.  
971
972 Sun Apr 17 23:06:00 2005  Ben Pfaff  <blp@gnu.org>
973
974         * matrix-data.c: (wr_output_data) [DEBUGGING] Fix compilation
975         error.
976
977         * q2c.c: (dump_token) [DEBUGGING] Fix compilation error.
978         
979 Thu Apr 14 2005 John Darrington
980
981         * var-display.c: New file.
982
983         * format.h var.h sfm-read.c sfm-write.c dictionary.c :  Added 
984           display_width, measure and alignment parameters to variables.
985
986         * aggregate.c command.def compute.c count.c data-list.c descript.c
987           dictionary.c dictionary.h expr-prs.c file-type.c flip.c get.c 
988           lexer.c lexer.h loop.c modify-vars.c pfm-read.c recode.c repeat.c 
989           sfm-read.c sfm-write.c sfm-write.h sfmP.h val-labs.c val.h var.h 
990           vars-prs.c vector.c :  
991               - Replaced literal constants representing maximum variable name 
992                 length with macro definitions. 
993               - Added support for long variable names.
994               - Changed lexer such that it no longer makes tokens upper
995                 case, but relies upon case insensitive behaviour of commands.
996
997 Mon Apr  4 22:27:34 2005  Ben Pfaff  <blp@gnu.org>
998
999         * aggregate.c: (parse_aggregate_functions) If dict_create_var()
1000         fails, don't dereference the resulting null pointer (bug 12427).
1001         Also, fix double free error.
1002
1003 Sat Mar 19 23:06:02 2005  Ben Pfaff  <blp@gnu.org>
1004
1005         * aggregate.c: (parse_aggregate_functions) Fix N_NO_VARS format.
1006         (accumulate_aggregate_info) Set int1 to 1 for SUM.
1007         (dump_aggregate_info) Only make SUM non-missing if there was at
1008         least one variate.
1009
1010 Sat Mar 19 14:48:19 2005  Ben Pfaff  <blp@gnu.org>
1011
1012         * aggregate.c: (dump_aggregate_info) Properly test whether the
1013         destination variable is numeric, when making the result
1014         system-missing for columnwise missing values.
1015
1016 Mon Mar 14 21:52:34 2005  Ben Pfaff  <blp@gnu.org>
1017
1018         * misc.h: Remove GCC specializations.
1019
1020 Mon Mar 14 21:07:23 2005  Ben Pfaff  <blp@gnu.org>
1021
1022         Make sort stable (bug 12313).
1023         
1024         * sort.c: Don't need to include some headers anymore.
1025         (static var min_buffers) New variable.
1026         (static var max_buffers) New variable.
1027         (static var allow_internal_sort) New variable.
1028         (cmd_sort_cases) Add test mode.
1029         (sort_execute) Rephrase.
1030         (do_internal_sort) Don't try internal sorting if
1031         allow_internal_sort is set.
1032         (struct external_sort) Renamed `initial_runs' to `runs' and
1033         updated all references.
1034         (macro MIN_BUFFER_TOTAL_SIZE_RECS) Removed.
1035         (macro MIN_BUFFER_SIZE_BYTES) Removed.
1036         (macro MIN_BUFFER_SIZE_RECS) Removed.
1037         (compare_initial_runs) Removed.
1038         (struct record_run) Add member `idx'.
1039         (write_initial_runs) Pass increasing values to process_case() as
1040         index.
1041         (process_case) Add `idx' parameter and use it to initialize new
1042         `idx' member.
1043         (allocate_cases) Limit allocated buffers to max_buffers.
1044         (compare_record_run) Use new `idx' member for last resort
1045         comparison, for stability.
1046         (end_run) Call casefile_sleep() on irs->casefile, to prevent
1047         running out of file descriptors.
1048         (struct merge_state) Removed.
1049         (merge) Don't need to allocate cases.  Always use MAX_MERGE_ORDER
1050         unless we have fewer runs left.  Always merge consecutive runs,
1051         for stability.  Return the final run.
1052         (mod) Removed.
1053         (choose_merge) New function.
1054         (merge_once) Rewritten.
1055
1056 Mon Mar 14 21:05:42 2005  Ben Pfaff  <blp@gnu.org>
1057
1058         * cmdline.c: (static var testing_mode) Move into
1059         parse_command_line().
1060         
1061 Mon Mar 14 21:05:13 2005  Ben Pfaff  <blp@gnu.org>
1062
1063         * algorithm.c: (remove_range) New function.
1064         (remove_element) New function.
1065
1066         * dictionary.c: (dict_delete_var) Use remove_element().
1067
1068         * flip.c: (cmd_flip) Ditto.
1069
1070 Sun Mar 13 22:52:05 2005  Ben Pfaff  <blp@gnu.org>
1071
1072         * file-handle.q: (struct file_handle) `open_mode' should not be
1073         const.
1074         
1075 Sun Mar 13 22:40:54 2005  Ben Pfaff  <blp@gnu.org>
1076
1077         First phase of making SORT CASES stable (bug 12313).
1078
1079         * sort.c: (struct indexed_case) New structure.
1080         (do_internal_sort) Rewrite to make internal sorting stable.
1081         (compare_case_dblptrs) Removed.
1082         (compare_indexed_cases) New function.
1083
1084 Sun Mar 13 22:38:40 2005  Ben Pfaff  <blp@gnu.org>
1085
1086         Clean-ups.
1087
1088         * casefile.c: (casereader_read_xfer_assert) New function.
1089
1090         * dictionary.c: (dict_compact_case) New function.
1091
1092         * flip.c: (struct flip_pgm) New member idx_to_fv.
1093         (cmd_flip) Initialize idx_to_fv member.
1094         (destroy_flip_pgm) Free idx_to_fv member.
1095         (flip_sink_write) Use struct flip_pgm member instead of case_sink
1096         member.
1097         (flip_sink_write) Ditto.
1098
1099         * vfm.c: (write_case) Use dict_compact_case() instead of
1100         compact_case().
1101         (compact_case) Removed.
1102         (storage_source_create) Removed `dict' parameter.  All references
1103         updated.
1104
1105         * vfm.h: (struct case_source) Removed `value_cnt' member.  All
1106         references removed.
1107         (struct case_sink) Removed `dict', `idx_to_fv' members.  All
1108         references removed.
1109
1110 Sun Mar 13 22:35:55 2005  Ben Pfaff  <blp@gnu.org>
1111
1112         More AGGREGATE fixes.
1113
1114         * aggregate.c: (accumulate_aggregate_info) Implement NMISS and
1115         NUMISS for strings.  Fix FOUT, POUT, FGT, FLT, FIN, FOUT for
1116         strings.
1117         (initialize_aggregate_info) Fix initialization for MIN, MAX for
1118         strings.
1119
1120 Sat Mar 12 23:26:21 2005  Ben Pfaff  <blp@gnu.org>
1121
1122         Start work on testing and debugging AGGREGATE.
1123
1124         * aggregate.c: (cmd_aggregate) Use discrete bool variables instead
1125         of a bit-map.  Require proper subcommand ordering.  Make OUTFILE
1126         subcommand mandatory.
1127         (parse_aggregate_functions) Check that PIN, POUT, FIN, FOUT
1128         functions' arguments are in the correct order and swap them if
1129         not.
1130         (accumulate_aggregate_info) Make SUM include weights.  Add various
1131         string functions.
1132         (dump_aggregate_info) Add various string functions.
1133         (initialize_aggregate_info) Initialize int1 for MIN, MAX.
1134
1135         * sort.c: (sort_parse_criteria) Add parameter for returning
1136         whether any directions were specified.  All callers updated.
1137
1138 Sun Mar 13 14:54:27 WST 2005 John Darrington <john@darrington.wattle.id.au>
1139
1140         * t-test.q: Fixed erroneous logic in compare_group_binary.
1141
1142 Sat Mar 12 13:29:21 2005  Ben Pfaff  <blp@gnu.org>
1143
1144         * split-file.c: (cmd_split_file) Ignore LAYERED and SEPARATE
1145         keywords (bug 11628).
1146
1147 Sat Mar 12 13:17:12 2005  Ben Pfaff  <blp@gnu.org>
1148
1149         * vfm.c: (procedure_with_splits) Fix bug 11492: end_func() must be
1150         called *before* close_active_file().
1151
1152 Sat Mar 12 12:20:57 2005  Ben Pfaff  <blp@gnu.org>
1153
1154         * file-handle.q: (struct file_handle) Change open_mode from
1155         character pointer to 3-char array, for safety.  Updated all
1156         references.
1157
1158 Sat Mar 12 12:15:49 2005  Ben Pfaff  <blp@gnu.org>
1159
1160         Thanks to Ben Kujala <bkujala@oregonchildcare.org> for reporting
1161         these bugs.
1162         
1163         * pfm-read.c: (read_header) Improve error message for many cases
1164         in which the input is not actually a portable file.
1165
1166         * file-handle.q: (fh_open) When we give an error message, actually
1167         return NULL.
1168
1169 Fri Mar 11 11:50:30 2005  Ben Pfaff  <blp@gnu.org>
1170
1171         * format.c: (check_common_specifier) New function for checks
1172         common to check_input_specifier() and check_output_specifier().
1173         (check_input_specifier) Use check_common_specifier().
1174         (check_output_specifier) Use check_common_specifier().
1175         (check_string_specifier) Removed.
1176         (check_specifier_type) New function.
1177         (check_specifier_width) New function.
1178         (get_format_var_width) Fix bug.
1179
1180         * formats.c: (internal_cmd_formats) Only accept numeric variables.
1181
1182         * lexer.c: (check_id) Rename lex_id_to_token(), make public,
1183         update all references.  Make case-insensitive.
1184
1185         * pfm-read.c: Essentially rewrite the whole file.  Now much
1186         cleaner.
1187
1188         * print.c: (check_string_width) New function.
1189         (fixed_parse_compatible) Use check_string_width(),
1190         check_specifier_type().
1191         (dump_fmt_list) Ditto.
1192
1193         * str.c: (st_trim_copy) New function.
1194         (st_uppercase) New function.
1195
1196         * vars-atr.c: (var_is_valid_name) New function.
1197         
1198         * expressions/parse.c: (type_coercion_core) Use
1199         check_specifier_type().
1200         
1201 Fri Mar 11 11:31:24 2005  Ben Pfaff  <blp@gnu.org>
1202
1203         * expressions/evaluate.c: (cmd_debug_evaluate) Fix memory leaks.
1204
1205         * expressions/parse.c: (no_match) Ditto.
1206
1207 Wed Mar  9 09:54:27 2005  Ben Pfaff  <blp@gnu.org>
1208
1209         * Makefile.am: (pspp_LDADD) Add libgsl-extras.a.
1210
1211         * expressions/helpers.c: (struct func_params) Removed.
1212         (generalized_idf) Removed.
1213         (cdf_beta) Removed.
1214         (idf_beta) Removed.
1215         (idf_fdist) Use gslextras_cdf_beta_Pinv() instead of idf_beta().
1216
1217         * expressions/operations.def: Implement IDF.BETA, CDF.BINOM,
1218         CDF.GEOM, CDF.HYPER, CDF.NEGBIN, CDF.POISSON using gsl-extras.
1219         Implement SIG.F, which I had overlooked previously.
1220
1221 Tue Mar  8 12:47:53 WST 2005 John Darrington <john@darrington.wattle.id.au>
1222
1223         * command.c command.def glob.[ch] cmdline.c: Made DEBUG cmds
1224         available only in testing mode.
1225
1226 Sun Mar  6 23:25:40 2005  Ben Pfaff  <blp@gnu.org>
1227
1228         * data-in.c: Use `bool' throughout, where relevant.
1229
1230 Sun Mar  6 19:52:22 2005  Ben Pfaff  <blp@gnu.org>
1231
1232         DATA LIST with free-field formats should not have implied decimal
1233         places (bug 12035).  Also clean up data-in.c a bit.
1234
1235         * data-in.h: (enum) Add DI_IMPLIED_DECIMALS.
1236
1237         * data-in.c: (apply_implied_decimals) New function.
1238         (parse_numeric) Don't adjust exponent if DI_IMPLIED_DECIMALS not
1239         set.  Also, get rid of gotos.
1240         (parse_Z) Use apply_implied_decimals() if the field doesn't
1241         contain a decimal point.
1242         (parse_N) Use apply_implied_decimals().
1243         (parse_IB) Ditto.
1244         (parse_PIB) Ditto.
1245         (parse_P) Ditto.
1246         (parse_PK) Ditto.
1247         (to_roman) Removed.
1248         (parse_enum) New function.
1249         (macro CHAR_IS_ROMAN) Removed.
1250         (macro ROMAN_VALUE) Removed.
1251         (parse_month) Use parse_enum().
1252         (parse_weekday) Use parse_enum().
1253         (parse_DATETIME) Use long for weekday.
1254
1255         * data-list.c: (read_from_data_list_fixed) Use
1256         DI_IMPLIED_DECIMALS.
1257
1258 Sun Mar  6 17:07:20 2005  Ben Pfaff  <blp@gnu.org>
1259
1260         When the lexer sees something like `-5' in the input, it has to
1261         decide whether it's a negative numeric constant token or a '-'
1262         token followed by a positive numeric constant token.  It always
1263         decides on the former, and then the parser can call
1264         lex_negative_to_dash() if it wants the latter.  However, this
1265         doesn't work for the case of `-0', because negative zero is
1266         (portably) indistinguishable from positive zero.  So now we divide
1267         T_NUM into two tokens, T_POS_NUM and T_NEG_NUM, to make the
1268         distinction clear.  This requires a little bit of extra effort,
1269         because there were several references to T_NUM in the code base.
1270         
1271         * lexer.c: (lex_get) Use T_NEG_NUM and T_POS_NUM to distinguish
1272         positive and negative numeric constants.
1273         (lex_double_p) Renamed lex_is_number().  Changed return type to
1274         bool.  Updated all relevant references to T_NUM to instead use
1275         this function.
1276         (lex_double) Renamed lex_number().  All references updated.
1277         (lex_integer_p) Renamed lex_is_integer().  Changed return type to
1278         bool.  All references updated.
1279         (lex_token_representation) Understand T_NEG_NUM and T_POS_NUM.
1280         (lex_negative_to_dash) Ditto.
1281         (dump_token) Ditto.
1282         
1283         * lexer.h: (enum) Add T_POS_NUM, T_NEG_NUM.  Remove T_NUM.
1284
1285 Sun Mar  6 22:09:20 2005  Ben Pfaff  <blp@gnu.org>
1286
1287         * expressions/operations.def: (NUMBER) Use DI_IMPLIED_DECIMALS.
1288
1289 Sun Mar  6 19:33:24 2005  Ben Pfaff  <blp@gnu.org>
1290
1291         * expressions/operations.def: (VEC_ELEM_NUM) Treat user-missing
1292         values as system-missing.
1293
1294         * expressions/parse.c: (parse_vector_element) Fix order of
1295         arguments in call to expr_allocate_binary().
1296
1297 Sun Mar  6 17:51:05 2005  Ben Pfaff  <blp@gnu.org>
1298
1299         * expressions/optimize.c: (optimize_tree) Fix optimization bug for
1300         x**2.
1301
1302         * expressions/parse.c: (type_coercion_core) Set *node to NULL on
1303         failure, as indicated by function comment.
1304         (parse_binary_operators) Always return NULL on type_coercion()
1305         failure.  Should have been doing this anyway, but bug in
1306         type_coercion_core() filtered through.
1307         (parse_add) Fix typo in user message.
1308         (parse_primary) Understand T_NEG_NUM and T_POS_NUM.
1309
1310 Sun Mar  6 10:47:13 2005  Ben Pfaff  <blp@gnu.org>
1311
1312         * expressions/operations.def: Add VALUE function.
1313
1314         * expressions/parse.c: (parse_function) Need an unary composite
1315         node for variables in A TO B, not a variable node.  Use
1316         allocate_unary_variable().
1317         (parse_primary) Use allocate_unary_variable().
1318         (allocate_unary_variable) New function.
1319
1320 Thu Mar  3 23:53:32 2005  Ben Pfaff  <blp@gnu.org>
1321
1322         * expressions/PSPP_expressions.pm: Renamed it back to generate.pl
1323         but fixed the real problem that was preventing the build from a
1324         separate directory.  I liked it my way better ;-)
1325         
1326 Thu Mar  3 23:17:51 2005  Ben Pfaff  <blp@gnu.org>
1327
1328         * expressions/parse.c: (expr_parse) Fix parameter type.  Thanks to
1329         John Darrington <john@darrington.wattle.id.au> for reporting this
1330         bug.
1331
1332 Thu Mar  3 22:10:25 WST 2005 John Darrington <john@darrington.wattle.id.au>
1333
1334         * expressions/Makefile.am expressions/evaluate.h.pl
1335           expressions/evaluate.inc.pl expressions/operations.h.pl
1336           expressions/optimize.inc.pl expressions/parse.inc.p:
1337
1338           Renamed generate.pl to PSPP_expressions.pm and adjusted *.pl
1339           to suit. 
1340
1341           Fixed everything so that it can be built from an arbitrary
1342           directory.
1343         
1344 Thu Mar  3 22:08:35 WST 2005 John Darrington <john@darrington.wattle.id.au>
1345
1346         * Makefile.am : Fixed up CLEANFILES target.
1347
1348 Mon Feb 28 23:49:56 2005  Ben Pfaff  <blp@gnu.org>
1349
1350         * str.h: Changed `struct len_string' to `struct fixed_string', a
1351         more accurate name.  Updated all references.
1352
1353 Mon Feb 28 23:35:30 2005  Ben Pfaff  <blp@gnu.org>
1354
1355         Redo calendar support.  Should now be bug-for-bug compatible.
1356         
1357         * calendar.c: New file.
1358
1359         * calendar.h: New file.
1360
1361         * data-in.c: Use new calendar functions.
1362         (parse_sign) Change sense of return value.
1363         (calendar_error) New function.
1364         (ymd_to_ofs) New function.
1365         (ymd_to_date) New function.
1366         (parse_DATE) Use new function.
1367         (parse_ADATE) Ditto.
1368         (parse_EDATE) Ditto.
1369         (parse_SDATE) Ditto.
1370         (parse_JDATE) Ditto.
1371         (parse_QYR) Ditto.
1372         (parse_MOYR) Ditto.
1373         (parse_WKYR) Ditto.
1374         (parse_TIME) Ditto.
1375         (parse_DTIME) Ditto.
1376         (parse_DATETIME) Ditto.
1377
1378         * data-out.c: (convert_date) Use new calendar functions.
1379
1380         * error.c: (err_vmsg) Changed interface to be more sensible.
1381         Updated all callers.
1382         (dump_message) Don't double new-lines (why did we do this
1383         anyway?).
1384
1385 Mon Feb 28 23:30:25 2005  Ben Pfaff  <blp@gnu.org>
1386
1387         * sfmP.h: (macro flt64) Moved here from pref.h.orig.
1388         (macro FLT64_MAX) Moved here from pref.h.orig.
1389
1390 Mon Feb 28 23:28:01 2005  Ben Pfaff  <blp@gnu.org>
1391
1392         * set.q: Support SET EPOCH.
1393         (static var set_epoch) New var.
1394         (aux_stc_custom_epoch) New function.
1395         (stc_custom_epoch) New function.
1396         (get_epoch) New function.
1397         (stc_custom_pager) [USE_INTERNAL_PAGER] Fix bug.
1398
1399         * format.c: Make it possible just to check whether a specifier is
1400         valid without emitting an error message.
1401         (parse_format_specifier_name) Change interface, update all
1402         callers.
1403         (check_input_specifier) Ditto.
1404         (check_output_specifier) Ditto.
1405         (parse_format_specifier) Ditto.
1406
1407 Mon Feb 28 23:24:08 2005  Ben Pfaff  <blp@gnu.org>
1408
1409         * command.def: Add DEBUG POOL.
1410
1411         * pool.c: (pool_destroy) Fix bug in deleting this pool from its
1412         parent.
1413         (pool_clear) Properly account for size of pool gizmo.
1414         (pool_realloc) Ditto.
1415         (pool_clone) New function.
1416
1417         * pool.h: Mark our allocation functions MALLOC_LIKE.
1418
1419 Mon Feb 28 23:21:26 2005  Ben Pfaff  <blp@gnu.org>
1420
1421         * Makefile.am: Move many definitions into new top-level
1422         Make.build.  Add expressions to SUBDIRS.  Add calendar.c,
1423         calendar.h.  Remove expr-evl.c, expr-opt.c expr-prs.c, expr.h,
1424         exprP.h, expr.def.
1425
1426         * case.c: (case_resize) New function.
1427         (case_swap) New function.
1428
1429         * casefile.c: Include mkfile.h.
1430
1431 Fri Feb 25 21:11:35 WST 2005 John Darrington <john@darrington.wattle.id.au>
1432
1433         * sfm-read.c: Fixed a buglet which caused a crash when trying
1434         to read a non-existent file.
1435
1436 Sun Feb 13 16:11:13 2005  Ben Pfaff  <blp@gnu.org>
1437
1438         Fix bug 11955.
1439
1440         * aggregate.c: (parse_aggregate_functions) Code cleanup.
1441         Important part: get rid of spurious copying of function->format to
1442         destvar->print and destvar->write.
1443
1444 Fri Feb 11 00:08:36 2005  Ben Pfaff  <blp@gnu.org>
1445
1446         Fix bug 11916, which was confusing a variable's `index' member
1447         with the variable's position in a var_set.  Although these are
1448         usually the same, they are not for array `var_set's.
1449         
1450         Took advantage of this bug as an opportunity to clean up and
1451         rewrite parse_var_set_vars().
1452
1453         * vars-prs.c: (parse_vs_variable_idx) New function.
1454         (parse_vs_variable) Reimplement in terms of
1455         parse_vs_variable_idx().
1456         (parse_var_idx_class) New function.
1457         (add_variable) New function.
1458         (add_variables) New function.
1459         (parse_var_set_vars) Rewritten.
1460         (struct var_set) Change `lookup_var' member that returns a
1461         variable into `lookup_var_idx' member that returns an int.
1462         Updated the var set implementations in obvious corresponding ways.
1463         Used compare_var_ptr_names(), hash_var_ptr_name() just added.
1464         
1465 Fri Feb 11 00:06:03 2005  Ben Pfaff  <blp@gnu.org>
1466
1467         Use our global variable compare & hash functions and give them
1468         better names.  Add similar functions for dealing with double
1469         pointers to variables.
1470         
1471         * vars-atr.c: (compare_variables) Renamed compare_var_names().
1472         (hash_variable) Renamed hash_var_name().
1473         (compare_var_ptr_names) New function.
1474         (hash_var_ptr_name) New function.
1475         
1476         * t-test.q: (cmd_t_test) Use global compare_var_names(),
1477         hash_var_name().
1478         (compare_var_name) Removed.
1479         (hash_var_name) Removed.
1480
1481 Fri Feb 11 00:04:39 2005  Ben Pfaff  <blp@gnu.org>
1482
1483         Fix dictionary bug.
1484         
1485         * dictionary.c: (compare_variable_dblptrs) Rename
1486         compare_var_ptrs() and fix it to properly dereference the double
1487         pointers.
1488
1489 Mon Feb  7 09:58:15 WST 2005 John Darrington <john@darrington.wattle.id.au>
1490
1491         crosstabs.q examine.q oneway.q q2c.c:  Added a q2c feature to 
1492         declare subcommands as mandatory.  Closed bug #11843
1493
1494 Sat Feb  5 20:35:10 WST 2005 John Darrington <john@darrington.wattle.id.au>
1495         
1496         * getline.c command.[ch] command.def:  Added (very rudimentary)
1497         support for line  completion when in interactive mode.  Partially 
1498         addresses bug #11693
1499         
1500 Mon Jan 31 09:52:51 WST 2005 John Darrington <john@darrington.wattle.id.au>
1501
1502         * examine.q factor_stats.c oneway.q output.c pfm-read.c: Fixed some
1503         problems revealed by valgrind.
1504
1505
1506 Wed Jan 26 11:44:11 WST 2005 John Darrington <john@darrington.wattle.id.au>
1507
1508         * set.q: Affixed a fix to the previous fix such that we'll be OK now
1509         whether or not PAGER is set.
1510
1511 Wed Jan 26 09:25:54 WST 2005 John Darrington <john@darrington.wattle.id.au>
1512
1513         * set.q: Copied the string produced by getenv("PAGER") thus avoiding
1514         "invalid free" errors.  Hopefully fixes bug #11722
1515
1516         * compute.c expr-prs.c: Check that lvalues are populated before 
1517         attempting to destroy them.  Closes bug #11676
1518
1519 Tue Jan 25 21:01:43 WST 2005 John Darrington <john@darrington.wattle.id.au>
1520
1521         * aggregate.c: Initialised the complete agr_proc structure.
1522         Closes bug #11675
1523
1524
1525 Sun Jan 23 23:02:21 2005  Ben Pfaff  <blp@gnu.org>
1526
1527         * print.c: (print_trns_free) Close the dfm writer if there is one,
1528         fixing a memory leak.
1529
1530 Mon Jan 24 12:24:36 WST 2005 John Darrington <john@darrington.wattle.id.au>
1531
1532         * glob.c oneway.q q2c.c t-test.q vfm.c: Still *more* memory leaks 
1533         fixed.
1534
1535
1536 Fri Jan 21 19:54:14 WST 2005 John Darrington <john@darrington.wattle.id.au>
1537
1538         * linked-list.[ch] Added
1539
1540         * examine.q file-handle.[hq] font.h glob.c groff-font.c postscript.c 
1541           set.q:    Yet more memory leaks
1542
1543 Tue Jan 18 23:12:40 WST 2005 John Darrington <john@darrington.wattle.id.au>
1544
1545         * t-test.q examine.q : More memory leaks fixed.
1546
1547 Tue Jan 18 19:26:59 WST 2005 John Darrington <john@darrington.wattle.id.au>
1548
1549         * examine.q  factor_stats.[ch] get.c pfm-read.c: Plugged numerous
1550         memory leaks.
1551
1552 Mon Jan 10 14:43:45 WST 2005 John Darrington <john@darrington.wattle.id.au>
1553
1554         * ascii.c cartesian.c casefile.c chart.h devind.c 
1555           examine.q frequencies.q
1556           html.c output.h piechart.c plot-chart.c plot-hist.c
1557
1558           Integrated the chart rendering into the output stream
1559           (currently only works for html).
1560           
1561           Removed gratuitous use of ifndef NO_CHARTS, and replaced with
1562           dummy-chart.c for compiling without charts.
1563
1564         * mkfile.[ch] Created.  
1565
1566         * som.[ch] tab.[ch]: Changed name of som_table to som_entity
1567         Added type element so we can tell if it's a chart or a table.
1568
1569         * chart.h examine.q piechart.c plot-chart.c plot-hist.c: changed the 
1570         API of charts to be more like that of tables.
1571
1572 Thu Jan 13 21:00:02 WST 2005 John Darrington <john@darrington.wattle.id.au>
1573
1574         * casefile.c main.c: Moved the SIGINT handler from casefile.c to
1575         main.c. Removed the handler for SIGQUIT.
1576
1577 Mon Jan 10 14:43:45 WST 2005 John Darrington <john@darrington.wattle.id.au>
1578
1579         * casefile.c: Added a signal handler to delete temp files on 
1580         SIGINT and SIGQUIT
1581
1582         * permissions.c Inhibited the PERMISSIONS command when SAFER is on.
1583
1584         * command.def Added a lot more unimplemented commands.
1585
1586         * copyleft.[ch] cmdline.c Moved legal information to copyleft.c
1587
1588 Sat Jan  8 23:58:34 2005  Ben Pfaff  <blp@gnu.org>
1589
1590         * sort.c: (compare_initial_runs) Needed additional level of
1591         dereferencing.
1592         (merge_once) Fix plenty of stupid mistakes.
1593
1594 Sat Jan  8 23:55:27 2005  Ben Pfaff  <blp@gnu.org>
1595
1596         * casefile.c: (casefile_sleep) Need to flush_buffer() after
1597         calling casefile_to_disk() or we will lose the last block in the
1598         file if the casefile started out as disk-based.
1599         (casefile_get_reader) Initialize reader->destructive to 0.
1600         (cmd_debug_casefile) Add new test pattern.
1601         (test_casefile) Define new test pattern to make sure
1602         casefile_sleep() works properly.
1603
1604 Fri Jan  7 08:00:05 WST 2005 John Darrington <john@darrington.wattle.id.au>
1605
1606         * Makefile.am chart.[ch]  histogram.[ch] piechart.c (Modified);
1607           plot-hist.c plot-chart.c (Added) Reorganised these files in an
1608           attempt to seperate the creation and processing of charts from their
1609           actuall renedering.
1610
1611         * examine.q frequencies.q generated charts conditional upon the NO_CHARTS
1612           macro.
1613
1614 Thu Jan  6 18:48:58 WST 2005 John Darrington <john@darrington.wattle.id.au>
1615
1616         * main.c Added a signal handler for SIGFPE
1617
1618         * sort.c Somewhat more robust fix to the previous entry.
1619
1620 Wed Jan  5 21:23:31 2005  Ben Pfaff  <blp@gnu.org>
1621
1622         * sort.c: (merge) Fix assertion for proper Huffman merge pattern:
1623         0 == 1 modulo 1.  See Knuth 5.4.9 (vol. 3, 2nd ed.,
1624         pp. 361).  Thanks to John Darrington <john@cellform.com.au> for
1625         reporting the bug.
1626
1627 Wed Jan  5 22:42:26 WST 2005 John Darrington <john@darrington.wattle.id.au>
1628
1629         * case.h Fixed bug # 11307
1630         
1631 Wed Jan  5 08:30:48 WST 2005 John Darrington <john@darrington.wattle.id.au>
1632
1633         * val-labs.c Fixed bug which caused a crash if VALUE LABELS had
1634         a trailing slash.
1635
1636 Mon Jan  3 17:44:37 2005  Ben Pfaff  <blp@gnu.org>
1637
1638         * pfm-read.c: (read_variables) Remove direct manipulation of
1639         v->aux, which is no longer needed.  Fixes bug 11483.
1640
1641 Sat Jan  1 19:01:16 WST 2005 John Darrington <john@darrington.wattle.id.au>
1642
1643         * data-list.c Fixed a bug in parsing delimiters.
1644
1645         * group.c vars-atr.c Fixed buglet in hash/compare functions for alpha
1646         values.
1647
1648         * percentiles.c Properly handled calculation of Tukey hinges where
1649         the number of data is small.
1650
1651         * oneway.q Used the generic value_to_string function for independent
1652         variable instead of trying to do it ourselves.
1653
1654         * box-whisker.c Fixed a buglet which caused a crash if the number of
1655         data was zero
1656
1657
1658 Fri Dec 31 16:47:45 WST 2004 John Darrington <john@darrington.wattle.id.au>
1659
1660         * examine.q box-whisker.c chart.h Implemented boxplots in EXAMINE
1661
1662         * percentiles.c Fixed some bugs when calculating percentiles when
1663         there's a small number of cases.
1664
1665 Wed Dec 29 08:18:08 WST 2004 John Darrington <john@darrington.wattle.id.au>
1666
1667         * percentiles.[ch] Added. Calculates percentiles and Tukey hinges
1668
1669         * examine.q factor_stats.[ch]  Added calculation of percentiles
1670
1671 Fri Dec 24 15:09:11 WST 2004 John Darrington <john@darrington.wattle.id.au>
1672
1673         * t-test.q Fixed bug #11227 Made t-test work when the independent
1674         variable is alpha
1675
1676 Sat Dec 11 11:43:45 WST 2004 John Darrington <john@darrington.wattle.id.au>
1677
1678         * factor_stats.c Fixed calculation of trimmed mean under various
1679         special conditions.
1680
1681 Sat Dec  4 17:14:45 WST 2004 John Darrington <john@darrington.wattle.id.au>
1682
1683         * histogram.c chart.[ch] factor_stats.c frequencies.q
1684
1685         Added code to calculate sensible histogram ranges and limits.
1686
1687 Thu Dec  2 13:37:43 WST 2004 John Darrington <john@darrington.wattle.id.au>
1688
1689         * chart.h Updated to reflect many API changes.
1690
1691         * cartesian.c chart.c Moved the definitions of chart_write_{xy}scale from 
1692         cartesian.c and into chart.c
1693
1694         * factorstats.[ch] Added the histogram calculations
1695
1696         * casefile.c Removed an unused variable.
1697
1698         * frequencies.q examine.q histogram.c  Reworked the API for 
1699         histograms.
1700
1701         * piechart.c  Revised the API for piecharts.
1702
1703         * var.h  Moved the definitions of freq_tab and freq out of var.h
1704         and into frequencies.q where they belong.
1705         
1706 Tue Nov 30 21:10:20 2004  Ben Pfaff  <blp@gnu.org>
1707
1708         * flip.c: (flip_file) Check for off_t separately from fseeko(),
1709         using AC_TYPE_OFF_T.
1710
1711 Tue Nov 30 08:47:41 2004  Ben Pfaff  <blp@gnu.org>
1712
1713         * flip.c: (flip_file) If fseeko() is not available, use long int
1714         for off_t.  Thanks to "Marshall DeBerry" <mdb@radix.net> for
1715         reporting the problem.
1716
1717 Mon Nov 29 12:20:59 WST 2004 John Darrington <john@darrington.wattle.id.au>
1718
1719         * examine.q factor_stats.[ch] Changed stderr to se_mean to avoid
1720         conflict with stdio.
1721
1722 Sun Nov 21 10:32:41 WST 2004 John Darrington <john@darrington.wattle.id.au>
1723
1724         * var-labs.c (var_to_string) Now returns null if the variable is null
1725
1726         * value-labels.c (value_to_string) Made it return null if either the 
1727         value or the variable is null.
1728
1729         * hash.c (hsh_clear) Fixed a buglet.
1730
1731         * examine.q  factor_stats.[ch] Largely  rewrote, because I'd started 
1732         with  the wrong model.
1733
1734         * casefile.[ch] Added a function to return the casereader.case_idx 
1735         member
1736
1737         * examine.q  Implemented the extreme values results.
1738
1739 John Darrington <john@darrington.wattle.id.au>
1740
1741         * settings.h set.c glob.[ch] frequencies.q q2c.c error.c lexer.[ch] 
1742           output.[ch] getline.c 
1743
1744           Plugged some memory leaks
1745
1746 Mon Nov 15 23:47:40 2004  Ben Pfaff  <blp@gnu.org>
1747
1748         Adopt GSL random number generators, paving the way for providing
1749         the complete suite of random number generators on expressions.
1750         
1751         * Makefile.am: Remove random.c, random.h.
1752
1753         * random.c: Removed.
1754
1755         * random.h: Removed.
1756
1757         * algorithm.c: (algo_default_random) Use GSL functions.
1758
1759         * casefile.c: (test_casefile) Use GSL RNG functions.
1760
1761         * expr-evl.c: (expr_evaluate) Use GSL RNG functions for OP_NORMAL,
1762         OP_UNIFORM.
1763
1764         * sample.c: (cmd_sample) Use GSL RNG functions.
1765         (sample_trns_proc) Ditto.
1766
1767         * set.q: (static var set_seed) Removed.
1768         (static var seed_flag) Removed.
1769         (static var rng) New variable.
1770         (aux_stc_custom_seed) No seed value anymore, don't print anything.
1771         (stc_custom_seed) Use new seed functions.
1772         (seed_is_set) Removed.
1773         (get_rng) New function that composes the entire external
1774         interface.
1775         (set_rng) New function.
1776         (random_seed) New function.
1777
1778 Mon Nov 15 22:08:25 2004  Ben Pfaff  <blp@gnu.org>
1779
1780         * expr-evl.c: (expr_evaluate) Fix XDATE.JDAY formula.  Thanks to
1781         John Darrington <john@darrington.wattle.id.au> for reporting this
1782         bug.
1783
1784 Tue Nov 16 13:19:18 WST 2004 John Darrington <john@darrington.wattle.id.au>
1785
1786         * permissions.c command.def Added the PERMISSIONS command
1787
1788 Mon Nov 15 01:33:32 2004  Ben Pfaff  <blp@gnu.org>
1789
1790         * q2c.c: (dump_header) Don't try to emit #includes at very top of
1791         output file because that will precede #include <config.h>, which
1792         is bad.
1793         (main) Add needed headers to /* (header) */ code.
1794
1795 Mon Nov 15 01:21:36 2004  Ben Pfaff  <blp@gnu.org>
1796
1797         Instead of making system or portable file readers responsible for
1798         dropping and reordering variables, make them read full cases and
1799         let the caller take care of any changes.
1800
1801         * get.c: New "case map" structure to handle this.  Use for GET,
1802         IMPORT, MATCH FILES.  Essentially rewrite the whole file.
1803
1804         * pfm-read.c: (pfm_read_case) Read into provided case.  Signature
1805         changed appropriately.
1806
1807         * sfm-read.c: (sfm_read_case) Ditto.
1808
1809 Mon Nov 15 00:47:45 2004  Ben Pfaff  <blp@gnu.org>
1810
1811         Decided that case_serialize() and case_unserialize() were too
1812         abstract.  Also we need a couple more functions to avoid excessive
1813         copying for data in/out fast paths.
1814
1815         * case.c: (case_serial_size) Removed.
1816         (case_serialize) Rename case_to_values() and make its argument
1817         explicitly an array of union values.
1818         (case_unserialize) Rename case_from_values() and make its argument
1819         explicitly an array of union values.
1820         (case_data_all) New function.
1821         (case_data_all_rw) New function.
1822
1823         * casefile.c: (struct casefile) Change buffer from array of
1824         unsigned char to array of union value for better accuracy.
1825         Redefine buffer_used and buffer_size in terms of values, not
1826         bytes.  Remove case_size because it is now redundant with
1827         value_cnt.  Fix up all references to these members.
1828
1829 Mon Nov 15 00:45:46 2004  Ben Pfaff  <blp@gnu.org>
1830
1831         * barchart.c: (struct subcat) Make `label' member const to silence
1832         GCC warning with -Wwrite-strings.
1833
1834         * cartesian.c: (struct dataset) Ditto.
1835
1836         * case.c: Don't re-define NDEBUG if already defined.
1837         Add lots of comments.
1838
1839         * str.c: Fix includes.
1840
1841         * crosstabs.q: Fix includes.
1842
1843         * examine.q: Fix includes.  Fix GCC warning about unused
1844         variables.
1845         
1846         * frequencies.q: (stat macro) Removed and replaced where used by
1847         its expansion.
1848
1849         * list.q: Fix includes.
1850
1851         * oneway.q: Fix includes.
1852
1853         * piechart.c: Fix includes.  Only define M_PI if not already
1854         defined.
1855
1856         * sfm-read.c: (bswap) New function.
1857         (bswap_int32) Write in terms of bswap.
1858         (bswap_flt64) Ditto.
1859
1860         * str.c: (ds_data) Add external definition here, needed because
1861         str.h has only an `extern inline' version.
1862
1863         * value-labels.c: Fix includes.
1864
1865 Mon Nov 15 00:40:55 2004  Ben Pfaff  <blp@gnu.org>
1866
1867         Instead of providing a system or portable file writer with a raw
1868         case in the format needed for output, provide it with a regular
1869         case.  The writer takes care of any needed translation.
1870
1871         * aggregate.c: Adopt new scheme for AGGREGATE.
1872         (struct agr_proc) sfm_agr_case member removed.
1873         (write_case_to_sfm) Removed because the new interface is easier to
1874         use.
1875
1876         * get.c: Adopt new scheme for SAVE, XSAVE, EXPORT.
1877
1878         * pfm-write.c: Implement new scheme.
1879
1880         * sfm-write.c: Ditto.
1881
1882 Mon Nov 15 00:32:24 2004  Ben Pfaff  <blp@gnu.org>
1883
1884         Instead of treating `struct file_handle' as a class to subclass
1885         into data files, system files, and portable files, instead use it
1886         as a helper that coordinates access.  Now it is opaque, too.
1887
1888         This means that most references to a struct file_handle are now
1889         changed into references to one of struct dfm_reader, struct
1890         dfm_writer, struct sfm_reader, struct sfm_writer, struct
1891         pfm_reader, or struct pfm_writer, according to what's being read
1892         or written.
1893
1894         Most related changes are only worth summarizing briefly.
1895
1896         * dictionary.c: (dict_clear) Destroy aux data in deleted
1897         variables.
1898         (dict_clear_aux) New function.
1899         (dict_create_var) Initialize aux, aux_dtor.
1900         (dict_delete_var) Destroy aux data in deleted variable.
1901
1902         * file-handle.h: (struct fh_ext_class) Removed.
1903         (struct file_handle) Removed.
1904         (fh_init_files) Removed.
1905
1906         * file-handle.q: Changed references to a handle's `private' member
1907         to direct references.
1908         (struct private_file_handle) Renamed file_handle.
1909         Add next, open_cnt, type, open_mode, aux members.
1910         (struct file_handle_list) Removed.
1911         (extern var inline_file) Removed.
1912         (static var file_handles) Changed from file_handle_list * to
1913         file_handle *.
1914         (create_file_handle) Initialize new members.
1915         (fh_close_handle) Removed.
1916         (mode_name) New function.
1917         (fh_open) New function.
1918         (fh_close) New function.
1919         (fh_parse_file_handle) Renamed fh_parse().
1920
1921         * glob.c: (init_glob) Remove fh_init_files() call.
1922         
1923         * aggregate.c: use sfm_writer.
1924         (create_sysfile) Removed because the new interface is simpler.
1925         
1926         * apply-dict.c: Use sfm_reader.
1927
1928         * data-list.c: Use dfm_reader.
1929
1930         * file-type.c: Use dfm_reader.
1931
1932         * get.c: Use sfm_reader, sfm_writer, pfm_reader, pfm_writer.
1933
1934         * inpt-pgm.c: Use dfm_reader.
1935
1936         * print.c: Use dfm_writer.
1937
1938         * sysfile-info: Use sfm_reader.
1939
1940         * dfm-read.c: Adopt new file handle infrastructure.
1941
1942         * dfm-write.c: Ditto.
1943
1944         * pfm-read.c: Ditto.
1945         
1946         * pfm-write.c: Ditto.
1947
1948         * sfm-read.c: Ditto.
1949
1950         * sfm-write.c: Ditto.
1951         
1952 Mon Nov 15 00:31:44 2004  Ben Pfaff  <blp@gnu.org>
1953
1954         Break dictionary functions into separate header file.
1955
1956         * dictionary.h: New file.
1957
1958         * var.h: Moved dict_*() functions to dictionary.h.
1959
1960 Mon Nov 15 00:30:33 2004  Ben Pfaff  <blp@gnu.org>
1961
1962         Get rid of procedure-specific union in struct variable, using
1963         instead a void * pointer and a destructor function.
1964
1965         Most related changes are only worth brief summaries.
1966
1967         * crosstabs.q: Fix includes.  Use new struct var_range in lieu of
1968         old p.crs member in struct variable.
1969         
1970         * frequencies.q: Fix includes.  Use new struct var_freqs in lieu
1971         of old p.frq member in struct variable.
1972
1973         * histogram.c: (draw_histogram) Takes new freq_tab arg because
1974         it's no longer possible to grab this from var->p.frq.
1975
1976         * piechart.c: (draw_piechart) Ditto.
1977
1978         * group.c: (group_proc_get) New function.
1979
1980         * levene.c: Use group_proc_get() in lieu of old p.grp_data member
1981         in struct variable.
1982
1983         * oneway.q: Ditto.
1984
1985         * t-test.q: Ditto.
1986
1987         * main.c: (execute_command) Clear aux data in default_dict after
1988         each command.  (It's debatable whether this should be done.)
1989
1990         * matrix-data.c: Use new struct mxd_var in lieu of old p.mxd
1991         member in struct variable.
1992
1993         * means.q: Get rid of integer mode, which is not included in
1994         recent SPSS and was the only code that wanted per-variable private
1995         data.
1996
1997         * var.h: (struct crosstab_proc) Removed.
1998         (struct frequencies_proc) Removed.
1999         (struct list_proc) Removed.
2000         (struct get_proc) Removed.
2001         (struct means_proc) Removed.
2002         (struct matrix_data_proc) Removed.
2003         (struct match_files_proc) Removed.
2004         (lots of enums) Removed.
2005         (struct variable) Removed members `p', `get'.  Add member
2006         `aux_dtor'.
2007
2008         * vars-atr.c: (var_attach_aux) New function.
2009         (var_detach_aux) New function.
2010         (var_clear_aux) New function.
2011         (var_dtor_free) New function.
2012         (discard_variables) Use NULL instead of inline_file.
2013
2014 Fri Nov 12 10:07:11 WST 2004 John Darrington <john@darrington.wattle.id.au>
2015
2016         * value-labs.c  Fixed the implmentation of value_to_string, so 
2017         that it properly handles alpha values.
2018
2019         * oneway.q  Changed instances where labels were being probed manually, 
2020         to use the canonical {var,value}_to_string functions
2021
2022 Thu Nov 11 21:01:31 WST 2004 John Darrington <john@darrington.wattle.id.au>
2023
2024         * examine.q cartesian.c chart.[ch]   Added normal and detrended normal
2025         plots.  Changed the API of the cartesian plot to be a much lower level
2026         thing.
2027
2028 Sun Nov  7 17:25:04 WST 2004 John Darrington <john@darrington.wattle.id.au>
2029
2030         * examine.q Added some of the parametric calculations
2031
2032         * factor_stats.[ch]  Created
2033         
2034 Sat Nov  6 21:24:31 WST 2004 John Darrington <john@darrington.wattle.id.au>
2035
2036         * examine.q  Changed the definition of factors to be a composite, and
2037         dealt with the consequences.
2038
2039 Sat Nov  6 20:40:38 WST 2004 John Darrington <john@darrington.wattle.id.au>
2040
2041         * examine.q Fixed problem where examine wasn't dealing properly with 
2042         splits
2043
2044 Sat Nov  6 14:49:47 WST 2004 John Darrington <john@darrington.wattle.id.au>
2045
2046         * oneway.q Fixed problem where oneway wasn't dealing properly with 
2047         splits
2048
2049 Thu Nov  4 11:09:01 WST 2004 John Darrington <john@darrington.wattle.id.au>
2050
2051         * q2c.c examine.q  Fixed a bug (feature?) whereby arrays in the
2052         command which had settings didn't get the appropriate code
2053         generated.
2054
2055         * val.h value-labels.[ch] var-labs.c Added v*to_string functions
2056         to convert variables/values to strings.
2057
2058         * examine.q  Added framework for the EXAMINE command.
2059
2060 Mon Nov  1 12:46:17 WST 2004 John Darrington <john@darrington.wattle.id.au>
2061
2062         * q2c.c frequencies.q set.q t-test.q  Fixed the q2c parsing of DBL 
2063         subcommand types.  Changed frequencies.q to use it rather then the 
2064         custom parser.  Dealt with the consequences.  Added a test for NTILES
2065         subcommand of frequencies.
2066
2067 Sat Oct 30 09:16:29 WST 2004 John Darrington <john@darrington.wattle.id.au>
2068
2069         * oneway.q   Fixed up the behaviour when given missing values
2070
2071         * levene.c oneway.q Fixed a buglet with the levene statistic and
2072         incorporated the levene test into the oneway command.
2073
2074         * group.h  t-test.q  Moved the CMP_EQ and CMP_LE symbols out of 
2075         global scope, since they're only relevant to T-TEST
2076
2077 Fri Oct 29 17:39:03 WST 2004 John Darrington <john@darrington.wattle.id.au>
2078
2079         * group.c group.h group_proc.h levene.c oneway.q t-test.q
2080
2081         Made the t-test more consistent
2082         with the way it handles groups.  That is, it now uses a hash instead
2083         of an array of 2.  Also, made the levene.c file independent of the 
2084         implementation of the t-test.  So now levene should be fine for both
2085         t-test and anova.
2086
2087         * Added an oneway.q file for one way anova
2088
2089 Wed Jun  2 22:08:02 2004  Ben Pfaff  <blp@gnu.org>
2090
2091         * descript.c: (cmd_descriptives) Remove harmless but bogus test in
2092         STATISTICS parsing.
2093
2094 Mon May 31 20:45:24 2004  Ben Pfaff  <blp@gnu.org>
2095
2096         Fix memory leaks.
2097
2098         * data-list.c: (cmd_data_list) Free dls->delims on lossage.
2099         (data_list_trns_free) Free dls->delims.
2100
2101         * t-test.q: (tts_custom_pairs) Free vars.
2102         (ssbox_one_sample_init) Fix tab_vline() argument.
2103         (ssbox_independent_samples_init) Ditto.
2104         (trbox_paired_init) Ditto.
2105         (trbox_one_sample_init) Ditto.
2106
2107 Mon May 31 17:19:27 2004  Ben Pfaff  <blp@gnu.org>
2108
2109         Generalize casefiles to the extent that we can use them for
2110         sorting and other kinds of data transformations.  Change cases to
2111         be copy-on-write to improve memory efficiency in common cases.
2112         Every access to a member of a `struct ccase' was changed to be a
2113         call to a case_*() function, especially case_data(), case_num(),
2114         case_str(), or case_data_rw().  Many instances of a local variable
2115         named "case_num" were changed to "case_idx" as a consequence.
2116         Many `struct ccase *' were changed to actual `struct ccase'
2117         because of copying semantics of cases.  In several places there
2118         was a choice between updating debug code to work with the new ADTs
2119         or just deleting it because it was useless; I chose to delete it.
2120  
2121         * Makefile.am: (pspp_SOURCES) Add case.c, case.h.
2122
2123         * case.c: New file.
2124
2125         * case.h: New file.
2126
2127         * aggregate.c: (struct agr_proc) Change type of `sort' to
2128         sort_criteria *.  Add `break_vars', `break_var_cnt' members.
2129         Rename `vars' to `agr_vars', all references updated.  Change
2130         `agr_case' to type `struct ccase'.
2131         (cmd_aggregate) Deal with new members.  Use case_create(),
2132         sort_active_file_in_place(), sort_active_file_to_casefile().
2133         (agr_destroy) Deal with new members.
2134         (aggregate_single_case) Ditto.
2135         (dump_aggregate_info) Ditto.
2136         (initialize_aggregate_info) Ditto.
2137         (agr_to_active_file) Ditto.
2138         (presorted_agr_to_sysfile) Ditto.
2139         (sort_agr_to_sysfile) Removed.
2140
2141         * alloc.c: (out_of_memory) Make non-static.
2142
2143         * alloc.h: Prototype out_of_memory().
2144
2145         * casefile.c: Switched from a linked list in-memory representation
2146         to a two-level array-style representation.  The linked list was
2147         appropriate when we could stick a header onto cases, but that's no
2148         longer the case.  Also, the two-level array will allow for random
2149         in-memory access in case that's ever wanted.  Also added the
2150         concept of a `destructive casereader', one that destroys cases in
2151         the underlying casefile as they are read out.
2152         (macro CASES_PER_BLOCK) New macro.
2153         (struct casefile) New members `value_cnt', `case_list_size',
2154         `case_acct_size', `being_destroyed', `cases'.  Removed `head',
2155         `tail'.
2156         (struct casereader) Removed `cur'.  Added `destructive', `c'.
2157         (global var casefiles) Made static.
2158         (static var case_bytes) New var.
2159         (casefile_create) Takes a value count, not a case size in bytes,
2160         to conform to the case interface.  All callers updated.  Deal with
2161         new and removed members.
2162         (casefile_destroy) Deal with new and removed members.
2163         (casefile_sleep) New function.
2164         (casefile_get_case_size) Removed.
2165         (casefile_get_value_cnt) New function.
2166         (casefile_append) Rewritten to deal with new and removed members.
2167         (casefile_append_xfer) New function.
2168         (write_case_to_disk) Use case_serialize().
2169         (call_posix_fadvise) Removed because posix_fadvise64 segfaults.
2170         Couldn't figure out why.
2171         (casefile_to_disk) Don't call call_posix_fadvise.  Rewritten to
2172         deal with new and removed members.
2173         (merge) Removed.
2174         (merge_sort) Removed.
2175         (casefile_sort) Removed.
2176         (casefile_get_reader) Deal with new and removed members.
2177         (casefile_get_destructive_reader) New function.
2178         (reader_open_file) Make code more readable.  Create case for
2179         reader.
2180         (casereader_get_casefile) New function.
2181         (casereader_read) Deal with new and removed members.  Now returns
2182         a copy of the case, so that the caller is responsible for
2183         destroying the returned case.
2184         (casereader_read_xfer) New function.
2185         (casereader_destroy) Destroy reader's case.
2186         (test_casefile) Second arg is now a value count, all callers
2187         updated.  Now tests destructive readers too.
2188         (get_random_case) Deal with new case ADT.
2189         (write_random_case) Ditto.
2190         (read_and_verify_random_case) Ditto.
2191
2192         * crosstabs.q: Remove debug code.
2193
2194         * descript.q: (calc_descriptives) Deal with new case, casefile
2195         ADTs.
2196
2197         * dfm.c: (cmd_begin_data) There's no storage_source_class anymore.
2198
2199         * do-if.c: Remove unneeded header inclusion.
2200
2201         * expr-prs.c: Remove debug code.
2202
2203         * exprP.h: Remove debug code.
2204
2205         * flip.c: (flip_file) Use fseeko() if available.
2206
2207         * formats.c: Remove debug code.
2208
2209         * get.c: Remove debug code.
2210         (struct mtf_file) Change `input' from `union value *' to `struct
2211         ccase', all references updated.
2212
2213         * levene.c: (levene) Deal with new case, casefile ADTs.
2214
2215         * list.q: Remove debug code.
2216
2217         * loop.c: Remove debug code.
2218         
2219         * matrix-data.c: Remove debug code.
2220
2221         * means.q: Remove debug code.
2222
2223         * mis-val.c: Remove debug code.
2224
2225         * pfm-read.c: Remove debug code.
2226         (pfm_read_code) Change second arg from `union value *' to `struct
2227         ccase *', all references updated.
2228
2229         * recode.c: (string_to_long) Make first arg const.
2230         (convert_to_double) Ditto.
2231
2232         * repeat.c: Remove debug code.
2233
2234         * sample.c: Remove debug code.
2235
2236         * sfm-read.c: Remove debug code.
2237         (sfm_read_case) Change second arg from `union value *' to `struct
2238         ccase *'.
2239
2240         * sort.c: Redone in terms of casefiles.
2241         (enum sort_direction) Moved here from sort.h.
2242         (struct sort_criterion) New structure.
2243         (struct sort_criteria) New structure.
2244         (cmd_sort_cases) Rewritten.
2245         (prepare_to_sort_active_file) New function.
2246         (sort_active_file_in_place) New function.
2247         (sort_active_file_to_casefile) New function.
2248         (parse_sort) Renamed sort_parse_criteria(), rewritten & interface
2249         changed, all callers updated.
2250         (destroy_sort_cases_pgm) Renamed sort_destroy_criteria(),
2251         rewritten & interface changed, all callers updated.
2252         (sort_cases) Renamed sort_execute(), rewritten & interface
2253         changed, all callers updated.
2254         (struct internal_sort) Removed.
2255         (do_internal_sort) Rewritten, interface changed.
2256         (destroy_internal_sort) Removed.
2257         (compare_case_dblptrs) Use sort_criteria instead of sort_case_pgm.
2258         (struct initial_run) Removed; an initial run is now just a
2259         casefile.
2260         (compare_initial_runs) Rewritten.
2261         (struct external_sort) Changed almost completely.
2262         (do_external_sort) Rewritten, interface changed.
2263         (destroy_external_sort) Rewritten.
2264         [HAVE_MKDTEMP] (make_temp_dir) Removed.
2265         [!HAVE_MKDTEMP] (do_mkdir) Removed.
2266         [!HAVE_MKDTEMP] (make_temp_dir) Removed.
2267         (init_external_sort) Removed.
2268         (simulate_error) Removed.
2269         (rmdir_temp_dir) Removed.
2270         (get_temp_file_name) Removed.
2271         (open_temp_file) Removed.
2272         (close_temp_file) Removed.
2273         (remove_temp_file) Removed.
2274         (write_temp_file) Removed.
2275         (read_temp_file) Removed.
2276         (struct record_run) Change `record' from `struct case_lit *' to
2277         `struct ccase'.
2278         (struct initial_run_state) Remove `idx_to_fv', `free_list',
2279         `file_idx', `output_file'.  Add `run', casefile'.  Change
2280         `last_output' from `struct case_list *' to `struct ccase'.
2281         (write_initial_runs) Change interface, rewrite.
2282         (sort_sink_write) Renamed process_case(), changed interfaced,
2283         rewrote.
2284         (destroy_initial_run_state) Rewritten.
2285         (allocate_cases) Rewritten.
2286         (compare_record) Interface changed, rewritten.
2287         (start_run) Rewritten.
2288         (end_run) Rewritten.
2289         (output_record) Rewritten.
2290         (grab_case) Removed.
2291         (release_case) Removed.
2292         (struct merge_case) Change `cases' from double pointer to single
2293         pointer.
2294         (merge) Deal with new case and casefile ADTs.
2295         (struct run) Removed.
2296         (merge_once) Rewritten, interface changed.
2297         (fill_run_buffer) Removed.
2298         (sort_sink_make_source) Removed.
2299         (sort_sink_class) Removed.
2300         (struct sort_source_aux) Removed.
2301         (sort_source_read_helper) Removed.
2302         (sort_source_read) Removed.
2303         (read_sort_output) Removed.
2304         (read_internal_sort_output) Removed.
2305         (read_external_sort_output) Removed.
2306         (sort_source_destroy) Removed.
2307         (sort_source_class) Removed.
2308
2309         * sort.h: (struct sort_cases_pgm) Removed.
2310         (enum sort_direction) Moved to sort.c.
2311
2312         * t-test.q: (calculate) Deal with new case, casefile ADTs.
2313
2314         * tab.c: Remove debug code.
2315
2316         * var-labs.c: Remove debug code.
2317
2318         * var.h: (struct ccase) Removed.
2319         (struct case_list) Removed.
2320
2321         * vars-atr.c: (discard_variables) Use free_case_source().
2322
2323         * vars-prs.c: (parse_vs_variable) Make arg const.
2324         (parse_dict_variable) Ditto.
2325         (parse_variables) Make struct dictionary * arg const.
2326         (parse_var_set_vars) Make struct var_set * arg const.
2327         (struct var_set) Add const to some of the function pointers' args.
2328         (var_set_get_cnt) Make arg const.
2329         (var_set_get_var) Make first arg const.
2330         (var_set_lookup_var) Make first arg const.
2331         (dict_var_set_get_cnt) Make arg const.
2332         (dict_var_set_get_var) Make first arg const.
2333         (dict_var_set_lookup_var) Make first arg const.
2334         (var_set_create_from_dict) Make arg const.  Add cast to aux
2335         assignment.
2336         (struct array_var_set) Add const to var member.
2337         (array_var_set_get_cnt) Make arg const.
2338         (array_var_set_get_var) Make first arg const.
2339         (array_var_set_lookup_var) Make first arg const.
2340         (var_set_create_from_array) Make first arg const.  Insert cast.
2341
2342         * vfm.c: (struct write_case_data) Change trns_case, sink_case
2343         members from `struct ccase *' to `struct ccase'.
2344         (static var lag_queue) Change from double to single pointer.
2345         (procedure) Optimize trivial case.
2346         (internal_procedure) Deal with changed case, case_source ADTs.
2347         (create_trns_case) Changed interface, rewrote.
2348         (open_active_interface) Initialize modified lag queue.
2349         (write_case) Deal with changed case ADT.
2350         (lag_case) Deal with modified lag queue.
2351         (close_active_file) Destroy modified lag queue.
2352         Deal with changed case_source, case_sink ADTs.
2353         (destroy_storage_stream_info) Make null arg into no-op.
2354         (storage_sink_make_source) Set aux in created source.
2355         (storage_source_read) Deal with changed case, casefile ADTs.
2356         (storage_source_create) New function.
2357         (lagged_case) Rewrite.
2358         (free_case_source) New function.
2359         (free_case_sink) Rewrite.
2360         (struct split_aux_data) Changed prev_case from `struct ccase *' to
2361         `struct ccase'.
2362         (procedure_with_splits) Deal with changed prev_case.
2363         (procedure_with_splits_callback) Ditto.
2364         (multipass_split_aux_data) Changed prev_case from `struct ccase *' to
2365         `struct ccase'.
2366         (multipass_procedure_with_splits) Deal with changed prev_case.
2367         (multipass_split_callback) Ditto.
2368         
2369         
2370 Mon May 31 17:19:06 2004  Ben Pfaff  <blp@gnu.org>
2371
2372         The workspace idea didn't work out.
2373
2374         * Makefile.am: (pspp_SOURCES) Remove workspace.c, workspace.h.
2375         
2376         * workspace.c: Removed.
2377
2378         * workspace.h: Removed.
2379
2380 Sun May 30 18:35:19 2004  Ben Pfaff  <blp@gnu.org>
2381
2382         Fully implement arbitrary delimiters on DATA LIST, extending the
2383         half implementation that was already there.
2384
2385         * data-list.c: (struct data_list_pgm) Remove `delim', add
2386         `delims', `delim_cnt'.
2387         (cmd_data_list) Initialize new members.  Parse delimiters and
2388         clean up code a bit.
2389         (cut_field) Extract fields with arbitrary delimiters.  Also, fix
2390         handling of leading commas.
2391         (read_from_data_list_fixed) Expand tabs.  Adapt to new DFM
2392         interfaces.
2393         (read_from_data_list_free) Adapt to new DFM interfaces.
2394         (read_from_data_list_list) Ditto.
2395         (repeating_data_trns_proc) Ditto.
2396
2397         * dfm.c: Split up reader and writer into separate code, because
2398         they do different things.  Use struct string instead of explicit
2399         allocation code, for clarity.
2400         (enum dfm_reader_flags) New enum.
2401         (struct dfm_fhuser_ext) Removed.
2402         (struct dfm_reader_ext) New.
2403         (get_reader) New function, used by just about all the reader
2404         functions.
2405         (dfm_close) Removed.
2406         (close_reader) New function.
2407         (dfm_open_for_reading) Rewrite initialization of dfm_fhuser_ext.
2408         (dfm_open_for_writing) Ditto.
2409         (macro force_line_buffer_expansion) Removed.
2410         (count_tabs) Removed.
2411         (tabs_to_spaces) Removed.
2412         (read_record) Deal with new dfm_reader_ext.  Use struct string
2413         functions.  Don't convert tabs to spaces.
2414         (dfm_eof) New function.
2415         (dfm_get_record) Changed interface, rewrote.
2416         (dfm_expand_tabs) New function.
2417         (dfm_fwd_record) Renamed dfm_forward_record(), updated to new
2418         dfm_reader_ext, rewritten.
2419         (dfm_bkwd_record) Renamed dfm_reread_record(), updated to new
2420         dfm_reader_ext, rewritten.
2421         (dfm_set_record) Removed in favor of dfm_forward_columns().
2422         (dfm_forward_columns) New function.
2423         (dfm_get_cur_col) Renamed dfm_column_start, updated to new
2424         dfm_reader_ext, rewritten.
2425         (static var dfm_r_class) Use close_reader for the destructor.
2426         (struct dfm_writer_ext) New.
2427         (dfm_put_record) Updated to new dfm_writer_ext, rewritten.  Uses
2428         bounce buffer now instead of local allocation.
2429         (close_writer) New function.
2430         (static var dfm_writer_ext) Use close_writer for destructor.
2431         (cmd_begin_data) Adapt to new dfm_reader_ext.
2432
2433         * file-handle.q: Add support for per-file tab width.
2434         (struct private_file_handle) Add tab_width member.
2435         (q2c specifications) Add tabwidth subcommand.
2436         (cmd_file_handle) Put parsed tab width into private_file_handle.
2437         (create_file_handle) Set default tab width.
2438         (handle_get_tab_width) New function.
2439
2440         * file-type.c: (file_type_source_read) Adapt to new DFM interface.
2441
2442         * inpt-pgm.c: (reread_trns_proc) Ditto.
2443
2444         * matrix-data.c: (context) Ditto.
2445         (another_token) Ditto.
2446         (mget_token) Ditto.
2447         (force_eol) Ditto.
2448
2449 Sun May 30 18:33:59 2004  Ben Pfaff  <blp@gnu.org>
2450
2451         * casefile.c: (casefile_destroy) Fix memory leak by freeing
2452         cf->filename.
2453         (casereader_destroy) Don't close file descriptor -1.
2454
2455         * recode.c: (cmd_recode) Fix memory leak.
2456
2457         * set.q: (q2c specifications) Fix typo in user message.
2458
2459         * str.c: (st_bare_pad_len_copy) Change memcpy to memmove to avoid
2460         undefined behavior for overlapping arguments.
2461
2462 Sun May 30 18:31:48 2004  Ben Pfaff  <blp@gnu.org>
2463
2464         * casefile.c: valgrind doesn't implement posix_fadvise() yet, so
2465         don't call it when we're running under valgrind.
2466         (call_posix_fadvise) New function.
2467         (casefile_to_disk) Use call_posix_fadvise().
2468         (reader_open_file) Ditto.
2469         
2470 Sun May 30 18:20:12 2004  Ben Pfaff  <blp@gnu.org>
2471
2472         Update our string ADTs, struct string and struct len_string.  Get
2473         rid of pool support, which was largely unused.  Rename lots of
2474         functions to have more obvious or consistent names.
2475         
2476         * ascii.c: Get rid of ascii_pool.  It was only used for string
2477         allocations.
2478         (ascii_open_global) Don't create ascii_pool.
2479         (ascii_close_driver) Don't destroy ascii_pool.
2480         (ascii_postopen_driver) Don't use pool.
2481         (ascii_close_driver) Destroy strings manually.
2482
2483         * str.c: (ds_create) Remove pool argument, all references updated.
2484         (ds_init) Ditto.
2485         (ds_replace) Remove pool support, make more efficient when we
2486         don't need to reallocate.
2487         (ds_destroy) Remove pool support.
2488         (ds_rpad) New function.
2489         (ds_size) Renamed ds_capacity(), all references updated.
2490         (ds_value) Renamed ds_c_str(), all references updated.
2491         (ds_concat) Renamed ds_puts(), all references updated.
2492         (ds_concat_buffer) Renamed ds_concat(), all references updated.
2493         (ds_putchar) Renamed ds_putc(), all references updated.
2494         (ds_getline) Renamed ds_gets(), all references updated.
2495         (ls_create) Remove pool argument, all references updated.
2496         (ls_create_buffer) Ditto.
2497         (ls_destroy) Removed pool support.
2498         (ls_value) Renamed ls_c_str(), all references updated.
2499
2500         * str.h: (ls_length) [__GNUC__] Add inline version.
2501         (ls_c_str) [__GNUC__] Add inline version.
2502         (ls_end) [__GNUC__] Add inline version.
2503         (struct string) Remove pool member.  Rename `size' to `capacity',
2504         all references updated.
2505
2506         * tab.c: (text_format) Instead of using pool argument to
2507         ls_create_buffer(), call pool_register() on allocated data.
2508
2509 Mon Apr 26 22:40:07 2004  Ben Pfaff  <blp@gnu.org>
2510
2511         We're abusing the current ASCII driver by telling it to allocate a
2512         9999-line, 9999-character page in the tests.  This causes some
2513         systems to curl up and die because it allocates 20 MB of
2514         contiguous RAM.  This change alleviates at least part of the
2515         problem.  It is mostly a stop-gap until the new output system is
2516         ready.
2517         
2518         * ascii.c: (struct line) New structure.
2519         (struct ascii_driver_ext) Remove `page', `page_size', `line_len',
2520         `line_len_size', `n_output' members.  Add `lines', `lines_cap'.
2521         (ascii_preopen_driver) Initialize new members, not old ones.
2522         (ascii_close_driver) Destroy new members, not old ones.
2523         (ascii_open_page) Allocate new members, not old ones.
2524         (expand_line) Allocate room in line.
2525         (draw_line) Use new members.
2526         (ascii_line_horz) Ditto.
2527         (ascii_line_vert) Ditto.
2528         (ascii_line_intersection) Ditto.
2529         (text_draw) Ditto.
2530         (output_lines) Ditto.
2531         (ascii_close_page) Ditto.
2532
2533 Sun Apr 25 23:40:15 2004  Ben Pfaff  <blp@gnu.org>
2534
2535         * matrix.c: Dead code.  Removed.
2536
2537         * matrix.h: Dead code.  Removed.
2538
2539 Fri Apr 16 23:59:51 2004  Ben Pfaff  <blp@gnu.org>
2540
2541         Contrary to what I'd always understood, there is an efficient
2542         algorithm for deletion from a hash table populated via linear
2543         probing.  This change implements it.
2544         
2545         * hash.c: (hsh_rehash) Probe in increasing order.
2546         (hsh_probe) Ditto.
2547         (locate_matching_entry) Ditto.
2548         (hsh_delete) Use Knuth's Algorithm 6.4R for deletion.
2549
2550 Tue Apr 13 19:24:15 2004  Ben Pfaff  <blp@gnu.org>
2551
2552         * moments.c (calc_moments): Adjust calculation of kurtosis to
2553         avoid subtracting huge numbers from huge numbers, on Michael
2554         Kiefte's advice.
2555
2556 Sun Apr 11 14:22:12 2004  Ben Pfaff  <blp@gnu.org>
2557
2558         Rework moments routines for improved numerical stability based on
2559         Michael Kiefte's advice.  Any bugs or remaining numerical problems
2560         are still mine though.
2561
2562         There is now a struct moments1 for use with one-pass moments.  It
2563         uses a provisional means algorithm as an attempt to improve
2564         accuracy of higher moments.  The older struct moments now only
2565         handles two-pass moments.
2566         
2567         * aggregate.c: Use moments1 instead moments.
2568
2569         * descript.c: Revert previous change, which is no longer needed
2570         due to the moments revision.
2571
2572         * moments.c: (calc_moments) New function for calculating variance,
2573         skewness, kurtosis.
2574         (moments_pass_one) Only accumulate weights bigger than zero.
2575         (moments_calculate) Allow calculating the mean on pass one, others
2576         require pass two.  Implement in terms of calc_moments().
2577         (struct moments1) New structure.
2578         (init_moments1) New function.
2579         (moments1_clear) Ditto.
2580         (moments1_create) Ditto.
2581         (moments1_add) Ditto.
2582         (moments1_calculate) Ditto.
2583         (moments1_destroy) Ditto.
2584         (cmd_debug_moments) Deal with `struct moments' or `struct
2585         moments1' as requested by user.
2586
2587 Sun Apr 11 14:21:55 2004  Ben Pfaff  <blp@gnu.org>
2588
2589         * Makefile.am (pspp_SOURCES): Remove debug.c.
2590
2591         * debug.c: Removed.  It was empty anyway.
2592
2593 Fri Apr  9 20:04:49 2004  Ben Pfaff  <blp@gnu.org>
2594
2595         * descript.c (calc_descriptives): Fix assert failure when only
2596         MOMENT_MEAN is needed.
2597
2598 2004-04-09  Michael Kiefte  <mkiefte@dal.ca>
2599
2600         * descript.c: 
2601
2602         fixed problem with parsing in match_statistic() causing
2603         "DESCRIPTIVE STAT=MEAN." to barf.
2604
2605         "MEAN" is now default if "SORT" given without specification.
2606
2607         Fixed infinite loop with "DESCRIPT GIBBERISH=ALL."  Parsing is
2608         generally less forgiving of syntax errors: better to have it do
2609         nothing and type it in again then to not know what it actually did
2610         instead.  
2611
2612         z-score transformation now checks score for user-missing values
2613         and checks std_dev for SYSMIS.
2614
2615 2004-04-06  Michael Kiefte  <mkiefte@dal.ca>
2616
2617         * aggregate.c, crosstabs.q, descript.c, dictionary.c, frequencies.q, levene.c, t-test.q, var.h: 
2618         Changed dict_get_case_weight() to accept an additional int * flag
2619         to complain about system-missing, user-missing, zero, or negative
2620         weights and updated existing functions to pass int * to
2621         dict_get_case_weight().
2622
2623 2004-04-05  jmd  <jmd@gnu.org>
2624
2625         * main.c: Fixed configuration problems with gsl
2626
2627         * t-test.q: Fixed some problems encountered when compiling under Cygwin
2628
2629 2004-04-03  blp  <blp@gnu.org>
2630
2631         * lexer.c, ChangeLog:
2632         Fix infinite loop on comment at end of file, add test.
2633
2634 2004-04-03  jmd  <jmd@gnu.org>
2635
2636         * 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:
2637         Fixed the calculation of percentiles and added --syntax and --algorithm options
2638
2639 Sat Apr  3 11:43:37 2004  Ben Pfaff  <blp@gnu.org>
2640
2641         * lexer.c: (lex_skip_comment) Handle end-of-file correctly (I
2642         hope).
2643
2644 Sat Apr  3 15:00:18 WST 2004 John Darrington <john@darrington.wattle.id.au>
2645
2646         * frequencies.q:  Fixed the calculation of percentiles
2647
2648         * Makefile.am:  Added the --ansi flag and dealt with the
2649         consequences.  Added some entries to PSPP_sources so that
2650         make distcheck would pass
2651
2652         * cmdline.c:   Added the --syntax and --algorithm options
2653
2654         * q2c.c:  Added an implicit /ALGORITHM subcommand to everything.
2655
2656 Fri Apr  2 11:25:22 WAST 2004 John Darrington <john@darrington.wattle.id.au>
2657
2658         * t-test.q, levene.c, levene.h  Converted t-test (incl levene) to 
2659         use the new multipass_split_... mechanism.
2660
2661 Wed Mar 31 22:36:22 2004  Ben Pfaff  <blp@gnu.org>
2662
2663         * frequencies.q: (calc_stats) Use moments data structure and
2664         calc_seskew(), calc_sekurt() functions.
2665
2666         * set.q main.c settings.h Added support for --syntax and --algorithm 
2667         options
2668
2669 Tue Mar 30 22:04:19 2004  Ben Pfaff  <blp@gnu.org>
2670
2671         * vfm.c: Had to get last call to multipass_split_output() inside
2672         open_active_file()/close_active_file() pairing, so introduce new
2673         function.
2674         (internal_procedure) Move procedure() code here, except for calls
2675         to open_active_file() and close_active_file().
2676         (procedure) Wrap open_active_file() and close_active_file() around
2677         internal_procedure().
2678         (multipass_procedure_with_splits) Wrap open_active_file() and
2679         close_active_file() around internal_procedure().
2680
2681 Tue Mar 30 22:01:57 2004  Ben Pfaff  <blp@gnu.org>
2682
2683         * descript.c: (cmd_descriptives) Free `vars' to avoid memory leak.
2684
2685 Mon Mar 29 16:26:40 2004  Ben Pfaff  <blp@gnu.org>
2686
2687         * debug.c: Removed.  Moved cmd_debug_evaluate() into expr-evl.c.
2688
2689         * expr-evl.c: (cmd_debug_evaluate) Moved here from debug.c.
2690
2691 Mon Mar 29 16:03:08 2004  Ben Pfaff  <blp@gnu.org>
2692
2693         * algorithm.c: By default turn off some of the more expensive
2694         assertions.
2695         (expensive_assert) New macro which expands to assert if
2696         EXTRA_CHECKS is defined, to nothing otherwise.
2697         (unique) Use expensive_assert().
2698         (binary_search) Ditto.
2699         (push_heap) Ditto.
2700         (pop_heap) Ditto.
2701         (make_heap) Ditto.
2702         (sort_heap) Ditto.
2703
2704         * command.c: (conflicting_3char_prefixes) Words that are the same
2705         don't cause conflicts when they are abbreviated to the first three
2706         letters.
2707
2708         * expr-evl.c: (CONCAT_func) Fix memory leak by incrementing struct
2709         nonterm_node's n earlier.
2710         (generic_str_func) Ditto.
2711         
2712 Mon Mar 29 15:32:17 2004  Ben Pfaff  <blp@gnu.org>
2713
2714         Add support for multipass procedures.  Rewrite DESCRIPTIVES to
2715         test multipass support, take advantage of new moments
2716         calculation, and to not be such crappy code.  Get rid of q2c
2717         processing for DESCRIPTIVES.
2718
2719         * vfm.c: (struct multipass_split_aux_data) New structure.
2720         (multipass_procedure_with_splits) New function.
2721         (multipass_split_callback) New function.
2722         (multipass_split_output) New function.
2723         * descript.q: Removed.
2724
2725         * descript.c: New file.
2726
2727         * var.h: Removed descriptives enums.
2728         (struct descriptives_proc) Removed.
2729         (struct variable) Removed p.dsc.
2730
2731         * Makefile.am: (q_sources_c) Remove descript.c.
2732         (q_sources_q) Removed descript.q.
2733         
2734 Mon Mar 29 15:31:55 2004  Ben Pfaff  <blp@gnu.org>
2735
2736         New manager for keeping track of used workspace.
2737         
2738         * workspace.c: New file.
2739
2740         * workspace.h: New file.
2741
2742         * Makefile.am: (pspp_SOURCES) Add workspace.c, workspace.h.
2743
2744         * sort.c: (do_internal_sort) Use workspace_malloc().
2745         (destroy_internal_sort) Use workspace_free().
2746
2747 Mon Mar 29 15:31:08 2004  Ben Pfaff  <blp@gnu.org>
2748
2749         New `struct casefile' for managing sets of cases.
2750
2751         * casefile.c: New file.
2752
2753         * casefile.h: New file.
2754
2755         * command.def: Add DEBUG CASEFILE command.
2756
2757         * Makefile.am: (pspp_SOURCES) Add casefile.c, casefile.h.
2758
2759         * sort.c: (sort_cases) Move logic for sending storage file to disk
2760         into do_external_sort().
2761         (struct internal_sort) Use an array of ccase pointers instead of a
2762         case_list.
2763         (do_internal_sort) Rewrite to handle casefiles.
2764         (compare_case_list) Removed.
2765         (compare_cases) New function.
2766         (compare_case_dblptrs) New function.
2767         (read_internal_sort_output) Deal with new struct internal_sort.
2768
2769         * vfm.c: (static var workspace_overflow) Removed.
2770         (struct storage_stream_info) Removed all the members.  Added
2771         struct casefile * member.
2772         (storage_sink_open) Use casefile.
2773         (open_storage_file) Removed.
2774         (write_storage_file) Removed.
2775         (storage_to_disk) Removed.
2776         (destroy_storage_stream_info) Use casefile.
2777         (storage_sink_write) Use casefile.
2778         (storage_sink_make_source) Use casefile.
2779         (storage_source_count) Use casefile.
2780         (storage_source_read) Use casefile.
2781         (storage_source_on_disk) Removed.
2782         (storage_source_get_cases) Removed.
2783         (storage_source_set_cases) Removed.
2784         (storage_source_get_casefile) New function.
2785         
2786 Mon Mar 29 15:30:09 2004  Ben Pfaff  <blp@gnu.org>
2787
2788         New `struct moments' for calculating moments.
2789
2790         * stats.c: Removed.
2791
2792         * stats.h: Removed.
2793
2794         * moments.c: New file.
2795
2796         * moments.h: New file.
2797
2798         * command.def: Add DEBUG MOMENTS command.
2799
2800         * Makefile.am: (pspp_SOURCES) Add moments.c, moments.h.  Remove
2801         stats.c, stats.h.
2802
2803         * aggregate.c: Modify AGGREGATE to use the new moments
2804         calculation, even if not in such a great way.
2805         (struct agr_var) Add `moments' member.
2806         (parse_aggregate_functions) Set `moments' member to null.
2807         (agr_destroy) Destroy `moments' member.
2808         (accumulate_aggregate_info) Use `moments' for standard deviation.
2809         (dump_aggregate_info) Ditto.
2810         (initialize_aggregate_info) Create or clear `moments'.
2811
2812         * misc.h: Add pow2(), pow3(), pow4() functions in place of sqr(),
2813         cube(), pow4() that were in stats.h.  All references updated.
2814
2815         * crosstabs.q: stats.h had chi-square significance functions.  Use
2816         GSL instead.
2817         (display_chisq) Use gsl_cdf_chisq_Q() instead of chisq_sig().
2818
2819         * expr-evl.c: (expr_evaluate) Use moments_of_values() for
2820         OP_CFVAR, OP_MEAN, OP_SD, OP_VARIANCE.
2821                 
2822 Fri Mar 26 14:21:23 2004  Ben Pfaff  <blp@gnu.org>
2823
2824         * dictionary.c: (dict_compact_values) Compacted values need to
2825         start off from 0.
2826
2827 Fri Mar 26 00:54:57 2004  Ben Pfaff  <blp@gnu.org>
2828
2829         * var-labs.c: (cmd_variable_labels) For compatibility, don't allow
2830         `/' at start.  Check return value of parse_variables() for error
2831         return.
2832
2833 Fri Mar 26 00:19:27 2004  Ben Pfaff  <blp@gnu.org>
2834
2835         Revamp expressions: make the code a little nicer, and fix bugs
2836         found in testing.
2837         
2838         * expr-evl.c: (expr_evaluate) Make expression argument const.
2839         Support OP_ADD, OP_SUB, OP_MUL, OP_DIV instead of OP_PLUS, OP_MUL.
2840         OP_POW is missing for arg 2 <= 0.  OP_LOG is natural log, not
2841         base-10 log.  Fix OP_ANY, OP_ANY_STRING, OP_RANGE, OP_RANGE_STRING
2842         off-by-ones.  Add OP_MAX_STRING, OP_MIN_STRING.  Fix OP_TIME_HMS,
2843         OP_DATE_WKYR boundary conditions.  Add OP_CTIME_DAYS,
2844         OP_CTIME_HOURS, OP_CTIME_MINUTES, OP_CTIME_DAYS, OP_CTIME_SECONDS.
2845         Support OP_INDEX_2, OP_INDEX_3, OP_RINDEX_2, OP_RINDEX_3 instead
2846         of OP_INDEX, OP_INDEX_OPT, OP_RINDEX, OP_RINDEX_OPT.  Merge
2847         OP_LPAD_OPT into OP_LPAD, OP_RPAD_OPT into OP_RPAD, OP_LTRIM_OPT
2848         into OP_LTRIM, OP_RTRIM_OPT into OP_RTRIM, OP_NUMBER_OPT into
2849         OP_NUMBER.  Fix OP_RTRIM fragility.  Support OP_SUBSTR_2,
2850         OP_SUBSTR_3 instead of OP_SUBSTR, OP_SUBSTR_OPT.  Remove OP_INV.
2851         Simplify OP_SYSMIS.  Remove OP_STR_MIS.
2852
2853         * expr-opt.c: (optimize_expression) Rewrite.
2854         (macro n0) Removed.
2855         (macro n1) Removed.
2856         (macro n2) Removed.
2857         (macro s0) Removed.
2858         (macro s0l) Removed.
2859         (macro s1) Removed.
2860         (macro s1l) Removed.
2861         (macro s2) Removed.
2862         (macro s2l) Removed.
2863         (macro s) Removed.
2864         (macro sl) Removed.
2865         (eq_num_con) New function.
2866         (optimize_tree) New function.
2867         (macro rnc) Removed.
2868         (macro frnc) Removed.
2869         (str_search) Add const to string params.
2870         (str_rsearch) Ditto.
2871         (evaluate_tree_no_missing) Renamed from evaluate_tree.  Add num[],
2872         str[], str_len[] locals to substitute for most of removed macros.
2873         Support OP_ADD, OP_SUB, OP_MUL, OP_DIV instead of OP_PLUS, OP_MUL.
2874         Removed support for missing values because we're never called with
2875         missing values.  Use set_number() or set_number_errno() instead of
2876         rnc or frnc.  Removed any stuff that caused trouble in testing.
2877         We can re-add it later if it really slows anything.  Fix some
2878         random problems.
2879         (evaluate_tree_with_missing) Not yet supported.  To be added later
2880         if it's important.
2881         (repl_num_con) Removed.
2882         (collapse_node) New function.
2883         (force_repl_num_con) Removed.
2884         (set_number) New function.
2885         (set_number_errno) New function.
2886         (repl_str_con) Removed.
2887         (set_string) New function.
2888         (yrmoda) Tighten boundary conditions.  Adopt 2030 cut-off for
2889         2-digit years.
2890         (dump_node) No special case for OP_AND, OP_OR.
2891
2892         * expr-prs.c: (expr_prs) Honor EXPR_NO_OPTIMIZE bit.  Rewrite.
2893         (expr_get_type) New function.
2894         (type_check) Rewrite.
2895         (type_coercion) New function.
2896         (struct operator) New structure.
2897         (match_operator New function.
2898         (parse_binary_operators) New function.
2899         (parse_inverting_unary_operator) New function.
2900         (parse_or) Rewritten.
2901         (parse_and) Rewritten.
2902         (parse_not) Rewritten.
2903         (parse_rel) Rewritten.
2904         (parse_add) Rewritten.
2905         (parse_mul) Rewritten.
2906         (parse_neg) Rewritten.
2907         (parse_exp) Rewritten.
2908         (parse_sysvar) Add $TRUE, $FALSE system variables.
2909         Get $LENGTH, $WIDTH from get_viewlength(), get_viewwidth().
2910         (parse_primary) Use allocate_var_node(), allocate_num_con(),
2911         allocate_str_con().
2912         (struct function) Remove desc, change `func' prototype.
2913         (unary_func) Remove special cases.
2914         (MISSING_func) Reduce to unary_func() that just returns a boolean.
2915         (SYSMIS_func) Handle SYSMIS((x)) like SYSMIS(x).
2916         (VALUE_func) Use allocate_var_node().
2917         (nary_num_func) Allow MIN and MAX for strings.
2918         Use allocate_var_node().  Properly clean up.
2919         Fix return type.
2920         (generic_str_func) Use local table instead of removed `desc'
2921         member.  Mostly rewrite.
2922         (get_num_args) Revise error message.
2923         (parse_function) Return EXPR_ERROR, not 0 on error.
2924         (macro op) Removed.
2925         (macro varies) Removed.
2926         (ops[]) Use expr.def.
2927         (free_node) Do nothing if node is null.
2928         (allocate_num_con) New function.
2929         (allocate_str_con) New function.
2930         (allocate_var_node) New function.
2931         (allocate_binary_nonterminal) New function.
2932         (append_nonterminal_arg) Removed.
2933         (static var func_tab[]) Revised.
2934         (expr_debug_print_postfix) Make parameter const.
2935         Use printf() instead of debug_printf().
2936
2937         * expr.def: New file.
2938         
2939         * expr.h: Change PXP_* to EXPR_*, all references updated.  Also
2940         use named enum instead of unnamed, all references updated.  Add
2941         EXPR_ANY, EXPR_NO_OPTIMIZE.
2942
2943         * exprP.h: Remove EX_*.  Add DEFINE_OPERATOR.  Use expr.def
2944         instead of defining OP_* directly.
2945         (macro IS_TERMINAL) New macro.
2946         (macro IS_NONTERMINAL) New macro.
2947         (enum OP_NO_FLAGS) New.
2948         
2949 Fri Mar 26 00:18:01 2004  Ben Pfaff  <blp@gnu.org>
2950
2951         * error.c: (err_assert_fail) msg variable needs to be non-const.
2952
2953 Fri Mar 26 00:17:24 2004  Ben Pfaff  <blp@gnu.org>
2954
2955         * debug.c: (cmd_debug_evaluate) Rewrite.
2956
2957 Fri Mar 26 00:15:13 2004  Ben Pfaff  <blp@gnu.org>
2958
2959         Fix some CROSSTABS bit rot stupidity.
2960
2961         * crosstabs.q: Reorder the CELLS subcommands for compatibility.
2962         (internal_cmd_crosstabs) Initializes cells[] correctly.
2963         (float_M_suffix) Rename format_cell_entry(), change prototype,
2964         rewrite.
2965         (display_crosstabulation) Fix cell formatting.
2966
2967 Fri Mar 26 00:14:09 2004  Ben Pfaff  <blp@gnu.org>
2968
2969         Make lex_rest_of_line(), lex_entire_end() not discard lines.  Have
2970         to call lex_discard_line() to do that.
2971
2972         * command.c: (run_command) Call lex_discard_line() after
2973         lex_rest_of_line().
2974
2975         * lexer.c: (lex_entire_end) Change behavior.
2976         (lex_rest_of_line) Change behavior.  Return const char *.
2977         (lex_discard_line) Don't clear getl_buf, don't emit message.
2978
2979         * main.c: (handle_error) Emit message here.
2980
2981         * repeat.c: (internal_cmd_do_repeat) Use lex_discard_line()
2982         instead of lex_entire_line().
2983
2984         * str.c: (mm_find_reverse) Make length params size_t.  Rewrite.
2985
2986         * title.c: (get_title) Call lex_discard_line() after
2987         lex_rest_of_line().
2988         (cmd_file_label) Ditto.
2989         (cmd_document) Deal with const char * return value.
2990
2991 Fri Mar 26 00:10:16 2004  Ben Pfaff  <blp@gnu.org>
2992
2993         Removed REMARK command.
2994
2995         * command.c: (extract_prefix) Removed.
2996         (output_line) Removed.
2997         (cmd_remark) Removed.
2998
2999         * command.def: Remove REMARK.
3000
3001 Fri Mar 26 00:08:38 2004  Ben Pfaff  <blp@gnu.org>
3002
3003         Added abort() after lots of assert(0) invocations to avoid some
3004         compiler warnings.  We really need a NOT_REACHED macro.
3005
3006 Tue Mar 23 08:00:42 WAST 2004 John Darrington <john@darrington.wattle.id.au>
3007
3008         * sort.c: Added missing call to temp_file_close.  Changed error 
3009         messages to warnings.
3010
3011         * set.q: Improved setting of set_view{length,width} to be more tolerant
3012         of buggy OSes.
3013
3014 Sun Mar 21 10:11:14 WST 2004 John Darrington <john@darrington.wattle.id.au>
3015
3016         * val-labs.c: Fixed a bug where PSPP would crash, if VALUE LABELS was
3017         used with incorrect syntax.
3018
3019         * error.c, error.h et al:  Overridden definition of assert for a
3020         custom one.
3021
3022         * test-q.c: Fixed a buglet where it would crash if no /VARIABLES
3023         subcommand was given when it ought to have been.
3024
3025 Sat Mar 20 22:19:08 2004  Ben Pfaff  <blp@gnu.org>
3026
3027         * tab.c: (tab_vline) Fix assertions to respect row_ofs and
3028         col_ofs.
3029         (tab_hline) Ditto.
3030         (tab_box) Ditto.
3031         (tab_joint_text) Ditto.
3032
3033 Sat Mar 20 17:57:23 2004  Ben Pfaff  <blp@gnu.org>
3034
3035         * levene.c: Add #include.
3036
3037         * set.q: (set_viewport) Add `int' argument to make its prototype
3038         correct for signal().
3039
3040 Sat Mar 20 15:35:17 2004  Ben Pfaff  <blp@gnu.org>
3041
3042         * expr-evl.c: (expr_evaluate) Assert that `c' is nonzero before
3043         using it.
3044
3045 Sat Mar 20 15:18:16 2004  Ben Pfaff  <blp@gnu.org>
3046
3047         Changed DFM from open-at-first-access to explicit-open.  Before,
3048         calling dfm_get_record() or dfm_put_record() would automatically
3049         open the file.  Now, you have to call dfm_open_for_reading() or
3050         dfm_open_for_writing() explicitly.  This makes it possible to
3051         check permissions, file existence, etc. earlier.
3052
3053         Also made struct file_handle more opaque, and clean up in general.
3054
3055         * data-list.c: (cmd_data_list) Open handle for reading.
3056
3057         * dfm.c: (struct dfm_fhuser_ext) Add `where', `saw_begin_data'
3058         members.
3059         (open_file_r) Renamed dfm_open_for_reading(), rewrote.
3060         (open_file_w) Renamed dfm_open_for_writing(), rewrote.
3061         (open_inline_file) Removed.
3062         (read_record) For inline_file, if we haven't seen BEGIN DATA, read
3063         it.  Deal with line_number in extension record instead of file
3064         handle.
3065         (dfm_get_record) Rewrote.
3066         (dfm_put_record) Rewrote.
3067         (dfm_push) Assert file is open and one of ours.  Deal with
3068         line_number in extension record instead of file handle.
3069         (dfm_pop) Assert file is open and one of ours.  Deal with
3070         line_number in extension record instead of file handle.
3071         (cmd_begin_data) Use dfm_open_for_reading().  Mark that we saw
3072         BEGIN DATA.     
3073
3074         * file-handle.h: (enum constants RH_RF_*) Removed.
3075         (enum constants FH_MD_*) Removed.
3076         (struct file_handle) Removed `name', `norm_fn', `fn', `where',
3077         `recform', `lrecl', `mode' members.  Public references to
3078         `recform' changed to use handle_get_mode(), references to `lrecl'
3079         changed to use handle_get_record_width().  Added `private' member.
3080         (enum file_handle_mode) New.
3081
3082         * file-handle.q: (struct private_file_handle) New structure.
3083         (struct file_handle_list) New structure.
3084         (static var files) New.
3085         (static var file_handles) Removed.
3086         (init_file_handle) Removed.
3087         (create_file_handle) Removed.
3088         (get_handle_with_name) New function.
3089         (get_handle_for_filename) New function.
3090         (cmd_file_handle) Rewritten.
3091         (hash_file_handle) Removed.
3092         (cmp_file_handle) Removed.
3093         (fh_init_files) Rewritten.
3094         (fh_parse_file_handle) Rewritten.  Allows identifiers as
3095         filenames.
3096         (fh_get_handle_by_name) Renamed handle_get_name(), all references
3097         updated.  Rewritten.
3098         (fh_get_handle_by_filename) Renamed handle_get_filename(), all
3099         references updated.  Rewritten.
3100         (fh_record_width) Renamed handle_get_record_width(), all
3101         references updated.  Rewritten.
3102         (handle_get_mode) New function.
3103
3104         * file-type.c: (cmd_file_type) Open handle for reading.
3105
3106         * filename.c: [unix] (struct file_identity) New structure.
3107         [unix] (fn_get_identity) New function.
3108         [unix] (fn_free_identity) New function.
3109         [unix] (fn_compare_file_identities) New function.
3110         [!unix] (struct file_identity) New structure.
3111         [!unix] (fn_get_identity) New function.
3112         [!unix] (fn_free_identity) New function.
3113         [!unix] (fn_compare_file_identities) New function.
3114
3115         * lexer.c: (static var put) Renamed put_token, all references
3116         updated.
3117         (static var put_tokstr) New.
3118         (static var put_tokval) New.
3119         (lex_init) Initialize put_tokstr().
3120         (restore_token) New function.
3121         (save_token) New function.
3122         (lex_get) Use restore_token().
3123         (lex_put_back) Use save_token().
3124         (lex_put_back_id) New function.
3125         (lex_put_forward) Removed.
3126         (lex_preprocess_line) Set put_token instead of using
3127         lex_put_forward().
3128         (lex_negative_to_dash) Use save_token(), set put_token directly.
3129         (dump_token) Use stderr instead of stdout.
3130
3131         * main.c: (main) Remove call to cmd_init().
3132         
3133         * matrix-data.c: (cmd_matrix_data) Open file for reading.
3134
3135         * pfm-read.c: Use handle_get_filename() instead of trying to use
3136         h->fn directly, all over.
3137
3138         * pfm-write.c: Ditto.
3139
3140         * print.c: (internal_cmd_print) Open handle for writing.
3141         (dump_table) Use handle_get_filename().
3142         (print_trns_proc) Use handle_get_mode().
3143         (cmd_print_space) Use fh_parse_file_handle().
3144         Open handle for writing.
3145         [0] (debug_print) Removed.
3146
3147         * sfm-read.c: Use handle_get_filename() instead of trying to use
3148         h->fn directly, all over.
3149
3150         * sfm-write.c: Ditto.
3151
3152 Sat Mar 20 14:35:48 2004  Ben Pfaff  <blp@gnu.org>
3153
3154         Fix memory leaks.
3155         
3156         * autorecode.c: (arc_free) Free arc->src_values.
3157
3158         * error.c: (msg) Free buf.
3159
3160         * val-labs.c: (do_value_labels) Always free vars.
3161
3162         * vfm.c: (close_active_file) If sink has no make_source then call
3163         its destroy function.
3164
3165 Sat Mar 20 14:00:24 2004  Ben Pfaff  <blp@gnu.org>
3166
3167         Fixed cmd_parse() so that it always skips past a full command
3168         name.  A few special commands for which this would be bad get
3169         special treatment.  This lets us drop code for skipping past the
3170         end of a command name in most cmd_*() functions.  It's not worth
3171         listing all the commands affected.
3172
3173         * command.c: (struct command) Remove `cmd' member, replace by
3174         `name' member, all references updated.  Remove `word', `next',
3175         `skip_entire_name' members.
3176         (macro DEFCMD) Deal with revised `struct command'.
3177         (macro UNIMPL) Ditto.
3178         (macro SPCCMD) New macro for commands whose last word shouldn't be
3179         skipped.
3180         (static array cmd_table[]) Make const, rename `commands', remove
3181         sentinel element.
3182         (macro COMMAND_CNT) New macro.
3183         (split_words) Removed.
3184         (cmd_init) Removed.
3185         (FILE_TYPE_okay) Make parameter const.
3186         (cmd_parse) Improve error messages.
3187         (match_strings) New function.
3188         (next_word) New function.
3189         (enum command_match) New enum.
3190         (conflicting_3char_prefixes) New function.
3191         (conflicting_3char_prefix_command) New function.
3192         (cmd_match_words) New function.
3193         (count_matching_commands) New function.
3194         (get_command_name) New function.
3195         (free_words) New function.
3196         (unknown_command_error) New function.
3197         (figure_out_command) Renamed parse_command_name(), rewritten.
3198
3199         * command.def: Removed @ command.  Marked BEGIN DATA, DOCUMENT,
3200         FILE LABEL, REMARK, SUBTITLE, TITLE as special.  Renamed EVALUATE
3201         to DEBUG EVALUATE.  Added N alias for N OF CASES, SORT alias for
3202         SORT CASES.
3203
3204         * command.h: (macro SPCCMD) New.
3205
3206         * include.c: (cmd_include_at) Removed.
3207         (cmd_include) Allow identifier to be used as filename.
3208
3209         * inpt-pgm.c: (cmd_reread) Use fh_parse_file_handle().
3210
3211         * t-test.q: (cmd_t_test) Command name is now parsed for us.
3212         
3213
3214 Sat Mar 20 13:56:00 2004  Ben Pfaff  <blp@gnu.org>
3215
3216         Start work on better test framework.
3217         
3218         * Makefile.am: (pspp_sources) Add debug.c.
3219         
3220         * debug.c: New file.
3221
3222         * compute.c: (cmd_evaluate) Moved to debug.c, renamed
3223         cmd_debug_evaluate().
3224
3225         * expr-prs.c: (expr_parse) Remove PXP_DUMP support.
3226
3227         * expr.h: (enum constant PXP_DUMP) Removed.
3228
3229 Sat Mar 20 00:05:42 WST 2004 John Darrington <john@darrington.wattle.id.au>
3230
3231         * set.q:  Implemented the SHOW command, and synced it to the existing 
3232         SET cmd.
3233
3234         Added a handler for SIGWINCH so that viewlength and viewwidth follow
3235         changes as the window size is changed.
3236
3237         Added fallback to set viewlength and viewwidth from LINES and COLUMS
3238         environment variables if other methods are not available.
3239
3240         glob.c: Removed a lot of global variables from glob.c and encapsulated 
3241         them in set.q
3242
3243         random.c: Tidied up the way the random seed is set.
3244
3245         str.c: Added a ds_vprintf function.
3246
3247         error.c: Extended dump_message so that messages are always broken at
3248         '\n' characters.
3249         
3250 Thu Mar 18 11:07:14 2004  Ben Pfaff  <blp@gnu.org>
3251
3252         * pfm-write.c: (bufwrite) Write out the correct element for string
3253         variables.  From Andreas Streichardt <streichardt@globalpark.de>.
3254
3255 Mon Mar 15 20:48:03 2004  Ben Pfaff  <blp@gnu.org>
3256
3257         Get rid of static and global (!) vars in matrix-data.c.
3258
3259         * matrix-data.c: (static var nr_data) Removed.
3260         (static var nr_factor_values) Removed.
3261         (static var max_cell_index) Removed.
3262         (static var split_values) Removed.
3263         (struct nr_aux_data) New structure.
3264         (read_matrices_without_rowtype) Use a local struct nr_aux_data in
3265         place of static vars, pass to create_case_source() and procedure()
3266         as aux data.
3267         (nr_read_data_lines) Use struct nr_aux_data * parameter instead of
3268         struct matrix_data_pgm *.
3269         (nr_read_splits) Ditto.
3270         (nr_read_factors) Ditto.
3271         (nr_output_data) Ditto.
3272         (static var wr_content) Removed.
3273         (global var wr_data) Removed.
3274         (global var wr_current) Removed.
3275         (struct wr_aux_data) New structure.
3276         (read_matrices_with_rowtype) Use a local struct wr_aux_data in
3277         place of static vars, pass to create_case_source() and procedure()
3278         as aux data.
3279         (matrix_data_read_with_rowtype) Use struct wr_aux_data * parameter
3280         instead of matrix_data_pgm *.
3281         (wr_read_splits) Ditto.
3282         (wr_output_data) Ditto.
3283         (wr_read_rowtype) Ditto.
3284         (wr_read_factors) Ditto.
3285         (wr_read_indeps) Ditto.
3286         
3287 Mon Mar 15 20:07:29 2004  Ben Pfaff  <blp@gnu.org>
3288
3289         Get rid of static vars in autorecode.c.
3290
3291         * autorecode.c: (struct autorecode_trns) Rename `arc' to `specs',
3292         `n_arc' to `spec_cnt'.  All references updated.
3293         (static var v_src) Removed.
3294         (static var v_dest) Removed.
3295         (static var h_trns) Removed.
3296         (static var nv_src) Removed.
3297         (static var descend) Removed.
3298         (static var print) Removed.
3299         (enum direction) New enum.
3300         (struct autorecode_pgm) New structure.
3301         (cmd_autorecode) Use struct autorecode_pgm instead of static vars.
3302         Move n_dest local var into struct autorecode_pgm for ease of
3303         clean-up.  Use arc_free().
3304         (arc_free) New function.
3305         (recode) Modify to take struct autorecode_pgm * parameter instead
3306         of using statics.  Let the caller clean up.
3307         (autorecode_proc_func) Use struct autorecode_pgm * auxiliary data
3308         instead of statics.  Rearrange code a little.
3309
3310 Mon Mar 15 00:25:02 2004  Ben Pfaff  <blp@gnu.org>
3311
3312         Get rid of static, global vars in recode.c.  Remove debug code.
3313
3314         * recode.c: (static var head) Removed.
3315         (global var v) Removed.
3316         (global var nv) Removed.
3317         (cmd_recode) New local variables head, v, nv.  Initialize and free
3318         v.  Don't call debug_print().
3319         [DEBUGGING] (dump_dest) Removed.
3320         [DEBUGGING] (debug_print) Removed.
3321
3322 Mon Mar 15 00:14:49 2004  Ben Pfaff  <blp@gnu.org>
3323
3324         Get rid of static vars in expr-opt.c.
3325
3326         * expr-opt.c: (static var e) Removed.
3327         (static var nop) Removed.
3328         (static var mop) Removed.
3329         (static var ndbl) Removed.
3330         (static var mdbl) Removed.
3331         (static var nstr) Removed.
3332         (static var mstr) Removed.
3333         (static var nvars) Removed.
3334         (static var mvars) Removed.
3335         (struct expr_dump_state) New structure.
3336         (dump_expression) Use new struct expr_dump_state instead of static
3337         vars and pass to functions we call.
3338         (dump_node) Use struct expr_dump_state * parameter.
3339         (emit) Ditto.
3340         (emit_num_con) Ditto.
3341         (emit_str_con) Ditto.
3342         (emit_var) Ditto.
3343         
3344 Mon Mar 15 00:03:51 2004  Ben Pfaff  <blp@gnu.org>
3345
3346         Get rid of static var in COUNT.
3347
3348         * count.c: (static var head) Move into cmd_count().
3349         (cmd_count) [DEBUGGING] Don't call debug_print.
3350         [DEBUGGING] (debug_print) Removed.
3351
3352 Sun Mar 14 23:56:09 2004  Ben Pfaff  <blp@gnu.org>
3353
3354         Get rid of static vars in VALUE LABELS, ADD VALUE LABELS.
3355
3356         * val-labs.c: (static var v) Removed.
3357         (static var nv) Removed.
3358         [DEBUGGING] (debug_print) Removed.
3359         (verify_val_labs) Add struct variable **, int parameters.
3360         (get_label) Ditto.  Improve error messages, streamline.
3361         (erase_labels) New function for erasing value labels, taking over
3362         part of verify_val_labs()'s function.
3363         (init) Removed.
3364         (done) Removed.
3365         (cmd_value_labels) No need to call init() or done() anymore.
3366         (cmd_add_value_labels) Ditto.
3367         (do_value_labels) Add vars, var_cnt local variables.  Clean up
3368         after them internally.  Call erase_labels() if we should.  Don't
3369         call debug_print().
3370
3371 Sun Mar 14 23:33:53 2004  Ben Pfaff  <blp@gnu.org>
3372
3373         Get rid of static vars in MATCH FILES.
3374         
3375         * get.c: (static var mtf_head) Removed.
3376         (static var mtf_tail) Removed.
3377         (static var mtf_by) Removed.
3378         (static var mtf_n_by) Removed.
3379         (static var mtf_master) Removed.
3380         (static var mtf_seq_num) Removed.
3381         (static var mtf_seq_nums) Removed.
3382         (static var mtf_sink) Removed.
3383         (static var mtf_case) Removed.
3384         (struct mtf_proc) New structure.
3385         (cmd_match_files) Use struct mtf_proc instead of static vars.
3386         (mtf_processing_finish) Ditto.
3387         (mtf_free) Ditto.
3388         (mtf_delete_file_in_place) Ditto.
3389         (mtf_read_nonactive_records) Ditto.
3390         (mtf_compare_BY_values) Ditto.
3391         (mtf_processing) Ditto.
3392         (mtf_merge_dictionary) Ditto.
3393
3394 Sun Mar 14 22:48:12 2004  Ben Pfaff  <blp@gnu.org>
3395
3396         * command.def: Add CASESTOVARS, VARSTOCASES unimplemented commands.
3397
3398         * dictionary.c: (dict_rename_var) Add assertion.
3399         (dict_contains_var) Check by index instead of name.
3400
3401 Sun Mar 14 22:01:02 2004  Ben Pfaff  <blp@gnu.org>
3402
3403         Get rid of compaction_necessary, compaction_nval, compaction_case.
3404         Redo VFM interface.  Replace disk_sink and memory_sink by
3405         storage_sink, disk_source and memory_source by storage_source.
3406
3407         * vfm.h: (struct case_sink) Add `dict', `idx_to_fv', `value_cnt'
3408         members.
3409
3410         * vfm.c: 
3411         (struct write_case_data) Remove `begin_func', `end_func',
3412         `func_aux' members.  Add `aux', `trns_case', `sink_case',
3413         `cases_written', `cases_analyzed' members.
3414         (global var compaction_necessary) Make static.
3415         (global var compaction_nval) Removed.
3416         (global var compaction_case) Removed.
3417         (static var case_count) Removed.
3418         (struct procedure_aux_data) Removed.
3419         (struct split_aux_data) Removed.
3420         (procedure) Remove begin_func, end_func parameters.  Rewrite.
3421         (static var not_canceled) Removed.
3422         (process_active_file) Removed.
3423         (process_active_file_write_case) Removed.
3424         (process_active_file_output_case) Removed.
3425         (prepare_for_writing) Moved into open_active_file().
3426         (arrange_compaction) Ditto.
3427         (setup_lag) Ditto.
3428         (open_active_file) Rewrote.
3429         (write_case) New function.
3430         [DEBUGGING] (index_to_varname) Removed.
3431         (execute_transformations) New function.
3432         (exclude_this_case) Renamed filter_case(), changed interface.
3433         (clear_case) Added struct ccase * parameter to interface.
3434         (close_active_file) Added struct write_case_data * parameter,
3435         rewrote.
3436         (disk_sink_create) Removed.
3437         (disk_sink_destroy) Removed.
3438         (disk_sink_make_source) Removed.
3439         (disk_sink_write) Removed.
3440         (disk_source_count) Removed.
3441         (disk_source_destroy) Removed.
3442         (disk_source_read) Removed.
3443         (global var disk_sink_class) Removed.
3444         (global var disk_source_class) Removed.
3445         (global var memory_sink_class) Removed.
3446         (global var memory_source_class) Removed.
3447         (memory_sink_create) Removed.
3448         (memory_sink_destroy) Removed.
3449         (memory_sink_make_source) Removed.
3450         (memory_sink_write) Removed.
3451         (memory_source_count) Removed.
3452         (memory_source_destroy) Removed.
3453         (memory_source_get_cases) Removed.
3454         (memory_source_read) Removed.
3455         (memory_source_set_cases) Removed.
3456         (struct disk_stream_info) Removed.
3457         (struct memory_sink_info) Removed.
3458         (struct memory_source_info) Removed.
3459         (write_active_file_to_disk) Removed.
3460         (destroy_storage_stream_info) New function.
3461         (global var null_sink_class) New var.
3462         (global var storage_sink_class) New var.
3463         (global var storage_source_class) New var.
3464         (open_storage_file) New function.
3465         (storage_sink_destroy) New function.
3466         (storage_sink_make_source) New function.
3467         (storage_sink_open) New function.
3468         (storage_sink_write) New function.
3469         (storage_source_count) New function.
3470         (storage_source_destroy) New function.
3471         (storage_source_get_cases) New function.
3472         (storage_source_on_disk) New function.
3473         (storage_source_read) New function.
3474         (storage_source_set_cases) New function.
3475         (storage_source_to_disk) New function.
3476         (storage_to_disk) New function.
3477         (struct storage_stream_info) New structure.
3478         (write_storage_file) New function.
3479         (procedure_write_case) Removed.
3480         (create_case_source) Add `struct dictionary *' parameter, all
3481         references updated.
3482         (create_case_sink) Ditto.
3483         (free_case_sink) New function.
3484         (struct split_aux_data) New structure.
3485         (procedure_with_splits) New function implementing what procedure()
3486         used to.
3487         (SPLIT_FILE_proc_func) Removed.
3488         (procedure_with_splits_callback) New function.
3489         (equal_splits) New function.
3490         
3491         * aggregate.c: Pass around a struct instead of using statics.
3492         (static var outfile) Remove.
3493         (enum type) Give it tag `missing_treatment'.
3494         (static var missing) Remove.
3495         (static var sort) Remove.
3496         (static var agr_first) Remove.
3497         (static var agr_next) Remove.
3498         (static var case_count) Remove.
3499         (static var prev_case) Remove.
3500         (static var buf64_1xx) Remove.
3501         (static var buf_1xx) Remove.
3502         (struct agr_proc) New structure incorporating the above.
3503         (cmd_aggregate) Use new struct.  Clean up error handling using
3504         agr_destroy().  Completely rewrite actual implementation of
3505         aggregation.
3506         (create_sysfile) Add struct agr_proc * parameter, modify
3507         accordingly.
3508         (parse_aggregate_functions) Ditto.
3509         (free_aggregate_functions) Ditto.  Rename agr_destroy().
3510         (aggregate_single_case) Add struct agr_proc * parameter, modify
3511         accordingly.
3512         (accumulate_aggregate_info) Ditto.
3513         (dump_aggregate_info) Ditto.
3514         (initialize_aggregate_info) Ditto.
3515         (agr_00x_trns_proc) Removed.
3516         (agr_00x_end_func) Removed.
3517         (agr_10x_trns_proc) Removed.
3518         (agr_10x_trns_free) Removed.
3519         (agr_10x_end_func) Removed.
3520         (agr_11x_read) Removed.
3521         (agr_11x_finish) Removed.
3522         [DEBUGGING] (debug_print) Removed.
3523         (write_case_to_sfm) Add struct agr_proc * parameter, modify
3524         accordingly.
3525         (agr_to_active_file) New function.
3526         (presorted_agr_to_sysfile) New function.
3527         (sort_agr_to_sysfile) New function.
3528
3529         * autorecode.c: (cmd_autorecode) Use procedure_with_splits().
3530
3531         * crosstabs.q: (internal_cmd_crosstabs) Ditto.
3532
3533         * descript.q: (cmd_descriptives) Ditto.
3534
3535         * dfm.c: (cmd_begin_data) Check for storage_source_class.  Adapt
3536         to new procedure() interface.
3537
3538         * command.c: (cmd_execute) Adapt to new procedure() interface.
3539
3540         * dictionary.c: (dict_compact_values) Also delete scratch
3541         variables.
3542         (dict_get_compacted_value_cnt) New function.
3543         (dict_get_compacted_idx_to_fv) New function.
3544
3545         * flip.c: (cmd_flip) Warn about and cancel TEMPORARY.
3546         (cmd_flip) Adapt to new procedure() interface.
3547         (flip_sink_write) Use sink->idx_to_fv.
3548
3549         * frequencies.q: (internal_cmd_frequencies) Use
3550         procedure_with_splits().
3551
3552         * get.c: (cmd_save_internal) Adapt to new procedure() interface.
3553         (static var mtf_sink) New static var.
3554         (static var mtf_case) New static var.
3555         (cmd_match_files) Warn about and cancel TEMPORARY.  Redo the way
3556         we actually implement the matching.
3557         (mtf_delete_file_in_place) Use mtf_case.
3558         (mtf_processing) Use mtf_case and mtf_sink.
3559         (cmd_export) Adapt to new procedure() interface.
3560
3561         * levene.c: (levene) Use procedure_with_splits().
3562
3563         * list.q: (cmd_list) Use procedure_with_splits().
3564
3565         * matrix-data.c: (read_matrices_without_rowtype) Adapt to new
3566         procedure() interface.
3567         (read_matrices_with_rowtype) Ditto.
3568
3569         * modify-vars.c; (cmd_modify_vars) Warn about and cancel
3570         TEMPORARY.  Adapt to new procedure() interface.
3571
3572         * rename-vars.c: Warn about and cancel TEMPORARY.
3573
3574         * sort.c: (cmd_sort_cases) Warn about TEMPORARY.
3575         (sort_cases) Use dict_get_compacted_value_cnt() instead of
3576         compaction_nval.  Adapt to new procedure() interface.  Use
3577         storage_source_to_disk().
3578         (do_internal_sort) Don't try to dump the cases to memory.
3579         (compare_case_lists) Pass null idx_to_fv.
3580         (struct initial_run_state) Add `idx_to_fv' member.  Remove
3581         `case_size' member.
3582         (write_initial_runs) Don't initialize irs->case_size.  Adapt to
3583         new procedure() interface.  Reset irs->idx_to_fv after calling
3584         procedure().
3585         (sort_sink_write) Set irs->idx_to_fv.  Use case_size from struct
3586         sort_cases_pgm.  Pass irs, not struct sort_cases_pgm to
3587         push_heap().
3588         (destroy_initial_run_state) Don't dereference irs after freeing
3589         it.
3590         (allocate_cases) Don't calculate case_size locally.
3591         (compare_record) Add idx_to_fv parameter.
3592         (compare_record_run) Change parameter from struct sort_cases_pgm *
3593         to struct initial_run_state *.  Pass irs->idx_to_fv to
3594         compare_record().
3595         (compare_record_run) Third parameter now a struct
3596         initial_run_state *.
3597         (output_record) No need for out_case anymore.  Pass irs, not
3598         struct sort_cases_pgm to pop_heap().  Use case_size from struct
3599         sort_cases_pgm.
3600         (merge) Use case_size from struct sort_cases_pgm.
3601         (merge_once) Use case_size from struct sort_cases_pgm.
3602         Pass null pointer to compare_record() as idx_to_fv.
3603         (global var sort_sink_class) Make static.
3604
3605         * t-test.q: (cmd_t_test) Use procedure_with_splits().
3606
3607         * temporary.c: Remove debugging crap.
3608
3609 Sat Mar 13 14:19:52 WST 2004 John Darrington <john@darrington.wattle.id.au>
3610
3611         * t-test.q, levene.c: Fixed up the handling of MISSING values
3612         int the T-TEST
3613
3614 Fri Mar 12 16:23:35 WST 2004 John Darrington <john@darrington.wattle.id.au>
3615
3616         * t-test.q, levene.c: Added support for T-TEST /GROUP where only 
3617         one value is given.
3618
3619 Wed Mar 10 23:25:13 2004  Ben Pfaff  <blp@gnu.org>
3620
3621         Change explicit variable name checks into use of
3622         dict_class_from_id().
3623
3624         * dictionary.c: (dict_create_var)  Change explicit variable name
3625         check into use of dict_class_from_id().
3626
3627         * get.c: (trim_dictionary) Ditto.
3628
3629         * sel-if.c: (cmd_filter) Ditto.
3630
3631         * sysfile-info.c: (cmd_display) Ditto.
3632
3633         * vars-prs.c: (parse_DATA_LIST_vars) Ditto.
3634
3635         * vfm.c: (arrange_compaction) Ditto.
3636
3637         * weight.c: (cmd_weight) Ditto.
3638
3639 Wed Mar 10 21:16:34 2004  Ben Pfaff  <blp@gnu.org>
3640
3641         * temporary.c: (cmd_temporary) When TEMPORARY was the first
3642         transformation following the input program, if any, for some
3643         reason we special-cased f_trns.  That's just wrong.  It should
3644         always be set to n_trns.
3645
3646 Tue Mar  9 23:44:40 2004  Ben Pfaff  <blp@gnu.org>
3647
3648         * format.c: (parse_format_specifier_name) Fix brown-bag bug
3649         introduced in last check-in.
3650
3651 Tue Mar  9 23:10:41 2004  Ben Pfaff  <blp@gnu.org>
3652
3653         * format.c: (global array translate_fmt[]) Removed.
3654         (translate_fmt) New function as replacement.
3655         (parse_format_specifier_name) Rewrite.
3656
3657         * pfm-read.c: (convert_format) Use translate_fmt() instead of
3658         translate_fmt[].
3659
3660         * sfm-read.c: (parse_format_spec) Ditto.
3661
3662         * postscript.c: (text) Fix handling of fonts with missing
3663         ligatures.
3664
3665         * sort.c: (struct external_sort) Add temp_name member.
3666         (destroy_external_sort) Free temp_dir, temp_name members.
3667         (init_external_sort) Allocate temp_name.
3668         (get_temp_file_name) Change prototype.
3669         (open_temp_file) Deal with change to get_temp_file_name().
3670         (close_temp_file) Ditto.
3671         (remove_temp_file) Ditto.
3672         (write_temp_file) Ditto.
3673         (read_temp_file) Ditto.
3674         (sort_sink_destroy) Removed.
3675         (sort_sink_class) Change destroy member to null.
3676
3677 Tue Mar  9 22:36:34 2004  Ben Pfaff  <blp@gnu.org>
3678
3679         Eliminate temp_case.
3680
3681         * aggregate.c: (cmd_aggregate) No need to save/restore temp_case
3682         anymore.  Use agr_11x_finish().
3683         (aggregate_single_case) Make first param const.
3684         (accumulate_aggregate_info) Ditto.
3685         (agr_00x_end_func) Use compaction_case, not temp_case.
3686         (agr_11x_func) Break into agr_11x_read(), agr_11x_finish().
3687
3688         * data-list.c: (struct data_list_pgm) Add `case_size' member.
3689         (cmd_data_list) Initialize case_size.
3690         (read_from_data_list_fixed) Add struct ccase * param, use instead
3691         of temp_case.
3692         (read_from_data_list_free) Ditto.
3693         (read_from_data_list_list) Ditto.
3694         (read_one_case) Rename data_list_trns_proc(), all references
3695         updated.  Add argument in calling above functions.  Use c
3696         argument instead of temp_case.
3697         (destroy_dls) Rename data_list_trns_free(), all references
3698         updated.
3699
3700         * expr-evl.c: (expr_evaluate) Make second parameter const.
3701
3702         * file-type.c: (struct file_type_pgm) Add `case_size' member.
3703         (cmd_end_file_type) Initialize `case_size'.
3704         (file_type_source_read) Add struct ccase * parameter.  Use instead
3705         of temp_case.
3706
3707         * flip.c: Rewritten.
3708
3709         * get.c: (struct get_pgm) New structure to keep track of
3710         case_size.
3711         (cmd_get) Initialize case_size.
3712         (cmd_import) Ditto.
3713         (get_source) Deal with struct get_pgm.
3714         (get_source_read) Add struct ccase * parameter, use instead of
3715         temp_case.
3716         (import_source_read) Ditto.
3717
3718         * get.c: Use a null pointer instead of temp_case to represent the
3719         "current case" in a struct mtf_file's input member.
3720         (mtf_processing_finish) Pass null to mtf_processing(), not
3721         temp_case.
3722         (mtf_read_nonactive_records) Don't set iter->input to temp_case.
3723         (mtf_compare_BY_values) Add extra arg, use instead of null input
3724         members.
3725         (mtf_processing) Use c parameter instead of temp_case.  Pass
3726         compaction_case to process_active_file_output_case().
3727         
3728         * glob.c: (global variable temp_case) Removed.
3729
3730         * inpt-pgm.c: (struct input_program_pgm) Add `case_size' member.
3731         (cmd_input_program) Initialize case_size.  Set
3732         vfm_source->value_cnt.
3733         (init_case) Add struct ccase * parameter, use instead of
3734         temp_case.
3735         (clear_case) Ditto.
3736         (input_program_source_read) Ditto.
3737
3738         * matrix-data.c: (matrix_data_read_without_rowtype) Ditto.
3739         (dump_cell_content) Ditto.
3740         (nr_output_data) Ditto.
3741         (read_matrices_without_rowtype) Ditto.
3742         (matrix_data_read_with_rowtype) Ditto.
3743         (wr_read_splits) Ditto.
3744         (wr_output_data) Ditto.
3745
3746         * sort.h: (struct sort_cases_pgm) New member `case_size'.
3747         
3748         * sort.c: (sort_cases) Initialize scp->case_size.
3749         (struct external_sort) Remove `case_size' member.
3750         (write_initial_runs) Only call vfm_sink->class_destroy if
3751         non-null.
3752         (struct sort_source_aux) New structure.
3753         (sort_source_read_helper) New function.
3754         (sort_source_read) Use sort_source_read_helper().
3755         (read_sort_output) Change interface to be more reasonable.
3756         (read_internal_sort_output) Ditto.
3757         (read_external_sort_output) Ditto.
3758
3759         * vars-prs.c: (dict_class_to_name) Pass return value through
3760         gettext.
3761
3762         * vfm.c: (struct procedure_aux_data) Add `trns_case' member.
3763         (procedure) Initialize trns_case.
3764         (procedure) Pass trns_case to vfm_source->class->read().
3765         Free trns_case.
3766         (process_active_file) Start using struct procedure_aux_data.
3767         (process_active_file_write_case) Pass trns_case to
3768         transformations, lag_case(), clear_case().
3769         (process_active_file_output_case) Add struct ccase * parameter.
3770         (create_trns_case) New function.
3771         (make_temp_case) Removed.
3772         (vector_initialization) Removed.
3773         (close_active_file) Only call make_source if non-null, otherwise
3774         set vfm_source to null pointer.  Don't free temp_case.
3775         (disk_source_read) Add struct ccase * parameter, use instead of
3776         temp_case.
3777         (memory_source_read) Ditto.
3778         (lag_case) Add const struct ccase * member.
3779         (procedure_write_case) Use trns_case instead of temp_case.
3780         (clear_case) Add struct ccase * member, use instead of temp_case.
3781         (exclude_this_case) Ditto.
3782         (create_case_source) Add struct dictionary * parameter, use to
3783         initialize source->value_cnt.
3784
3785         * vfm.h: (struct case_source) Add `value_cnt' member.
3786         (struct case_source_class) Add struct ccase * parameter to `read'
3787         member function pointer.
3788         (struct case_sink_class) Make struct ccase * parameter const in
3789         `write' member function pointer.
3790         
3791 Wed Mar  3 20:44:37 2004  Ben Pfaff  <blp@gnu.org>
3792
3793         Fix a lot of "possibly uninitialized variable" warnings.  Some of
3794         them are even real bugs.  A few of them make me wonder how the
3795         code ever worked.
3796
3797         * aggregate.c: (parse_aggregate_functions) Initialize `function.
3798
3799         * ascii.c: (output_lines) Add default case to switch.
3800
3801         * crosstabs.q: Remove static variable `expected' and all
3802         references to it.
3803         (display_crosstabulation) Always calculate expected value.
3804         (calc_chisq) Ditto.
3805         (output_pivot_table) Initialize `cmp'.
3806         (display_crosstabulation) New variable `last_row', which is
3807         initialized.
3808
3809         * data-in.c: (parse_numeric) Always initialize sign.  How did this
3810         work at all?!
3811
3812         * data-list.c: (repeating_data_trns_proc) Always initialize code.
3813         Always set info.ofs.  (How did this work?!)
3814
3815         * expr-opt.c: (optimize_tree) Always initialize `m'.
3816         (evaluate_tree) Always initialize `c'.  (How did this work?)
3817
3818         * frequencies.q: (frq_custom_variables) Always initialize min,
3819         max.
3820         (frq_custom_grouped) Always initialize `dl'.
3821
3822         * groff-font.c: (groff_read_font) Always initialize char_set.
3823
3824         * matrix-data.c: (nr_output_data) Initialize `split'.
3825         (wr_read_splits) Remove shadowing split_cnt declaration.
3826         (wr_output_data) Initialize `split'.
3827
3828         * output.c: (tokener) Skip add character on syntax error.
3829
3830         * pool.c: (pool_strndup) Always set `copy'.  (How did this work?!)
3831
3832         * postscript.c: (read_ps_encodings) Use line.string instead of
3833         uninitialized `bp'.
3834         (write_text) Add default case to switch.
3835         (text) Always initialize multiple variables.  Fix bug with
3836         ligatures.
3837
3838         * print.c: (fixed_parse_fortran) Initialize head.
3839         (alloc_line) Add default case to switch.
3840
3841         * recode.c: (parse_dest_spec) Handle case where nothing matches.
3842         (recode_trns_proc) Move variable declaration inward.  Add default
3843         case to switch.
3844
3845         * sfm-read.c: (read_header) Initialize skip_amt.
3846
3847         * sysfile-info.c: (display_variables) Always initialize pc.
3848
3849         * vars-prs.c: Initialized `included'.
3850
3851 Wed Mar  3 09:30:09 2004  Ben Pfaff  <blp@gnu.org>
3852
3853         * main.c: (main) sigaction()'s sa_flags member was uninitialized.
3854         Just use signal() instead.
3855
3856 Wed Mar  3 09:26:30 2004  Ben Pfaff  <blp@gnu.org>
3857
3858         Get rid of vfm_sink_info and vfm_source_info.
3859         
3860         * aggregate.c: (agr_00x_end_func) Don't increment
3861         sfm_sink_info.ncases.
3862
3863         * sort.c: (do_internal_sort) Get case count from
3864         vfm_source->class->count().
3865         (struct external_sort) Add `case_size' member.
3866         (do_external_sort) Initialize case_size.
3867         (struct initial_run_state) Add `case_size' member.
3868         (write_initial_runs) Initialize case_size.
3869         (sort_sink_write) Use case_size.
3870         (read_external_sort_output) Use case_size.  Get case_cnt from
3871         initial_runs.
3872
3873         * vfm.c: (struct write_case_data) Add underscores to existing arg
3874         names, all references updated.  Renamed `aux' as `func_aux', all
3875         references updated.  Added new `aux' member.
3876         (global var vfm_source_info) Removed.
3877         (global var vfm_sink_info) Removed.
3878         (struct procedure_aux_data) New.
3879         (struct split_aux_data) New.
3880         (procedure) Use `aux' fields for procedure_aux_data,
3881         split_aux_data.
3882         (process_active_file_write_case) Pass case_count + 1 to
3883         transformation procedures, exclude_this_case().
3884         (process_active_file_output_case) Don't increment
3885         vfm_sink_info.ncases.
3886         (prepare_for_writing) Don't initialize vfm_sink_info.  Don't try
3887         to send data to disk early.
3888         (make_temp_case) Don't use vfm_sink_info.case_size.
3889         (close_active_file) Don't initialize vfm_source_info.
3890         (struct disk_stream_info) New, to allow for case_cnt and case_size fields.
3891         (disk_sink_create) Initialize and/or update disk_stream_info.
3892         (disk_sink_write) Ditto.
3893         (disk_sink_destroy) Ditto.
3894         (disk_sink_make_source) Ditto.
3895         (disk_source_read) Ditto.
3896         (disk_source_destroy) Ditto.
3897         (global var disk_source_class) Add disk_source_count().
3898         (disk_source_count) New function.
3899         (struct memory_sink_info) Add `case_cnt', `case_size' members.
3900         (struct memory_source_info) Ditto.
3901         (memory_sink_create) Deal with case_cnt, case_size.
3902         (memory_sink_write) Ditto.
3903         (memory_sink_make_source) Ditto.
3904         (memory_source_read) Ditto.
3905         (memory_source_count) New function.
3906         (memory_source_class) Add memory_source_count().
3907         (procedure_write_case) Don't use vfm_sink_info.ncases.  Do use
3908         proc_aux->cases_written, and pass it to transformation procedures
3909         and exclude_this_case ().
3910         (exclude_this_case) Add case_num parameter.  Pass it to
3911         expr_evaluate().
3912         (SPLIT_FILE_procfunc) Use split_aux->prev_case instead of static
3913         variable.
3914
3915         * vfm.h: (struct case_source_class) Add `count' member.
3916
3917         * vfmP.h: (struct stream_info) Removed.
3918         (global variable vfm_source_info) Removed.
3919         (global variable vfm_sink_info) Removed.
3920         
3921 Tue Mar  2 23:38:17 2004  Ben Pfaff  <blp@gnu.org>
3922
3923         * var.h: (typedef trns_proc_func) New typedef.
3924         (trns_free_func) New typedef.
3925         (struct trns_header) Change `proc' to type trns_proc_func, `free'
3926         to type trns_free_func.  This only changes the actual type of
3927         trns_proc_func, adding a `case_num' parameter.  Updated all
3928         implementations to use the typedefs instead.
3929
3930         * compute.c: (compute_num) Pass case_num to expr_evaluate().
3931         (compute_num_vec) Ditto.
3932         (compute_str) Ditto.
3933         (compute_str_vec) Ditto.
3934
3935         * do-if.c: (do_if_trns_proc) Ditto.
3936
3937         * expr-evl.c: (expr_evaluate) Add new case_num parameter, use for
3938         OP_CASENUM.
3939
3940         * inpt-pgm.c: (input_program_source_read) Maintain case count,
3941         pass to transformation functions.
3942         (reread_trns_proc) Pass case_num arg to expr_evaluate().
3943
3944         * loop.c: (loop_1_trns_proc) Ditto.
3945         (loop_2_trns_proc) Ditto.
3946         (loop_3_trns_proc) Ditto.
3947
3948         * print.c: (print_space_trns_proc) Ditto.
3949
3950         * sel-if.c: (select_if_proc) Ditto.
3951
3952 Tue Mar  2 11:36:52 2004  Ben Pfaff  <blp@gnu.org>
3953
3954         * frequencies.q: (cleanup_freq_tab) Avoid memory leak by
3955         destroying hash table.
3956
3957         * glob.c: (read_active_file) Variable not referenced, removed.
3958         (cancel_input_pgm) Ditto.
3959
3960         * levene.c: Add #include <stdlib.h> needed to call free().
3961
3962         * aggregate.c: (parse_aggregate_functions) Make `function'
3963         variable const.
3964
3965 Tue Mar  2 11:30:56 2004  Ben Pfaff  <blp@gnu.org>
3966
3967         Start working to eliminate VFM dependence on static variables.
3968
3969         * command.c: (cmd_parse) Use case_source_is_class().
3970
3971         * data-list.c: Rewrite to eliminate use of static variables.
3972
3973         * dfm.c: (cmd_begin_data) Use case_source_is_class().
3974
3975         * file-handle.q: (fh_handle_name) Make parameter const.
3976
3977         * file-type.c: Rewrite to eliminate use of static variables.
3978
3979         * flip.c: Rewrite to eliminate use of static variables.
3980
3981         * format.c: (get_format_var_width) New function.
3982
3983         * get.c: Eliminate use of static variables.
3984
3985         * inpt-pgm.c: Eliminate use of static variables.
3986
3987         * matrix-data.c: Eliminate use of static variables.
3988
3989         * set.q: (set_max_workspace) New variable.
3990         (cmd_set) Use SET WORKSPACE to modify set_max_workspace.
3991
3992         * var.h: (struct case_list) Move here from vfmP.h.
3993
3994         * vars-atr.c: (discard_variables) Handle new vfm_source type.
3995
3996         * vfm.c: (vfm_source) Change type from struct case_stream to
3997         struct case_source.
3998         (vfm_sink) Change type from struct case_stream to struct
3999         case_sink.
4000         (static var paging) Rename workspace_overflow, all references
4001         updated.
4002         (procedure) Use new class structures.
4003         (process_active_file) Ditto.
4004         (process_active_file_write_case) Ditto.
4005         (prepare_for_writing) Use set_max_workspace.  Use new class
4006         structures.
4007         (close_active_file) Use new class structures.  Free old sink.
4008         (global var disk_source_file) Removed.
4009         (global var disk_sink_file) Removed.
4010         (disk_stream_init) Removed.
4011         (disk_stream_read) Removed.
4012         (disk_stream_write) Removed.
4013         (disk_stream_mode) Removed.
4014         (disk_stream_destroy_source) Removed.
4015         (disk_stream_destroy_sink) Removed.
4016         (global var vfm_disk_stream) Removed.
4017         (disk_sink_create) New function.
4018         (disk_sink_write) New function.
4019         (disk_sink_destroy) New function.
4020         (disk_sink_make_source) New function.
4021         (disk_sink_class) New static var.
4022         (disk_source_read) New function.
4023         (disk_source_destroy) New function.
4024         (global var vfm_source_class) New var.
4025         (global var memory_source_cases) Removed.
4026         (global var memory_sink_cases) Removed.
4027         (global var memory_sink_max_cases) Removed.
4028         (struct memory_sink_info) New struct.
4029         (memory_stream_init) Removed.
4030         (memory_stream_read) Removed.
4031         (memory_stream_write) Removed.
4032         (memory_stream_mode) Removed.
4033         (memory_stream_destroy_source) Removed.
4034         (memory_stream_destroy_sink) Removed.
4035         (global var vfm_memory_stream) Removed.
4036         (page_to_disk) Renamed write_active_file_to_disk().
4037         (memory_sink_create) New function.
4038         (memory_sink_write) New function.
4039         (memory_sink_destroy) New function.
4040         (memory_sink_make_source) New function.
4041         (memory_sink_class) New static var.
4042         (memory_source_read) New function.
4043         (memory_source_destroy) New function.
4044         (memory_source_get_cases) New function.
4045         (memory_source_set_cases) New function.
4046         (global var vfm_source_class) New var.
4047         (procedure_write_case) Use new class structures.
4048         (create_case_source) New function.
4049         (case_source_is_complex) New function.
4050         (case_source_is_class) New function.
4051         (create_case_sink) New function.
4052
4053         * vfm.h: (global variable reinit_sysmis) Not used, removed.
4054         (global variable reinit_blanks) Not used, removed.
4055         (global variable init_zero) Not used, removed.
4056         (global variable init_blanks) Not used, removed.
4057         (struct case_source) New struct.
4058         (struct case_source_class) New struct.
4059         (struct case_sink) New struct.
4060         (struct case_sink_class) New struct.
4061         (struct case_stream) Removed.
4062
4063         * vfmP.h: (struct case_list) Moved to var.h.
4064
4065 Tue Mar  2 11:28:30 2004  Ben Pfaff  <blp@gnu.org>
4066
4067         * algorithm.c: (count_equal) New function.
4068         (count_if) New function.
4069         (unique) Add assertions.
4070         (partition) Add assertions.
4071         (is_partitioned) New function.
4072         (copy_if) Add assertions.
4073         (remove_equal) Add assertions.
4074         (lexicographical_compare) Rename lexicographical_compare_3way.
4075         (sort) Add assertions.  Rephrase some code.
4076         (is_sorted) New function.
4077
4078 Sun Feb 29 23:24:57 2004  Ben Pfaff  <blp@gnu.org>
4079
4080         Rewrite SORT CASES.
4081
4082         * sort.c: Completely rewrite.
4083
4084         * sort.h: Expose interface via struct sort_cases_pgm, not via
4085         global variables.
4086
4087         * aggregate.c: (sort) New static var.
4088         (cmd_aggregate) Use sort.
4089         (create_sysfile) Ditto.
4090         (aggregate_single_case) Ditto.
4091         (dump_aggregate_info) Ditto.
4092         (agr_00x_end_func) Ditto.
4093         (debug_print) Ditto.
4094
4095         * var.h: (enum SRT_ASCEND) Removed.
4096         (enum SRT_DESCEND) Removed.
4097         (struct sort_cases_proc) Removed.
4098         (struct variable) Remove p.srt member.
4099
4100 Sun Feb 29 23:22:45 2004  Ben Pfaff  <blp@gnu.org>
4101
4102         Get rid of the old, crappy heap structure and replace it by a new,
4103         shiny, C++ STL-like heap structure.
4104         
4105         * Makefile.am: (pspp_SOURCES) Remove heap.c, heap.h.
4106
4107         * algorithm.c: (push_heap) New function.
4108         (heapify) Ditto.
4109         (pop_heap) Ditto.
4110         (make_heap) Ditto.
4111         (sort_heap) Ditto.
4112         (is_heap) Ditto.
4113         
4114         * heap.c: Removed.
4115
4116         * heap.h: Removed.
4117
4118 Sun Feb 29 23:21:53 2004  Ben Pfaff  <blp@gnu.org>
4119
4120         Increase warning level.
4121         
4122         * Makefile.am: (AM_CFLAGS) Remove -Wnouninitialized.
4123
4124 Sat Feb 21 17:38:58 WST 2004 John Darrington <john@darrington.wattle.id.au>
4125
4126         * main.c: Added a signal handler for SIGSEGV requesting a bug report.
4127          
4128 Fri Feb 20 23:22:14 2004  Ben Pfaff  <blp@gnu.org>
4129
4130         * dictionary.c: (dict_create_var) Fix root cause of bug worked
4131         around by previous change log entry.
4132         
4133         * compute.c: (lvalue_finalize) Remove workaround from previous
4134         change log entry.
4135
4136 Fri Feb 20 14:37:41 WAST 2004 John Darrington <john@darrington.wattle.id.au>
4137
4138         * compute.c: Fixed a bug where the Format was not getting set for 
4139           computed variables (thus causing a crash when SAVEing).
4140
4141         * Added a test to stop this bug ever coming back
4142
4143 Wed Feb 18 22:21:35 2004  Ben Pfaff  <blp@gnu.org>
4144
4145         Got rid of approx.h.  In general, replaced all references to
4146         approx_eq() by ==, approx_lt() by <, etc.  Other types of changes
4147         noted below.
4148
4149         * Makefile.am: (pspp_SOURCES) Removed approx.h.
4150
4151         * data-out.c: (try_F) Replaced test for approx_eq(number, 0.0) by
4152         test for mag < EPSILON.
4153
4154         * misc.h: Add definition of EPSILON.
4155
4156 Wed Feb 18 21:32:44 2004  Ben Pfaff  <blp@gnu.org>
4157
4158         * vfm.c: (procedure) Add check to prevent recursive call.
4159
4160 Wed Feb 18 21:48:54 WST 2004 John Darrington <john@darrington.wattle.id.au>
4161
4162         * Moved the declarations relating to values to their own header file
4163           (val.h)
4164
4165         * Added levene.c and levene.h
4166
4167         * vars-atr.c: Changed the signature of compare_values to 
4168         take const * arguments.
4169                 
4170         * t-test.q: Changed the structure of struct t_test_proc 
4171        variables now contain their own group statistics information.
4172        Eventually, t_test_proc might get renamed, because it'd be 
4173        applicable to other commands too.
4174
4175 Mon Feb 16 23:15:51 2004  Ben Pfaff  <blp@gnu.org>
4176
4177         * data-out.c: Clean up.  Changed interface of convert_*() to take
4178         either a `double' or a `const char *' instead of a `const union
4179         value *'.  Update all implementations of those interfaces.
4180         (data_out) Use switch statements instead of a table.
4181         (convert_AHEX) Rewrite.
4182
4183         * format.h: Update comment.
4184
4185 Mon Feb 16 22:14:36 2004  Ben Pfaff  <blp@gnu.org>
4186
4187         * q2c.c: (dump_header) Add an Emacs header line to output files
4188         that makes generated .c files read-only by default, to make it
4189         difficult to accidentally change generated files.
4190
4191 Mon Feb 16 22:12:07 2004  Ben Pfaff  <blp@gnu.org>
4192
4193         * frequencies.q: (compare_freq_numeric_a) Compare by frequency,
4194         not bogus a->v.c <=> b->v.c pointer compare.
4195         (compare_freq_alpha_a) Ditto.
4196         (compare_freq_numeric_d) Ditto.
4197         (compare_freq_alpha_d) Ditto.
4198         
4199 Mon Feb 16 22:00:53 2004  Ben Pfaff  <blp@gnu.org>
4200
4201         Changed data_out() to store string data directly into a `union
4202         value''s s member, not indirectly into c.
4203
4204         * crosstabs.q: (output_pivot_table) Use format_short() instead of
4205         data_out().
4206         (table_value_missing) Ditto.
4207         (float_M_suffix) Ditto.
4208         (format_short) New function.
4209
4210         * data-in.h: (data_in_finite_line) Remove inline definition.
4211
4212         * data-list.c: (destroy_dls_var_spec) New function.
4213         (destroy_dls) Rewrite in terms of destroy_dls_var_spec().
4214         (data_list_source_destroy_source) Avoid cast.
4215         (struct repeating_data_trns) New field `id_value'.  Update
4216         comments.
4217         (cmd_repeating_data) Initialize id_value.  Use new
4218         repeating_data_trns_free() for freeing REPEATING DATA
4219         transformations.
4220         (rpd_parse_record) Rewrite support for record ID to be less bogus.
4221         (repeating_data_trns_free) New function.
4222
4223         * data-out.c: (data_out) Change return type to `void' by replacing
4224         error returns by writing a message into the output buffer.
4225         (convert_A) Read from v->s instead of v->c.
4226         (convert_AHEX) Ditto.
4227
4228         * expr-evl.c: Update comment.
4229         (expr_evaluate) Add assertion in OP_STRING case.
4230
4231         * format.h: (macro MAX_FORMATTED_LEN) New macro.
4232
4233         * list.q: (list_cases) Update for new data_out() semantics.
4234
4235         * print.c: (print_trns_proc) Ditto.
4236
4237         * tab.c: (tab_value) Ditto.
4238         (tab_float) Avoid stupid cast.
4239
4240         * var.h: Update comments.
4241         (macro MAX_STRING) New macro.
4242         (macro MAX_ELEMS_PER_VALUE) New macro.
4243
4244         * vars-atr.c: (compare_values) New function.
4245
4246         * vfm.c: (dump_splits) Update for new data_out() semantics.
4247
4248 Mon Feb 16 21:45:47 2004  Ben Pfaff  <blp@gnu.org>
4249
4250         * crosstabs.q: (struct table_entry) Rename v[] to values[].  All
4251         references updated.
4252         (struct crosstab) Rename v[] to vars[].  All references updated.
4253         (hash_table_entry) Replace the hash algorithm and fix a bug at the
4254         same time, which caused the hash value to depend only on a single
4255         value, not all of the variables' values.
4256         
4257 Mon Feb 16 12:49:53 2004  Ben Pfaff  <blp@gnu.org>
4258
4259         Clean up struct dictionary's value_cnt usage.
4260
4261         * dictionary.c: Add a function comment to each function.
4262         (struct dictionary) Rename value_cnt to next_value_idx, which more
4263         accurately reflects its meaning.  All references updated.
4264         (dict_rename_vars) Add assertion.
4265         (dict_get_value_cnt) Rename dict_get_next_value_idx().  All
4266         references updated.
4267         (dict_get_case_size) New function.
4268
4269         * aggregate.c: (create_sysfile) Use dict_get_case_size().
4270
4271         * get.c: (mtf_read_nonactive_records) Ditto.
4272
4273         * sort.c: (allocate_cases) Ditto.
4274         (write_initial_runs) Ditto.
4275         (merge) Ditto.
4276         (merge_once) Ditto.
4277
4278         * vfm.c: (prepare_for_writing) Ditto.
4279         (setup_lag) Ditto.
4280         (lag_case) Ditto.
4281
4282 Mon Feb 16 00:17:55 2004  Ben Pfaff  <blp@gnu.org>
4283
4284         Make vfm.c slightly less grotesque.
4285
4286         * vfm.c: (filter_var) Removed.
4287         (filter_index) Removed.
4288         (FILTERED macro) Removed.
4289         (exclude_this_case) New function.
4290         (process_active_file_write_case) Use exclude_this_case() instead
4291         of FILTERED and inline tests.
4292         (procedure_write_case) Ditto.
4293         (setup_filter) Removed.
4294         (open_active_file) Don't call setup_filter().
4295         (close_active_file) Call dict_get_filter() instead of checking
4296         filter_var.
4297
4298 Mon Feb 16 00:01:53 2004  Ben Pfaff  <blp@gnu.org>
4299
4300         * var.h: (struct variable) Update comments.
4301
4302 Sun Feb 15 23:14:59 2004  Ben Pfaff  <blp@gnu.org>
4303
4304         New functions dict_create_var_assert(), dict_lookup_var_assert().
4305         Converted several dict_*_var()/assert pairs into a single
4306         dict_*_var_assert().
4307
4308         * dictionary.c: (dict_create_var_assert) New function.
4309         (dict_lookup_var_assert) New function.
4310
4311 Sun Feb 15 23:06:08 2004  Ben Pfaff  <blp@gnu.org>
4312
4313         Got rid of "struct long_vec", envector(), devector(), etc.  Added
4314         two members `init', `reinit' to struct variable as a substitute.
4315         
4316         * Makefile.am: (pspp_SOURCES) Removed cases.c, cases.h.
4317         
4318         * cases.c: Removed.
4319
4320         * cases.h: Removed.
4321
4322         * aggregate.c: (parse_aggregate_functions) destvar doesn't need
4323         init.
4324
4325         * autorecode.c: (cmd_autorecode) destvars don't need init.
4326
4327         * compute.c: (lvalue_finalize) Set reinit.
4328
4329         * data-list.c: (fixed_parse_compatible) Don't need init usually.
4330         (dump_fmt_list) Ditto.
4331         (parse_free) Ditto.
4332
4333         * descript.q: (run_z_pass) Don't need init for z-scores.
4334
4335         * dictionary.c: (dict_create_var) Initialize `init', `reinit'
4336         members.
4337         (dict_clone_var) Copy `reinit' member, initialize `init' member.
4338
4339         * glob.c: (init_glob) Remove vec_init() calls.
4340
4341         * inpt-pgm.c: (cmd_end_input_program) Use `reinit', not `left'.
4342         
4343         * loop.c: (internal_cmd_loop) Don't need to call envector().
4344
4345         * numeric.c: (cmd_numeric) Ditto.
4346         (cmd_string) Ditto.
4347         (cmd_leave) Ditto.  Set `init', `reinit' members.
4348
4349         * recode.c: (cmd_recode) Don't need to call envector().
4350
4351         * repeat.c: (internal_cmd_do_repeat) Ditto.
4352
4353         * var.h: (struct variable) Remove `left'.  Add `init', `reinit'.
4354         (force_create_variable) Removed prototype.
4355         (force_dup_variable) Ditto.
4356
4357         * vector.c: (cmd_vector) Don't need to call envector().
4358
4359         * vfm.c: (reinit_sysmis) Removed.
4360         (reinit_blanks) Removed.
4361         (init_zero) Removed.
4362         (init_blanks) Removed.
4363         (process_active_file_write_case) No need to deal with vectors.
4364         Call clear_temp_case().
4365         (vector_initialization) Rewrite to use `init', `reinit'.
4366         (close_active_file) No need to call vec_clear().
4367         (procedure_write_case) Call clear_temp_case().
4368         (clear_temp_case) New function.
4369
4370 Sun Feb 15 20:50:36 2004  Ben Pfaff  <blp@gnu.org>
4371
4372         * pfm-write.c: (bufwrite) Get rid of nasty cast that also invoked
4373         undefined behavior.
4374
4375 Thu Feb 12 23:35:15 2004  Ben Pfaff  <blp@gnu.org>
4376
4377         Add auxiliary argument to procedure() interface.  Associated small
4378         clean-ups of vfm interface.
4379         
4380         * Updated every caller of procedure() and process_active_file() to
4381         reflect modified interface.  Simple, ordinary changes not listed
4382         otherwise below.
4383
4384         * Updated every function that implements struct case_stream's
4385         `read' function to take a write_case_func and a write_case_data.
4386         Also updated every caller of write_case() to instead call them
4387         through these arguments.  In some cases this meant that the extra
4388         args had to be threaded through a couple of extra levels.  This
4389         wasn't difficult or interesting so the details won't be given.
4390
4391         * data-list.c: (struct repeating_data_trns) Add members
4392         `write_case', `wc_data' as kluge.
4393         (read_one_set_of_repetitions) Rename repeating_data_trns_proc and
4394         make non-static.
4395         (repeating_data_set_write_case) New function.
4396
4397         * data-list.h: New file to declare repeating_data_trns_proc() and
4398         repeating_data_set_write_case().
4399
4400         * inpt-pgm.c: (input_program_source_read) Call
4401         repeating_data_set_write_case() for all the REPEATING DATA
4402         transformations, so that they know where to send their cases.
4403         It's a big kluge.  Also kluge in END CASE.
4404         (end_case_trns_proc) Never called anymore, but we still need it,
4405         so just assert(0).
4406
4407         * sort.c: (read_sort_output) Update to match struct case_stream
4408         `read' member.
4409
4410         * vfm.c: (struct write_case_data) New structure.
4411         (proc_func) Removed.
4412         (virt_proc_func) Removed.
4413         (begin_func) Removed.
4414         (virt_begin_func) Removed.
4415         (end_func) Removed.
4416         (write_case) Removed.
4417         (procedure) Added an auxiliary parameter to each function pointer
4418         argument's prototype.  Added an auxiliary data parameter.
4419         Rewrote.
4420         (process_active_file) Ditto.
4421         (process_active_file_write_case) Pass aux data along.
4422         (close_active_file) Ditto.
4423         (procedure_write_case) Ditto.
4424         (SPLIT_FILE_procfunc) Ditto.
4425
4426         * vfm.h: (typedef write_case_data) New.
4427         (typedef write_case_func) New.
4428         (struct case_stream) Add parameters to `read' member prototype.
4429         
4430 Thu Feb 12 19:24:53 WST 2004 John Darrington <john@darrington.wattle.id.au>
4431
4432         * t-test.q:  Added calculations for independent samples. (But no Levene
4433         test yet!)
4434
4435         * Makefile.am: Moved q_sources_c into own variable 
4436
4437 Wed Feb 11 23:56:51 2004  Ben Pfaff  <blp@gnu.org>
4438
4439         Miscellaneous cleanups.
4440         
4441         * Change unused to UNUSED in many source files to reflect modified
4442         pref.h.  Change use of __WIN32__, __MSDOS, __DJGPP__,
4443         __CYGWIN32__, __unix__, and unix not to assume that they're
4444         defined to a nonzero value.  Change use of __attribute__ to use
4445         NO_RETURN or PRINTF_FORMAT instead.
4446         
4447         * alloc.h: Move definitions for local_alloc(), local_free() here
4448         from ../pref.h.orig and simplify.
4449
4450         * expr-evl.c: Instead of working differently based on PAGED_STACK,
4451         use a pool allocator unconditionally.
4452         (CHECK_STRING_SPACE) Removed.
4453         (ALLOC_STRING_SPACE) Removed.
4454         (expr_evaluate) Use e->pool instead of CHECK_STRING_SPACE and
4455         ALLOC_STRING_SPACE.
4456
4457         * expr-opt.c: (dump_expression) Allocate string pool.
4458
4459         * expr-prs.c: (expr_free) Free string pool.
4460
4461         * pool.c: (pool_destroy) This pool must be removed from its
4462         parent's list of gizmos, not from its own.  Use free_all_gizmos().
4463         (pool_clear) New function.
4464         (free_all_gizmos) New function.
4465         (pool_alloc) Use space in empty block after this one if any.
4466         (pool_release) Only empty out blocks, don't actually free() them.
4467
4468         * print.c: Get rid of PAGED_STACK special case by always
4469         dynamically allocating line buffers.
4470         (struct print_trns) Always include the `line' member.
4471         (internal_cmd_print) Always initialize the `line' member.
4472         (alloc_line) Always allocate memory for `line'.
4473         (print_trns_proc) Always initialize buf from `line' member.
4474         (print_trns_free) Always free `line' memory.
4475
4476         * sort.c: (allocate_file_handles) Special-case MS-DOS for mkdir()
4477         call.
4478         
4479 Wed Feb 11 20:33:18 2004  Ben Pfaff  <blp@gnu.org>
4480
4481         * flip.c: Fixed crash from FLIP when a numeric variable is
4482           specified on NEWNAMES and a large value is used, and a couple of
4483           other minor bugs besides.
4484           (struct varname) Make name a 9-character fixed-size array
4485           instead of a 1-character variable size array.
4486           (make_new_var) Allow digits in variable names.
4487           (flip_stream_write) Limit numeric values to 8 characters and
4488           format system missing and very large and small values more
4489           appropriately.
4490
4491 Thu Feb  5 13:19:06 WAST 2004 John Darrington <john@darrington.wattle.id.au>
4492
4493         * command.c: Fixed test on command return status for the correct 
4494           value,  which had been causing a crash under certain invalid input.
4495
4496 Wed Feb  4 15:34:11 WST 2004 John Darrington <john@darrington.wattle.id.au>
4497
4498         * t-test.q: Added calculations for the one sample variant of the T-TEST
4499
4500 Tue Feb  3 20:09:54 2004  Ben Pfaff  <blp@gnu.org>
4501
4502         * tab.c: (render_strip) Fix bug that sometimes caused joined text
4503           in joined cells to be rendered outside box boundaries.
4504
4505 Tue Feb  3 18:56:45 WST 2004 John Darrington <john@darrington.wattle.id.au>
4506
4507         * random.c (rng_create): Fixed seeding so that it gets reseeded after
4508         SET seed=xx has been called.
4509
4510 Mon Jan 19 14:08:09 2004  Ben Pfaff  <blp@gnu.org> 
4511
4512         * random.c (rng_get_double): Fix always-returning-zero bug in my
4513         preferred way, and at the same time make sure rounding doesn't
4514         bite us.
4515
4516 Thu Jan  1 23:16:41 2004  Ben Pfaff  <blp@gnu.org>
4517
4518         * html.c: (change_attributes) Dead code, removed.
4519         (escape_string) Eliminate code to call change_attributes() that
4520         never actually called it.
4521         (output_tab_table) Get rid of dependence on tab_hit
4522         and struct tab_joined_cell's hit member, which are abominations.
4523
4524         * tab.c: (tab_output_text) Don't call
4525         d->class->text_set_font_by_name if it's a null pointer.
4526         (macro UNROLL_LOOP) Eliminate.
4527         (macro UNROLL_3_LOOPS) Eliminate.
4528         (tabi_render) Rewrite not to use the above macros.
4529
4530 Thu Jan  1 23:09:07 2004  Ben Pfaff  <blp@gnu.org>
4531
4532         Start working on a new output driver system, one that doesn't suck
4533         so much, by adding a "device-independent" output driver.  The idea
4534         is to write out only a single output stream, then use separate
4535         processes to translate them into whatever formats we want.  This
4536         is similar to how "groff" works with its various output drivers
4537         (grops, grotty, grodvi, ...).
4538         
4539         * Makefile.am: (pspp_SOURCES) Add devind.c, devind.h.
4540
4541         * list.q: (write_all_headers) Stub out devind class.
4542         (clean_up) Ditto.
4543         (determine_layout) Ditto.
4544         (list_cases) Ditto.
4545
4546         * output.c: (outp_init) Add devind class.
4547
4548         * devind.c: New file.
4549
4550         * devind.h: New file.
4551
4552 Thu Jan  1 23:08:14 2004  Ben Pfaff  <blp@gnu.org>
4553
4554         * frequencies.q: (hash_value_alpha) Fixed up the previous change
4555         to use the proper string length.
4556
4557 Wed Dec 31 16:27:33 WAST 2003 John Darrington <john@darrington.wattle.id.au>
4558
4559         * Fixed bug where FREQ would crash on alpha values
4560
4561 Tue Dec 30 22:42:57 2003  Ben Pfaff  <blp@gnu.org>
4562
4563         * Removed bletcherous alloca() workarounds for AIX from top of
4564         many files.  AIX can use the alternative alloca() implementation
4565         instead.
4566
4567 Tue Dec 30 22:35:16 2003  Ben Pfaff  <blp@gnu.org>
4568
4569         * ascii.c: (ascii_option) Fix implementation of headers option.
4570
4571 Tue Dec 30 22:32:53 2003  Ben Pfaff  <blp@gnu.org>
4572
4573         * ascii.c: Add a "squeeze" option to the ASCII driver to squeeze
4574         multiple blank lines into one.
4575         (struct ascii_driver_ext) Add squeeze_blank_lines option.
4576         (ascii_preopen_driver) Initialize squeeze_blank_lines.
4577         (static var option_tab) Add squeeze entry.
4578         (ascii_option) Set squeeze_blank_lines.
4579         (output_lines) Implement squeezing blank lines.
4580
4581 Wed Dec 31 07:19:46 WST 2003 John Darrington <john@darrington.wattle.id.au>
4582
4583         * Removed redundant code from output.h
4584
4585 Sat Dec 27 22:17:52 2003  Ben Pfaff  <blp@gnu.org>
4586
4587         Dictionary classes: each variable is "ordinary", "system", or
4588         "scratch".
4589
4590         * var.h: (enum dict_class) New enum.
4591
4592         * vars-prs.c: (dict_class_from_id) New function.
4593         (dict_class_to_name) New function.
4594
4595 Sat Dec 27 22:16:06 2003  Ben Pfaff  <blp@gnu.org>
4596
4597         * var.h: (struct freq_tab_set) Removed (not used).
4598
4599 Sat Dec 27 22:15:21 2003  Ben Pfaff  <blp@gnu.org>
4600
4601         * value-labels.c: (val_labs_destroy) vls needs to be freed too.
4602
4603 Sat Dec 27 22:10:49 2003  Ben Pfaff  <blp@gnu.org>
4604
4605         * stats.c: (hypercube) Rename pow4().  All references updated.
4606
4607 Sat Dec 27 22:05:49 2003  Ben Pfaff  <blp@gnu.org>
4608
4609         * rename-vars.c: (cmd_rename_variables) Rewritten.
4610         (compare_name) Removed.
4611
4612 Sat Dec 27 22:03:51 2003  Ben Pfaff  <blp@gnu.org>
4613
4614         var_set feature, and code taking advantage of it.
4615         
4616         * crosstabs.q: (static var var_dict) Removed.
4617         (static var variables) New variable.
4618         (static var variables_cnt) New variable.
4619         (cmd_crosstabs) Free variables instead of var_dict.
4620         (internal_cmd_crosstabs) Initialize and use variables,
4621         variables_cnt instead of var_dict.
4622         (free_var_dict) Removed.
4623         (crs_custom_tables) Use var_set instead of a copied dictionary.
4624         (crs_custom_variables) Set up variables, variables_cnt instead of
4625         var_dict.
4626         [DEBUGGING] (debug_print) Ditto.
4627
4628         * means.q: (mns_custom_tables) Use var_set instead of a copied
4629         dictionary.
4630
4631         * vars-prs.c: (parse_vs_variable) New function.
4632         (parse_dict_variable) Rewritten.
4633         (parse_variable) Rewritten.
4634         (parse_variables) Renamed parse_var_set_vars(), rewritten.
4635         (parse_variables) New function in terms of parse_var_set_vars().
4636         Now requires its first argument to be non-null.  All references
4637         that passed a null pointer updated to pass default_dict instead.
4638         (macro id_dict) Removed.
4639         (parse_DATA_LIST_vars) Add assertions.
4640         (parse_mixed_vars) Ditto.
4641         (struct var_set) New structure.
4642         (var_set_get_cnt) New function.
4643         (var_set_get_var) New function.
4644         (var_set_lookup_var) New function.
4645         (var_set_destroy) New function.
4646         (dict_var_set_get_cnt) New function.
4647         (dict_var_set_get_var) New function.
4648         (dict_var_set_lookup_var) New function.
4649         (dict_var_set_destroy) New function.
4650         (var_set_create_from_dict) New function.
4651         (struct array_var_set) New structure.
4652         (array_var_set_get_cnt) New function.
4653         (array_var_set_get_var) New function.
4654         (array_var_set_lookup_var) New function.
4655         (array_var_set_destroy) New function.
4656         (var_set_create_from_array) New function.
4657
4658         * q2c.c: (dump_parser) Use parse_variables(default_dict, ...)
4659         instead of parse_variables(NULL, ...) in output code.
4660
4661 Sat Dec 27 21:38:53 2003  Ben Pfaff  <blp@gnu.org>
4662
4663         Change inp_init from a 2-bit vector to an ordinary array.
4664         Initialize it all in cmd_end_input_program() instead of in
4665         create_variable().
4666
4667         * inpt-pgm.c: (enum value_init_type) New enum.
4668         (global var inp_init) Change to `enum value_init_type *', make
4669         static.
4670         (inp_init_size) Removed.
4671         (inp_nval) Change to `size_t', make static.
4672         (cmd_input_program) Don't initialize inp_init or inp_init_size.
4673         (cmd_end_input_program) Initialize inp_init, inp_nval.
4674         (init_case) Rewrite.
4675         (clear_case) Rewrite.
4676
4677         * inpt-pgm.h: Removed.
4678
4679 Sat Dec 27 21:36:38 2003  Ben Pfaff  <blp@gnu.org>
4680
4681         * hash.c: (hsh_hash_bytes) Use Fowler-Noll-Vo hash instead of
4682         Colin Plumb hash.  It is simpler and should better resist
4683         collisions.
4684         (hsh_hash_string) Ditto.
4685
4686 Sat Dec 27 21:34:57 2003  Ben Pfaff  <blp@gnu.org>
4687
4688         * get.c: (export_write_case_func) Remove debug printing code.
4689
4690 Sat Dec 27 21:11:09 2003  Ben Pfaff  <blp@gnu.org>
4691
4692         * get.c: (cmd_save_internal) Rename parameter.  Use &t->h instead
4693         of cast.
4694         (save_write_case_func) Use &trns->h instead of cast.
4695         (cmd_export) Use &t->h instead of cast.
4696
4697 Sat Dec 27 20:57:42 2003  Ben Pfaff  <blp@gnu.org>
4698
4699         Moved vectors into the dictionary.
4700
4701         * var.h: (struct vector) Moved here from vector.h.  `index' member
4702         renamed `idx', `v' renamed `var', `nv' renamed `cnt'.  All
4703         references updated.
4704         
4705         * vector.h: Removed.
4706
4707         * vector.c: (global var vec) Removed.
4708         (global var nvec) Removed.
4709         (cmd_vector) Rewritten.
4710         (find_vector) Removed.
4711
4712         * dictionary.c: (dict_create_vector) New function.
4713         (dict_get_vector) New function, replaces reading global vec[]
4714         array.
4715         (dict_get_vector_cnt) New function, replaces reading global nvec
4716         variable.
4717         (dict_lookup_vector) New function, replaces find_vector().
4718         (dict_clear_vectors) New function.
4719
4720 Sat Dec 27 20:54:01 2003  Ben Pfaff  <blp@gnu.org>
4721
4722         Start to move away from `struct variable' p `union' member to void
4723         * aux member.
4724
4725         * var.h: (struct variable) Add `aux' member.
4726
4727 Sat Dec 27 20:36:25 2003  Ben Pfaff  <blp@gnu.org>
4728
4729         Get rid of struct variable `foo' member.
4730
4731         * frequencies.q: (internal_cmd_frequencies) Use p.frq.used instead
4732         of foo.
4733         (frq_custom_variables) Ditto.
4734         (frq_custom_grouped) Ditto.
4735
4736         * get.c: (struct save_trns) Change `var' member from `int *' to
4737         `struct variable **'.
4738         (cmd_save_internal) Use aux instead of foo.
4739         (save_trns_proc) Use revised `var' member.
4740         (static var mtf_seq_no) Renamed mtf_seq_num.
4741         (static var mtf_seq_nums) New static var.
4742         (cmd_match_files) Initialize mtf_seq_nums.
4743         (mtf_free) Free mtf_seq_nums.
4744         (mtf_processing) Use mtf_seq_nums instead of foo.
4745         (mtf_merge_dictionary) No need to initialize mv->foo.
4746         (cmd_export) Use aux instead of foo.  Use revised `var' member.
4747         (mns_custom_tables) Don't use foo to check for duplicates, that's
4748         what PV_NO_DUPLICATE is for.
4749
4750         * var.h: (struct variable) Remove `foo' member.
4751         (struct frequencies_proc) New member.
4752         
4753 Sat Dec 27 19:46:13 2003  Ben Pfaff  <blp@gnu.org>
4754
4755         Clean up COMPUTE and IF.
4756
4757         * compute.c: More or less rewrite the darn thing.
4758         (struct compute_trns) Rename and reorder and add and delete
4759         members.
4760         (cmd_compute) Rewrite.
4761         (compute_num) Make conditional on test expression.  Now used for
4762         both COMPUTE and IF.
4763         (compute_num_vec) Ditto.
4764         (compute_str) Ditto.
4765         (compute_str_vec) Ditto.
4766         (cmd_if) Rewrite.
4767         (if_num) Removed.
4768         (if_num_vec) Removed.
4769         (if_str) Removed.
4770         (if_str_vec) Removed.
4771         (parse_target_expression) Renamed parse_rvalue_expression(),
4772         rewritten.
4773         (new_trns) Renamed compute_trns_create(), rewritten.
4774         (delete_trns) Removed.
4775         (free_trns) Renamed compute_trns_free(), rewritten.
4776         (struct lvalue) New structure.
4777         (parse_var_or_vec) Renamed lvalue_parse(), rewritten.
4778         (lvalue_get_type) New function.
4779         (lvalue_is_vector) New function.
4780         (lvalue_finalize) New function.
4781         (lvalue_destroy) New function.
4782         
4783 Sat Dec 27 19:44:14 2003  Ben Pfaff  <blp@gnu.org>
4784
4785         * command.def: Disallow MODIFY VARS in input mode, so that
4786         variables can't get dropped and confuse cmd_end_input_program()'s
4787         attempt to fill inp_init[].
4788         
4789         * modify-vars.c: (static var forward_positional_ordering) New
4790         variable.
4791         (struct var_modification) Entirely changed.
4792         (rearrange_dict) Interface changed, rewritten.
4793         (cmd_modify_vars) Deal with modified struct var_modification, much
4794         rewritten.
4795         (struct var_renaming) New structure.
4796         (compare_var_renaming_by_new_name) New function.
4797         (validate_var_modification) New function.
4798
4799         * var.h: (struct modify_vars_proc) Removed.
4800         (struct variable) Removed member p.mfv.
4801
4802 Sat Dec 27 19:40:26 2003  Ben Pfaff  <blp@gnu.org>
4803
4804         Make EVALUATE a valid command whether we're debugging or not, so
4805         that `make check' can succeed regardless of whether debugging is
4806         turned on.
4807         
4808         * command.def: [GLOBAL_DEBUGGING] Drop the #if.
4809
4810         * compute.c: [GLOBAL_DEBUGGING] (cmd_evaluate) Drop the #if.
4811
4812 Sat Dec 27 19:34:40 2003  Ben Pfaff  <blp@gnu.org>
4813
4814         * apply-dict.c: (cmd_apply_dictionary) Replace a ghastly switch
4815         statement by a simple if test.
4816
4817         * dfm.c: (dfm_get_record) Add assertion.
4818
4819 Sat Dec 27 17:51:26 2003  Ben Pfaff  <blp@gnu.org>
4820
4821         For each file x.c, move #include "x.h" to the very top of the
4822         include list, to catch x.h failing to include the proper headers.
4823
4824 Sat Dec 27 17:50:19 2003  Ben Pfaff  <blp@gnu.org>
4825
4826         * algorithm.c: (find) New function.
4827         (remove_equal) New function.
4828         (set_difference) New function.
4829         (adjacent_find_equal) New function.
4830         [TEST_UNIQUE] Removed test case.
4831         (copy_if) Find end test.
4832
4833 Sat Dec 27 17:42:45 2003  Ben Pfaff  <blp@gnu.org>
4834
4835         * dictionary.c: (dict_get_case_weight) New convenience function.
4836
4837         * aggregate.c: (accumulate_aggregate_info) Use
4838         dict_get_case_weight().
4839
4840         * frequencies.q: (calc_general) Ditto.
4841         (calc_integer) Ditto.
4842         (calc) Ditto.
4843
4844         * t-test.q: (groups_calc) Ditto.
4845         (z_calc) Ditto.
4846
4847 Sat Dec 27 17:29:45 2003  Ben Pfaff  <blp@gnu.org>
4848
4849         * glob.c: (global var default_dict) Change from `struct
4850         dictionary' to `struct dictionary *'.  All references changed.
4851         (init_glob) Initialize default_dict with dict_create().
4852
4853 Sat Dec 27 17:06:06 2003  Ben Pfaff  <blp@gnu.org>
4854
4855         struct dictionary now made opaque.  All related functions:
4856
4857         * get.c: (rename_variables) Removed.
4858         (dict_delete_run) Removed.
4859         
4860         * temporary.c: (copy_variable) Removed.
4861         (new_dictionary) Removed.
4862         (save_dictionary) Removed.
4863         (restore_dictionary) Removed.
4864         (free_dictionary) Removed.
4865
4866         * vars-atr.c: (clear_default_dict) Removed.
4867         (find_variable) Removed.
4868         (find_dict_variable) Removed.
4869         (create_variable) Removed.
4870         (delete_variable) Removed.
4871         (common_init_stuff) Removed.
4872         (init_variable) Removed.  Updating of inp_init moved into
4873         cmd_end_input_program().
4874         (replace_variable) Removed.
4875         (rename_variable) Removed.
4876         (clear_variable) Removed.
4877         (dup_variable) Removed.
4878
4879         * vars-prs.c: (is_varname) Removed.
4880         (is_dict_varname) Removed.
4881         (fill_all_vars) Removed.
4882
4883         * vector.c: (find_vector) Removed.
4884
4885         * weight.c: (stop_weighting) Removed.
4886
4887         * dictionary.c: New file.
4888         (dict_create) New, replaces new_dictionary().
4889         (dict_clone) New, replaces save_dictionary() and
4890         restore_dictionary().
4891         (dict_clear) New, replaces clear_default_dict().
4892         (dict_destroy) New, replaces free_dictionary().
4893         (dict_get_var_cnt) New function, replaces references to
4894         dict->nvar.
4895         (dict_get_var) New function, replaces references to dict->var[i].
4896         (dict_get_vars) New function, replaces fill_all_vars().
4897         (dict_create_var) New, replaces create_variable().  Interface
4898         drops `type' parameter, using a zero `width' to designate numeric.
4899         (dict_clone_var) New, replaces dup_variable().
4900         (dict_rename_var) New, replaces rename_variable().
4901         (dict_lookup_var) New, replaces find_variable(),
4902         find_dict_variable(), is_varname().
4903         (dict_contains_var) New function.
4904         (compare_variable_dblptrs) New function.
4905         (dict_delete_var) New function, replaces clear_variable().
4906         (dict_delete_vars) New function, replaces dict_delete_run().
4907         (dict_reorder_vars) New function.
4908         (dict_rename_vars) New function, replaces rename_variables().
4909         (dict_get_weight) New function, replaces reading dict->weight_var.
4910         (dict_set_weight) New function, replaces writing dict->weight_var
4911         or calling stop_weight(dict).
4912         (dict_get_filter) New function, replaces reading dict->filter_var.
4913         (dict_set_filter) New function, replaces writing dict->filter_var.
4914         (dict_get_case_limit) New function, replaces reading dict->N.
4915         (dict_set_case_limit) New function, replaces writing dict->N.
4916         (dict_get_value_cnt) New function, replaces reading dict->nval.
4917         (dict_compact_values) New function, replaces a loop that was
4918         replicated in several places.
4919         (dict_get_split_vars) New function, replaces reading dict->splits.
4920         (dict_get_split_cnt) New function, replaces reading
4921         dict->n_splits.
4922         (dict_set_split_vars) New function, replaces writing dict->splits.
4923         (dict_get_label) New function, replaces reading dict->label.
4924         (dict_set_label) New function, replaces writing dict->label.
4925         (dict_get_documents) New function, replaces reading
4926         dict->documents.
4927         (dict_set_documents) New function, replaces writing
4928         dict->documents.
4929         
4930         All references to above functions updated.
4931         
4932         * aggregate.c: (cmd_aggregate) Copy file label and documents from
4933         old dictionary to new by hand, because dict_create() can't do it
4934         itself.  Use dict_set_documents(), dict_set_split_vars().
4935
4936         * temporary.c: (cancel_temporary) Also set temp_dict to NULL after
4937         calling dict_destroy().
4938
4939         * data-list.c: (dls_var_spec) Remove `type' member, replace by
4940         `width'.
4941         (fixed_parse_compatible) Some slightly nontrivial changes for
4942         dict_create_var().
4943         (dump_fmt_list) Ditto.
4944         (parse_free) Ditto.
4945
4946         * file-type.c: (create_col_var) Ditto.
4947
4948         * get.c: (cmd_get) Use dict_compact_values() instead of a loop.
4949         (trim_dictionary) Use dict_delete_vars(), dict_reorder_vars().
4950         (rename_variables) Use dict_rename_vars().
4951         (mtf_merge_dictionary) Use dict_get_documents(),
4952         dict_set_documents(), dict_compact_values().
4953
4954         * pfm-read.c: (read_variables) Deal with changes to weighting.
4955
4956         * q2c.c: (dump_parser) Use dict_lookup_var() instead of
4957         is_varname() in output code.
4958
4959         * sfm-read.c: (read_header) Use dict_create(), dict_set_label(),
4960         other dictionary functions.
4961
4962         * title.c: (add_document_line) Use dict_get_documents(),
4963         dict_set_documents().
4964
4965         * vars-atr.c: (discard_variables) Use dict_clear(default_dict),
4966         reset default_handle by hand.  dict_clear() will clear vectors so
4967         there's no need for that by hand.
4968
4969         * vfm.c: (close_active_file) Move call to finish_compaction()
4970         earlier, so that we can do the compaction as a single step using
4971         dict_compact_values().  Use dict_clear_vectors().
4972         (finish_compaction) Use dict_delete_var(), dict_compact_values().
4973                 
4974         Some functions don't have replacements:
4975
4976         * vars-atr.c: (force_create_variable) Removed.  All references
4977         updated to dict_create_var() followed by an assertion.
4978         (force_dup_variable) Removed.  All references updated to
4979         dict_clone_var() followed by an assertion.
4980         
4981         * weight.c: (update_weighting) Removed.  No longer necessary, so
4982         all references removed.
4983
4984 Sat Dec 27 16:43:01 2003  Ben Pfaff  <blp@gnu.org>
4985
4986         Clean up AGGREGATE.
4987         
4988         * aggregate.c: Eliminate separation of weighted and unweighted
4989         case.  It made the code too obscure and I doubt it was actually
4990         faster.  Instead, all code uses the "weighted" code, because
4991         that's a generalization of the "unweighted" code.
4992         (FWEIGHT) Removed.
4993         (FOPTIONS) Ditto.
4994         (parse_aggregate_functions) No need to set FWEIGHT.
4995         (accumulate_aggregate_info) Get rid of FWEIGHT cases.
4996         (dump_aggregate_info) Ditto.
4997         (initialize_aggregate_info) No need for special plain_function
4998         that gets rid of FWEIGHT option.
4999
5000         * aggregate.c: Get rid of approximations.
5001         (accumulate_aggregate_info) Don't use approx_gt(), approx_lt(),
5002         approx_in_range().
5003         (aggregate_single_case) Don't use approx_ne().
5004
5005 Sat Dec 27 16:19:36 2003  Ben Pfaff  <blp@gnu.org>
5006
5007         * ascii.c (ascii_line_width): Dead code, removed.
5008
5009         * postscript.c (ps_line_width): Ditto.
5010
5011         * q2c.c (xrealloc): Ditto.
5012
5013         * count.c (internal_cmd_count): Ditto.
5014
5015         * means.q (validate_dependent_endpoint): Ditto.
5016
5017         * set.q: (cmd_gset) Ditto.
5018
5019         * weight.c: [0] (weight_trns_proc) Ditto.
5020
5021 Sat Dec 27 16:18:16 2003  Ben Pfaff  <blp@gnu.org>
5022
5023         Make the code -Wmissing-prototypes clean.
5024
5025         * Makefile.am (version.c): Add #include "version.h".
5026         
5027         * ascii.c: (ascii_open_global) Make static.
5028         (ascii_close_page) Ditto.
5029         (ascii_font_sizes) Ditto.
5030         (ascii_postopen_driver) Ditto.
5031         (ascii_close_driver) Ditto.
5032         (ascii_option) Ditto.
5033         (ascii_open_page) Ditto.
5034         (ascii_line_horz) Ditto.
5035         (ascii_line_vert) Ditto.
5036         (ascii_line_intersection) Ditto.
5037         (ascii_box) Ditto.
5038         (ascii_polyline_begin) Ditto.
5039         (ascii_polyline_point) Ditto.
5040         (ascii_polyline_end) Ditto.
5041         (ascii_text_set_font_by_name) Ditto.
5042         (ascii_text_set_font_by_position) Ditto.
5043         (ascii_text_set_font_by_family) Ditto.
5044         (ascii_text_get_font_name) Ditto.
5045         (ascii_text_get_font_family) Ditto.
5046         (ascii_text_set_size) Ditto.
5047         (ascii_text_get_size) Ditto.
5048         (ascii_text_metrics) Ditto.
5049         (ascii_text_draw) Ditto.
5050         (ascii_close_page) Ditto.
5051
5052         * cmdline.h: New header for parse_command_line().  Used where
5053         needed.
5054
5055         * command.c: Move prototypes for cmd_*() functions to command.h.
5056
5057         * command.h: Prototypes for cmd_*() functions moved here from
5058         command.c.
5059
5060         * crosstabs.q: (gamma_int) Ditto.
5061
5062         * file-handle.h: Add fh_init_files() prototype.
5063         
5064         * getline.c: (welcome) Ditto.
5065
5066         * glob.h: New header for init_glob().  Used where appropriate.
5067
5068         * hash.c: (comparison_helper) Ditto.
5069
5070         * html.c: (html_open_global) Ditto.
5071         (html_close_global) Ditto.
5072         (html_preopen_driver) Ditto.
5073         (html_postopen_driver) Ditto.
5074         (html_close_driver) Ditto.
5075         (html_option) Ditto.
5076         (html_open_page) Ditto.
5077         (html_close_page) Ditto.
5078         (html_submit) Ditto.
5079
5080         * inpt-pgm.c: (input_program_source_read) Ditto.
5081
5082         * output.c: (find_defn_value) Ditto.
5083         (destroy_list) Ditto.
5084
5085         * pfm-read.c: (read_int) Ditto.
5086
5087         * postscript.c: (ps_open_global) Ditto.
5088         (ps_close_global) Ditto.
5089         (ps_font_sizes) Ditto.
5090         (ps_preopen_driver) Ditto.
5091         (ps_postopen_driver) Ditto.
5092         (ps_close_driver) Ditto.
5093         (ps_option) Ditto.
5094         (ps_open_page) Ditto.
5095         (ps_close_page) Ditto.
5096         (ps_line_horz) Ditto.
5097         (ps_line_vert) Ditto.
5098         (ps_line_intersection) Ditto.
5099         (ps_box) Ditto.
5100         (ps_polyline_begin) Ditto.
5101         (ps_polyline_point) Ditto.
5102         (ps_polyline_end) Ditto.
5103         (ps_text_set_font_by_name) Ditto.
5104         (ps_text_set_font_by_position) Ditto.
5105         (ps_text_set_font_family) Ditto.
5106         (ps_text_get_font_name) Ditto.
5107         (ps_text_get_font_family) Ditto.
5108         (ps_text_set_size) Ditto.
5109         (ps_text_get_size) Ditto.
5110         (ps_text_metrics) Ditto.
5111         (ps_text_draw) Ditto.
5112
5113         * q2c.c: (finish_up) Ditto.
5114         (xmalloc) Ditto.
5115         (xstrdup) Ditto.
5116         (get_buffer) Ditto.
5117         (st_lower) Ditto.
5118         (st_upper) Ditto.
5119         (skip_ws) Ditto.
5120         (get_line) Ditto.
5121         (add_symbol) Ditto.
5122         (find_symbol) Ditto.
5123         (lex_get) Ditto.
5124         (force_id) Ditto.
5125         (force_string) Ditto.
5126         (match_id) Ditto.
5127         (match_token) Ditto.
5128         (skip_token) Ditto.
5129         (parse) Ditto.
5130         (parse_setting) Ditto.
5131         (parse_specifier) Ditto.
5132         (parse_specifiers) Ditto.
5133         (parse_subcommand) Ditto.
5134         (dump_specifier_vars) Ditto.
5135         (is_keyword) Ditto.
5136         (make_identifier) Ditto.
5137         (dump_declarations) Ditto.
5138         (dump_specifier_init) Ditto.
5139         (dump_vars_init) Ditto.
5140         (make_match) Ditto.
5141         (dump_specifier_parse) Ditto.
5142         (dump_subcommand) Ditto.
5143         (dump_parser) Ditto.
5144         (dump_header) Ditto.
5145         (dump_free) Ditto.
5146         (recognize_directive) Ditto.
5147
5148         * recode.c: (string_to_long) Ditto.
5149
5150         * repeat.c: (find_DO_REPEAT_substitution) Ditto.
5151
5152         * repeat.h: New header for perform_DO_REPEAT_substitutions, used
5153         where appropriate.
5154
5155         * sort.c: (sort_stream_read) Ditto.
5156         (sort_stream_mode) Ditto.
5157         
5158 Fri Dec 19 23:35:04 2003  Ben Pfaff  <blp@gnu.org>
5159
5160         * algorithm.c (binary_search): Fix comparison.
5161
5162 Fri Dec 19 23:27:45 2003  Ben Pfaff  <blp@gnu.org>
5163
5164         * algorithm.c: (binary_search) Fix assertion.
5165
5166 Fri Dec 19 21:31:48 2003  Ben Pfaff  <blp@gnu.org>
5167
5168         * sysfile-info.c: (compare_vectors_by_name) Rewrite.
5169
5170 Fri Dec 19 21:30:24 2003  Ben Pfaff  <blp@gnu.org>
5171
5172         * sort.c: (compare_case_lists) Rewrite.
5173
5174 Fri Dec 19 16:44:22 2003  Ben Pfaff  <blp@gnu.org>
5175
5176         * quicksort.c: Removed (not used).
5177
5178         * quicksort.h: Removed (not used).
5179
5180         * sort.c: Removed blp_quicksort() prototype.
5181
5182 Fri Dec 19 16:42:13 2003  Ben Pfaff  <blp@gnu.org>
5183
5184         * postscript.c: (int_2_compare) Rewrite.
5185         (compare_line) Rewrite.
5186
5187 Fri Dec 19 16:38:35 2003  Ben Pfaff  <blp@gnu.org>
5188
5189         * matrix-data.c (compare_factors) Use lexicographical_compare()
5190         algorithm.
5191         (compare_doubles) New function.
5192         
5193         * algorithm.c: (lexicographical_compare) New algorithm.
5194
5195 Fri Dec 19 16:23:45 2003  Ben Pfaff  <blp@gnu.org>
5196
5197         * matrix-data.c (compare_variables_by_mxd_vartype): Rewrite.
5198
5199 Fri Dec 19 15:54:45 2003  Ben Pfaff  <blp@gnu.org>
5200
5201         * expr-prs.c: (cmp_func) Removed.
5202         (parse_function) Use binary_search() algorithm.
5203         (compare_functions) New function.
5204         (init_func_tab) Use sort() algorithm.
5205
5206         * algorithm.c: (binary_search) New algorithm.
5207
5208 Fri Dec 19 15:50:45 2003  Ben Pfaff  <blp@gnu.org>
5209
5210         * descript.q: (display) Use sort() algorithm instead of qsort().
5211         (compare_func) Removed.
5212         (descriptives_compare_variables) New function.
5213
5214 Fri Dec 19 15:08:38 2003  Ben Pfaff  <blp@gnu.org>
5215
5216         Get rid of AVL trees.  Hashes are more appropriate for everything
5217         PSPP does.
5218
5219         * Makefile.am: (pspp_SOURCES) Remove avl.c, avl.h.
5220         
5221         * avl.c: Removed.
5222
5223         * avl.h: Removed.
5224
5225 Fri Dec 19 14:33:31 2003  Ben Pfaff  <blp@gnu.org>
5226
5227         Much code can be clarified by using C++ STL-like algorithms.  Not
5228         all uses of these algorithms are listed below, only the ones where
5229         the change to an algorithm was the only change of interest.
5230         
5231         * Makefile.am: (pspp_SOURCES) Add algorithm.c, algorithm.h.
5232         
5233         * algorithm.c: New file.
5234
5235         * algorithm.h: New file.
5236
5237         * modify-vars.c: (static var forward) Removed.
5238         (static var positional) Removed.
5239         (compare_variables) Removed.
5240         (struct ordering) New.
5241         (cmd_modify_vars) Use sort() algorithm.
5242         (compare_variables_given_ordering) New function.
5243         (rearrange_dict) Use sort() algorithm.
5244
5245         * sysfile-info.c: (cmd_display) Use sort() algorithm.
5246         (cmp_var_by_name) Removed.
5247
5248 Fri Dec 19 14:26:17 2003  Ben Pfaff  <blp@gnu.org>
5249
5250         Make file handles use a hash table.
5251         
5252         * file-handle.q: (files) Change to hash table, make static.
5253         (cmd_file_handle) Use hash table functions.
5254         (fh_get_handle_by_filename) Ditto.
5255         (fh_get_handle_by_name) Ditto.
5256         (hash_file_handle) New function.
5257         (cmp_file_handle) Rewrite.
5258         (fh_init_files) Use hash table functions.
5259
5260 Fri Dec 19 14:24:38 2003  Ben Pfaff  <blp@gnu.org>
5261
5262         Clean up FREQUENCIES.
5263         
5264         * Makefile.am: (pspp_SOURCES) Remove frequencies.g.
5265
5266         * frequencies.q: Remove a lot of old #if'd out code at the end.
5267         (internal_cmd_frequencies) Use calc() instead of calc_no_weight()
5268         or calc_weight().  Initialize percentile_values.
5269         (calc) New function based on calc_weight() from frequencies.g.
5270         (precalc) Use hash functions.
5271         (static var comparison_func) Removed.
5272         (static var comparison_param) Removed.
5273         (comparison_helper) Removed.
5274         (get_freq_comparator) New function.
5275         (not_missing) New function.
5276         (add_freq) Removed.
5277         (postprocess_freq_tab) Use hash table functions, algorithms,
5278         get_freq_comparator().  Rewrite.
5279         (cleanup_freq_tab) Rephrase.
5280         (add_percentile) Clean up spacing.
5281         (hash_value_numeric) New function.
5282         (hash_value_alpha) New function.
5283         (compare_value_numeric_a) Rewrite.
5284         (compare_value_alpha_a) Rewrite.
5285         (compare_value_numeric_d) Rewrite.
5286         (compare_value_alpha_d) Rewrite.
5287         (compare_freq_numeric_a) Rewrite.
5288         (compare_freq_alpha_a) Rewrite.
5289         (compare_freq_numeric_d) Rewrite.
5290         (compare_freq_alpha_d) Rewrite.
5291         (calc_stats) Clean up mode, percentiles, max.
5292         (dump_statistics) Clean up spacing.
5293         
5294         * frequencies.g: Removed.
5295
5296         * var.h: (struct freq_tab) Change `data' to hash table.
5297
5298 Fri Dec 19 14:15:46 2003  Ben Pfaff  <blp@gnu.org>
5299
5300         * file-handle.h: Remove declaration of global variable `files',
5301         which wasn't used anywhere.
5302
5303         * postscript.c: (add_encoding) Remove superfluous cast.
5304         (line) Ditto.
5305
5306         * sfm-read.c: [linux] (bswap_int32) Drop ntohl() non-portable
5307         version.
5308
5309         * temporary.c: [0] (display_tree) Removed.
5310
5311 Fri Dec 19 14:13:04 2003  Ben Pfaff  <blp@gnu.org>
5312
5313         Implement a new random number generator based on the alleged RC4
5314         algorithm.
5315
5316         * expr-evl.c: (expr_evaluate) Use rng_get_double_normal() instead
5317         of rand_normal().
5318
5319         * random.c: [!HAVE_GOOD_RANDOM] (real_rand) Removed.
5320         [!HAVE_GOOD_RANDOM] (real_srand) Removed.
5321         (macro k) Removed.
5322         (static var V[]) Removed.
5323         (static var Y) Removed.
5324         (static var X2) Removed.
5325         (setup_randomize) Removed.
5326         (shuffle) Removed.
5327         (rand_uniform) Removed.
5328         (rand_normal) Removed.
5329         (struct rng) New structure.
5330         (rng_create) New function.
5331         (rng_destroy) New function.
5332         (swap_byte) New static function.
5333         (rng_seed) New function.
5334         (rng_get_bytes) New function.
5335         (rng_get_int) New function.
5336         (rng_get_unsigned) New function.
5337         (rng_get_double) New function.
5338         (rng_get_double_normal) New function.
5339         (pspp_rng) New function.
5340
5341         * random.h: Sync up to random.c.
5342
5343         * sample.c: (struct sample_trns) Make `frac' unsigned and a
5344         fraction of UINT_MAX, not 65536.
5345         (cmd_sample) Use rng_get_unsigned(), rng_get_double(), UINT_MAX
5346         fraction.
5347
5348         * vfm.c: (open_active_file) No need to call setup_randomize() any
5349         longer.
5350
5351 Fri Dec 19 12:05:56 2003  Ben Pfaff  <blp@gnu.org>
5352
5353         Change dictionary name indexes to use hash tables instead of AVL
5354         trees.
5355
5356         * crosstabs.q: (free_var_dict) Use hash tables.
5357         (crs_custom_tables) Ditto.
5358         (calc_general) Ditto.
5359         (compare_table_entry) Rewrite.
5360         (enum_var_values) Reorder parameters.  All references updated.
5361         Rewrite.
5362
5363         * get.c: (rename_variable) Use hash tables.
5364         (mtf_merge_dictionary) Ditto.
5365
5366         * glob.c: (init_glob) Use hash tables.
5367         (cmp_variable) Removed.
5368
5369         * means.q: (mns_custom_tables) Use hash tables.
5370
5371         * modify-vars.c: (rearrange_dict) Use hash tables.
5372
5373         * rename-vars.c: (cmd_rename_variables) Use hash tables.
5374
5375         * sfm-read.c: (read_header) Use hash tables.
5376         (read_variables) Ditto.
5377
5378         * temporary.c: (new_dictionary) Use hash tables.
5379         (save_dictionary) Ditto.
5380         (restore_dictionary) Ditto.
5381
5382         * var.h: (struct dictionary) Change AVL tree `var_by_name' into
5383         hash table `name_tab'.
5384
5385         * vars-atr.c: [DEBUGGING] (dump_one_var_node) Removed.
5386         [DEBUGGING] (dump_var_tree) Removed.
5387         (find_variable) Use hash tables.
5388         (find_dict_variable) Ditto.
5389         (common_init_stuff) Ditto.
5390         (rename_variable) Ditto.
5391         (clear_variable) Ditto.  Also, remove debug code.
5392         (dup_variable) Use hash tables.
5393
5394         * vars-prs.c: (fill_all_vars) Use hash tables.
5395         (is_dict_varname) Ditto.
5396         (parse_dict_variable) Ditto.
5397         
5398 Fri Dec 19 11:46:23 2003  Ben Pfaff  <blp@gnu.org>
5399
5400         Change value labels to use hash tables instead of AVL trees, and
5401         change value labels into an ADT.
5402
5403         * Makefile.am: (pspp_SOURCES) Add value-labels.c, value-labels.h.
5404         
5405         * value-labels.c: New file.
5406
5407         * value-labels.h: New file.
5408
5409         * apply-dict.c: (cmd_apply_dictionary) Use value label ADT.
5410         Get rid of a stupid use of goto.
5411
5412         * autorecode.c: (compare_alpha_value) Rewrite.
5413         (hash_alpha_value) Ditto.
5414         (compare_numeric_value) Rewrite.
5415         (hash_numeric_value) Ditto.
5416
5417         * frequencies.q: (dump_full) Use value label ADT.
5418
5419         * pfm-read.c: (read_value_label) Use value label ADT.
5420
5421         * pfm-write.c: (write_value_labels) Use value label ADT.
5422
5423         * sfm-read.c: (read_variables) Use value label ADT.
5424         (read_value_labels) Rewrite.
5425
5426         * sfm-write.c: (write_value_labels) Rewrite.
5427
5428         * sysfile-info.c: (cmd_sysfile_info) Use value label ADT.
5429         (display_variables) Ditto.
5430         (describe_variable) Ditto.
5431
5432         * t-test.q: (print_t_groups) Use value label ADT.
5433
5434         * temporary.c: (copy_variable) Use value label ADT.
5435         (free_dictionary) Ditto.
5436
5437         * val-labs.c: (verify_val_labs) Use value label ADT.
5438         (get_label) Ditto.
5439         (debug_print) Ditto.
5440         (val_lab_cmp) Removed.
5441         (inc_ref_count) Removed.
5442         (copy_value_labels) Removed.
5443
5444         * var.h: (struct value_label) Removed.
5445         (struct variable) Change AVL tree `val_lab' into hash table
5446         `val_labs'.
5447
5448         * vars-atr.c: (init_variable) Use value label ADT.
5449         (clear_variable) Ditto.
5450         (free_value_label) Removed.
5451         (free_val_lab) Removed.
5452         (get_val_lab) Removed.
5453         (compare_variables) New function.
5454         (hash_variable) New function.
5455
5456         * vfm.c: (dump_splits) Use value label ADT.
5457
5458 Fri Dec 19 11:18:11 2003  Ben Pfaff  <blp@gnu.org>
5459
5460         Add to the hash table interface.
5461
5462         * hash.c: (hsh_hash_bytes) Add assertion.
5463         (hsh_hash_string) Ditto.
5464         (hsh_clear) Ditto.
5465         (hsh_rehash) Ditto.
5466         (hsh_probe) Ditto.
5467         (hsh_create) Ditto.  Also make minimum `size'.
5468         (hsh_destroy) Rephrase.
5469         (sort_nulls_last) Removed.
5470         (not_null) New function.
5471         (hsh_data) Ditto.
5472         (comparison_helper) Ditto.
5473         (hsh_sort) Rewritten.
5474         (hsh_data_copy) New function.
5475         (hsh_sort_copy) Ditto.
5476         (hsh_insert) Ditto.
5477         (hsh_replace) Ditto.
5478         (hsh_hash_double) Ditto.
5479         (hsh_delete) Fix stupid bug.
5480         
5481 Thu Dec 18 12:27:03 WAST 2003 John Darrington <john@darrington.wattle.id.au>
5482         * added a calculation of the mode to FREQUENCIES
5483
5484 Wed Dec 17 12:53:01 WAST 2003 John Darrington <john@darrington.wattle.id.au>
5485
5486         * moved (un)defs of DEBUGGING to config.h
5487
5488 Mon Dec 15 21:35:59 2003  Ben Pfaff  <blp@gnu.org>
5489
5490         * groff-font.c: (add_kern) Fix indentation.
5491         (add_kern) Use & instead of % to take power-of-2 modulus.
5492         (font_get_kern_adjust) Likewise.
5493
5494 Fri Dec 12 23:54:37 2003  Ben Pfaff  <blp@gnu.org>
5495
5496         * autorecode.c: (recode) Replace stupid use of memcpy() by
5497         memberwise copy.
5498         (hash_alpha_value) Use hsh_hash_bytes().  Get rid of nasty casts.
5499         (hash_numeric_value) Ditto.
5500         (autorecode_proc_func) pool_strdup() was wrong here because the
5501         source string was not null-terminated.  Use new pool_strndup()
5502         instead.
5503
5504         * crosstabs.q: (enum_var_values) Remove superfluous and bizarre
5505         use of hsh_iterator_init().
5506
5507         * data-in.c: (parse_N) Initialize i->v->f.
5508
5509         * flip.c: (cmd_flip) Use memmove(), not memcpy(), to copy
5510         overlapping arrays.
5511
5512         * groff-font.c: Use power-of-2 hash table sizes, not prime.
5513         (groff_read_font) Don't call hsh_next_prime().  Don't call
5514         fclose(NULL).
5515         (static var hash) Remove `size_p', `max_used' members.
5516         (font_char_name_to_index) Don't call hsh_next_prime().  Use
5517         hsh_hash_string() instead of hashpjw(), & instead of %.
5518         (default_font) Don't call hsh_next_prime().
5519
5520         * pool.c: (pool_strndup) New function.
5521         (pool_strdup) Reimplement in terms of pool_strndup.
5522
5523         * postscript.c: (hash_font_entry) Use hsh_hash_string().  Get rid
5524         of nasty casts.
5525         (hash_ps_encoding) Use hsh_hash_string().
5526         (hash_ps_combo) Use hsh_hash_string(), hsh_hash_int().
5527         (hash_filename2font) Use hsh_hash_string().
5528
5529         * som.c: Add #include <stdlib.h>.
5530
5531         * tab.c: (tab_destroy) Don't set t->container after freeing `t'
5532         (by destroying its pool).
5533         
5534 Fri Dec 12 23:18:59 2003  Ben Pfaff  <blp@gnu.org>
5535
5536         Miscellaneous hash table code cleanup:
5537         
5538         * hash.h: (struct hsh_table) Moved into hash.c.
5539         (hsh_count) Ditto, and transformed into function.
5540         (hsh_compare_func) New typedef, used for defining otherwise-long
5541         function types here and in hash.c
5542         (hsh_hash_func) Ditto.
5543         (hsh_free_func) Ditto.
5544         
5545         * hash.c: (struct hsh_table) Renamed `n' to `used', `m' to `size',
5546         `table' to `entries'.  Removed `mp'.  All references updated.
5547         (hsh_clear) Don't shrink entries array; if the hash was this big
5548         once, it probably will be again.
5549         (hsh_rehash) Made static.
5550         (force_hsh_insert) Renamed hsh_force_insert.
5551         (force_hsh_find) Renamed hsh_force_find.
5552
5553         Made hash table sizes powers of 2, because that's fine with any
5554         reasonable hash function and because taking a power-of-2 modulus
5555         is faster than any other:
5556         
5557         (hsh_prime_tab) Removed;
5558         (hsh_next_prime) Ditto.
5559         (next_power_of_2) New function.
5560         (hsh_create) Use next_power_of_2.
5561         (hsh_rehash) Use & instead of %.
5562
5563         Cleaned up hsh_sort:
5564         
5565         (internal_comparison_fn) Removed.
5566         (sort_nulls_last) New function.
5567         (hsh_sort) Removed second parameter, switched to using the new
5568         quicksort() function from quicksort.h to avoid using nasty need
5569         for static variables with qsort().  All references updated.
5570
5571         Changed the hash functions offered, because there are better hash
5572         functions than the ones we had, and cleaned up the names to boot:
5573         
5574         * hash.c: (hashpjw_d) Removed.
5575         (hashpjw) Ditto.
5576         (hsh_hash_bytes) New function.
5577         (hsh_hash_string) New function.
5578         (hsh_hash_int) New function.
5579
5580         Improved the hash table iteration interface:
5581         
5582         * hash.h: (hsh_iterator_init) Removed.
5583         (struct hsh_iterator) Removed `init' member, change `next' to
5584         size_t.
5585
5586         * hash.c: (hsh_foreach) Removed.  All references updated to use
5587         hsh_first/hsh_next instead.
5588         (hsh_first) New function.  Notably, unlike hsh_foreach() it does
5589         not treat a null pointer as an empty hash table.
5590         (hsh_next) New function.
5591
5592         Made deletion possible, though slow:
5593
5594         * hash.c: (locate_matching_entry) New function.
5595         (hsh_find) Use locate_matching_entry().
5596         (hsh_delete) New function also using locate_matching_entry().
5597         (hsh_force_delete) New function.
5598
5599 Fri Dec 12 23:16:10 2003  Ben Pfaff  <blp@gnu.org>
5600
5601         * quicksort.c: New file implementing a sort routine with a
5602         interface better than qsort() because it passes a user-provided
5603         parameter to the sort routine.
5604
5605         * Makefile.am: Add quicksort.c, quicksort.h.
5606
5607 Fri Dec 12 13:31:58 2003  Ben Pfaff  <blp@gnu.org>
5608
5609         * All source files: Get rid of nasty special cases for Checker,
5610         which is pretty obsolete now.
5611
5612 Thu Dec 11 21:38:24 WST 2003 John Darrington <john@darrington.wattle.id.au>
5613
5614         * Fixed a bug apparent when using the FREQUENCIES command with the
5615         html driver.  The html driver was incorrectly trying to display 
5616         empty cells.
5617
5618 Sun Jan  2 21:40:13 2000  Ben Pfaff  <blp@gnu.org>
5619
5620         * Makefile.am: Reorganized.  Put locale dir in version.c instead
5621         of passing it to each compile command.  Only put local gmp libs in
5622         LD_ADD if not installed on system.  Remove `boast' target.
5623
5624         * All source files: struct and union typedefs eliminated.
5625         `sizeof type' replaced by `sizeof object' where practical.  Moved
5626         `unused' qualifiers from start to end of declarations for gcc
5627         2.7.2 compatibility.  Change `while (1)' to `for (;;)'.  Made
5628         assertions on pointers strictly compliant.  Removed _ prefixes on
5629         some function parameter names.
5630
5631         * alloc.c: New source file, containing these external linkage
5632         functions removed from common.c: xmalloc, xcalloc, xrealloc,
5633         xstrdup.
5634
5635         * arena.c: Removed.
5636         
5637         * arena.h: Removed.
5638
5639         * ascii.c: Migrated from arenas to pools.
5640         (struct ascii_driver_ext) ops[], box[], fonts[] changed from
5641         c_string to len_string.  All references changed.
5642         (ascii_option) Signature changed to comply to new output.c
5643         interface.
5644         (count_fancy_chars) Removed.
5645         (delineate) Removed support for rich text.
5646         (ascii_text_metrics) Ditto.
5647         (text_draw) Ditto.
5648         (output_shorts) Change `box', `off', `on' from c_string to
5649         len_string.  Change `remaining' from int to size_t.
5650         (ascii_close_page) Make page numbering less haphazard.
5651
5652         * autorecode.c: Migrate from arenas to pools.
5653
5654         * avl.c: Migrate from arenas to pools.  Synch from libavl 1.4.0.
5655
5656         * bitvector.h: New file containing these macros from misc.h:
5657         SET_BIT, CLEAR_BIT, SET_BIT_TO, TEST_BIT, BIT_INDEX.
5658
5659         * command.c: (struct command) cmd1, cmd2, cmd3 members changed to
5660         word[3].  ncmd removed.
5661         (var empty_string) Removed.
5662         (var cmd_table) Declaration updated.
5663         (var cmdtab) Removed.
5664         (cmp_command) Removed.
5665         (split_words) Rewritten to use strtok_r().
5666         (init_cmd_parser) Renamed cmd_init().  Rewritten.
5667         (find_command) Removed.
5668         (FILE_TYPE_okay) Rewritten.
5669         (cmd_parse) Rewritten.  Semantics of the return value of command
5670         handlers has changed: they must now return one of the new CMD_*
5671         enumerals, rather than a magic value.  This meant that all
5672         commands had to be modified, and they were.
5673         (figure_out_command) New function.
5674
5675         * command.def: Add CORRELATIONS, PEARSON CORRELATIONS.  Add
5676         #defines for INIT, INPU, etc.
5677
5678         * command.h: New CMD_* enum series.
5679         (cur_proc) Make const char *, not char *.
5680         (cmd_init) Prototype.
5681         (cmd_parse) Ditto.
5682
5683         * common.c: Removed.
5684
5685         * common.h: Removed.
5686
5687         * correlations.q: New file.
5688
5689         * crosstabs.q: Migrate from arenas to pools.  Migrate to new-style
5690         q2c.
5691         (custom_tables) Renamed crs_custom_tables().
5692         (custom_variables) Renamed crs_custom_variables().
5693         (calc_integer) Add in some `const' qualifiers.
5694         (table_value_missing) Change from a_string to len_string.
5695         (float_M_suffix) Change from a_string to len_string.
5696
5697         * data-in.c: Rewritten.  All references to
5698         parse_string_as_format() changed to data_in().
5699
5700         * data-in.h: New file.
5701
5702         * data-list.c: Change DLS_* from #define's to enums.  Move from
5703         rpd_msg() to tmsg().
5704         (RPD_ERR) New #define.
5705         (do_reading) Change dfm_push_cust() to dfm_push(), pop_cust() to
5706         dfm_pop().
5707         (read_from_data_list_fixed) Change from old
5708         parse_string_as_format() to new data_in().
5709         (read_from_data_list_free) Ditto.
5710         (read_from_data_list_list) Ditto.
5711         (cmd_repeating_data) Modify approach to checking for end of
5712         command.
5713         (rpd_msg) Removed.
5714         (rpd_parse_record) Change from old parse_string_as_format() to new
5715         data_in().  Change from old convert_format_to_string() to new
5716         data_out().
5717         (read_one_set_of_repetitions) Change dfm_push_cust() to
5718         dfm_push(), pop_cust() to dfm_pop().
5719
5720         * data-out.c: Rewritten.  All references to
5721         convert_format_to_string() changed to data_out().
5722
5723         * descript.q: Migrate to new q2c.
5724         (cmd_descriptives) Removed.
5725         (internal_cmd_descriptives) Renamed cmd_descriptives ().
5726         (custom_variables) Renamed dsc_custom_variables().
5727
5728         * dfm.c: (struct dfm_fhuser_ext) `ln' removed.  All references
5729         removed.
5730         (open_file_r) Initialize h->where.line_number.  Migrate to new
5731         struct string.
5732         (open_file_w) Initialize h->where.line_number.
5733         (read_record) Change from ext->ln to h->where.line_number.
5734         Migrate to struct string.
5735         (dfm_put_record) Rephrased.
5736         (dfm_push_cust) Renamed dfm_push(), rewritten.
5737         (dfm_pop) New function.
5738
5739         * error.c: All references updated.
5740         (glob var error_count) Renamed err_err_count.
5741         (glob var warning_count) Renamed err_warning_count.
5742         (glob var error_already_flagged) Renamed err_already_flagged.
5743         (glob var verbosity) Renamed err_verbosity.
5744         (glob var cust_fn) Removed.
5745         (glob var cust_ln) Removed.
5746         (static var file_loc) New.
5747         (static var nfile_loc) New.
5748         (static var mfile_loc) New.
5749         (tmsg) New function.
5750         (push_cust) Removed.
5751         (pop_cust) Removed.
5752         (msg) Rewritten.
5753         (static var terminating) Removed.
5754         (failure) Renamed err_failure().
5755         (hcf) Renamed err_hcf().
5756         (err_push_file_locator) New function.
5757         (err_pop_file_locator) New function.
5758         (err_location) New function.
5759         (check_error_count) Renamed err_check_count().
5760         (vmsg) Renamed err_vmsg().  Interface changed.
5761         (verbose_msg) Removed.
5762         (err_cond_fail) New function.
5763         (error_break) Renamed err_break().
5764
5765         * error.h: All references updated.
5766         (enum MSG_CLASS_COUNT) Renamed ERR_CLASS_COUNT.
5767         (enum ERR_CLASS_MASK, ERR_VERBOSITY_SHIFT, ERR_VERBOSITY_MASK)
5768         New.
5769         (struct file_locator) New.
5770         (struct error) New.
5771         (macro verbose_msg) Removed.
5772         (macro cond_fail) Removed.
5773
5774         * expr-opt.c: (evaluate_tree) sizeof(char) == 1.
5775
5776         * expr-prs.c: Reorganized.  All references updated.
5777         (exprtypename) Renamed expr_type_name().
5778         (typename) Renamed type_name().
5779         (free_expression) Renamed expr_free().
5780         (parse_expression) Renamed expr_parse().  Uses new type_check()
5781         function.
5782         (init_functab) Renamed init_func_tab().
5783         (type_check) New function.
5784         (parse_or) Rewritten to use new allocate_nonterminal() and
5785         append_nonterminal_arg() functions.
5786         (parse_and) Ditto.
5787         (parse_not) Ditto.
5788         (parse_rel) Ditto.  Also simplified logic.
5789         (parse_add) Ditto.
5790         (parse_mul) Ditto.
5791         (parse_neg) Ditto.
5792         (parse_exp) Ditto.
5793         (SYSMIS_func) Ditto.
5794         (VALUE_func) Rephrased.
5795         (CONCAT_func) Fix memory leak by replacing free by free_node on
5796         lossage.
5797         (generic_str_func) Ditto.
5798         (parse_function) Ditto.  Also rephrasings.  Uses bsearch() to find
5799         function.
5800         (allocate_nonterminal) New function.
5801         (append_nonterminal_arg) New function.
5802         (static func_tab[]) Now at file level.
5803         (cmp_func) Moved.
5804         (init_func_tab) Moved.  Now just uses qsort() to sort func_tab[].
5805
5806         * expr.h: (enum series OP_*) Moved to exprP.h.
5807         (OP_* defines) Ditto.
5808         (struct op_desc) Ditto.
5809         (global ops[]) Ditto.
5810         (struct num_con_node) Ditto.
5811         (struct str_con_node) Ditto.
5812         (struct var_node) Ditto.
5813         (struct lag_node) Ditto.
5814         (struct casenum_node) Ditto.
5815         (struct nonterm_node) Ditto.
5816         (union any_node) Members renamed.
5817         (struct sys_node) Removed.
5818         (struct val_node) Removed.
5819         (operator typedef) Removed.
5820         (typedef exprtype) Removed.
5821         (enum series EX_*) Moved to exprP.h.
5822         (struct expression) Ditto.  Also renamed a lot of the members.
5823         (PXP_* defines) Changed to enums.
5824         (free_node prototype) Moved to exprP.h.
5825
5826         * file-handle.h: (struct file_handle) New member `where'.
5827
5828         * file-handle.q: Migrated to new q2c format.
5829         (prepend_current_directory) Removed (dead code).
5830         (cmd_file_handle) Incorporated all of internal_cmd_file_handle().
5831         (fh_get_handle_by_filename) Removed dead code.
5832         Set new `where' member.
5833
5834         * file-type.c: (file_type_source_read) References to
5835         parse_string_as_format() changed to data_in().
5836         dfm_push_cust()/pop_cust() changed to dfm_push()/dfm_pop().
5837
5838         * filename.c: All references updated.
5839         (init_filename) Renamed fn_init().
5840         (expand_line) Removed.
5841         (macro EXPAND_LINE) Removed.
5842         (interp_vars) Renamed fn_interp_vars().  Now uses st_*() instead
5843         of custom functions.
5844         (gnu_getcwd) Renamed fn_get_cwd(), rewritten.
5845         (tilde_expand) Renamed fn_tilde_expand(), uses ds_*().
5846         (normalize_filename) Renamed fn_normalize().
5847         (search_path) Renamed fn_search_path(), rewritten.
5848         (prepend_dir) Renamed fn_prepend_dir().
5849         (blp_getenv) Renamed fn_getenv().
5850         (blp_dirname) Renamed fn_dirname().
5851         (fn_basename) New function, not used.
5852         (absolute_filename_p) Renamed fn_absolute_p().
5853         (is_special_filename) Renamed fn_special_p().
5854         (file_exists) Renamed fn_exists_p().
5855         (readlink_malloc) Renamed fn_readlink().
5856         (getenv_default) Renamed fn_getenv_default().
5857         (open_file) Renamed fn_open().
5858         (close_file) Renamed fn_close().
5859         (open_file_ext) Renamed fn_open_ext().
5860         (close_file_ext) Renamed fn_close_ext().
5861
5862         * font.h: Migrate from arenas to pools.
5863
5864         * format.c: (parse_format_specifier_name) Deal with ds_* strings.
5865
5866         * frequencies.g: Migrate from arenas to pools.
5867
5868         * frequencies.q: Migrate to new q2c version.  Migrate from arenas
5869         to pools.
5870
5871         * getline.c: All references updated.
5872         (global getl_buf) Changed from char * to struct string.
5873         (static getl_include_path) Ditto.
5874         (global getl_buf_len) Removed.
5875         (global getl_buf_size) Removed.
5876         (getl_include_path) Deal with new getl_buf, getl_include_path.
5877         (getl_uninitialize) New function.
5878         (getl_get_current_directory) Rewritten.
5879         (getl_clear_include_path) Rewritten.
5880         (getl_add_include_dir) Rewritten.
5881         (getl_add_file) Assertion fixed.
5882         (getl_add_virtual_file) Change initial value of `remaining_loops'
5883         from 2 to 1.
5884         (welcome) Rewritten.
5885         (handle_line_buffer) Make static.  Change logic to make
5886         getl_add_virtual_file() change sensible.  Use ds_*() strings.
5887         (getl_read_line) Use ds_*() strings.  Implement SET ECHO.
5888         (getl_close_file) Moved.
5889         (getl_location) New function.
5890
5891         * getline.h: All references updated.
5892         (macro curln) Removed.
5893         (macro curfn) Removed.
5894         (macro am_interactive) Renamed getl_am_interactive.
5895         (macro am_reading_script) Renamed getl_reading_script.
5896
5897         * glob.c: (global fmt_parse_ignore_error) Removed.
5898         (init_glob) Use locale_dir not LOCALEDIR.  Use feholdexcept() on
5899         systems that support it (C99).  Turn off SET ECHO by default.  No
5900         necessary julcal initialization anymore.
5901
5902         * groff-font.c: Migrate from arenas to pools.
5903         (groff_read_font) Use err_push_file_locator().
5904         (groff_read_DESC) Ditto.
5905         (font_msg) Use tmsg().
5906
5907         * hash.c: (hsh_sort) Fix debug code.
5908         [GLOBAL_DEBUGGING] Include stdio.h.
5909
5910         * hash.h: (macro force_hsh_insert) Rephrase.
5911
5912         * heap.c: Rewritten.
5913         
5914         * heap.h: Rewritten.
5915
5916         * html.c: (html_option) Change from outp_value to struct string.
5917         (postopen) Change from curfn to getl_location().
5918         (escape_string) Remove rich-text code.  Signature changed.
5919         (output_tab_table) Switch from a_string to struct len_string.
5920         Remove rich text support.
5921
5922         * lexer.c: All references updated.  Largely rewritten.  Major
5923         changes listed below.  Removed tagged quote support.  Adapted to
5924         struct string tokstr.
5925         (global tokstr) Changed to struct string.
5926         (global tokstr_size) Removed.
5927         (global tokstr_len) Removed.
5928         (global tokid) New.
5929         (global tokint) Removed.
5930         (global toklongstr) Removed.
5931         (C* defines) Removed.
5932         (static tbl[]) Removed.
5933         (static id[]) Removed.
5934         (static une[]) Removed.
5935         (discard_line) Renamed lex_discard_line().
5936         (get_entire_line) Renamed lex_entire_line().
5937         (get_rest_of_line) Renamed lex_rest_of_line().
5938         (get_dotted_rest_of_line) Merged into lex_rest_of_line().
5939         (make_hexit) Removed.
5940         (syntax_error) Renamed lex_error().  Return value removed.
5941         (get_token_representation) Renamed lex_token_representation().
5942         (putback) Renamed lex_put_back().
5943         (putfwd) Renamed lex_put_forward().
5944         (convert_negative_to_dash) Renamed lex_negative_to_dash().
5945         (set_prog) Renamed lex_set_prog().
5946         (init_lex) Renamed lex_init().
5947         (reset_eof) Renamed lex_reset_eof().
5948         (lookahead) Renamed lex_look_ahead().
5949         (check_id) Rewritten.
5950         (yylex) Renamed lex_get(), rewritten.
5951         (lex_end_of_command) New function.  Many commands were rephrased
5952         using this.
5953         (lex_integer_p) New function.  Replaces compare of tokint against
5954         NOT_LONG.
5955         (lex_integer) New function.  Replaces tokint.
5956         (match_tok) Renamed lex_match().
5957         (match_id) Renamed lex_match_id().
5958         (match_int) Renamed lex_match_int().
5959         (force_match_id) Renamed lex_force_match_id(), added return value.
5960         (force_match) Renamed lex_force_match(), added return value.
5961         (force_string) Renamed lex_force_string(), added return value.
5962         (force_int) Renamed lex_force_int(), added return value.
5963         (lex_id_match_len) New function.
5964         (id_match) Renamed lex_id_match(), rewritten.
5965         (get_line) Renamed lex_get_line().
5966         (preprocess_line) Renamed lex_preprocess_line().
5967         (tokname) Renamed lex_token_name().
5968         (bin_value_func) Removed.
5969         (oct_value_func) Removed.
5970         (hex_value_func) Removed.
5971         (unexpected_eof) New function.
5972         (convert_numeric_string_to_char_string) New function.
5973         (parse_string) Rewritten, signature changed.
5974         (add_tokstr_char) Removed.
5975         (add_tokstr_unsigned) Removed.
5976         (add_tokstr_string) Removed.
5977         (parse_tagged_quote) Removed.
5978         (skip_comment) Renamed lex_skip_comment().
5979
5980         * lexer.h: All references updated.
5981         (macro is_id1) Renamed CHAR_IS_ID1.
5982         (macro is_idn) Renamed CHAR_IS_IDN.
5983         (token names ID, NUM, STRING, STOP, ... WITH, EXP) Renamed with
5984         prefix T_: T_ID, T_NUM, T_STRING, T_STOP, ... T_WITH, T_EXP.
5985         (macro get_token) Removed.
5986         (macro id_match) Removed.
5987         (macro force_match_id) Removed.
5988         (macro force_match) Removed.
5989         (macro force_string) Removed.
5990         (macro force_int) Removed.
5991         (macro force_num) Removed.
5992         (macro force_id) Removed.
5993
5994         * lexerP.h: Removed.
5995
5996         * list.q: Migrated to new q2c format.
5997         (write_line) Deal with struct len_string.
5998         (write_varname) Ditto.
5999         (write_fallback_headers) Ditto.
6000
6001         * magic.c: New file, incorporating the following global variables
6002         previously in other files: endian, second_lowest_value.  And both
6003         of those are conditional on #define's.
6004
6005         * magic.h: New file, incorporating the following global variable
6006         declarations: endian, second_lowest_value, and the following macro
6007         declarations: NOT_DOUBLE, NOT_LONG, NOT_INT.
6008
6009         * main.c: Added declarations of pgmname, finished, curdate,
6010         start_interactive.
6011         (main) Call new parse_script() function.
6012         (parse_script) New function.
6013         (execute_command) New function.
6014         (dump_token) Removed.
6015         (handle_error) New function.
6016
6017         * matrix.c: New file.
6018
6019         * matrix.h: New file.
6020
6021         * matrix-data.c: Migrated from arenas to pools.
6022         (mget_token) Change from parse_string_as_format() to data_in().
6023
6024         * means.q: Migrate to new q2c.
6025         (custom_tables) Renamed mns_custom_tables().
6026         (custom_crossbreak) Renamed mns_custom_crossbreak().
6027         (custom_variables) Renamed mns_custom_variables().
6028
6029         * mis-val.c: (static var width) Changed from `int' to `size_t'.
6030         (parse_varnames) Prototype.
6031         (parse_numeric) Rephrasings.
6032         (parse_alpha) Adapt to new struct string tokstr.
6033
6034         * misc.c: (intlog10) Rewritten.
6035         (spacing) Removed.
6036         (ansi_rand) Renamed real_rand(), moved into random.c.
6037         (ansi_srand) Renamed real_srand(), moved into random.c.
6038         (setup_randomize) Moved to random.c.
6039         (rand_uniform) Ditto.
6040         (rand_normal) Ditto.
6041         (rand_simple) Ditto.
6042         (get_config_line) Removed.
6043         (reverse) Removed (dead code).
6044
6045         * misc.h: (macro SET_BIT) Moved to bitvector.h.
6046         (macro CLEAR_BIT) Ditto.
6047         (macro TEST_BIT) Ditto.
6048         (macro SET_BIT_TO) Ditto.
6049         (macro BIT_INDEX) Ditto.
6050
6051         * output.c: (outp_read_devices) Move to err_push_file_locator()
6052         from push_cust().  Use struct string.
6053         (expand_op_tokstr) Removed.
6054         (static var op_tokstr) Changed to struct string.
6055         (static var op_tokstr_size) Removed.
6056         (tokener) Rephrasings.  Use struct string.
6057         (parse_options) Use struct string.
6058         (destroy_driver) Fix assertion.
6059         (outp_get_paper_size) Move to err_push_file_locator().
6060         [0] Removed dead code.
6061         (outp_string_width) Move to len_string.
6062
6063         * output.h: Comment fixes.
6064         (TAG_* enum series) Removed.
6065         (struct outp_value) Removed.
6066         (enum OUTP_T_FANCY) Removed.
6067         (struct outp_text) `s' changed from a_string to len_string.
6068         (struct outp_class) `option' change arg 3 from outp_value to
6069         struct string.
6070
6071         * pfm-read.c: (corrupt_msg) Rewritten.
6072
6073         * pfm-write.c: (bufwrite) Fix assertion.
6074
6075         * pool.c: New file, reference version.
6076
6077         * pool.h: New file, reference version.
6078
6079         * postscript.c: (ps_font_sizes) Fix assertion.
6080         (ps_option) Change arg 3 from outp_value to struct string.
6081         Adapt to struct string.
6082         (macro output_line) Removed.
6083         (macro add_string) Removed.
6084         (output_encodings) Adapted to struct string.  Moved to
6085         err_push_file_locator().
6086         (find_encoding_file) Fix assertion.
6087         (read_ps_encodings) Move to err_push_file_locator().
6088         (postopen) Use getl_location() instead of curfn.
6089         (out_text_plain) Move to len_string.
6090         (text) Ditto.  Remove rich text support.
6091
6092         * print.c: (cmd_print) Remove now-unneeded resource cleanup code.
6093         (cmd_print_eject) Ditto.
6094         (cmd_write) Ditto.
6095         (internal_cmd_print) Now cleans up after itself.  Uses
6096         fh_parse_file_handle() now.
6097         (cmd_print_space) Use PXP_NUMERIC to type-check.
6098
6099         * q2c.c: Overhauled.  Removed _("") i18n support.  All references
6100         updated.  All output functions updated to handle structures rather
6101         than local or static variables.  Adapt to new PSPP lex_*()
6102         functions.
6103         (macro _) Removed.
6104         (macro N_) Removed.
6105         (macro MAX_N_SBC) Removed.
6106         (global bare) Removed.
6107         (enum STRING) Renamed T_STRING.
6108         (enum ID) Renamed T_ID.
6109         (get_buffer) Buffer size increased.
6110         (strlower) Renamed st_lower(), rephrased.
6111         (strupper) Renamed st_upper(), rephrased.
6112         (skip_ws) New function.
6113         (get_line) Don't special-case any types of lines (like those
6114         beginning with ! or $, for instance).
6115         (get_token) Renamed lex_get().  Rephrased.
6116         (static var `prefix') New.
6117         (parse) New function.
6118         (parse_setting) Minor rephrasing.
6119         (dump_specifier_vars) Ditto.
6120         (make_identifier) Put null terminator on identifier, duh.
6121         (dump_vars) Renamed dump_declarations().  Never indent.  Never
6122         static.  Output changed entirely.
6123         (dump_specifier_init) Rephrase.
6124         (dump_vars_init) No index variable needed.  Other modifications.
6125         (dump_parser) Don't parse command name.  Do dump functions instead
6126         of just code fragments.
6127         (dump_free) Dump function instead of code fragment.
6128         (recognize_directive) New function.
6129         (main) Use recognize_directive().  Don't rely on magic $ line
6130         beginning: instead, parse comments.  Update list of headers.
6131
6132         * random.c: New file, containing the following functions:
6133         real_rand(), real_srand(), setup_randomize, shuffle, rand_uniform,
6134         rand_normal, rand_simple.
6135
6136         * random.h: New file.
6137
6138         * recode.c: (cmd_recode) Merge internal_cmd_recode() into this
6139         function.  `max_src_width', `max_dst_width' changed to size_t.
6140         (internal_cmd_recode) Removed.
6141         (parse_dest_spec) Merge similar cases.
6142         (parse_src_spec) Add assertion.
6143
6144         * repeat.c: (recognize_keyword) New function.
6145         (internal_cmd_do_repeat) Parse and handle PRINT keyword on END
6146         REPEAT.  Improve recognition of END REPEAT (use
6147         recognize_keyword()).  Move from curfn to getl_location().  Use
6148         struct string.
6149                 
6150         (perform_DO_REPEAT_substitutions) Adapt to struct string.
6151
6152         * set.q: Adapt to new q2c.
6153         (cmd_set) Range-check some values better.
6154         (custom_blanks) Renamed stc_custom_blanks().
6155         (custom_length) Renamed stc_custom_length().
6156         (custom_results) Renamed stc_custom_results().
6157         (custom_seed) Renamed stc_custom_seed().
6158         (custom_width) Renamed stc_custom_width().
6159         (custom_format) Renamed stc_custom_format().
6160         (custom_journal) Renamed stc_custom_journal().
6161         (custom_color) Renamed stc_custom_color().
6162         (custom_listing) Renamed stc_custom_listing().
6163         (custom_disk) Renamed stc_custom_disk().
6164         (custom_log) Renamed stc_custom_log().
6165         (custom_rcolor) Renamed stc_custom_rcolor().
6166         (custom_viewlength) Renamed stc_custom_viewlength().
6167         (custom_workdev) Renamed stc_custom_workdev().
6168
6169         * settings.h: Not necessary to include format.h any longer.
6170
6171         * sfm-read.h: (macro bswap_int32) Moved here from sfmP.h.
6172         (corrupt_msg) Rewritten.
6173
6174         * sort.c: Adapt to rewritten heap ADT.
6175
6176         * str.c: (aa_strcpy) Removed.
6177         (ab_strcpy) Removed.
6178         (ac_strcpy) Removed.
6179         (ba_strcpy) Removed.
6180         (bb_strcpy) Removed.
6181         (ca_strcpy) Removed.
6182         (aa_strdup) Removed.
6183         (aa_strdupcpy) Removed.
6184         (ba_strdup) Removed.
6185         (sa_strdup) Removed.
6186         (memrev) Renamed mm_reverse().
6187         (memrmem) Renamed mm_find_reverse().
6188         (cmp_str) Renamed st_compare_pad().
6189         (strmaxcpy) Removed.
6190         (strbarepadcpy) Renamed st_bare_pad_copy(), signature changed.
6191         (strbarepadlencpy) Renamed st_bare_pad_len_copy(), signature
6192         changed.
6193         (strpadcpy) Renamed st_pad_copy(), signature changed.
6194         (blpstrset) Removed.
6195         (ds_create) New function.
6196         (ds_init) New function.
6197         (ds_replace) New function.
6198         (ds_destroy) New function.
6199         (ds_clear) New function.
6200         (ds_extend) New function.
6201         (ds_shrink) New function.
6202         (ds_truncate) New function.
6203         (ds_length) New function.
6204         (ds_size) New function.
6205         (ds_value) New function.
6206         (ds_end) New function.
6207         (ds_concat) New function.
6208         (ds_concat_buffer) New function.
6209         (ds_printf) New function.
6210         (ds_putchar) New function.
6211         (ds_getline) New function.
6212         (ds_get_config_line) New function derived from the old
6213         misc.c:get_config_line().
6214         (ls_create) New function.
6215         (ls_create_buffer) New function.
6216         (ls_init) New function.
6217         (ls_shallow_copy) New function.
6218         (ls_destroy) New function.
6219         (ls_null) New function.
6220         (ls_null_p) New function.
6221         (ls_empty_p) New function.
6222         (ls_length) New function.
6223         (ls_value) New function.
6224         (ls_end) New function.
6225
6226         * str.h: Reformatted.
6227         (struct a_string) Removed.
6228         (struct b_string) Removed.
6229         (struct c_string) Removed.
6230         (struct len_string) New.
6231         (struct string) New.
6232         (macro as_streq) Removed.
6233         (macro bs_streq) Removed.
6234         (macro cs_streq) Removed.
6235         (macro sa_streq) Removed.
6236         (macro sb_streq) Removed.
6237         [__GNUC__] (inline function ds_putchar) New function.
6238         [__GNUC__] (inline function ds_length) New function.
6239         [__GNUC__] (inline function ds_value) New function.
6240         [__GNUC__] (inline function ds_end) New function.
6241
6242         * sysfile-info.c: (cmd_sysfile_info) Rephrased.
6243         (display_vectors) Fix missing i18n.
6244
6245         * t-test.q: Migrate to new q2c.
6246
6247         * tab.c: Migrate from arenas to pools.
6248         (tab_create) Use struct len_string.
6249         (tab_realloc) Ditto.
6250         (text_format) Ditto.
6251         (tab_joint_text) Ditto.
6252         (tab_natural_width) Remove rich text support.
6253         (tab_natural_height) Ditto.
6254         (tab_output_text) Handle TAT_FIX.
6255         (tab_raw) Change arg from a_string to len_string.
6256         (tabi_driver) Fix assertion.  Use struct len_string.
6257         (render_strip) Use struct len_string.  Remove rich text support.
6258         Add `const' qualifiers.
6259
6260         * tab.h: (enum TAB_RICH) Remove.
6261         (enums TAB_COL_NONE, TAB_COL_DONE) New.  Where appropriate,
6262         SOM_COL_* updated to read TAB_COL_*.
6263         (struct tab_table) Change arena to pool.  Change a_string to
6264         len_string.
6265
6266         * temporary.c: (restore_dictionary) Rewrite Checker code.
6267
6268         * var.h: (macros MAX_SHORT_STRING, MIN_LONG_STRING, SYSMIS,
6269         LOWEST, HIGHEST) Moved here from common.h.
6270         (typedef any_trns) Removed.  All references changed to `struct
6271         trns_header'.
6272
6273         * vars-atr.c: (force_create_variable) Fix assertion.
6274         (force_dup_variable) Fix assertion.
6275         
6276 Thu Jun  3 18:40:42 1999  Ben Pfaff  <blp@gnu.org>
6277
6278         Using alphanumeric variables in functions under AGGREGATE
6279         segfaulted.  Fixed.  Thanks to Dr. Dirk Melcher
6280         <BZN-mdksh@t-online.de> for reporting this bug.
6281         
6282         * aggregate.c: (parse_aggregate_functions) When setting the
6283         FSTRING bit, also allocate memory for the `string' member of
6284         agr_next.
6285         (free_aggregate_functions) Free iter->string.  Don't use the
6286         non-function bits when indexing the array of functions.
6287         [DEBUGGING] (debug_print) Don't use the non-function bits when
6288         indexing the array of functions.        
6289
6290 Sun May 30 00:00:54 1999  Ben Pfaff  <blp@gnu.org>
6291
6292         Under certain circumstances, the final case would be omitted from
6293         the results of an AGGREGATE operation.  Fixed.  Thanks to Dr. Dirk
6294         Melcher <BZN-mdksh@t-online.de> for reporting this bug.
6295         
6296         * aggregate.c (agr_00x_end_func): Increment number of cases in
6297         sink before writing case.  For streams that keep track of how many
6298         cases there are based on this value, this means that the last case
6299         will be read in on the next stream read.
6300
6301 Sat May 29 22:03:31 1999  Ben Pfaff  <blp@gnu.org>
6302
6303         Undefined behavior was invoked by referencing a freed pointer.
6304         
6305         * vfm.c (memory_stream_write): Free pointer *after* checking for
6306         non-null status.
6307
6308 Sat May 29 22:02:22 1999  Ben Pfaff  <blp@gnu.org>
6309
6310         A wrong record size was displayed when paging the active file to
6311         disk.
6312         
6313         * vfm.c: (memory_stream_write) Fix off-by-one error.
6314
6315 Sat May 29 21:50:26 1999  Ben Pfaff  <blp@gnu.org>
6316
6317         Not having enough temporary space for sorting caused a core dump.
6318         Fixed.
6319         
6320         * sort.c: (allocate_cases) Initialize i.
6321
6322 Sat May 29 21:40:54 1999  Ben Pfaff  <blp@gnu.org>
6323
6324         Syntax errors in function descriptions on AGGREGATE caused core
6325         dumps.  Fixed.
6326         
6327         * aggregate.c (cmd_aggregate): Don't free agr_dict after calling
6328         free_aggregate_functions(), since that function already frees
6329         agr_dict.
6330         
6331 Sat May 29 21:06:10 1999  Ben Pfaff  <blp@gnu.org>
6332
6333         A null pointer was dereferenced, causing a core dump, when
6334         PERCENTILES was specified on FREQUENCIES.  This fixes the problem,
6335         but PSPP still doesn't calculate percentiles.  Thanks to Regnor
6336         Jernsletten <rjernsle@eunet.no> for reporting this problem.
6337         
6338         * arena.c: (arena_malloc) If the arena hasn't been initialized
6339         already, initialize it.
6340
6341 Sat May 29 20:47:29 1999  Ben Pfaff  <blp@gnu.org>
6342
6343         * Makefile.cygwin: New file supplied by Hankin <hankin@dunno.com>
6344         for compilation with Cygnus Windows B20.  Not used by other
6345         systems.
6346
6347 Sat May 29 20:36:04 1999  Ben Pfaff  <blp@gnu.org>
6348
6349         SORT always sorted in ascending order.  Fixed.  Thanks to Dr. Dirk
6350         Melcher <BZN-mdksh@t-online.de> for reporting this bug.
6351
6352         * sort.c: (compare_case_lists) Reverse sense of comparison if
6353         sorting in descending order.
6354         (compare_record) Ditto.
6355
6356 Tue Mar  9 13:18:54 1999  Ben Pfaff  <blp@gnu.org>
6357
6358         SPLIT FILE with a string variable caused a core dump.  Fixed.
6359
6360         * vfm.c: If the variable is a string then make a temporary value
6361         struct pointing to it.  The underlying problem is a lot bigger
6362         than this (see TODO) but this is a stopgap for the simple case at
6363         least.
6364         
6365 Tue Mar  9 13:15:53 1999  Ben Pfaff  <blp@gnu.org>
6366
6367         Nested INCLUDEs didn't work.  Fixed.
6368
6369         * getline.c: (getl_include) Set first_line to NULL in allocated
6370         structure.
6371
6372 Tue Mar  9 13:13:46 1999  Ben Pfaff  <blp@gnu.org>
6373
6374         The MATCH FILES procedure set the values of variables not present
6375         to 0.  It should have been SYSMIS.  This is now fixed.
6376
6377         * get.c: (mtf_delete_file_in_place) Replace 0.0 by SYSMIS.
6378
6379 Tue Mar  9 12:52:23 1999  Ben Pfaff  <blp@gnu.org>
6380
6381         The REMARK command was too aggressive about skipping lines.  It
6382         didn't like being the last command in a file.
6383
6384         * command.c: (cmd_remark) Call get_entire_line() instead of
6385         get_line().
6386
6387 Tue Mar  9 12:48:05 1999  Ben Pfaff  <blp@gnu.org>
6388
6389         Comment parsing wasn't consistent with the rest of the code in its
6390         idea of where one command ends and another starts.  This meant
6391         that sometimes commands would be mysteriously ignored.  Thanks to
6392         Dr. Dirk Melcher <BZN-mdksh@t-online.de> for reporting this bug.
6393          
6394         * command.c: (parse_cmd) Hand off comment parsing to new function
6395         skip_comment() in lexer.c.
6396         * lexer.c: (skip_comment) New function.
6397
6398 Wed Jan 20 20:22:07 1999  Ben Pfaff  <blp@gnu.org>
6399
6400         The TABLE subcommand on MATCH FILES worked only erratically at
6401         best.  This fixes it.  Thanks to Dr. Dirk Melcher
6402         <BZN-mdksh@t-online.de> for reporting this bug.
6403
6404         * get.c: (mtf_compare_BY_values) When comparing string values, a
6405         difference of 1 is still a difference :-)
6406         (mtf_processing) Inverted TABLE reading logic fixed.  Also don't
6407         advance TABLE files automatically when matched.  Comment fixes.
6408
6409 Tue Jan 19 22:32:31 1999  Ben Pfaff  <blp@gnu.org>
6410
6411         VARIABLE LABELS rejected a slash before the first variable
6412         specification, contradicting the documentation.  Thanks to Walter
6413         M. Gray <graywm@northernc.on.ca> for reporting this bug.
6414
6415         * var-labs.c: (cmd_variable_labels) Ignore a leading slash in
6416         command specification.
6417
6418 Tue Jan 19 22:29:54 1999  Ben Pfaff  <blp@gnu.org>
6419
6420         Because of an incorrect optimization in memory allocation,
6421         CROSSTABS sometimes segfaulted when asked to output multiple
6422         tables.  Thanks to Walter M. Gray <graywm@northernc.on.ca> for
6423         reporting this bug.
6424
6425         * crosstabs.q: (postcalc) New variables maxcols, maxcells, which
6426         are passed to output_pivot_table() for its use.
6427         (output_pivot_table) Instead of assuming the number of columns is
6428         constant, keep track with maxcols.  In general mode, use maxcells
6429         to determine whether more matrix cells need to be allocated.    
6430
6431 Tue Jan 19 22:27:46 1999  Ben Pfaff  <blp@gnu.org>
6432
6433         CROSSTABS didn't display value labels for column and row
6434         variables.  Thanks to Walter M. Gray <graywm@northernc.on.ca> for
6435         reporting this bug.
6436
6437         * crosstabs.q: (table_value_missing) If the specified value has a
6438         value label for this variable, then show it instead of the raw
6439         value.
6440         (display_dimensions) Delegate display of value_labels to
6441         table_value_missing.
6442
6443 Mon Jan 18 20:04:06 1999  Ben Pfaff  <blp@gnu.org>
6444
6445         WRITE didn't write line ends.  Fixed.  Thanks to Dr. Dirk Melcher
6446         <BZN-mdksh@t-online.de> for reporting this bug.
6447
6448         * print.c: (print_trns_proc) Write (CR/)LF if PRINT is used _or_
6449         if the file isn't declared as binary.
6450
6451 Mon Jan 18 19:56:45 1999  Ben Pfaff  <blp@gnu.org>
6452
6453         MATCH FILES corrupted memory and dumped core on some syntax
6454         errors.  Fixed.
6455
6456         * get.c: (cmd_match_files) Set file->handle to NULL before
6457         jumping to lossage.
6458         (mtf_free_file) Don't free a null dictionary.   
6459
6460 Mon Jan 18 19:27:57 1999  Ben Pfaff  <blp@gnu.org>
6461
6462         MATCH FILES should set numeric values not available to the
6463         system-missing value, not to 0.  Thanks to Dr. Dirk Melcher
6464         <BZN-mdksh@t-online.de> for reporting this bug.
6465
6466         * get.c: (mtf_processing) Set unused records to system-missing,
6467         not 0.
6468
6469 Mon Jan 18 15:06:46 1999  Ben Pfaff  <blp@gnu.org>
6470
6471         KEEP didn't work properly on the SAVE procedure.  Fixed.  Thanks
6472         to Ralf Geschke <ralf@kuerbis.org> for reporting this bug.
6473
6474         * temporary.c: (save_dictionary) Initialize var_by_name AVL tree
6475         in newly created dictionary, and add each copied variable to the
6476         tree.
6477  
6478 Mon Jan 18 15:04:48 1999  Ben Pfaff  <blp@gnu.org>
6479
6480         Memory leak fix.
6481         
6482         * get.c: (trim_dictionary) Free variable list for KEEP after
6483         finishing with it.
6484
6485 Mon Jan 18 12:57:36 1999  Ben Pfaff  <blp@gnu.org>
6486
6487         Some systems didn't like the way open_file was coded.  Thanks to
6488         Hankin <hankin@rogue.consultco.com> for pointing this out.
6489
6490         * filename.c: (open_file) Don't try to store stdin, stdout,
6491         stderr as part of an array, because that doesn't always work.
6492
6493 Mon Jan 18 12:53:27 1999  Ben Pfaff  <blp@gnu.org>
6494
6495         The SAVE procedure didn't save long string variables properly.
6496         Fixed by this patch.  Thanks to Hankin
6497         <hankin@rogue.consultco.com> for this patch.
6498         
6499         * sfm-write.c: (write_variable) Fix off-by-one error in writing
6500         out variable pad records.
6501
6502 Tue Jan  5 14:29:27 1999  Ben Pfaff  <blp@gnu.org>
6503
6504         Previously, if PRINT SPACE were given a negative argument, it
6505         would report an error, then spin in an (almost) infinite loop.
6506         This fixes that behavior.
6507
6508         * print.c: (print_space_trns_proc) After reporting a negative
6509         argument, set number of lines to print to 1.
6510
6511 Tue Jan  5 13:59:55 1999  Ben Pfaff  <blp@gnu.org>
6512
6513         SPSS 8.0 outputs some new record types in its system files, and it
6514         allows longer value labels.  Accept these system files.
6515
6516         * sfm-read.c: (sfm_read_dictionary) Ignore record type 7 subtype
6517         11 emitted by SPSS 8.0.
6518         
6519 Tue Jan  5 13:55:50 1999  Ben Pfaff  <blp@gnu.org>
6520
6521         The LIST procedure was too conservative in allocating space for
6522         buffers, which caused a bug that only showed up with very long
6523         output variables.  Thanks to Hankin <hankin@dunno.com> for this
6524         bug report.
6525
6526         * list.q: (determine_layout) Allocate 1022 bytes instead of 256.
6527
6528 Tue Jan  5 13:34:34 1999  Ben Pfaff  <blp@gnu.org>
6529
6530         Typo meant string format specifiers weren't checked properly.  I
6531         think that Hankin <hankin@dunno.com> sent me this report, but I'm
6532         willing to be corrected on this point.
6533  
6534         * format.c: (check_string_specifier) Fix obvious typo.  
6535
6536 Tue Jan  5 12:50:42 1999  Ben Pfaff  <blp@gnu.org>
6537
6538         Using $CASENUM in an expression didn't work.  Here's a fix.
6539         Thanks to Dirk Melcher <BZN-mdksh@t-online.de> for reporting this
6540         bug.
6541          
6542         * expr-evl.c: (evaluate_expression) Add OP_CASENUM case.
6543
6544         * expr-opt.c: (dump_node) OP_CASENUM is acceptable.
6545
6546 Tue Jan  5 12:47:48 1999  Ben Pfaff  <blp@gnu.org>
6547
6548         The changes in 0.2.1 to fix DATA LIST FREE parsing broke some
6549         other behavior, *sigh*.  This patch hopefully fixes that.  This
6550         time I've actually tested it.
6551
6552         Thanks to Hankin <hankin@dunno.com> for reporting this bug.
6553
6554         * data-list.c: (read_from_data_list_free,
6555         read_from_data_list_list) Call parse_string_as_format() directly
6556         without mucking around with the field width.
6557
6558 Tue Jan  5 12:31:19 1999  Ben Pfaff  <blp@gnu.org>
6559
6560         Occasionally, you may encounter a script that wants to be
6561         interpreted in interactive mode.  Make -i emulate this behavior to
6562         allow such scripts to be executed with PSPP.
6563
6564         Thanks to Hankin <hankin@dunno.com> for reporting this behavior.
6565
6566         * cmdline.c: (pre_syntax_message[]) Update -i description.
6567
6568         * lexer.c: (preprocess_line) When getl_interactive is 2 (i.e.,
6569         when -i is given on the command line) don't treat unindented lines
6570         as starting a new command.
6571
6572 Tue Jan  5 12:30:10 1999  Ben Pfaff  <blp@gnu.org>
6573
6574         In conjunction with egcs 1.1.1, Checker emits some bogus warnings,
6575         mostly caused by local initialized aggregates.  After egcs is
6576         fixed upstream these can be removed, but for now they're not a big
6577         deal.
6578         
6579         * ascii.c: (ascii_postopen_driver) Checker chokes on local
6580         initialized arrays.  Avoid this.
6581
6582         * sfm-write.c: (sfm_write_dictionary) Don't use a local
6583         initialized struct.
6584
6585 Tue Jan  5 12:07:24 1999  Ben Pfaff  <blp@gnu.org>
6586
6587         egcs 1.1.1 has some new warnings relative to gcc 2.8.1, which the
6588         following changes avoid.  Currently I compile sources with egcs
6589         1.1.1 and gcc 2.7.2.3 before sending them out.
6590
6591         * apply-dict.c: (apply_dict) Use new avl_traverser_init() macro.
6592         
6593         * ascii.c: (option_tab[]) Initialize all struct members.
6594
6595         * avl.h: (avl_traverser_init) New macro.
6596         
6597         * command.c: (DEFCMD, UNIMPL macros, cmd_table[]) Initialize all
6598         struct members.
6599
6600         * crosstabs.q: (enum_var_values) Use new hsh_iterator_init()
6601         macro.
6602
6603         * hash.c: Comment fix.
6604
6605         * hash.h: (hsh_iterator_init) New macro.
6606
6607         * html.c: (option_tab[]) Initialize all struct members.
6608
6609         * pfm-write.c: (write_value_labels) Use new avl_traverser_init()
6610         macro.
6611
6612         * postscript.c: (option_tab[]) Initialize all struct members.
6613         (output_encodings, preclose, dump_lines) Use new
6614         hsh_iterator_init() macro.
6615
6616         * sfm-write.c: (write_value_labels) Use new avl_traverser_init()
6617         macro.
6618
6619         * sysfile-info.c: (describe_variable) Use new avl_traverser_init()
6620         macro.
6621
6622 Thu Nov 19 12:32:45 1998  Ben Pfaff  <blp@gnu.org>
6623
6624         * data-in.c: Examined each of the parsing functions to make sure
6625         that they wouldn't dump core if they were passed a string of the
6626         wrong length, since now the DATA LIST FREE/LIST routines don't
6627         check for field width before passing it to the data parser.
6628         (parse_RBHEX, parse_AHEX) Reject odd length input.
6629         (parse_string_as_format) Reject input that's too short or too
6630         long.
6631
6632         * data-list.c: Before, the DATA LIST FREE/LIST routines would pad
6633         a field to its entire declared output width then pass it to the
6634         data-in parsing routines.  This contradicted the documented
6635         behavior.  This is fixed in these changes.  Thanks to Mark H. Wood
6636         <mwood@IUPUI.Edu>.  In addition, this fixes a few more details of
6637         free-format parsing that differed from SPSS.
6638         (cut_field) Commas and spaces are treated identically.  Returns
6639         the proper column instead of a fixed 1 value.
6640         (parse_field) Removed.
6641         (read_from_data_list_free, read_from_data_list_list) Call
6642         parse_string_as_format directly instead of parse_field.
6643
6644         * heap.c: (heap_delete) Stylistic fixes.
6645
6646 Sun Aug  9 11:12:13 1998  Ben Pfaff  <blp@gnu.org>
6647
6648         * loop.c: (loop_2_trns_proc) Formatting fix.
6649
6650         * sel-if.c: (cmd_filter) Set FILTER_before_TEMPORARY.
6651
6652         * var.h: (glob var FILTER_before_TEMPORARY) New global var.
6653
6654         * vfm.c: (macro FILTERED) New.
6655         (static var filter_var) New.
6656         (process_active_file_write_case) Use FILTERED.
6657         (setup_filter) Set filter_var.
6658         (close_active_file) Delete the filter if not
6659         FILTER_before_TEMPORARY.
6660         (procedure_write_case) Use FILTERED.
6661
6662 Sat Aug  8 00:20:14 1998  Ben Pfaff  <blp@gnu.org>
6663
6664         * crosstabs.q: Changed /PIVOT={ON,OFF} to /FORMAT={PIVOT,NOPIVOT}.
6665
6666         * data-in.c: (parse_day_count) Message fix.
6667         (parse_month) Style fix.
6668
6669         * data-list.c: (struct data_list_pgm) New member eof.
6670         (cmd_data_list) Init eof to 0.
6671         (do_reading) Implement the /END subcommand and read-past-eof
6672         checking.
6673
6674         * do-if.c: Include stdio.h when debugging.
6675         (cmd_else_if) Make sure the command is .-terminated.
6676
6677         * glob.c: (init_glob) Capitalize the command prompt.
6678
6679         * inpt-pgm.c: (end_case_trns_proc) Debugging message.
6680         (end_file_trns_proc) Debugging message.
6681
6682         * loop.c: (internal_cmd_loop) Make it work when there's no loop
6683         index!
6684         (loop_2_trns_proc) Enable MXLOOPS (why was this disabled?)
6685
6686         * main.c: (dump_token) Make kwtab[] const.
6687
6688         * set.q: Spelling, comment fixes.
6689
6690         * sysfile-info.c: (cmd_display) DISPLAY VECTORS not DISPLAY
6691         VECTOR.
6692
6693         * vars-prs.c: (fill_all_vars) Style fix.
6694
6695         * vfm.c: (index_to_varname) Return const.
6696
6697 Tue Aug  4 23:49:23 1998  Ben Pfaff  <blp@gnu.org>
6698
6699         * Changes in many source files for partial -ansi -pedantic and
6700         no-debugging compliance: Remove trailing common in enum
6701         declarations; add `unused' attributes; insert some appropriate
6702         casts.
6703
6704         * cmdline.c: (parse_command_line) Add new --testing-mode flag.
6705
6706         * command.c: (shell) Make static.
6707         (run_command) Make static.
6708
6709         * data-list.c: (dump_fixed_table) Remove use of local_strdup().
6710
6711         * dfm.c: (cmd_begin_data) I18n fix.
6712
6713         * error.c: (verbose_msg) Define if __STRICT_ANSI__.
6714
6715         * error.h: (macro verbose_msg) Define if __STRICT_ANSI__.
6716
6717         * expr-opt.c: (evaluate_tree) Don't initialize local arrays if
6718         __STRICT_ANSI__.
6719
6720         * file-handle.q: Don't prepend the source file directory name to
6721         the data file name.  (Ongoing issue.)
6722         (prepend_current_directory) Comment out.
6723         (internal_cmd_file_handle) Don't call prepend_current_directory().
6724         (fh_get_handle_by_filename) Ditto.
6725
6726         * filename.c: Append zero byte to readlink() return value.
6727
6728         * getline.c: (getl_read_line) I18n fix.
6729
6730         * lexer.h: Don't use gcc features if __STRICT_ANSI__.
6731
6732         * misc.h: Don't use gcc features if __STRICT_ANSI__.
6733
6734         * pfm-write.c: (bufwrite) Don't try to increment a void * pointer
6735         directly.
6736
6737         * postscript.c: (output_encodings) Don't use local_strdup().
6738         (postopen) Ditto.
6739
6740         * print.c: Don't use gcc features if __STRICT_ANSI__.
6741
6742         * q2c.c: (dump_vars) Don't put a , at the end of the last enum.
6743
6744         * recode.c: (parse_src_spec) Fully brace nested if's.
6745
6746         * set.q: (global var set_testing_mode) New var.
6747
6748 Wed Jul 29 22:01:44 1998  Ben Pfaff  <blp@gnu.org>
6749
6750         * ascii.c: Add some more `unused' attributes that only come into
6751         play when NDEBUG is defined.
6752         (ascii_close_page) Set s_len when reallocating s.
6753         
6754         * crosstabs.q: (delete_missing) New function.
6755         (output_pivot_table) Call delete_missing() if /MISSING=REPORT.
6756         (make_summary_table) Create summary table reallocable.
6757
6758         * postscript.c: Add more `unused' attributes as above.
6759
6760         * tab.c: (tab_create) [GLOBAL_DEBUGGING] Set reallocable member.
6761         (tab_realloc) [GLOBAL_DEBUGGING] Assert that table is reallocable.
6762          
6763         * tab.h: (struct tab_table) [GLOBAL_DEBUGGING] New `reallocable'
6764         member.
6765
6766         * var.h: (macro force_dup_variable) [!GLOBAL_DEBUGGING] Remove
6767         gratuitous space between parameter definition.
6768
6769         * vars-atr.c: Changed some assert(0)'s to abort()'s to prevent
6770         complaints about running off the end of functions with NDEBUG
6771         enabled.
6772
6773 Sun Jul  5 00:17:25 1998  Ben Pfaff  <blp@gnu.org>
6774
6775         * Several source files: Removed some PORTME notes when reflection
6776         revealed that ANSI forbids that sort of breakage.  Also, added
6777         lots of `unused' qualifiers here and there.
6778
6779         * aggregate.c: (accumulate_aggregate_info) Remove local var
6780         weighting that turned out not to be used.
6781
6782         * avl.c: Update to version 1.1.0.  Add unused specifier.
6783         (avl_destroy) Initialize ab to 0.  Comment fixes.  Cast return
6784         value to void *.
6785         (avl_probe) Replace some instances of 1 with +1 where appropriate.
6786         (avl_find) Cast return value to void *.
6787         (avl_delete) q doesn't need to be initialized at the beginning of
6788         the function.  Replace some instances of 1 with +1.
6789         (force_avl_delete) Renamed avl_force_delete, all references changed.
6790         (compare_ints) `param' marked unused.
6791         (print_int) `param' marked unused.
6792         (recurse_tree) Replace some instances of 1 with +1.
6793
6794         * avl.h: Update to version 1.1.0.  Only declares avl function
6795         types if not already declared.
6796         (AVL_MAX_HEIGHT) Only define if not already defined.
6797         (struct avl_node) New unused member char pad[2].
6798         [GLOBAL_DEBUGGING] Change conditionalization to NDEBUG instead.
6799         (force_avl_insert) Renamed avl_force_insert.
6800         (force_avl_delete) Renamed avl_force_delete.
6801
6802         * crosstabs.q: (struct table_entry) Put `freq' into a union with
6803         new member `data'.
6804         (struct crosstab) Add new member `ofs'.
6805         (glob var int_tab) Removed.
6806         (custom_tables) In integer mode, assign v[i] properly through the
6807         indirect var_dict.
6808         (custom_variables) Now p.crs.max == max + 1.
6809         [DEBUGGING] (debug_print) p.crs.min and p.crs.max are now ints.
6810         (precalc) Implement integer mode.
6811         (calc_integer) Implement integer mode.
6812         (compare_table_entry) Remove unused local variable `comparing'.
6813         (make_summary_table) Implement integer mode.
6814         (macro ns_rows) Implemented as static variable now.
6815         (several variables) Made static, from global.
6816         (output_pivot_table) Use table_value_missing() for column heads.
6817         Remove several unused local variables.  Implement integer mode
6818         table summing.  Count up ns_rows.
6819         (crosstabs_dim) Make columns wider when /MISSING=REPORT requested.
6820         (find_pivot_extent) Moved into find_pivot_extent_general; now just
6821         calls that function or find_pivot_extent_integer.
6822         (find_pivot_extent_integer) New function.
6823         (enum_var_values) Implemented for integer mode.
6824         (table_value_missing) New function.
6825         (display_dimensions) Call table_value_missing() for heads.
6826         (float_M_suffix) New function.
6827         (display_crosstabulation) Call table_value_missing() for row
6828         heads.  Handle missing values in /MISSING=REPORT mode.
6829         (calc_fisher) Remove unused var N.
6830         (calc_r) Remove unused var fact.
6831
6832         * data-list.c: (dump_fixed_table) Fix table dimensioning.
6833         (read_one_set_of_repetitions) Remove unused vars var_spec, column.
6834
6835         * data-out.c: (insert_commas) Remove unused var cp.
6836         (convert_CCx) Remove unused vars save_set_decimal,
6837         save_set_grouping.
6838
6839         * descript.q: (dump_z_table) Fix table dimensioning.
6840         (pre_calc) Remove unused var j.
6841         (display) Remove unused vars title, s.  Fix table dimensioning.
6842
6843         * expr-evl.c: Comment fixes.
6844
6845         * frequencies.q: (full_dim) New function.
6846         (dump_full) Fix table dimensioning.
6847         (condensed_dim) New function.
6848         (dump_condensed) Fix table dimensioning.
6849
6850         * get.c: (cmd_match_files) Remove unused var n_val.  Remove unused
6851         label winnage.
6852
6853         * html.c: (html_close_drive) Remove unused var i.
6854         (postopen) Remove unused vars title, curfn_len, cp.
6855         (preclose) Remove unused vars this, x.
6856
6857         * lexer.c: Comment fixes.
6858
6859         * matrix-data.c: (cmd_matrix_data) Remove unused var index.
6860
6861         * means.q: (custom_tables) Remove unused var m_dim.
6862
6863         * mis-val.c: Format fix.
6864
6865         * modify-vars.c: (cmd_modify_vars) Remove unused var new_dict.
6866
6867         * output.c: (outp_get_paper_size) Remove unused var cp.
6868
6869         * pfm-read.c: (read_float) Remove unused var save, unused label
6870         underflow.
6871         (read_variables) Remove unused vars cp, j.
6872         (read_value_label) Remove unused var j.
6873
6874         * pfm-write.c: (bufwrite) Remove unused var i.
6875
6876         * postscript.c: (ps_postopen_drive) Remove unused vars dev_info,
6877         fn.
6878         (output_encodings) Remove unused vars char_cp, n_output.
6879         (read_ps_encodings) Remove unused var ep.
6880         (postopen) Remove unused var title.
6881         (preclose) Remove unused var fp.
6882         (ps_open_page) Remove unused vars true, false, orientation,
6883         mirror_horz, mirror_vert, width, length.
6884         (ps_text_metrics) Remove unused var x.
6885
6886         * q2c.c: (find_symbol) Remove unused var y.
6887         (parse_setting) Remove unused parameter sbc, all references
6888         changed.
6889         (dump_parser) Remove unused var cp.
6890         (dump_free) Remove unused var i.
6891
6892         * set.q: (static vars args, n) Removed.
6893         (internal_cmd_gset) Removed.
6894
6895         * sfm-read.c: (sfm_read_dictionary) Removed unused var i.
6896         (read_machine_flt64_info) Removed unused var file_endian.
6897         (read_documents) Removed unused var i.
6898         (read_compressed_data) Removed unused parameter dict, all
6899         references changed.
6900
6901         * sfm-write.c: (bufwrite) Removed unused var i.
6902         (sfm_write_case) Removed unused var i.
6903
6904         * sort.c: (merge_once) Remove unused var t.
6905         (write_separate) #if 0 out as dead code.
6906
6907         * split-file.c: (cmd_split_file) Remove unused var i.
6908
6909         * sysfile-info.c: (sysfile_info_dim) New function.
6910         (cmd_sysfile_info) Fix table dimensioning.
6911         (variables_dim) New function.
6912         (display_variables) Fix table dimensioning.
6913         (describe_variable) Remove unused var prev_r.
6914
6915         * t-test.q: (z_postcalc) Removed.
6916         (pairs_calc) Remove unused var bad_weight.
6917         (postcalc) Remove unused vars dfn, dfd.
6918
6919         * tab.c: (tab_create) Set t->dim to NULL.
6920         (tab_dim) Make sure t->dim is NULL first.
6921         (tab_natural_width) Remove parameter `clamp'.
6922         (tab_value) Remove duplicate assertion for table.
6923         (tab_raw) New function.
6924         (nowrap_dim) New function.
6925         (wrap_dim) New function.
6926         (tab_output_text) Fix table dimensioning.
6927
6928         * tab.h: (tab_raw) New macro.
6929
6930         * val-labs.c: (get_label) Remove unused var type.
6931         (copy_value_labels) Remove unused var trav.
6932
6933         * var.h: (struct crosstab_proc) Completely changed.
6934
6935         * vars-prs.c: (parse_dict_variable) Remove unused var v.
6936
6937         * vfm.c: (open_active_file) Remove unused vars i, lp.
6938
6939         * weight.c: (weight_trns_proc) #if 0 out as dead code.
6940         
6941 Tue Jun  2 23:37:21 1998  Ben Pfaff  <blp@gnu.org>
6942
6943         * Makefile.am: Add apply-dict.c, flip.c.
6944
6945         * apply-dict.c: New file.
6946         
6947         * command.c: (struct command) Make cmd[] larger for CLEAR
6948         TRANSFORMATIONS command name.
6949         (parse_cmd) Make sure we're in a valid state before using it as an
6950         index.  Discard variables and reset state on invalid transitions.
6951         (cmd_clear_transformations) New function.
6952
6953         * command.def: Add APPLY DICTIONARY, CLEAR TRANSFORMATIONS, FLIP.
6954         Add unimplemented PRESERVE, RESTORE.
6955
6956         * file-handle.h: Include stddef.h.
6957
6958         * flip.c: New file.
6959         
6960         * pfm-read.c: (parse_value) Pad value label values with spaces,
6961         not nulls.
6962
6963         * sfm-read.c: (struct sfm_fhuser_ext) Add reference count.
6964         (sfm_close) Decrement reference count, make sure it's zero.
6965         (sfm_maybe_close) New function.
6966         (sfm_read_dictionary) Handle reference counts.
6967
6968         * vars-atr.c: (clear_default_dict) New function.
6969         (discard_variables) Use clear_default_dict().
6970
6971 Sun May 31 00:58:05 1998  Ben Pfaff  <blp@gnu.org>
6972
6973         * Makefile.am: Add pfm-write.c.
6974         (LDADD) Add the libgmp2 libraries.
6975
6976         * command.def: Define EXPORT.
6977
6978         * get.c: (cmd_export) New function.
6979         (export_write_case_func) New function.
6980
6981         * pfm-read.c: (static spss2ascii[]) Make it const.
6982
6983         * pfm-write.c: New file.
6984
6985         * sfm-write.c: Formatting, comment fixes.
6986
6987         * var.h: Comment fix.
6988
6989 Fri May 29 21:44:12 1998  Ben Pfaff  <blp@gnu.org>
6990
6991         * Makefile.am: Add pfm.h, pfm-read.c.
6992
6993         * command.def: IMPORT is now implemented.
6994
6995         * format.c: (glob var translate_fmt[]) New var.
6996
6997         * get.c: (enum GTSV_NONE) Renamed GTSV_OPT_NONE.
6998         (cmd_import) New function.
6999         (import_source_read) New function.
7000         (glob var import_source) New var.
7001
7002         * pfm-read.c: New file.
7003
7004         * pfm.h: New file.
7005         
7006         * sfm-read.c: (parse_format_spec) Local variable translate_fmt[]
7007         moved in format.c.
7008         (dump_dictionary) Disabled printing a couple of items.
7009
7010 Mon May 25 12:42:37 1998  Ben Pfaff  <blp@gnu.org>
7011
7012         * crosstabs.q: (postcalc) Call make_summary_table().
7013         (make_summary_table) New function.
7014         (insert_summary) New function.
7015         (display_dimensions) Remove some unnecessary arguments, all
7016         references changed.
7017         (output_pivot_table) Fix lots of problems with the risk table
7018         setup.
7019         (submit) Don't display an empty table.
7020         (display_risk) Fix order of arguments to calc_risk().
7021
7022         * glob.c: Always include assert.h and stdlib.h.
7023
7024         * output.h: (enum OUTP_T_JUST_FULL) Removed, all references
7025         removed.
7026
7027         * tab.c: (tab_create) Cosmetic changes.
7028
7029         * tab.h: (enum TAB_JUSTIFY) Removed, all references removed.
7030
7031 Sun May 24 22:39:23 1998  Ben Pfaff  <blp@gnu.org>
7032
7033         * tab.def: Removed.
7034
7035         * crosstabs.q: (output_pivot_table) Headers drawing and submission
7036         code simplified, moved into new function submit().
7037         (submit) New function.
7038         (crosstabs_dim) New function.
7039         (display_directional) Substitute variable names for %s where
7040         appropriate.
7041         (somers_d_v[], somers_d_ase[], somers_d_t[]) New static vars.
7042         (calc_symmetric) Initialize parameters only if non-NULL.
7043         Calculate Somers' d.
7044         (calc_directional) Calculate Somers' d (or copy it, really).
7045         Calculate eta.
7046
7047         * output.c: (outp_string_width) New function.
7048
7049         * postscript.c: (postopen) Calculate font widths based on the
7050         width of the zero '0' character, not the width of the space
7051         character.  Set paper-width and paper-length based on points, not
7052         device units.
7053         (ps_open_page) Fix page setup string for landscape mode.
7054
7055         * som.h: (struct som_dimension) Removed.
7056         (struct som_table_class) height, width members take int * not
7057         som_dimesion * now.
7058
7059         * tab.c: Many functions now have added parameter validation.
7060         (tab_height, tab_width) These functions were removed and merged
7061         into a single function tab_resize(), and all references changed.
7062         (tab_dim) Rewritten since the interface changed; reduced from
7063         hundreds of lines to two.  All callers were changed.  Currently
7064         most of them just use tab_natural_dimensions as their callback and
7065         await detailed translation of functionality.
7066         (tab_natural_width) New function.
7067         (tab_natural_height) New function.
7068         (tab_natural_dimensions) New function.  This is a callback
7069         function, not something that you'd want to call directly.
7070         (tab_nat_dim) Removed.
7071         (tabi_table) Allocates t->w and t->h.
7072         (tabi_driver) Inlined sum_columns()'s functionality.  Calls the
7073         dimensions callback.
7074         (evaluate_dimensions) Removed.
7075         (sum_columns) Removed.
7076
7077         * tab.h: (enum TAL_1THIN) Removed.
7078         (enum series t_*) Removed.
7079         (struct tab_table) Members trh, trv changed to unsigned char *
7080         from int *.  Member dim changed to a function pointer from a
7081         unsigned char *.  Member max_stack_height removed.  New members
7082         hr_tot, vr_tot.
7083         (macros tab_l, tab_r, tab_t, tab_b) New.
7084
7085 Sat May 23 23:22:13 1998  Ben Pfaff  <blp@gnu.org>
7086
7087         * ascii.c: (delineate) Assign last_space_nchars before skipping
7088         spaces, to fix right justification.
7089
7090         * crosstabs.q: (static vars risk, direct) New vars.
7091         (static var pearson_r) Removed.
7092         (glob var chisq_fisher) Made static.
7093         (static vars row_tot[], col_tot[]) Don't include grand total
7094         anymore.
7095         (static var grand_total) Renamed W, all references changed.
7096         (output_pivot_table) Only make `table' if num_cells != 0.  Make
7097         risk and directional tables.  Deal with grand total no longer part
7098         of col_tot[].  Free rows and cols after we're done with them.
7099         (display_risk) New function.
7100         (display_directional) New function.
7101         (clac_r) Rewritten so that it stores all its results into its
7102         arguments, so it can be used for Spearman's correlation too.
7103         (calc_symmetric) Added a t[] argument, all references changed.
7104         Calculates ASEs for tau-b, tau-c, gamma.  Calculates Spearman's r,
7105         Pearson's r, Cohen's kappa.
7106         (calc_risk) New function.
7107         (calc_directional) New function.
7108
7109         * som.c: (som_submit) Improved debugging code.
7110
7111         * stats.c: (hypercube) New function.
7112         (cube) New function.
7113         (sqr) New function.
7114         (normal_sig) Went back to old implementation, which actually
7115         worked.
7116
7117         * stats.h: (macros square, cube, hypercube) Removed.  The
7118         equivalent functions in stats.c are inlined here; all references
7119         to square changed to sqr.
7120
7121 Fri May 22 00:03:41 1998  Ben Pfaff  <blp@gnu.org>
7122
7123         * crosstabs.q: (N_SYMMETRIC) New define.
7124         (postcalc) Disable debug printing.
7125         (static vars chisq_fisher, pearson_r) New.
7126         (output_pivot_table) Add support for symmetric measures.  Add
7127         chi-square output of exact sigs.
7128         (display_chisq) Rewritten.
7129         (display_symmetric) New function.
7130         (gamma_int) New function.
7131         (Pr) New function.
7132         (swap) New function.
7133         (calc_fisher) New function.
7134         (calc_chisq) Check boundary conditions better. Calculate Yates,
7135         Fisher, Mantel-Haenszel tests.
7136         (calc_r) New function.
7137         (calc_symmetric) New function.
7138
7139         * stats.c: (normal_sig) Rewritten with new algorithm.  Renamed
7140         from calc_normal.
7141         (chisq_sig) Better boundary conditions.  Renamed from
7142         calc_significance.
7143
7144         * tab.h: (struct tab_table) New member cf.
7145
7146         * tab.c: (tab_create) Set cf.
7147         (tab_width) New function.
7148         (tab_realloc) Handle cf.
7149         (tab_vline) Handle cf.
7150         (tab_hline) Handle cf.
7151         (tab_box) Handle cf.
7152         (tab_value) Handle cf.
7153         (tab_float) Handle cf.
7154         (tab_text) Handle cf.
7155         (tab_joint_text) Handle cf.
7156         (tab_offset) Handle cf.
7157         (tab_next_row) Handle cf.
7158         (evaluate_dimensions) Handle cf.
7159         (render_strip) Handle cf.
7160
7161 Wed May 20 00:03:59 1998  Ben Pfaff  <blp@gnu.org>
7162
7163         * crosstabs.q: (postcalc) New vars row_tot, col_tot, pass them to
7164         output_pivot_table().
7165         (output_pivot_table) Moved lots of local variables outside and
7166         made them static.  Add beginnings of chi-square statistic
7167         support.  Now column and row totals aren't in the main matrix.
7168         Always zero out any leftover rows & columns after we're done with
7169         the table entries.  Move all output stuff into
7170         display_dimensions(), display_crosstabs(), display_chisq().
7171         (display_dimensions) New function.
7172         (display_crosstabulation) New function.
7173         (display_chisq) New function.
7174         (calc_chisq) Implemented Pearson and likelihood-ratio chisquares.
7175
7176         * frequencies.q: (dump_full, dump_condensed) Remove tab_null()
7177         references, simplify logic.
7178
7179         * postscript.c: Remove scale, translate-x, translate-y,
7180         mirror-horz, mirror-vert, rotate-180 options.
7181         (struct ps_driver_ext) Remove scale, translate_x, translate_y.
7182         All references deleted.
7183         (macro YT) New macro.
7184         (array option_tab[]) Removed options.
7185         (ps_option) Removed options.
7186         (ps_open_page) Write page setup explicitly to output file, without
7187         using now-deleted BP function.
7188         (macro dump_line) Use YT().
7189         (macro dump_thick_line) Use YT().
7190         (draw_headers) Use YT().
7191         (switch_font) Reorder arguments to SF function.
7192         (write_text) Use YT().
7193
7194         * sfm-read.c: (sfm_read_case) Don't attempt to read variables that
7195         have get.fv == -1.
7196
7197         * sysfile-info.c: (describe_variables) Don't use tab_nulls().
7198
7199         * tab.c: (tab_create) Initialize t->ct to zeros.  Remove
7200         null-debugging code.
7201         (tab_realloc) Remove null-debugging code.  Initialize new regions
7202         of t->ct to zeros.
7203         (tab_vline) Support offsets.
7204         (tab_hline) Support offsets.
7205         (tab_box) Support offsets.
7206         (tab_null) Removed.
7207         (tab_nulls) Removed.
7208         (tab_row) Removed.
7209         (tab_col) Removed.
7210         (evaluate_dimensions) Remove null-debugging code.  Understand
7211         TAB_EMPTY attribute.  Assert that text.s.s is always non-NULL if
7212         TAB_EMPTY not present.
7213
7214         * tab.h: New cell attribute TAB_EMPTY.
7215         (macros tab_nr, tab_nc, tab_row, tab_col) New.
7216
7217         * vars-atr.c: (init_variable) Set get.fv to -1 so that GET doesn't
7218         try to read them from system files.
7219
7220         * vfm.c: (dump_splits) Don't call tab_null().   
7221
7222 Sat May 16 19:36:55 1998  Ben Pfaff  <blp@gnu.org>
7223
7224         * crosstabs.q: (struct crosstab) Added `missing' member.
7225         (custom_tables) Init missing.
7226         (calc_general) Handle missing values.
7227         (calc_chisq) New function.
7228         (output_pivot_table) Start work on chi-square output.  Update for
7229         new tab offset support functions.  Shorten statistic names.
7230
7231         * Several files: add in more `const's to placate gcc's warnings.
7232
7233         * tab.h: (struct tab_table) Add col_ofs, row_ofs members.  Comment
7234         fixes.
7235
7236         * tab.c: (tab_height, tab_realloc, tab_vline, tab_hline, tab_box,
7237         tab_null, tab_nulls, tab_value, tab_float, tab_text,
7238         tab_joint_text) Add col_ofs and row_ofs support.
7239         (tab_offset) New function.
7240         (tab_next_row) New function.
7241         (tab_row) New function.
7242         (tab_col) New function.
7243         (tabi_table) Add col_ofs and row_ofs support.
7244
7245         * vars-atr.c: (is_system_missing) New function.
7246
7247 Tue May 12 16:14:30 1998  Ben Pfaff  <blp@gnu.org>
7248
7249         * crosstabs.q: Expanded subcommand names RESID --> RESIDUAL, etc.
7250         (static var no_cells) Removed.
7251         (static var num_cells) New.
7252         (static var expected) New.
7253         (static var cells[]) New.
7254         (internal_cmd_crosstabs) Deal with new variables.
7255         (postcalc) Removed most of the meat and put it in new function
7256         output_pivot_table().
7257         (output_pivot_table) Calculates and outputs an entire pivot table.
7258
7259         * postscript.c: (postopen) Fix problems with free()ing addresses
7260         not obtained from malloc().
7261
7262         * som.c: (som_submit) Add assertion.
7263
7264         * sysfile-info.c: (describe_variable) Use new tab_nulls()
7265         function.
7266
7267         * tab.c: (static var tab_names[]) New.
7268         (tab_realloc) -1 for nc or nr indicates no change.
7269         (tab_nulls) New function.
7270         (tab_dim) Use tab_names[].
7271         (tabi_cumulate) Don't include bottom or right headers.  Furrfu.
7272         (evaluate_dimensions) Don't terminate on uninited cells, just put
7273         an X in them and emit a notice.  Use tab_names[].
7274
7275         * tab.h: Move bits into tab.def.
7276
7277         * tab.def: New.  Don't try to declare tab_table_class because then
7278         som.h has to be included.       
7279         
7280 Thu May  7 22:55:04 1998  Ben Pfaff  <blp@gnu.org>
7281
7282         * command.def: New file, contains all the command definitions
7283         previously included bodily in command.c.
7284
7285         * format.def: New file, contains all of the format definitions
7286         previously split across format.h, format.c, and sfm-write.c.
7287
7288         * lexer.h: Renamed from tokens.h in order to match corresponding
7289         .c file name.
7290
7291         * lexerP.h: Moved some rarely used functions exported by lexer.c
7292         into here.
7293
7294         * Makefile.am: Commemorate renamed files.
7295         (EXTRA_DIST) Add command.def, format.def.
7296
7297         * command.c: [0] (walk_cmdtable_func) Removed.
7298
7299         * crosstabs.q: (postcalc) Made it work and print out matrices
7300         proving it.
7301         (enum_column_values) Renamed enum_var_values, generalized for any
7302         variable.
7303
7304         * format.h: (struct fmt_desc) New member `spss'.
7305
7306         * q2c.c: (main) Generated code includes lexer.h instead of
7307         tokens.h.
7308
7309         * sfm-write.c: (write_format_spec) Use new spss member of fmt_spec
7310         instead of an independent translation table.
7311
7312 Tue May  5 13:19:03 1998  Ben Pfaff  <blp@gnu.org>
7313
7314         * Lots of source files: Added const to declarations.
7315
7316         * aggregate.c: (parse_aggregate_function) Rename inner i to j.
7317         
7318         * arena.c: (arena_clear) Set prev pointer to null when done.
7319
7320         * ascii.c: (ascii_option) Rename index as indx.
7321
7322         * avl.c: This is now a separate library called libavl.
7323         (xmalloc) Make static.
7324         (avl_probe) Step A7 can use the cache instead of an explicit
7325         compare.
7326         (avl_delete) Don't maintain a q pointer because it's always
7327         available in the pointer stack.  Comment fix.
7328
7329         * avl.h: This is now a separate library called libavl.
7330
7331         * command.c: (cmd_table[]) Remove spurious trailing "".
7332
7333         * common.h: Only include random() fix if this system needs it.
7334
7335         * crosstabs.q: Include alloca headers.
7336         (n_sorted_tab) New global var.
7337         (postcalc) Mostly rewritten.
7338         (find_pivot_extent) Rewritten.
7339         (enum_column_values) Rewritten.
7340
7341         * data-out.c: (convert_F) Rename inner n as n_spaces.
7342
7343         * error.c: (dump_message) Don't have an outer var i.
7344
7345         * file-handle.q: (static var f) Removed.  All references removed.
7346         (internal_cmd_file_handle) Uses a local variable instead of f.
7347
7348         * get.c: (trim_dictionary) Change scope of i, i1, i2.
7349         (cmd_match_files) Don't strcpy tokstr into sbc (why was this ever
7350         done?)
7351
7352         * getline.h: Declare getl_history as extern.  Reported by
7353         palme@uni-wuppertal.de (Hubert Palme).
7354
7355         * postscript.c: (postopen) Some large mods for constness.
7356
7357         * recode.c: Remove spurious copyrights since PSPP is owned by FSF
7358         anyway.
7359
7360 Fri Apr 24 12:52:47 1998  Ben Pfaff  <blp@gnu.org>
7361
7362         * Makefile.am: Rename BUILT_SOURCES to q_sources, all references
7363         changed.  Add avl.c, avl.h to pspp_SOURCES.  Remove avllib from
7364         LDADD.
7365
7366         * avl.c, avl.h: New files.  These form a clean-room
7367         reimplementation of avllib.  Iterative algorithms are used in
7368         place of recursive ones, so there is no resemblance in the code.
7369
7370         * Lots of headers: Don't include other headers by default.
7371
7372         * Lots of source files: Explicitly include all needed headers.
7373
7374         * arena.c: (arena_clear) New function.
7375
7376         * crosstabs.q: (ROW_VAR, COL_VAR) New enums.
7377         (static var ar) Removed.
7378         (staitc vars ar_tc, ar_col) New.
7379         (cmd_crosstabs) Destroy the arenas.
7380         (internal_cmd_crosstabs) Create the arenas.
7381         (precalc) Don't need a free function for the hash.
7382         (calc_general) Make sure to zero out the trailer on the key data
7383         before inserting.
7384         (print_table_entries) Updated.
7385         (postcalc) Worked on actually implementing.
7386         (find_pivot_extent) New function.
7387         (compare_value) New function.
7388         (enum_column_values) New function.
7389
7390         * data-in.c: (parse_month) Make local array `static const'.
7391         
7392         * data-out.c: (convert_date) Make local array `static const'.
7393         (convert_WKDAY) Same.
7394         (convert_MONTH) Same.
7395
7396         * frequencies.q: (postprocess_freq_tab) avl_walk_inorder() has
7397         been renamed to avl_walk().
7398         
7399         * hash.c: Rewritten more efficiently.
7400
7401         * hash.h: Add attribute const to hsh_next_prime declaration.
7402
7403         * lexer.c: (id_match) Make arguments const.
7404
7405         * postscript.c: (ps_postopen_driver) Make default fonts the
7406         Helvetica family.
7407
7408         * q2c.c: (main) Generated code needs stdlib.h.
7409
7410         * sfm-write.c: (write_value_labels) An avl_traverser needs to be
7411         initialized to 0 now, not to NULL.  All other references to
7412         avl_traverser were updated in the same way.
7413
7414         * tokens.h: Macro version of id_match updated to use const
7415         properly.
7416
7417         * val-labs.c: (inc_ref_count) New function.
7418         (copy_value_labels) Simply through use of new avl_copy() function.
7419
7420 Wed Apr 15 13:01:58 1998  Ben Pfaff  <blp@gnu.org>
7421
7422         * crosstabs.q: Probably doesn't compile.  New PIVOT subcommand.
7423         (postcalc) Worked on this.
7424
7425         * postscript.c: (OPO_DOUBLE_LINE) New enum.
7426         (struct ps_driver_ext) New line_width_thick member.
7427         (ps_preopen_drive) Init line_width_thick.
7428         (option_tab[]) Add line-* options.
7429         (ps_option) Parse line-* options.
7430         (postopen) Add line_width_thick support.  Strip leading spaces on
7431         prologue output lines.
7432         (ps_open_page) Include line_width_thick in output.
7433         (macro dump_thick_line) New.
7434         (dump_fancy_line) Support thick lines as well as double lines.
7435
7436 Tue Apr 14 00:50:08 1998  Ben Pfaff  <blp@gnu.org>
7437
7438         * Makefile.am: Add crosstabs.c to BUILT_SOURCES.  Add crosstabs.q
7439         to pspp_SOURCES.  Add crosstabs.q to EXTRA_DIST.
7440
7441         * Many source files: Rename `options' to `pv_opts' as appropriate.
7442
7443         * command.c: (static var cmd_table[]) Add CROSSTABS command.
7444
7445         * common.c: (xcalloc) New function.
7446
7447         * crosstabs.q: New file.  Not finished yet, though.
7448                 
7449         * data-list.c: Comment fix.
7450
7451         * error.c: Remove some old Checker cruft.
7452
7453         * frequencies.q: (dump_full) Cumulate valid percent instead of
7454         regular percent.
7455
7456         * getline.c: Comment fix.
7457
7458         * hash.c: Comment fixes.
7459
7460         * hash.h: (struct hsh_table) Make hash functions return unsigned
7461         instead of int to avoid problems with taking the modulo of
7462         negative return values.  All references changed.
7463
7464         * misc.c: (intlog10) Make its table static const instead of auto.
7465
7466         * sfm-read.c: (read_header) Make `prefix' static const instead of
7467         auto.
7468
7469         * var.h: (union value) Add member `hash'.
7470         (struct variable) Rename prv_index as `foo'--all references
7471         changed.  Reorder.
7472         (typedef pv_opts) Removed.  All references changed.
7473
7474         * vars-prs.c: (parse_variables) Message fixes.
7475         
7476 Mon Mar  9 15:35:08 1998  Ben Pfaff  <blp@gnu.org>
7477
7478         * get.c: (cmd_match_files) Don't reverse the order of FILEs as
7479         they are being inserted.  Don't check for BY variables of
7480         different types.  Discard variables if the active file isn't
7481         included in the merge.
7482         (mtf_processing) Essentially rewritten.
7483         (mtf_merge_dictionary) Check for master/slave variables of
7484         different types/widths.
7485
7486         * vfm.c: (static var not_canceled) New var.
7487         (process_active_file) Don't call vfm_source->read() if
7488         there's no vfm-source.  Initialize not_canceled.
7489         (process_active_file_write_case) Honor and update not_canceled.
7490         (prepare_for_writing) Rollback changes from yesterday, they were
7491         wrong.
7492         (close_active_file) Don't destroy vfm_source unless it exists.
7493         
7494 Mon Mar  9 00:56:16 1998  Ben Pfaff  <blp@gnu.org>
7495
7496         * Lots of source files: Added { } around nested if/else constructs
7497         to avoid new gcc 2.8 warnings.
7498
7499         * data-in.c: (parse_Z) Declare `int' type explicitly.
7500         (convert_Z) Ditto.
7501
7502         * get.c: (struct mtf_file) Add prev, next_min, by, input members.
7503         (cmd_match_files) Initialize mtf_by_values.  Manage by, input,
7504         prev members.  Put TABLEs at the end of the chain and FILEs at the
7505         beginning.  Don't allow the active file in STATE_INIT.  Use proper
7506         `seen' value for the active file.  Fill out the by members and
7507         make sure they're of consistent type.  Do the actual merge
7508         operation.
7509         (mtf_processing_finish) New function.
7510         (var_type_description) New function.
7511         (mtf_free_file) New function.
7512         (mtf_free) Rewritten.
7513         (mtf_delete_file_in_place) New function.
7514         (mtf_read_nonactive_records) New function.
7515         (mtf_compare_BY_values) New function.
7516         (static var mtf_seq_no) New var.
7517         (mtf_processing) New function.
7518         (mtf_merge_dictionary) Assign nval members for the system file
7519         dictionary.  Assign fv values for its variables.  Point each slave
7520         variable to the corresponding master variable.
7521
7522         * hash.c: Include str.h.
7523
7524         * mis-val.c: (copy_missing_values) src arg is const.
7525
7526         * misc.c: (spacing) Make `max' var explicitly int.
7527
7528         * sfm-read.c: (dump_dictionary) Message reformatting.
7529         (sfm_read_case) Add assertion.
7530
7531         * sort.c: Esthetic fixes.
7532
7533         * var.h: (struct match_files_proc) New struct.
7534         (struct variable) Add private data match_files_proc.
7535
7536         * vars-atr.c: (delete_variable) Implement.  Add argument for the
7537         dictionary that owning the variable.
7538         (dup_variable) Add assertion.
7539
7540         * vfm.c: Comment fixes, hopefully the comments are correct now.
7541         (process_active_file) New function.
7542         (process_active_file_write_case) New function.
7543         (process_active_file_output_case) New function.
7544         (prepare_for_writing) Use temp_dict->nval for vfm_info, not
7545         default_dict.nval.
7546         (write_case) Renamed procedure_write_case().  Now write_case is a
7547         pointer to a function.  Style fixes.
7548         
7549 1998-03-05  Ben Pfaff  <blp@gnu.org>
7550
7551         * Makefile.am: (q2c) Link with libmisc.
7552         (version.c) Define default_config_path, include_path,
7553         groff_font_path.
7554
7555         * ascii.c: (ascii_postopen_driver) When the default newline string
7556         is requested, open file in text mode.  Suggested by
7557         palme@uni-wuppertal.de (Hubert Palme).
7558         (static vars line_buf, line_p) Change from char * to unsigned char
7559         *.
7560         (ascii_close_page) char * to unsigned char *.
7561
7562         * cmdline.c: (parse_command_line) Implement -r option by
7563         prepending ~/.pspp/rc to the list of files to process.
7564
7565         * command.c: (cmd_remark) Reset getl_prompt to the standard prompt
7566         before pulling in a final line.
7567         (null_func, null_int_func) Removed (dead code).
7568
7569         * descript.q: (display) Calculate width of variable name column
7570         properly.  Calculate number of valid cases properly.  Reported by
7571         palme@uni-wuppertal.de (Hubert Palme).
7572
7573         * filename.c: (init_filename) Use default_config_path instead of
7574         now obsolete CONFIG_PATH.
7575
7576         * getline.c: (getl_initialize) Use include_path instead of now
7577         obsolete INCLUDE_PATH.
7578         (getl_add_file) New argument `where'.  All references changed.
7579
7580         * groff.c: (find_font_file) Use groff_font_path instead of now
7581         obsolete GROFF_FONT_PATH.
7582         
7583         * postscript.c: (find_ps_file) Use groff_font_path instead of now
7584         obsolete GROFF_FONT_PATH.  Copy through temporary variable to
7585         avoid problems with constness.
7586
7587         * str.h: (macro cs_streq) New macro.
7588
7589         * version.h: (glob var default_config_path, include_path,
7590         groff_font_path) New vars.
7591         
7592 1998-02-23  Ben Pfaff  <blp@gnu.org>
7593
7594         * Many source files: Change verbose_msg() priority levels and
7595         messages.
7596
7597         * aggregate.c: Include debug-print.h.
7598
7599         * cmdline.c: (parse_command_line) Add --safer/-s and --command/-c
7600         options.
7601         (static var pre_syntax_message) Document --safer/-s and
7602         --command/-c.
7603
7604         * command.c: (cmd_erase, cmd_host) Disable if set_safer is set.
7605
7606         * dfm.c: (open_inline_file) [__CHECKER__] Zero out ext->file,
7607         because it's not used but it's still copied.
7608         (open_file_r) Remove gratuitous debug message.
7609
7610         * filename.c: (safety_violation) New function.
7611         (open_file) Remove gratuitous debug messages.  Don't allow pipe
7612         files if set_safer is set.
7613
7614         * get.c: Turn off debugging.
7615
7616         * getline.c: (getl_add_virtual_file) New function.
7617         (getl_read_line) Add verbose_msg() call for opening new syntax
7618         file.
7619         (getl_perform_delayed_reset) Add a return value describing whether
7620         any action was taken.  Call reset_eof().
7621
7622         * getline.h: Comment fix.
7623
7624         * groff-font.c: (groff_read_font) Use `goto next_iteration' in
7625         place of incorrect `continue'.  Use strtok_r() instead of
7626         strtok().  Always check strtok_r() return value.
7627         (groff_read_DESC) Use strtok_r() instead of strtok().
7628
7629         * lexer.c: (reset_eof) New function.
7630
7631         * main.c: (parse) Get a token after performing a delayed reset
7632         action; allow empty syntax files.
7633
7634         * postscript.c: (output_encodings) Use strtok_r() instead of
7635         strtok().
7636
7637         * q2c.c: (dump_parser) Use strtok_r() instead of strtok().
7638
7639         * set.q: Comment fixes.
7640         (glob var set_safer) New var.
7641         (internal_cmd_set) Support SAFER.
7642
7643         * str.h: [!HAVE_STRTOK_R] Declare strtok_r() prototype.
7644
7645         * temporary.c: (free_dictionary) Set d->splits to NULL after
7646         freeing.
7647
7648         * vars-atr.c: (clear_variable) Decrement dict->n_splits if
7649         variable deleted, not if it *isn't* deleted.
7650
7651 1998-02-16  Ben Pfaff  <blp@gnu.org>
7652
7653         * command.c: (array cmd_table[]) Add MATCH FILES.
7654
7655         * common.c: Comment fixes.
7656
7657         * data-list.c, dfm.c, error.c, filename.c, list.q, matrix-data.c,
7658         modify-vars.c, postscript.c, sfm-read.c, sfm-write.c, tab.c:
7659         Include alloca.h.  Problem reported by palme@uni-wuppertal.de
7660         (Hubert Palme).
7661
7662         * expr-opt.c: Include str.h.  Problem reported by
7663         palme@uni-wuppertal.de (Hubert Palme).
7664
7665         * get.c: (cmd_get) [DEBUGGING] Update v->p.get to v->get.
7666         (static var mtf_by) Change from char ** to variable **.
7667         (static var mtf_master) New var.
7668         (mtf_merge_dictionary) New function.
7669         (cmd_match_files) Init mtf_master.  Parse mtf_by according to new
7670         var type.  Reorder tests properly.  Initialize file->dict.  Detect
7671         TABLE= without BY=.  Read file dictionaries and merge them.  Give
7672         subcommand name with IN, LAST, FIRST error messages.  Create IN,
7673         LAST, FIRST variables.  Comment fixes.
7674         (mtf_free) Don't free default_dict.  Free mtf_master.
7675
7676         * getline.c: Define getl_mode.  Change getl_buf_size to size_t
7677         from int.
7678         (handle_line_buffer) Cast int to size_t in comparison to avoid
7679         warning.
7680
7681         * getline.h: Declare getl_mode extern.
7682
7683         * groff-font.c: (groff_read_font) Type-fix calls to getline.
7684         (groff_read_DESC) Make line_size a size_t.
7685         (match_tok) Parenthesize name to avoid macro expansion.
7686
7687         * mis-val.c: (copy_missing_values) New function.
7688
7689         * postscript.c: (postopen) Make buf_size a size_t.
7690
7691         * sfm-read.c: (dump_dictionary) Make global from static.  Print
7692         variable info in parts for easier debugging with Checker.
7693
7694         * temporary.c: (copy_variable) Use copy_value_labels().
7695         (new_dictionary) New arg: whether to copy file label, documents.
7696
7697         * val-labs.c: (copy_value_labels) New function.
7698
7699         * var.h: (enums MISSING_*) Add MISSING_COUNT.
7700
7701         * vars-atr.c: [GLOBAL_DEBUGGING] (force_dup_variable) New
7702         function.
7703         (dup_variable) Set prv_index, get.fv, get.nv.
7704
7705 Fri Feb 13 15:38:36 1998  Ben Pfaff  <blp@gnu.org>
7706
7707         * Makefile.am: (pspp_SOURCE) Add htmlP.h.
7708
7709         * Many source files: For ANSI-compliance, add empty statement
7710         after label.  Reported by palme@uni-wuppertal.de (Hubert Palme)
7711         and Micah Altman <maltman@www-vdc.fas.harvard.edu>.
7712
7713         * data-in.c: (parse_numeric) Some header files break on
7714         -DBL_MIN_10_EXP because they get a --; add () for safety.
7715         Reported by palme@uni-wuppertal.de (Hubert Palme).
7716
7717         * dfm.c: Idea by Dr Eberhard W Lisse <el@linux.lisse.na>.
7718         (struct dfm_fhuser_ext) Change `file' from FILE * to file_ext.
7719         (dfm_close) Use close_file_ext.
7720         (open_inline_file) Set file.file to NULL, not file.
7721         (open_file_r, open_file_w) Initialize file.file; fill in file_ext
7722         struct and use open_file_ext().
7723         (read_record) Use file.file.
7724
7725         * file-handle.q: (prepend_current_directory) Pass through special
7726         filenames.
7727
7728         * filename.c: Only include unistd.h if HAVE_UNISTD_H.
7729         (normalize_filename) Pass through special filenames.
7730         (open_file, close_file) Accept pipe| and |pipe syntaxes as
7731         equivalent.
7732         (dirname) Rename blp_dirname() because of name conflict on some
7733         OS.  All references changed.  Reported by palme@uni-wuppertal.de
7734         (Hubert Palme).
7735         (is_special_filename) New function.
7736
7737         * get.c: (GTSV_OPT*) Add GTSV_OPT_MATCH_FILES.
7738         (trim_dictionary) Conditionalize some of the options on whether
7739         GTSV_OPT_MATCH_FILES is in *options.
7740         (rename_variables) Don't allow variables to be renamed as scratch
7741         variables.
7742         (MTF_*) New enum series.
7743         (struct mtf_file) New struct.
7744         (static vars mtf_head, mtf_tail, mtf_by, mtf_n_by, mtf_free) New
7745         vars.
7746         (cmd_match_files, mtf_free) New functions.
7747
7748         * lexer.c: (match_int) Needed parentheses around name to escape
7749         macro expansion.  Reported by Micah Altman
7750         <maltman@www-vdc.fas.harvard.edu>.
7751
7752         * print.c: Needed to include alloca.h.  Reported by Micah Altman
7753         <maltman@www-vdc.fas.harvard.edu>.
7754
7755         * recode.c: (convert_to_double) Parenthesize -DBL_MIN_10_EXP to
7756         -(DBL_MIN_10_EXP).  Reported by palme@uni-wuppertal.de (Hubert
7757         Palme).
7758         
7759         * str.h: Include stdarg.h.  Reported by palme@uni-wuppertal.de
7760         (Hubert Palme) and Micah Altman <maltman@www-vdc.fas.harvard.edu>.
7761
7762 Thu Feb  5 00:18:21 1998  Ben Pfaff  <blp@gnu.org>
7763
7764         * html.c: (struct html_driver_ext) Move into htmlP.h.
7765         (html_preopen_driver) Initialize cp_x, cp_y.
7766         (html_submit) Implement as call to output_tab_table().
7767         (change_attributes) New function.
7768         (escape_string) New function.
7769         (output_tab_table) New function.
7770
7771         * list.q: (write_all_headers) Add code for writing headers for the
7772         html driver.
7773         (clean_up) Write out the html close-table tag.
7774         (determine_layout) Ignore html driver.
7775         (list_cases) Write html data.
7776
7777         * som.c: (som_submit) Move more of the code into output_table().
7778
7779         * tab.c: (static var hit) Make a global var and rename tab_hit.
7780         (static var tab_table_class) Make a global var.
7781
7782         * htmlP.h: New file.
7783
7784 Tue Feb  3 16:12:18 1998  Ben Pfaff  <blp@gnu.org>
7785
7786         * dump-sysfile.c: Removed.
7787
7788         * html.c: (preclose) Change comment in emitted code.
7789
7790         * matrix-data.c: Debugging off by default.  Comment fixes.
7791         (static var container) New var.
7792         (cmd_matrix_data) Create and destroy container.  Initialize
7793         is_per_factor[] to 0s.  Move code into new function
7794         string_to_content_type().  Require split values to be present in
7795         the data when ROWTYPE_ is explicit.  Call specific function, not
7796         general read_matrices().
7797         (string_to_content_type) New function.
7798         (context) Exclude all whitespace, not just spaces.
7799         (mget_token) A dot is a number.  Add assertion.
7800         (static var data) Renamed nr_data.
7801         (static var factor_values) Renamed nr_factor_values.
7802         (read_matrices) Renamed read_matrices_without_rowtype().  Handle
7803         only specific case.  Close data_file before exit.
7804         (fill_matrix) New function.
7805         (read_data_lines) Renamed nr_read_data_lines().  Remove debug
7806         printing.  Style fixes.  Message fixes.  Move code into
7807         fill_matrix().
7808         (read_matrices_without_rowtype) Rename
7809         matrix_data_read_without_rowtype().  Fix off-by-one error on
7810         loops.  Allocate nr_data[] memory from arena.
7811         (read_matrices_with_rowtype) Removed.
7812         (read_splits) Renamed nr_read_splits().  Style fixes.
7813         (read_factors) Renamed nr_read_factors().
7814         (dump_cell_content) Comment fixes.  Arguments changed.  Change
7815         debug printing.  All references changed.
7816         (output_data) Renamed nr_output_data().
7817         (static var wr_content) New var.
7818         (struct factor_data) New struct.
7819         (static var wr_data) New var.
7820         (static var wr_current) New var.
7821         (matrix_data_source_destroy_source) Removed.
7822         (read_matrices_with_rowtype) New function.
7823         (matrix_data_read_with_rowtype) New function.
7824         (wr_read_splits) New function.
7825         (compare_factors) New function.
7826         (wr_output_data) New function.
7827         (wr_read_rowtype) New function.
7828         (wr_read_factors) New function.
7829         (wr_read_indeps) New function.
7830         (glob var matrix_data_source) Make destroy_source member NULL as
7831         well.
7832
7833 Fri Jan 23 00:09:08 1998  Ben Pfaff  <blp@gnu.org>
7834
7835         * lexer.c: (syntax_error) Give better error message when at end of
7836         file.
7837
7838         * matrix-data.c: (var content_names[]) Fix PROX spelling.  Change
7839         N_SCALAR to output as plain N.
7840         (mdump_token) Change output format.
7841         (context) Fix message output interaction with spaces in input.
7842         (another_token) New function.
7843         (force_eol) Improved error message.
7844         (static var max_cell_index) New var.
7845         (read_matrices) Init `cells'.  factor_values is now per-cell.
7846         Init max_cell_index.
7847         (read_data_lines) Replace `compare' local with new `compare' arg.
7848         Debugging messages changed.  Only read factors if per_factor.
7849         Propagate error return from read_factors(), force_eol().
7850         Copy N_SCALAR values across the N vector.
7851         (read_matrices_without_rowtype) Don't init `cells'.  Don't need to
7852         check parentheses manually since we now have is_per_factor[].
7853         Call read_data_lines() with new args.  Check for end of data after
7854         looping, using another_token().
7855         (read_factors) Arguments changed.  Use max_cell_index to determine
7856         whether to read or compare factors.  Message fixes.
7857         (dump_cell_content) New function.
7858         (output_data) Completely rewritten because content types were
7859         supported to be nested inside factor values, not vice versa.
7860         
7861 Thu Jan 22 00:26:38 1998  Ben Pfaff  <blp@gnu.org>
7862
7863         * lexer.c: (syntax_error) Support formatted varargs messages.
7864
7865         * matrix-data.c: Turn debugging on by default.
7866         (static content_type[]) New array.
7867         (static content_names[]) New array.
7868         (static rowtype_, varname_) New vars.
7869         (static is_per_factor[]) New array.
7870         (static split_values) Moved declaration.
7871         (static n_continuous, first_continuous) New var.
7872         (cmd_matrix_data) Don't init split_values.  Assign ROWTYPE_ to
7873         rowtype_.  Simplify SPLIT code.  Init is_per_factor[].  Assign
7874         VARNAME_ to varname_.  Initialize first_continuous, n_continuous.
7875         Check for continuous variables.
7876         [DEBUGGING] (debug_print) Remove content_names[].
7877         (mdump_token) New macro.
7878         (mget_token_dump) New function.
7879         (mdump_token) New function.
7880         (context) New function.
7881         (mget_token) Fix messages.
7882         (static var data, split_values, factor_values) New vars.
7883         (read_matrices) Manage split_values, factor_values.
7884         (read_data_lines) New function.
7885         (read_matrices_without_rowtype) Implemented.
7886         (read_splits) Message fixes.  Uses `just_read'.
7887         (read_factors) New function.
7888         (output_data) New function.
7889         (matrix_data_source_destroy_source) Close the file handle.
7890         (glob var matrix_source) Change name from "DATA LIST" to "MATRIX
7891         DATA".
7892
7893         * str.c: (strpadcmp) Removed.
7894
7895         * vfm.c: (dump_splits) Initialize i; fix test for end of splits.
7896
7897 Sun Jan 18 00:30:59 1998  Ben Pfaff  <blp@gnu.org>
7898
7899         * Lots of source files: Add cast to unsigned character to calls to
7900         tolower() and toupper().
7901
7902         * aggregate.c: Set default_dict.splits to NULL.
7903
7904         * command.c: (static variable tab[]) Add MATRIX DATA.
7905
7906         * data-in.c: Add debugging defines.  Formatting fixes.
7907
7908         * expr-opt.c: Formatting fixes.
7909
7910         * lexer.c: (syntax_error) Message fixes.
7911
7912         * matrix-data.c: New enum series.
7913         (static vars fmt, section, diag, explicit_rowtype, signle_split,
7914         split_values, n_factors, factors, cells, pop_n, contents,
7915         n_contents) New vars.
7916         (cmd_matrix_data) Finished implementation.
7917         (compare_variables_by_mxd_vartype) New function.
7918         [DEBUGGING] (debug_print) New function.
7919         (static vars mtoken, mtokstr, mtoklen, mtokval) New vars.
7920         (read_matrices) New function.
7921         (read_matrices_without_rowtype) New function.
7922         (read_matrices_with_rowtype) New function.
7923         (read_splits) New function.
7924         (mget_token) New function.
7925         (force_eol) New function.
7926         [0] (test_tokenizer) New function.
7927         (matrix_data_source_destroy_source) New function.
7928         (glob var matrix_data_source) New var.
7929
7930         * misc.h: Include ieeefp.h if present.
7931
7932         * split-file.h: (cmd_split_file) Changes corresponding to struct
7933         dictionary changes.
7934
7935         * str.h: Fix memmem prototype.
7936
7937         * temporary.c: (save_dictionary, restore_dictionary,
7938         free_dictionary) Changes corresponding to struct dictionary
7939         changes.
7940
7941         * var.h: (MXD_* enums) New enum series.
7942         (struct matrix_data_proc) New struct.
7943         (struct split) Removed.
7944         (struct dictionary) Changed `splits' member from `split *' to
7945         `variable **'.
7946         (macro force_create_variable) New macro.  Replaced lots of
7947         create_variable()/assert() calls with calls to this macro.
7948
7949         * vars-atr.c: (discard_variables) Changed assertion.
7950         [GLOBAL_DEBUGGING] (force_create_variable) New function
7951         called by the macro of the same name.
7952         (clear_variable) Changes to delete splits from the dictionary
7953         corresponding to struct dictionary changes.
7954
7955         * vars-prs.c: (parse_variables) [GLOBAL_DEBUGGING] Check for
7956         corrupted variable `index' values in the dictionary passed in
7957         every time this function is called.
7958
7959         * vfm.c: (dump_splits, SPLIT_FILE_procfunc) Changes corresponding
7960         to struct dictionary changes.
7961
7962 Tue Jan 13 23:45:02 1998  Ben Pfaff  <blp@gnu.org>
7963
7964         * Makefile.am: (pspp_SOURCES) Add matrix-data.c.
7965
7966         * command.c: New includes.
7967         (static array cmd_table[]) Add ERASE, HOST, NEW FILE.
7968         (cmd_erase) New function.
7969         [unix] (shell) New function.
7970         (run_command) New function.
7971         (cmd_host) New function.
7972         (cmd_new_file) New function.
7973
7974         * expr-prs.c: (parse_primary) Message fix.
7975
7976         * inpt-pgm.c: Formatting fix.
7977         (cmd_reread) Implement the FILE subcommand.
7978
7979         * matrix-data.c: New file.
7980
7981         * q2c.c: (dump_header) Change output commenting style.
7982
7983         * weight.c: Comment fix.
7984
7985 Tue Jan 13 00:53:39 1998  Ben Pfaff  <blp@gnu.org>
7986
7987         * aggregate.c: (buf64_10x) Renamed buf64_1xx, all references
7988         changed.
7989         (buf_10x) Renamed buf_1xx, all references changed.
7990         (cmd_aggregate) Implemented cases 010, 011, 110, and 111 (all
7991         cases now implemented).
7992         (create_sysfile) New function.
7993         (agr_11x_func) New function.
7994
7995         * data-in.c: (parse_numeric) Work properly if there's an
7996         explicitly coded decimal point in the data and decimal places are
7997         specified on DATA LIST.  Bug reported by Dr Eberhard W Lisse
7998         <el@linux.lisse.na>.
7999
8000         * get.c: (cmd_get, cmd_save_internal) Allow extraneous slash
8001         before file specification on GET, SAVE, XSAVE.  Bug reported by Dr
8002         Eberhard W Lisse <el@linux.lisse.na>.
8003
8004         * q2c.c: [!HAVE_STRERROR] Include misc/strerror.c, not
8005         strerror.c.  Bug reported by Alexandre Oliva
8006         <oliva@dcc.unicamp.br>.
8007
8008         * sort.c: Include sort.h.  Comment fixes.  A few esthetic fixes.
8009         (static var separate_case_tab) New var.
8010         (cmd_sort_cases) Cancel temporary transformations here.  Free
8011         v_sort before return.
8012         (sort_cases) Run an EXECUTE procedure if SEPARATE is nonzero and
8013         we're reading from a sort stream.  Don't cancel temporary
8014         transformations.  Offload internal sorting to do_internal_sort().
8015         (do_internal_sort) New function.  Handles internal sorting even
8016         when SEPARATE is nonzero.  Doesn't free v_sort.
8017         (do_external_sort) Take new arg SEPARATE.  Only destroy `x' if
8018         it's non-NULL.
8019         (write_initial_runs) Take new arg SEPARATE.  Only destroy the old
8020         sink if SEPARATE is zero.
8021         (read_output_cases) Renamed read_sort_output(), all references
8022         changed.  Now uses separate_case_tab when it exists.
8023         (write_separate) New function.
8024
8025         * vfm.c: (page_to_disk) Destroy memory_source_cases, not
8026         memory_sink_cases.  Don't redundantly call
8027         vfm_source->destroy_source().
8028         (memory_stream_mode) After switching over, set memory_sink_cases
8029         to NULL.
8030
8031 Sat Jan 10 23:35:51 1998  Ben Pfaff  <blp@gnu.org>
8032
8033         * aggregate.c: (struct agr_var) Expand dbl[] array from 2 to 3
8034         elements.
8035         (static var prev_case) New, moved out of aggregate_single_case()
8036         local scope.
8037         (static var buf64_10x, buf_10x) New.
8038         (cmd_aggregate) Initialize prev_case.  Comment fixes.  Implement
8039         the 000, 001, 100, and 101 cases.  Free prev_case.
8040         (parse_aggregate_functions) Disallow scratch variables.
8041         (free_aggregate_functions) Only free agr_dict if non-null.  Use
8042         iter->function to determine numeric/string type, not
8043         iter->src->type.
8044         (aggregate_single_case) Don't manage prev_case.  Initialize
8045         aggregate info after dumping it.
8046         (accumulate_aggregate_info) Fix sum, weighted sum, mean, weighted
8047         mean, stddev, weighted stddev definitions.
8048         (dump_aggregate_info) Implemented.
8049         (initialize_aggregate_info) Renamed from
8050         initialize_aggregate_functions().  Initializes dbl[2].
8051         (agr_00x_trns_proc, agr_00x_end_func, write_case_to_sfm,
8052         agr_10x_trns_proc, agr_10x_trns_free, agr_10x_end_func) New.
8053
8054         * cases.c: (alloc_val) Removed.
8055
8056         * get.c: (cmd_save_internal) Initialize new `dict' member.
8057
8058         * sfm-write.c: (sfm_write_dictionary, write_header,
8059         write_variable, write_value_labels, write_documents) Reorganize,
8060         simplify for new parameter structure.
8061         (write_variable) Only one variable * argument now.
8062
8063         * sfm.h: (struct sfm_write_info) Removed `pri', `sec', and
8064         replaced by new `dict' member.
8065
8066         * temporary.c: (new_dictionary) Initialize n_documents.
8067
8068         * vars-atr.c: (dup_variable) Allocate `value's from dict into
8069         v->fv manually.
8070         (init_variable, replace_variable) Eliminate usage of alloc_val().
8071
8072         * vars-prs.c: (parse_DATA_LIST_vars) Accept PV_NO_SCRATCH option.
8073
8074         * vfm.c: (arrange_compaction) Allow `temporary' value of 2 to
8075         signal that AGGREGATE is to be used for forming final cases.
8076         (close_active_file) Call end_func before stopping lagging.  Cancel
8077         temporary after finishing compaction.
8078         (write_case) Comment fixes.  Cleaned up.
8079         (compact_case) Let AGGREGATE handle compaction when `temporary' is
8080         2.
8081
8082 Sat Jan 10 02:10:47 1998  Ben Pfaff  <blp@gnu.org>
8083
8084         * Makefile.am: (BUILT_SOURCES) Add means.c.
8085         (pspp_SOURCES) Add means.c.
8086         (EXTRA_DIST) Add means.q.
8087
8088         * command.c: (array cmd_table[]) Add MEANS.
8089
8090         * common.h: Esthetic fixes.  Comment fixes.  Test for
8091         MAX_SHORT_STRING greater than 8.
8092         (macros LOWEST, HIGHEST) New.
8093
8094         * data-in.c, data-list.c, recode.c: Comment fixes.
8095
8096         * means.q: New file, base version.
8097
8098         * mis-val.c: (parse_num_or_range, parse_numeric) Replace -DBL_MAX
8099         with LOWEST, DBL_MAX with HIGHEST.
8100
8101         * q2c.c: (dump_vars) Add an enum to array types giving the number
8102         of values for the enum.
8103
8104         * sfm-read.c: (sfm_read_dictionary, read_machine_flt64_info)
8105         Replace second_lowest_value with second_lowest_flt64.
8106
8107         * sfm-write.c: (write_variable, write_rec_7_34) Replace
8108         second_lowest_value with second_lowest_flt64.
8109
8110         * t-test.q: Comment fix.
8111
8112         * temporary.c: (restore_dictionary) Esthetic fix.
8113
8114         * tokens.h: (force_match_id, force_match, force_string, force_int,
8115         force_num, force_id) Replace msg() with syntax_error().
8116
8117         * var.h: (struct means_proc) New.
8118         (struct variable) Add mns member to `p' union.
8119
8120         * vars-prs.c: (parse_variable, parse_dict_variable,
8121         parse_variables, parse_DATA_LIST_vars) Replace msg() with
8122         syntax_error().
8123
8124 Thu Jan  8 22:28:41 1998  Ben Pfaff  <blp@gnu.org>
8125
8126         * Makefile.am: (pspp_SOURCES) Add tab.h.
8127
8128         * Most source files: Added a cast to unsigned char in usages of
8129         the ctype is*() functions.  Replaced `end of command expected'
8130         calls to msg() with calls to syntax_error().
8131
8132         * frequencies.q: (dump_condensed) Fix tab_dim() column reference.
8133
8134         * lexer.c: (hex_val) Removed (was dead code).
8135         (idmatch) Parenthesize function name to avoid macro expansion.
8136
8137         * postscript.c: Comment fixes.
8138         (ps_preopen_driver) Change default font size to 10pt.
8139
8140         * sfm-read.c: (read_variables) Byteswap sv.print, sv.write as
8141         int32s.
8142         (parse_format_spec) Change system-file format spec argument type
8143         to int32.  Parse the format spec with bitwise operators.
8144
8145         * sfmP.h: (struct sysfile_format) Removed.
8146         (struct sysfile_variable) Changed print, write members from
8147         sysfile_format to int32.
8148
8149         * tokens.h: Esthetic fixes.
8150         [__GNUC__] (macro id_match) New macro to hopefully speed up
8151         identifier matching.
8152         (macros match_id, match_tok, match_int) Implemented in
8153         compiler-independent manner; no longer GNU C only.
8154
8155         * vfm.h: Include time.h.
8156
8157 Mon Jan  5 11:06:15 1998  Ben Pfaff  <blp@gnu.org>
8158
8159         * data-list.c: (dump_fixed_table) Change tab_dim().
8160
8161         * dump-sysfile.c: (open_sysfile) Fix mmap() call.
8162
8163         * error.c: Include command.h.
8164
8165         * frequencies.g: Formatting fixes.
8166
8167         * frequencies.q: Add tab_dim() calls.  Make the total cell a
8168         joined cell.
8169
8170         * glob.c: Include command.h.
8171
8172         * sfm-read.c: (struct sfm_fhuser_ext) New members sysmis, highest,
8173         lowest.
8174         (sfm_read_dictionary) Initialize sysmis, highest, lowest.
8175         (sfm_read_machine_flt64_info) Update sysmis, highest, lowest.
8176         (read_variables) Byteswap sv.type; byteswap sv.print, sv.write as
8177         the other elements (is this right?).
8178         (read_variables) Use lowest, highest members.
8179         (parse_format_spec) New arg `vv' for more stringent checking.
8180         (dump_dictionary) Byteswaps nonexplicit data.
8181         (sfm_read_case) Byteswap numeric data.
8182
8183         * som.c: Initialize table_num to 1.
8184         (render_segments) Remember to increment y_index after each table
8185         segment.
8186
8187         * sysfile-info.c: (cmd_sysfile_info) Change tab_dim().  Don't call
8188         avl_count() on a NULL tree.  No title for the second table.
8189         (cmd_display) Handle DISPLAY VECTORS by calling display_vectors().
8190         Handle AS_SCRATCH as AS_NAMES.  Warn if no variables.  Re-enable;
8191         fix call to display_variables().
8192         (display_variables) Default to 4 columns, not 3.  Set up headers.
8193         Column title is Variable, not Name.  Fix index column.
8194         Add joint text.  Add tab_dim().  Handle value labels properly.
8195         Handle DISPLAY LABELS properly.  Draw boxes correctly.
8196         (describe_variable) Value labels don't need titles.  Don't clear
8197         nonexistent index column.
8198         (compare_vectors_by_name) New function.
8199         (display_vectors) New function.
8200
8201         * tab.c: (tab_height) Add assertion.
8202         (tab_null) Add debug code.
8203         (evaluate_dimensions) Add debug code.
8204
8205         * var.h: (struct variable) get_proc data is sometimes used
8206         simultaneously with other per-procedure info, therefore it was
8207         removed from the union.  All references changed.        
8208
8209 Sun Jan  4 18:13:33 1998  Ben Pfaff  <blp@gnu.org>
8210
8211         * ascii.c: (ascii_close_page) Put title on second line of headers
8212         if there is no subtitle.
8213
8214         * command.c: (glob var cur_proc) Move definition here, from
8215         common.c.
8216         (cmd_remark) Emit blank line before remarks.
8217
8218         * command.h: (glob var cur_proc) Move declaration here, from
8219         common.h.
8220
8221         * data-list.c: (dump_fixed_table) Fix messages.
8222         (dump_free_table) Call tab_nat_dim().
8223
8224         * descript.q: (dump_z_table) Modify tab_dim() call.
8225
8226         * frequencies.q: (dump_condensed, dump_statistics) Add tab_dim()
8227         call.
8228         (dump_statistics) Don't output header.
8229
8230         * groff-font.c: Minor format fix.
8231
8232         * html.c: Comment fix.
8233
8234         * list.q: (write_varname) Indent after advancing page.
8235
8236         * output.h: Minor reordering.
8237
8238         * postscript.c: Comment fixes.  Many places, '\n' was replaced by
8239         a reference to eol[].
8240         (struct ps_driver_ext) New member eol[].
8241         (ps_preopen_driver) Initialize eol[].
8242         (ps_postopen_driver) Fix sense of text for text_opt, line_opt
8243         defaults.  Handle headers.  Fix test for minimum page length.
8244         (static var option_tab[]) Add `line-ends'.
8245         (ps_option) Handle line-ends to change eol[].
8246         (postopen) Scale prop_em_width and fixed_width properly.  Set the
8247         prologue title to outp_title if applicable.  Replace the prologue
8248         line ends with eol[].  Call draw_headers() if headers are enabled.
8249         (text_width) New function.
8250         (out_text_plain) New function.
8251         (draw_headers) New function.
8252
8253         * print.c: (dump_table) Call tab_nat_dim().
8254
8255         * som.c: (som_blank_line) Only advance a line if not at the top of
8256         a page.
8257         (som_submit) Move several informational table calls here.
8258         Increment subtable_num if SOMF_NO_TITLE not set.
8259         (output_table) Advance a line if SOMF_NO_SPACING not set.
8260         (render_columns, render_segments, render_simple) Handle spacing
8261         between tables.  Handle table titles.  Remove debug output.
8262
8263         * som.h: (SOMF_*) New enum series.
8264         (struct som_table_class) New member `flags'.
8265
8266         * sysfile-info.c: (cmd_sysfile_info) Calls tab_nat_dim().  No
8267         headers or spacing.
8268         (display_variables) Calls tab_nat_dim().
8269         (describe_variable) Remove restriction on number of value labels.
8270         Make value labels separated by thin lines.
8271
8272         * tab.c: (tab_create) Default `flags' to none.
8273         (tab_float) New arg `w'.  All references changed.
8274         (tab_nat_dim) New function.
8275         (tab_output_text) No title or spacing.
8276         (tab_flags) New function.
8277         (tabi_flags) New function.
8278         (tabi_title) New function.
8279         (strip_height) Removed.
8280         (tabi_render) Skip title when necessary.
8281         (static var tab_tab_class) Add tabi_flags, tabi_title.
8282         (evaluate_dimensions) Disable display of column, row size.
8283         (sum_columns) Add title height to top header.
8284         (render_strip) Moved within file.
8285
8286         * tab.h: (struct tab_table) New member `flags'.
8287
8288         * vfm.c: (dump_splits) Calls tab_nat_dim().  No title.
8289
8290 Sat Jan  3 16:55:44 1998  Ben Pfaff  <blp@gnu.org>
8291
8292         * Most source files: Add `const' attribute in all appropriate
8293         places.
8294         
8295         * sysfile-info.c: (cmd_sysfile_info) Add tab_dim() call, add a
8296         column to the variables table for use by describe_variable().
8297         (cmd_display) Disable for the present.
8298         (display_documents) Don't wrap documents.
8299         (display_variables) Table has four columns now.
8300         (describe_variable) Table has four columns now.  Don't use a
8301         subtable, use joined cells instead.
8302
8303         * tab.c: (tab_create) Don't set `join'.
8304         (tab_realloc) ct array is not made up of a_string's.
8305         Reallocate trh, hrh, h arrays, initialize trh array.  Initialize
8306         cell contents on GLOBAL_DEBUGGING, not DEBUGGING.
8307         (text_format) New function.
8308         (tab_title) Rewritten, uses text_format().
8309         (tab_text) Rewritten, uses text_format().
8310         (tab_joint_text) New function.
8311         (tab_join) Removed.
8312         (static var hit) New variable.
8313         (render_strip) New args r1, r2.  Implement joined cells that fit
8314         on a single page.
8315         (tabi_render) Increment hit.  Pass new args to render_strip().
8316         (evaluate_dimensions) [GLOBAL_DEBUGGING] Check for uninitialized
8317         cells.  For t_naw and t_nah, ignore joined cells and null cells in
8318         calculations.
8319         
8320         * tab.h: (struct tab_join_rect) Removed.
8321         (struct tab_table) Removed `join'.
8322         (TAB_JOIN_MAIN) Removed.
8323         (struct tab_joined_cell) New struct.
8324         (TAT_NOWRAP) New enum.
8325
8326 Fri Jan  2 01:39:58 1998  Ben Pfaff  <blp@gnu.org>
8327
8328         * ascii.c: (ascii_postopen) Replace ASCII_* macros with their
8329         expansions.
8330         (ascii_postopen_driver) Fix initialization of *_spacing so that
8331         the TAL_0 bit doesn't count.
8332
8333         * data-list.c: (dump_fixed_table) Use natural width for Format
8334         column.
8335
8336         * glob.c: (rerange) Removed.
8337         (get_date) Formatting fixes.  Internationalization fix.
8338
8339         * html.c: (html_postopen_driver) Replace HTML_DEFAULT_OUTPUT_FILE
8340         with "pspp.html".
8341
8342         * postscript.c: (ps_postopen_driver) Replace
8343         PS_DEFAULT_OUTPUT_FILE with "pspp.ps".
8344
8345         * som.c: (som_submit) Don't eject page before every table.
8346         (output_table) Fix order of arguments on call to area().
8347         (render_columns) Fix calculation of max_len.
8348         
8349         * tab.c: (tabi_cumulate) Minor change to increase elegance.
8350         (render_strip) New function.
8351         (strip_height) New function.
8352         (tabi_render) Rewrite as calls to render_strip().
8353
8354         * tab.h: (TAT_* enums) Removed TAT_RICH, all references removed.
8355         Renumbered TAT_PRINTF, TAT_TITLE, TAT_FIX to correspond better
8356         with the TAB_* and OUTP_T_* constants.
8357         
8358 Thu Jan  1 11:53:52 1998  Ben Pfaff  <blp@gnu.org>
8359
8360         * Makefile.am: Formatting fixes.
8361
8362         * ascii.c: (ascii_postopen_driver) Initialize *_line_spacing[],
8363         *_line_width[].
8364
8365         * data-list.c: (dump_fixed_table) Add tab_dim() call.
8366
8367         * descript.q: (dump_z_table, display) Add tab_dim() calls.
8368
8369         * dump-sysfile.c: (glob var length) Make type off_t.
8370         (usage) Fix arguments.
8371         (main) Return 0.
8372
8373         * output.h: (OUTP_T_*) Change constants' value to match tab.h.
8374         Now right-justification is the default so many references had to
8375         change.
8376         (struct outp_class) Removed line_width, all references changed.
8377         (OUTP_DEV_*) Add OUTP_DEV_DISABLED.
8378         (struct outp_driver) Add elements horiz_line_width,
8379         vert_line_width, horiz_line_spacing, vert_line_spacing.  Remove
8380         som element.
8381
8382         * postscript.c: (outp_encodings) Formatting fixes.  Fix garbage
8383         collection.
8384         (postopen) Initialize all the informational members of
8385         outp_driver.
8386
8387         * som.c: (som_blank_line) New function, renamed from blank_line(),
8388         all references changed.
8389         (som_submit) Disables drivers whose pages can't be opened.
8390         (render_columns, render_simple, render_segments) Add debug output.
8391         (render_columns) Fix loop range.
8392         (render_simple) Don't try to render the headers, they're taken
8393         care of automatically.  Advance cp_y past the table when done.
8394         (render_segments) Fix loop ranges.
8395
8396         * tab.c: Initialize new members of tab_table.
8397         (tab_vline) Handle trv[]; don't set style for spacing-only lines.
8398         (tab_hline) Handle trh[]; don't set style for spacing-only lines.
8399         (tab_box) Handle trh[], trv[]; don't set style for spacing-only
8400         lines.
8401         (set_expr) Removed.
8402         (tab_dim) New function.
8403         (tab_col_width) Removed.
8404         (tab_row_height) Removed.
8405         (tab_output_text) Call tab_dim().
8406         (tabi_driver) Call evaluate_dimensions(), sum_columns().
8407         (tabi_area) Implemented.
8408         (tabi_cumulate) Implemented.
8409         (tabi_render) Partially implemented, but broken.
8410         (var tab_table_class) Made static.
8411         (evaluate_dimensions) New function.
8412         (sum_columns) New function.
8413
8414         * tab.h: (enum t_*) Now start at t_end.  New: t_ptw, t_nr, t_nc,
8415         t_nah, t_naw, t_neg, t_xch, t_dup, t_lbl, t_jnz, t_sac, t_sar,
8416         t_scr, t_srr, t_sentinel.  Removed: t_nat.
8417         (struct tab_table) New: wl, wr, ht, hb, trh, hrh, trv, wrv, dim,
8418         max_stack_height, w, h.  Removed: ce, re.
8419         (macro blank_line) Removed.
8420         (glob var zero_length) Removed.
8421
8422 Fri Dec 26 15:44:31 1997  Ben Pfaff  <blp@gnu.org>
8423
8424         * Most source files: include some of the new include files broken
8425         out of var.h.
8426         
8427         * Makefile.am: (pspp_SOURCES) Add all the new source files to the
8428         list.
8429
8430         * aggregate.c: (glob var outfile) Make static.
8431
8432         * command.c: (glob var pgm_state) Move here.
8433
8434         * common.c: (glob vars endian, second_lowest_value, pgmname,
8435         finished, curdate, cur_proc, start_interactive, history_file) Move
8436         here.
8437
8438         * descript.q: (structs dsc_z_score, descriptives_trns) Move here.
8439
8440         * file-handle.q: (glob vars files, inline_file) Move here.
8441
8442         * glob.c: Lost lots of glob vars, detailed in individual file
8443         entries.
8444         (init_glob) set_printer, set_screen were obsolete, deleted.
8445         set_cprompt has fewer spaces because pspp has fewer letters than
8446         fiasco.
8447
8448         * inpt-pgm.c: (glob vars inp_init, inp_init_size) Move here.
8449         (inp_nval) Made static.
8450
8451         * lexer.c: (glob vars token, tokval, tokstr, tokstr_size,
8452         tokstr_len, toklongstr, tokint) Move here.
8453
8454         * misc.c: Lost several vars and functions.
8455
8456         * set.q: (all the set_* variables) Move here.
8457
8458         * str.c: (strmaxcpy, strbarepadcpy, strbarepadlencpy, strpadcpy,
8459         blpstrset, strpadcmp, memrev, memrmem, cmp_str) Move here from
8460         misc.c.
8461
8462         * tab.c: (set_expr, tab_col_width, tab_row_height) New functions.
8463
8464         * tab.h: (enum series t_*) New enums.
8465         (struct tab_table) Use arena struct tag.  New members ce, re.
8466
8467         * tokens.h: Comment fixes.
8468
8469         * var.h: Move lots of enums and variables and functions and
8470         structures to other files.  Use and declare a lot more union and
8471         struct tags.  Comment fixes.  
8472
8473         * vector.c: (glob vars vec, nvec) Move here.
8474
8475         * vfm.c: (glob vars reinit_sysmis, reinit_blanks, init_zero,
8476         init_blanks, last_vfm_invocation) Move here.
8477
8478         * cases.h: New file.
8479         (struct long_vec) Move here.
8480         (vec_init, vec_clear, vec_insert, vec_delete, devector, envector)
8481         Move here.
8482
8483         * command.h: New file.
8484         (STATE_* enums) Move here.
8485         (glob var pgm_state) Move here.
8486
8487         * format.c: New file.
8488         (glob var formats) Move here.
8489         (parse_format_specifier_name, fmt_to_string,
8490         check_input_specifier, check_output_specifier,
8491         check_string_specifier, convert_fmt_ItoO, parse_format_specifier)
8492         Move here.
8493
8494         * format.h: New file.  Move functions now in format.c here.
8495         (FMT_* enums) Move here.
8496         (struct fmt_desc) Move here.
8497         (FCAT_* enums) Move here.
8498         (struct fmt_spec) Move here.
8499         (glob vars formats, fmt_parse_ignore_error) Move here.
8500
8501         * inpt-pgm.h: New file.
8502         (INP_* enums) Move here, make #defines into enums.
8503         (glob vars inp_init, inp_init_size) Move here.
8504
8505         * sort.h: New file.
8506         (glob vars v_sort, nv_sort) Move here.
8507         (sort_cases, read_sort_output) Move here.
8508
8509         * vector.h: New file.
8510         (struct vector) Move here, add struct tag.
8511         (glob vars vec, nvec) Move here.
8512         (find_vector) Move here.
8513
8514         * New file.
8515         (glob vars last_vfm_invocation, temp_case, reinit_sysmis,
8516         reinit_blanks, init_zero, init_blanks) Move here.
8517         (struct case_stream) Move here.
8518         (glob vars vfm_source, vfm_sink, vfm_memory_stream,
8519         vfm_disk_stream, sort_stream, data_list_source,
8520         input_program_source, file_type_source, get_source, n_lag) Move
8521         here.
8522         (procedure, write_case, lagged_case, compact_case, page_to_disk)
8523         Move here.
8524                 
8525 Wed Dec 24 22:40:42 1997  Ben Pfaff  <blp@gnu.org>
8526
8527         * Makefile.am: (pspp_SOURCES) Added html.c, som.c, som.h.
8528         (LDADD) Add libdcdflib.
8529
8530         * ascii.c: Comment and formatting fixes.  Almost every external
8531         function had an assert added, checking driver_open and page_open.
8532         (ascii_init_driver) Broken into ascii_preopen_driver,
8533         ascii_postopen_driver, ascii_close_driver.  Manages driver_open.
8534         (ascii_open_page) Sets page_open.
8535         (ascii_close_page) Clears page_open.
8536
8537         * html.c: Comment and formatting fixes.  Almost every external
8538         function had an assert added, checking driver_open and page_open.
8539         (html_init_driver) Broken into html_preopen_driver,
8540         html_postopen_driver, html_close_driver.  Manages driver_open.
8541         (html_open_page) Sets page_open.
8542         (html_close_page) Clears page_open.
8543         (html_submit) Disabled.
8544
8545         * lexer.c: (parse_string) Remove debugging printf.
8546
8547         * list.q: (determine_layout) Open a page if one is not yet open.
8548
8549         * output.c: Comment fixes.
8550         (add_class) Set the class member of the new list element.
8551         (parse_options) Don't handle device type.
8552         (colon_tokenize) New function.
8553         (configure_driver) New four-field format with a field for device
8554         type.  Now initialize driver_open, page_open, next, and prev
8555         fields.  Use new colon_tokenize() function.  Don't do a memory
8556         copy to replace a driver, it doesn't work; instead delete the old
8557         driver and insert a new one.
8558         (destroy_driver) Don't call som_destroy_driver().  Close the page
8559         if it's open.  Find the class in the list of classes and decrement
8560         that reference count.  Remove the driver from the global driver
8561         list.
8562         (outp_iterate_enabled_drivers) Renamed outp_drivers().  All
8563         references changed.  Rewritten.  Don't return a driver that's not
8564         enabled.
8565         (outp_eject_page) All references to som_internal_eject_page()
8566         changed to use this.  Sets cp_x to 0 as well as cp_y.
8567
8568         * output.h: (OUTP_I_* enums) Removed.
8569         (struct som_submission_form) Removed.
8570         (struct outp_class) init_driver broken into preopen_driver,
8571         postopen_driver, and close_driver.  submit changed to take a
8572         som_table argument.
8573
8574         * postscript.c: Comment and formatting fixes.  Almost every
8575         external function had an assert added, checking driver_open and
8576         page_open.
8577         (ps_init_driver) Broken into ps_preopen_driver,
8578         ps_postopen_driver, ps_close_driver.  Manages driver_open.
8579         (ps_open_page) Sets page_open.
8580         (ps_close_page) Clears page_open.
8581
8582         * som.c: New file, base implementation.
8583         
8584         * som.h: (struct som_table) Add struct tag.
8585         (enum SOM_COL_ACROSS) Removed.
8586         (SOM_ROWS, SOM_COLUMNS) New enums.
8587         (struct som_table_class) Add member `cumulate'.  Remove `segment';
8588         change `render' arguments.
8589         (struct som_point, struct som_rect) Removed.
8590         (som_submit_table) Fixed typo, should have been som_submit.
8591
8592         * sysfile-info: (describe_variable) Don't try to insert a
8593         subtable; just destroy it for now.
8594
8595         * t-test.q: Include dcdflib/cdflib.h instead of cdflib.h.  Fix
8596         references to value labels.
8597
8598         * tab.c: (tab_destroy) New function.
8599         (tab_columns) Change argument.
8600         [0] (tab_submit) Remove dead code.
8601         (tab_title) Allocate string from the table's arena.
8602         (tab_output_text) Only free the buffer if we allocated it.
8603         (tab_submit) New function.
8604         (static vars t, d) New static vars.
8605         (tabi_table, tabi_driver, tabi_count, tabi_area, tabi_columns,
8606         tabi_headers, tabi_cumulate, tabi_render) New functions.
8607         (glob var tab_table_class) New global var.
8608
8609         * tab.h: (struct tab_join_rect) Don't use a som_rect; directly
8610         encapsulate the rectangle.  All references changed.
8611         
8612 Sun Dec 21 16:18:58 1997  Ben Pfaff  <blp@gnu.org>
8613
8614         * All header files updated to use struct tags in addition to
8615         typedefs for all structures.  Don't use word `struct' in struct
8616         tags.
8617         
8618         * Makefile.am: (pspp_SOURCES) Remove html.c.
8619         (INCLUDES) Replace the lib/* includes with a single lib/ include;
8620         all references updated.
8621
8622         * command.c: (parse_cmd) Remove call to som_check_workspace.
8623         (output_line) Update to new som.
8624
8625         * data-in.c: (parse_numeric) A single dot is not an error; it is
8626         the system-missing value.
8627
8628         * data-list.c: (dump_fixed_table, dump_free_table) Update to new
8629         som.
8630
8631         * data-out.c: Added `const' as appropriate to many prototypes.
8632         (convert_E, convert_F, convert_CCx) Take double argument instead
8633         of value * argument.
8634         (convert_format_to_string) Call changed functions appropriately.
8635         Instead of modifying the caller's value for FCAT_SHIFT_DECIMAL,
8636         make a local copy of the value.
8637
8638         * descript.q: Remove custom_variables() prototype now provided by
8639         q2c.  
8640         (custom_variables) Don't increment sbc_variables, the caller does
8641         this.
8642         (dump_z_table, display) Update to new som.
8643
8644         * error.c: (vmsg) Add const to prototype.  Remove code to handle
8645         `too many errors' condition.
8646         (check_error_count) New function.
8647         (msg) Add const to prototype.
8648
8649         * filename.c: (open_file) Rewrite for elegance.
8650
8651         * frequencies.q: Remove custom_*() prototypes now provided by q2c.
8652         (dump_full, dump_condensed, dump_statistics) Update for new som.
8653
8654         * list.q: Don't include somP.h.  Change all references to
8655         som_driver_ext to refer to the new members of som_driver.  Change
8656         som_internal_eject_page() references to outp_eject_page().
8657
8658         * main.c: (parse) Rewrite for elegance.  Add call to
8659         check_error_count().
8660
8661         * output.c: (add_class, outp_list_classes, outp_configure_driver)
8662         Rewrite or revise for new outp_driver_class_list structure.
8663         (outp_iterate_enabled_drivers) Fix comparison between disabled
8664         devices and current device type.
8665         (outp_eject_page) New function.
8666
8667         * output.h: Comment fixes.
8668         (struct outp_driver) New members driver_open, page_open, cp_x,
8669         cp_y, font_height, prop_em_width, fixed_width.  Deleted members
8670         ref_count, next.
8671         (struct outp_driver_class_list) New struct.
8672         (outp_class_list) Changed to type outp_driver_class_list; all
8673         references updated.
8674
8675         * print.c: (dump_table, print_trns_proc) Updated for new som.
8676
8677         * q2c.c: (dump_vars) Simplify array subcommand code.  Declare
8678         prototypes for custom subcommands.
8679         (dump_subcommand) Always include the `else'.
8680         (dump_parser) Fix comments in output code.
8681
8682         * set.q: Reordered functions.
8683
8684         * som-frnt.c, som-high.c, som-low.c, somP.h: Removed.
8685         
8686         * som.h: Rewritten from scratch.
8687
8688         * str.h: Remove dead code.
8689
8690         * tab.c, tab.h: New files, base implementation.
8691
8692         * sysfile-info.c: (cmd_sysfile_info, describe_variable) Update to
8693         new som.
8694
8695         * t-test.q: New code from John Williams
8696         <johnr.williams@stonebow.otago.ac.nz>.  Include math.h, cdflib.h.
8697         Many many new static vars and defines.
8698         (precalc, postcalc, g_postcalc, z_postcalc, t_pairs, t_groups,
8699         groups_calc, pairs_calc, z_dev_calc, z_calc) New functions.
8700         (struct value_list) New struct.
8701         (variance, covariance, pooled_variance, oneway, pearson_r, f_sig,
8702         t_crt, t_sig, print_t_groups) New functions.
8703         (cmd_t_test) Implemented.
8704
8705         * temporary.c: (cancel_temporary) Only free the temp_dict if it's
8706         non-NULL.
8707
8708         * vfm.c: (dump_splits) Update to new som.
8709
8710 Thu Dec  4 23:02:22 1997  Ben Pfaff  <blp@gnu.org>
8711
8712         * Makefile.am: (fiasco_SOURCES) Add html.c.
8713
8714         * aggregate.c: Base source.
8715
8716         * ascii.c: (postopen, preclose) Reformat.
8717
8718         * data-out.c, expr-evl.c: Comment fixes.
8719         
8720         * filename.c: (open_file) When opening a file for writing, use
8721         line buffering instead of full buffering for better interactive
8722         performance.  Suggested by Valerio Aimale
8723         <valerio@svpop.com.dist.unige.it>.  Also, recognize special file
8724         names `stdin', `stdout', `stderr'.
8725
8726         * groff-font.c: Comment fixes.
8727
8728         * html.c: New file; base version.
8729
8730         * list.q: (write_all_headers, clean_up, determine_layout,
8731         list_cases) Ignore `special' devices for now.  Needs to be fixed
8732         later.
8733
8734         * output.c: (outp_init) Add html driver to list; reverse list
8735         order.
8736
8737         * output.h: (struct outp_class_struct) New members `special',
8738         `submit'; comment fixes.  All references changed.
8739
8740         * postscript.c: (ps_init_driver) Make defaults for text_opt,
8741         line_opt depend on whether the OUTP_DEV_SCREEN bit is set on the
8742         device.
8743         (postopen) Comment fix.
8744         (preclose) Comment fixes, formatting fixes.  Change x->file.file
8745         references to more proper f->file.
8746
8747         * som-high.c: (som_submit_table) Special classes use their own
8748         renderers.
8749
8750         * som.h: Comment fixes.
8751
8752         * temporary.c: (new_dictionary) Don't try to xstrdup() a NULL
8753         string.
8754         
8755 Tue Dec  2 14:36:07 1997  Ben Pfaff  <blp@gnu.org>
8756
8757         * Makefile.am: (fiasco_SOURCES) Add aggregate.c back in.
8758
8759         * aggregate.c: Still working on this.
8760
8761         * command.c: (cmd_table[]) Add AGGREGATE back in.
8762         (split_words) Make '-' a legal word separator as well as ' '.
8763
8764         * main.c: Comment fixes.
8765
8766         * q2c.c: (dump_parser) Don't require the procedure's full name to
8767         be present, in the generated source.
8768
8769         * t-test.q: Change name to `t-test' from `t test'.  Let PAIRS be
8770         multiply specified and let it be default; let MISSING, CRITERIA,
8771         FORMAT be multiply specified.
8772         (cmd_t_test) Parse command name.  [DEBUGGING] Call debug_print().
8773         (custom_groups) Fix defaults.
8774         (custom_pairs) Check whether this is a PAIRS subcommand before
8775         attempting to parse.  Better garbage collection.  Proper storage
8776         allocation.
8777         [DEBUGGING] (debug_print) New function.
8778
8779         * temporary.c: Comment fixes.
8780         (copy_variable) Don't copy variable name and index.
8781         (save_dictionary) Copy variable name and index by hand.
8782
8783         * vars-atr.c: Comment fixes.
8784         (create_variable) New dictionary argument.  All references
8785         changed.
8786         (common_init_stuff) New dictionary argument.  All references
8787         changed.
8788         (init_variable) New dictionary argument.  All references changed.
8789         (dup_variable) New function.
8790
8791         * vars-prs.c: (parse_variables) If there are any errors, we always
8792         return 0.  Previously, it was possible for some types of errors to
8793         be ignored.
8794         
8795 Sat Nov 22 01:20:59 1997  Ben Pfaff  <blp@gnu.org>
8796
8797         * Makefile.am: (fiasco_SOURCES) For 0.1.5 release, remove
8798         aggregate.c.
8799
8800         * command.c: (cmd_table[]) Comment out AGGREGATE; add T TEST.
8801
8802         * list.q, t-test.q: Remove ALL option from VARLIST declaration in
8803         grammar rules.
8804
8805         * q2c.c: Comment fixes.
8806         (SBC_* enums) Remove SBC_VARLIST_ALL; all references removed.
8807         
8808         * t-test.q: (cmd_list) Rename cmd_t_test.
8809
8810         * temporary.c: (new_dictionary) Don't declare as static.
8811         
8812 Fri Nov 21 00:03:06 1997  Ben Pfaff  <blp@gnu.org>
8813
8814         * aggregate.c: Changes, still not finished.
8815
8816         * file-handle.q, frequencies.q, list.q, set.q: Comment fixes.
8817
8818         * q2c.c: Comment fixes.  Now its output is internationalized.
8819         (get_token) Fix parsing of escapes within literal strings.
8820         (main) Fix bad #line directives in output.
8821
8822         * t-test.q: Base implementation.
8823
8824         * temporary.c: (new_dictionary) New function.
8825         (restore_dictionary) [__CHECKER__] Change fill character to *
8826         (from @).
8827         
8828 Sun Nov 16 01:29:57 1997  Ben Pfaff  <blp@gnu.org>
8829
8830         * Makefile.am: (BUILT_SOURCES, fiasco_SOURCES) Add t-test.c
8831
8832         * aggregate.c: Changes, still not finished.
8833
8834         * descript.q, list.q: Comment fixes.
8835
8836         * q2c.c: Almost completely rewritten.
8837
8838         * t-test.q: New file, not complete.
8839
8840 Fri Nov 14 00:14:48 1997  Ben Pfaff  <blp@gnu.org>
8841
8842         * aggregate.c: Changes, still not finished.
8843
8844         * sort.c: (sort_cases) Call cancel_temporary() instead of doing it
8845         by hand.
8846
8847         * temporary.c: (cancel_temporary) New function.
8848
8849         * vars-atr.c: (discard_variables) Call cancel_temporary() instead
8850         of doing it by hand.
8851
8852         * vfm.c: (close_active_file) After restoring a TEMPORARY
8853         dictionary, set temp_dict to NULL.  Cancel TEMPORARY through
8854         cancel_temporary().
8855         (SPLIT_FILE_procfunc) Comment fix.
8856
8857 Tue Oct 28 16:08:45 1997  Ben Pfaff  <blp@gnu.org>
8858
8859         * Makefile.am: (fiasco_SOURCES) Add aggregate.c.
8860
8861         * aggregate.c: New file, not finished yet.
8862
8863         * command.c: (cmd_table) Add AGGREGATE.
8864
8865         * common.h: (pgm_state) Move declaration to var.h.
8866
8867         * lexer.c: (bin_value_func, oct_value_func, hex_value_func) i18n
8868         fixes.
8869         (parse_string) Message fix.
8870
8871         * recode.c: Comment fix.
8872
8873         * sfm-read.c: (read_variables) Code esthetic fixes.
8874         (write_header) Default date is `Jan', not `JAN'.
8875
8876         * sfmP.h: (bswap_int32) [!__linux__] Fix off-by-one errors.
8877
8878         * sort.c: (cmd_sort_cases) Farm the work out to new function
8879         parse_sort_variables().
8880         (parse_sort_variables) New function.
8881         (sort_cases) New function.  Cancels temporary transformations,
8882         which sorting didn't do previously.
8883         (cmd_sort_cases) Better garbage collection on error.  Uses
8884         do_external_sort().
8885         (write_initial_runs, merge_once) Improved code esthetics.
8886         (sort_stream_read) Reduced to one call to read_output_cases().
8887         (read_output_cases) New function.
8888
8889         * var-labs.c: (cmd_variable_labels) Re-enabled truncation of
8890         variable labels to 120 characters.
8891
8892         * var.h: Comment fixes.
8893         (glob var pgm_state) From common.h.
8894
8895         * vars-atr.c: (discard_variables) Set pgm_state to STATE_INIT.
8896
8897         * vars-prs.c: (parse_DATA_LIST_vars) Support PV_SINGLE in
8898         options.  Set *names to NULL on error.
8899
8900         * vfm.c: (memory_stream_init) Assert compaction_nval != 0.
8901
8902 Thu Oct  9 09:59:49 1997  Ben Pfaff  <blp@gnu.org>
8903
8904         * sfm-write.c, vfm.c: [HAVE_UNISTD] #include <unistd.h>, needed by
8905         SunOS4.  From Alexandre Oliva <oliva@dcc.unicamp.br>.
8906
8907 Wed Oct  8 18:55:24 1997  Ben Pfaff  <blp@gnu.org>
8908
8909         * vfm.c: (page_to_disk) Added missing local variables.
8910
8911 Tue Oct  7 20:23:17 1997  Ben Pfaff  <blp@gnu.org>
8912
8913         * get.c: Comment fix.
8914
8915         * sort.c: (cmd_sort_cases) Attempt to perform internal sort if the
8916         source is anything other than a disk stream, not just if it's in a
8917         memory stream.  Call page_to_disk() before external sort.
8918         (allocate_cases) Message fix.
8919
8920         * vfm.c: (prepare_for_writing) Warn user when paging workspace to
8921         disk.
8922         (page_to_disk) New function.
8923
8924 Sun Oct  5 15:56:14 1997  Ben Pfaff  <blp@gnu.org>
8925
8926         * Makefile.am: (INCLUDES) Include .. instead of $(top_srcdir).
8927
8928         * common.h: (macro strerror) Remove.  From Alexandre Oliva
8929         <oliva@dcc.unicamp.br>.
8930
8931         * get.c: (dict_delete_run) The number of variables to delete is
8932         not necessarily the number of variables that need to be shifted
8933         up.
8934         (trim_dictionary) Don't set *options to 0.  Fix bug that caused
8935         too many variables to be deleted.
8936
8937         * postscript.c: Comment fix.
8938
8939         * q2c.c: Include strerror.c.  From Alexandre Oliva
8940         <oliva@dcc.unicamp.br>.
8941
8942         * set.q: #undef ON and OFF.  From Alexandre Oliva
8943         <oliva@dcc.unicamp.br>.
8944
8945         * sfm-read.c: (sfm_read_dictionary) Don't set the file class too
8946         early, otherwise errors cause a bad free().
8947
8948         * str.h: (macro nvsprintf) s/FORMATS/FORMAT/ typo.  From Alexandre
8949         Oliva <oliva@dcc.unicamp.br>.
8950
8951         * temporary.c: (save_dictionary) Don't allocate memory if
8952         n_documents is 0.
8953
8954         * vfm.c: (memory_stream_write) Message fix.
8955
8956 Sat Oct  4 16:20:43 1997  Ben Pfaff  <blp@gnu.org>
8957
8958         * command.c: (static var cmd_table[]) Define REPEATING DATA
8959         command.
8960
8961         * common.h: Added support for broken systems that are missing
8962         EXIT_SUCCESS, EXIT_FAILURE, RAND_MAX, and/or strerror().
8963
8964         * Many source files: Replace syntax error messages via msg() with
8965         call to syntax_error().
8966
8967         * data-list.c: (dump_fixed_table) Add support for dumping table
8968         for REPEATING DATA as well as DATA LIST FIXED.
8969         (cmd_repeating_data) Allows and requires `/' between subcommands.
8970         Does proper thing with allowing rpd.starts_end to stay 0.  Allows
8971         CONTINUED specifications to be omitted.  Forces CONTINUED to be
8972         specified if ID is.  Calculates starts_end, cont_end from logical
8973         record length as reported by fhp.  Calls dump_fixed_table() if
8974         requested.  Fixed length of record copied by memcpy.
8975         (parse_num_or_var) Sets `num' to 0, not NOT_INT, for variables.
8976         Message fix.
8977         (realize_value) Returns sensible value for out-of-range variable
8978         values.
8979         (rpd_parse_record) New argument `ofs'.  Fixed confusion between
8980         length of occurrences and length of line.  Added warning for
8981         fields that exceed the line length.  Fixed infinite loop.
8982         (read_one_set_of_repetitions) Numerous minor changes for more
8983         complete SPSS compliance.  Message fixes.
8984
8985         * dfm.c: (dfm_close) If the file being closed is the inline file,
8986         read all the remaining data before closing it.
8987         (dfm_get_record) Don't close the file on lossage, as either it
8988         has been closed already or it doesn't belong to us.
8989
8990         * error.c: (puts_stdout) New function.
8991         (vmsg) Use puts_stdout instead of puts.
8992
8993         * file-handle.q: (fh_record_width) New function.
8994
8995         * inpt-pgm.c: (init_case) Fixed buffer overrun when inp_nval % 4
8996         == 0.
8997         (clear_case) Ditto.
8998         (input_program_source_read) Made an old kluge an approved method.
8999
9000         * lexer.c: (syntax_error) New function.
9001
9002         * misc.c: [BROKEN_RAND] (ansi_rand, ansi_srand; static var next)
9003         New.
9004
9005         * output.c: (oupt_get_paper_size) Message fix.
9006
9007         * q2c.c: Numerous fixes to formatting of generated code made to
9008         conform to GNU coding standards.  Uses syntax_error() in generated
9009         code.  Other miscellaneous generated message fixes.  Added support
9010         for broken systems that are missing EXIT_SUCCESS, EXIT_FAILURE,
9011         RAND_MAX, and/or strerror().
9012
9013 Sat Oct  4 02:09:56 1997  Ben Pfaff  <blp@gnu.org>
9014
9015         * data-in.c: Comment fixes.
9016
9017         * data-list.c: (struct repeating_data_trns) New member `id_spec'.
9018         (find_variable_input_spec) New function.
9019         (cmd_repeating_data) Initializes id_spec.
9020         (rpd_parse_record) Implemented.
9021         (read_one_set_of_repetitions) Returns -3 by default in order to
9022         kluge out some potential bugs.
9023
9024         * data-out.c: Comment fixes.
9025
9026         * file-type.c: (internal_cmd_record_type) Message fix.
9027
9028         * inpt-pgm.c: (input_program_source_read) Special temporary kluge
9029         for handling -3 return value.
9030
9031 Sat Sep 20 23:58:15 1997  Ben Pfaff  <blp@gnu.org>
9032
9033         * data-list.c: Comment fixes.
9034         (struct dls_var_spec) Reordered members.
9035         (read_from_data_list_fixed) Restructured.
9036         (struct repeating_data_trns) Reordered members.  Renamed `starts'
9037         as `starts_beg', `ends' as `starts_end'.
9038         (cmd_repeating_data) Calculates length of repeated data if
9039         necessary and possible.
9040         (parse_num_or_var) Don't allow string variables.
9041         (realize_value) New function.
9042         (rpd_msg) New function.
9043         (rpd_parse_record) New function.  Currently stubbed out.
9044         (read_one_set_of_repetitions) Implemented.
9045
9046         * inpt-pgm.c: (input_program_source_read) Comment fix.
9047
9048 Thu Sep 18 21:34:57 1997  Ben Pfaff  <blp@gnu.org>
9049
9050         * command.c: (cmd_end_repeat_p) Removed.
9051         (init_cmd_parser) Doesn't set cmd_end_repeat_p.
9052         (parse_cmd_name) Removed.
9053
9054         * data-list.c: Comment fixes.
9055         (data_list_pgm) Removed `eof' member.
9056         (static var first) New var.
9057         (cmd_data_list) Sets `first'.  Ensures that DATA LIST uses the
9058         FILE TYPE file inside FILE TYPE structures.
9059         (append_var_spec) Appends to *first, not dls.spec.
9060         (parse_fixed) Message fixes.
9061         (struct rpd_num_or_var) New.
9062         (struct repeating_data_trns) New.
9063         (static var rpd) New.
9064         (cmd_repeating_data) New function.
9065         (parse_num_or_var) New function.
9066         (parse_repeating_data) New function.
9067         (read_one_set_of_repetitions) New function.
9068
9069         * file-type.c: (cmd_file_type) Message fixes.  Always
9070         default_handle to FILE TYPE file handle.
9071         (internal_cmd_record_type) Message fixes.
9072
9073 Wed Aug 20 14:22:03 1997  Ben Pfaff  <blp@gnu.org>
9074
9075         * repeat.c: Comment fix.  Disable debugging.
9076
9077         * temporary.c: (restore_dictionary) Sets splits to NULL and
9078         n_splits to 0 before destroying the variables because now doing
9079         this tries to remove split variables.
9080
9081         * vars-atr.c: (discard_variables) Asserts that n_splits is 0 after
9082         destroying the dictionary.
9083         (clear_variable) Removes a variable from splits after destroying
9084         it.
9085
9086 Mon Aug 18 18:06:55 1997  Ben Pfaff  <blp@gnu.org>
9087
9088         * cmdline.c: (set_compat) Removed.
9089         (pick_compat) Removed.
9090         (parse_command_line) Removed -c option.
9091         (pre_syntax_message) Removed -c option.
9092         (usage) Remove compatibility code.
9093
9094         * common.h: (macros VER_PC, VER_WND, VER_X) Removed.
9095         (glob var compat) Removed.
9096
9097         * compute.c: (type_check) Fixed messages about type mismatches.
9098
9099         * data-list.c: (cmd_data_list) Removed compatibility code.
9100         (fixed_parse_compatible) Calls convert_negative_to_dash().
9101         Fixed bug where it only set the variable in fx.spec if it created
9102         the variable itself.
9103         (dump_fmt_list) Spelling fix.
9104         (cut_field) Removed compatibility code.
9105
9106         * dfm.c: (cmd_begin_data) Don't require a command terminator on
9107         BEGIN DATA command.
9108
9109         * expr-evl.c: (evaluate_expression) Implement LAG.
9110
9111         * expr-prs.c: (parse_add) Calls convert_negative_to_dash().
9112         (parse_neg) Calls convert_negative_to_dash().
9113         (LAG_func) Increases n_lag to the lag requested.  Fixed assignment
9114         bug.
9115
9116         * expr.h: (struct expression_struct) Removed member max_lag.
9117
9118         * file-type.c: (parse_col_spec) Calls convert_negative_to_dash().
9119         (internal_cmd_record_type) Removed special handling to produce
9120         negative numbers from dash tokens.
9121
9122         * getline.c: (static var DO_REPEAT_level) New var.
9123         (getl_add_DO_REPEAT_file) Increments DO_REPEAT_level.
9124         (handle_line_buffer) Copies the line into getl_buf; doesn't call
9125         copy_with_DO_REPEAT_substitutions().
9126         (getl_read_line) Maintains value of getl_mode.  Calls
9127         perform_DO_REPEAT_substitutions() whenever DO_REPEAT_level is
9128         positive.
9129         (getl_close_file) Decrements DO_REPEAT_level when appropriate.
9130
9131         * getline.h: (getl_mode) New glob var.
9132
9133         * glob.c: Comment fixes.
9134         (init_glob) Restructured.  Sets set_seed.
9135         (init_compat_dependent) Removed.  All references removed.
9136         (get_date) Format changed from MM/DD/YY to DD MMM YYYY.
9137         (__htonl, __htons) Removed.  (What were these for?)
9138
9139         * lexer.c: (static var tbl) Dash set to class CNUM.
9140         (make_hexit) New function from data-out.c.
9141         (get_token_representation) Rewritten.
9142         (convert_negative_to_dash) New function.
9143         (lex_init_compat_dependent) Removed.
9144         (yylex) A dash is parsed as part of a number if it is followed by
9145         a digit.  The ASCII representation of a number is copied to
9146         tokstr.  String parsing farmed out to parse_string().  Comment
9147         fixes.
9148         (bin_value_func, oct_value_func, hex_value_func, parse_string) New
9149         functions.
9150         (preprocess_line) Line processing depends on interactive/batch
9151         mode, not on compatibility mode.  Removed PC+ compatibility code.
9152
9153         * loop.c: (loop_3_trns_proc) Comment fix.
9154
9155         * main.c: Remove dead code.
9156         (main) Remove call to init_compat_dependent().
9157
9158         * misc.c: (convert_fmt_ItoO) Make E format conversion more
9159         conformant.
9160
9161         * print.c: (parse_string_argument) Calls
9162         convert_negative_to_dash().
9163         (fixed_parse_compatible) Calls convert_negative_to_dash().
9164
9165         * repeat.c: (RPT_* defines) Removed.
9166         (struct rpt_numeric) Removed.
9167         (struct repeat_entry) New member type, changed `replacement' from
9168         char * to char **.
9169         (clean_up) Deallocation adapted to new repeat_entry.
9170         (internal_cmd_do_repeat) `type' defaults to 0.  Remove lookahead()
9171         usage.  Creates vars for `type' of 1.
9172         (parse_ids) Sets type of 1.  Adapted to new repeat_entry.
9173         (store_numeric) Rewritten, new interface.
9174         (parse_numbers) Rewritten.
9175         (parse_strings) Rewritten.
9176         (find_DO_REPEAT_substitution) New function.
9177         (perform_DO_REPEAT_substitutions) New function.
9178         (copy_with_DO_REPEAT_substitutions) Removed.
9179         (debug_print) Rewritten.
9180
9181         * set.q: Comment fix.
9182         (custom_results) Removed compatibility code.
9183         (internal_cmd_set) Removed SET EMULATION subcommand.  Removed
9184         compatibility code.
9185
9186         * sysfile-info.c: (cmd_display) Removed compatibility code.
9187
9188         * tokens.h: Comment fixes.
9189         (token types enum) Removed `toktype' typedef name for this int
9190         type.  Removed SUBST.  Restructured.
9191
9192         * vars-atr.c: (discard_variables) Sets n_lag to 0.
9193
9194         * vars-prs.c: Comment fix.
9195
9196         * vfm.c: Comment fixes.
9197         (glob var n_lag) New var.
9198         (static vars lag_count, lag_head, lag_queue) New vars.
9199         (procedure) Removed argument nlag.
9200         (setup_lag) New function.
9201         (close_active_file) Discards lagging state.
9202         (lag_case) New function.
9203         (lagged_case) New function.
9204         (write_case) Lags a case if lagging.
9205
9206         * weight.c: (cmd_weight) Removed compatibility code.
9207         
9208 Sun Aug 17 22:34:40 1997  Ben Pfaff  <blp@gnu.org>
9209
9210         * getline.h: (struct getl_script) New members loop_index, macros.
9211
9212         * getline.c: (getl_add_file) Sets first_line field to NULL.
9213         (getl_add_DO_REPEAT_file) New function.
9214         (handle_line_buffer) When the current line's length is negative,
9215         set the filename and line number.  Increment line number after
9216         reading line.  Pass the line to
9217         copy_with_DO_REPEAT_substitutions() for processing.
9218         (getl_close_file) Free DO REPEAT lines before freeing the
9219         filename, and just set the filename to NULL when doing this,
9220         because otherwise the filename gets freed twice.
9221
9222         * glob.c: (glob var queuing) Removed.  All references removed.
9223
9224         * lexer.c: Comment fixes.
9225         (get_token_representation) New function.
9226
9227         * repeat.c: Comment fixes.
9228         (struct repeat_entry) Replaced type and v union members with a
9229         simple string.
9230         (append_record) New function.
9231         (internal_cmd_do_repeat) Started reforming it for the new
9232         repeat_entry struct.  Properly records filename changes in the
9233         getl_line_buf.  Fixed improper use of = for ==.  Fixed sense of
9234         strncasecmp() result usage.  Uses append_record() to simplify.
9235         Properly discards END REPEAT line.  Calls getl_add_DO_REPEAT_file
9236         to add in the file.
9237
9238         (copy_with_DO_REPEAT_substitutions) Started coding.
9239
9240         [DEBUGGING] (debug_print_lines) New function.
9241
9242         * set.q: (custom_results, internal_cmd_set) s/VER_PCP40/VER_PC/;
9243
9244         * tokens.h: (macro is_id1, is_idn) New macros.
9245
9246 Sat Aug 16 10:57:41 1997  Ben Pfaff  <blp@gnu.org>
9247
9248         * cmdline.c: (static var pre_syntax_message) Changed `win'
9249         compatibility mode to `wnd'.
9250
9251         * data-list.c: (fixed_parse_spss) Renamed
9252         fixed_parse_compatible().
9253
9254         * glob.c: (init_glob) Excise unused code for
9255         program_invocation_short_name.
9256
9257         * lexer.c: (preprocess_line) Leading indentors are ignored in Wnd
9258         as well as in X.
9259
9260         * print.c: (fixed_parse_spss) Renamed fixed_parse_compatible().
9261
9262         * set.q: `win' compatibility renamed `wnd'.
9263
9264 Thu Aug 14 22:11:12 1997  Ben Pfaff  <blp@gnu.org>
9265
9266         * filename.c: [__WIN32__] Change the included Windows header files
9267         (again).
9268         (absolute_filename_p) [__MSDOS__] A filename with a colon as the
9269         second character is absolute.
9270         (dirname) Fix logic error.  Don't printf() the results.
9271         (prepend_dir) Don't printf() the results.
9272
9273         * getline.c: (handle_line_buffer) New function.
9274         (getl_read_line) Reads line with handle_line_buffer() when
9275         appropriate.
9276         (getl_close_file) Discard line buffer data.
9277
9278         * getline.h: Comment fixes.
9279         (struct getl_line_list) New struct.
9280         (getl_script_struct) Added line buffer members.  These are hooks
9281         for use by DO REPEAT to allow it to insert virtual source code
9282         into the program.
9283
9284         * glob.c: (init_glob) [__DJGPP__ || (__WIN32__ && __BORLANDC__)]
9285         Override Borland C++ stupidity that claims Windows has a console
9286         window size of 0x3.
9287
9288         * repeat.c: This is in the process of being restructured from
9289         using a token-buffering approach to the DO REPEAT facility to
9290         using the more flexible approach of a line-buffering approach in
9291         conjunction with the getline module.  Comment fixes.
9292         (struct tok_struct) Removed.
9293         (static vars queue_index, queue_head, queue) Removed.
9294         (static vars line_buf_head, line_buf_tail) New vars.
9295         (internal_cmd_do_repeat) Instead of queuing tokens, queue lines.
9296         Not complete.
9297         (pull_queue, destroy_queue) Removed.
9298         [DEBUGGING] (debug_print_tokens) Removed.
9299
9300 Tue Aug  5 13:57:58 1997  Ben Pfaff  <blp@gnu.org>
9301
9302         * file-handle.q: (prepend_current_directory) New function.
9303         (internal_cmd_file_handle, fh_get_handle_by_filename) Prepends
9304         current directory before normalizing filename.
9305
9306         * filename.c: (gnu_getcwd) New function.
9307         (absolute_filename_p) New function.
9308         (search_path) New argument, PREPEND.  All references changed to
9309         pass NULL except those explicitly mentioned.  Uses
9310         absolute_filename_p().  Prepends PREPEND before trying the
9311         filename.
9312         (dirname, prepend_dir) New functions.
9313
9314         * getline.c: (getl_get_current_directory) New function.
9315         (getl_include) Passes getl_get_current_directory() as PREPEND arg
9316         to search_path().
9317                 
9318 Sun Aug  3 11:42:36 1997  Ben Pfaff  <blp@gnu.org>
9319
9320         * In several source files, the term `script' was replaced with
9321         `syntax file' inside error messages.  Usage of the term `script'
9322         in the sense of a syntax file is now deprecated.
9323
9324         * cmdline.c: (static vars pre_syntax_message, post_syntax_message)
9325         Updated messages.
9326
9327         * dump-sysfile.c: (usage) Update message.
9328
9329         * getline.c: (getl_read_line) Ignore lines beginning with `#!'.
9330
9331         * getline.h: (glob var getl_include_path) Declare extern.
9332
9333         * list.q: Define EXTERN as extern before #including somP.h.
9334
9335         * var.h: Remove declaration of `disptype' variable.
9336
9337         * vfm.c: (close_active_file) After switching the data sink to a
9338         data source, set vfm_sink to NULL, because it doesn't exist any
9339         more.
9340
9341 Thu Jul 17 21:41:44 1997  Ben Pfaff  <blp@gnu.org>
9342
9343         * glob.c: [__BORLANDC__] Include math.h.  Define _matherr() and
9344         _matherrl() to ignore all math errors.
9345
9346         * sfm-read.c: (read_value_labels) When reading the labels from
9347         disk, read the little parts separately instead of as a struct;
9348         this avoids alignment problems.
9349
9350         * sfm-write.c: (struct sfm_fhuser_ext) New member `elem_type'.
9351         (sfm_write_dictionary) Sets elem_type and frees it on lossage.
9352         (write_header) Allocates and initializes elem_type.
9353         (sfm_write_case) Uses elem_type to determine how to handle each
9354         flt64 element.
9355         (sfm_close) Frees elem_type.
9356
9357         * sfmP.h: Comment fix.
9358         [__BORLANDC__] Uses #pragma -a to adjust structure member
9359         alignment.
9360         
9361 Thu Jul 17 01:55:12 1997  Ben Pfaff  <blp@gnu.org>
9362
9363         * Makefile.am: (fiasco_SOURCES) Remove display.c.
9364
9365         * common.c: Fix typo.
9366
9367         * dfm.c: (read_record) Remove strncasecmp() emulation and fix the
9368         sense of the condition.
9369
9370         * expr-evl.c: (macro ALLOC_STRING_SPACE) [!PAGED_STACK] Add
9371         line-continuation backslash.
9372
9373         * filename.c: [__WIN32__] Include <windef.h> before <winbase.h>.
9374
9375         * frequencies.q: (custom_grouped, add_percentile) Don't use a
9376         non-constant expression as an argument to sizeof.
9377
9378         * glob.c: [__WIN32__ && __BORLANDC__] When including <conio.h>,
9379         undefine gettext macro because that's a conio function.
9380
9381         * hash.h: (hsh_prime_tab declaration) Remove.
9382
9383         * list.q: (write_fallback_headers) Move `leader' allocation out of
9384         main loop.  Change to local_alloc() allocation.
9385
9386         * output.h: Formatting fixes.  Put __attribute__ in right place on
9387         function prototypes.
9388
9389         * sfm-read.c: (read_machine_flt64_info, read_variables) Change
9390         incorrect `SECOND_LOWEST_VALUE' references to proper
9391         `second_lowest_value'.
9392
9393         * som-frnt.c: (EXTERN macro) Define as `extern' instead of null
9394         value.  This way 2 out of 3 of the som files define the vars
9395         extern, the correct way, that actually works under BC++.
9396         (som_set_float) Don't use nonconstant initializers for a struct.
9397
9398         * som-high.c: Add the standard alloca() header.
9399         (replicate_table) Add prototype.
9400
9401         Merged DISPLAY routine.
9402         * sysfile-info.c: (AS_*) New enum series.
9403         (cmd_sysfile_info) Gutted.  Calls describe_variable() to do the
9404         dirty work.
9405         (cmd_display, display_macros, display_documents,
9406         display_variables) Stolen from defunct display.c.
9407         (describe_variable) New function.
9408
9409         * temporary.c: [0] (display_tree) New debug function.
9410         (copy_variable) Performs shallow copy of value labels instead of
9411         deep copy; i.e., just copys the AVL tree and increments the
9412         reference counts.
9413
9414         * val-labs.c: Comment fixes.
9415         (do_value_labels) Optionally skip leading forward slash.
9416         (get_label) Creates only a single value label instead of many
9417         copies of one, and sets the reference count.
9418
9419         * display.c: Removed.
9420
9421         * dump-sysfile.c: New file, not yet complete.
9422
9423 Fri Jul 11 23:02:18 1997  Ben Pfaff  <blp@gnu.org>
9424
9425         For lots of source files I added more verbose_msg's.  These aren't
9426         listed below as they have tested as being benign.  In some cases
9427         these replaced debug_printf() calls.
9428
9429         * output.c: (outp_read_devices) Message fix.
9430
9431         * postscript.c: (output_encodings) Message fix.  Reports errors on
9432         fclose().
9433         (postopen) Message fix.
9434         
9435 Fri Jul 11 14:09:40 1997  Ben Pfaff  <blp@gnu.org>
9436
9437         * dfm.c: (dfm_close) Don't call fclose() for a NULL FILE.
9438
9439         * filename.c: (close_file_ext) Set f->file to NULL *after* closing
9440         it.
9441
9442         * main.c: Remove <malloc.h> #include.
9443
9444         * mis-val.c: (parse_numeric) Set .f member for each missing[]
9445         instead of trying to just set the missing[] itself, which is a
9446         gcc-specific idiom.
9447
9448         * sfm-read.c: (read_variables) Same.
9449
9450         * str.h: Add memmem() prototype.
9451
9452         * val-labs.c, var-labs.c: Replace <malloc.h> with <stdlib.h>.
9453
9454 Thu Jul 10 22:13:53 1997  Ben Pfaff  <blp@gnu.org>
9455
9456         * Makefile.am: (q2c) Don't include any libraries in the link.
9457
9458         * dfm.c: (force_line_buffer_extension) New macro.
9459         (count_tabs) New function.
9460         (tabs_To_spaces) New function.
9461         (read_record) Calls tabs_to_spaces() on the line being processed.
9462
9463         * q2c.c: Disabled i18n for this proglet so that libintl.a doesn't
9464         have to be compiled twice (once for CC, once for LOCAL_CC).
9465  
9466 Sun Jul  6 19:14:33 1997  Ben Pfaff  <blp@gnu.org>
9467
9468         * Makefile.am: (INCLUDES) Add intl directory; fix directories.
9469         (LDADD) Add @INTLLIBS@.
9470         (q2c) Add LIBS, @INTLLIBS@ to link step.
9471
9472         * inpt-pgm.c: Turn off debugging.
9473
9474         * postscript.c: (postopen) Format fix.  local_free() blocks
9475         returned by local_alloc(); don't free() them.
9476
9477 Sat Jul  5 23:44:51 1997  Ben Pfaff  <blp@gnu.org>
9478
9479         * data-in.c: (parse_string_as_format) Comment fix.  Fix check for
9480         string length.
9481
9482         * data-list.c: (read_from_data_list_fixed) Pass proper value for
9483         LEN arg, not simply the full string length.
9484
9485         * sort.c: (allocate_file_handles) Check SPSS compatible temp file
9486         directories before generic temp file directories.
9487
9488         * vfm.c: Disable debugging.
9489
9490 Fri Jul  4 13:26:41 1997  Ben Pfaff  <blp@gnu.org>
9491
9492         * get.c: Comment fix.
9493         (cmd_save_internal) Always passes GTSV_OPT_SAVE option.
9494
9495 Wed Jun 25 22:52:28 1997  Ben Pfaff  <blp@gnu.org>
9496
9497         * expr-prs.c: (debug_print_postfix) Conditionally included on
9498         GLOBAL_DEBUGGING.  Removed out_header() reference.
9499
9500         * exprP.h: Removed #undef GLOBAL_DEBUGGING.
9501
9502 Sun Jun 22 22:00:28 1997  Ben Pfaff  <blp@gnu.org>
9503
9504         * ascii.c: Removed obsolete ascii_close_page() prototype.
9505
9506         * command.c: (output_line) Comment fix.
9507
9508         * data-in.c: Formatting fix.
9509         (parse_string_as_format) Now the `fc' argument is used only for
9510         the purpose of error messages; it is not an index into the string
9511         passed.  All references changed.
9512
9513         * data-list.c: Comment fix.
9514         (cut_field) Comment fix.  Now returns the column number of the
9515         position of the field cut out on success.
9516         (parse_field) Added `column' argument.  Puts the column numbers in
9517         the error message.
9518         (read_from_data_list_free, read_from_data_list_list) Record the
9519         column number returned by cut_field(), pass it to parse_field().
9520
9521         * dfm.c: Comment fix.
9522
9523         * do-ifP.h: Comment fix.
9524
9525         * expr-prs.c: (SYSMIS_func) Implemented string-type arguments for
9526         the SYSMIS function.
9527
9528         * expr.h, exprP.h: Comment fix.
9529
9530         * glob.c: (init_glob) Only calls setlocale() and family if
9531         ENABLE_NLS set.
9532
9533         * hash.h: Comment fix.
9534
9535         * include.c: Comment fix.
9536
9537         * output.c: Comment fix.
9538
9539         * postscript.c: (ps_line_intersection) Simplified assertion.
9540
9541         * repeat.c: Comment fix.
9542
9543         * vars-atr.c: Comment fix.
9544
9545         * vars-prs.c: Comment fix.
9546
9547         * vfm.c: (vector_initialization) [DEBUGGING] Fixed undefined
9548         behavior with usage of postincrement.
9549         (memory_stream_read) Discards cases as it goes. 
9550
9551 Sun Jun 15 16:45:17 1997  Ben Pfaff  <blp@gnu.org>
9552
9553         * Makefile.am: Cleans q2c, not just distcleans it.  Distcleans
9554         foo.
9555
9556         * Most source files: Includes debug-print.h, related comment
9557         fixes.
9558
9559         * cases.c: (alloc_val) Removed complex allocation code.  Merely
9560         increments default_dict.nval and returns the former value.
9561         (envector, devector) Removed references to lv member of struct
9562         variable.
9563
9564         * common.h: (macro VME) Replaced complex definition with simple
9565         one.
9566
9567         * data-list.c: (cmd_data_list) Sets vfm_source instead of
9568         read_active_file and cancel_input_pgm.
9569         (read_from_data_list, cancel_data_list) Removed.
9570         (data_list_source_read, data_list_source_destroy_source) New
9571         functions.
9572         (glob var data_list_source) New var.
9573
9574         * dfm.c: (open_file_r, open_file_w) Simplified debug output.
9575         (cmd_begin_data) Improved criteria for an input program accessing
9576         the inline file.  Still not perfect.
9577
9578         * do-if.c: (do_if_trns_proc) Simplified debug output.
9579
9580         * expr-prs.c: Comment fixes.
9581         [DEBUGGING] (debug_print_postfix) Simplified debug output.
9582
9583         * file-handle.q: (fh_close_handle) Simplified debug output.
9584
9585         * file-type.c: Comment fixes.
9586         (cmd_file_type) Sets vfm_source instead of read_active_file and
9587         cancel_input_pgm.
9588         (cmd_end_file_type) On failure, discards variables in place of
9589         just canceling the input program.
9590         (read_from_file_type) Renamed file_type_source_read.
9591         (cancel_file_type) Renamed file_type_source_destroy_source.
9592         (glob var file_type_source) New var.
9593
9594         * get.c: (GTSV_* enum series) New enums GTSV_OPT_SAVE, GTSV_NONE.
9595         (cmd_get) Initializes options to GTSV_NONE before passing to
9596         trim_dictionary().  Removed `lv' reference.  Sets vfm_source
9597         instead of read_active_file and cancel_input_pgm.
9598         (cmd_save_internal) Initializes options before passing to
9599         trim_dictionary().  Local var `nval' removed.
9600         (dict_delete_run) Comment fixes.
9601         (trim_dictionary) Comment fixes.  Disallows scratch variables if
9602         GTSV_OPT_SAVE set in options.
9603         (read_from_get) Renamed get_source_read.
9604         (cancel_get) Renamed get_source_destroy_source.
9605         (glob var get_source) New var.
9606
9607         * inpt-pgm.c: (cmd_input_program) Sets vfm_source instead of
9608         read_active_file and cancel_input_pgm.
9609         (read_from_input_program) Renamed input_program_source_read.
9610         Simplified debug output.
9611         (cancel_input_program) Renamed
9612         input_program_source_destroy_source.
9613         (glob var input_program_source) New var.
9614
9615         * loop.c: (loop_1_trns_proc) Simplified debug output.
9616
9617         * main.c: (dump_token) Made eof output more explicit.
9618
9619         * sfm-read.c: (read_variables, dump_dictionary) Removed `lv'
9620         references.
9621
9622         * sort.c: (cmd_sort_cases) Disallows scratch variables.  Removed
9623         code for always-memory or always-disk cases.  malloc's case-list
9624         based on vfm_source_info.ncases.  Explicit support for
9625         memory_stream via memory_source_cases.
9626         (do_external_sort) Sets vfm_source instead of read_active_file and
9627         cancel_input_pgm.
9628         (allocate_file_handles) The temporary directory permissions are
9629         set to 0700 instead of 0777.
9630         (allocate_cases) Formatting fixes.  Simplified debug output.
9631         (output_record) Compacts the case if necessary before writing it
9632         out.
9633         (close_handle, open_handle_w) Simplified debug output.
9634         (write_initial_runs) Destroys vfm_sink, then sets it to
9635         sort_stream.  Writes records to memory based on
9636         vfm_sink_info.case_size.
9637         (write_to_sort_cases) Renamed sort_stream_write().
9638         (merge) Simplified error handling.  Simplified debug output.
9639         Formatting fixes.
9640         (read_from_external_sort) Renamed sort_stream_read().
9641         Reads records based on vfm_source_info.case_size.
9642         (sort_stream_write) Writes records to memory based on
9643         vfm_sink_info.case_size.
9644         (sort_stream_mode) New function.
9645         (glob var sort_stream) New variable.
9646
9647         * temporary.c: (cmd_temporary) Simplified debug output.
9648         (copy_variable) Removed references to `lv'.
9649
9650         * title.c: (get_title) Simplified debug output.
9651
9652         * var.h: Comment fixes.
9653         (struct get_proc) Removed member `lv'.
9654         (struct variable) Removed member `lv'.  Comment fixes.
9655         (glob vars read_active_file, write_active_file, cancel_input_pgm)
9656         Removed.
9657         (struct case_stream) New.
9658
9659         * vars-atr.c: (discard_variables) Changed cancel_input_pgm,
9660         read_active_file references to use vfm_source.
9661         (init_variable, replace_variable) Removed references to `lv'.
9662
9663         * vfm.c: Comment fixes.
9664         (glob var vfm_source, vfm_sink, vfm_source_info, vfm_sink_info)
9665         New variables.
9666         (static var queue, qh, qt, n_lag) Removed.  All references
9667         removed.
9668         (glob var compaction_necessary, compaction_nval, compaction_case,
9669         paging) New variables.
9670         (record_case) Removed.
9671         (procedure) Comment fixes.  Calls vfm_source->read() instead of
9672         read_active_file().
9673         (lag) Removed.
9674         (prepare_for_writing, arrange_compaction, make_temp_case,
9675         vector_initialization, setup_filter) New function.
9676         (open_active_file) Most of the code moved into the abovementioned
9677         new functions.  Now sets temp_dict to &default_dict if there is no
9678         temporary dictionary, for convenience.  New debug output.
9679         (close_active_file) Deals with changing the sink to the source.
9680         Calls finish_compaction().  Frees compaction_case.  Mostly
9681         rewritten.
9682         (glob vars disk_source_file, disk_sink_file) New vars.
9683         (destroy_active_file, read_from_memory) Removed.
9684         (disk_stream_init, disk_stream_read, disk_stream_write,
9685         disk_stream_mode, disk_stream_destroy_source,
9686         disk_stream_destroy_sink) New functions.
9687         (glob var vfm_disk_stream) New var.
9688         (glob vars memory_source_cases, memory_sink_cases,
9689         memory_sink_iter, memory_sink_max_cases) New vars.
9690         (memory_stream_init, memory_stream_read, memory_stream_write,
9691         memory_stream_mode, memory_stream_destroy_source,
9692         memory_stream_destroy_sink) New functions.
9693         (glob var vfm_memory_stream) New var.
9694         (write_case) Local var `i' renamed `cur_trns'; local var `retval'
9695         named `more_cases'.  Simplified debug output.  Otherwise mostly
9696         rewritten.
9697         (record_case) Moved into the stream drivers.  Removed.
9698         (transform) Removed (was dead code).
9699         (SPLIT_FILE_procfunc) s/vfm_replacement/vfm_sink_info/.  In the
9700         common case that the splits don't change, we don't need to copy
9701         the case into prev_case again--pointless.
9702         (compact_case) New function.
9703         (finish_compaction) New function.
9704
9705         * vfmP.h: Comment fixes.
9706         (DEV_* enum series) Removed. 
9707         (struct storage) Renamed `stream_info'.  Removed variant record.
9708         Removed `device' member.
9709
9710         * debug-print.h: New file.
9711         
9712 Sun Jun  8 01:12:38 1997  Ben Pfaff  <blp@gnu.org>
9713
9714         * autorecode.c: Turned off debugging.
9715
9716         * data-list.c: (destroy_dls) Closes the associated file handle.
9717
9718         * descript.q: (custom_variables) Added PV_NO_SCRATCH to
9719         parse_variables() options.
9720
9721         * dfm.c: (open_file_r) Removed gratuituous argument to msg() call.
9722
9723         * display.c: (display_variables) Really fixed null cell bug.
9724
9725         * file-handle.q: (fh_close_handle) Changed debugging message.
9726
9727         * frequencies.q: (custom_variables) Added PV_NO_SCRATCH to
9728         parse_variables() options.
9729
9730         * list.q: Added PV_NO_SCRATCH in q2c varlist options.
9731         (cmd_list) Fails if no variables specified.
9732         (determine_layout) Writes blank lines manually.
9733
9734         * loop.c: (loop_1_trns_proc) Made debugging code only print
9735         messages if debugging.
9736
9737         * q2c.c: (dump_subcommand) Appends sbc->message to SBC_VARLIST
9738         parse_variables() arguments.
9739         (main) Parses optional parenthesized options to varlist
9740         subcommands into sbc->message.
9741
9742         * sfm-read.c: Format fix.
9743
9744         * var.h: (FV_*) New enum series.
9745         (PV_*) New enum PV_NO_SCRATCH.
9746
9747         * vars-prs.c: (find_var) Removed.
9748         (fill_all_vars) Takes FV_* enum instead of boolean third
9749         argument.  Rewritten to deal with scratch as well as system
9750         variables.
9751         (parse_variables) Error message on scratch variable if
9752         PV_NO_SCRATCH set.
9753
9754         * vfm.c: (static var virt_begin_func) New var.
9755         (procedure) Sets up virt_begin_func.
9756         (SPLIT_FILE_procfunc) For the first case, calls virt_begin_func()
9757         after dump_splits().  For succeeding groups changes, calls
9758         virt_begin_func() instead of begin_func().      
9759
9760 Fri Jun  6 22:42:23 1997  Ben Pfaff  <blp@gnu.org>
9761
9762         * count.c, data-out.c, file-handle.q, list.q, loop.c: Turned off
9763         debugging.
9764
9765         * dfm.c: Added some debugging messages, disabled by default.
9766         (open_file_r) Fixed error message.
9767         (read_record) On eof on inline_file, instead of calling
9768         fh_close_handle(), simply jump to eof label like a normal file.
9769         Message fixes.
9770
9771         * display.c: Thin lines between rows for certain kinds of
9772         listing.  Fixed `null cell' bug.
9773
9774         * error.c: (failure) Flush stdout, stderr before failing.
9775
9776         * file-handle.q: (fh_close_handle) Added debugging message.
9777
9778         * frequencies.q: (dump_full) Bottom line extends across entire
9779         table width.  Changed title formatting.
9780         (dump_condensed) Changed title formatting.
9781         (dump_statistics) Fixed title formatting.
9782
9783         * glob.c: (init_glob) Moved initialization of cur_proc out of #if.
9784         Sets default value of set_format.
9785
9786         * list.q: (cmd_list) Calls blank_line() before determine_layout().
9787         Passes write_all_headers() to procedure() as pre-group func.
9788         (write_all_headers) New function.
9789         (determine_layout) Removed calls to write_header().
9790         Calls blank_line() before and after write_fallback_headers().
9791
9792         * recode.c: (recode_trns_free) Only attempts to free head->map if
9793         non-NULL.
9794
9795         * sfm-read.c: (read_variables) Allows `#' at beginning of system
9796         file variable names but gives a warning.  Sets `left' based on
9797         first character being/not being `#'.  On lossage frees dict->var.
9798
9799         * som-high.c: (som_draw_title) Simplified title formatting.
9800
9801         * vfm.c: (dump_splits) Fixed and changed splits formatting.
9802
9803 Thu Jun  5 22:51:15 1997  Ben Pfaff  <blp@gnu.org>
9804
9805         * autorecode.c: (cmd_autorecode) Sets h_trans to NULL at
9806         beginning.  Frees v_src, v_dest on successful exit.  Frees
9807         h_trans[*], h_trans on lossage.
9808         (recode) Frees h_trans[*], h_trans.
9809
9810         * dfm.c: (dfm_close) Formatting change.
9811         (open_inline_file) Now passed a dfm_fhuser_ext to initialize; no
9812         longer allocates its own in inline_file.
9813         (open_file_r) Passes the local dfm_fhuser_ext to
9814         open_inline_file().
9815         (open_file_w) Message fix. 
9816         (read_record) Buffer reallocation strategy changed.  Frees
9817         ext->line even in inline_file to prevent leaks.
9818         (dfm_put_record) Fixed bug where `ext' was cached before the file
9819         was opened and thus it would be NULL when the file really was
9820         open.
9821         (cmd_begin_data) Sets up inline_file basics itself, then calls
9822         open_inline_file() for the dfm_fhuser_ext.  Formatting fix.
9823
9824         * list.q: (write_line) Formatting fix.
9825         (clean_up) Minor strategy change.  Sets proportional font after
9826         finishing cleanup.
9827         (determine_layout) Sets fixed font before writing regular headers,
9828         or after writing fallback headers.
9829
9830         * modify-vars.c: (cmd_modify_vars) Frees variable lists for DROP
9831         and KEEP vars after using them.
9832
9833         * postscript.c: (ps_init_driver) Frees x->family.
9834         (postopen) When loading fonts, free the temporary font name buffer
9835         after using it.
9836         (ps_text_set_font_by_position) Free temporary font name buffer
9837         after using it.
9838         (text) Fixed code that calculated `lig' so that `lig' always gets
9839         initialized.  Formatting fix.
9840
9841         * som-low.c: (get_cell_size, som_get_table_size) `prop_height' ->
9842         `font_height'.
9843         [GLOBAL_DEBUGGIGN] (check_table) Use arena_alloc() to allocate
9844         cells, not xmalloc(), so that the cells will get destroyed
9845         automatically.
9846
9847         * sysfile-info.c: (cmd_sysfile_info) Frees the dictionary after
9848         using it.
9849
9850 Tue Jun  3 23:33:22 1997  Ben Pfaff  <blp@gnu.org>
9851
9852         * ascii.c: (ascii_text_draw) Always sets metrics for strings that
9853         are drawn.
9854
9855         * dfm.c: Comment fix.
9856
9857         * list.q: Comment fixes.  Include somP.h.  Removed static vars
9858         table, n_columns, n_rows, part.  New struct list_ext.  New static
9859         var line_buf.
9860         (n_lines_remaining, n_chars_width, write_line) New functions.
9861         (cmd_list, list_cases) Rewritten.
9862         (begin_row, end_row, flush_table) Removed.
9863         (write_header, clean_up, write_varname, write_fallback_headers,
9864         determine_layout) New functions.
9865
9866         * output.c: (outp_iterate_enabled_drivers) Minor reformat.
9867
9868         * output.h: Comment fix.
9869
9870         * postscript.c: Comment fix.
9871         (struct ps_driver_ext) Removed prop_size, fixed_size members;
9872         added font_size.  All references changed.
9873         (ps_init_driver) Initializes font_size.  Simplified space checking
9874         code.
9875         (static var option_tab[]) Removed prop-size, fixed-size; added
9876         font-size.
9877         (ps_option) Handles font_size.
9878
9879         * som-high.c: Moved prototypes into somP.h.
9880         (som_init_driver) New function.
9881         (som_submit_table) Moved some code into new function
9882         som_init_driver().
9883         (build_target) Moved some code into new function
9884         som_internal_eject_page().
9885         (som_eject_page) Uses som_internal_eject_page().
9886         (som_internal_eject_page) New function.
9887
9888         * som-low.c: Moved prototypes into somP.h.
9889
9890         * som.h: Formatting fixes.
9891
9892         * somP.h: (struct som_driver_ext) Removed em_width;
9893         added prop_em_width, fixed_width.
9894
9895 Mon Jun  2 14:25:25 1997  Ben Pfaff  <blp@gnu.org>
9896
9897         * Makefile.am: Added `localedir' definition.  Added
9898         -DLOCALEDIR="..." to DEFS.  Added -I. to INCLUDES.
9899
9900         * ascii.c: (macro draw_line) Fixed capitalization.
9901
9902         * ascii.c, autorecode.c, cases.c, cmdline.c, command.c, common.c,
9903         compute.c, count.c, data-in.c, data-list.c, data-out.c,
9904         descript.q, dfm.c, display.c, do-if.c, error.c, expr-evl.c,
9905         expr-opt.c, expr-prs.c, file-handle.q, file-type.c, filename.c,
9906         formats.c, frequencies.q, get.c, getline.c, glob.c, groff-font.c,
9907         hash.c, heap.c, include.c, inpt-pgm.c, lexer.c, list.q, loop.c,
9908         main.c, mis-val.c, misc.c, modify-vars.c, numeric.c, output.c,
9909         postscript.c, print.c, q2c.c, recode.c, rename-vars.c, repeat.c,
9910         sample.c, sel-if.c, sfm-read.c, sfm-write.c, sfmP.h, som-frnt.c,
9911         som-high.c, som-low.c, sort.c, split-file.c, sysfile-info.c,
9912         temporary.c, title.c, tokens.h, val-labs.c, var-labs.c,
9913         vars-atr.c, vars-prs.c, vector.c, vfm.c, weight.c: Marked strings
9914         for internationlization.
9915
9916         * glob.c: [HAVE_LOCALE_H] Includes locale.h.
9917
9918 Sun Jun  1 23:31:18 1997  Ben Pfaff  <blp@gnu.org>
9919
9920         * do-if.c, sort.c, val-labs.c: Comment fixes.
9921
9922         * glob.c: (init_glob) Uncommented, updated i18n support.
9923         
9924         * arena.c, ascii.c, data-in.c, descript.q, error.c, expr-evl.c,
9925         expr-opt.c, expr-prs.c, filename.c, frequencies.q, groff-font.c,
9926         output.c, postscript.c, sfm-read.c, som-high.c, vars-prs.c: Made
9927         the declarations of macros taking arguments a lot nicer.
9928
9929 Sun Jun  1 17:22:04 1997  Ben Pfaff  <blp@gnu.org>
9930
9931         * error.h: Removed CE, CW aliases for SE, SW.
9932
9933         * q2c.c: Removed explicit streq() definition since it's duplicated
9934         in str.h.
9935         
9936         * approx.h, error.h, font.h, hash.h, misc.h, output.h, somP.h,
9937         stats.h, str.h, tokens.h: Made the declarations of macros taking
9938         arguments a lot nicer-looking of <pinard@iro.umontreal.ca>.
9939         Comment fixes.
9940
9941 Sun Jun  1 12:02:06 1997  Ben Pfaff  <blp@gnu.org>
9942
9943         * cmdline.c: Comment fixes.
9944         (pick_compat) Changed return type to int.  Now, instead of setting
9945         glob var `compat' to the emulation, returns the emulation.  All
9946         references changed.
9947         (parse_command_line) Added terminating null to end of
9948         `long_options' array definition.
9949         (pre_syntax_message) Fixes.
9950         (usage) Shows the default emulation in the syntax message by
9951         calling pick_compat().
9952
9953         * getline.c: (getl_add_include_dir) Separates paths with
9954         PATH_DELIMITER, not DIR_SEPARATOR.
9955
9956         * glob.c: (init_glob) Fixed references to DEFAULT_VER_PCP40,
9957         DEFAULT_VER_WIN61, DEFAULT_VER_X40.
9958
9959         * output.c: (outp_configure_macro) Make earlier definitions for a
9960         particular key override later ones for the same key.
9961         
9962 Fri May 30 19:40:49 1997  Ben Pfaff  <blp@gnu.org>
9963
9964         * ascii.c: Comment fixes.
9965
9966         * output.c: (outp_get_paper_size)
9967         s/STAT_OUTPUT_INIT_FILE/STAT_OUTPUT_PAPERSIZE_FILE/.
9968         
9969 Sun May 25 22:34:07 1997  Ben Pfaff  <blp@gnu.org>
9970
9971         * ascii.c, postscript.c, sfm-read.c, sfm-write.c, sort.c: Include
9972         <errno.h>.  GNU libc 2 enforces this!
9973
9974         * command.c: (parse_cmd) Fixed problem with `else' clause being
9975         paired with wrong `if'.  Comment fix.
9976
9977 Fri May  9 16:53:52 1997  Ben Pfaff  <blp@gnu.org>
9978
9979         * getline.c: [!HAVE_LIBREADLINE] (read_console) Changed
9980         blp_getline() to getline().
9981
9982         * output.c: (outp_eval_dimension) Changed the fix from last time;
9983         there was no variable `a'.
9984
9985         * q2c.c: (get_line) Fixed boundary condition overrun bug.
9986
9987 Mon May  5 21:58:22 1997  Ben Pfaff  <blp@gnu.org>
9988
9989         * output.c: (outp_evaluate_dimension) Fixed handling of negative
9990         numbers having fractional parts.  Added case of a fraction without
9991         a whole-number part.
9992
9993 Fri May  2 22:08:05 1997  Ben Pfaff  <blp@gnu.org>
9994
9995         * ascii.c: (ascii_text_get_font_position) Removed.
9996
9997         * expr.h, exprP.h: Disabled debugging.
9998
9999         * groff-font.c, postscript.c: Changed `groff' to `Groff' in
10000         several places.
10001
10002         * output.h: (struct outp_class_struct) Removed
10003         text_get_font_position method.  All references deleted.
10004
10005         * postscript.c: Big change here.  Fontmaps were completely
10006         eliminated because of a change in philosophy.  Comment fixes.
10007         (struct ps_fontmap, ps2dit_map, font_family, dit2family_map)
10008         Removed.
10009         (struct ps_driver_ext) `position', `fontmap', `prop_name',
10010         `fixed_name' members removed.  New members `prop_family',
10011         `fixed_family'.  `family' member changed to type char *.
10012         (static var ps_fontmaps) Removed.
10013         () Removed.
10014         (ps_init_driver) Removed obsolete references, updated.
10015         Initializes `translate_x', `translate_y', `scale'.  Doesn't read
10016         fontmap, of course.  Refers to font names through internal_name
10017         rather than subversive means.  Frees proper items.
10018         (static var option_tab[]) Removed `fontmap-file' option; renamed
10019         `fixed-font', `prop-font'.
10020         (ps_option) Corresponds to option_tab[].
10021         (read_fontmap, release_fontmap, ps_to_dit, compare_ps2dit,
10022         hash_ps2dit, compare_dit2family, hash_dit2family, compare_family,
10023         hash_family) Removed.
10024         (postopen) Generates font names from family names.  Gets
10025         PostScript font name properly.  New prologue file comment `!!!'
10026         style.
10027         (ps_open_page) Adds translate_x, translate_y to BP prologue
10028         function; gives SF argument floating-point format.
10029         (ps_text_set_font_by_name) Doesn't try to map PostScript->Groff
10030         font name.  Doesn't change font family.
10031         (ps_text_set_font_by_position) Generates Groff font name from font
10032         family name instead of through table lookup.
10033         (ps_text_set_font_by_family) Renamed `ps_text_set_font_family',
10034         all references changed.  Reduced to simple string assignment.
10035         (ps_get_font_name) Removed.
10036         (ps_get_font_family) Reduced to string return.
10037         (text) Doesn't save `position' since it no longer exists.  Ugly
10038         kluge to save font family--fix soon?
10039         (load_font) Removed PostScript name argument.
10040         
10041 Thu May  1 14:58:59 1997  Ben Pfaff  <blp@gnu.org>
10042
10043         * postscript.c: Comment fix.
10044         (ps_open_page) Puts scale factor in PostScript output.
10045         
10046 Sat Apr 26 11:49:32 1997  Ben Pfaff  <blp@gnu.org>
10047
10048         * Makefile.am: Distcleans q2c.
10049
10050 Wed Apr 23 21:33:48 1997  Ben Pfaff  <blp@gnu.org>
10051
10052         * ascii.c: (delineate) Sets text size even if width is zero.
10053
10054         * command.c: Comment fix.
10055         (static var cmd_table[]) Re-enabled EVALUATE command.
10056         (parse_cmd) Lotsa comment fixes.  Fixed infinite loop in parsing
10057         of comments in script files.  Now more liberal on criteria for
10058         performing a state transition--if *anything* happened correctly,
10059         not just if *everything* happened correctly.
10060
10061         * data-out.c: (convert_F) Comment fix.  Why in the fsck does
10062         Checker segfault on formatting large numbers and why in the fsck
10063         hadn't I noticed this before?
10064
10065         * expr.h, exprP.h: No longer turn off GLOBAL_DEBUGGING.
10066
10067         * list.q: (cmd_list) Commented out the actual output routine
10068         because of various problems.  Probably will abandon the idea of
10069         using the general `crushed tables' for the LIST procedure.
10070
10071         * temporary.c: (restore_dictionary) Sets var_by_name to NULL after
10072         clearing it.  Allocates a new var_by_name dictionary before trying
10073         to add members to it.
10074
10075         * vars-atr.c: [DEBUGGING] (dump_one_var_node) Removed argument
10076         `sib'.  Changed type of `node' argument.
10077         [DEBUGGING] (dump_var_tree) Replaced avlwalk() with
10078         avl_walk_inorder().
10079         (clear_variable) Only dumps the var tree if var_by_name non-NULL.
10080         [DEBUGGING] Only deletes the variable from var_by_name if that var
10081         non-NULL.
10082
10083 Fri Apr 18 16:48:41 1997  Ben Pfaff  <blp@gnu.org>
10084
10085         * Makefile.am: Added include files to SOURCES.  Added
10086         frequencies.q to EXTRA_DIST.  Removed include/ from INCLUDES.  Now
10087         includes rules for q2c.  Added `boast' target.
10088
10089 Fri Apr 18 15:42:22 1997  Ben Pfaff  <blp@gnu.org>
10090
10091         * Makefile.am: Maintainer-clean Makefile.in.
10092         
10093         * Makefile.am: Fixed redundant EXTRA_DIST line.
10094
10095         * ascii.c: Comment fixes.
10096         (ascii_line_vert) Fixed overly aggressive range check.
10097
10098         * display.c: Removed dead code.
10099
10100         * list.q: Turn debugging on.
10101         (flush_table) New debug code.
10102
10103         * sfm-read.c: (read_value_labels) malloc's the structure before
10104         trying to assign to its members.
10105
10106         * sfm-write.c: Comment fix.
10107
10108         * som-high.c: (som_submit_table) Sets som.t and som.d on each call
10109         to output_table().
10110         (output_table) No arguments anymore--gets them through `som'
10111         global.  New debug code.  In crushed tables, now sets `htv' as
10112         well as `hv' to avoid bad confusion later.
10113         (dump_crush_page) New debug code.
10114
10115         * som-low.c: (som_dump_crush_page) New debug code.
10116
10117 Thu Mar 27 01:11:29 1997  Ben Pfaff  <blp@gnu.org>
10118
10119         All source files: Broke long lines into multiple lines.
10120         
10121         * ascii.c: (ascii_close_page) Uses host_system var in place of
10122         HOST_SYSTEM constant.
10123
10124         * cmdline.c: (var syntax_message[]) Broke into
10125         pre_syntax_message[] and post_syntax_message[].
10126         (usage) Outputs both parts, separated by driver list.
10127
10128         * error.h: Fixed broken formatting.
10129
10130         * expr-opt.c: (str_search, str_rsearch) New functions.
10131
10132         * misc.c: (blp_getdelim) Removed.  All references changed to
10133         `getdelim'.
10134         (str_search, str_rsearch) Removed.
10135         (memrmem) New function.
10136
10137         * misc.h: (blp_getline) Removed.  All reference changed to
10138         `getline'.
10139
10140         * stat.h: New file.
10141
10142         * filename.c: Includes "stat.h", not <sys/stat.h>.
10143         (blp_getenv) Uses host_system var instead of HOST_SYSTEM constant.
10144
10145         * output.c: (outp_list_classes) Changed output formatting.
10146
10147         * sfm-write.c: (write_header) Uses host_system var instead of
10148         HOST_SYSTEM constant.
10149         (write_rec_7_34) Extracts version numbers from the version string.
10150         Untested.
10151
10152         * sort.c: Includes "stat.h", not <sys/stat.h>.
10153
10154         * str.c: (strcasecmp) Removed.
10155
10156         * title.c: (cmd_document) Uses host_system var instead of
10157         HOST_SYSTEM constant.
10158
10159         * version.c: Generated on-the-fly by the Makefile instead of being
10160         static.
10161
10162         * str.h: Comment fixes.  Doesn't substitute for missing memmove or
10163         memcpy.
10164         [!HAVE_STRNCASECMP] Declares strncasecmp().
10165
10166         * version.h: Removed stray character.  Comment fixes.
10167         (vars host_system, build_system) New vars.
10168
10169 Mon Mar 24 21:47:31 1997  Ben Pfaff  <blp@gnu.org>
10170
10171         * Most source files: Changed formatting of copyright notice; fixed
10172         FSF address; reformatted to better conform to GNU standards;
10173         comment fixes.  Added markups to prevent GNU indent from messing
10174         up my beautiful formatting :-).
10175         
10176         * q2c.c: (get_line) Ignores lines that begin with `/* *INDENT' so
10177         that GNU indent markups can be passed through without problems.
10178
10179 Wed Feb 19 21:30:31 1997  Ben Pfaff  <blp@gnu.org>
10180
10181         * get.c: Turned off debugging.
10182
10183         * glob.c: (init_glob) Turned on save-file compression by default.
10184
10185         * sfm-write.c: (sfm_write_case) Fixed bug which resulted in less
10186         compression than was possible in save files.
10187
10188 Sun Feb 16 20:57:20 1997  Ben Pfaff  <blp@gnu.org>
10189
10190         * data-out.c: (convert_F) Comment fixes.  Debug message fixes.
10191
10192         * frequencies.q: Removed Fiasco extensions.  Updated calculation
10193         algorithms.  Polished output format. 
10194         (struct frq_info_struct) Removed members `max_degree', `min_n',
10195         all references removed.
10196         (macro frq_extensions) Removed.
10197         (static vars min_n, max_degree) Removed, all references removed.
10198         (internal_cmd_frequencies) Doesn't handle extensions.  Doesn't
10199         calculate `min_n', `max_degree'.
10200         (postcalc) Passes new arg to dump_statistics().
10201         (dump_full) Honor NOLABEL option.  Buggy?  Adds variable name
10202         title.
10203         (dump_condensed) Adds variable name title.
10204         (sum_freqs) Removed.
10205         (calc_stats) Updated calculation algorithm.
10206         (dump_statistics) Removed warning for too-few observations.
10207         Changed table formatting.  Adds variable name title if passed new
10208         arg is nonzero.
10209
10210         * output.h: Comment fix.
10211
10212         * recode.c, sample.c, sort.c: Disabled debug code.
10213
10214         * som-frnt.c: (som_set_value, som_set_float, som_set_text)
10215         Improved debug code.
10216
10217         * var.h: (enum series frq_*) Removed Fiasco extensions.
10218
10219 Sat Feb 15 21:26:53 1997  Ben Pfaff  <blp@gnu.org>
10220
10221         * command.c: Added PROCESS IF to command table.
10222
10223         * Lots & lots of places, removed checks for NULLs preceding calls
10224         to free_expression(), which itself checks.
10225
10226         * descript.q: Removed Fiasco extensions.  Removed optimizations
10227         for non-weighted active files.  Implemented some options.
10228         Finished polishing output format.  Comment fixes.  Merged
10229         `descript.g'.
10230         (static vars n_glob_miss_list, n_glob_valid, n_glob_missing,
10231         max_degree, min_n) Removed.
10232         (macro dsc_extensions) Removed.
10233         (struct dsc_info_struct) Removed `min_n' member, all references
10234         fixed.
10235         (internal_cmd_descriptives) Removed calculation of min_n,
10236         max_degree.  Only deals with one `calc' routine instead of two
10237         flavors.
10238         (precalc) Eliminated redundancy.  Updated for changes to
10239         descriptives_proc structure.
10240         (calc) Moved here from `descript.g'.  Rewritten to calculate
10241         statistics via `moments about the mean' rather than by summing,
10242         summing squares, summing cubes, and so on.
10243         (postcalc) Rewritten for new-style statistical calculation.
10244         (display) Removed support for displaying variables across rows.
10245         No longer crushes the descriptives table.  Removed ancient code.
10246         Added display of N, by variable and listwise.
10247
10248         * descript.g: Removed; merged into `descript.q'.
10249
10250         * expr-evl.c: (evaluate_expression) Now returns a double.  For
10251         numeric results, it returns the result as well as storing it in
10252         the passed `value' structure if non-NULL.  For string results it
10253         just returns 0.0 and it must be passed non-NULL.  Many references
10254         to this function were optimized by use of this change, especially
10255         but not exclusively in `compute.c'.
10256
10257         * frequencies.g: Comment fix.
10258
10259         * glob.c: (glob var process_if_expr) New global var.
10260
10261         * postscript.c: (static var option_tab[]) Corrected entry for
10262         `fixed_size'.
10263         (postopen) Sets x->size to x->prop_size.
10264         (ps_text_set_font_by_name) Sets font size as well as typeface for
10265         PROP and FIXED fonts.
10266         
10267         * sel-if.c: (cmd_process_if) New function.
10268
10269         * sfm-write.c: (struct sfm_fhuser_ext) New member `n_cases'.
10270         (sfm_write_dictionary) Sets `n_cases' to 0.
10271         (sfm_write_case) Increments `n_cases'.
10272         (sfm_close) Attempts to seek the system file back to the header
10273         and write the number of cases in its proper slot.
10274
10275         * som-frnt.c: (som_insert_table) Masks off expansion options since
10276         only SOPT_X_NORM seems to work sensibly.
10277
10278         * som-low.c: (get_cell_size) Fixed bug when a table cell was sized
10279         with a `fixed' value of 2.
10280
10281         * sort.c: (cmd_sort_cases) Cancels PROCESS IF.
10282
10283         * sysfile-info.c: (cmd_sysfile_info) Doesn't display more than 10
10284         value labels; uses SOPT_NONE instead of SOPT_X_BOTH.
10285
10286         * var.h: (enum series dsc_*) Removed Fiasco extensions.
10287         (struct descriptives_proc) Removed `miss_noweight'; new members
10288         `X_bar', `M2', `M3', `M4', `min', `max'.
10289
10290         * vars-atr.c: (discard_variables) Cancels PROCESS IF.
10291
10292         * vfm.c: (close_active_file) Cancels PROCESS IF.
10293         (write_case) Doesn't process cases unselected by PROCESS IF.
10294
10295 Fri Feb 14 23:32:58 1997  Ben Pfaff  <blp@gnu.org>
10296
10297         * glob.c: (glob var err) Removed.
10298
10299         * sysfile-info.c: (cmd_sysfile_info) When adjusting table size,
10300         doesn't have to take into account number of value labels since
10301         they're in a subtable anyway.  Also, doesn't display more than 10
10302         value labels since we can't yet break pages in subtables.
10303
10304 Tue Feb  4 15:15:50 1997  Ben Pfaff  <blp@gnu.org>
10305
10306         * som-frnt.c: (som_change_table_size) Simple change for elegance
10307         that shouldn't change behavior.
10308         (som_set_value) Comment fix.
10309
10310         * som-high.c: (som_submit_table) Message fix.
10311
10312 Wed Jan 22 21:54:00 1997  Ben Pfaff  <blp@gnu.org>
10313
10314         * command.c: Added SYSFILE INFO to command table.
10315
10316         * file-handle.q: (fh_handle_filename) New function.
10317
10318         * get.c: (save_trns_proc) Fixed a bug in padding of output data
10319         with spaces.
10320
10321         * main.c: (parse) New return value for command functions, -3.
10322
10323         * misc.h: Comment fix.
10324
10325         * output.h: Comment fixes.
10326         (macro COMPONENTS) Removed.
10327
10328         * postscript.c: (write_text) Modified literal_chars[] so that `('
10329         and ')' are not written to the output in strings as literals.
10330
10331         * sfm-read.c: (sfm_read_dictionary) New argument.
10332         (read_header) New argument.  Sets the information structure's
10333         values from the header information.  
10334         (read_variables) [__CHECKER__] Redefines isalnum()--some sort of
10335         bizarre Checker problem, I guess.
10336         (read_variables) Proper cleanup on lossage.
10337
10338         * sfm.h: (struct sfm_read_info) New struct for use by
10339         sfm_read_dictionary().
10340
10341         * som-frnt.c: (som_create_table) New argument CREATE_FLAGS,
10342         currently used just for tables that can be dynamically resized and
10343         thus have to be allocated with arena_malloc() instead of
10344         arena_alloc().  All references changed.
10345         (som_change_table_size) New function.
10346         (som_insert_table) Bugfix: now inserts `cell', not `c'!
10347
10348         * som-high.c: [GLOBAL_DEBUGGING] (check_table) Moved to som-low.c.
10349         (som_submit_table) [GLOBAL_DEBUGGING] Doesn't call check_table()
10350         any more.
10351
10352         * som-low.c: (draw_cell) Calls draw_table_cell() for SCON_TABLE
10353         cells.
10354         (draw_intersection) Now takes an argument specifying the table in
10355         question.  All references changed.
10356         (draw_table_cell) New function.
10357         (som_get_table_size) [GLOBAL_DEBUGGING] Calls check_table().
10358         (som_get_table_size) Many nice new explanatory comments.
10359         [GLOBAL_DEBUGGING] (check_table) Moved here from som-high.c.
10360
10361         * som.h: New enum series SOM_CREATE_* for use as create flags with
10362         som_create_table().
10363
10364         * str.h: Moved a comment here from TODO.
10365
10366         * sysfile-info.c: New file.  Reference implementation.
10367
10368 Sun Jan 19 14:22:11 1997  Ben Pfaff  <blp@gnu.org>
10369
10370         * command.c: Added RENAME VARIABLES to table of commands.
10371
10372         * data-in.c: (dls_error) Sets `cust_field'.
10373         (parse_N) Message fix.
10374         (parse_day_count) New function.
10375         (to_roman) Never outputs VX as a `short form' of V.
10376         (parse_month) Fixed parsing of Roman numerals.
10377         (parse_trailer) Message fix.
10378         (parse_DATE, parse_ADATE, parse_EDATE, parse_SDATE, parse_JDATE,
10379         parse_QYR, parse_MOYR, parse_WKYR, parse_DTIME) Issue a message if
10380         the date is invalid.
10381         (parse_SDATE) Fixed swapped day, year.
10382         (parse_JDATE) Fixed bug for dates in 1582.
10383         (parse_DTIME) Allows days not between 1 and 31.
10384         (parse_numeric) Makes local copy of f.type for easier usage.
10385         FMT_DOLLAR fixed.
10386
10387         * data-out.c: (convert_F) When outputting as scientific, properly
10388         sets f.type as fp->type.
10389         (insert_commas) Fixed operator precedence problem with setting of
10390         nitems.  Changed strcpy to memcpy (no null terminator). 
10391         (convert_date) Fixed FMT_JDATE: added 1900 to year.
10392         (convert_CCx) Essentially rewritten, but now it works.
10393
10394         * display.c: (cmd_display) Added DISPLAY FILE LABEL (undocumented
10395         feature of Fiasco).
10396         (display_documents) Implemented.
10397
10398         * error.c: (glob var cust_field) New var.
10399         (vmsg) Displays cust_field as part of message classes DE and DW.
10400
10401         * formats.c: (debug_print) Fixed to compile under updated
10402         dictionary format.
10403
10404         * get.c: (cmd_get, cmd_save_internal) Close file handle on
10405         failure.
10406
10407         * misc.c: (parse_format_specifier) Formatting fix.
10408
10409         * modify-vars.c: (struct var_modification) Renamed `n_reorder' as
10410         `n_rename' for clarity.
10411         (cmd_modify_vars) Initializes `forward' and `positional' at
10412         appropriate times.  Frees lists of vars to rename on failure.
10413         Comment fix.  Frees memory on success.  
10414         (rearrange_dict) Simplified `for' loop condition.
10415
10416         * rename-vars.c: New file (reference implementation).
10417         
10418         * set.q: (internal_cmd_set) Fixed `emu' test condition.
10419
10420         * sfm-read.c: (read_header) File label is created only if file
10421         label in file is not blank.
10422         (read_variables) Initializes `dict' local variable.
10423         (read_documents) Proper behavior on lossage.
10424
10425         * sfm-write.c: (write_header) Doesn't blank out the file label
10426         (why was this here to begin with?!)
10427
10428         * temporary.c: (save_dictionary) File label is copied only if
10429         non-NULL.  Doesn't try to xstrdup() dictionary documents.
10430         Adapted so as to not irritate Checker.
10431         (free_dictionary) Only destroys var_by_name if non-NULL.
10432
10433         * title.c: (cmd_file_label) Doesn't skip FILE, LABEL tokens.
10434         (cmd_document) Doesn't skip DOCUMENT token.  Adds some header
10435         lines to the document, indents the document.  Also, it works now.
10436         (add_document_line) New function.
10437
10438         * var.h: (struct dictionary) Reordering.
10439
10440         * vars-prs.c: (parse_variables) On lossage, only local_free()'s
10441         bits if it was allocated to begin with.
10442
10443 Thu Jan 16 13:08:57 1997  Ben Pfaff  <blp@gnu.org>
10444
10445         * command.c: Added MODIFY VARS to list of commands.
10446
10447         * configure.in: Updated custom macros for autoconf 2.12.  Removed
10448         mmap reference; fixed termcap library reference.
10449
10450         * display.c: (display_variables) Fixed a few bugs although it's
10451         still not well written.
10452
10453         * error.c: [!__CHECKER__] (chkr_disp_call_chain) New function.
10454         (induce_segfault) Calls chkr_disp_call_chain() instead of
10455         inducing an actual SIGSEGV.
10456
10457         * expr-opt.c: (evaluate_tree) Swapped order of arguments to
10458         str_search() and str_rsearch().  Fixed tests for matches on
10459         OP_INDEX and OP_RINDEX.
10460
10461         * filename.c: (good_getcwd) Removed as the new libc for Checker
10462         doesn't contain this bug, apparently.
10463
10464         * misc.c: (str_search, str_rsearch) Changed order of arguments for
10465         consistency with GNU memmem.
10466         (blp_getdelim) Changed `len' from `int' to `size_t'.
10467
10468         * modify-vars.c: Reference implementation.
10469
10470         * som-frnt.c: (zero_length) New global var.
10471         (som_create_table) Message fix.
10472
10473         * som.h: Added gcc attributions to som_set_text(),
10474         som_output_text() prototypes.  blank_line() refers to
10475         zero_length[] instead of a literal null string to suppress gcc
10476         warnings.
10477
10478         * sort.c: (do_external_sort) Fixed fencepost error on lossage.
10479         (allocate_cases) Decrements x_max so the last element of x[] can
10480         be used by the algorithm.
10481
10482         * var.h: Changed minor details of `variable' declaration.  
10483         (struct modify_vars_proc) New struct.
10484         (struct variable) Added field p.mfv.
10485
10486         * vars-atr.c: Comment fix.
10487
10488         * vars-prs.c: (fill_all_vars) More optimal implementation.
10489
10490         * vfm.c: (dump_splits) Sets the last byte of temp_buf to a null
10491         character, which it shouldn't have to do but printf() seems to
10492         read the null byte even though I supply a maximum length...
10493
10494 Fri Jan 10 20:22:08 1997  Ben Pfaff  <blp@gnu.org>
10495
10496         * command.c: Removed command alias X for QUIT.
10497         (parse_cmd) Fixed comment parsing.
10498
10499         * dfm.c: (struct dfm_fhuser_ext) Fields `len', `size' are now of
10500         type size_t.
10501         (read_record) Fixed references to len, size.
10502         (dfm_get_record) Restructured.
10503
10504         * file-handle.h: (struct file_handle) Field `lrecl' now of type
10505         size_t.
10506
10507         * file-handle.q: (internal_cmd_file_handle) Checks for nonpositive
10508         record length.
10509
10510         * modify-vars.c: New file.  Not complete.
10511         
10512         * set.q: (set_ccx) Fixed operator precedence problem regarding ^
10513         and ==.
10514
10515         * sfm-read.c: (bswap_flt64, read_header, write_variable) Fixed
10516         problems caused by int/size_t differences.
10517
10518         * sort.c: (output_record, merge_once) Cast `size_t's to `int's in
10519         appropriate spots.
10520
10521         * str.c: (strcasecmp) Fixed bug that cropped up when the strings
10522         being compared were of equal length.
10523
10524 Thu Jan  2 19:08:23 1997  Ben Pfaff  <blp@gnu.org>
10525
10526         * command.c: Added DOCUMENT, DROP DOCUMENTS, FILE LABEL.
10527
10528         * lexer.c: (get_dotted_rest_of_line) New function.
10529
10530         * sel-if.c: (cmd_filter) Cannot choose string or scratch variables
10531         as filters.
10532
10533         * sfm-read.c: (sfm_read_dictionary) Calls read_documents() to read
10534         type 6 records.  Frees the dictionary properly.
10535         (read_header) Initializes the dictionary instead of letting
10536         read_variables() do it.  Sets the dictionary file label from the
10537         system file.
10538         (read_documents) New function.
10539
10540         * sfm-write.c: (sfm_write_dictionary) Calls write_documents() to
10541         write type 6 record if appropriate.
10542         (write_header) Writes file label from dictionary.
10543         (write_documents) New function.
10544
10545         * temporary.c: (save_dictionary, restore_dictionary,
10546         free_dictionary) Properly handle new fields in dictionary struct.
10547
10548         * title.c: (get_title) Returns after failure().
10549         (cmd_file_label, cmd_document, cmd_drop_documents) New functions
10550         for new commands FILE LABEL, DOCUMENT, DROP DOCUMENTS.  Untested.
10551
10552         * var.h: (struct dictionary) New fields `label', `n_documents',
10553         `documents'.
10554
10555 Wed Jan  1 22:08:10 1997  Ben Pfaff  <blp@gnu.org>
10556
10557         * command.c: Added FILTER to list of commands.
10558
10559         * frequencies.g: [WEIGHTING] Removed test for weighting!=-1 since
10560         it's always true.
10561
10562         * get.c: (cmd_save_internal) Removed weighting code since it's now
10563         handled by sfm-write.c.  Properly commented out debug code.
10564
10565         * glob.c: (glob var weighting) Removed.
10566
10567         * sel-if.c: Comment fixes.
10568         (cmd_filter) New function.
10569
10570         * sfm-read.c: (struct sfm_fhuser_ext) New field `weight_index'.
10571         (sfm_read_dictionary) Sets weighting variable direct in the
10572         created dictionary now.  (Apparently we previously didn't support
10573         weighting on GET?)
10574         (read_header) Sets weight_index field in sfm_fhuser_ext from
10575         header read from disk.
10576
10577         * sfm-write.c: (sfm_write_dictionary) Comment fix.
10578         (write_header) Now sets the weighting in the header from the
10579         passed primary dictionary instead of from the sfm_write_info.
10580
10581         * sfm.h: (struct sfm_write_info) Removed field `weight'.
10582
10583         * som-high.c: (dump_crush_table) Fixed a couple of assertions that
10584         broke on boundary conditions.
10585
10586         * var.h: (struct dictionary) New fields `weight_var',
10587         `weight_index', and `filter_var'.
10588         (glob var weighting) Removed.  This is now part of struct
10589         dictionary.  All references changed; the less mechanical changes
10590         are described above.
10591
10592         * vars-atr.c: (find_dict_variable) New function.
10593
10594         * vfm.c: (static var filter_index) New variable.
10595         (open_active_file) Initializes filter_index from default_dict.
10596         (write_case) Calls proc_func() only if the filter variable is
10597         nonzero; this implements FILTER behavior.
10598
10599         * weight.c: (static var weight_varname) Removed.
10600         (cmd_weight) Modified default_dict instead of glob vars.
10601         (update_weighting) Changed the signature to modify a dictionary
10602         instead of glob vars.  Now returns the weighting variable.
10603         (get_weighting_variable) Removed; its function is absorbed by
10604         update_weighting().
10605         (stop_weighting) Operates on a dictionary now.
10606
10607 Wed Jan  1 17:00:59 1997  Ben Pfaff  <blp@gnu.org>
10608
10609         * sort.c: Removed debugging info from messages.
10610         (do_external_sort) Cleans up after itself by deleting the
10611         temporary directory on failure.  (On success it is deleted by the
10612         input program.)
10613         (allocate_cases) Removed debug code.  Added clean up code.
10614         (output_record) Removed debug code.
10615         (merge) Added code to close all the input files that are currently
10616         open.  This is a likely location for bugs, because I'm not sure
10617         about boundary conditions.  Removed an unnecesary heap_delete().
10618         (merge_once) Removed input file "optimization" that in fact
10619         screwed up the rest of the code.  Message and comment fixes.
10620
10621 Sun Dec 29 21:36:48 1996  Ben Pfaff  <blp@gnu.org>
10622
10623         * error.c: [__CHECKER__] (induce_segfault) Flushes output streams.
10624
10625         * heap.c: (heap_delete) New argument.
10626
10627         * sort.c: Finished implementation of external sort.
10628
10629         * vfm.c: (read_from_disk) Returns after a disk error.
10630
10631 Sun Dec 22 23:10:39 1996  Ben Pfaff  <blp@gnu.org>
10632
10633         * sort.c: (static var state) Removed.
10634         (static vars max_handles, tmp_basename, tmp_extname,
10635         huffman_queue) New variables.
10636         (do_external_sort) Moved most code to new functions.
10637         Creates huffman_queue.
10638         (allocate_file_handles, allocate_cases) New functions.
10639         (static vars run_no, run_length, file_index, case_count) New
10640         variables. 
10641         (output_record) Returns success.  Now really writes to the output
10642         file.
10643         (begin_run, end_run) New functions.
10644         (write_initial_runs) Returns success.  Initializes run_no to -1.
10645         Calls begin_run(), end_run() at appropriate times.  Outputs debug
10646         messages.
10647         (write_to_sort_cases) Calls begin_run(), end_run() at appropriate
10648         times.
10649         (merge) New function.
10650
10651         * heap.c, heap.h: New files.  Hopefully in near-final form.
10652
10653 Sat Dec 21 21:51:04 1996  Ben Pfaff  <blp@gnu.org>
10654
10655         * glob.c: Added write_active_file to global vars.
10656
10657         * sort.c: Several new miscellaneous static variables.
10658         (cmd_sort_cases) Big comment fix.
10659         (perform_case_2) Renamed `do_external_sort' and completely
10660         rewritten.
10661         (case_2_proc_func) Removed.
10662         (output_record, write_initial_runs, write_to_sort_cases,
10663         compare_record) New functions.
10664
10665         * vfm.c: [DEBUGGING] (index_to_varname) Excised bit rot.
10666
10667 Tue Dec 17 18:57:59 1996  Ben Pfaff  <blp@gnu.org>
10668
10669         * sort.c: (perform_case_2) Changed the method for allocation of
10670         lots of memory--now allocates one case at a time in hopes that
10671         more cases can be allocated with heavily fragmented memory.
10672
10673         * var.h: (write_active_file) New global var.
10674
10675         * vfm.c: (procedure, close_active_file, write_case,
10676         SPLIT_FILE_procfunc) Now allow beginfunc, procfunc, and endfunc
10677         arguments to procedure() to be NULL.  All references to
10678         procedure() that made use of dummy functions were changed to NULL
10679         functions.
10680         (open_active_file) If write_active_file is non-NULL, the output
10681         device becomes DEV_PGM (a new enum).
10682         (close_active_file) Sets write_active_file to NULL.
10683         (read_from_memory) Comment fix.
10684         (record_case) Calls write_active_file() when the output device is
10685         DEV_PGM.
10686
10687 Sun Dec 15 15:32:16 1996  Ben Pfaff  <blp@gnu.org>
10688
10689         * sort.c: New file.
10690
10691         * autorecode.c: (cmd_autorecode) Fixed parsing of options.
10692         Fixed checking for duplicate varnames.
10693         (recode) xmalloc()'s the transformation instead of arena_alloc()'ing
10694         it.
10695         (autorecode_trns_free) Destroys hash tables for each recoding
10696         specification.
10697         (autorecode_proc_func) Compares NULL to *vpp instead of vpp.
10698
10699         * command.c: Added SORT CASES to cmd_table.
10700         (null_func, null_int_func) Prototyped.
10701
10702         * descript.g: (calc_weight, calc_noweight) Computes own case
10703         number now.
10704         
10705         * frequencies.q: (dump_statistics) Fixed problem with
10706         too-few-cases warning message.
10707
10708         * get.c: (cmd_save_internal) Handles weighting properly.
10709
10710         * hash.c: (hsh_dump) Output format changed.
10711         (force_hsh_insert) Actually works now, prototype changed.
10712
10713         * list.q: (static var case_num) New variable.
10714         (cmd_list) Initializes case_num.
10715         (list_cases) Increments case_num.
10716
10717         * var.h: Added definitions for SORT CASES.  Comment fixes.
10718
10719         * vfm.c: Some definitions moved to new file vfmP.h.  Comment
10720         fixes.  `active' renamed vfm_active, `rep' renamed
10721         vfm_replacement, all references changed.
10722         (procedure) The procfunc no longer receives a case number.  All
10723         references changed.
10724         (write_case) Subtle reordering.
10725         (SPLIT_FILE_procfunc) Counts cases differently.  Slightly less
10726         redundant.
10727
10728         * weight.c: (get_weighting_variable) New function.
10729
10730         * vfmP.h: New file with definitions from vfm.c.
10731
10732 Sat Dec 14 10:35:30 1996  Ben Pfaff  <blp@gnu.org>
10733
10734         * command.c: (FILE_TYPE_okay) Commented out some tests because
10735         they're clumsy and not yet needed.
10736
10737         * var.h: Most *_trns structures moved to their respective source
10738         files.  Some were moved into a new file, do-ifP.h.  Comment fixes.
10739         (union any_trns) Changed to a typedef for trns_header.
10740         (struct input_program_pgm) Removed.
10741
10742         * vars-prs.c: (parse_variables) Only local_free()'s bits if it
10743         was allocated in the first place.
10744
10745 Fri Dec 13 21:30:53 1996  Ben Pfaff  <blp@gnu.org>
10746
10747         * autorecode.c: New file.
10748         
10749         * command.c: Added AUTORECODE to command table; re-enabled SET.
10750
10751         * data-out.c: (convert_F) Handles infinities and NaNs properly.
10752
10753         * error.c: (vmsg) Comment fixes.
10754
10755         * hash.c: Comment fix.
10756         (hashpjw_d) New function.
10757         (hashpjw) Reimplemented as call to more general function
10758         hashpjw_d().
10759         (internal_comparison_fn) Initializes pointers properly.
10760         (hsh_sort) [GLOBAL_DEBUGGING] New debugging code.
10761         (force_hsh_insert, force_hsh_find) New debugging wrapper
10762         functions.
10763
10764         * main.c: (main) Message fix.
10765
10766         * output.c: (outp_read_devices) Message fix.
10767
10768         * set.q: Comment fixes.
10769         (custom_results) Implemented Wnd/X form of subcommand.
10770         (set_routing) New function.
10771         (internal_cmd_set) Implemented ERRORS, MESSAGES.
10772
10773         * settings.h: (SET_ROUTE_*) New enum series.
10774         (set_results) Renamed set_results_file, all references changed.
10775         (set_messages) Removed.
10776         (glob vars set_errors, set_messages, set_results) New vars.
10777
10778         * title.c: (get_title) Remembers to xstrdup() the result of
10779         get_rest_of_line().
10780
10781         * var.h: (arc_item, arc_spec, autorecode_trns) New structures for
10782         use by AUTORECODE.
10783         (union any_trns) New element `arc'.
10784
10785 Fri Dec  6 23:53:47 1996  Ben Pfaff  <blp@gnu.org>
10786
10787         * command.c: (output_line) Removed references to set_screen.
10788
10789         * error.c: (static var terminating) New var.
10790         (hcf) Sets terminating to 1.
10791         (vmsg) If terminating is nonzero, does not attempt to call hcf().
10792         This prevents an infinite loop if an error occurs within hcf().
10793
10794         * expr-evl.c: (evaluate_expression) [__CHECKER__] Replaced case
10795         statement circumlocution with `case 42000' trick.
10796         (evaluate_expression) New support for OP_STR_MIS.
10797
10798         * expr-opt.c: (evaluate_expression) [__CHECKER__] Replaced case
10799         statement circumlocution with `case 42000' trick.
10800         (dump_node) Handles OP_STR_MIS.
10801
10802         * expr-prs.c: (MISSING_func, SYSMIS_func) Rewrote to handle string
10803         variables exceptions.
10804         (parse_function) Message fix.
10805         (ops[]) Added OP_STR_MIS.
10806
10807         * expr.h: Added OP_STR_MIS to OP_* enum.  Comment fixes.
10808
10809         * exprP.h: [__CHECKER__] Removed case statement circumlocution.
10810
10811         * glob.c: Removed set_scrnfile glob var.
10812         (init_glob) set_errorbreak set to 0 by default.
10813
10814         * groff-font.c: Changed included files.
10815         (groff_read_font) Initializes font_arena local var correctly.
10816         (default_font) New function.
10817
10818         * output.c: Comment fixes.
10819         (glob var disabled_devices) New variable.
10820         [GLOBAL_DEBUGGING] (static var iterating_driver_list) New
10821         variable.
10822         [GLOBAL_DEBUGGING] (reentrancy) New function.
10823         [GLOBAL_DEBUGGING] (outp_read_devices, outp_done, find_driver,
10824         outp_iterate_enabled_drivers) Calls to reentrancy().
10825         (destroy_list) New function.
10826         (outp_done) Moved code to destroy_list().
10827         (parse_options) Parses `listing', `screen', `printer' options
10828         internally.
10829         (configure_driver) Sets new `device' member of driver.
10830         (outp_iterate_enabled_drivers, outp_enable_device) New functions.
10831
10832         * output.h: Comment fixes.  New enum series OUTP_DEV_*.
10833         (struct outp_driver_struct) New member `device'.
10834
10835         * postscript.c: (find_encoding_file) Doesn't display its own error
10836         messages.
10837         (default_encoding) New function.
10838         (switch_font) Calls default_encoding() if no encoding can be
10839         found.
10840         (text) Makes up a character metric if none exists for the desired
10841         character.
10842         (load_font) Properly copies a fallback filename.  Calls
10843         default_font() for a font if none at all are known.
10844
10845         * set.q: Comment fixes.  Removed OUTPUT subcommand.
10846         (custom_listing) Calls outp_enable_device() to enable/disable
10847         listing device.
10848         (turn_screen_on) Removed.
10849         (internal_cmd_set) Calls outp_enable_device() to enable/disable
10850         screen, printer devices.
10851
10852         * settings.h: Comment fixes.
10853         (glob vars set_output, set_printer, set_screen, set_scrnfile)
10854         Removed.
10855
10856         * som-high.c: (som_submit_table, som_eject_page) Use
10857         outp_iterate_enabled_drivers() instead of iterating
10858         outp_driver_list directly.
10859
10860 Wed Dec  4 21:34:17 1996  Ben Pfaff  <blp@gnu.org>
10861
10862         * data-in.c: (parse_EDATE, parse_SDATE) New functions.
10863         (parse_string_as_format) Handles new formats.
10864         (parse_numeric) Now handles DOT and PCT formats.
10865
10866         * data-out.c: (convert_E, convert_F, insert_commas) Handle DOT
10867         format now.
10868         (convert_date) Handle EDATE and SDATE formats.
10869         (convert_CCx) Now if there's not room for the currency characters,
10870         converts it as F format if it's positive instead of giving up
10871         quickly.  Also fixed save-and-restore bug with decimal point
10872         characters.  
10873         (convert_format_to_string) Handles new formats.
10874
10875         * misc.c: (formats[]) Added new formats.
10876         (convert_fmt_ItoO) Supports new formats.
10877
10878         * sfm-read.c: (parse_format_spec) Supports new formats.  Better
10879         data checking.  New argument, all references changed.
10880
10881         * sfm-write.c: (write_format_spec) Supports new formats.
10882
10883         * var.h: New formats FMT_DOT, FMT_PCT, FMT_EDATE, FMT_SDATE.
10884         Comment fixes.
10885
10886 Sun Dec  1 17:19:00 1996  Ben Pfaff  <blp@gnu.org>
10887
10888         * cmdline.c: Comment fixes.
10889         (parse_command_line) Changed return type to void.
10890
10891         * data-in.c: (parse_string_as_format) Added FMT_CCA...FMT_CCE to
10892         switch.
10893         (parse_numeric) Handles international numbers (comma as decimal
10894         point).  Some reformatting.
10895
10896         * data-list.c: (parse_free) Default output format is now
10897         set_format instead of hard-coded F8.2.
10898         (read_from_data_list_list) Emits error message on undefined data
10899         only if set_undefined is nonzero.
10900
10901         * data-out.c: (convert_E) Changes decimal point from period to
10902         comma if appropriate.  Restructured.  Better comments.
10903         (convert_F) Changes decimal point from period to comma if
10904         appropriate.
10905         (insert_commas) Major bug with handling of negative values fixed.
10906         Also, inserts periods instead of commas if appropriate.
10907         (convert_CCx) New function.
10908         (convert_format_to_string) Added FMT_CCA...FMT_CCE to switch.
10909         (num_to_string) Changed `.' to set_decimal.
10910
10911         * dfm.c: Comment fixes.
10912         (dfm_close) Frees ext->line even in inline_file.
10913         (open_inline_file) New function.
10914         (open_file_r) When opening the inline file: now properly
10915         recognizes `BEGIN DATA.' line, and calls open_inline_file() to
10916         finish up.
10917         (read_record) Calls fh_close_handle() instead of dfm_close() to
10918         close the inline file.  Makes a copy of the line getl_buf to avoid
10919         interlock problems.
10920         (dfm_get_record) Restructured.  Now checks the return value of
10921         open_file_r().
10922         (cmd_begin_data) Moved open code into open_inline_file().  Relaxed
10923         checking for use of inline file.  No longer tries to close inline
10924         file.
10925
10926         * error.c: (glob var error_already_flagged) New var.
10927         (vmsg) Message change.  Now checks max number of errors/warnings,
10928         acts on it.
10929
10930         * file-handle.q: (fh_handle_name) Now allows closing of
10931         inline_file.
10932         (fh_init_files) Reformatted.
10933
10934         * get.c: (trim_dictionary) Checks SCOMP option instead of COMP.
10935
10936         * getline.c: (getl_include) Fixed bug that popped up when called
10937         when file queue was empty.
10938         (read_console) Resets error_count, warning_count,
10939         error_already_flagged to zero.
10940
10941         * glob.c: Many changes to update list of variables.
10942         (init_compat_dependent) Now this function is called whenever
10943         `compat' changes.  It now sets set_seed only if it hasn't
10944         previously been referenced.  It now calls
10945         lex_init_compat_dependent().
10946
10947         * include.c: (cmd_include_at) Frees temporary buffer instead of
10948         line buffer.  
10949         (cmd_include) Doesn't make copy of include file name.
10950
10951         * lexer.c: Comment fixes.
10952         (init_lex) Moved some code into new function
10953         lex_init_compat_dependent().
10954         (lex_init_compat_dependent) New function.
10955         (hex_val) Simplified.
10956         (preprocess_line) Uses set_endcmd instead of hardcoding `.'.
10957
10958         * main.c: Comment fixes.
10959         (main) Reformatted.
10960
10961         * misc.c: (formats[]) Added FMT_CCA...FMT_CCE.
10962         (check_input_specifier) Disallows FMT_CCA...FMT_CCE.
10963         (convert_fmt_ItoO) Detects FMT_CCA...FMT_CCE.
10964         (setup_randomize) Sets set_seed_used.
10965
10966         * set.q: Comment fixes.
10967         (custom_results) Conditionalizes on `compat'.
10968         (custom_log) Calls custom_journal().
10969         (set_ccx) New function.
10970         (cmd_set) Calls init_compat_dependent() when `compat' changes.
10971         Calls set_ccx() to handle CCA...CCE.  Sets set_grouping
10972         when set_decimal changes.  Range-checks values for MITERATE,
10973         MNEST.  Message fixes.
10974
10975         * settings.h: Comment fixes.
10976         (struct set_cust_currency) New struct.
10977         (set_cc[], set_grouping, set_seed_used) New global vars.
10978
10979         * var.h: (FMT_CCA...FMT_CCE) New output formats.
10980         (FCAT_OUTPUT_ONLY) New FCAT_* constant.
10981
10982 Thu Nov 28 23:14:07 1996  Ben Pfaff  <blp@gnu.org>
10983
10984         * glob.c: Revised variables to correspond to settings.h.
10985         (init_glob) Initializes variables from settings.h properly.
10986
10987         * set.q: Began long-overdue major revision to correspond to new
10988         philosophy.  Most code changed. 
10989
10990         * settings.h: Mostly changed; reorganized, reordered, large new
10991         comment.
10992
10993 Thu Nov 28 19:46:10 1996  Ben Pfaff  <blp@gnu.org>
10994
10995         * get.c: (cmd_save_internal) No longer forces compression off.
10996
10997         * sfm-read.c: (read_compressed_data) If eof is reached when
10998         reading a new instruction octet, only signal error if we're in the
10999         middle of a case.
11000
11001         * sfm-write.c: (COMPRESSION_BIAS) New #define.
11002         (struct sfm_fhuser_ext) New member `end'.
11003         (write_header) Refers to COMPRESSION_BIAS instead of magic 100.0.
11004         (ensure_buf_space) New function.
11005         (sfm_write_case) Reimplemented in order to support compression.
11006         (sfm_close) Writes out the remaining contents of the compression
11007         buffer if any.
11008
11009 Wed Nov 27 23:18:35 1996  Ben Pfaff  <blp@gnu.org>
11010
11011         * command.c: Defined SAVE and XSAVE commands in command table.
11012
11013         * common.h: second_lowest_value is of type flt64, not double.
11014
11015         * file-handle.h: Comment fix.
11016
11017         * get.c: Comment fixes.
11018         (static var `trns') New.
11019         (save_write_case_func, save_trns_proc, save_trns_free, null_func,
11020         cmd_save_internal, cmd_save, cmd_xsave) New functions.
11021         (dict_delete_run) Clears the variables and frees them now.
11022         (trim_dictionary) Sets default for compression.
11023         On KEEP subcommand, frees deleted variables as well as clearing
11024         them.  Finally got the sense of the test for deleting all
11025         variables correct.
11026         [DEBUGGING] (dump_dict_variables) Message fix.
11027
11028         * glob.c: (init_glob) set_compression set to 1 by default.
11029
11030         * list.q: Properly #includes config.h.
11031
11032         * misc.h: New macro REM_RND_UP.
11033
11034         * settings.h: Comment fix.
11035
11036         * sfm-read.c: (structs sysfile_header, sysfile_format,
11037         sysfile_variable; inline function bswap_int32) Moved to new file
11038         sfmP.h.
11039         (corrupt_msg) [__CHECKER__] No longer induces segfault.
11040         (sfm_read_dictionary) Fixed bug caused by failing to initialize
11041         var_by_index.
11042         (read_machine_flt64_info) Fixed some problems caused by confusion
11043         between flt64 and double types.
11044         (read_header) Message fix.
11045         (read_variables) Fixed set of cases in which we byte-swap sv.print
11046         and sv.write.  Fixed confusion of flt64 and double.
11047
11048         * sfm.h: (struct sfm_write_info) New.
11049
11050         * som-high.c: (som_draw_title) Properly frees `s'.
11051
11052         * temporary.c: (save_dictionary) Comment fix.
11053
11054         * var.h: Comment fixes.  New FMT_* enum, FMT_NUMBER_OF_FORMATS.
11055         (struct trns_header) Formatting fix.
11056         (struct save_trns) New.
11057
11058         * vars-atr.c: (discard_variables) Comment fix.
11059
11060         * sfm-write.c: New file, baseline release.
11061
11062         * sfmP.h: New file, baseline release.
11063
11064 Sun Nov 24 14:53:53 1996  Ben Pfaff  <blp@gnu.org>
11065
11066         * cmdline.c: (parse_command_line) `--version' output updated.
11067         (glob var syntax_message[]) Added my e-mail address.
11068
11069         * file-handle.q, lexer.c, vfm.c: Changed many instances of
11070         `illegal' to `invalid'.
11071
11072         * sfm-read.c: (struct sfm_fhuser_ext) New fields used as
11073         uncompression buffer.
11074         (sfm_close) Frees decompression buffer.
11075         (sfm_read_dictionary) Initializes decompression buffer.
11076         (buffer_input, read_compressed_data) New functions.
11077         (sfm_read_case) Restructured; now calls read_compressed_data() to
11078         handle compressed system file data.
11079
11080         * var.h: Comment fix.
11081
11082 Mon Nov 11 15:34:09 1996  Ben Pfaff  <blp@gnu.org>
11083
11084         * dfm.c: (dfm_close) Does not set h->{ext,class} because the
11085         caller handles it.
11086          
11087         * get.c: New comments.  New static var `get_file'.
11088         (cmd_get) Now fully implemented.  Calls discard_variables();
11089         initializes fv and lv for all variables; new debug code; sets
11090         up the dictionary; sets up the input program.
11091         (read_from_get, cancel_get) New functions.
11092
11093         * sfm-read.c: Comment fixes.
11094         (sfm_close) New static function.
11095         (sfm_read_dictionary) Properly sets up the class of the
11096         file_handle.  No longer cares what size the data is in records of
11097         type 7.  Also, on failure, properly cleans up the file_handle and
11098         free()s some stuff.
11099         (read_variables) No longer thinks it knows `nval' of the
11100         dictionary.  Now sets p.get.fv, etc., instead of speculatively
11101         setting fv itself.
11102         (read_value_labels) Fixed off-by-one error in indexing of
11103         var_by_index[].
11104         (sfm_read_case) New function.
11105         (sfm_r_class) New static var.
11106
11107         * var.h: (get_proc) New struct.
11108         (struct variable) New member p.get.
11109
11110 Thu Nov  7 20:52:28 1996  Ben Pfaff  <blp@gnu.org>
11111
11112         * get.c: Removed GTSV_OPT_MAP because of a misinterpretation of
11113         the manual's meaning.
11114         (rename_variables) New function.
11115         (trim_variables) Doesn't try to parse MAP any more.  Removed debug
11116         code.  Now properly reorders the dictionary on the KEEP keyword.
11117
11118         * sfm-read.c: (read_value_labels) Fixed some bugs regarding
11119         garbage collection.
11120
11121         * vars-atr.c: (clear_variable) New argument `dictionary *'.
11122         (rename_variable) New function.
11123         (free_val_lab) Reformatted.
11124
11125 Thu Nov  7 17:29:16 1996  Ben Pfaff  <blp@gnu.org>
11126
11127         * var.h: Reindented entire file.  Comment fixes.
11128         (glob vars var, var_by_name, nvar, N, nval, n_splits, splits)
11129         Removed.
11130         (glob var default_dict) New.
11131         (struct indirect_dictionary) Removed.
11132
11133         * Many other source files were changed to add `default_dict.'
11134         before all references to the dictionary of the active file.
11135         
11136         * vars-atr.c: (make_indirect_dictionary) Removed.
11137
11138         * glob.c: Reindented all variable declarations.  Updated for
11139         changed var.h.  Comment fixes.
11140
11141         * temporary.c: (restore_dictionary, save_dictionary) Simplified
11142         because now we can mainly copy dictionary structs.
11143
11144         * vars-prs.c: (is_dict_varname, parse_dict_variable,
11145         parse_variables) Takes dictionary instead of indirect_dictionary
11146         first argument.
11147         (parse_variables) Instead of calling make_indirect_dictionary,
11148         just sets DICT to &default_dict if DICT is NULL.  Of course, lots
11149         of `*dict.' references had to be changed to `dict->'.  Removed
11150         debug code.
11151
11152 Thu Nov  7 15:48:52 1996  Ben Pfaff  <blp@gnu.org>
11153
11154         * get.c: Added GTSV_OPT_* series of enums.
11155         (trim_dictionary, dict_delete_run) New functions.
11156         [DEBUGGING] (dump_dict_variables) New function.
11157         (cmd_get) Calls trim_dictionary() to get dictionary fully set-up.
11158         [DEBUGGING] Calls dump_dict_variables() to display results.
11159
11160         * glob.c: (cmp_variable) Now a public function declared in var.h.
11161
11162         * sfm-read.c: Turned off debug code.  Comment fixes.
11163         (read_machine_int32_info, read_machine_flt64_info) New functions
11164         to parse type 7 records.
11165         (sfm_read_dictionary) Properly byteswaps several fields now.
11166         Calls read_machine_*_info() to parse type 7 subtypes 3 and 4
11167         records.  [DEBUGGING] Dumps dictionary.
11168         (read_variables) Sets `index' field of variables created properly.
11169         Constructs avl tree of variables in dictionary.  [DEBUGGING] No
11170         longer dumps dictionary.
11171         (read_value_labels) Properly byteswaps fields.  [DEBUGGING] New
11172         debug code.
11173         [DEBUGGING] (dump_dictionary) No longer stubbed out.
11174
11175         * temporary.c: (restore_dictionary) Destroys `var_by_name' glob
11176         var before destroying any variables just to save a little time.
11177
11178         * var.h: (struct variable) Reordered in order to make name[] the
11179         first member; this makes pointers to `variable' pointers to the
11180         variable name, simplifying avl trees, etc.
11181         (struct indirect_dictionary) New struct.
11182
11183         * vars-atr.c: (find_variable) Rewritten for efficiency.
11184         (make_indirect_dictionary, is_dict_varname, parse_dict_variable)
11185         New functions.
11186         (is_varname) Rewritten for efficiency.
11187         (parse_variables) New argument, which is a `dictionary *'.  All
11188         references changed.  This function now reads variable names from
11189         the dictionary passed, or from the default dictionary if NULL.
11190
11191 Tue Nov  5 18:34:59 1996  Ben Pfaff  <blp@gnu.org>
11192
11193         * misc.h: Added new macro DIV_RND_UP to perform integer division,
11194         rounding up.  Changed many references to ROUND_UP to use this
11195         instead.
11196
11197         * sfm-read.c: Includes avl.h.
11198         (corrupt_msg) Induces a segfault under Checker.
11199         (macro assertive_bufread) New.  Many references to bufread() now
11200         use this instead.
11201         (sfm_read_dictionary) Split up into several functions.  Added code
11202         to read dictionary records following the the type 2 records.  Not
11203         quite complete.  New variable `var_by_index'.
11204         (read_header, read_variables) New functions extracted from
11205         sfm_read_dictionary().
11206         (read_value_labels) New function.
11207         (bufread) Checks ferror() if fread() doesn't return the expected
11208         value; if ferror() is zero it's just EOF.
11209         (dump_dictionary) Stubbed out.
11210
11211         * BTW: The source code now exceeds 50000 lines!
11212         
11213 Mon Nov  4 22:03:28 1996  Ben Pfaff  <blp@gnu.org>
11214
11215         * command.c: Added GET to cmd_table[].
11216
11217         * list.q: Removed reference to alloca headers.
11218         (cmd_list) Gave prototype.
11219
11220         * sfm-read.c: Added DEBUGGING comments.
11221         (sfm_read_dictionary) Checks bias correctly.  Sets
11222         dict->var_by_name to NULL.  Calculates long_string_count
11223         correctly.  realloc's dict->var[] array to minimum size.
11224         [DEBUGGING] Calls dump_dictionary.
11225         [DEBUGGING] (dump_dictionary) New function.
11226
11227         * temporary.c: (save_dictionary) Sets var_by_name to NULL.
11228         (restore_dictionary) If the dictionary contains a non-NULL
11229         var_by_name, uses that instead of generating one.
11230         (free_dictionary) Destroys var_by_name.
11231
11232         * var.h: (struct dictionary) Added field `var_by_name'.
11233
11234         * get.c: New file, not complete.
11235
11236 Sun Nov  3 12:24:36 1996  Ben Pfaff  <blp@gnu.org>
11237
11238         * mis-val.c: New enums MV_NOR_*.  New struct num_or_range.
11239         (parse_num_or_range) New function.
11240         (parse_numeric) Reimplemented in order to support LOW THRU <n> and
11241         <n> THRU HIGH missing values.
11242
11243         * output.h: [__GNUC__>1 && __OPTIMIZE__] (width, height) Made
11244         __attribute__((const)).
11245
11246         * q2c.c: (get_token) Merged isdigit || isalpha into isalnum.
11247
11248         * sfm-read.c: Finished reference implementation.
11249
11250         * sfm.h: Includes var.h.
11251
11252         * var.h: Comment fixes.
11253         (struct `variable') Reordered some fields.
11254
11255         * vars-atr.c: (is_num_user_missing) Added support for MISSING_*
11256         constants added previously.
11257
11258 Wed Oct 30 17:13:08 1996  Ben Pfaff  <blp@gnu.org>
11259
11260         * common.h: Comment fixes.  Added declaration of
11261         `second_lowest_value' as variable or macro.  Made `compat_type',
11262         `pgm_state_type' into anonymous enums.
11263
11264         * display.c: Comment fix.
11265
11266         * glob.c: [ENDIAN==UNKNOWN] Added definition for `endian' global
11267         var.
11268         [!defined SECOND_LOWEST_VALUE] Added definition for
11269         `second_lowest_value' global var.
11270         (compat, pgm_state global vars) Changed types to `int'.
11271         (init_glob) Initializes `second_lowest_value'.
11272
11273         * sfm-read.c: Continued work, not complete.
11274
11275         * var.h: Added new MISSING_* constants to handle LOWEST and
11276         HIGHEST.
11277
11278 Sat Oct 26 23:06:06 1996  Ben Pfaff  <blp@gnu.org>
11279
11280         * sfm-read.c: New file, not complete.
11281
11282         * cases.c: (vec_insert) Changed vector expansion algorithm.
11283         (vec_delete) Fixed bug that screwed up deletion sometimes, it was
11284         mucking up the RECODE transformation in particular.
11285         (envector) Harmless change in notation.
11286
11287         dfm is now fairly well tested again.  
11288         * dfm.c: (dfm_get_record) Only returns ext->ptr if ext is
11289         non-NULL--duh.
11290         (cmd_begin_data) if(ext->line) replaced by if(ext && ext->line).
11291
11292         * recode.c: Comment fix.
11293
11294         * sfm.h: Interface should be fairly final now, or at least for a
11295         day or so...
11296
11297         * vfm.c: [DEBUGGING] (index_to_varname) New function.
11298         (open_active_file) [DEBUGGING] Translates ccase indices into
11299         variable names now to make it easier to understand what's really
11300         going on.
11301
11302 Sat Oct 26 20:46:31 1996  Ben Pfaff  <blp@gnu.org>
11303
11304         * data-in.c: Comment fix.
11305
11306         * data-list.c: Includes dfm.h.
11307         (do_reading) Uses new function dfm_push_cust().
11308
11309         * data-out.c: (convert_time, convert_WKDAY, convert_MONTH) Added
11310         `return 1;' at end.
11311
11312         * file-handle.h: Completely changed.  Some parts split off into
11313         new file dfm.h.  Implemented in file-handle.q.
11314         (enum FH_*) Removed.
11315         (struct fh_ext_class) New struct.
11316         (struct file_handle) Retained only these fields: name, norm_fn,
11317         fn, recform, lrecl, mode.  New fields class, ext.
11318         (get_handle_by_name, get_handle_by_filename, parse_file_handle,
11319         close_handle, handle_name) Added `fh_' prefix to name, all
11320         references changed.
11321
11322         * dfm.h: New file, implemented in dfm.c.
11323         (get_record, put_record, fwd_record, bkwd_record, set_record,
11324         get_cur_col) Functions moved from file-handle.h, now prefixed with
11325         `dfm_'.
11326         (dfm_push_cust) New function.
11327
11328         * sfm.h: New file.  Incomplete.
11329
11330         * dfm.c: All functions adjusted/rewritten for new dfm/fhp
11331         interface.  Functions reordered, comments changed.  Not well
11332         tested, probably full of bugs.
11333         (struct dfm_fhuser_ext) New struct.
11334         (dfm_close) New function.
11335         (open_file_r) Pickier about finding `BEGIN DATA.' line.
11336         (open_file_w) User messages changed.
11337         (get_record) Comment fixed.
11338         (read_record) Increments ext->ln even for inline_file.  Calls
11339         dfm_close() for inline_file when `END DATA.' encountered.
11340         (dfm_get_record) Experimental restructuring.
11341         (dfm_push_cust) New function.
11342         (cmd_begin_data) Detects whether the inline file was fully read by
11343         checking whether it is still open; detects whether it was read at
11344         all by checking whether the line number is greater than zero.
11345
11346         * file-handle.q: All functions adjust/rewritten for new dfm/fhp
11347         interface.  Functions reordered, comments changed.  Not well
11348         tested, probably full of bugs.
11349         (init_file_handle) Removed initializers for obsolete fields, added
11350         new fields.
11351         (fh_close_handle) Much simpler, now mainly calls the class
11352         function.
11353         (fh_init_files) Renamed inline file internal filename.
11354
11355         * file-type.c: Includes dfm.h.
11356         (read_from_file_type) Doesn't use dfm internal state anymore.
11357
11358         * inpt-pgm.c, print.c: Include dfm.h.
11359
11360         * recode.c: (internal_cmd_recode) Casts strlen() return value to
11361         int in comparison with other int.
11362
11363         * som-high.c: (build_target) Fixed operator precedence problem in
11364         if statement (& versus ==).
11365
11366 Sat Oct 26 10:39:25 1996  Ben Pfaff  <blp@gnu.org>
11367
11368         * dfm.c: (read_record) Can now read fixed-length records; not
11369         tested.
11370         (put_record) Can now write fixed-length records; not tested.
11371
11372         * file-handle.h: FH_* defines changed to enums.  New enum series
11373         FH_RF_*, FH_MD_*.
11374         (struct file_handle) New members recform, lrecl, mode.
11375
11376         * file-handle.q: Parser changed.
11377         (internal_cmd_file_handle) Added support for new /RECFORM, /MODE,
11378         /LRECL subcommands.  These are compatible with Windows.
11379         (init_file_handle) Initializes recform, mode fields.
11380
11381         * q2c.c: (get_line) When outputting `!' comment lines, now
11382         increments the output file line number so that `#line' directives
11383         are correct.
11384         (make_identifier) New function that converts an arbitrary string
11385         into a valid C identifier.
11386         (dump_vars) Calls make_identifier() in two places in order to
11387         suppress some errors for bad identifiers.
11388         (make_match) Allows TRUE as synonym for YES and FALSE as synonym
11389         for NO.  Allows numbers to be prefixed by underscores to make them
11390         acceptable C identifiers but still to be parsed as numbers by the
11391         Fiasco lexer.
11392
11393 Thu Oct 24 20:13:42 1996  Ben Pfaff  <blp@gnu.org>
11394
11395         * command.c: Re-enabled RECODE, SAMPLE, SELECT IF.
11396         
11397         * dfm.c: Comment fixes. (get_record) Gives error if file handle
11398         was opened for writing.
11399         (open_file_w) New function.
11400         (read_record) Uses strncasecmp if available.  Improved error
11401         messages, comments.
11402         (put_record) New function.
11403
11404         * file-handle.h: Moved function comments into dfm.c and
11405         file-handle.q.  Comment fixes.  Removed declarations of
11406         tilde_expand() and normalize_filename().
11407         (struct file_handle) Changed `open' from boolean to enumerated
11408         field to allow for three states--closed, open for reading, open
11409         for writing--all references changed.
11410
11411         * file-handle.q: Includes filename.h.
11412
11413         * print.c: (CMD_* enums) Renamed PRT_* and moved into var.h; all
11414         references changed.
11415         (alloc_line) Makes allowance for line terminator characters in
11416         calculations.
11417         (print_trns_proc) Now handles OUTFILE, WRITE differences.
11418         (print_space_trns_proc) Handles OUTFILE differences.
11419
11420         * recode.c, sample.c: Comment fixes.
11421
11422         * var.h: (struct print_trns) Changed boolean field `eject' to
11423         bitmapped field `options'; all references changed.  New enums
11424         PRT_* for use with this field.
11425
11426         * exception.h, test-exception.c: Removed.
11427
11428 Thu Oct 24 17:47:14 1996  Ben Pfaff  <blp@gnu.org>
11429
11430         * ascii.c: (delineate) Turned off debug output.
11431
11432         * common.c: [Checker and Linux] (__assert_fail, __eprintf) Moved
11433         to error.c.
11434
11435         * data-in.c: (parse_string_as_format) Sets the entire string value
11436         to spaces, not just the short string part of it.  Is this correct
11437         now? 
11438
11439         * data-out.c: (convert_date) Fixed DATETIME format problems with
11440         decimal places, removed debug code.
11441
11442         * dfm.c: (open_file_r) Fixed bug where an error would occur in the
11443         middle of parsing BEGIN DATA that would cause the lexer to read
11444         from a wild pointer `prog'; now calls new function
11445         preprocess_line() in lexer.c.
11446
11447         * error.c: [__CHECKER__] (hcf) Calls induce_segfault() on improper
11448         termination.
11449         [Checker and Linux] (__assert_fail, _eprintf) Moved from common.c.
11450         Now call induce_segfault() to induce the segfault.
11451         (induce_segfault) New function.
11452
11453         * expr-opt.c: Comment fix.
11454         (parse_sysvar) New function.
11455         (parse_primary) Added system variable support--calls
11456         parse_sysvar().
11457         (global var ops) Added OP_CASENUM operator.
11458
11459         * expr.h: Comment fixes.
11460         (OP_* enum) added OP_CASENUM operator.
11461         (struct casenum_node) New struct.
11462         (union any_union_union) New member `cas' of type `casenum_node'.
11463
11464         * glob.c: (global var last_vfm_invocation) New var.
11465         (init_glob) Initializes last_vfm_invocation.
11466
11467         * lexer.c: (lookahead) Fixed reversed condition on if statement.
11468
11469         * getline.c: (get_line) Split into get_line() and preprocess_line().
11470         (preprocess_line) New function.
11471
11472         * var.h: Declares last_vfm_invocation.
11473
11474         * vfm.c: (procedure) Sets last_vfm_invocation.
11475
11476 Wed Oct 23 21:53:43 1996  Ben Pfaff  <blp@gnu.org>
11477
11478         * command.c: (parse_cmd) Fixed bad assertion related to
11479         lookahead().
11480
11481         * data-in.c: (parse_month) Implemented to parse months according
11482         to full interpretation of standard.
11483         (to_roman) New function.
11484         (parse_wk_delimiter) Bug fix (forgot to skip `WK' in string).
11485         (parse_weekday) Bug fix (forgot to skip all the day name).
11486
11487         * data-list.c: (read_from_data_list_fixed) Fixed bug that screwed
11488         up parsing of multirecord data items.  Also fixed user message.
11489
11490         * data-out.c: Comment fix.
11491         (year2, year4, convert_date, convert_time, convert_WKDAY,
11492         convert_MONTH) New functions to support time & date output.
11493         (convert_format_to_string) Calls new time & date output routines.
11494
11495         * expr-prs.c: (nary_num_func) Found a bug, but didn't fix it yet.
11496
11497         * lexer.c: (lookahead) Noted a previously unnoticed caveat in
11498         comment.
11499
11500         * main.c: [DEBUGGING] (dump_token) Updated to handle getline.h.
11501
11502         * misc.c: (global var formats) Fixed declarations of DATETIME,
11503         TIME, DTIME.
11504
11505         * postscript.c: (text) Fixed a pair of bugs in the reallocation of
11506         the output_char buffer.
11507
11508         * vars-prs.c: (parse_DATA_LIST_vars) Fixed a failure to free
11509         memory bug.  Fixed user messages.
11510
11511 Tue Oct 22 17:27:04 1996  Ben Pfaff  <blp@gnu.org>
11512
11513         * Removed #pragma argsused from lots of places.
11514         
11515         * data-in.c: Implemented zoned decimal and time-date formats.
11516         Untested.  This is a huge chunk of code--maybe 1000 lines and 50
11517         new functions.
11518
11519         * data-out.c: Implemented zoned decimal format.
11520
11521         * expr.h: Moved yrmoda() declaration here from exprP.h.
11522
11523         * misc.c: (global var formats) Minor fixes--added
11524         FCAT_SHIFT_DECIMAL to formats N and Z.
11525         (convert_fmt_ItoO) Added support for format Z.
11526
11527         * som-frnt.c: (som_set_value) Fixed bug regarding string values.
11528
11529 Mon Oct 21 20:39:59 1996  Ben Pfaff  <blp@gnu.org>
11530
11531         * command.c: (parse_cmd) [GLOBAL_DEBUGGING] Inserted call to
11532         som_check_workspace() that is activated between commands.
11533
11534         * data-list.c: (dump_fixed_table, dump_free_table) Finished these
11535         for good, I hope.
11536
11537         * list.q: (begin_row) Changed title expansion style from
11538         SOPT_X_VERT to SOPT_X_SHSP.
11539
11540         * som-frnt.c: Now includes `somP.h'.
11541         (som_push_workspace, som_pop_workspace) New functions that, taken
11542         together, form a solution to the recursive table building problem
11543         mentioned yesterday.  Surrounded every table output routine
11544         throughout the program with calls to these functions.
11545         [GLOBAL_DEBUGGING] (som_check_workspace) New function.
11546         (som_create_table) Checks that there's an active workspace.
11547         (som_destroy_all_tables, som_crush) Removed.
11548
11549         * som-high.c: (global var som_preserve_tables) Removed, all
11550         references deleted.
11551         (som_submit_table) Checks that there's an active workspace.
11552         (dump_columnated_table) Doesn't columnate tables that would have
11553         just one row per column.
11554         (dump_crush_page, som_dump_crush_page) Removed debugging code.
11555         (som_dump_crush_page) Moved row number labels from left side of
11556         tables to right side.
11557         (som_get_table_size) Added support for SOPT_X_SHSP.
11558
11559         * som.h: New cell expansion type SOPT_X_SHSP.
11560
11561         * somP.h: (global vars arena_stack, n_arena_stack, m_arena_stack)
11562         New vars.
11563         (global var curtab_arena) Moved from som-frnt.c.
11564
11565 Sun Oct 20 13:45:28 1996  Ben Pfaff  <blp@gnu.org>
11566
11567         * ascii.c: [GLOBAL_DEBUGGING] (SUPPRESS_WARNINGS) New debug option
11568         that causes bad location warnings to be suppressed.
11569         (delineate) Saves current font when calling draw_text(); fixed
11570         handling of NULLs when backing up.  Also fixed line-wrapping bug.
11571
11572         * command.c: Re-enabled `LEAVE', `NUMERIC', `PRINT', `PRINT EJECT',
11573         `PRINT FORMATS', `PRINT SPACE', `STRING', `TITLE', `WRITE'.
11574
11575         * common.c: Added code to cause assertion failure to dump core
11576         when run under Checker.
11577
11578         * data-list.c: (dump_fixed_table) Fixed some inconsistencies, but
11579         there are still bugs.
11580
11581         * glob.c: (__eprintf) Removed.
11582
11583         * list.q: Inserted som_preserve_tables kluge that prevents tables
11584         from being thrown away due to recursive table building through
11585         som_output_line being called from a transformation during the LIST
11586         procedure invocation.  This is a general problem that must be
11587         solved in a better way since it applies to all procedures in
11588         general.
11589         (begin_row) Changed title options to SOM_X_VERT from SOM_X_BOTH.
11590         (flush_table) Removed SOM_TOPT_PRESERVE from submission options.
11591
11592         * numeric.c: Fixed several errors in the form of msg() calls.
11593
11594         * print.c: Updated for use of som.
11595         (dump_table) Reimplemented.
11596         (print_trns_proc) Calls som_eject_page() instead of eject_page().
11597         Calls som_output_text() instead of outs_line().
11598
11599         * som-frnt.c: (som_destroy_all_tables) Sets som_preserve_tables to
11600         0.
11601         (som_output_text) Function moved from som-low.c.  Interface
11602         changed.
11603
11604         * som-high.c: (som_preserve_tables) New global public variable
11605         declared in som.h.
11606         (som_submit_table) Destroys the tables only if som_preserve_tables
11607         is 0.
11608         (paginate_horizontally) Bugfix: sets som.mpw even if there's only
11609         one subrow per row.  Now labels subrows if there's more than one
11610         subrow per row.
11611         (dump_crush_table) Added wishlist comment.
11612         (som_eject_page) New public function declared in som.h.
11613
11614         * som-low.c: (som_dump_crush_page) Draws row labels if there's
11615         more than one subrow per row.
11616         (som_output_text) Moved to som-frnt.c.
11617
11618         * som.h: (SOM_TOPT_PRESERVE) Removed.
11619
11620         * title.c: (get_title) Changed interface.
11621         (cmd_title) Changed `title' to `outp_title'.
11622         (cmd_subtitle) Changed `subtitle' to `outp_subtitle'.
11623
11624 Sun Oct 20 09:04:15 1996  Ben Pfaff  <blp@gnu.org>
11625
11626         * list.q: (flush_table) Conforms to new partial options in
11627         som_submission_form.
11628
11629         * som-high.c: (paginate_horizontally) Changed form of subrow
11630         number labels.
11631         (build_target) Omits spacing before table if
11632         SOM_TOPT_PARTIAL_OMIT_TOP is selected.
11633         (dump_crush_page) Changed interface.  Only trims bottom rule if
11634         SOM_TOPT_PARTIAL_OMIT_BTM is not selected.
11635         (dump_crush_table) Handles partial tables.
11636         (output_row_label) New function.
11637         (som_dump_crush_page) Emits subrow number labels.  Draws vertical
11638         rule on the right edge of narrow subrows.
11639
11640         * som.h: Changed SOM_SUB_PARTIAL_* series of submission type
11641         constants to a series of SOM_TOPT_PARTIAL_* submission options.
11642         All references updated.
11643
11644 Fri Oct 18 19:46:49 1996  Ben Pfaff  <blp@gnu.org>
11645
11646         * misc.c: Comment fix.
11647
11648         * som-high.c: (examine_table) Treats crushed tables separates for
11649         purpose of determining header size.
11650         (paginate_horizontally) Allots space for line numbers in crushed
11651         tables with lots of subrows per row.  Calculates the `maximum page
11652         width', the width of the widest horizontal page.
11653         (build_target) Removed trim argument; all references changed.
11654         Stricter assertions.  (dump_crush_page) New function.
11655         (dump_crush_table) Reimplemented.
11656
11657         * som-low.c: (som_dump_page) Uses new RULE_ROW &c. constants.
11658         (som_dump_crush_page) Reimplemented, interface changed.
11659
11660         * somP.h: Many many new helper macros for use with crushed tables.
11661         (global var som) Removed `tv', `cum_y' members; all references
11662         removed.  New members `mpw', `digit_space'.
11663
11664 Sun Sep 29 19:37:03 1996  Ben Pfaff  <blp@gnu.org>
11665
11666         * arena.c: (arena_alloc) [!DISCRETE_BLOCKS] Removed `size'
11667         variable, changed to constant 1024.
11668         (arena_ca_strdup) Changed `sizeof(a_string)' to
11669         `sizeof(c_string)'.
11670         (arena_ca_strdup) [!DISCRETE_BLOCKS] Changed bad cast from
11671         `(c_string *)' to `(char *)'; this fixed some offset problems.
11672
11673         * filename.c: (readlink_malloc) Changed initial allocation from
11674         100 bytes to 128.
11675         (good_getcwd) Changed from xmalloc() to local_alloc(); removed
11676         comment.
11677
11678         * postscript.c: (read_fontmap) Fixed leak by changing &owner to
11679         &fm->owner in several places.
11680
11681         * som-high.c: (output_table) Changed interface to rest of world.
11682         (examine_crush_table) Removed.  Crushed tables are re-broken now,
11683         in preparation for rewrite.
11684
11685         * som.h: Comment fix.
11686
11687 Sat Sep 28 21:28:07 1996  Ben Pfaff  <blp@gnu.org>
11688
11689         * ascii.c: (ascii_init_driver) Disposes of x->file.filename and x
11690         itself in the cleanup stage.
11691
11692         * descript.q: (display) At least temporarily, changed the table
11693         format to a crushed table.
11694
11695         * list.q: (begin_row) At least temporarily, added horizontal lines
11696         between cases.
11697
11698         * som-high.c: (examine_crush_table) Sets som.hh to the width of
11699         the horizontal "headers," that is, to the width of the far left
11700         and far right rules.
11701         (justify_pagination) Sets som.th to the width of the widest row
11702         in the crushed table.  Fixed inner loop off-by-one error.
11703
11704         * som-low.c: (som_dump_crush_page) Added code to draw horizontal
11705         rules.
11706
11707         * somP.h: Comment fix.
11708
11709 Fri Sep 27 20:08:39 1996  Ben Pfaff  <blp@gnu.org>
11710
11711         * filename.c: (open_file_ext) Now, doesn't set f->file to NULL
11712         before closing it; also, opens the constructed filename `s'
11713         instead of f->filename.
11714
11715         * postscript.c: Moved initialization of x->loaded, x->prop,
11716         x->fixed, x->current, also the add_encoding() calls, into
11717         postopen().
11718         (preclose) Destroys x->combos; sets x->loaded, x->combos to NULL;
11719         sets x->last_font to NULL; sets x->next_combo to zero.
11720
11721         * som-high.c: (crushed_row_height) Moved definition farther up.
11722         (som_submit_table) Doesn't calculate line width, font size until
11723         after calling open_page(), to accomodate changes to PostScript
11724         driver.
11725         (vert_headers) Removed; equivalent functionality moved to
11726         examine_table(), examine_crush_table().
11727         (justify_pagination) Replaced with different algorithm.
11728         (dump_crush_table) Bugfix that caused tables to fail to be clipped
11729         at the bottom of the page.
11730
11731 Thu Sep 26 22:20:26 1996  Ben Pfaff  <blp@gnu.org>
11732
11733         * command.c: Added cmd_list back into cmd_table.
11734
11735         * freq.c, frequencies.q, repeat.c, list.q, vars-atr.c, vfm.c:
11736         Comment fix: `#define DEBUGGING' --> `#define DEBUGGING 1'.
11737
11738         * list.q: (flush_table) Updated to new som_submission_form format.
11739
11740         * som-frnt.c: Comment fix.
11741
11742         * som-high.c: Changed `#endif' to `#undef EXTERN'.
11743         (output_table) Calls som_get_table_size() directly; handles
11744         crushed tables.
11745         (examine_crush_table) New function; calls vert_headers().
11746         (examine_table) Moved some code into new function, vert_headers().
11747         (justify_pagination) New function.
11748         (dump_plain_table) Removed `static' from `cy'.
11749         (dump_crush_table) New function.
11750
11751         * som-low.c: (som_dump_crush_page) New function.
11752
11753         * som.h: Comment fixes.
11754         (enum SOM_TOPT_CRUSH) New.
11755         (SOM_SUB_PARTIAL_BEG, SOM_SUB_PARTIAL_MID, SOM_SUB_PARTIAL_END)
11756         Temporarily set to zero to make do with LIST procedure.
11757
11758         * somP.h: Re-ordering.
11759
11760 Wed Sep 25 19:36:11 1996  Ben Pfaff  <blp@gnu.org>
11761
11762         * som.c: Split into som-frnt.c, som-high.c, som-low.c.
11763
11764         * somP.h: New file for use by som-high.c, som-low.c.
11765
11766         * q2c.c: Added definition for VME.
11767         (get_line) Now dumps `!' comment lines to the output file
11768         verbatim.
11769
11770         * crosstabs.q, descript.q, file-handle.q, frequencies.q, list.q,
11771         set.q: Changed format of `!' comment lines.
11772
11773 Tue Sep 24 18:39:09 1996  Ben Pfaff  <blp@gnu.org>
11774
11775         * All source files: Added copyright notice.
11776
11777         * common.c: (xmalloc, xrealloc, xstrdup) Cast size_t's to unsigned
11778         longs in msg() calls.
11779
11780         * con32s.c: (xmalloc, xrealloc) Updated from common.c.
11781
11782         * q2c.c: (xmalloc, xrealloc, xstrdup) Updated from common.c.
11783
11784 Sat Sep 21 23:16:31 1996  Ben Pfaff  <blp@gnu.org>
11785
11786         * output.c: (outp_read_devices) Changed criteria for
11787         distinguishing different types of lines.
11788
11789 Fri Sep 20 22:52:28 1996  Ben Pfaff  <blp@gnu.org>
11790
11791         * cmdline.c: Changed syntax message.
11792
11793         * filename.c: (good_getcwd) Bug fix (?).
11794         (normalize_filename) [__BORLANDC__] Uses _fullpath() library
11795         function.
11796         (search_path) Appends DIR_SEPARATOR to directory name only if it
11797         does not already end with one.
11798
11799         * glob.c: Checks STAT_PAGER envvar before PAGER.
11800
11801         * output.c: Checks environment variables instead of just local
11802         macros.
11803
11804 Tue Sep 10 21:39:00 1996  Ben Pfaff  <blp@gnu.org>
11805
11806         * arena.c: (arena_destroy) Swatted a subtle bug that cropped up
11807         when the pointer passed to the function was within the arena
11808         itself, so that it couldn't properly be set to NULL _after the
11809         arena was freed_.
11810
11811         * command.c: Re-enabled DISPLAY.
11812
11813         * display.c: Rewritten to handle tables.  Untested.
11814
11815         * filename.c: (search_path) Fixed memory leak.
11816
11817         * frequencies.q: (cmd_frequencies) Frees v_variables.
11818         (postcalc) Calls cleanup_freq_tab() after displaying statistics.
11819         (cleanup_freq_tab) New function to garbage collect.
11820         (dump_full) Elegantized.
11821
11822         * main.c: New comment.
11823
11824         * output.h: New tag for tagged quotes: TAG_NEWLINE.
11825
11826         * postscript.c: Comment fix.
11827         (release_fontmap, free_font_entry) New functions.
11828         (ps_init_driver) Sets free_font_entry() as the freefunc for
11829         hashtable `loaded'.  Calls release_fontmap() when destroying a
11830         driver; also frees the output filename; also frees the
11831         ps_driver_ext block.
11832         (free_ps_encoding) Frees the filename as well as the encoding
11833         block.
11834         (output_encodings) Frees the line buffer and pops the msg-filename
11835         stack.
11836         (read_fontmap) Frees the fontmap filename and the line buffer.
11837         (postopen, preclose) Misc. garbage collection fixes.
11838         (ps_open_page) Destroys the `combos' hash table; sets `last_font'
11839         to NULL; this fixes some output problems.
11840         (text) Handles TAG_NEWLINE.  Untested.
11841
11842         * som.c: (cell_byte_size) Merged SCON_VALUE and SCON_TEXT cases.
11843         (som_set_string) Removed.  All references changed to
11844         `som_set_text'.
11845         (som_set_text) Rewritten.  New interface.  More general.
11846
11847         * som.h: Minor format changes.
11848         (struct som_value_cell) Removed; all references changed to
11849         `som_text_cell'.
11850         (enums SOT_*) Changed.
11851
11852 Mon Sep  9 21:43:13 1996  Ben Pfaff  <blp@gnu.org>
11853
11854         * command.c: Re-enabled SPLIT FILE.
11855
11856         * postscript.c: Comment fix.
11857
11858         * som.h: Added `SOT_NONE'.
11859
11860         * split-file.h: (cmd_split_file) Removed superfluous parenthesis.
11861
11862         * vfm.c: (dump_splits) Reimplemented.
11863
11864 Sat Sep  7 22:35:12 1996  Ben Pfaff  <blp@gnu.org>
11865
11866         * Compiled the project under gcc 2.7.2, which gave some new
11867         warnings.  This led to many additions of casts from unsigned to
11868         int sprinkled throughout the code.
11869         
11870         * arena.c: Many uses of `unsigned' changed to `size_t'.
11871
11872         * command.c: Added END FILE, END REPEAT to command table.
11873         (var cmd_end_repeat) Renamed cmd_end_repeat_p.
11874         (find_command, FILE_TYPE_okay) Not commented out anymore.
11875         (parse_cmd) Calls FILE_TYPE_okay again.
11876         (output_line) Added calls to som_output_text() to put the line
11877         in the output files.
11878
11879         * common.c: (macro VME) Format changes.
11880         (xstrdup) Asserts that its argument is not NULL.
11881         
11882         * data-list.c: Implemented dump_fixed_table().
11883         
11884         * inpt-pgm.c: Formatting changes.  Comment changes.
11885         (end_case_proc) Renamed end_case_trns_proc.
11886         (cmd_end_file, end_file_trns_proc) New functions.
11887
11888         * misc.c: Many uses of `int' and `unsigned' changed to `size_t'.
11889
11890         * misc.h: (local_strdup) New macro corresponding to strdup() but
11891         allocating its data through local_alloc() if possible--that is, if
11892         GNU C is in use.
11893
11894         * postscript.c: Comment changes.
11895         (quote_ps_name, quote_ps_string, output_encodings) New functions.
11896         (output_line, add_string) New macros supporting
11897         output_encodings().
11898         (postopen) Fixed contents of ${fixed-font} and ${prop-font}
11899         substitution vars.  Calls output_encodings() when a line
11900         consisting of `!encodings' is encountered.
11901         (preclose) Some code moved into quote_ps_string().
11902         (dump_line) Changed into macro supporting dump_fancy_line().
11903         (switch_font) Now outputs DSC "%%IncludeResource: font (...)"
11904         command when appropriate.
11905         (write_text) Fixed `literal_char' array (I think it's fixed, at
11906         least.)
11907         (text) Fixed bug when width was zero.  Now exits immediately on
11908         zero height_left.  Now, when executing `goto restart;', checks
11909         that cp<end, so that we don't read beyond end-of-string.  Also,
11910         outputs the correct code to the output file by outputting the code
11911         from the metric instead of the internal metric index.
11912
11913         * repeat.c: (cmd_end_repeat) New function.
11914
11915         * som.c: (var som) `headers' renamed `options' and semantics
11916         changed.  All references changed.
11917         (draw_title) `if(px!=-1 || px!=-1)' --> `if(px!=-1 || py!=-1)'.
11918         (build_target) Only inserts spacing if SOM_TOPT_SPACING not
11919         selected.
11920         (som_text_table) Removed.
11921         (som_output_text) New function.
11922
11923         * som.h: (struct som_submission_form) Removed `header', `reuse',
11924         replaced with bitmapped field `options'.
11925         (SOM_TOPT_*) New enum set for som_submission_form.options.
11926         (SOT_*) New enum set for som_output_text().
11927
11928         * temporary.c: (copy_variable) When copying the var label, only
11929         calls xstrdup() if it's non-NULL.
11930
11931         * var.h: (enum type `vartype') Removed; all references changed to
11932         `int'.
11933
11934         * vars-atr.c: (init_variable) Changed local var `nbytes' from
11935         `int' to `size_t'.
11936
11937 Thu Sep  5 22:05:56 1996  Ben Pfaff  <blp@gnu.org>
11938
11939         * font.h: Comment changes.
11940
11941         * groff-font.c: (groff_read_font) Initializes `name' field to
11942         NULL.  Handles `encoding' field.
11943
11944         * hash.c: (hsh_dump) [GLOBAL_DEBUGGING] Output formatting changes.
11945
11946         * postscript.c: (struct font_entry) Removed `position' field.
11947         (struct ps_font_combo) New struct.
11948         (struct ps_driver_ext) Removed field `next_position'.  New fields
11949         `combos', `next_combo'.  `last_font' field changed from
11950         `font_entry *' to `ps_font_combo *'.
11951         (ps_init_driver) Reformatted; handles new fields.  When
11952         OPO_AUTO_ENCODE is set, adds the two default fonts' encodings to
11953         the encoding list.
11954         (get_encoding, find_encoding_file) New functions.
11955         (add_encoding) Some code moved out into find_encoding_file().
11956         (postopen) Changed value for ${title}.
11957         (preclose) Sets `loaded' field to NULL after destroying the hash
11958         table.
11959         (ps_open_page) Added comment.  Inits the `combos' and `next_combo'
11960         fields.
11961         (ps_text_set_font_by_position) Figures out the current family if
11962         not known.
11963         (compare_ps_combo, hash_ps_combo, free_ps_combo) New functions.
11964         (switch_font) Implemented.
11965         (write_text) Calls switch_font() more often.  Format changes.
11966         #undefs its macros after they're no longer useful.
11967         (text) Changed `continue' at one point to a jump to the top of the
11968         loop because we don't want `separate' reset to 0 at that point.
11969         (load_font) No longer sets `position' in the font_entry created.
11970
11971 Wed Sep  4 21:45:35 1996  Ben Pfaff  <blp@gnu.org>
11972
11973         * font.h: (struct font_desc) New member `encoding', which is not
11974         properly handled yet.
11975
11976         * glob.c: (init_glob) Some new i18n code, which is probably
11977         screwed up.
11978
11979         * output.c: (outp_read_devices, outp_get_paper_size) Changed
11980         `size' local from `int' to `size_t'.
11981
11982         * postscript.c: New driver configuration parameter `auto-encode'.
11983         New enums OPO_AUTO_ENCODE, ODA_COUNT.
11984         (struct font_entry) New member `position'.
11985         (struct ps_driver_ext) Reordered.  New hash table member
11986         `encodings'; new members `next_position', `next_encoding',
11987         `last_font'.  Members `current', `prop', `fixed' changed from type
11988         `font_desc *' to `font_entry *'; all references changed.
11989         (struct ps_encoding) New struct.
11990         (read_ps_encodings, compare_ps_encoding, hash_ps_encoding,
11991         free_ps_encoding, add_encoding) New functions.
11992         (ps_init_driver) Added OPO_AUTO_ENCODE to default
11993         x->output_options.  Initializes new members of ps_driver_ext.
11994         Changed default value for prologue_fn, encoding_fn.  Calls
11995         read_ps_encodings after loading default fonts.
11996         (option_tab[], ps_option) Handle new configuration parameter.
11997         (switch_font) New function.
11998         (struct output_char) `font' member changed from `font_desc *' to
11999         `font_entry *'.  New member `separate'.
12000         (read_fontmap) Changed `size' from `int' to `size_t'.
12001         (output_line, put_number) New macros for write_text().
12002         (write_text) Optimizes text output by consolidating multiple
12003         calls to PostScript `show' operator.
12004         (text) Keeps track of when text arguments can't be consolidated by
12005         write_text(), and marks those spots in the output stream.
12006         (load_font) Sets `position' of the allocated font_entry to -1, cuz
12007         the font hasn't been switched to by switch_font(), which is where
12008         the position is important--the PostScript is what cares about the
12009         position.
12010
12011 Sat Aug 31 23:52:38 1996  Ben Pfaff  <blp@gnu.org>
12012
12013         * hash.c: (hsh_destroy) Ignores NULL argument.  Doesn't try to
12014         call a NULL free_func.
12015         (hsh_rehash) Elegantized.
12016         (hsh_probe) Fix bug that manifested when the table was expanded
12017         and thus had to change location in memory.  Good thing
12018         too--otherwise could have been much more subtle.
12019         (hsh_find) [GLOBAL_DEBUGGING] Not stubbed out anymore.
12020         (hsh_foreach) New function for hash table iteration.
12021
12022         * hash.h: (struct hsh_iterator) New.
12023
12024         * lexer.c: (parse_tagged_quote) Font and family name strings in
12025         tags are now null-terminated.
12026
12027         * output.c: (outp_evaluate_dimension) Fixed over-aggressive unit
12028         parsing.
12029         (internal_get_paper_size, outp_get_paper_size) Fixed; now work as
12030         documented.  (Never before tested?)
12031
12032         * output.h: Comment changes.
12033
12034         * postscript.c: New driver options `optimize-text-size',
12035         `optimize-line-size', `max-fonts-simult'.  New enum set for
12036         specing cached line types.  Comment fixes.
12037         (struct line_form) New struct.
12038         (struct ps_driver_struct) New members `text_opt', `line_opt',
12039         `max_fonts', `lines'.
12040         (ps_init_driver) Initializes new members of ps_driver_struct.
12041         (user option type enum set) New member `nonneg_int_arg'.
12042         (static var option_tab[]) Supports new options.
12043         (ps_option) Handles new options.
12044         (find_ps_file) Made static.  No longer calls hsh_dump().
12045         (ps_get_var) Made static.
12046         (preclose) Dumps out proper DSC trailer.
12047         (ps_open_page) Elegantized.
12048         (ps_close_page) Calls dump_lines() if appropriate.
12049         (ps_line_horz, ps_line_vert, ps_line_intersection) Reduced to
12050         wrappers around line().
12051         (int_2_compare, compare_line, dump_line, dump_fancy_line,
12052         dump_lines, hash_line, free_line, line) New functions for support
12053         of line caching.
12054         (write_text, text) Made static.
12055         (text) Added to font support, not finished.
12056
12057 Thu Aug 29 21:36:41 1996  Ben Pfaff  <blp@gnu.org>
12058
12059         * font.h: (struct font_desc) New members ascent, descent.
12060
12061         * groff-font.c: (groff_read_font) Calculates font ascent and
12062         descent from the ascent and descent of the `d' and `p' characters,
12063         respectively, as per a suggestion on comp.fonts.
12064
12065         * postscript.c: (ps_open_page, ps_close_page, ps_line_horz,
12066         ps_line_vert, ps_line_intersection) Rewritten to deal with changed
12067         prologue.
12068         (write_text) Handles text right-justification and centering (not
12069         full justification).  Still very inefficient.  (One output line
12070         per character?!)
12071         (struct output_char) Added fields for font and font size.
12072         (text) Many bugfixes.
12073
12074 Sat Aug 24 23:26:00 1996  Ben Pfaff  <blp@gnu.org>
12075
12076         * cmdline.c: (usage) Calls outp_list_classes().
12077
12078         * font.h: Comment fix.
12079
12080         * groff-font.c: New exported global var `space_index'.
12081         (groff_init) New function to initialize `space_index'.
12082         (hash_kern) Casts result to unsigned.
12083         (font_name_to_index) Renamed font_char_name_to_index.  All
12084         references changed.  Also, now returns the value of `space_index'
12085         when passed an ASCII space character as an argument.  Fixed
12086         handling of nulls.
12087         (font_get_kern_adjust) Changed i from `int' to `unsigned'.
12088         Handles passed NULL pointers properly.
12089
12090         * lexer.c: (parse_tagged_quote) Comment fix.  Better range
12091         checking.
12092
12093         * output.c: (outp_list_drivers) Removed.  Removed all references.
12094         
12095         * output.h: Comment fixes.
12096
12097         * postscript.c: (ps_open_global) Calls groff_init().
12098         (output_char) New structure.
12099         (write_text) New function.
12100         (text) No longer stubbed out!  Now the output is correct--with a
12101         few exceptions, one of them being that the page has to be held
12102         upside down into a mirror.
12103
12104 Sun Aug 11 21:31:22 1996  Ben Pfaff  <blp@gnu.org>
12105
12106         * font.h: Comment fix.
12107         
12108         * font.c: (name_to_index) Renamed font_name_to_index, made extern.
12109         All callers changed.
12110         (number_to_index) Renamed font_number_to_index, made extern.  All
12111         callers changed.
12112         (font_get_kern_adjust, font_get_char_metrics) New functions.
12113
12114         * output.h: New constant OUTP_T_INTERNAL_DRAW.
12115
12116         * postscript.c: Changed default line width back to 1/2 point.
12117         (ps_line_horz, ps_line_vert, ps_line_intersection) Now lines are
12118         in the center of the space allotted for them, not just a fixed
12119         offset from the edge of the space; this fixes some bugs.
12120         (ps_line_intersection) Now supports all command line styles.
12121         (ps_text_get_size) Bug fix in computation of em width.
12122         (text) New function, the meat behind ps_text_metrics and
12123         ps_text_draw.  Not complete.
12124         (ps_text_metrics, ps_text_draw) Removed the stub taken from
12125         ascii.c; call text().
12126
12127 Sat Aug 10 23:28:17 1996  Ben Pfaff  <blp@gnu.org>
12128
12129         * arena.c: (arena_free) Assert that the argument is non-NULL.
12130         
12131         * groff-font.c: (add_kern) Calls arena_free() for old_kern if and
12132         only if old_kern is non-NULL.
12133
12134         * postscript.c: (ps_init_driver) Changed default line width to 1
12135         point.
12136         (postopen) New prologue variables.
12137         (ps_line_horz, ps_line_vert, ps_line_intersection) Implements some
12138         more of the common line styles properly, but not all.
12139         (ps_text_metrics) Fixed problem with this stubbed out version that
12140         kept it from taking font sizes into account.
12141
12142 Thu Aug  8 22:31:11 1996  Ben Pfaff  <blp@gnu.org>
12143
12144         * arena.c: (arena_malloc) Bug fix.
12145         (arena_dump) [GLOBAL_DEBUGGING] New function.
12146
12147         * ascii.c: Comment fix.
12148         (count_fancy_chars, delineate) Now static functions.
12149         
12150         * filename.c: (interp_vars) Bug fixes.
12151
12152         * font.h: Comment fixes.
12153
12154         * glob.c: (init_glob) Sets set_viewwidth, set_viewlength at
12155         beginning in case we have an error message to display before
12156         initializing the display.
12157
12158         * groff-font.c: Comment fix.  Changed rehash threshold from 2/3
12159         full to 1/2 full.
12160         (groff_read_font) Bug fixes.
12161         (name_to_index) Increments hash.used.  Sets `name' field of hash
12162         entry properly.
12163         (add_kern) Sets kern_max_used after rehashing.  Other bug fixes.
12164
12165         * hash.c: Return type changed.
12166
12167         * postscript.c: Continued development.  Now marks lines on the
12168         paper, but very buggy.
12169
12170 Sat Aug  3 20:50:35 1996  Ben Pfaff  <blp@gnu.org>
12171
12172         * Changed comments in many source files from `/* xxx /* yyy */' to
12173         `/* xxx */ /* yyy */' for cleanliness.
12174
12175         * arena.c: (arena_sd_strdup) New function.
12176         
12177         * ascii.c: (struct ascii_driver_ext) New member `file'.
12178         (ascii_init_driver) Fills out member `file' for initing; uses
12179         close_file_ext for closing drivers.
12180         (ascii_option) Changed %.*s back to %s because the a_string's are
12181         always null-terminated.
12182         (postopen, preclose) New functions.
12183         (ascii_open_page) Uses new style of open_file_ext.
12184         (ascii_option, commit_line_buf, output_lines) Use ext->file.file
12185         instead of this->output.
12186         (__assert_fail) Removed.
12187
12188         * cmdline.c: Changed syntax_message[].
12189
12190         * error.c: #include's <readline/history.h> only if the history
12191         library is available, not if just the readline library is
12192         available.
12193
12194         * filename.c: (expand_line) Removed alloca() support.
12195         (interp_vars) No longer tilde-expands argument.  Limit on output
12196         length removed.
12197         (tilde_expand) Now treats argument as path rather than filename.
12198         [!unix] Now is a no-op function.
12199         (search_path) Better verbose message formatting.
12200         (open_file, close_file) Comment fixes.
12201         (close_file) [!unix] Doesn't bother with pipes.
12202         (open_file_ext) Completely rewritten, interface revamped.
12203         (close_file_ext) New function.
12204
12205         * font.h: Comment changes.
12206
12207         * frequencies.q: Removed AIX alloca support since it doesn't use
12208         alloca.
12209
12210         * hash.c: Comment changes & additions.
12211         (hsh_create) Initializes entire table instead of first M entries.
12212         (hsh_probe) Stupid bug fixed.  Now it works.
12213         (hsh_dump) [GLOBAL_DEBUGGING] New function.
12214
12215         * main.c: (parse) Detects EOF properly in token-eating loop.
12216         Should the STOP token have its value changed to 0?
12217
12218         * misc.c: (blp_getdelim) [HAVE_GETDELIM] Now it's a macro.
12219         (blp_getline) Now it's a macro.
12220
12221         * output.h: (struct outp_driver) Removed members output, filename.
12222         
12223         * output.c: (outp_init) [!NO_POSTSCRIPT] Installs PostScript
12224         drivers in driver table.
12225         (outp_read_devices) Frees buf.  Warns if there are no active
12226         output drivers.
12227         (outp_configure_clear) Sets outp_configure_vec to NULL after
12228         deleting its elements.
12229         (configure_driver, destroy_driver) Removed references to output,
12230         filename members of outp_driver.
12231         (outp_evaluate_dimension, internal_get_paper_size,
12232         outp_get_paper_size) New functions.
12233
12234         * postscript.c: Continued development.  Now links but doesn't make
12235         any marks on the page.  Lotsa bugs I suppose.
12236
12237         * str.c: (strcasecmp) [!HAVE_STRCASECMP] New function.
12238
12239         * str.h: Comment changes.
12240
12241 Sat Jul 27 22:32:38 1996  Ben Pfaff  <blp@gnu.org>
12242
12243         * Removed dependencies on non-nested comments in several files.
12244         Also removed references to (unix || __unix__) in #if's since
12245         prefh.orig makes those two equivalent.
12246         
12247         * ascii.c: (ascii_open_global) Creates ascii_arena.
12248         (ascii_close_global) Destroys ascii_arena.
12249         (ascii_init_driver) Doesn't create ascii_arena.
12250         (ascii_copy_driver) Removed.
12251         (ascii_option) Possible bugfix regarding %s vs. %.*s with a_string's.
12252         (outp_class ascii_class) Removed ascii_copy_driver reference.
12253
12254         * frequencies.q: Now can display all statistics except median.
12255         Still not finished.
12256
12257         * output.c: Handles outp_class.ref_count so output class
12258         destructors are called properly.
12259         (add_class) Sets ref_count to 0.
12260         (configure_driver) Initializes class if ref_count++ is 0.
12261         (destroy_driver) Destructs class if --ref_count is 0.  Frees the
12262         class output file name.
12263         
12264         * output.h: (struct outp_class) Removed copy_driver, inited.
12265         Added ref_count.
12266
12267         * postscript.c: Completely replaced but not finished.
12268         
12269 Tue Jul 23 21:48:36 1996  Ben Pfaff  <blp@gnu.org>
12270
12271         * approx.h: #includes <float.h>.
12272
12273         * arena.h, arena.c: Many functions changed to take an arena **
12274         instead of an arena *, for consistency.  All callers changed.
12275         (arena_alloc) Now creates a new arena if passed *A that is NULL.
12276         (arena_destroy) Sets *A to NULL.
12277         
12278         * ascii.c: (delineate) Implements OUTP_T_VERT correctly.  Removed
12279         assertion that `width' be positive.
12280
12281         * command.c: Removed #if's from cmd_table.
12282         (walk_cmdtable_func) [0] New function (debug code).
12283         (init_cmd_parser) [0] Dumps out cmd_table (debug code).
12284         (parse_cmd) Doesn't return failure for unimplemented commands.
12285
12286         * common.h: (SYSMIS) Changed from DBL_MAX to -DBL_MAX.
12287         (SYSCODE) New constant macro.
12288
12289         * descript.q: Checks for positive n_variables before performing
12290         analysis.
12291
12292         * file-handle.q: (get_handle_by_filename) Bug fix: passes &f to
12293         avl_find instead of &fp as arg 2.
12294
12295         * frequencies.g, frequencies.q: Continued updating; now compiles &
12296         works again, but not complete.
12297
12298         * main.c: Changes to user messages.
12299
12300         * misc.c: (reverse) [0] New function.
12301
12302         * settings.h: Comment removed.  #includes "common.h".
12303
12304         * som.c: (som_set_null) New function.
12305         (som_set_value, som_set_string, som_set_text) More detailing
12306         assertions.
12307         (som_set_float) Implemented function.
12308         (dump_columnated_table) Bug fix regarding page breaks.
12309         (draw_cell) Bug fix regarding text that spilled out of a cell.
12310         (draw_intersection, draw_horz_rule, draw_vert_rule) No longer draw
12311         null lines.
12312         (get_cell_size) Support SCON_EMPTY cells.
12313         (get_table_size) When calculating rules' widths and heights, mask
12314         out SLIN_SPACING bit.  Added SOPT_X_HLTL support.
12315         
12316         * som.h: (som_any_cell) New option SOPT_X_HTLT.  Removed
12317         SOPT_X_SHADE.
12318         (struct som_submission_form) New member `header'; all users
12319         changed.
12320
12321         * val-labs.c: (get_label) User messages changed.
12322
12323         * var.h: Changed FREQUENCIES structures.
12324
12325         * vars-atr.c: (is_num_user_missing, is_str_user_missing) Made
12326         inline.
12327         
12328 Fri Jul 19 19:11:13 1996  Ben Pfaff  <blp@gnu.org>
12329
12330         * approx.h: Definition of EPSILON now depends on system's
12331         DBL_EPSILON.  Removed GNU C specific code.
12332         (cmpapx) Renamed approx_compare.
12333
12334         * frequencies.g, frequencies.q: Continued updating; still doesn't
12335         compile.
12336
12337         * groff-font.c: (name_to_index) Fix bug that kept it from
12338         compiling.
12339
12340         * hash.c, hash.h: Completed work.
12341
12342         * var.h: Changes to freq_tab, frequencies_proc.
12343         
12344 Wed Jul 17 21:23:36 1996  Ben Pfaff  <blp@gnu.org>
12345
12346         New hashing code.
12347         * hash.c, hash.h: New files.  Not completed.
12348         * Makefile.am: Added hash.c to source file list.
12349         * font.h: (struct font_desc) New member kern_size_p.
12350         * groff-font.c: Uses hash.h.
12351         (hashpjw) Moved to hash.c.
12352         (next_prime_power) Rewrote, renamed hsh_next_prime, moved to
12353         hash.c.
12354         (static var hash) New member size_p.
12355         * var.h: Includes hash.h.
12356         (struct freq_tab) Changed AVL_TREE to hash_tab.
12357
12358         * vars-prs.c: Comment, formatting fixes.
12359
12360         * frequencies.g, frequencies.q: Continued updating.  Not yet
12361         working.
12362
12363         * formats.c: Bug fix.
12364
12365 Tue Jul 16 22:10:04 1996  Ben Pfaff  <blp@gnu.org>
12366
12367         Increasing parallelism between DESCRIPTIVES and FREQUENCIES.
12368         * descript.g: Comment fixes.
12369         * descript.q: Comment fixes.  Moved some declarations into var.h.
12370         Made dsc_info a static table.  Updated FIXMEs.
12371         (internal_cmd_descriptives) Beautified.
12372         
12373         * frequencies.q: Started updating into working order.
12374         * frequencies.g: New file analogous to descript.g.
12375         * var.h: Comment fixes.  Added structures for FREQUENCIES.
12376         
12377         * som.c: Removed vestiges of crushing and partial table support.
12378
12379 Sun Jul 14 15:45:31 1996  Ben Pfaff  <blp@gnu.org>
12380
12381         * Many more changes to som.c especially, but these will not be
12382         documented as I have resolved to remove them.  This patchlevel is
12383         being released solely so that I can fall back to it if I decide
12384         that removing the changes is not a good idea.
12385
12386 Sat Jul 13 09:58:44 1996  Ben Pfaff  <blp@gnu.org>
12387
12388         * som.c: (global var som) New member `cum_y'.
12389         (build_target) Properly handles titles for partial tables.
12390         (dump_partial_beg, dump_partial_mid, dump_partial_end)
12391         Merged into single new function dump_partial().  Fixed problem
12392         with titles on partial tables.
12393         (dump_table) Calls dump_partial() for all parts of partial tables.
12394         (dump_page) Criteria for drawing title changed.
12395         
12396 Fri Jul 12 22:03:36 1996  Ben Pfaff  <blp@gnu.org>
12397
12398         * command.c: (cmd_table) Added LIST, WEIGHT.
12399
12400         * command.c: (cmd_remark) No longer frees `s' since it's not
12401         dynamically allocated.
12402         
12403         * data-out.c: (convert_f) Now correctly handles the case where
12404         abs(v->f)<1 but v->f rounds to a value of 1.00 given the specified
12405         number of decimals.
12406         (som_destroy_all_tables) Removed argument.  All callers changed.
12407         (som_vline, som_hline) Argument validity checking corrected.
12408         (som_set_value) Implemented half-heartedly.
12409         (replicate_table) Copies tables piece-by-piece when using Checker.
12410
12411         * som.h: New line style SLIN_1THIN, currently equivalent to
12412         SLIN_0.  New enum set SOM_SUB_*.
12413         (struct som_submission_form) Removed `seq_no'.  Added `type'.
12414         
12415         * list.q: Newly working file; uses partial tables.
12416         
12417         * som.c: (som_reduce_table) Renamed som_set_table_height().
12418         (som_crush) Removed argument `group'.
12419         (global var som) Removed `nt', `seq_no'.  Added `type'.
12420         (som_submit_table) Arguments changed.
12421         (output_table) Removed partial table code.
12422         (build_target) New arg; partial table support added.  All callers
12423         changed.
12424         (dump_plain_table) Removed partial table code.
12425         (dump_partial_beg, dump_partial_mid, dump_partial_end) New functions.
12426         (dump_table) Supports partial tables.
12427         (dump_page) New argument to allow not drawing top and/or bottom
12428         headers.  All callers changed.  Supports partial tables.
12429
12430 Sat Jul  6 22:22:25 1996  Ben Pfaff  <blp@gnu.org>
12431
12432         * data-out.c: Changed `#include <approx.h>' to `#include
12433         "approx.h".
12434         (convert_F) Comment fix.  Now won't print `-.000', etc.
12435
12436         * descript.q: Now Z-scores work, although there appears to
12437         be a bug (which might actually be in data-out.c:convert_F()).
12438         (descriptives_trns_proc, descriptives_trns_free) New functions.
12439         (run_z_pass) Implemented.
12440         
12441         * var.h: Comment fixes.
12442         (dsc_z_score, descriptives_trns) New structs.
12443         (descriptives_trns) Added to any_trns as `dsc'.
12444
12445         * error.c, error.h: New error class, IS (Installation Script
12446         error), used in those instances where the error is in the
12447         installation, but there is a script file or installation file that
12448         can be usefully referred to.
12449         
12450         * output.c: Change many IE classes to IS classes.
12451
12452         * cases.c, command.c, common.c, crosstabs.q, expr-evl.c,
12453         frequencies.q, list.q, vars-prs.c, vfm.c: Removed reference to
12454         HAVE_MALLOC_H because Borland C++ alloca() is broken, so why
12455         include the corresponding header?
12456         
12457         * glob.c: (init_glob) Don't malloc term_buffer under Checker.
12458         Don't bail out if termcap can't be read.
12459
12460         * som.c: (som_destroy_table) Removed.
12461         (som_reduce_table, som_destroy_all_tables) New functions.
12462         (som_crush) New function, not implemented.
12463         
12464         * som.h: New table option STAB_CRUSH.  Comment fix.  New struct
12465         som_submission_form.  Function prototypes revised.
12466
12467         Outputting huge tables (1000s of rows) a few rows at a time
12468         is supported, though untested.  May even break everything.
12469         Actually, the code doesn't even compile right now.
12470         * som.c: (struct som) New fields htv, nt, seq_no.
12471         (som_submit_table) Multiple arguments changed to a single
12472         pointer to struct submission_form.  Only increments subtable_num
12473         if seq_no is zero.  Only destroys table if it's not going to
12474         be reused.
12475         (replicate_table) New function.
12476         (output_table) Comment fix.
12477         (examine_table) Changed inline code to code calling
12478         replicate_table().  Calculates htv.  Supports partial tables.
12479         (draw_title) Removed comment.
12480         (build_target) Only allows for title on first part of partial
12481         tables.
12482         (dump_plain_table) Only resets table chunk number on first part
12483         of partial tables; FIXME: doesn't work quite right.  Supports
12484         partial tables.
12485         (dump_page) Titles only on first part of partial tables.
12486
12487 Fri Jul  5 20:16:19 1996  Ben Pfaff  <blp@gnu.org>
12488
12489         * Thanks to an unreliable IDE hard drive, I have spent the last
12490         day reconstructing my Debian GNU/Linux installation and redoing
12491         the previous day's changes--somehow I managed to save every file
12492         except for output.c and output.h.  So the following changes could
12493         really be considered independent of the output.c, output.h changes
12494         from Jul 4.
12495
12496         * output.h, output.c: Moved the outp_configure_vec global var,
12497         outp_names struct, and enum set OUTP_S_* from output.h to output.c.
12498         outp_configure_vec is now static.
12499         
12500 Thu Jul  4 20:20:24 1996  Ben Pfaff  <blp@gnu.org>
12501
12502         * The entire philosophy behind configuration of the output drivers
12503         changed.  Now there is a termcap-type configuration where drivers
12504         to be read are determined beforehand, rather than parsing the
12505         entire output init file and storing it in memory & deciding what
12506         to actually use later.  Faster & more memory-efficient at the same
12507         time, cool.
12508         
12509         * output.c: Comment fix.  Removed outp_init_drivers global var.
12510         Removed all references to synonyms.  New structure outp_defn.  New
12511         global vars outp_macros, outp_configure_vec.
12512         (search_name, delete_name, add_name, check_configure_vec,
12513         expand_name, find_defn_value) New static functions.
12514         (outp_configure_clear, outp_configure_add, outp_configure_macro,
12515         outp_read_devices) New extern functions.
12516         (outp_init) Much functionality moved into outp_read_devices.
12517         (outp_read_devices) Format of output init file changed; name of
12518         file is `devices' rather than `output' to avoid Makefile
12519         conflicts.
12520         (outp_clear) Renamed outp_done.
12521         (outp_list_classes) Bug fix, cleaned up.
12522         (outp_list_drivers) Not implemented anymore.
12523         (outp_configure_driver) Now a static function; simplified; now
12524         interpolates macros; supports new structure.
12525         (outp_enable_driver, match_synonym) Removed; all references
12526         removed.
12527         (find_driver) First argument removed.
12528         
12529         * output.h: Global var outp_init_drivers removed; new structure
12530         outp_names; new enum set OUTP_S_*; new global var
12531         outp_configure_vec; function prototypes for output.c exports
12532         updated.
12533         
12534         * main.c: (main) Calls outp_read_devices() after parsing the
12535         command line.
12536         
12537         * cmdline.c: (parse_command_line) New option -v --verbose;
12538         --version changed to -V.  --device option changed syntax to just
12539         take a single device name.  Accepts key=value declaration of
12540         output init file macros.  Syntax message updated.
12541
12542         * filename.c: (expand_line) New function.
12543         (interp_environ_vars) Renamed interp_vars; no longer uses
12544         fixed-size buffer.
12545         (blp_getenv) Allows $ARCH and $VER pseudo-environment-vars to be
12546         overridden by real environment vars.
12547         (search_path) Uses verbose_msg() instead of #ifdef'd printf().
12548         * filename.h: interp_environ_vars() renamed interp_vars().
12549         
12550         * error.c, error.h: Added extern variable `verbosity', message
12551         class MM.
12552         
12553         * error.c: (vmsg) Support message class MM.
12554         (verbose_msg) New function.
12555
12556         * descript.q: (generate_z_varname) Bug fix in generation of
12557         Z-score varnames.
12558         (dump_z_table) Bug fix in column headers.
12559         
12560         * ascii.c: (ascii_init_driver) Changed minimum number of lines per
12561         page from 29 to 15.  Don't set a default for ops[OPS_INIT,
12562         OPS_DONE].  Writes the uninit string when the driver is closed.
12563         (ascii_open_page) Write the init string before the first page.
12564         (output_shorts) Form of main loop changed from `while' to `for'.
12565         Bug fix with overstrikes: the character is printed *after* the
12566         backspace.  Eliminated a lot of `& 0xff' modifiers.
12567         (advance_to_left_margin) New function.
12568         (return_carriage, output_lines) Handle left margin.
12569
12570 Thu Jul  4 00:35:59 1996  Ben Pfaff  <blp@gnu.org>
12571
12572         * ascii.c: New option `carriage-return-style'.
12573
12574         * ascii.c: (count_fancy_chars) New function.
12575         (delineate, text_metrics) Use new function; bug fixes regarding
12576         rich text strings.
12577         (text_draw) Bug fix with rich text.
12578         (output_string, output_shorts) Reordered.
12579         (output_shorts) Now handles boxchars and some overstrike font
12580         changes.
12581         (output_char, return_carriage) New functions.
12582         (output_lines) Now handles overstriking and font changes properly;
12583         some code moved to output_shorts.
12584
12585 Tue Jul  2 22:13:23 1996  Ben Pfaff  <blp@gnu.org>
12586
12587         [GLOBAL_DEBUGGING]
12588         * ascii.c: New member `debug' in ascii_driver_ext.
12589         (ascii_init_driver, delineate) Uses new member.
12590
12591         Now you can set a vertical height on writing text.
12592         * ascii.c: (delineate) Keeps track of vertical position.
12593         (text_draw) No longer considers fully justified text an internal
12594         error.
12595         
12596         * output.h: New flag OUTP_T_VERT; other OUTP_T_ values changed.
12597
12598         Tables' titles are drawn; they can have variable height.
12599         * som.c: `som' struct has new member, title_height.
12600         (draw_title) New argument.  Moved within file.  All caller
12601         changed.
12602         (build_target) New argument, amount of space needed for first row.
12603         Calculates height of title, takes that into account.  All callers
12604         changed.
12605         (dump_plain_table, dump_columnated_table) Took calculation of y1,
12606         y2 out of loop.
12607         (dump_columnated_table) [GLOBAL_DEBUGGING] Debugging code
12608         improved.
12609         (dump_columnated_table) Organized for readability.
12610         (dump_page) Makes use of som.title_height.
12611
12612         * som.c: Many comment bug fixes.
12613
12614         * descript.q: (try_name, generate_z_name) Bug fix regarding
12615         generation of Z-score variable names.
12616         * var.h: Removed num from descriptives_proc; all referents removed.
12617
12618 Mon Jul  1 22:13:39 1996  Ben Pfaff  <blp@gnu.org>
12619
12620         * ascii.c: (ascii_line_horz, ascii_line_vert,
12621         ascii_line_intersection) Added debugging code.
12622
12623         Added a descriptive line above each table to describe it.
12624         * command.c: (parse_cmd) Calls som_new_series.
12625         
12626         * som.c: New static vars table_num, subtable_num.  New `som'
12627         member `title'.
12628         (dump_page) New arguments.
12629         (som_submit_table) Handle new variables.
12630         
12631         * som.c, som.h: (som_submit_table) New arguments.  All callers
12632         changed.
12633         (som_new_series) New function.
12634         (build_target) Makes room for extra line.
12635         (draw_title) New function.
12636         (dump_page) Calls draw_title.  Bug fix: doesn't always set
12637         som.ext->cp to 0.
12638         
12639         Columnation of tables support.
12640         * som.h: Deleted fr, lr, ri from som_table.  Reorganized.
12641         
12642         * som.c: Deleted references to fr, lr, ri.
12643         (som_columnate) Bux fix: sets group member of table.
12644         (som_add_options) Function removed.
12645         (dump_table) Split into three functions; extensively reworked.
12646         
12647         * descript.q: (dump_z_table) Better output table formatting; added
12648         title support to correspond to som.h changes.
12649         (display) Title support.
12650
12651         * output.h: Added OUTP_T_NONE.
12652         
12653 Mon Jul  1 13:00:00 1996  Ben Pfaff  <blp@gnu.org>
12654
12655         * descript.q: Improved handling of Z scores; still not perfect.
12656         
12657         * output.h, ascii.c: Added hook for getting em width of current
12658         font.
12659         
12660         * som.c: Uses new em-width hook.  Added debugging code to
12661         several functions.
12662         (som_columnate) New argument.
12663         (som_add_options) Removed.
12664
12665 Jun 29 17:40:47 1996  Ben Pfaff  <blp@gnu.org>
12666
12667         * som.h, som.c, output.c, output.h, ascii.c: Updated to work with
12668         rules as a property of the table instead of as a property of the
12669         cells.
12670         
12671         * ascii.c: Added `header' to table of options.
12672         
12673         * descript.q: Added even shorter statistic names; modified to work
12674         with new som interface.
12675         
12676         * misc.c (blp_getdelim): Bug fix.
12677         
12678         * version.c: includes 'conf.h'.
12679         
12680 ----------------------------------------------------------------------
12681 Local Variables:
12682 mode: change-log
12683 version-control: never
12684 End: