1ba566d1a088bea31f011b06319c3622317928be
[pspp-builds.git] / src / ChangeLog
1 Mon Oct 24 21:24:15 2005  Ben Pfaff  <blp@gnu.org>
2
3         Work to get rid of GCC 4.0 warnings, part 2.
4
5         In many files, change `unsigned char' to `char'.  This often
6         requires adding casts to <ctype.h> functions.
7
8         * data-in.c: (parse_A) Use buf_copy_rpad().
9
10         * str.c: (str_copy_buf_trunc) New function.
11
12         * value-labels.c: (value_to_string) Fix mistaken use of strncpy(),
13         by rewriting.
14
15 Mon Oct 24 13:42:32 WST 2005 John Darrington <john@darrington.wattle.id.au>
16
17         Moved some definitions to make it easier to abstract a dictionary 
18         from the rest of PSPP.
19
20         * format-prs.c lex-def.[ch]:  New files.
21
22         * Makefile.am lexer.[ch] dictionary.c vars-atr.c vfm.c algorithm.c 
23           format.c:  Moved some functions between modules.
24         
25 Sun Oct 23 19:28:08 2005  Ben Pfaff  <blp@gnu.org>
26
27         Work to get rid of GCC 4.0 warnings, part 1.
28         
29         In many files, change count parameters to parse_variables(),
30         etc. from `int' to `size_t'.  Also change related variables and
31         struct members.  Also change messages as needed (e.g. %d to %u
32         with cast to unsigned).  Also change arithmetic as necessary
33         (e.g. n >= m - 1 to n + 1 >= m). 
34
35         * crosstabs.q: (crs_custom_tables) Check for size_t overflow in
36         multiplication.
37
38         * q2c.c: (dump_declarations) Generate code for size_t instead of
39         int.
40         
41 Thu Oct 20 18:18:40 2005  Ben Pfaff  <blp@gnu.org>
42
43         * output.c: (outp_read_devices) Fix message.
44
45 Sat Sep 17 11:13:13 2005  Ben Pfaff  <blp@gnu.org>
46
47         * matrix-data.c: (cmd_matrix_data) Change type of variable whose
48         address is passed to dict_get_vars() from size_t to int to match
49         John's change below.
50
51         * modify-vars.c: (validate_var_modification) Ditto.
52
53 Mon Sep 12 19:26:06 WST 2005 John Darrington <john@darrington.wattle.id.au>
54
55         * dictionary.[ch]  Changed cnt from size_t* to int* since that's
56         what it's called as, and on  x86_64 machines they're different sizes.
57         
58         * str.c: (ds_vprintf) Copied va_list args so they can be re-used
59         
60 Sun Aug 21 00:12:24 2005  Ben Pfaff  <blp@gnu.org>
61
62         * lexer.c: (lex_sbc_only_once) New function.
63         (lex_sbc_missing) New function.
64
65 Sun Aug 21 00:00:47 2005  Ben Pfaff  <blp@gnu.org>
66
67         * case.h: (case_str) Make it return `unsigned char'.
68
69 Sat Aug 20 23:56:14 2005  Ben Pfaff  <blp@gnu.org>
70
71         Revamp SAVE, XSAVE, EXPORT.  Add (or at least parse) all the
72         subcommands that we didn't support.  Fix bug 13911.  Fix bug
73         reported by Adam Pierson (COMPRESSED and other subcommands didn't
74         work on SAVE).  Refactor all related code.
75         
76         * command.def: Add XEXPORT command.
77
78         * dictionary.c: (dict_delete_scratch_vars) New function.
79
80         * get.c: (cmd_get) Fix parsing.
81         (struct save_trns) Removed.
82         (cmd_save_internal) Removed.
83         (cmd_save) Removed.
84         (do_write_case) Removed.
85         (save_write_case_func) Removed.
86         (save_trns_proc) Removed.
87         (save_trns_free) Removed.
88         (trim_dictionary) Removed.
89         (struct export_proc) Removed.
90         (cmd_export) Rewrote.
91         (export_write_case_func) Removed.
92         (export_proc_free) Removed.
93         (enum writer_type) New enum.
94         (enum command_type) New enum.
95         (struct any_writer) New struct.
96         (any_writer_destroy) New function.
97         (parse_write_command) New function.
98         (any_writer_write_case) New function.
99         (parse_output_proc) New function.
100         (output_proc) New function.
101         (cmd_save) Rewrote.
102         (cmd_xsave) Rewrote.
103         (struct output_trns) New struct.
104         (parse_output_trns) New function.
105         (output_trns_proc) New function.
106         (output_trns_free) New function.
107         (cmd_xsave) Rewrote.
108         (cmd_xexport) New function.
109         (parse_dict_trim) New function.
110         (struct mtf_proc) Change `by_cnt' member type to `int'.
111         (cmd_import) Rewrote.
112
113         * pfm-write.c: (struct pfm_writer) Add `digits' member.
114         (pfm_writer_default_options) New function.
115         (pfm_open_writer) Add `opts' argument and handle options.
116         (write_float) Write only as many digits as `digits' member says.
117         (format_trig_double) Limit base-10 precision to LDBL_DIG.
118
119         * pfm-write.h: (enum pfm_type) Moved here from pfm-read.h.
120         (struct pfm_write_options) New struct.
121
122         * sfm-write.c: (sfm_writer_default_options) New function.
123         (sfm_open_writer) Remove `compress', `omit_long_names' args.  Add
124         `opts' argument.  Implement options.
125
126         * sfm-write.h: (struct sfm_write_options) New struct.
127
128         * expressions/helpers.c: (copy_string) Make `old' arg `unsigned
129         char *' instead of `char *'.
130         
131 Sat Aug  6 21:29:15 2005  Ben Pfaff  <blp@gnu.org>
132
133         * factor_stats.c: Needed <config.h> included earlier.
134
135         * percentiles.c: Needed to include <config.h>.
136
137         * val.h: Don't include "config.h".
138
139 Sat Aug  6 21:26:27 2005  Ben Pfaff  <blp@gnu.org>
140
141         Clean up treatment of missing values by moving all the code into
142         one place.  All references to the missing value function were
143         updated, but only major changes are detailed below.
144
145         * Makefile.am: Add missing-values.c, missing-values.h to sources.
146
147         * apply-dict.c: (cmd_apply_dictionary) Use mv_resize().
148
149         * dictionary.c: (dict_create_var) Initialize `miss' member with
150         mv_init().
151         (dict_clone_var) Copy `miss' member with mv_copy().
152         
153         * get.c: (mtf_merge_dictionary) Use mv_copy().
154
155         * missing-values.c: New file.
156         
157         * missing-values.h: New file.
158
159         * mis-val.c: Rewrite.  New version implements updated semantics.
160
161         * pfm-read.c: (read_variables) Rewrite missing value handling.
162
163         * pfm-write.c: (write_variables) Rewrite missing value handling.
164
165         * sfm-read.c: (read_variables) Rewrite missing value handling.
166
167         * sfm-write.c: (write_variable) Rewrite missing value handling.
168
169         * sfmP.h: Include "magic.h" to get definition of
170         second_lowest_value.
171
172         * sysfile-info.c: (describe_variable) Rewrite missing value
173         handling.
174
175         * val.h: Include "magic.h" to get definition of
176         second_lowest_value.
177
178         * var.h: Include "missing-values.h".  Drop MISSING_* enums.
179         (struct variable) Remove `miss_type', `missing'.  Add `miss'.
180
181         * vars-atr.c: (is_num_user_missing) Removed--use
182         mv_is_num_user_missing().
183         (is_str_user_missing) Removed--use mv_is_str_user_missing().
184         (is_system_missing) Removed--use mv_is_value_system_missing().
185         (is_missing) Removed--use mv_is_value_missing().
186         (is_user_missing) Removed--use mv_is_value_user_missing().
187         
188 Sun Jul 31 14:09:57 2005  Ben Pfaff  <blp@gnu.org>
189
190         Adopt use of gnulib for portability.
191
192         * Make.build: Add $(top_srcdir)/gl and $(top_builddir)/gl to
193         include path.
194
195         * Makefile.am: Remove bool.h, stat.h and change getline.[ch] to
196         getl.[ch] in pspp_SOURCES.  Remove libmisc, add libgl in
197         pspp_LDADD.
198
199         * In many source files, added an explicit inclusion of gettext.h
200         and definition of _ macro.  These are no longer in pref.h because
201         it interfered with definitions in a few gnulib source files.
202
203         * In many source files, changed #include "bool.h" to #include
204         <stdbool.h>, which is provided by gnulib.
205
206         * alloc.c: Removed functions defined in gnulib:
207         (xmalloc) Removed.
208         (xcalloc) Removed.
209         (xrealloc) Removed.
210         (xstrdup) Removed.
211         (out_of_memory) Redefined as wrapper for xalloc_die().
212
213         * alloc.h: Replace prototypes by #include "xalloc.h".
214
215         * casefile.c: Use full_read() and full_write() from gnulib instead
216         of our home-grown versions.
217         (full_read) Removed.
218         (full_write) Removed.
219
220         * getline.c: Renamed getl.c.
221
222         * getline.h: Renamed getl.h, updated all references.
223
224         * filename.c: (fn_readlink) Change to wrapper around xreadlink()
225         from gnulib.
226
227         * glob.c: Just #include <time.h> instead of the crazy rigmarole
228         here before.
229         (init_glob) Call set_program_name() to initial gnulib progname
230         module.
231
232         * html.c: (postopen) Use getlogin_r(), gethostname() from gnulib.
233
234         * permissions.c: Use "stat-macros.h" from gnulib.
235
236         * postscript.c: Just #include <time.h> instead of the crazy
237         rigmarole here before.
238
239         * q2c.c: (main) Make generated code #include "gettext.h".
240
241         * str.h: Get rid of most explicit declarations of standard
242         functions, in favor of including gnulib header files.
243
244         * expressions/evaluate.c: Ditto.
245
246         * expressions/operations.h.pl: Make generated code #include
247         <stdbool.h>, not "bool.h".
248
249 Sat Jul 30 23:13:17 2005  Ben Pfaff  <blp@gnu.org>
250
251         * expressions/parse.c: (validate_function_args) Fix two msg() bugs
252         found by -Wformat.
253
254 Sat Jul 30 23:10:01 2005  Ben Pfaff  <blp@gnu.org>
255
256         * expressions/evaluate.c: (expr_debug_print_postfix) Don't pass
257         null pointer to printf for %.*s.
258
259 Sat Jul 30 23:05:33 2005  Ben Pfaff  <blp@gnu.org>
260
261         * vars-atr.c: (var_is_valid_name) Fix three msg() bugs found by
262         -Wformat.
263
264 Sat Jul 30 22:58:33 2005  Ben Pfaff  <blp@gnu.org>
265
266         * rank.q: (parse_rank_function) Fix msg() bug found by -Wformat.
267
268 Sat Jul 30 22:56:12 2005  Ben Pfaff  <blp@gnu.org>
269
270         * postscript.c: (postopen) Cast `char' to `unsigned char' before
271         passing to isspace().
272
273 Sat Jul 30 22:52:09 2005  Ben Pfaff  <blp@gnu.org>
274
275         * pfm-read.c: (read_variables) Fix msg() bug found by -Wformat.
276
277 Sat Jul 30 22:50:57 2005  Ben Pfaff  <blp@gnu.org>
278
279         * histogram.c: Include <config.h>.
280
281 Sat Jul 30 22:48:50 2005  Ben Pfaff  <blp@gnu.org>
282
283         * get.c: (cmd_match_files) Fix msg() bug found by -Wformat.
284
285 Sat Jul 30 22:46:10 2005  Ben Pfaff  <blp@gnu.org>
286
287         * format.c: (check_common_specifier) Fix msg() bug found by
288         -Wformat.
289         (check_output_specifier) Ditto.
290
291 Sat Jul 30 22:43:57 2005  Ben Pfaff  <blp@gnu.org>
292
293         * file-handle.q: (cmd_file_handle) Fix msg() bug found by
294         -Wformat.
295
296 Sat Jul 30 22:41:44 2005  Ben Pfaff  <blp@gnu.org>
297
298         * data-in.c: (parse_Z) [WORDS_BIGENDIAN] Don't declare buf[], to
299         avoid "unused variable" warning.
300
301 Sat Jul 30 22:38:46 2005  Ben Pfaff  <blp@gnu.org>
302
303         * command.c: (find_word) Cast `char' to `unsigned char' before
304         passing to isspace().
305
306 Sat Jul 30 22:36:29 2005  Ben Pfaff  <blp@gnu.org>
307
308         * case.c: (case_compare) Implement as delegating to
309         case_compare_2dict().
310
311 Sat Jul 30 22:34:18 2005  Ben Pfaff  <blp@gnu.org>
312
313         * algorithm.c: Inclusion of <alloca.h> is unneeded.
314
315 Sat Jul 30 22:01:32 2005  Ben Pfaff  <blp@gnu.org>
316
317         * Make.build: Don't append -ansi to AM_CFLAGS for GCC.  Using
318         -ansi changes the behavior of header files significantly.  It
319         causes __STRICT_ANSI__ to be defined, and some headers interpret
320         that as cause to e.g. not use `long long' or __attribute__.  The
321         former example is bad when off_t is supposed to be `long long',
322         and the latter prevents -Wformat from working.
323
324 Sun Jul 24 20:26:59 2005  Ben Pfaff  <blp@gnu.org>
325
326         Get rid of dependency on libgmp by writing our own routine for
327         floating-point base conversion.
328
329         * pfm-write.c: (write_float) Rewrote.
330         (write_int) Rewrote.
331         (pow30_nonnegative) New function.
332         (pow30) New function.
333         (trig_to_char) New function.
334         (format_trig_digits) New function.
335         (recurse_format_trig_int) New function.
336         (format_trig_int) New function.
337         (should_round_up) New function.
338         (try_round_up) New function.
339         (format_trig_double) New function.
340
341 Sun Jul 24 18:49:20 2005  Ben Pfaff  <blp@gnu.org>
342
343         * data-in.c: (parse_numeric) Allow "1+23" even for F format, for
344         compatibility.
345
346 Sun Jul 24 18:47:37 2005  Ben Pfaff  <blp@gnu.org>
347
348         * pfm-read.c: (read_version_data) Read and ignore author field.
349
350 Wed Jul  6 20:44:27 2005  Ben Pfaff  <blp@gnu.org>
351
352         * get.c: (mtf_processing) Don't assume that
353         mtf_compare_BY_values() always returns -1, 0, or 1.  Actually, it
354         returns a negative, zero, or positive result.  Fixes MATCH FILES
355         bug on Mac OS X reported by "Marshall DeBerry" <mdb@radix.net>.
356
357 Mon Jul  4 18:01:15 2005  Ben Pfaff  <blp@gnu.org>
358
359         * flip.c: [HAVE_SYS_TYPES_H] Really include <sys/types.h>.  The
360         preprocessor test for sys/types.h was accidentally inverted.  This
361         was bug 12789.
362
363 Sun Jul  3 22:47:39 2005  Ben Pfaff  <blp@gnu.org>
364
365         * get.c: (cmd_match_files) Fix memory leak on `by' and on
366         `vfm_source'.
367
368         * getline.c: [HAVE_LIBREADLINE] (read_console) Fix memory leak on
369         `line'.
370
371         * vfm.c: (close_active_file) Remove unnecessary test.
372
373 Sun Jul  3 21:45:32 2005  Ben Pfaff  <blp@gnu.org>
374
375         Fix NDEBUG compile errors.
376
377         * hash.h: Needed explicit #include <assert.h>.
378
379         * linked-list.c: (ll_next) First arg is UNUSED when NDEBUG is
380         defined.
381
382 Sun Jun 12 23:44:38 2005  Ben Pfaff  <blp@gnu.org>
383
384         Implement embedding for PostScript driver.  Fixes bug 12970.
385
386         * ascii.c: Fix compiler warnings.
387
388         * html.c: Ditto.
389
390         * chart.h: Add `file' member.
391
392         * output.h: (struct outp_class) initialise_chart, finalise_chart
393         should take outp_driver *, not outp_class *.  Update all
394         references.
395
396         * plot-chart.c: (chart_create) Fix segfault when there are no
397         output drivers at all.
398         (chart_submit) Call d->class->finalise_chart.
399
400         * postscript.c: (ps_open_page) Set cp_y to 0.
401         (ps_submit) New function.
402         (ps_chart_initialise) Implement.
403         (ps_chart_finalise) Implement.
404         (static var postscript_class) Add ps_submit.
405         (static var epsf_class) Add ps_submit.
406         
407
408 Sun Jun 12 14:54:40 2005  Ben Pfaff  <blp@gnu.org>
409
410         Did some more work on bug 12859 and then realized that a *good*
411         solution would require some fundamental restructuring.  For now,
412         I'm marking REPEATING DATA unimplemented, and then we can revisit
413         it post-0.4.0.
414         
415         * command.def: Make REPEATING DATA unimplemented.
416
417         * data-list.c: (cmd_repeating_data) Assume inline file is 80
418         characters wide.
419         (realize_value) Revert previous changes; no longer needed.
420         Updated all callers.
421
422         * error.c: (err_hcf) Set nfile_loc, mfile_loc to 0 after freeing
423         file_loc, to avoid bad references later.
424
425         * str.c: Fix typo.
426
427 Tue Jun  7 00:14:09 2005  Ben Pfaff  <blp@gnu.org>
428
429         Make some code tolerant of reentry.  Should not be needed if other
430         code is correct but it is good to be generally tolerant.
431         
432         * error.c: (err_hcf) Set file_loc to null after free().
433
434         * output.c: (outp_done) Similar changes.
435
436         * str.c: (ds_destroy) Ditto.
437         
438 Tue Jun  7 00:10:20 2005  Ben Pfaff  <blp@gnu.org>
439
440         Continue work on bug 12859, plus some code cleanup.
441         
442         * data-list.c: (cmd_repeating_data) Replace `seen' bitmap by
443         boolean variables.  Don't try to compute starts_end, cont_end for
444         inline file.  Calculate length only after parsing variable
445         specifications.  Add proper transformation to list.
446         (realize_value) If the rpd_num_or_var has no value, return new
447         DEFAULT_MEMBER argument (for use with inline file).
448         (repeating_data_trns_proc) Pass default values.
449
450         * dfm-read.c: (dfm_close_reader) Only skip data if *not* still
451         open, and only if we actually started reading data.
452
453 Sun Jun  5 18:39:36 2005  Ben Pfaff  <blp@gnu.org>
454
455         Fix bug 11894.
456         
457         * output.c: (outp_read_devices) Fix message.
458
459 Fri May 27 12:34:43 WST 2005 John Darrington <john@darrington.wattle.id.au>
460         
461         * sort-prs.[ch] (newfiles), aggregate.c, sort.[ch]: Separated the guts 
462         of the sort algorithm from the parser for the SORT command.
463         
464         * rank.q: Added the parser for the RANK command.
465         
466 Thu May 26 12:29:21 2005  Ben Pfaff  <blp@gnu.org>
467
468         Fix bug 13192.
469
470         * sort.c: (sort_parse_criteria) Only set *saw_direction if
471         saw_direction is non-null.  Thanks to John Darrington for
472         reporting this bug.
473
474 Tue May 24 21:52:55 2005  Ben Pfaff  <blp@gnu.org>
475
476         * get.c: (mtf_processing) Handle case of a lookup table as the
477         active file.  Thanks to John Darrington for reporting this bug.
478
479 Wed May 25 10:27:02 WST 2005 John Darrington <john@darrington.wattle.id.au>
480         
481         * alloc.c alloc.h: (xcalloc) changed signature to imitate the
482         POSIX  calloc function.
483         
484         * crosstabs.q get.c vars-prs.c: Updated calls to xcalloc to
485         reflect new signature.
486
487         * sfm-read.c: Now much more robust in the face of badly formed
488         system files.
489
490 Mon May 23 11:57:31 WST 2005 John Darrington <john@darrington.wattle.id.au>
491
492         *sfm-read.c: Fixed some bugs regarding long string continuation
493         records, which the previous fix uncovered.
494
495 Sat May 21 12:48:34 WST 2005 John Darrington <john@darrington.wattle.id.au>
496
497         * sfm-read.c, sfmP.h:  Allow reading of system files when the 
498         case_size value in the header is -1.  Also changed some Errors to 
499         Warnings when reading system files.
500
501 Tue May 17 21:00:57 2005  Ben Pfaff  <blp@gnu.org>
502
503         * data-list.c: (data_list_trns_free) Don't free the argument
504         because cancel_transformations() will do that itself.
505         (data_list_source_destroy) Destroy the argument to
506         data_list_trns_free(), because it no longer does so itself.
507
508 Tue May 17 18:29:35 2005  Ben Pfaff  <blp@gnu.org>
509
510         * data-out.c: (format_and_round) Don't output leading `-' if value
511         rounds to zero.
512
513 Tue May 17 00:06:43 2005  Ben Pfaff  <blp@gnu.org>
514
515         Fix bug 11119.
516
517         * som.c: (output_encodings) If some cell in the table won't fit
518         with the horizontal or vertical headers, cancel those headers.
519
520         * som.h: (struct som_table_class) Add fits_width, fits_length,
521         set_headers members.
522
523         * tab.c: (tabi_fits_width) New function.
524         (tabi_fits_length) New function.
525         (tabi_set_headers) New function.
526         (global var tab_table_class) Add the new functions as appropriate
527         members.
528         
529 Mon May 16 22:34:06 2005  Ben Pfaff  <blp@gnu.org>
530
531         Fix rest of bug 13054.
532
533         * format.def: Fix EDATE, SDATE, ADATE, JDATE, QYR, MOYR, WKYR,
534         DATETIME, TIME system/portable file values.
535
536 Mon May 16 22:31:15 2005  Ben Pfaff  <blp@gnu.org>
537
538         * data-list.c: (parse_free) Use make_input_format().
539         
540         * data-out.c: (num_to_string) Use make_output_format().
541
542         * dictionary.c: (dict_create_var) Ditto.
543
544         * format.c: (global var f8_2) New var.
545         (make_input_format) New function.
546         (make_output_format) New function.
547
548         * get.c: (cmd_match_files) Use make_output_format().
549
550         * list.q: (cmd_list) Ditto.
551
552         * matrix-data.c: Ditto.
553
554         * sfm-read.c: (parse_format_spec) Check output specifier
555         thoroughly.
556
557         * tab.c: (tab_float) Use make_output_format().
558
559 Sun May 15 23:38:10 2005  Ben Pfaff  <blp@gnu.org>
560
561         Fix more of bug 13054.
562         
563         * format.def: FMT_A should allow 255-character output.  FMT_AHEX
564         should allow 510-character input and output.
565
566         * data-out.c: (num_to_string) Get rid of NEW_STYLE option.
567         (convert_E) Handle non-finite values.
568         (try_F) Rewrite.
569         (format_and_round) New function.
570         (convert_infinite) New function used by try_F() and convert_E().
571
572 Sun May 15 23:36:55 2005  Ben Pfaff  <blp@gnu.org>
573
574         Regularize string and buffer function names so that they make some
575         kind of sense.
576
577         * str.c: (mm_reverse) Rename buf_reverse().  Update all
578         references.
579         (mm_find_reverse) Rename buf_find_reverse().  Update all
580         references.
581         (mm_case_compare) Rename buf_compare_case().  Update all
582         references.
583         (st_compare_pad) Rename buf_compare_rpad().  Update all
584         references.
585         (str_compare_rpad) New function.
586         (st_bare_pad_copy) Rename buf_copy_str_rpad().  Update all
587         references.
588         (buf_copy_str_lpad) New function.
589         (st_bare_pad_len_copy) Rename buf_copy_rpad().  Update all
590         references.
591         (st_pad_copy) Rename str_copy_rpad().  Update all references.
592         (st_trim_copy) Rename str_copy_trunc().  Update all references.
593         (st_uppercase) Renamed str_uppercase().  Update all references.
594         
595 Sat May 14 08:22:26 WST 2005 John Darrington <john@darrington.wattle.id.au>
596
597         * dfm-read.c: Fixed polarity of test in dfm-close-reader.  Closes 
598         Bug #13082
599
600 Tue May 10 20:08:18 2005  Ben Pfaff  <blp@gnu.org>
601
602         * data-in.c: (data_in) Add assertion to check input specifier.
603
604         * data-out.c: (data_out) Add assertion to check output specifier.
605
606 Tue May 10 19:56:35 2005  Ben Pfaff  <blp@gnu.org>
607
608         Start to fix bug 13054.
609
610         * format.c: (check_input_specifier) Improve error message.
611         (check_input_specifier) Check F, COMMA, and DOLLAR formats for
612         valid decimal places.
613         (check_output_specifier) Ditto (but different criteria).
614         (convert_fmt_ItoO) Assert valid input and output specifiers.
615         Also, if input specifier has *any* decimal places, make the output
616         specifier 1 place wider.
617
618 Mon May  9 07:14:29 WST 2005 John Darrington <john@darrington.wattle.id.au>
619
620         * sysfile-info.c: Fixed bug [# 13024 ]
621
622 Sun May  8 13:52:12 2005  Ben Pfaff  <blp@gnu.org>
623
624         "Fix" bug 13021 by disabling FILE TYPE.  Eventually, we should
625         actually implement it.
626
627         * command.c: (FILE_TYPE_okay) Always return 1.
628
629         * command.def: Change FILE TYPE, END FILE TYPE into UNIMPL.
630
631         * file-type.c: Add prototypes to get rid of warnings.
632
633 Sun May  8 08:08:07 WST 2005 John Darrington <john@darrington.wattle.id.au>
634
635         * barchart.c box-whisker.c cartesian.c piechart.c plot-hist.c: Fixed 
636         more ISO/IEC 9899:1990 conformance issues.
637
638 Wed May  4 23:54:02 2005  Ben Pfaff  <blp@gnu.org>
639
640         Fix bug 12948.  See also new test in
641         tests/bugs/match-file-scratch.sh.
642         
643         * get.c: (mtf_merge_dictionary) Don't compact dictionary because
644         that deletes scratch variables that someone else might be using,
645         and because we can't reassign our sources' value indexes.
646         Instead, simply don't copy scratch variables into the master
647         dictionary.
648
649         * dictionary.c: (dict_compact_values) Delete variables from the
650         dictionary passed in, not from default_dict (!).
651
652 Tue May  3 22:25:17 2005  Ben Pfaff  <blp@gnu.org>
653
654         Improve hash.c comments, error-checking.
655         
656         * hash.c: (struct hsh_table) [NDEBUG] Add hash_ordered member.
657         (hsh_create) size == 0 should *not* return NULL!  Set
658         hash_ordered.
659         (hsh_clear) Set hash_ordered.
660         (locate_matching_entry) Check hash_ordered.
661         (hsh_rehash) Rename rehash().  Add assertion.  Set hash_ordered.
662         (hsh_data) Set hash_ordered.  Add const-ness to return value and
663         update all callers.
664         (hsh_sort) Ditto.       
665
666 Wed May  4 08:50:11 WST 2005 John Darrington <john@darrington.wattle.id.au>
667
668         * casefile.c: Removed unnecessary #include <valgrind/valgrind.h>
669
670 Tue May  3 19:14:48 WST 2005 John Darrington <john@darrington.wattle.id.au>
671
672         * copyleft.c: Updated copyright date.
673
674         * Makefile.am: Removed erroneous explicit "-lplot"
675
676         * examine.q oneway.q: Made these files conform to ISO/IEC 9899:1990
677
678 Tue May  3 16:20:31 WST 2005 John Darrington <john@darrington.wattle.id.au>
679
680         * command.c command.def: Added description string for unimplemented commands.
681
682         * oneway.q: Sorted the hash tables before shipping out the results. Closes 
683         bug [#12931].
684
685 Mon May  2 23:45:01 2005  Ben Pfaff  <blp@gnu.org>
686
687         Code improvements.
688         
689         * data-list.c:  (parse_fixed) Use lex_end_of_command().
690         (parse_free) Ditto.
691         (cmd_repeating_data) Set cont_end.num in right situations.
692         (parse_repeating_data) Remove redundant test.
693
694 Mon May  2 23:37:19 2005  Ben Pfaff  <blp@gnu.org>
695
696         Partial fix for bug 12859.
697         
698         * data-list.c: (cmd_data_list) Add transformation properly in
699         vfm_source == NULL case.
700
701 Mon May  2 23:27:28 2005  Ben Pfaff  <blp@gnu.org>
702
703         * lexer.c: (lex_error) Improve error messages.
704
705 Mon May  2 22:28:17 2005  Ben Pfaff  <blp@gnu.org>
706
707         * get.c: (cmd_match_files) Check token type before trying to match
708         tokid.  Fixes bug 12923.
709
710 Mon May  2 22:16:51 2005  Ben Pfaff  <blp@gnu.org>
711
712         * flip.c: [HAVE_SYS_TYPES_H] Include <sys/types.h>.  Fixes bug
713         12789.
714
715 Mon May  2 22:02:52 2005  Ben Pfaff  <blp@gnu.org>
716
717         * expressions/generate.pl: (get_token) Make use of /g
718         backward-compatible with Perl 5.6.1.
719
720 Sun May  1 23:00:19 2005  Ben Pfaff  <blp@gnu.org>
721
722         * var-display.c: (cmd_variable_alignment) Fix memory leak.
723         (cmd_variable_level) Ditto.
724
725 Sun May  1 22:49:04 2005  Ben Pfaff  <blp@gnu.org>
726
727         Hash table had buggy deletion function.  The fix required changing
728         other functions to do probing in the required order.
729
730         * hash.c: (locate_matching_entry) Rewrite and change interface.
731         (hsh_rehash) Rewrite to use locate_matching_entry().
732         (hsh_probe) Ditto.
733         (hsh_find) Ditto.
734         (hsh_delete) Ditto.  Also, fix stupid bugs.
735
736 Sun May  1 22:24:58 2005  Ben Pfaff  <blp@gnu.org>
737
738         * dictionary.c: (dict_clone) Properly copy vectors.
739
740 Sun May  1 22:07:58 2005  Ben Pfaff  <blp@gnu.org>
741
742         New implementation of long variable names.  Each variable has a
743         "normal" name, which may be up to 64 bytes long and which is used
744         for all normal operations.  Variables may have a "short" name,
745         which is limited to 8 bytes and used only for system and portable
746         file input and output.
747         
748         Make tokid case-preserving.  Update most uses of tokid to treat it
749         case-insensitively.
750
751         Update many commands to deal with long variable names.
752
753         * autorecode.c: (cmd_autorecode) Use strcasecmp() instead of strcmp().
754
755         * command.c: (cmd_parse) Ditto.
756         (match_strings) Use toupper() before comparing characters.
757         (conflicting_3char_prefixes) Use mm_case_compare() instead of
758         memcmp().
759         (cmd_match_words) Ditto.
760
761         * compute.c: (lvalue_parse) Use st_trim_copy() instead of
762         strncpy().
763
764         * count.c: (struct cnt_var_info) Change n[] to fit long var name.
765         Use st_trim_copy() instead of strcpy().
766
767         * data-in.c: (parse_enum) Use mm_case_compare() instead of
768         memcmp().
769
770         * data-list.c: (struct dls_var_spec) Change name[] to fit long var
771         name.
772         (parse_free) Use st_trim_copy() instead of strcpy().
773
774         * descript.c: (struct dsc_var) Change z_name[] to fit long var
775         name.
776         (try_name) Use strcasecmp() instead of strcmp().
777         (generate_z_varname) Use st_trim_copy() instead of strcpy().
778         (descriptives_compare_dsc_vars) Use strcasecmp() instead of
779         strcmp().
780
781         * dictionary.c: (struct dictionary) Removed `long_name_tab'
782         member.
783         (compare_long_names) Removed.
784         (hash_long_name) Removed.
785         (dict_create) Don't initialize `long_name_tab' member.
786         (dict_clone) Copy short names into new dictionary. 
787         (dict_clear) Don't clear `long_name_tab' member.
788         (dict_get_varname_block) Removed.
789         (dict_add_longvar_entry) Removed.
790         (free_nte) Removed.
791         (dict_destroy) Don't destroy `long_name_tab' member.
792         (dict_create_var_from_short) Removed.
793         (dict_create_var_x) Removed.
794         (dict_create_var) Get rid of longname handling.
795         Clear short name.
796         (dict_clone_var) Get rid of longname parameter and longname
797         handling.
798         (dict_lookup_var) Get rid of longname handling.
799         (dict_reorder_var) New function.
800         (dict_rename_var) Clear short name.
801         (dict_rename_vars) Get rid of longname handling.  Clear short
802         names.
803         (dict_create_vector) Support long vector names.
804         (dict_lookup_vector) Use strcasecmp() instead of strcmp().
805         (quasi_base27) Removed.
806         (make_short_name) Removed.
807         (compare_strings) New function.
808         (hash_string) New function.
809         (dict_assign_short_names) New function.
810
811         * file-handle.q: (get_handle_with_name) Use strcasecmp() instead
812         of strcmp().
813         (get_handle_for_filename) Support long handle names.
814
815         * file-type.c: (struct col_spec) Make `name' fit long var names.
816         (cmd_file_type) Use strcasecmp() instead of strcmp().
817
818         * flip.c: (make_new_var) Rewrite.
819         (flip_sink_write) Use st_trim_copy() instead of strncpy().
820
821         * format.c: (parse_format_specifier_name) Use mm_case_compare()
822         instead of memcmp().
823
824         * get.c: (cmd_save_internal) Rephrase.
825         (rename_variables) Drop test for identical variable name.
826         (struct mtf_proc) Change `first', `last' to fit long var name.
827
828         * hash.c: (hsh_hash_case_string) New function for case-insensitive
829         string hashing.
830
831         * lexer.c: (restore_token) Use st_trim_copy() instead of
832         strncpy().
833         (lex_get) Don't uppercase string when copying into tokid.
834         (lex_put_back_id) Use st_trim_copy() instead of
835         strncpy().
836
837         * list.q: (determine_layout) Consider length of variable names in
838         choosing vertical layout.
839
840         * matrix-data.c: (cmd_matrix_data) Use strcasecmp() instead of
841         strcmp().
842         (string_to_content_type) Ditto.
843
844         * modify-vars.c: (compare_variables_given_ordering) Ditto.
845         (struct var_renaming) Change `new_name' to fit long var name.
846         (compare_var_renaming_by_new_name) Use strcasecmp() instead of
847         strcmp().
848
849         * pfm-read.c: (read_variables) Disallow system variables in system
850         files.
851         (write_variables) Call dict_assign_short_names() and use
852         short_name[] members.
853
854         * repeat.c: (internal_cmd_do_repeat) Use strcasecmp() instead of
855         strcmp().
856
857         * sfm-read.c: (sfm_open_reader) Rewrite code for long variable
858         map.  Reorder variables into same order as long variable map.
859         (read_variables) Set short name.
860
861         * sfm-write.c: (sfm_open_writer) Call dict_assign_short_names().
862         (write_variable) Use st_bare_pad_copy().
863         (write_longvar_table) Rewrite.
864
865         * str.c: (mm_case_compare) New function.
866
867         * sysfile-info.c: (compare_vectors_by_name) Use strcasecmp()
868         instead of strcmp().
869
870         * t-test.q: (tts_custom_groups) Remove redundant test.
871         (tts_custom_pairs) Ditto.
872
873         * var.h: (struct variable) Change `name' to fit long var names.
874         Remove `longname'.  Add `short_name' member.  Reorder some
875         variables.
876         (struct name_table_entry) Removed.
877         (struct vector) Change `name' to fit long vector names.
878
879         * vars-atr.c: (var_is_valid_name) Allow long var names.
880         (compare_var_names) Use strcasecmp() instead of strcmp().
881         (compare_var_ptr_names) Ditto.
882         (hash_var_name) Use hsh_hash_case_string().
883         (hash_var_ptr_name) Ditto.
884         (var_set_short_name) New function.
885         (var_clear_short_name) New function.
886         (var_set_short_name_suffix) New function.
887
888         * vars-prs.c: (parse_DATA_LIST_vars) Support long names.
889         Use strcasecmp() instead of strcmp().
890         (struct array_var_set) Removed `longname_tab'.
891         (array_var_set_lookup_var_idx) Drop longname_tab support.
892         (array_var_set_destroy) Don't destroy `longname_tab'.
893         (var_set_create_from_array) Don't create `longname_tab'.
894
895         * vector.c: (cmd_vector) Use strcasecmp() instead of strcmp().
896         Support long names.
897
898         * expressions/parse.c: (word_matches) Use mm_case_compare()
899         instead of memcmp().
900         (compare_strings) New function.
901         (lookup_function) Use compare_strings() instead of strcmp().
902         
903 Sun May  1 22:07:43 2005  Ben Pfaff  <blp@gnu.org>
904
905         * algorithm.c: (move_element) New function.
906
907 Sun May  1 22:05:35 2005  Ben Pfaff  <blp@gnu.org>
908
909         * aggregate.c: (parse_aggregate_functions) Always initialize
910         destvar.
911
912 Sun May  1 22:03:47 2005  Ben Pfaff  <blp@gnu.org>
913
914         * aggregate.c: (cmd_aggregate) Use dict_clone_var_assert().
915
916         * dictionary.c: (dict_clone) Ditto.
917         (dict_clone_var_assert) New function.
918
919         * get.c: (mtf_merge_dictionary) Use dict_clone_var_assert().
920
921 Sun May  1 15:05:54 WST 2005 John Darrington <john@darrington.wattle.id.au>
922
923         * error.c: Added a string for the compiler version to the
924         request_bug_report_and_abort function.
925
926         * groff_font.c, font.c: Removed manpage(1) style references from 
927         comments, because RMS frowns upon them.
928
929 Thu Apr 28 18:52:06 2005  Ben Pfaff  <blp@gnu.org>
930
931         * expressions/parse.c: Improve previous fix for bug 12858 (LAG).
932
933 Fri Apr 29 09:28:00 WST 2005 John Darrington <john@darrington.wattle.id.au>
934
935         * expressions/parse.c: Added handler for OP_LAG_Vn and OP_LAG_Vs.  
936         Fixed bug [#12858] .
937
938 Wed Apr 27 12:42:34 WST 2005 John Darrington <john@darrington.wattle.id.au>
939
940         * loop.c recode.c repeat.c: Fixed a couple of instances of SHORT_NAME_LEN 
941         which should be LONG_NAME_LEN
942
943 Wed Apr 27 07:43:50 WST 2005 John Darrington <john@darrington.wattle.id.au>
944
945         * command.def echo.c:  Added the ECHO command.
946
947 Mon Apr 25 22:55:59 2005  Ben Pfaff  <blp@gnu.org>
948
949         Finish fixing MATCH FILES (bug 11677).
950
951         * get.c: (trim_dictionary) Rewrite in terms of drop_variables(),
952         keep_variables(), rename_variables().
953         (drop_variables) New function.
954         (keep_variables) New function.
955         (struct mtf_file) Rename `in' to `in_name'.  Add `in_var'.
956         (cmd_match_files) Deal with in_var.  Use drop_variables(),
957         keep_variables().  When IN is specified, require BY.  Set master
958         variables after master dictionary is complete.  Add IN variables
959         after master dictionary is complete.
960         (mtf_free_file) Free `in_name'.
961         (mtf_delete_file_in_place) Set in_var value to 0.
962         (mtf_read_nonactive_records)  Rephrase.
963         (mtf_processing) Support IN.  Rephrase.  Fix bugs.
964         (mtf_merge_dictionary) Don't set master variables; we do that
965         later now.
966         (get_master) Don't insist that there's a master variable.
967         
968 Mon Apr 25 22:55:22 2005  Ben Pfaff  <blp@gnu.org>
969
970         Kluge to make some variable renaming sort of work.
971         Needs real fix.
972
973         * dictionary.c: (dict_rename_var) Call dict_add_longvar_entry().
974
975 Mon Apr 25 22:52:28 2005  Ben Pfaff  <blp@gnu.org>
976
977         Add functions for comparing sets of variables between cases.
978         Use the functions.
979
980         * case.c: (case_compare) New function.
981         (case_compare_2dict) New function.
982         
983         * aggregate.c: (struct agr_proc) Remove `prev_break' member.  Add
984         `break_case'.
985         (cmd_aggregate) Nullify break_case.  Don't call
986         initialize_aggregate_info().
987         (agr_destroy) Destroy break_case.
988         (aggregate_single_case) Rewrite.  Use case_compare().
989         (dump_aggregate_info) Copy from break_case into output.
990         (initialize_aggregate_info) Copy break_case from input.
991
992         * get.c: (mtf_compare_BY_values) Use case_compare_2dict().
993
994         * vfm.c: (equal_splits) Use case_compare().
995
996 Sat Apr 23 17:01:04 WST 2005 John Darrington <john@darrington.wattle.id.au>
997
998         * dictionary.c vars-prs.c sfm-write.c: Fixed some memory leaks
999
1000 Sun Apr 17 23:08:15 2005  Ben Pfaff  <blp@gnu.org>
1001
1002         Start work on fixing MATCH FILES.
1003
1004         * get.c: (enum operation) Remove OP_MATCH.
1005         (trim_dictionary) Change return value to bool.  Don't support
1006         OP_MATCH.
1007         (struct mtf_file) Remove `first', `last' members.
1008         (struct mtf_proc) Add `first', `last' members.  Change mtf_case
1009         from `struct ccase *' to `struct ccase'.  Remove `by' member.
1010         (cmd_match_files) Essentially rewrite.
1011         (mtf_free) Don't free `by' member.  Destroy `mtf_case' member.
1012         (mtf_read_nonactive_records) mtf_ parameter is not unused.
1013         (mtf_processing) Ditto.  Also rephrase some code.
1014         (mtf_merge_dictionary) Rewrite for easy comprehension.  
1015
1016 Sun Apr 17 23:06:00 2005  Ben Pfaff  <blp@gnu.org>
1017
1018         * matrix-data.c: (wr_output_data) [DEBUGGING] Fix compilation
1019         error.
1020
1021         * q2c.c: (dump_token) [DEBUGGING] Fix compilation error.
1022         
1023 Thu Apr 14 2005 John Darrington
1024
1025         * var-display.c: New file.
1026
1027         * format.h var.h sfm-read.c sfm-write.c dictionary.c :  Added 
1028           display_width, measure and alignment parameters to variables.
1029
1030         * aggregate.c command.def compute.c count.c data-list.c descript.c
1031           dictionary.c dictionary.h expr-prs.c file-type.c flip.c get.c 
1032           lexer.c lexer.h loop.c modify-vars.c pfm-read.c recode.c repeat.c 
1033           sfm-read.c sfm-write.c sfm-write.h sfmP.h val-labs.c val.h var.h 
1034           vars-prs.c vector.c :  
1035               - Replaced literal constants representing maximum variable name 
1036                 length with macro definitions. 
1037               - Added support for long variable names.
1038               - Changed lexer such that it no longer makes tokens upper
1039                 case, but relies upon case insensitive behaviour of commands.
1040
1041 Mon Apr  4 22:27:34 2005  Ben Pfaff  <blp@gnu.org>
1042
1043         * aggregate.c: (parse_aggregate_functions) If dict_create_var()
1044         fails, don't dereference the resulting null pointer (bug 12427).
1045         Also, fix double free error.
1046
1047 Sat Mar 19 23:06:02 2005  Ben Pfaff  <blp@gnu.org>
1048
1049         * aggregate.c: (parse_aggregate_functions) Fix N_NO_VARS format.
1050         (accumulate_aggregate_info) Set int1 to 1 for SUM.
1051         (dump_aggregate_info) Only make SUM non-missing if there was at
1052         least one variate.
1053
1054 Sat Mar 19 14:48:19 2005  Ben Pfaff  <blp@gnu.org>
1055
1056         * aggregate.c: (dump_aggregate_info) Properly test whether the
1057         destination variable is numeric, when making the result
1058         system-missing for columnwise missing values.
1059
1060 Mon Mar 14 21:52:34 2005  Ben Pfaff  <blp@gnu.org>
1061
1062         * misc.h: Remove GCC specializations.
1063
1064 Mon Mar 14 21:07:23 2005  Ben Pfaff  <blp@gnu.org>
1065
1066         Make sort stable (bug 12313).
1067         
1068         * sort.c: Don't need to include some headers anymore.
1069         (static var min_buffers) New variable.
1070         (static var max_buffers) New variable.
1071         (static var allow_internal_sort) New variable.
1072         (cmd_sort_cases) Add test mode.
1073         (sort_execute) Rephrase.
1074         (do_internal_sort) Don't try internal sorting if
1075         allow_internal_sort is set.
1076         (struct external_sort) Renamed `initial_runs' to `runs' and
1077         updated all references.
1078         (macro MIN_BUFFER_TOTAL_SIZE_RECS) Removed.
1079         (macro MIN_BUFFER_SIZE_BYTES) Removed.
1080         (macro MIN_BUFFER_SIZE_RECS) Removed.
1081         (compare_initial_runs) Removed.
1082         (struct record_run) Add member `idx'.
1083         (write_initial_runs) Pass increasing values to process_case() as
1084         index.
1085         (process_case) Add `idx' parameter and use it to initialize new
1086         `idx' member.
1087         (allocate_cases) Limit allocated buffers to max_buffers.
1088         (compare_record_run) Use new `idx' member for last resort
1089         comparison, for stability.
1090         (end_run) Call casefile_sleep() on irs->casefile, to prevent
1091         running out of file descriptors.
1092         (struct merge_state) Removed.
1093         (merge) Don't need to allocate cases.  Always use MAX_MERGE_ORDER
1094         unless we have fewer runs left.  Always merge consecutive runs,
1095         for stability.  Return the final run.
1096         (mod) Removed.
1097         (choose_merge) New function.
1098         (merge_once) Rewritten.
1099
1100 Mon Mar 14 21:05:42 2005  Ben Pfaff  <blp@gnu.org>
1101
1102         * cmdline.c: (static var testing_mode) Move into
1103         parse_command_line().
1104         
1105 Mon Mar 14 21:05:13 2005  Ben Pfaff  <blp@gnu.org>
1106
1107         * algorithm.c: (remove_range) New function.
1108         (remove_element) New function.
1109
1110         * dictionary.c: (dict_delete_var) Use remove_element().
1111
1112         * flip.c: (cmd_flip) Ditto.
1113
1114 Sun Mar 13 22:52:05 2005  Ben Pfaff  <blp@gnu.org>
1115
1116         * file-handle.q: (struct file_handle) `open_mode' should not be
1117         const.
1118         
1119 Sun Mar 13 22:40:54 2005  Ben Pfaff  <blp@gnu.org>
1120
1121         First phase of making SORT CASES stable (bug 12313).
1122
1123         * sort.c: (struct indexed_case) New structure.
1124         (do_internal_sort) Rewrite to make internal sorting stable.
1125         (compare_case_dblptrs) Removed.
1126         (compare_indexed_cases) New function.
1127
1128 Sun Mar 13 22:38:40 2005  Ben Pfaff  <blp@gnu.org>
1129
1130         Clean-ups.
1131
1132         * casefile.c: (casereader_read_xfer_assert) New function.
1133
1134         * dictionary.c: (dict_compact_case) New function.
1135
1136         * flip.c: (struct flip_pgm) New member idx_to_fv.
1137         (cmd_flip) Initialize idx_to_fv member.
1138         (destroy_flip_pgm) Free idx_to_fv member.
1139         (flip_sink_write) Use struct flip_pgm member instead of case_sink
1140         member.
1141         (flip_sink_write) Ditto.
1142
1143         * vfm.c: (write_case) Use dict_compact_case() instead of
1144         compact_case().
1145         (compact_case) Removed.
1146         (storage_source_create) Removed `dict' parameter.  All references
1147         updated.
1148
1149         * vfm.h: (struct case_source) Removed `value_cnt' member.  All
1150         references removed.
1151         (struct case_sink) Removed `dict', `idx_to_fv' members.  All
1152         references removed.
1153
1154 Sun Mar 13 22:35:55 2005  Ben Pfaff  <blp@gnu.org>
1155
1156         More AGGREGATE fixes.
1157
1158         * aggregate.c: (accumulate_aggregate_info) Implement NMISS and
1159         NUMISS for strings.  Fix FOUT, POUT, FGT, FLT, FIN, FOUT for
1160         strings.
1161         (initialize_aggregate_info) Fix initialization for MIN, MAX for
1162         strings.
1163
1164 Sat Mar 12 23:26:21 2005  Ben Pfaff  <blp@gnu.org>
1165
1166         Start work on testing and debugging AGGREGATE.
1167
1168         * aggregate.c: (cmd_aggregate) Use discrete bool variables instead
1169         of a bit-map.  Require proper subcommand ordering.  Make OUTFILE
1170         subcommand mandatory.
1171         (parse_aggregate_functions) Check that PIN, POUT, FIN, FOUT
1172         functions' arguments are in the correct order and swap them if
1173         not.
1174         (accumulate_aggregate_info) Make SUM include weights.  Add various
1175         string functions.
1176         (dump_aggregate_info) Add various string functions.
1177         (initialize_aggregate_info) Initialize int1 for MIN, MAX.
1178
1179         * sort.c: (sort_parse_criteria) Add parameter for returning
1180         whether any directions were specified.  All callers updated.
1181
1182 Sun Mar 13 14:54:27 WST 2005 John Darrington <john@darrington.wattle.id.au>
1183
1184         * t-test.q: Fixed erroneous logic in compare_group_binary.
1185
1186 Sat Mar 12 13:29:21 2005  Ben Pfaff  <blp@gnu.org>
1187
1188         * split-file.c: (cmd_split_file) Ignore LAYERED and SEPARATE
1189         keywords (bug 11628).
1190
1191 Sat Mar 12 13:17:12 2005  Ben Pfaff  <blp@gnu.org>
1192
1193         * vfm.c: (procedure_with_splits) Fix bug 11492: end_func() must be
1194         called *before* close_active_file().
1195
1196 Sat Mar 12 12:20:57 2005  Ben Pfaff  <blp@gnu.org>
1197
1198         * file-handle.q: (struct file_handle) Change open_mode from
1199         character pointer to 3-char array, for safety.  Updated all
1200         references.
1201
1202 Sat Mar 12 12:15:49 2005  Ben Pfaff  <blp@gnu.org>
1203
1204         Thanks to Ben Kujala <bkujala@oregonchildcare.org> for reporting
1205         these bugs.
1206         
1207         * pfm-read.c: (read_header) Improve error message for many cases
1208         in which the input is not actually a portable file.
1209
1210         * file-handle.q: (fh_open) When we give an error message, actually
1211         return NULL.
1212
1213 Fri Mar 11 11:50:30 2005  Ben Pfaff  <blp@gnu.org>
1214
1215         * format.c: (check_common_specifier) New function for checks
1216         common to check_input_specifier() and check_output_specifier().
1217         (check_input_specifier) Use check_common_specifier().
1218         (check_output_specifier) Use check_common_specifier().
1219         (check_string_specifier) Removed.
1220         (check_specifier_type) New function.
1221         (check_specifier_width) New function.
1222         (get_format_var_width) Fix bug.
1223
1224         * formats.c: (internal_cmd_formats) Only accept numeric variables.
1225
1226         * lexer.c: (check_id) Rename lex_id_to_token(), make public,
1227         update all references.  Make case-insensitive.
1228
1229         * pfm-read.c: Essentially rewrite the whole file.  Now much
1230         cleaner.
1231
1232         * print.c: (check_string_width) New function.
1233         (fixed_parse_compatible) Use check_string_width(),
1234         check_specifier_type().
1235         (dump_fmt_list) Ditto.
1236
1237         * str.c: (st_trim_copy) New function.
1238         (st_uppercase) New function.
1239
1240         * vars-atr.c: (var_is_valid_name) New function.
1241         
1242         * expressions/parse.c: (type_coercion_core) Use
1243         check_specifier_type().
1244         
1245 Fri Mar 11 11:31:24 2005  Ben Pfaff  <blp@gnu.org>
1246
1247         * expressions/evaluate.c: (cmd_debug_evaluate) Fix memory leaks.
1248
1249         * expressions/parse.c: (no_match) Ditto.
1250
1251 Wed Mar  9 09:54:27 2005  Ben Pfaff  <blp@gnu.org>
1252
1253         * Makefile.am: (pspp_LDADD) Add libgsl-extras.a.
1254
1255         * expressions/helpers.c: (struct func_params) Removed.
1256         (generalized_idf) Removed.
1257         (cdf_beta) Removed.
1258         (idf_beta) Removed.
1259         (idf_fdist) Use gslextras_cdf_beta_Pinv() instead of idf_beta().
1260
1261         * expressions/operations.def: Implement IDF.BETA, CDF.BINOM,
1262         CDF.GEOM, CDF.HYPER, CDF.NEGBIN, CDF.POISSON using gsl-extras.
1263         Implement SIG.F, which I had overlooked previously.
1264
1265 Tue Mar  8 12:47:53 WST 2005 John Darrington <john@darrington.wattle.id.au>
1266
1267         * command.c command.def glob.[ch] cmdline.c: Made DEBUG cmds
1268         available only in testing mode.
1269
1270 Sun Mar  6 23:25:40 2005  Ben Pfaff  <blp@gnu.org>
1271
1272         * data-in.c: Use `bool' throughout, where relevant.
1273
1274 Sun Mar  6 19:52:22 2005  Ben Pfaff  <blp@gnu.org>
1275
1276         DATA LIST with free-field formats should not have implied decimal
1277         places (bug 12035).  Also clean up data-in.c a bit.
1278
1279         * data-in.h: (enum) Add DI_IMPLIED_DECIMALS.
1280
1281         * data-in.c: (apply_implied_decimals) New function.
1282         (parse_numeric) Don't adjust exponent if DI_IMPLIED_DECIMALS not
1283         set.  Also, get rid of gotos.
1284         (parse_Z) Use apply_implied_decimals() if the field doesn't
1285         contain a decimal point.
1286         (parse_N) Use apply_implied_decimals().
1287         (parse_IB) Ditto.
1288         (parse_PIB) Ditto.
1289         (parse_P) Ditto.
1290         (parse_PK) Ditto.
1291         (to_roman) Removed.
1292         (parse_enum) New function.
1293         (macro CHAR_IS_ROMAN) Removed.
1294         (macro ROMAN_VALUE) Removed.
1295         (parse_month) Use parse_enum().
1296         (parse_weekday) Use parse_enum().
1297         (parse_DATETIME) Use long for weekday.
1298
1299         * data-list.c: (read_from_data_list_fixed) Use
1300         DI_IMPLIED_DECIMALS.
1301
1302 Sun Mar  6 17:07:20 2005  Ben Pfaff  <blp@gnu.org>
1303
1304         When the lexer sees something like `-5' in the input, it has to
1305         decide whether it's a negative numeric constant token or a '-'
1306         token followed by a positive numeric constant token.  It always
1307         decides on the former, and then the parser can call
1308         lex_negative_to_dash() if it wants the latter.  However, this
1309         doesn't work for the case of `-0', because negative zero is
1310         (portably) indistinguishable from positive zero.  So now we divide
1311         T_NUM into two tokens, T_POS_NUM and T_NEG_NUM, to make the
1312         distinction clear.  This requires a little bit of extra effort,
1313         because there were several references to T_NUM in the code base.
1314         
1315         * lexer.c: (lex_get) Use T_NEG_NUM and T_POS_NUM to distinguish
1316         positive and negative numeric constants.
1317         (lex_double_p) Renamed lex_is_number().  Changed return type to
1318         bool.  Updated all relevant references to T_NUM to instead use
1319         this function.
1320         (lex_double) Renamed lex_number().  All references updated.
1321         (lex_integer_p) Renamed lex_is_integer().  Changed return type to
1322         bool.  All references updated.
1323         (lex_token_representation) Understand T_NEG_NUM and T_POS_NUM.
1324         (lex_negative_to_dash) Ditto.
1325         (dump_token) Ditto.
1326         
1327         * lexer.h: (enum) Add T_POS_NUM, T_NEG_NUM.  Remove T_NUM.
1328
1329 Sun Mar  6 22:09:20 2005  Ben Pfaff  <blp@gnu.org>
1330
1331         * expressions/operations.def: (NUMBER) Use DI_IMPLIED_DECIMALS.
1332
1333 Sun Mar  6 19:33:24 2005  Ben Pfaff  <blp@gnu.org>
1334
1335         * expressions/operations.def: (VEC_ELEM_NUM) Treat user-missing
1336         values as system-missing.
1337
1338         * expressions/parse.c: (parse_vector_element) Fix order of
1339         arguments in call to expr_allocate_binary().
1340
1341 Sun Mar  6 17:51:05 2005  Ben Pfaff  <blp@gnu.org>
1342
1343         * expressions/optimize.c: (optimize_tree) Fix optimization bug for
1344         x**2.
1345
1346         * expressions/parse.c: (type_coercion_core) Set *node to NULL on
1347         failure, as indicated by function comment.
1348         (parse_binary_operators) Always return NULL on type_coercion()
1349         failure.  Should have been doing this anyway, but bug in
1350         type_coercion_core() filtered through.
1351         (parse_add) Fix typo in user message.
1352         (parse_primary) Understand T_NEG_NUM and T_POS_NUM.
1353
1354 Sun Mar  6 10:47:13 2005  Ben Pfaff  <blp@gnu.org>
1355
1356         * expressions/operations.def: Add VALUE function.
1357
1358         * expressions/parse.c: (parse_function) Need an unary composite
1359         node for variables in A TO B, not a variable node.  Use
1360         allocate_unary_variable().
1361         (parse_primary) Use allocate_unary_variable().
1362         (allocate_unary_variable) New function.
1363
1364 Thu Mar  3 23:53:32 2005  Ben Pfaff  <blp@gnu.org>
1365
1366         * expressions/PSPP_expressions.pm: Renamed it back to generate.pl
1367         but fixed the real problem that was preventing the build from a
1368         separate directory.  I liked it my way better ;-)
1369         
1370 Thu Mar  3 23:17:51 2005  Ben Pfaff  <blp@gnu.org>
1371
1372         * expressions/parse.c: (expr_parse) Fix parameter type.  Thanks to
1373         John Darrington <john@darrington.wattle.id.au> for reporting this
1374         bug.
1375
1376 Thu Mar  3 22:10:25 WST 2005 John Darrington <john@darrington.wattle.id.au>
1377
1378         * expressions/Makefile.am expressions/evaluate.h.pl
1379           expressions/evaluate.inc.pl expressions/operations.h.pl
1380           expressions/optimize.inc.pl expressions/parse.inc.p:
1381
1382           Renamed generate.pl to PSPP_expressions.pm and adjusted *.pl
1383           to suit. 
1384
1385           Fixed everything so that it can be built from an arbitrary
1386           directory.
1387         
1388 Thu Mar  3 22:08:35 WST 2005 John Darrington <john@darrington.wattle.id.au>
1389
1390         * Makefile.am : Fixed up CLEANFILES target.
1391
1392 Mon Feb 28 23:49:56 2005  Ben Pfaff  <blp@gnu.org>
1393
1394         * str.h: Changed `struct len_string' to `struct fixed_string', a
1395         more accurate name.  Updated all references.
1396
1397 Mon Feb 28 23:35:30 2005  Ben Pfaff  <blp@gnu.org>
1398
1399         Redo calendar support.  Should now be bug-for-bug compatible.
1400         
1401         * calendar.c: New file.
1402
1403         * calendar.h: New file.
1404
1405         * data-in.c: Use new calendar functions.
1406         (parse_sign) Change sense of return value.
1407         (calendar_error) New function.
1408         (ymd_to_ofs) New function.
1409         (ymd_to_date) New function.
1410         (parse_DATE) Use new function.
1411         (parse_ADATE) Ditto.
1412         (parse_EDATE) Ditto.
1413         (parse_SDATE) Ditto.
1414         (parse_JDATE) Ditto.
1415         (parse_QYR) Ditto.
1416         (parse_MOYR) Ditto.
1417         (parse_WKYR) Ditto.
1418         (parse_TIME) Ditto.
1419         (parse_DTIME) Ditto.
1420         (parse_DATETIME) Ditto.
1421
1422         * data-out.c: (convert_date) Use new calendar functions.
1423
1424         * error.c: (err_vmsg) Changed interface to be more sensible.
1425         Updated all callers.
1426         (dump_message) Don't double new-lines (why did we do this
1427         anyway?).
1428
1429 Mon Feb 28 23:30:25 2005  Ben Pfaff  <blp@gnu.org>
1430
1431         * sfmP.h: (macro flt64) Moved here from pref.h.orig.
1432         (macro FLT64_MAX) Moved here from pref.h.orig.
1433
1434 Mon Feb 28 23:28:01 2005  Ben Pfaff  <blp@gnu.org>
1435
1436         * set.q: Support SET EPOCH.
1437         (static var set_epoch) New var.
1438         (aux_stc_custom_epoch) New function.
1439         (stc_custom_epoch) New function.
1440         (get_epoch) New function.
1441         (stc_custom_pager) [USE_INTERNAL_PAGER] Fix bug.
1442
1443         * format.c: Make it possible just to check whether a specifier is
1444         valid without emitting an error message.
1445         (parse_format_specifier_name) Change interface, update all
1446         callers.
1447         (check_input_specifier) Ditto.
1448         (check_output_specifier) Ditto.
1449         (parse_format_specifier) Ditto.
1450
1451 Mon Feb 28 23:24:08 2005  Ben Pfaff  <blp@gnu.org>
1452
1453         * command.def: Add DEBUG POOL.
1454
1455         * pool.c: (pool_destroy) Fix bug in deleting this pool from its
1456         parent.
1457         (pool_clear) Properly account for size of pool gizmo.
1458         (pool_realloc) Ditto.
1459         (pool_clone) New function.
1460
1461         * pool.h: Mark our allocation functions MALLOC_LIKE.
1462
1463 Mon Feb 28 23:21:26 2005  Ben Pfaff  <blp@gnu.org>
1464
1465         * Makefile.am: Move many definitions into new top-level
1466         Make.build.  Add expressions to SUBDIRS.  Add calendar.c,
1467         calendar.h.  Remove expr-evl.c, expr-opt.c expr-prs.c, expr.h,
1468         exprP.h, expr.def.
1469
1470         * case.c: (case_resize) New function.
1471         (case_swap) New function.
1472
1473         * casefile.c: Include mkfile.h.
1474
1475 Fri Feb 25 21:11:35 WST 2005 John Darrington <john@darrington.wattle.id.au>
1476
1477         * sfm-read.c: Fixed a buglet which caused a crash when trying
1478         to read a non-existent file.
1479
1480 Sun Feb 13 16:11:13 2005  Ben Pfaff  <blp@gnu.org>
1481
1482         Fix bug 11955.
1483
1484         * aggregate.c: (parse_aggregate_functions) Code cleanup.
1485         Important part: get rid of spurious copying of function->format to
1486         destvar->print and destvar->write.
1487
1488 Fri Feb 11 00:08:36 2005  Ben Pfaff  <blp@gnu.org>
1489
1490         Fix bug 11916, which was confusing a variable's `index' member
1491         with the variable's position in a var_set.  Although these are
1492         usually the same, they are not for array `var_set's.
1493         
1494         Took advantage of this bug as an opportunity to clean up and
1495         rewrite parse_var_set_vars().
1496
1497         * vars-prs.c: (parse_vs_variable_idx) New function.
1498         (parse_vs_variable) Reimplement in terms of
1499         parse_vs_variable_idx().
1500         (parse_var_idx_class) New function.
1501         (add_variable) New function.
1502         (add_variables) New function.
1503         (parse_var_set_vars) Rewritten.
1504         (struct var_set) Change `lookup_var' member that returns a
1505         variable into `lookup_var_idx' member that returns an int.
1506         Updated the var set implementations in obvious corresponding ways.
1507         Used compare_var_ptr_names(), hash_var_ptr_name() just added.
1508         
1509 Fri Feb 11 00:06:03 2005  Ben Pfaff  <blp@gnu.org>
1510
1511         Use our global variable compare & hash functions and give them
1512         better names.  Add similar functions for dealing with double
1513         pointers to variables.
1514         
1515         * vars-atr.c: (compare_variables) Renamed compare_var_names().
1516         (hash_variable) Renamed hash_var_name().
1517         (compare_var_ptr_names) New function.
1518         (hash_var_ptr_name) New function.
1519         
1520         * t-test.q: (cmd_t_test) Use global compare_var_names(),
1521         hash_var_name().
1522         (compare_var_name) Removed.
1523         (hash_var_name) Removed.
1524
1525 Fri Feb 11 00:04:39 2005  Ben Pfaff  <blp@gnu.org>
1526
1527         Fix dictionary bug.
1528         
1529         * dictionary.c: (compare_variable_dblptrs) Rename
1530         compare_var_ptrs() and fix it to properly dereference the double
1531         pointers.
1532
1533 Mon Feb  7 09:58:15 WST 2005 John Darrington <john@darrington.wattle.id.au>
1534
1535         crosstabs.q examine.q oneway.q q2c.c:  Added a q2c feature to 
1536         declare subcommands as mandatory.  Closed bug #11843
1537
1538 Sat Feb  5 20:35:10 WST 2005 John Darrington <john@darrington.wattle.id.au>
1539         
1540         * getline.c command.[ch] command.def:  Added (very rudimentary)
1541         support for line  completion when in interactive mode.  Partially 
1542         addresses bug #11693
1543         
1544 Mon Jan 31 09:52:51 WST 2005 John Darrington <john@darrington.wattle.id.au>
1545
1546         * examine.q factor_stats.c oneway.q output.c pfm-read.c: Fixed some
1547         problems revealed by valgrind.
1548
1549
1550 Wed Jan 26 11:44:11 WST 2005 John Darrington <john@darrington.wattle.id.au>
1551
1552         * set.q: Affixed a fix to the previous fix such that we'll be OK now
1553         whether or not PAGER is set.
1554
1555 Wed Jan 26 09:25:54 WST 2005 John Darrington <john@darrington.wattle.id.au>
1556
1557         * set.q: Copied the string produced by getenv("PAGER") thus avoiding
1558         "invalid free" errors.  Hopefully fixes bug #11722
1559
1560         * compute.c expr-prs.c: Check that lvalues are populated before 
1561         attempting to destroy them.  Closes bug #11676
1562
1563 Tue Jan 25 21:01:43 WST 2005 John Darrington <john@darrington.wattle.id.au>
1564
1565         * aggregate.c: Initialised the complete agr_proc structure.
1566         Closes bug #11675
1567
1568
1569 Sun Jan 23 23:02:21 2005  Ben Pfaff  <blp@gnu.org>
1570
1571         * print.c: (print_trns_free) Close the dfm writer if there is one,
1572         fixing a memory leak.
1573
1574 Mon Jan 24 12:24:36 WST 2005 John Darrington <john@darrington.wattle.id.au>
1575
1576         * glob.c oneway.q q2c.c t-test.q vfm.c: Still *more* memory leaks 
1577         fixed.
1578
1579
1580 Fri Jan 21 19:54:14 WST 2005 John Darrington <john@darrington.wattle.id.au>
1581
1582         * linked-list.[ch] Added
1583
1584         * examine.q file-handle.[hq] font.h glob.c groff-font.c postscript.c 
1585           set.q:    Yet more memory leaks
1586
1587 Tue Jan 18 23:12:40 WST 2005 John Darrington <john@darrington.wattle.id.au>
1588
1589         * t-test.q examine.q : More memory leaks fixed.
1590
1591 Tue Jan 18 19:26:59 WST 2005 John Darrington <john@darrington.wattle.id.au>
1592
1593         * examine.q  factor_stats.[ch] get.c pfm-read.c: Plugged numerous
1594         memory leaks.
1595
1596 Mon Jan 10 14:43:45 WST 2005 John Darrington <john@darrington.wattle.id.au>
1597
1598         * ascii.c cartesian.c casefile.c chart.h devind.c 
1599           examine.q frequencies.q
1600           html.c output.h piechart.c plot-chart.c plot-hist.c
1601
1602           Integrated the chart rendering into the output stream
1603           (currently only works for html).
1604           
1605           Removed gratuitous use of ifndef NO_CHARTS, and replaced with
1606           dummy-chart.c for compiling without charts.
1607
1608         * mkfile.[ch] Created.  
1609
1610         * som.[ch] tab.[ch]: Changed name of som_table to som_entity
1611         Added type element so we can tell if it's a chart or a table.
1612
1613         * chart.h examine.q piechart.c plot-chart.c plot-hist.c: changed the 
1614         API of charts to be more like that of tables.
1615
1616 Thu Jan 13 21:00:02 WST 2005 John Darrington <john@darrington.wattle.id.au>
1617
1618         * casefile.c main.c: Moved the SIGINT handler from casefile.c to
1619         main.c. Removed the handler for SIGQUIT.
1620
1621 Mon Jan 10 14:43:45 WST 2005 John Darrington <john@darrington.wattle.id.au>
1622
1623         * casefile.c: Added a signal handler to delete temp files on 
1624         SIGINT and SIGQUIT
1625
1626         * permissions.c Inhibited the PERMISSIONS command when SAFER is on.
1627
1628         * command.def Added a lot more unimplemented commands.
1629
1630         * copyleft.[ch] cmdline.c Moved legal information to copyleft.c
1631
1632 Sat Jan  8 23:58:34 2005  Ben Pfaff  <blp@gnu.org>
1633
1634         * sort.c: (compare_initial_runs) Needed additional level of
1635         dereferencing.
1636         (merge_once) Fix plenty of stupid mistakes.
1637
1638 Sat Jan  8 23:55:27 2005  Ben Pfaff  <blp@gnu.org>
1639
1640         * casefile.c: (casefile_sleep) Need to flush_buffer() after
1641         calling casefile_to_disk() or we will lose the last block in the
1642         file if the casefile started out as disk-based.
1643         (casefile_get_reader) Initialize reader->destructive to 0.
1644         (cmd_debug_casefile) Add new test pattern.
1645         (test_casefile) Define new test pattern to make sure
1646         casefile_sleep() works properly.
1647
1648 Fri Jan  7 08:00:05 WST 2005 John Darrington <john@darrington.wattle.id.au>
1649
1650         * Makefile.am chart.[ch]  histogram.[ch] piechart.c (Modified);
1651           plot-hist.c plot-chart.c (Added) Reorganised these files in an
1652           attempt to seperate the creation and processing of charts from their
1653           actuall renedering.
1654
1655         * examine.q frequencies.q generated charts conditional upon the NO_CHARTS
1656           macro.
1657
1658 Thu Jan  6 18:48:58 WST 2005 John Darrington <john@darrington.wattle.id.au>
1659
1660         * main.c Added a signal handler for SIGFPE
1661
1662         * sort.c Somewhat more robust fix to the previous entry.
1663
1664 Wed Jan  5 21:23:31 2005  Ben Pfaff  <blp@gnu.org>
1665
1666         * sort.c: (merge) Fix assertion for proper Huffman merge pattern:
1667         0 == 1 modulo 1.  See Knuth 5.4.9 (vol. 3, 2nd ed.,
1668         pp. 361).  Thanks to John Darrington <john@cellform.com.au> for
1669         reporting the bug.
1670
1671 Wed Jan  5 22:42:26 WST 2005 John Darrington <john@darrington.wattle.id.au>
1672
1673         * case.h Fixed bug # 11307
1674         
1675 Wed Jan  5 08:30:48 WST 2005 John Darrington <john@darrington.wattle.id.au>
1676
1677         * val-labs.c Fixed bug which caused a crash if VALUE LABELS had
1678         a trailing slash.
1679
1680 Mon Jan  3 17:44:37 2005  Ben Pfaff  <blp@gnu.org>
1681
1682         * pfm-read.c: (read_variables) Remove direct manipulation of
1683         v->aux, which is no longer needed.  Fixes bug 11483.
1684
1685 Sat Jan  1 19:01:16 WST 2005 John Darrington <john@darrington.wattle.id.au>
1686
1687         * data-list.c Fixed a bug in parsing delimiters.
1688
1689         * group.c vars-atr.c Fixed buglet in hash/compare functions for alpha
1690         values.
1691
1692         * percentiles.c Properly handled calculation of Tukey hinges where
1693         the number of data is small.
1694
1695         * oneway.q Used the generic value_to_string function for independent
1696         variable instead of trying to do it ourselves.
1697
1698         * box-whisker.c Fixed a buglet which caused a crash if the number of
1699         data was zero
1700
1701
1702 Fri Dec 31 16:47:45 WST 2004 John Darrington <john@darrington.wattle.id.au>
1703
1704         * examine.q box-whisker.c chart.h Implemented boxplots in EXAMINE
1705
1706         * percentiles.c Fixed some bugs when calculating percentiles when
1707         there's a small number of cases.
1708
1709 Wed Dec 29 08:18:08 WST 2004 John Darrington <john@darrington.wattle.id.au>
1710
1711         * percentiles.[ch] Added. Calculates percentiles and Tukey hinges
1712
1713         * examine.q factor_stats.[ch]  Added calculation of percentiles
1714
1715 Fri Dec 24 15:09:11 WST 2004 John Darrington <john@darrington.wattle.id.au>
1716
1717         * t-test.q Fixed bug #11227 Made t-test work when the independent
1718         variable is alpha
1719
1720 Sat Dec 11 11:43:45 WST 2004 John Darrington <john@darrington.wattle.id.au>
1721
1722         * factor_stats.c Fixed calculation of trimmed mean under various
1723         special conditions.
1724
1725 Sat Dec  4 17:14:45 WST 2004 John Darrington <john@darrington.wattle.id.au>
1726
1727         * histogram.c chart.[ch] factor_stats.c frequencies.q
1728
1729         Added code to calculate sensible histogram ranges and limits.
1730
1731 Thu Dec  2 13:37:43 WST 2004 John Darrington <john@darrington.wattle.id.au>
1732
1733         * chart.h Updated to reflect many API changes.
1734
1735         * cartesian.c chart.c Moved the definitions of chart_write_{xy}scale from 
1736         cartesian.c and into chart.c
1737
1738         * factorstats.[ch] Added the histogram calculations
1739
1740         * casefile.c Removed an unused variable.
1741
1742         * frequencies.q examine.q histogram.c  Reworked the API for 
1743         histograms.
1744
1745         * piechart.c  Revised the API for piecharts.
1746
1747         * var.h  Moved the definitions of freq_tab and freq out of var.h
1748         and into frequencies.q where they belong.
1749         
1750 Tue Nov 30 21:10:20 2004  Ben Pfaff  <blp@gnu.org>
1751
1752         * flip.c: (flip_file) Check for off_t separately from fseeko(),
1753         using AC_TYPE_OFF_T.
1754
1755 Tue Nov 30 08:47:41 2004  Ben Pfaff  <blp@gnu.org>
1756
1757         * flip.c: (flip_file) If fseeko() is not available, use long int
1758         for off_t.  Thanks to "Marshall DeBerry" <mdb@radix.net> for
1759         reporting the problem.
1760
1761 Mon Nov 29 12:20:59 WST 2004 John Darrington <john@darrington.wattle.id.au>
1762
1763         * examine.q factor_stats.[ch] Changed stderr to se_mean to avoid
1764         conflict with stdio.
1765
1766 Sun Nov 21 10:32:41 WST 2004 John Darrington <john@darrington.wattle.id.au>
1767
1768         * var-labs.c (var_to_string) Now returns null if the variable is null
1769
1770         * value-labels.c (value_to_string) Made it return null if either the 
1771         value or the variable is null.
1772
1773         * hash.c (hsh_clear) Fixed a buglet.
1774
1775         * examine.q  factor_stats.[ch] Largely  rewrote, because I'd started 
1776         with  the wrong model.
1777
1778         * casefile.[ch] Added a function to return the casereader.case_idx 
1779         member
1780
1781         * examine.q  Implemented the extreme values results.
1782
1783 John Darrington <john@darrington.wattle.id.au>
1784
1785         * settings.h set.c glob.[ch] frequencies.q q2c.c error.c lexer.[ch] 
1786           output.[ch] getline.c 
1787
1788           Plugged some memory leaks
1789
1790 Mon Nov 15 23:47:40 2004  Ben Pfaff  <blp@gnu.org>
1791
1792         Adopt GSL random number generators, paving the way for providing
1793         the complete suite of random number generators on expressions.
1794         
1795         * Makefile.am: Remove random.c, random.h.
1796
1797         * random.c: Removed.
1798
1799         * random.h: Removed.
1800
1801         * algorithm.c: (algo_default_random) Use GSL functions.
1802
1803         * casefile.c: (test_casefile) Use GSL RNG functions.
1804
1805         * expr-evl.c: (expr_evaluate) Use GSL RNG functions for OP_NORMAL,
1806         OP_UNIFORM.
1807
1808         * sample.c: (cmd_sample) Use GSL RNG functions.
1809         (sample_trns_proc) Ditto.
1810
1811         * set.q: (static var set_seed) Removed.
1812         (static var seed_flag) Removed.
1813         (static var rng) New variable.
1814         (aux_stc_custom_seed) No seed value anymore, don't print anything.
1815         (stc_custom_seed) Use new seed functions.
1816         (seed_is_set) Removed.
1817         (get_rng) New function that composes the entire external
1818         interface.
1819         (set_rng) New function.
1820         (random_seed) New function.
1821
1822 Mon Nov 15 22:08:25 2004  Ben Pfaff  <blp@gnu.org>
1823
1824         * expr-evl.c: (expr_evaluate) Fix XDATE.JDAY formula.  Thanks to
1825         John Darrington <john@darrington.wattle.id.au> for reporting this
1826         bug.
1827
1828 Tue Nov 16 13:19:18 WST 2004 John Darrington <john@darrington.wattle.id.au>
1829
1830         * permissions.c command.def Added the PERMISSIONS command
1831
1832 Mon Nov 15 01:33:32 2004  Ben Pfaff  <blp@gnu.org>
1833
1834         * q2c.c: (dump_header) Don't try to emit #includes at very top of
1835         output file because that will precede #include <config.h>, which
1836         is bad.
1837         (main) Add needed headers to /* (header) */ code.
1838
1839 Mon Nov 15 01:21:36 2004  Ben Pfaff  <blp@gnu.org>
1840
1841         Instead of making system or portable file readers responsible for
1842         dropping and reordering variables, make them read full cases and
1843         let the caller take care of any changes.
1844
1845         * get.c: New "case map" structure to handle this.  Use for GET,
1846         IMPORT, MATCH FILES.  Essentially rewrite the whole file.
1847
1848         * pfm-read.c: (pfm_read_case) Read into provided case.  Signature
1849         changed appropriately.
1850
1851         * sfm-read.c: (sfm_read_case) Ditto.
1852
1853 Mon Nov 15 00:47:45 2004  Ben Pfaff  <blp@gnu.org>
1854
1855         Decided that case_serialize() and case_unserialize() were too
1856         abstract.  Also we need a couple more functions to avoid excessive
1857         copying for data in/out fast paths.
1858
1859         * case.c: (case_serial_size) Removed.
1860         (case_serialize) Rename case_to_values() and make its argument
1861         explicitly an array of union values.
1862         (case_unserialize) Rename case_from_values() and make its argument
1863         explicitly an array of union values.
1864         (case_data_all) New function.
1865         (case_data_all_rw) New function.
1866
1867         * casefile.c: (struct casefile) Change buffer from array of
1868         unsigned char to array of union value for better accuracy.
1869         Redefine buffer_used and buffer_size in terms of values, not
1870         bytes.  Remove case_size because it is now redundant with
1871         value_cnt.  Fix up all references to these members.
1872
1873 Mon Nov 15 00:45:46 2004  Ben Pfaff  <blp@gnu.org>
1874
1875         * barchart.c: (struct subcat) Make `label' member const to silence
1876         GCC warning with -Wwrite-strings.
1877
1878         * cartesian.c: (struct dataset) Ditto.
1879
1880         * case.c: Don't re-define NDEBUG if already defined.
1881         Add lots of comments.
1882
1883         * str.c: Fix includes.
1884
1885         * crosstabs.q: Fix includes.
1886
1887         * examine.q: Fix includes.  Fix GCC warning about unused
1888         variables.
1889         
1890         * frequencies.q: (stat macro) Removed and replaced where used by
1891         its expansion.
1892
1893         * list.q: Fix includes.
1894
1895         * oneway.q: Fix includes.
1896
1897         * piechart.c: Fix includes.  Only define M_PI if not already
1898         defined.
1899
1900         * sfm-read.c: (bswap) New function.
1901         (bswap_int32) Write in terms of bswap.
1902         (bswap_flt64) Ditto.
1903
1904         * str.c: (ds_data) Add external definition here, needed because
1905         str.h has only an `extern inline' version.
1906
1907         * value-labels.c: Fix includes.
1908
1909 Mon Nov 15 00:40:55 2004  Ben Pfaff  <blp@gnu.org>
1910
1911         Instead of providing a system or portable file writer with a raw
1912         case in the format needed for output, provide it with a regular
1913         case.  The writer takes care of any needed translation.
1914
1915         * aggregate.c: Adopt new scheme for AGGREGATE.
1916         (struct agr_proc) sfm_agr_case member removed.
1917         (write_case_to_sfm) Removed because the new interface is easier to
1918         use.
1919
1920         * get.c: Adopt new scheme for SAVE, XSAVE, EXPORT.
1921
1922         * pfm-write.c: Implement new scheme.
1923
1924         * sfm-write.c: Ditto.
1925
1926 Mon Nov 15 00:32:24 2004  Ben Pfaff  <blp@gnu.org>
1927
1928         Instead of treating `struct file_handle' as a class to subclass
1929         into data files, system files, and portable files, instead use it
1930         as a helper that coordinates access.  Now it is opaque, too.
1931
1932         This means that most references to a struct file_handle are now
1933         changed into references to one of struct dfm_reader, struct
1934         dfm_writer, struct sfm_reader, struct sfm_writer, struct
1935         pfm_reader, or struct pfm_writer, according to what's being read
1936         or written.
1937
1938         Most related changes are only worth summarizing briefly.
1939
1940         * dictionary.c: (dict_clear) Destroy aux data in deleted
1941         variables.
1942         (dict_clear_aux) New function.
1943         (dict_create_var) Initialize aux, aux_dtor.
1944         (dict_delete_var) Destroy aux data in deleted variable.
1945
1946         * file-handle.h: (struct fh_ext_class) Removed.
1947         (struct file_handle) Removed.
1948         (fh_init_files) Removed.
1949
1950         * file-handle.q: Changed references to a handle's `private' member
1951         to direct references.
1952         (struct private_file_handle) Renamed file_handle.
1953         Add next, open_cnt, type, open_mode, aux members.
1954         (struct file_handle_list) Removed.
1955         (extern var inline_file) Removed.
1956         (static var file_handles) Changed from file_handle_list * to
1957         file_handle *.
1958         (create_file_handle) Initialize new members.
1959         (fh_close_handle) Removed.
1960         (mode_name) New function.
1961         (fh_open) New function.
1962         (fh_close) New function.
1963         (fh_parse_file_handle) Renamed fh_parse().
1964
1965         * glob.c: (init_glob) Remove fh_init_files() call.
1966         
1967         * aggregate.c: use sfm_writer.
1968         (create_sysfile) Removed because the new interface is simpler.
1969         
1970         * apply-dict.c: Use sfm_reader.
1971
1972         * data-list.c: Use dfm_reader.
1973
1974         * file-type.c: Use dfm_reader.
1975
1976         * get.c: Use sfm_reader, sfm_writer, pfm_reader, pfm_writer.
1977
1978         * inpt-pgm.c: Use dfm_reader.
1979
1980         * print.c: Use dfm_writer.
1981
1982         * sysfile-info: Use sfm_reader.
1983
1984         * dfm-read.c: Adopt new file handle infrastructure.
1985
1986         * dfm-write.c: Ditto.
1987
1988         * pfm-read.c: Ditto.
1989         
1990         * pfm-write.c: Ditto.
1991
1992         * sfm-read.c: Ditto.
1993
1994         * sfm-write.c: Ditto.
1995         
1996 Mon Nov 15 00:31:44 2004  Ben Pfaff  <blp@gnu.org>
1997
1998         Break dictionary functions into separate header file.
1999
2000         * dictionary.h: New file.
2001
2002         * var.h: Moved dict_*() functions to dictionary.h.
2003
2004 Mon Nov 15 00:30:33 2004  Ben Pfaff  <blp@gnu.org>
2005
2006         Get rid of procedure-specific union in struct variable, using
2007         instead a void * pointer and a destructor function.
2008
2009         Most related changes are only worth brief summaries.
2010
2011         * crosstabs.q: Fix includes.  Use new struct var_range in lieu of
2012         old p.crs member in struct variable.
2013         
2014         * frequencies.q: Fix includes.  Use new struct var_freqs in lieu
2015         of old p.frq member in struct variable.
2016
2017         * histogram.c: (draw_histogram) Takes new freq_tab arg because
2018         it's no longer possible to grab this from var->p.frq.
2019
2020         * piechart.c: (draw_piechart) Ditto.
2021
2022         * group.c: (group_proc_get) New function.
2023
2024         * levene.c: Use group_proc_get() in lieu of old p.grp_data member
2025         in struct variable.
2026
2027         * oneway.q: Ditto.
2028
2029         * t-test.q: Ditto.
2030
2031         * main.c: (execute_command) Clear aux data in default_dict after
2032         each command.  (It's debatable whether this should be done.)
2033
2034         * matrix-data.c: Use new struct mxd_var in lieu of old p.mxd
2035         member in struct variable.
2036
2037         * means.q: Get rid of integer mode, which is not included in
2038         recent SPSS and was the only code that wanted per-variable private
2039         data.
2040
2041         * var.h: (struct crosstab_proc) Removed.
2042         (struct frequencies_proc) Removed.
2043         (struct list_proc) Removed.
2044         (struct get_proc) Removed.
2045         (struct means_proc) Removed.
2046         (struct matrix_data_proc) Removed.
2047         (struct match_files_proc) Removed.
2048         (lots of enums) Removed.
2049         (struct variable) Removed members `p', `get'.  Add member
2050         `aux_dtor'.
2051
2052         * vars-atr.c: (var_attach_aux) New function.
2053         (var_detach_aux) New function.
2054         (var_clear_aux) New function.
2055         (var_dtor_free) New function.
2056         (discard_variables) Use NULL instead of inline_file.
2057
2058 Fri Nov 12 10:07:11 WST 2004 John Darrington <john@darrington.wattle.id.au>
2059
2060         * value-labs.c  Fixed the implmentation of value_to_string, so 
2061         that it properly handles alpha values.
2062
2063         * oneway.q  Changed instances where labels were being probed manually, 
2064         to use the canonical {var,value}_to_string functions
2065
2066 Thu Nov 11 21:01:31 WST 2004 John Darrington <john@darrington.wattle.id.au>
2067
2068         * examine.q cartesian.c chart.[ch]   Added normal and detrended normal
2069         plots.  Changed the API of the cartesian plot to be a much lower level
2070         thing.
2071
2072 Sun Nov  7 17:25:04 WST 2004 John Darrington <john@darrington.wattle.id.au>
2073
2074         * examine.q Added some of the parametric calculations
2075
2076         * factor_stats.[ch]  Created
2077         
2078 Sat Nov  6 21:24:31 WST 2004 John Darrington <john@darrington.wattle.id.au>
2079
2080         * examine.q  Changed the definition of factors to be a composite, and
2081         dealt with the consequences.
2082
2083 Sat Nov  6 20:40:38 WST 2004 John Darrington <john@darrington.wattle.id.au>
2084
2085         * examine.q Fixed problem where examine wasn't dealing properly with 
2086         splits
2087
2088 Sat Nov  6 14:49:47 WST 2004 John Darrington <john@darrington.wattle.id.au>
2089
2090         * oneway.q Fixed problem where oneway wasn't dealing properly with 
2091         splits
2092
2093 Thu Nov  4 11:09:01 WST 2004 John Darrington <john@darrington.wattle.id.au>
2094
2095         * q2c.c examine.q  Fixed a bug (feature?) whereby arrays in the
2096         command which had settings didn't get the appropriate code
2097         generated.
2098
2099         * val.h value-labels.[ch] var-labs.c Added v*to_string functions
2100         to convert variables/values to strings.
2101
2102         * examine.q  Added framework for the EXAMINE command.
2103
2104 Mon Nov  1 12:46:17 WST 2004 John Darrington <john@darrington.wattle.id.au>
2105
2106         * q2c.c frequencies.q set.q t-test.q  Fixed the q2c parsing of DBL 
2107         subcommand types.  Changed frequencies.q to use it rather then the 
2108         custom parser.  Dealt with the consequences.  Added a test for NTILES
2109         subcommand of frequencies.
2110
2111 Sat Oct 30 09:16:29 WST 2004 John Darrington <john@darrington.wattle.id.au>
2112
2113         * oneway.q   Fixed up the behaviour when given missing values
2114
2115         * levene.c oneway.q Fixed a buglet with the levene statistic and
2116         incorporated the levene test into the oneway command.
2117
2118         * group.h  t-test.q  Moved the CMP_EQ and CMP_LE symbols out of 
2119         global scope, since they're only relevant to T-TEST
2120
2121 Fri Oct 29 17:39:03 WST 2004 John Darrington <john@darrington.wattle.id.au>
2122
2123         * group.c group.h group_proc.h levene.c oneway.q t-test.q
2124
2125         Made the t-test more consistent
2126         with the way it handles groups.  That is, it now uses a hash instead
2127         of an array of 2.  Also, made the levene.c file independent of the 
2128         implementation of the t-test.  So now levene should be fine for both
2129         t-test and anova.
2130
2131         * Added an oneway.q file for one way anova
2132
2133 Wed Jun  2 22:08:02 2004  Ben Pfaff  <blp@gnu.org>
2134
2135         * descript.c: (cmd_descriptives) Remove harmless but bogus test in
2136         STATISTICS parsing.
2137
2138 Mon May 31 20:45:24 2004  Ben Pfaff  <blp@gnu.org>
2139
2140         Fix memory leaks.
2141
2142         * data-list.c: (cmd_data_list) Free dls->delims on lossage.
2143         (data_list_trns_free) Free dls->delims.
2144
2145         * t-test.q: (tts_custom_pairs) Free vars.
2146         (ssbox_one_sample_init) Fix tab_vline() argument.
2147         (ssbox_independent_samples_init) Ditto.
2148         (trbox_paired_init) Ditto.
2149         (trbox_one_sample_init) Ditto.
2150
2151 Mon May 31 17:19:27 2004  Ben Pfaff  <blp@gnu.org>
2152
2153         Generalize casefiles to the extent that we can use them for
2154         sorting and other kinds of data transformations.  Change cases to
2155         be copy-on-write to improve memory efficiency in common cases.
2156         Every access to a member of a `struct ccase' was changed to be a
2157         call to a case_*() function, especially case_data(), case_num(),
2158         case_str(), or case_data_rw().  Many instances of a local variable
2159         named "case_num" were changed to "case_idx" as a consequence.
2160         Many `struct ccase *' were changed to actual `struct ccase'
2161         because of copying semantics of cases.  In several places there
2162         was a choice between updating debug code to work with the new ADTs
2163         or just deleting it because it was useless; I chose to delete it.
2164  
2165         * Makefile.am: (pspp_SOURCES) Add case.c, case.h.
2166
2167         * case.c: New file.
2168
2169         * case.h: New file.
2170
2171         * aggregate.c: (struct agr_proc) Change type of `sort' to
2172         sort_criteria *.  Add `break_vars', `break_var_cnt' members.
2173         Rename `vars' to `agr_vars', all references updated.  Change
2174         `agr_case' to type `struct ccase'.
2175         (cmd_aggregate) Deal with new members.  Use case_create(),
2176         sort_active_file_in_place(), sort_active_file_to_casefile().
2177         (agr_destroy) Deal with new members.
2178         (aggregate_single_case) Ditto.
2179         (dump_aggregate_info) Ditto.
2180         (initialize_aggregate_info) Ditto.
2181         (agr_to_active_file) Ditto.
2182         (presorted_agr_to_sysfile) Ditto.
2183         (sort_agr_to_sysfile) Removed.
2184
2185         * alloc.c: (out_of_memory) Make non-static.
2186
2187         * alloc.h: Prototype out_of_memory().
2188
2189         * casefile.c: Switched from a linked list in-memory representation
2190         to a two-level array-style representation.  The linked list was
2191         appropriate when we could stick a header onto cases, but that's no
2192         longer the case.  Also, the two-level array will allow for random
2193         in-memory access in case that's ever wanted.  Also added the
2194         concept of a `destructive casereader', one that destroys cases in
2195         the underlying casefile as they are read out.
2196         (macro CASES_PER_BLOCK) New macro.
2197         (struct casefile) New members `value_cnt', `case_list_size',
2198         `case_acct_size', `being_destroyed', `cases'.  Removed `head',
2199         `tail'.
2200         (struct casereader) Removed `cur'.  Added `destructive', `c'.
2201         (global var casefiles) Made static.
2202         (static var case_bytes) New var.
2203         (casefile_create) Takes a value count, not a case size in bytes,
2204         to conform to the case interface.  All callers updated.  Deal with
2205         new and removed members.
2206         (casefile_destroy) Deal with new and removed members.
2207         (casefile_sleep) New function.
2208         (casefile_get_case_size) Removed.
2209         (casefile_get_value_cnt) New function.
2210         (casefile_append) Rewritten to deal with new and removed members.
2211         (casefile_append_xfer) New function.
2212         (write_case_to_disk) Use case_serialize().
2213         (call_posix_fadvise) Removed because posix_fadvise64 segfaults.
2214         Couldn't figure out why.
2215         (casefile_to_disk) Don't call call_posix_fadvise.  Rewritten to
2216         deal with new and removed members.
2217         (merge) Removed.
2218         (merge_sort) Removed.
2219         (casefile_sort) Removed.
2220         (casefile_get_reader) Deal with new and removed members.
2221         (casefile_get_destructive_reader) New function.
2222         (reader_open_file) Make code more readable.  Create case for
2223         reader.
2224         (casereader_get_casefile) New function.
2225         (casereader_read) Deal with new and removed members.  Now returns
2226         a copy of the case, so that the caller is responsible for
2227         destroying the returned case.
2228         (casereader_read_xfer) New function.
2229         (casereader_destroy) Destroy reader's case.
2230         (test_casefile) Second arg is now a value count, all callers
2231         updated.  Now tests destructive readers too.
2232         (get_random_case) Deal with new case ADT.
2233         (write_random_case) Ditto.
2234         (read_and_verify_random_case) Ditto.
2235
2236         * crosstabs.q: Remove debug code.
2237
2238         * descript.q: (calc_descriptives) Deal with new case, casefile
2239         ADTs.
2240
2241         * dfm.c: (cmd_begin_data) There's no storage_source_class anymore.
2242
2243         * do-if.c: Remove unneeded header inclusion.
2244
2245         * expr-prs.c: Remove debug code.
2246
2247         * exprP.h: Remove debug code.
2248
2249         * flip.c: (flip_file) Use fseeko() if available.
2250
2251         * formats.c: Remove debug code.
2252
2253         * get.c: Remove debug code.
2254         (struct mtf_file) Change `input' from `union value *' to `struct
2255         ccase', all references updated.
2256
2257         * levene.c: (levene) Deal with new case, casefile ADTs.
2258
2259         * list.q: Remove debug code.
2260
2261         * loop.c: Remove debug code.
2262         
2263         * matrix-data.c: Remove debug code.
2264
2265         * means.q: Remove debug code.
2266
2267         * mis-val.c: Remove debug code.
2268
2269         * pfm-read.c: Remove debug code.
2270         (pfm_read_code) Change second arg from `union value *' to `struct
2271         ccase *', all references updated.
2272
2273         * recode.c: (string_to_long) Make first arg const.
2274         (convert_to_double) Ditto.
2275
2276         * repeat.c: Remove debug code.
2277
2278         * sample.c: Remove debug code.
2279
2280         * sfm-read.c: Remove debug code.
2281         (sfm_read_case) Change second arg from `union value *' to `struct
2282         ccase *'.
2283
2284         * sort.c: Redone in terms of casefiles.
2285         (enum sort_direction) Moved here from sort.h.
2286         (struct sort_criterion) New structure.
2287         (struct sort_criteria) New structure.
2288         (cmd_sort_cases) Rewritten.
2289         (prepare_to_sort_active_file) New function.
2290         (sort_active_file_in_place) New function.
2291         (sort_active_file_to_casefile) New function.
2292         (parse_sort) Renamed sort_parse_criteria(), rewritten & interface
2293         changed, all callers updated.
2294         (destroy_sort_cases_pgm) Renamed sort_destroy_criteria(),
2295         rewritten & interface changed, all callers updated.
2296         (sort_cases) Renamed sort_execute(), rewritten & interface
2297         changed, all callers updated.
2298         (struct internal_sort) Removed.
2299         (do_internal_sort) Rewritten, interface changed.
2300         (destroy_internal_sort) Removed.
2301         (compare_case_dblptrs) Use sort_criteria instead of sort_case_pgm.
2302         (struct initial_run) Removed; an initial run is now just a
2303         casefile.
2304         (compare_initial_runs) Rewritten.
2305         (struct external_sort) Changed almost completely.
2306         (do_external_sort) Rewritten, interface changed.
2307         (destroy_external_sort) Rewritten.
2308         [HAVE_MKDTEMP] (make_temp_dir) Removed.
2309         [!HAVE_MKDTEMP] (do_mkdir) Removed.
2310         [!HAVE_MKDTEMP] (make_temp_dir) Removed.
2311         (init_external_sort) Removed.
2312         (simulate_error) Removed.
2313         (rmdir_temp_dir) Removed.
2314         (get_temp_file_name) Removed.
2315         (open_temp_file) Removed.
2316         (close_temp_file) Removed.
2317         (remove_temp_file) Removed.
2318         (write_temp_file) Removed.
2319         (read_temp_file) Removed.
2320         (struct record_run) Change `record' from `struct case_lit *' to
2321         `struct ccase'.
2322         (struct initial_run_state) Remove `idx_to_fv', `free_list',
2323         `file_idx', `output_file'.  Add `run', casefile'.  Change
2324         `last_output' from `struct case_list *' to `struct ccase'.
2325         (write_initial_runs) Change interface, rewrite.
2326         (sort_sink_write) Renamed process_case(), changed interfaced,
2327         rewrote.
2328         (destroy_initial_run_state) Rewritten.
2329         (allocate_cases) Rewritten.
2330         (compare_record) Interface changed, rewritten.
2331         (start_run) Rewritten.
2332         (end_run) Rewritten.
2333         (output_record) Rewritten.
2334         (grab_case) Removed.
2335         (release_case) Removed.
2336         (struct merge_case) Change `cases' from double pointer to single
2337         pointer.
2338         (merge) Deal with new case and casefile ADTs.
2339         (struct run) Removed.
2340         (merge_once) Rewritten, interface changed.
2341         (fill_run_buffer) Removed.
2342         (sort_sink_make_source) Removed.
2343         (sort_sink_class) Removed.
2344         (struct sort_source_aux) Removed.
2345         (sort_source_read_helper) Removed.
2346         (sort_source_read) Removed.
2347         (read_sort_output) Removed.
2348         (read_internal_sort_output) Removed.
2349         (read_external_sort_output) Removed.
2350         (sort_source_destroy) Removed.
2351         (sort_source_class) Removed.
2352
2353         * sort.h: (struct sort_cases_pgm) Removed.
2354         (enum sort_direction) Moved to sort.c.
2355
2356         * t-test.q: (calculate) Deal with new case, casefile ADTs.
2357
2358         * tab.c: Remove debug code.
2359
2360         * var-labs.c: Remove debug code.
2361
2362         * var.h: (struct ccase) Removed.
2363         (struct case_list) Removed.
2364
2365         * vars-atr.c: (discard_variables) Use free_case_source().
2366
2367         * vars-prs.c: (parse_vs_variable) Make arg const.
2368         (parse_dict_variable) Ditto.
2369         (parse_variables) Make struct dictionary * arg const.
2370         (parse_var_set_vars) Make struct var_set * arg const.
2371         (struct var_set) Add const to some of the function pointers' args.
2372         (var_set_get_cnt) Make arg const.
2373         (var_set_get_var) Make first arg const.
2374         (var_set_lookup_var) Make first arg const.
2375         (dict_var_set_get_cnt) Make arg const.
2376         (dict_var_set_get_var) Make first arg const.
2377         (dict_var_set_lookup_var) Make first arg const.
2378         (var_set_create_from_dict) Make arg const.  Add cast to aux
2379         assignment.
2380         (struct array_var_set) Add const to var member.
2381         (array_var_set_get_cnt) Make arg const.
2382         (array_var_set_get_var) Make first arg const.
2383         (array_var_set_lookup_var) Make first arg const.
2384         (var_set_create_from_array) Make first arg const.  Insert cast.
2385
2386         * vfm.c: (struct write_case_data) Change trns_case, sink_case
2387         members from `struct ccase *' to `struct ccase'.
2388         (static var lag_queue) Change from double to single pointer.
2389         (procedure) Optimize trivial case.
2390         (internal_procedure) Deal with changed case, case_source ADTs.
2391         (create_trns_case) Changed interface, rewrote.
2392         (open_active_interface) Initialize modified lag queue.
2393         (write_case) Deal with changed case ADT.
2394         (lag_case) Deal with modified lag queue.
2395         (close_active_file) Destroy modified lag queue.
2396         Deal with changed case_source, case_sink ADTs.
2397         (destroy_storage_stream_info) Make null arg into no-op.
2398         (storage_sink_make_source) Set aux in created source.
2399         (storage_source_read) Deal with changed case, casefile ADTs.
2400         (storage_source_create) New function.
2401         (lagged_case) Rewrite.
2402         (free_case_source) New function.
2403         (free_case_sink) Rewrite.
2404         (struct split_aux_data) Changed prev_case from `struct ccase *' to
2405         `struct ccase'.
2406         (procedure_with_splits) Deal with changed prev_case.
2407         (procedure_with_splits_callback) Ditto.
2408         (multipass_split_aux_data) Changed prev_case from `struct ccase *' to
2409         `struct ccase'.
2410         (multipass_procedure_with_splits) Deal with changed prev_case.
2411         (multipass_split_callback) Ditto.
2412         
2413         
2414 Mon May 31 17:19:06 2004  Ben Pfaff  <blp@gnu.org>
2415
2416         The workspace idea didn't work out.
2417
2418         * Makefile.am: (pspp_SOURCES) Remove workspace.c, workspace.h.
2419         
2420         * workspace.c: Removed.
2421
2422         * workspace.h: Removed.
2423
2424 Sun May 30 18:35:19 2004  Ben Pfaff  <blp@gnu.org>
2425
2426         Fully implement arbitrary delimiters on DATA LIST, extending the
2427         half implementation that was already there.
2428
2429         * data-list.c: (struct data_list_pgm) Remove `delim', add
2430         `delims', `delim_cnt'.
2431         (cmd_data_list) Initialize new members.  Parse delimiters and
2432         clean up code a bit.
2433         (cut_field) Extract fields with arbitrary delimiters.  Also, fix
2434         handling of leading commas.
2435         (read_from_data_list_fixed) Expand tabs.  Adapt to new DFM
2436         interfaces.
2437         (read_from_data_list_free) Adapt to new DFM interfaces.
2438         (read_from_data_list_list) Ditto.
2439         (repeating_data_trns_proc) Ditto.
2440
2441         * dfm.c: Split up reader and writer into separate code, because
2442         they do different things.  Use struct string instead of explicit
2443         allocation code, for clarity.
2444         (enum dfm_reader_flags) New enum.
2445         (struct dfm_fhuser_ext) Removed.
2446         (struct dfm_reader_ext) New.
2447         (get_reader) New function, used by just about all the reader
2448         functions.
2449         (dfm_close) Removed.
2450         (close_reader) New function.
2451         (dfm_open_for_reading) Rewrite initialization of dfm_fhuser_ext.
2452         (dfm_open_for_writing) Ditto.
2453         (macro force_line_buffer_expansion) Removed.
2454         (count_tabs) Removed.
2455         (tabs_to_spaces) Removed.
2456         (read_record) Deal with new dfm_reader_ext.  Use struct string
2457         functions.  Don't convert tabs to spaces.
2458         (dfm_eof) New function.
2459         (dfm_get_record) Changed interface, rewrote.
2460         (dfm_expand_tabs) New function.
2461         (dfm_fwd_record) Renamed dfm_forward_record(), updated to new
2462         dfm_reader_ext, rewritten.
2463         (dfm_bkwd_record) Renamed dfm_reread_record(), updated to new
2464         dfm_reader_ext, rewritten.
2465         (dfm_set_record) Removed in favor of dfm_forward_columns().
2466         (dfm_forward_columns) New function.
2467         (dfm_get_cur_col) Renamed dfm_column_start, updated to new
2468         dfm_reader_ext, rewritten.
2469         (static var dfm_r_class) Use close_reader for the destructor.
2470         (struct dfm_writer_ext) New.
2471         (dfm_put_record) Updated to new dfm_writer_ext, rewritten.  Uses
2472         bounce buffer now instead of local allocation.
2473         (close_writer) New function.
2474         (static var dfm_writer_ext) Use close_writer for destructor.
2475         (cmd_begin_data) Adapt to new dfm_reader_ext.
2476
2477         * file-handle.q: Add support for per-file tab width.
2478         (struct private_file_handle) Add tab_width member.
2479         (q2c specifications) Add tabwidth subcommand.
2480         (cmd_file_handle) Put parsed tab width into private_file_handle.
2481         (create_file_handle) Set default tab width.
2482         (handle_get_tab_width) New function.
2483
2484         * file-type.c: (file_type_source_read) Adapt to new DFM interface.
2485
2486         * inpt-pgm.c: (reread_trns_proc) Ditto.
2487
2488         * matrix-data.c: (context) Ditto.
2489         (another_token) Ditto.
2490         (mget_token) Ditto.
2491         (force_eol) Ditto.
2492
2493 Sun May 30 18:33:59 2004  Ben Pfaff  <blp@gnu.org>
2494
2495         * casefile.c: (casefile_destroy) Fix memory leak by freeing
2496         cf->filename.
2497         (casereader_destroy) Don't close file descriptor -1.
2498
2499         * recode.c: (cmd_recode) Fix memory leak.
2500
2501         * set.q: (q2c specifications) Fix typo in user message.
2502
2503         * str.c: (st_bare_pad_len_copy) Change memcpy to memmove to avoid
2504         undefined behavior for overlapping arguments.
2505
2506 Sun May 30 18:31:48 2004  Ben Pfaff  <blp@gnu.org>
2507
2508         * casefile.c: valgrind doesn't implement posix_fadvise() yet, so
2509         don't call it when we're running under valgrind.
2510         (call_posix_fadvise) New function.
2511         (casefile_to_disk) Use call_posix_fadvise().
2512         (reader_open_file) Ditto.
2513         
2514 Sun May 30 18:20:12 2004  Ben Pfaff  <blp@gnu.org>
2515
2516         Update our string ADTs, struct string and struct len_string.  Get
2517         rid of pool support, which was largely unused.  Rename lots of
2518         functions to have more obvious or consistent names.
2519         
2520         * ascii.c: Get rid of ascii_pool.  It was only used for string
2521         allocations.
2522         (ascii_open_global) Don't create ascii_pool.
2523         (ascii_close_driver) Don't destroy ascii_pool.
2524         (ascii_postopen_driver) Don't use pool.
2525         (ascii_close_driver) Destroy strings manually.
2526
2527         * str.c: (ds_create) Remove pool argument, all references updated.
2528         (ds_init) Ditto.
2529         (ds_replace) Remove pool support, make more efficient when we
2530         don't need to reallocate.
2531         (ds_destroy) Remove pool support.
2532         (ds_rpad) New function.
2533         (ds_size) Renamed ds_capacity(), all references updated.
2534         (ds_value) Renamed ds_c_str(), all references updated.
2535         (ds_concat) Renamed ds_puts(), all references updated.
2536         (ds_concat_buffer) Renamed ds_concat(), all references updated.
2537         (ds_putchar) Renamed ds_putc(), all references updated.
2538         (ds_getline) Renamed ds_gets(), all references updated.
2539         (ls_create) Remove pool argument, all references updated.
2540         (ls_create_buffer) Ditto.
2541         (ls_destroy) Removed pool support.
2542         (ls_value) Renamed ls_c_str(), all references updated.
2543
2544         * str.h: (ls_length) [__GNUC__] Add inline version.
2545         (ls_c_str) [__GNUC__] Add inline version.
2546         (ls_end) [__GNUC__] Add inline version.
2547         (struct string) Remove pool member.  Rename `size' to `capacity',
2548         all references updated.
2549
2550         * tab.c: (text_format) Instead of using pool argument to
2551         ls_create_buffer(), call pool_register() on allocated data.
2552
2553 Mon Apr 26 22:40:07 2004  Ben Pfaff  <blp@gnu.org>
2554
2555         We're abusing the current ASCII driver by telling it to allocate a
2556         9999-line, 9999-character page in the tests.  This causes some
2557         systems to curl up and die because it allocates 20 MB of
2558         contiguous RAM.  This change alleviates at least part of the
2559         problem.  It is mostly a stop-gap until the new output system is
2560         ready.
2561         
2562         * ascii.c: (struct line) New structure.
2563         (struct ascii_driver_ext) Remove `page', `page_size', `line_len',
2564         `line_len_size', `n_output' members.  Add `lines', `lines_cap'.
2565         (ascii_preopen_driver) Initialize new members, not old ones.
2566         (ascii_close_driver) Destroy new members, not old ones.
2567         (ascii_open_page) Allocate new members, not old ones.
2568         (expand_line) Allocate room in line.
2569         (draw_line) Use new members.
2570         (ascii_line_horz) Ditto.
2571         (ascii_line_vert) Ditto.
2572         (ascii_line_intersection) Ditto.
2573         (text_draw) Ditto.
2574         (output_lines) Ditto.
2575         (ascii_close_page) Ditto.
2576
2577 Sun Apr 25 23:40:15 2004  Ben Pfaff  <blp@gnu.org>
2578
2579         * matrix.c: Dead code.  Removed.
2580
2581         * matrix.h: Dead code.  Removed.
2582
2583 Fri Apr 16 23:59:51 2004  Ben Pfaff  <blp@gnu.org>
2584
2585         Contrary to what I'd always understood, there is an efficient
2586         algorithm for deletion from a hash table populated via linear
2587         probing.  This change implements it.
2588         
2589         * hash.c: (hsh_rehash) Probe in increasing order.
2590         (hsh_probe) Ditto.
2591         (locate_matching_entry) Ditto.
2592         (hsh_delete) Use Knuth's Algorithm 6.4R for deletion.
2593
2594 Tue Apr 13 19:24:15 2004  Ben Pfaff  <blp@gnu.org>
2595
2596         * moments.c (calc_moments): Adjust calculation of kurtosis to
2597         avoid subtracting huge numbers from huge numbers, on Michael
2598         Kiefte's advice.
2599
2600 Sun Apr 11 14:22:12 2004  Ben Pfaff  <blp@gnu.org>
2601
2602         Rework moments routines for improved numerical stability based on
2603         Michael Kiefte's advice.  Any bugs or remaining numerical problems
2604         are still mine though.
2605
2606         There is now a struct moments1 for use with one-pass moments.  It
2607         uses a provisional means algorithm as an attempt to improve
2608         accuracy of higher moments.  The older struct moments now only
2609         handles two-pass moments.
2610         
2611         * aggregate.c: Use moments1 instead moments.
2612
2613         * descript.c: Revert previous change, which is no longer needed
2614         due to the moments revision.
2615
2616         * moments.c: (calc_moments) New function for calculating variance,
2617         skewness, kurtosis.
2618         (moments_pass_one) Only accumulate weights bigger than zero.
2619         (moments_calculate) Allow calculating the mean on pass one, others
2620         require pass two.  Implement in terms of calc_moments().
2621         (struct moments1) New structure.
2622         (init_moments1) New function.
2623         (moments1_clear) Ditto.
2624         (moments1_create) Ditto.
2625         (moments1_add) Ditto.
2626         (moments1_calculate) Ditto.
2627         (moments1_destroy) Ditto.
2628         (cmd_debug_moments) Deal with `struct moments' or `struct
2629         moments1' as requested by user.
2630
2631 Sun Apr 11 14:21:55 2004  Ben Pfaff  <blp@gnu.org>
2632
2633         * Makefile.am (pspp_SOURCES): Remove debug.c.
2634
2635         * debug.c: Removed.  It was empty anyway.
2636
2637 Fri Apr  9 20:04:49 2004  Ben Pfaff  <blp@gnu.org>
2638
2639         * descript.c (calc_descriptives): Fix assert failure when only
2640         MOMENT_MEAN is needed.
2641
2642 2004-04-09  Michael Kiefte  <mkiefte@dal.ca>
2643
2644         * descript.c: 
2645
2646         fixed problem with parsing in match_statistic() causing
2647         "DESCRIPTIVE STAT=MEAN." to barf.
2648
2649         "MEAN" is now default if "SORT" given without specification.
2650
2651         Fixed infinite loop with "DESCRIPT GIBBERISH=ALL."  Parsing is
2652         generally less forgiving of syntax errors: better to have it do
2653         nothing and type it in again then to not know what it actually did
2654         instead.  
2655
2656         z-score transformation now checks score for user-missing values
2657         and checks std_dev for SYSMIS.
2658
2659 2004-04-06  Michael Kiefte  <mkiefte@dal.ca>
2660
2661         * aggregate.c, crosstabs.q, descript.c, dictionary.c, frequencies.q, levene.c, t-test.q, var.h: 
2662         Changed dict_get_case_weight() to accept an additional int * flag
2663         to complain about system-missing, user-missing, zero, or negative
2664         weights and updated existing functions to pass int * to
2665         dict_get_case_weight().
2666
2667 2004-04-05  jmd  <jmd@gnu.org>
2668
2669         * main.c: Fixed configuration problems with gsl
2670
2671         * t-test.q: Fixed some problems encountered when compiling under Cygwin
2672
2673 2004-04-03  blp  <blp@gnu.org>
2674
2675         * lexer.c, ChangeLog:
2676         Fix infinite loop on comment at end of file, add test.
2677
2678 2004-04-03  jmd  <jmd@gnu.org>
2679
2680         * 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:
2681         Fixed the calculation of percentiles and added --syntax and --algorithm options
2682
2683 Sat Apr  3 11:43:37 2004  Ben Pfaff  <blp@gnu.org>
2684
2685         * lexer.c: (lex_skip_comment) Handle end-of-file correctly (I
2686         hope).
2687
2688 Sat Apr  3 15:00:18 WST 2004 John Darrington <john@darrington.wattle.id.au>
2689
2690         * frequencies.q:  Fixed the calculation of percentiles
2691
2692         * Makefile.am:  Added the --ansi flag and dealt with the
2693         consequences.  Added some entries to PSPP_sources so that
2694         make distcheck would pass
2695
2696         * cmdline.c:   Added the --syntax and --algorithm options
2697
2698         * q2c.c:  Added an implicit /ALGORITHM subcommand to everything.
2699
2700 Fri Apr  2 11:25:22 WAST 2004 John Darrington <john@darrington.wattle.id.au>
2701
2702         * t-test.q, levene.c, levene.h  Converted t-test (incl levene) to 
2703         use the new multipass_split_... mechanism.
2704
2705 Wed Mar 31 22:36:22 2004  Ben Pfaff  <blp@gnu.org>
2706
2707         * frequencies.q: (calc_stats) Use moments data structure and
2708         calc_seskew(), calc_sekurt() functions.
2709
2710         * set.q main.c settings.h Added support for --syntax and --algorithm 
2711         options
2712
2713 Tue Mar 30 22:04:19 2004  Ben Pfaff  <blp@gnu.org>
2714
2715         * vfm.c: Had to get last call to multipass_split_output() inside
2716         open_active_file()/close_active_file() pairing, so introduce new
2717         function.
2718         (internal_procedure) Move procedure() code here, except for calls
2719         to open_active_file() and close_active_file().
2720         (procedure) Wrap open_active_file() and close_active_file() around
2721         internal_procedure().
2722         (multipass_procedure_with_splits) Wrap open_active_file() and
2723         close_active_file() around internal_procedure().
2724
2725 Tue Mar 30 22:01:57 2004  Ben Pfaff  <blp@gnu.org>
2726
2727         * descript.c: (cmd_descriptives) Free `vars' to avoid memory leak.
2728
2729 Mon Mar 29 16:26:40 2004  Ben Pfaff  <blp@gnu.org>
2730
2731         * debug.c: Removed.  Moved cmd_debug_evaluate() into expr-evl.c.
2732
2733         * expr-evl.c: (cmd_debug_evaluate) Moved here from debug.c.
2734
2735 Mon Mar 29 16:03:08 2004  Ben Pfaff  <blp@gnu.org>
2736
2737         * algorithm.c: By default turn off some of the more expensive
2738         assertions.
2739         (expensive_assert) New macro which expands to assert if
2740         EXTRA_CHECKS is defined, to nothing otherwise.
2741         (unique) Use expensive_assert().
2742         (binary_search) Ditto.
2743         (push_heap) Ditto.
2744         (pop_heap) Ditto.
2745         (make_heap) Ditto.
2746         (sort_heap) Ditto.
2747
2748         * command.c: (conflicting_3char_prefixes) Words that are the same
2749         don't cause conflicts when they are abbreviated to the first three
2750         letters.
2751
2752         * expr-evl.c: (CONCAT_func) Fix memory leak by incrementing struct
2753         nonterm_node's n earlier.
2754         (generic_str_func) Ditto.
2755         
2756 Mon Mar 29 15:32:17 2004  Ben Pfaff  <blp@gnu.org>
2757
2758         Add support for multipass procedures.  Rewrite DESCRIPTIVES to
2759         test multipass support, take advantage of new moments
2760         calculation, and to not be such crappy code.  Get rid of q2c
2761         processing for DESCRIPTIVES.
2762
2763         * vfm.c: (struct multipass_split_aux_data) New structure.
2764         (multipass_procedure_with_splits) New function.
2765         (multipass_split_callback) New function.
2766         (multipass_split_output) New function.
2767         * descript.q: Removed.
2768
2769         * descript.c: New file.
2770
2771         * var.h: Removed descriptives enums.
2772         (struct descriptives_proc) Removed.
2773         (struct variable) Removed p.dsc.
2774
2775         * Makefile.am: (q_sources_c) Remove descript.c.
2776         (q_sources_q) Removed descript.q.
2777         
2778 Mon Mar 29 15:31:55 2004  Ben Pfaff  <blp@gnu.org>
2779
2780         New manager for keeping track of used workspace.
2781         
2782         * workspace.c: New file.
2783
2784         * workspace.h: New file.
2785
2786         * Makefile.am: (pspp_SOURCES) Add workspace.c, workspace.h.
2787
2788         * sort.c: (do_internal_sort) Use workspace_malloc().
2789         (destroy_internal_sort) Use workspace_free().
2790
2791 Mon Mar 29 15:31:08 2004  Ben Pfaff  <blp@gnu.org>
2792
2793         New `struct casefile' for managing sets of cases.
2794
2795         * casefile.c: New file.
2796
2797         * casefile.h: New file.
2798
2799         * command.def: Add DEBUG CASEFILE command.
2800
2801         * Makefile.am: (pspp_SOURCES) Add casefile.c, casefile.h.
2802
2803         * sort.c: (sort_cases) Move logic for sending storage file to disk
2804         into do_external_sort().
2805         (struct internal_sort) Use an array of ccase pointers instead of a
2806         case_list.
2807         (do_internal_sort) Rewrite to handle casefiles.
2808         (compare_case_list) Removed.
2809         (compare_cases) New function.
2810         (compare_case_dblptrs) New function.
2811         (read_internal_sort_output) Deal with new struct internal_sort.
2812
2813         * vfm.c: (static var workspace_overflow) Removed.
2814         (struct storage_stream_info) Removed all the members.  Added
2815         struct casefile * member.
2816         (storage_sink_open) Use casefile.
2817         (open_storage_file) Removed.
2818         (write_storage_file) Removed.
2819         (storage_to_disk) Removed.
2820         (destroy_storage_stream_info) Use casefile.
2821         (storage_sink_write) Use casefile.
2822         (storage_sink_make_source) Use casefile.
2823         (storage_source_count) Use casefile.
2824         (storage_source_read) Use casefile.
2825         (storage_source_on_disk) Removed.
2826         (storage_source_get_cases) Removed.
2827         (storage_source_set_cases) Removed.
2828         (storage_source_get_casefile) New function.
2829         
2830 Mon Mar 29 15:30:09 2004  Ben Pfaff  <blp@gnu.org>
2831
2832         New `struct moments' for calculating moments.
2833
2834         * stats.c: Removed.
2835
2836         * stats.h: Removed.
2837
2838         * moments.c: New file.
2839
2840         * moments.h: New file.
2841
2842         * command.def: Add DEBUG MOMENTS command.
2843
2844         * Makefile.am: (pspp_SOURCES) Add moments.c, moments.h.  Remove
2845         stats.c, stats.h.
2846
2847         * aggregate.c: Modify AGGREGATE to use the new moments
2848         calculation, even if not in such a great way.
2849         (struct agr_var) Add `moments' member.
2850         (parse_aggregate_functions) Set `moments' member to null.
2851         (agr_destroy) Destroy `moments' member.
2852         (accumulate_aggregate_info) Use `moments' for standard deviation.
2853         (dump_aggregate_info) Ditto.
2854         (initialize_aggregate_info) Create or clear `moments'.
2855
2856         * misc.h: Add pow2(), pow3(), pow4() functions in place of sqr(),
2857         cube(), pow4() that were in stats.h.  All references updated.
2858
2859         * crosstabs.q: stats.h had chi-square significance functions.  Use
2860         GSL instead.
2861         (display_chisq) Use gsl_cdf_chisq_Q() instead of chisq_sig().
2862
2863         * expr-evl.c: (expr_evaluate) Use moments_of_values() for
2864         OP_CFVAR, OP_MEAN, OP_SD, OP_VARIANCE.
2865                 
2866 Fri Mar 26 14:21:23 2004  Ben Pfaff  <blp@gnu.org>
2867
2868         * dictionary.c: (dict_compact_values) Compacted values need to
2869         start off from 0.
2870
2871 Fri Mar 26 00:54:57 2004  Ben Pfaff  <blp@gnu.org>
2872
2873         * var-labs.c: (cmd_variable_labels) For compatibility, don't allow
2874         `/' at start.  Check return value of parse_variables() for error
2875         return.
2876
2877 Fri Mar 26 00:19:27 2004  Ben Pfaff  <blp@gnu.org>
2878
2879         Revamp expressions: make the code a little nicer, and fix bugs
2880         found in testing.
2881         
2882         * expr-evl.c: (expr_evaluate) Make expression argument const.
2883         Support OP_ADD, OP_SUB, OP_MUL, OP_DIV instead of OP_PLUS, OP_MUL.
2884         OP_POW is missing for arg 2 <= 0.  OP_LOG is natural log, not
2885         base-10 log.  Fix OP_ANY, OP_ANY_STRING, OP_RANGE, OP_RANGE_STRING
2886         off-by-ones.  Add OP_MAX_STRING, OP_MIN_STRING.  Fix OP_TIME_HMS,
2887         OP_DATE_WKYR boundary conditions.  Add OP_CTIME_DAYS,
2888         OP_CTIME_HOURS, OP_CTIME_MINUTES, OP_CTIME_DAYS, OP_CTIME_SECONDS.
2889         Support OP_INDEX_2, OP_INDEX_3, OP_RINDEX_2, OP_RINDEX_3 instead
2890         of OP_INDEX, OP_INDEX_OPT, OP_RINDEX, OP_RINDEX_OPT.  Merge
2891         OP_LPAD_OPT into OP_LPAD, OP_RPAD_OPT into OP_RPAD, OP_LTRIM_OPT
2892         into OP_LTRIM, OP_RTRIM_OPT into OP_RTRIM, OP_NUMBER_OPT into
2893         OP_NUMBER.  Fix OP_RTRIM fragility.  Support OP_SUBSTR_2,
2894         OP_SUBSTR_3 instead of OP_SUBSTR, OP_SUBSTR_OPT.  Remove OP_INV.
2895         Simplify OP_SYSMIS.  Remove OP_STR_MIS.
2896
2897         * expr-opt.c: (optimize_expression) Rewrite.
2898         (macro n0) Removed.
2899         (macro n1) Removed.
2900         (macro n2) Removed.
2901         (macro s0) Removed.
2902         (macro s0l) Removed.
2903         (macro s1) Removed.
2904         (macro s1l) Removed.
2905         (macro s2) Removed.
2906         (macro s2l) Removed.
2907         (macro s) Removed.
2908         (macro sl) Removed.
2909         (eq_num_con) New function.
2910         (optimize_tree) New function.
2911         (macro rnc) Removed.
2912         (macro frnc) Removed.
2913         (str_search) Add const to string params.
2914         (str_rsearch) Ditto.
2915         (evaluate_tree_no_missing) Renamed from evaluate_tree.  Add num[],
2916         str[], str_len[] locals to substitute for most of removed macros.
2917         Support OP_ADD, OP_SUB, OP_MUL, OP_DIV instead of OP_PLUS, OP_MUL.
2918         Removed support for missing values because we're never called with
2919         missing values.  Use set_number() or set_number_errno() instead of
2920         rnc or frnc.  Removed any stuff that caused trouble in testing.
2921         We can re-add it later if it really slows anything.  Fix some
2922         random problems.
2923         (evaluate_tree_with_missing) Not yet supported.  To be added later
2924         if it's important.
2925         (repl_num_con) Removed.
2926         (collapse_node) New function.
2927         (force_repl_num_con) Removed.
2928         (set_number) New function.
2929         (set_number_errno) New function.
2930         (repl_str_con) Removed.
2931         (set_string) New function.
2932         (yrmoda) Tighten boundary conditions.  Adopt 2030 cut-off for
2933         2-digit years.
2934         (dump_node) No special case for OP_AND, OP_OR.
2935
2936         * expr-prs.c: (expr_prs) Honor EXPR_NO_OPTIMIZE bit.  Rewrite.
2937         (expr_get_type) New function.
2938         (type_check) Rewrite.
2939         (type_coercion) New function.
2940         (struct operator) New structure.
2941         (match_operator New function.
2942         (parse_binary_operators) New function.
2943         (parse_inverting_unary_operator) New function.
2944         (parse_or) Rewritten.
2945         (parse_and) Rewritten.
2946         (parse_not) Rewritten.
2947         (parse_rel) Rewritten.
2948         (parse_add) Rewritten.
2949         (parse_mul) Rewritten.
2950         (parse_neg) Rewritten.
2951         (parse_exp) Rewritten.
2952         (parse_sysvar) Add $TRUE, $FALSE system variables.
2953         Get $LENGTH, $WIDTH from get_viewlength(), get_viewwidth().
2954         (parse_primary) Use allocate_var_node(), allocate_num_con(),
2955         allocate_str_con().
2956         (struct function) Remove desc, change `func' prototype.
2957         (unary_func) Remove special cases.
2958         (MISSING_func) Reduce to unary_func() that just returns a boolean.
2959         (SYSMIS_func) Handle SYSMIS((x)) like SYSMIS(x).
2960         (VALUE_func) Use allocate_var_node().
2961         (nary_num_func) Allow MIN and MAX for strings.
2962         Use allocate_var_node().  Properly clean up.
2963         Fix return type.
2964         (generic_str_func) Use local table instead of removed `desc'
2965         member.  Mostly rewrite.
2966         (get_num_args) Revise error message.
2967         (parse_function) Return EXPR_ERROR, not 0 on error.
2968         (macro op) Removed.
2969         (macro varies) Removed.
2970         (ops[]) Use expr.def.
2971         (free_node) Do nothing if node is null.
2972         (allocate_num_con) New function.
2973         (allocate_str_con) New function.
2974         (allocate_var_node) New function.
2975         (allocate_binary_nonterminal) New function.
2976         (append_nonterminal_arg) Removed.
2977         (static var func_tab[]) Revised.
2978         (expr_debug_print_postfix) Make parameter const.
2979         Use printf() instead of debug_printf().
2980
2981         * expr.def: New file.
2982         
2983         * expr.h: Change PXP_* to EXPR_*, all references updated.  Also
2984         use named enum instead of unnamed, all references updated.  Add
2985         EXPR_ANY, EXPR_NO_OPTIMIZE.
2986
2987         * exprP.h: Remove EX_*.  Add DEFINE_OPERATOR.  Use expr.def
2988         instead of defining OP_* directly.
2989         (macro IS_TERMINAL) New macro.
2990         (macro IS_NONTERMINAL) New macro.
2991         (enum OP_NO_FLAGS) New.
2992         
2993 Fri Mar 26 00:18:01 2004  Ben Pfaff  <blp@gnu.org>
2994
2995         * error.c: (err_assert_fail) msg variable needs to be non-const.
2996
2997 Fri Mar 26 00:17:24 2004  Ben Pfaff  <blp@gnu.org>
2998
2999         * debug.c: (cmd_debug_evaluate) Rewrite.
3000
3001 Fri Mar 26 00:15:13 2004  Ben Pfaff  <blp@gnu.org>
3002
3003         Fix some CROSSTABS bit rot stupidity.
3004
3005         * crosstabs.q: Reorder the CELLS subcommands for compatibility.
3006         (internal_cmd_crosstabs) Initializes cells[] correctly.
3007         (float_M_suffix) Rename format_cell_entry(), change prototype,
3008         rewrite.
3009         (display_crosstabulation) Fix cell formatting.
3010
3011 Fri Mar 26 00:14:09 2004  Ben Pfaff  <blp@gnu.org>
3012
3013         Make lex_rest_of_line(), lex_entire_end() not discard lines.  Have
3014         to call lex_discard_line() to do that.
3015
3016         * command.c: (run_command) Call lex_discard_line() after
3017         lex_rest_of_line().
3018
3019         * lexer.c: (lex_entire_end) Change behavior.
3020         (lex_rest_of_line) Change behavior.  Return const char *.
3021         (lex_discard_line) Don't clear getl_buf, don't emit message.
3022
3023         * main.c: (handle_error) Emit message here.
3024
3025         * repeat.c: (internal_cmd_do_repeat) Use lex_discard_line()
3026         instead of lex_entire_line().
3027
3028         * str.c: (mm_find_reverse) Make length params size_t.  Rewrite.
3029
3030         * title.c: (get_title) Call lex_discard_line() after
3031         lex_rest_of_line().
3032         (cmd_file_label) Ditto.
3033         (cmd_document) Deal with const char * return value.
3034
3035 Fri Mar 26 00:10:16 2004  Ben Pfaff  <blp@gnu.org>
3036
3037         Removed REMARK command.
3038
3039         * command.c: (extract_prefix) Removed.
3040         (output_line) Removed.
3041         (cmd_remark) Removed.
3042
3043         * command.def: Remove REMARK.
3044
3045 Fri Mar 26 00:08:38 2004  Ben Pfaff  <blp@gnu.org>
3046
3047         Added abort() after lots of assert(0) invocations to avoid some
3048         compiler warnings.  We really need a NOT_REACHED macro.
3049
3050 Tue Mar 23 08:00:42 WAST 2004 John Darrington <john@darrington.wattle.id.au>
3051
3052         * sort.c: Added missing call to temp_file_close.  Changed error 
3053         messages to warnings.
3054
3055         * set.q: Improved setting of set_view{length,width} to be more tolerant
3056         of buggy OSes.
3057
3058 Sun Mar 21 10:11:14 WST 2004 John Darrington <john@darrington.wattle.id.au>
3059
3060         * val-labs.c: Fixed a bug where PSPP would crash, if VALUE LABELS was
3061         used with incorrect syntax.
3062
3063         * error.c, error.h et al:  Overridden definition of assert for a
3064         custom one.
3065
3066         * test-q.c: Fixed a buglet where it would crash if no /VARIABLES
3067         subcommand was given when it ought to have been.
3068
3069 Sat Mar 20 22:19:08 2004  Ben Pfaff  <blp@gnu.org>
3070
3071         * tab.c: (tab_vline) Fix assertions to respect row_ofs and
3072         col_ofs.
3073         (tab_hline) Ditto.
3074         (tab_box) Ditto.
3075         (tab_joint_text) Ditto.
3076
3077 Sat Mar 20 17:57:23 2004  Ben Pfaff  <blp@gnu.org>
3078
3079         * levene.c: Add #include.
3080
3081         * set.q: (set_viewport) Add `int' argument to make its prototype
3082         correct for signal().
3083
3084 Sat Mar 20 15:35:17 2004  Ben Pfaff  <blp@gnu.org>
3085
3086         * expr-evl.c: (expr_evaluate) Assert that `c' is nonzero before
3087         using it.
3088
3089 Sat Mar 20 15:18:16 2004  Ben Pfaff  <blp@gnu.org>
3090
3091         Changed DFM from open-at-first-access to explicit-open.  Before,
3092         calling dfm_get_record() or dfm_put_record() would automatically
3093         open the file.  Now, you have to call dfm_open_for_reading() or
3094         dfm_open_for_writing() explicitly.  This makes it possible to
3095         check permissions, file existence, etc. earlier.
3096
3097         Also made struct file_handle more opaque, and clean up in general.
3098
3099         * data-list.c: (cmd_data_list) Open handle for reading.
3100
3101         * dfm.c: (struct dfm_fhuser_ext) Add `where', `saw_begin_data'
3102         members.
3103         (open_file_r) Renamed dfm_open_for_reading(), rewrote.
3104         (open_file_w) Renamed dfm_open_for_writing(), rewrote.
3105         (open_inline_file) Removed.
3106         (read_record) For inline_file, if we haven't seen BEGIN DATA, read
3107         it.  Deal with line_number in extension record instead of file
3108         handle.
3109         (dfm_get_record) Rewrote.
3110         (dfm_put_record) Rewrote.
3111         (dfm_push) Assert file is open and one of ours.  Deal with
3112         line_number in extension record instead of file handle.
3113         (dfm_pop) Assert file is open and one of ours.  Deal with
3114         line_number in extension record instead of file handle.
3115         (cmd_begin_data) Use dfm_open_for_reading().  Mark that we saw
3116         BEGIN DATA.     
3117
3118         * file-handle.h: (enum constants RH_RF_*) Removed.
3119         (enum constants FH_MD_*) Removed.
3120         (struct file_handle) Removed `name', `norm_fn', `fn', `where',
3121         `recform', `lrecl', `mode' members.  Public references to
3122         `recform' changed to use handle_get_mode(), references to `lrecl'
3123         changed to use handle_get_record_width().  Added `private' member.
3124         (enum file_handle_mode) New.
3125
3126         * file-handle.q: (struct private_file_handle) New structure.
3127         (struct file_handle_list) New structure.
3128         (static var files) New.
3129         (static var file_handles) Removed.
3130         (init_file_handle) Removed.
3131         (create_file_handle) Removed.
3132         (get_handle_with_name) New function.
3133         (get_handle_for_filename) New function.
3134         (cmd_file_handle) Rewritten.
3135         (hash_file_handle) Removed.
3136         (cmp_file_handle) Removed.
3137         (fh_init_files) Rewritten.
3138         (fh_parse_file_handle) Rewritten.  Allows identifiers as
3139         filenames.
3140         (fh_get_handle_by_name) Renamed handle_get_name(), all references
3141         updated.  Rewritten.
3142         (fh_get_handle_by_filename) Renamed handle_get_filename(), all
3143         references updated.  Rewritten.
3144         (fh_record_width) Renamed handle_get_record_width(), all
3145         references updated.  Rewritten.
3146         (handle_get_mode) New function.
3147
3148         * file-type.c: (cmd_file_type) Open handle for reading.
3149
3150         * filename.c: [unix] (struct file_identity) New structure.
3151         [unix] (fn_get_identity) New function.
3152         [unix] (fn_free_identity) New function.
3153         [unix] (fn_compare_file_identities) New function.
3154         [!unix] (struct file_identity) New structure.
3155         [!unix] (fn_get_identity) New function.
3156         [!unix] (fn_free_identity) New function.
3157         [!unix] (fn_compare_file_identities) New function.
3158
3159         * lexer.c: (static var put) Renamed put_token, all references
3160         updated.
3161         (static var put_tokstr) New.
3162         (static var put_tokval) New.
3163         (lex_init) Initialize put_tokstr().
3164         (restore_token) New function.
3165         (save_token) New function.
3166         (lex_get) Use restore_token().
3167         (lex_put_back) Use save_token().
3168         (lex_put_back_id) New function.
3169         (lex_put_forward) Removed.
3170         (lex_preprocess_line) Set put_token instead of using
3171         lex_put_forward().
3172         (lex_negative_to_dash) Use save_token(), set put_token directly.
3173         (dump_token) Use stderr instead of stdout.
3174
3175         * main.c: (main) Remove call to cmd_init().
3176         
3177         * matrix-data.c: (cmd_matrix_data) Open file for reading.
3178
3179         * pfm-read.c: Use handle_get_filename() instead of trying to use
3180         h->fn directly, all over.
3181
3182         * pfm-write.c: Ditto.
3183
3184         * print.c: (internal_cmd_print) Open handle for writing.
3185         (dump_table) Use handle_get_filename().
3186         (print_trns_proc) Use handle_get_mode().
3187         (cmd_print_space) Use fh_parse_file_handle().
3188         Open handle for writing.
3189         [0] (debug_print) Removed.
3190
3191         * sfm-read.c: Use handle_get_filename() instead of trying to use
3192         h->fn directly, all over.
3193
3194         * sfm-write.c: Ditto.
3195
3196 Sat Mar 20 14:35:48 2004  Ben Pfaff  <blp@gnu.org>
3197
3198         Fix memory leaks.
3199         
3200         * autorecode.c: (arc_free) Free arc->src_values.
3201
3202         * error.c: (msg) Free buf.
3203
3204         * val-labs.c: (do_value_labels) Always free vars.
3205
3206         * vfm.c: (close_active_file) If sink has no make_source then call
3207         its destroy function.
3208
3209 Sat Mar 20 14:00:24 2004  Ben Pfaff  <blp@gnu.org>
3210
3211         Fixed cmd_parse() so that it always skips past a full command
3212         name.  A few special commands for which this would be bad get
3213         special treatment.  This lets us drop code for skipping past the
3214         end of a command name in most cmd_*() functions.  It's not worth
3215         listing all the commands affected.
3216
3217         * command.c: (struct command) Remove `cmd' member, replace by
3218         `name' member, all references updated.  Remove `word', `next',
3219         `skip_entire_name' members.
3220         (macro DEFCMD) Deal with revised `struct command'.
3221         (macro UNIMPL) Ditto.
3222         (macro SPCCMD) New macro for commands whose last word shouldn't be
3223         skipped.
3224         (static array cmd_table[]) Make const, rename `commands', remove
3225         sentinel element.
3226         (macro COMMAND_CNT) New macro.
3227         (split_words) Removed.
3228         (cmd_init) Removed.
3229         (FILE_TYPE_okay) Make parameter const.
3230         (cmd_parse) Improve error messages.
3231         (match_strings) New function.
3232         (next_word) New function.
3233         (enum command_match) New enum.
3234         (conflicting_3char_prefixes) New function.
3235         (conflicting_3char_prefix_command) New function.
3236         (cmd_match_words) New function.
3237         (count_matching_commands) New function.
3238         (get_command_name) New function.
3239         (free_words) New function.
3240         (unknown_command_error) New function.
3241         (figure_out_command) Renamed parse_command_name(), rewritten.
3242
3243         * command.def: Removed @ command.  Marked BEGIN DATA, DOCUMENT,
3244         FILE LABEL, REMARK, SUBTITLE, TITLE as special.  Renamed EVALUATE
3245         to DEBUG EVALUATE.  Added N alias for N OF CASES, SORT alias for
3246         SORT CASES.
3247
3248         * command.h: (macro SPCCMD) New.
3249
3250         * include.c: (cmd_include_at) Removed.
3251         (cmd_include) Allow identifier to be used as filename.
3252
3253         * inpt-pgm.c: (cmd_reread) Use fh_parse_file_handle().
3254
3255         * t-test.q: (cmd_t_test) Command name is now parsed for us.
3256         
3257
3258 Sat Mar 20 13:56:00 2004  Ben Pfaff  <blp@gnu.org>
3259
3260         Start work on better test framework.
3261         
3262         * Makefile.am: (pspp_sources) Add debug.c.
3263         
3264         * debug.c: New file.
3265
3266         * compute.c: (cmd_evaluate) Moved to debug.c, renamed
3267         cmd_debug_evaluate().
3268
3269         * expr-prs.c: (expr_parse) Remove PXP_DUMP support.
3270
3271         * expr.h: (enum constant PXP_DUMP) Removed.
3272
3273 Sat Mar 20 00:05:42 WST 2004 John Darrington <john@darrington.wattle.id.au>
3274
3275         * set.q:  Implemented the SHOW command, and synced it to the existing 
3276         SET cmd.
3277
3278         Added a handler for SIGWINCH so that viewlength and viewwidth follow
3279         changes as the window size is changed.
3280
3281         Added fallback to set viewlength and viewwidth from LINES and COLUMS
3282         environment variables if other methods are not available.
3283
3284         glob.c: Removed a lot of global variables from glob.c and encapsulated 
3285         them in set.q
3286
3287         random.c: Tidied up the way the random seed is set.
3288
3289         str.c: Added a ds_vprintf function.
3290
3291         error.c: Extended dump_message so that messages are always broken at
3292         '\n' characters.
3293         
3294 Thu Mar 18 11:07:14 2004  Ben Pfaff  <blp@gnu.org>
3295
3296         * pfm-write.c: (bufwrite) Write out the correct element for string
3297         variables.  From Andreas Streichardt <streichardt@globalpark.de>.
3298
3299 Mon Mar 15 20:48:03 2004  Ben Pfaff  <blp@gnu.org>
3300
3301         Get rid of static and global (!) vars in matrix-data.c.
3302
3303         * matrix-data.c: (static var nr_data) Removed.
3304         (static var nr_factor_values) Removed.
3305         (static var max_cell_index) Removed.
3306         (static var split_values) Removed.
3307         (struct nr_aux_data) New structure.
3308         (read_matrices_without_rowtype) Use a local struct nr_aux_data in
3309         place of static vars, pass to create_case_source() and procedure()
3310         as aux data.
3311         (nr_read_data_lines) Use struct nr_aux_data * parameter instead of
3312         struct matrix_data_pgm *.
3313         (nr_read_splits) Ditto.
3314         (nr_read_factors) Ditto.
3315         (nr_output_data) Ditto.
3316         (static var wr_content) Removed.
3317         (global var wr_data) Removed.
3318         (global var wr_current) Removed.
3319         (struct wr_aux_data) New structure.
3320         (read_matrices_with_rowtype) Use a local struct wr_aux_data in
3321         place of static vars, pass to create_case_source() and procedure()
3322         as aux data.
3323         (matrix_data_read_with_rowtype) Use struct wr_aux_data * parameter
3324         instead of matrix_data_pgm *.
3325         (wr_read_splits) Ditto.
3326         (wr_output_data) Ditto.
3327         (wr_read_rowtype) Ditto.
3328         (wr_read_factors) Ditto.
3329         (wr_read_indeps) Ditto.
3330         
3331 Mon Mar 15 20:07:29 2004  Ben Pfaff  <blp@gnu.org>
3332
3333         Get rid of static vars in autorecode.c.
3334
3335         * autorecode.c: (struct autorecode_trns) Rename `arc' to `specs',
3336         `n_arc' to `spec_cnt'.  All references updated.
3337         (static var v_src) Removed.
3338         (static var v_dest) Removed.
3339         (static var h_trns) Removed.
3340         (static var nv_src) Removed.
3341         (static var descend) Removed.
3342         (static var print) Removed.
3343         (enum direction) New enum.
3344         (struct autorecode_pgm) New structure.
3345         (cmd_autorecode) Use struct autorecode_pgm instead of static vars.
3346         Move n_dest local var into struct autorecode_pgm for ease of
3347         clean-up.  Use arc_free().
3348         (arc_free) New function.
3349         (recode) Modify to take struct autorecode_pgm * parameter instead
3350         of using statics.  Let the caller clean up.
3351         (autorecode_proc_func) Use struct autorecode_pgm * auxiliary data
3352         instead of statics.  Rearrange code a little.
3353
3354 Mon Mar 15 00:25:02 2004  Ben Pfaff  <blp@gnu.org>
3355
3356         Get rid of static, global vars in recode.c.  Remove debug code.
3357
3358         * recode.c: (static var head) Removed.
3359         (global var v) Removed.
3360         (global var nv) Removed.
3361         (cmd_recode) New local variables head, v, nv.  Initialize and free
3362         v.  Don't call debug_print().
3363         [DEBUGGING] (dump_dest) Removed.
3364         [DEBUGGING] (debug_print) Removed.
3365
3366 Mon Mar 15 00:14:49 2004  Ben Pfaff  <blp@gnu.org>
3367
3368         Get rid of static vars in expr-opt.c.
3369
3370         * expr-opt.c: (static var e) Removed.
3371         (static var nop) Removed.
3372         (static var mop) Removed.
3373         (static var ndbl) Removed.
3374         (static var mdbl) Removed.
3375         (static var nstr) Removed.
3376         (static var mstr) Removed.
3377         (static var nvars) Removed.
3378         (static var mvars) Removed.
3379         (struct expr_dump_state) New structure.
3380         (dump_expression) Use new struct expr_dump_state instead of static
3381         vars and pass to functions we call.
3382         (dump_node) Use struct expr_dump_state * parameter.
3383         (emit) Ditto.
3384         (emit_num_con) Ditto.
3385         (emit_str_con) Ditto.
3386         (emit_var) Ditto.
3387         
3388 Mon Mar 15 00:03:51 2004  Ben Pfaff  <blp@gnu.org>
3389
3390         Get rid of static var in COUNT.
3391
3392         * count.c: (static var head) Move into cmd_count().
3393         (cmd_count) [DEBUGGING] Don't call debug_print.
3394         [DEBUGGING] (debug_print) Removed.
3395
3396 Sun Mar 14 23:56:09 2004  Ben Pfaff  <blp@gnu.org>
3397
3398         Get rid of static vars in VALUE LABELS, ADD VALUE LABELS.
3399
3400         * val-labs.c: (static var v) Removed.
3401         (static var nv) Removed.
3402         [DEBUGGING] (debug_print) Removed.
3403         (verify_val_labs) Add struct variable **, int parameters.
3404         (get_label) Ditto.  Improve error messages, streamline.
3405         (erase_labels) New function for erasing value labels, taking over
3406         part of verify_val_labs()'s function.
3407         (init) Removed.
3408         (done) Removed.
3409         (cmd_value_labels) No need to call init() or done() anymore.
3410         (cmd_add_value_labels) Ditto.
3411         (do_value_labels) Add vars, var_cnt local variables.  Clean up
3412         after them internally.  Call erase_labels() if we should.  Don't
3413         call debug_print().
3414
3415 Sun Mar 14 23:33:53 2004  Ben Pfaff  <blp@gnu.org>
3416
3417         Get rid of static vars in MATCH FILES.
3418         
3419         * get.c: (static var mtf_head) Removed.
3420         (static var mtf_tail) Removed.
3421         (static var mtf_by) Removed.
3422         (static var mtf_n_by) Removed.
3423         (static var mtf_master) Removed.
3424         (static var mtf_seq_num) Removed.
3425         (static var mtf_seq_nums) Removed.
3426         (static var mtf_sink) Removed.
3427         (static var mtf_case) Removed.
3428         (struct mtf_proc) New structure.
3429         (cmd_match_files) Use struct mtf_proc instead of static vars.
3430         (mtf_processing_finish) Ditto.
3431         (mtf_free) Ditto.
3432         (mtf_delete_file_in_place) Ditto.
3433         (mtf_read_nonactive_records) Ditto.
3434         (mtf_compare_BY_values) Ditto.
3435         (mtf_processing) Ditto.
3436         (mtf_merge_dictionary) Ditto.
3437
3438 Sun Mar 14 22:48:12 2004  Ben Pfaff  <blp@gnu.org>
3439
3440         * command.def: Add CASESTOVARS, VARSTOCASES unimplemented commands.
3441
3442         * dictionary.c: (dict_rename_var) Add assertion.
3443         (dict_contains_var) Check by index instead of name.
3444
3445 Sun Mar 14 22:01:02 2004  Ben Pfaff  <blp@gnu.org>
3446
3447         Get rid of compaction_necessary, compaction_nval, compaction_case.
3448         Redo VFM interface.  Replace disk_sink and memory_sink by
3449         storage_sink, disk_source and memory_source by storage_source.
3450
3451         * vfm.h: (struct case_sink) Add `dict', `idx_to_fv', `value_cnt'
3452         members.
3453
3454         * vfm.c: 
3455         (struct write_case_data) Remove `begin_func', `end_func',
3456         `func_aux' members.  Add `aux', `trns_case', `sink_case',
3457         `cases_written', `cases_analyzed' members.
3458         (global var compaction_necessary) Make static.
3459         (global var compaction_nval) Removed.
3460         (global var compaction_case) Removed.
3461         (static var case_count) Removed.
3462         (struct procedure_aux_data) Removed.
3463         (struct split_aux_data) Removed.
3464         (procedure) Remove begin_func, end_func parameters.  Rewrite.
3465         (static var not_canceled) Removed.
3466         (process_active_file) Removed.
3467         (process_active_file_write_case) Removed.
3468         (process_active_file_output_case) Removed.
3469         (prepare_for_writing) Moved into open_active_file().
3470         (arrange_compaction) Ditto.
3471         (setup_lag) Ditto.
3472         (open_active_file) Rewrote.
3473         (write_case) New function.
3474         [DEBUGGING] (index_to_varname) Removed.
3475         (execute_transformations) New function.
3476         (exclude_this_case) Renamed filter_case(), changed interface.
3477         (clear_case) Added struct ccase * parameter to interface.
3478         (close_active_file) Added struct write_case_data * parameter,
3479         rewrote.
3480         (disk_sink_create) Removed.
3481         (disk_sink_destroy) Removed.
3482         (disk_sink_make_source) Removed.
3483         (disk_sink_write) Removed.
3484         (disk_source_count) Removed.
3485         (disk_source_destroy) Removed.
3486         (disk_source_read) Removed.
3487         (global var disk_sink_class) Removed.
3488         (global var disk_source_class) Removed.
3489         (global var memory_sink_class) Removed.
3490         (global var memory_source_class) Removed.
3491         (memory_sink_create) Removed.
3492         (memory_sink_destroy) Removed.
3493         (memory_sink_make_source) Removed.
3494         (memory_sink_write) Removed.
3495         (memory_source_count) Removed.
3496         (memory_source_destroy) Removed.
3497         (memory_source_get_cases) Removed.
3498         (memory_source_read) Removed.
3499         (memory_source_set_cases) Removed.
3500         (struct disk_stream_info) Removed.
3501         (struct memory_sink_info) Removed.
3502         (struct memory_source_info) Removed.
3503         (write_active_file_to_disk) Removed.
3504         (destroy_storage_stream_info) New function.
3505         (global var null_sink_class) New var.
3506         (global var storage_sink_class) New var.
3507         (global var storage_source_class) New var.
3508         (open_storage_file) New function.
3509         (storage_sink_destroy) New function.
3510         (storage_sink_make_source) New function.
3511         (storage_sink_open) New function.
3512         (storage_sink_write) New function.
3513         (storage_source_count) New function.
3514         (storage_source_destroy) New function.
3515         (storage_source_get_cases) New function.
3516         (storage_source_on_disk) New function.
3517         (storage_source_read) New function.
3518         (storage_source_set_cases) New function.
3519         (storage_source_to_disk) New function.
3520         (storage_to_disk) New function.
3521         (struct storage_stream_info) New structure.
3522         (write_storage_file) New function.
3523         (procedure_write_case) Removed.
3524         (create_case_source) Add `struct dictionary *' parameter, all
3525         references updated.
3526         (create_case_sink) Ditto.
3527         (free_case_sink) New function.
3528         (struct split_aux_data) New structure.
3529         (procedure_with_splits) New function implementing what procedure()
3530         used to.
3531         (SPLIT_FILE_proc_func) Removed.
3532         (procedure_with_splits_callback) New function.
3533         (equal_splits) New function.
3534         
3535         * aggregate.c: Pass around a struct instead of using statics.
3536         (static var outfile) Remove.
3537         (enum type) Give it tag `missing_treatment'.
3538         (static var missing) Remove.
3539         (static var sort) Remove.
3540         (static var agr_first) Remove.
3541         (static var agr_next) Remove.
3542         (static var case_count) Remove.
3543         (static var prev_case) Remove.
3544         (static var buf64_1xx) Remove.
3545         (static var buf_1xx) Remove.
3546         (struct agr_proc) New structure incorporating the above.
3547         (cmd_aggregate) Use new struct.  Clean up error handling using
3548         agr_destroy().  Completely rewrite actual implementation of
3549         aggregation.
3550         (create_sysfile) Add struct agr_proc * parameter, modify
3551         accordingly.
3552         (parse_aggregate_functions) Ditto.
3553         (free_aggregate_functions) Ditto.  Rename agr_destroy().
3554         (aggregate_single_case) Add struct agr_proc * parameter, modify
3555         accordingly.
3556         (accumulate_aggregate_info) Ditto.
3557         (dump_aggregate_info) Ditto.
3558         (initialize_aggregate_info) Ditto.
3559         (agr_00x_trns_proc) Removed.
3560         (agr_00x_end_func) Removed.
3561         (agr_10x_trns_proc) Removed.
3562         (agr_10x_trns_free) Removed.
3563         (agr_10x_end_func) Removed.
3564         (agr_11x_read) Removed.
3565         (agr_11x_finish) Removed.
3566         [DEBUGGING] (debug_print) Removed.
3567         (write_case_to_sfm) Add struct agr_proc * parameter, modify
3568         accordingly.
3569         (agr_to_active_file) New function.
3570         (presorted_agr_to_sysfile) New function.
3571         (sort_agr_to_sysfile) New function.
3572
3573         * autorecode.c: (cmd_autorecode) Use procedure_with_splits().
3574
3575         * crosstabs.q: (internal_cmd_crosstabs) Ditto.
3576
3577         * descript.q: (cmd_descriptives) Ditto.
3578
3579         * dfm.c: (cmd_begin_data) Check for storage_source_class.  Adapt
3580         to new procedure() interface.
3581
3582         * command.c: (cmd_execute) Adapt to new procedure() interface.
3583
3584         * dictionary.c: (dict_compact_values) Also delete scratch
3585         variables.
3586         (dict_get_compacted_value_cnt) New function.
3587         (dict_get_compacted_idx_to_fv) New function.
3588
3589         * flip.c: (cmd_flip) Warn about and cancel TEMPORARY.
3590         (cmd_flip) Adapt to new procedure() interface.
3591         (flip_sink_write) Use sink->idx_to_fv.
3592
3593         * frequencies.q: (internal_cmd_frequencies) Use
3594         procedure_with_splits().
3595
3596         * get.c: (cmd_save_internal) Adapt to new procedure() interface.
3597         (static var mtf_sink) New static var.
3598         (static var mtf_case) New static var.
3599         (cmd_match_files) Warn about and cancel TEMPORARY.  Redo the way
3600         we actually implement the matching.
3601         (mtf_delete_file_in_place) Use mtf_case.
3602         (mtf_processing) Use mtf_case and mtf_sink.
3603         (cmd_export) Adapt to new procedure() interface.
3604
3605         * levene.c: (levene) Use procedure_with_splits().
3606
3607         * list.q: (cmd_list) Use procedure_with_splits().
3608
3609         * matrix-data.c: (read_matrices_without_rowtype) Adapt to new
3610         procedure() interface.
3611         (read_matrices_with_rowtype) Ditto.
3612
3613         * modify-vars.c; (cmd_modify_vars) Warn about and cancel
3614         TEMPORARY.  Adapt to new procedure() interface.
3615
3616         * rename-vars.c: Warn about and cancel TEMPORARY.
3617
3618         * sort.c: (cmd_sort_cases) Warn about TEMPORARY.
3619         (sort_cases) Use dict_get_compacted_value_cnt() instead of
3620         compaction_nval.  Adapt to new procedure() interface.  Use
3621         storage_source_to_disk().
3622         (do_internal_sort) Don't try to dump the cases to memory.
3623         (compare_case_lists) Pass null idx_to_fv.
3624         (struct initial_run_state) Add `idx_to_fv' member.  Remove
3625         `case_size' member.
3626         (write_initial_runs) Don't initialize irs->case_size.  Adapt to
3627         new procedure() interface.  Reset irs->idx_to_fv after calling
3628         procedure().
3629         (sort_sink_write) Set irs->idx_to_fv.  Use case_size from struct
3630         sort_cases_pgm.  Pass irs, not struct sort_cases_pgm to
3631         push_heap().
3632         (destroy_initial_run_state) Don't dereference irs after freeing
3633         it.
3634         (allocate_cases) Don't calculate case_size locally.
3635         (compare_record) Add idx_to_fv parameter.
3636         (compare_record_run) Change parameter from struct sort_cases_pgm *
3637         to struct initial_run_state *.  Pass irs->idx_to_fv to
3638         compare_record().
3639         (compare_record_run) Third parameter now a struct
3640         initial_run_state *.
3641         (output_record) No need for out_case anymore.  Pass irs, not
3642         struct sort_cases_pgm to pop_heap().  Use case_size from struct
3643         sort_cases_pgm.
3644         (merge) Use case_size from struct sort_cases_pgm.
3645         (merge_once) Use case_size from struct sort_cases_pgm.
3646         Pass null pointer to compare_record() as idx_to_fv.
3647         (global var sort_sink_class) Make static.
3648
3649         * t-test.q: (cmd_t_test) Use procedure_with_splits().
3650
3651         * temporary.c: Remove debugging crap.
3652
3653 Sat Mar 13 14:19:52 WST 2004 John Darrington <john@darrington.wattle.id.au>
3654
3655         * t-test.q, levene.c: Fixed up the handling of MISSING values
3656         int the T-TEST
3657
3658 Fri Mar 12 16:23:35 WST 2004 John Darrington <john@darrington.wattle.id.au>
3659
3660         * t-test.q, levene.c: Added support for T-TEST /GROUP where only 
3661         one value is given.
3662
3663 Wed Mar 10 23:25:13 2004  Ben Pfaff  <blp@gnu.org>
3664
3665         Change explicit variable name checks into use of
3666         dict_class_from_id().
3667
3668         * dictionary.c: (dict_create_var)  Change explicit variable name
3669         check into use of dict_class_from_id().
3670
3671         * get.c: (trim_dictionary) Ditto.
3672
3673         * sel-if.c: (cmd_filter) Ditto.
3674
3675         * sysfile-info.c: (cmd_display) Ditto.
3676
3677         * vars-prs.c: (parse_DATA_LIST_vars) Ditto.
3678
3679         * vfm.c: (arrange_compaction) Ditto.
3680
3681         * weight.c: (cmd_weight) Ditto.
3682
3683 Wed Mar 10 21:16:34 2004  Ben Pfaff  <blp@gnu.org>
3684
3685         * temporary.c: (cmd_temporary) When TEMPORARY was the first
3686         transformation following the input program, if any, for some
3687         reason we special-cased f_trns.  That's just wrong.  It should
3688         always be set to n_trns.
3689
3690 Tue Mar  9 23:44:40 2004  Ben Pfaff  <blp@gnu.org>
3691
3692         * format.c: (parse_format_specifier_name) Fix brown-bag bug
3693         introduced in last check-in.
3694
3695 Tue Mar  9 23:10:41 2004  Ben Pfaff  <blp@gnu.org>
3696
3697         * format.c: (global array translate_fmt[]) Removed.
3698         (translate_fmt) New function as replacement.
3699         (parse_format_specifier_name) Rewrite.
3700
3701         * pfm-read.c: (convert_format) Use translate_fmt() instead of
3702         translate_fmt[].
3703
3704         * sfm-read.c: (parse_format_spec) Ditto.
3705
3706         * postscript.c: (text) Fix handling of fonts with missing
3707         ligatures.
3708
3709         * sort.c: (struct external_sort) Add temp_name member.
3710         (destroy_external_sort) Free temp_dir, temp_name members.
3711         (init_external_sort) Allocate temp_name.
3712         (get_temp_file_name) Change prototype.
3713         (open_temp_file) Deal with change to get_temp_file_name().
3714         (close_temp_file) Ditto.
3715         (remove_temp_file) Ditto.
3716         (write_temp_file) Ditto.
3717         (read_temp_file) Ditto.
3718         (sort_sink_destroy) Removed.
3719         (sort_sink_class) Change destroy member to null.
3720
3721 Tue Mar  9 22:36:34 2004  Ben Pfaff  <blp@gnu.org>
3722
3723         Eliminate temp_case.
3724
3725         * aggregate.c: (cmd_aggregate) No need to save/restore temp_case
3726         anymore.  Use agr_11x_finish().
3727         (aggregate_single_case) Make first param const.
3728         (accumulate_aggregate_info) Ditto.
3729         (agr_00x_end_func) Use compaction_case, not temp_case.
3730         (agr_11x_func) Break into agr_11x_read(), agr_11x_finish().
3731
3732         * data-list.c: (struct data_list_pgm) Add `case_size' member.
3733         (cmd_data_list) Initialize case_size.
3734         (read_from_data_list_fixed) Add struct ccase * param, use instead
3735         of temp_case.
3736         (read_from_data_list_free) Ditto.
3737         (read_from_data_list_list) Ditto.
3738         (read_one_case) Rename data_list_trns_proc(), all references
3739         updated.  Add argument in calling above functions.  Use c
3740         argument instead of temp_case.
3741         (destroy_dls) Rename data_list_trns_free(), all references
3742         updated.
3743
3744         * expr-evl.c: (expr_evaluate) Make second parameter const.
3745
3746         * file-type.c: (struct file_type_pgm) Add `case_size' member.
3747         (cmd_end_file_type) Initialize `case_size'.
3748         (file_type_source_read) Add struct ccase * parameter.  Use instead
3749         of temp_case.
3750
3751         * flip.c: Rewritten.
3752
3753         * get.c: (struct get_pgm) New structure to keep track of
3754         case_size.
3755         (cmd_get) Initialize case_size.
3756         (cmd_import) Ditto.
3757         (get_source) Deal with struct get_pgm.
3758         (get_source_read) Add struct ccase * parameter, use instead of
3759         temp_case.
3760         (import_source_read) Ditto.
3761
3762         * get.c: Use a null pointer instead of temp_case to represent the
3763         "current case" in a struct mtf_file's input member.
3764         (mtf_processing_finish) Pass null to mtf_processing(), not
3765         temp_case.
3766         (mtf_read_nonactive_records) Don't set iter->input to temp_case.
3767         (mtf_compare_BY_values) Add extra arg, use instead of null input
3768         members.
3769         (mtf_processing) Use c parameter instead of temp_case.  Pass
3770         compaction_case to process_active_file_output_case().
3771         
3772         * glob.c: (global variable temp_case) Removed.
3773
3774         * inpt-pgm.c: (struct input_program_pgm) Add `case_size' member.
3775         (cmd_input_program) Initialize case_size.  Set
3776         vfm_source->value_cnt.
3777         (init_case) Add struct ccase * parameter, use instead of
3778         temp_case.
3779         (clear_case) Ditto.
3780         (input_program_source_read) Ditto.
3781
3782         * matrix-data.c: (matrix_data_read_without_rowtype) Ditto.
3783         (dump_cell_content) Ditto.
3784         (nr_output_data) Ditto.
3785         (read_matrices_without_rowtype) Ditto.
3786         (matrix_data_read_with_rowtype) Ditto.
3787         (wr_read_splits) Ditto.
3788         (wr_output_data) Ditto.
3789
3790         * sort.h: (struct sort_cases_pgm) New member `case_size'.
3791         
3792         * sort.c: (sort_cases) Initialize scp->case_size.
3793         (struct external_sort) Remove `case_size' member.
3794         (write_initial_runs) Only call vfm_sink->class_destroy if
3795         non-null.
3796         (struct sort_source_aux) New structure.
3797         (sort_source_read_helper) New function.
3798         (sort_source_read) Use sort_source_read_helper().
3799         (read_sort_output) Change interface to be more reasonable.
3800         (read_internal_sort_output) Ditto.
3801         (read_external_sort_output) Ditto.
3802
3803         * vars-prs.c: (dict_class_to_name) Pass return value through
3804         gettext.
3805
3806         * vfm.c: (struct procedure_aux_data) Add `trns_case' member.
3807         (procedure) Initialize trns_case.
3808         (procedure) Pass trns_case to vfm_source->class->read().
3809         Free trns_case.
3810         (process_active_file) Start using struct procedure_aux_data.
3811         (process_active_file_write_case) Pass trns_case to
3812         transformations, lag_case(), clear_case().
3813         (process_active_file_output_case) Add struct ccase * parameter.
3814         (create_trns_case) New function.
3815         (make_temp_case) Removed.
3816         (vector_initialization) Removed.
3817         (close_active_file) Only call make_source if non-null, otherwise
3818         set vfm_source to null pointer.  Don't free temp_case.
3819         (disk_source_read) Add struct ccase * parameter, use instead of
3820         temp_case.
3821         (memory_source_read) Ditto.
3822         (lag_case) Add const struct ccase * member.
3823         (procedure_write_case) Use trns_case instead of temp_case.
3824         (clear_case) Add struct ccase * member, use instead of temp_case.
3825         (exclude_this_case) Ditto.
3826         (create_case_source) Add struct dictionary * parameter, use to
3827         initialize source->value_cnt.
3828
3829         * vfm.h: (struct case_source) Add `value_cnt' member.
3830         (struct case_source_class) Add struct ccase * parameter to `read'
3831         member function pointer.
3832         (struct case_sink_class) Make struct ccase * parameter const in
3833         `write' member function pointer.
3834         
3835 Wed Mar  3 20:44:37 2004  Ben Pfaff  <blp@gnu.org>
3836
3837         Fix a lot of "possibly uninitialized variable" warnings.  Some of
3838         them are even real bugs.  A few of them make me wonder how the
3839         code ever worked.
3840
3841         * aggregate.c: (parse_aggregate_functions) Initialize `function.
3842
3843         * ascii.c: (output_lines) Add default case to switch.
3844
3845         * crosstabs.q: Remove static variable `expected' and all
3846         references to it.
3847         (display_crosstabulation) Always calculate expected value.
3848         (calc_chisq) Ditto.
3849         (output_pivot_table) Initialize `cmp'.
3850         (display_crosstabulation) New variable `last_row', which is
3851         initialized.
3852
3853         * data-in.c: (parse_numeric) Always initialize sign.  How did this
3854         work at all?!
3855
3856         * data-list.c: (repeating_data_trns_proc) Always initialize code.
3857         Always set info.ofs.  (How did this work?!)
3858
3859         * expr-opt.c: (optimize_tree) Always initialize `m'.
3860         (evaluate_tree) Always initialize `c'.  (How did this work?)
3861
3862         * frequencies.q: (frq_custom_variables) Always initialize min,
3863         max.
3864         (frq_custom_grouped) Always initialize `dl'.
3865
3866         * groff-font.c: (groff_read_font) Always initialize char_set.
3867
3868         * matrix-data.c: (nr_output_data) Initialize `split'.
3869         (wr_read_splits) Remove shadowing split_cnt declaration.
3870         (wr_output_data) Initialize `split'.
3871
3872         * output.c: (tokener) Skip add character on syntax error.
3873
3874         * pool.c: (pool_strndup) Always set `copy'.  (How did this work?!)
3875
3876         * postscript.c: (read_ps_encodings) Use line.string instead of
3877         uninitialized `bp'.
3878         (write_text) Add default case to switch.
3879         (text) Always initialize multiple variables.  Fix bug with
3880         ligatures.
3881
3882         * print.c: (fixed_parse_fortran) Initialize head.
3883         (alloc_line) Add default case to switch.
3884
3885         * recode.c: (parse_dest_spec) Handle case where nothing matches.
3886         (recode_trns_proc) Move variable declaration inward.  Add default
3887         case to switch.
3888
3889         * sfm-read.c: (read_header) Initialize skip_amt.
3890
3891         * sysfile-info.c: (display_variables) Always initialize pc.
3892
3893         * vars-prs.c: Initialized `included'.
3894
3895 Wed Mar  3 09:30:09 2004  Ben Pfaff  <blp@gnu.org>
3896
3897         * main.c: (main) sigaction()'s sa_flags member was uninitialized.
3898         Just use signal() instead.
3899
3900 Wed Mar  3 09:26:30 2004  Ben Pfaff  <blp@gnu.org>
3901
3902         Get rid of vfm_sink_info and vfm_source_info.
3903         
3904         * aggregate.c: (agr_00x_end_func) Don't increment
3905         sfm_sink_info.ncases.
3906
3907         * sort.c: (do_internal_sort) Get case count from
3908         vfm_source->class->count().
3909         (struct external_sort) Add `case_size' member.
3910         (do_external_sort) Initialize case_size.
3911         (struct initial_run_state) Add `case_size' member.
3912         (write_initial_runs) Initialize case_size.
3913         (sort_sink_write) Use case_size.
3914         (read_external_sort_output) Use case_size.  Get case_cnt from
3915         initial_runs.
3916
3917         * vfm.c: (struct write_case_data) Add underscores to existing arg
3918         names, all references updated.  Renamed `aux' as `func_aux', all
3919         references updated.  Added new `aux' member.
3920         (global var vfm_source_info) Removed.
3921         (global var vfm_sink_info) Removed.
3922         (struct procedure_aux_data) New.
3923         (struct split_aux_data) New.
3924         (procedure) Use `aux' fields for procedure_aux_data,
3925         split_aux_data.
3926         (process_active_file_write_case) Pass case_count + 1 to
3927         transformation procedures, exclude_this_case().
3928         (process_active_file_output_case) Don't increment
3929         vfm_sink_info.ncases.
3930         (prepare_for_writing) Don't initialize vfm_sink_info.  Don't try
3931         to send data to disk early.
3932         (make_temp_case) Don't use vfm_sink_info.case_size.
3933         (close_active_file) Don't initialize vfm_source_info.
3934         (struct disk_stream_info) New, to allow for case_cnt and case_size fields.
3935         (disk_sink_create) Initialize and/or update disk_stream_info.
3936         (disk_sink_write) Ditto.
3937         (disk_sink_destroy) Ditto.
3938         (disk_sink_make_source) Ditto.
3939         (disk_source_read) Ditto.
3940         (disk_source_destroy) Ditto.
3941         (global var disk_source_class) Add disk_source_count().
3942         (disk_source_count) New function.
3943         (struct memory_sink_info) Add `case_cnt', `case_size' members.
3944         (struct memory_source_info) Ditto.
3945         (memory_sink_create) Deal with case_cnt, case_size.
3946         (memory_sink_write) Ditto.
3947         (memory_sink_make_source) Ditto.
3948         (memory_source_read) Ditto.
3949         (memory_source_count) New function.
3950         (memory_source_class) Add memory_source_count().
3951         (procedure_write_case) Don't use vfm_sink_info.ncases.  Do use
3952         proc_aux->cases_written, and pass it to transformation procedures
3953         and exclude_this_case ().
3954         (exclude_this_case) Add case_num parameter.  Pass it to
3955         expr_evaluate().
3956         (SPLIT_FILE_procfunc) Use split_aux->prev_case instead of static
3957         variable.
3958
3959         * vfm.h: (struct case_source_class) Add `count' member.
3960
3961         * vfmP.h: (struct stream_info) Removed.
3962         (global variable vfm_source_info) Removed.
3963         (global variable vfm_sink_info) Removed.
3964         
3965 Tue Mar  2 23:38:17 2004  Ben Pfaff  <blp@gnu.org>
3966
3967         * var.h: (typedef trns_proc_func) New typedef.
3968         (trns_free_func) New typedef.
3969         (struct trns_header) Change `proc' to type trns_proc_func, `free'
3970         to type trns_free_func.  This only changes the actual type of
3971         trns_proc_func, adding a `case_num' parameter.  Updated all
3972         implementations to use the typedefs instead.
3973
3974         * compute.c: (compute_num) Pass case_num to expr_evaluate().
3975         (compute_num_vec) Ditto.
3976         (compute_str) Ditto.
3977         (compute_str_vec) Ditto.
3978
3979         * do-if.c: (do_if_trns_proc) Ditto.
3980
3981         * expr-evl.c: (expr_evaluate) Add new case_num parameter, use for
3982         OP_CASENUM.
3983
3984         * inpt-pgm.c: (input_program_source_read) Maintain case count,
3985         pass to transformation functions.
3986         (reread_trns_proc) Pass case_num arg to expr_evaluate().
3987
3988         * loop.c: (loop_1_trns_proc) Ditto.
3989         (loop_2_trns_proc) Ditto.
3990         (loop_3_trns_proc) Ditto.
3991
3992         * print.c: (print_space_trns_proc) Ditto.
3993
3994         * sel-if.c: (select_if_proc) Ditto.
3995
3996 Tue Mar  2 11:36:52 2004  Ben Pfaff  <blp@gnu.org>
3997
3998         * frequencies.q: (cleanup_freq_tab) Avoid memory leak by
3999         destroying hash table.
4000
4001         * glob.c: (read_active_file) Variable not referenced, removed.
4002         (cancel_input_pgm) Ditto.
4003
4004         * levene.c: Add #include <stdlib.h> needed to call free().
4005
4006         * aggregate.c: (parse_aggregate_functions) Make `function'
4007         variable const.
4008
4009 Tue Mar  2 11:30:56 2004  Ben Pfaff  <blp@gnu.org>
4010
4011         Start working to eliminate VFM dependence on static variables.
4012
4013         * command.c: (cmd_parse) Use case_source_is_class().
4014
4015         * data-list.c: Rewrite to eliminate use of static variables.
4016
4017         * dfm.c: (cmd_begin_data) Use case_source_is_class().
4018
4019         * file-handle.q: (fh_handle_name) Make parameter const.
4020
4021         * file-type.c: Rewrite to eliminate use of static variables.
4022
4023         * flip.c: Rewrite to eliminate use of static variables.
4024
4025         * format.c: (get_format_var_width) New function.
4026
4027         * get.c: Eliminate use of static variables.
4028
4029         * inpt-pgm.c: Eliminate use of static variables.
4030
4031         * matrix-data.c: Eliminate use of static variables.
4032
4033         * set.q: (set_max_workspace) New variable.
4034         (cmd_set) Use SET WORKSPACE to modify set_max_workspace.
4035
4036         * var.h: (struct case_list) Move here from vfmP.h.
4037
4038         * vars-atr.c: (discard_variables) Handle new vfm_source type.
4039
4040         * vfm.c: (vfm_source) Change type from struct case_stream to
4041         struct case_source.
4042         (vfm_sink) Change type from struct case_stream to struct
4043         case_sink.
4044         (static var paging) Rename workspace_overflow, all references
4045         updated.
4046         (procedure) Use new class structures.
4047         (process_active_file) Ditto.
4048         (process_active_file_write_case) Ditto.
4049         (prepare_for_writing) Use set_max_workspace.  Use new class
4050         structures.
4051         (close_active_file) Use new class structures.  Free old sink.
4052         (global var disk_source_file) Removed.
4053         (global var disk_sink_file) Removed.
4054         (disk_stream_init) Removed.
4055         (disk_stream_read) Removed.
4056         (disk_stream_write) Removed.
4057         (disk_stream_mode) Removed.
4058         (disk_stream_destroy_source) Removed.
4059         (disk_stream_destroy_sink) Removed.
4060         (global var vfm_disk_stream) Removed.
4061         (disk_sink_create) New function.
4062         (disk_sink_write) New function.
4063         (disk_sink_destroy) New function.
4064         (disk_sink_make_source) New function.
4065         (disk_sink_class) New static var.
4066         (disk_source_read) New function.
4067         (disk_source_destroy) New function.
4068         (global var vfm_source_class) New var.
4069         (global var memory_source_cases) Removed.
4070         (global var memory_sink_cases) Removed.
4071         (global var memory_sink_max_cases) Removed.
4072         (struct memory_sink_info) New struct.
4073         (memory_stream_init) Removed.
4074         (memory_stream_read) Removed.
4075         (memory_stream_write) Removed.
4076         (memory_stream_mode) Removed.
4077         (memory_stream_destroy_source) Removed.
4078         (memory_stream_destroy_sink) Removed.
4079         (global var vfm_memory_stream) Removed.
4080         (page_to_disk) Renamed write_active_file_to_disk().
4081         (memory_sink_create) New function.
4082         (memory_sink_write) New function.
4083         (memory_sink_destroy) New function.
4084         (memory_sink_make_source) New function.
4085         (memory_sink_class) New static var.
4086         (memory_source_read) New function.
4087         (memory_source_destroy) New function.
4088         (memory_source_get_cases) New function.
4089         (memory_source_set_cases) New function.
4090         (global var vfm_source_class) New var.
4091         (procedure_write_case) Use new class structures.
4092         (create_case_source) New function.
4093         (case_source_is_complex) New function.
4094         (case_source_is_class) New function.
4095         (create_case_sink) New function.
4096
4097         * vfm.h: (global variable reinit_sysmis) Not used, removed.
4098         (global variable reinit_blanks) Not used, removed.
4099         (global variable init_zero) Not used, removed.
4100         (global variable init_blanks) Not used, removed.
4101         (struct case_source) New struct.
4102         (struct case_source_class) New struct.
4103         (struct case_sink) New struct.
4104         (struct case_sink_class) New struct.
4105         (struct case_stream) Removed.
4106
4107         * vfmP.h: (struct case_list) Moved to var.h.
4108
4109 Tue Mar  2 11:28:30 2004  Ben Pfaff  <blp@gnu.org>
4110
4111         * algorithm.c: (count_equal) New function.
4112         (count_if) New function.
4113         (unique) Add assertions.
4114         (partition) Add assertions.
4115         (is_partitioned) New function.
4116         (copy_if) Add assertions.
4117         (remove_equal) Add assertions.
4118         (lexicographical_compare) Rename lexicographical_compare_3way.
4119         (sort) Add assertions.  Rephrase some code.
4120         (is_sorted) New function.
4121
4122 Sun Feb 29 23:24:57 2004  Ben Pfaff  <blp@gnu.org>
4123
4124         Rewrite SORT CASES.
4125
4126         * sort.c: Completely rewrite.
4127
4128         * sort.h: Expose interface via struct sort_cases_pgm, not via
4129         global variables.
4130
4131         * aggregate.c: (sort) New static var.
4132         (cmd_aggregate) Use sort.
4133         (create_sysfile) Ditto.
4134         (aggregate_single_case) Ditto.
4135         (dump_aggregate_info) Ditto.
4136         (agr_00x_end_func) Ditto.
4137         (debug_print) Ditto.
4138
4139         * var.h: (enum SRT_ASCEND) Removed.
4140         (enum SRT_DESCEND) Removed.
4141         (struct sort_cases_proc) Removed.
4142         (struct variable) Remove p.srt member.
4143
4144 Sun Feb 29 23:22:45 2004  Ben Pfaff  <blp@gnu.org>
4145
4146         Get rid of the old, crappy heap structure and replace it by a new,
4147         shiny, C++ STL-like heap structure.
4148         
4149         * Makefile.am: (pspp_SOURCES) Remove heap.c, heap.h.
4150
4151         * algorithm.c: (push_heap) New function.
4152         (heapify) Ditto.
4153         (pop_heap) Ditto.
4154         (make_heap) Ditto.
4155         (sort_heap) Ditto.
4156         (is_heap) Ditto.
4157         
4158         * heap.c: Removed.
4159
4160         * heap.h: Removed.
4161
4162 Sun Feb 29 23:21:53 2004  Ben Pfaff  <blp@gnu.org>
4163
4164         Increase warning level.
4165         
4166         * Makefile.am: (AM_CFLAGS) Remove -Wnouninitialized.
4167
4168 Sat Feb 21 17:38:58 WST 2004 John Darrington <john@darrington.wattle.id.au>
4169
4170         * main.c: Added a signal handler for SIGSEGV requesting a bug report.
4171          
4172 Fri Feb 20 23:22:14 2004  Ben Pfaff  <blp@gnu.org>
4173
4174         * dictionary.c: (dict_create_var) Fix root cause of bug worked
4175         around by previous change log entry.
4176         
4177         * compute.c: (lvalue_finalize) Remove workaround from previous
4178         change log entry.
4179
4180 Fri Feb 20 14:37:41 WAST 2004 John Darrington <john@darrington.wattle.id.au>
4181
4182         * compute.c: Fixed a bug where the Format was not getting set for 
4183           computed variables (thus causing a crash when SAVEing).
4184
4185         * Added a test to stop this bug ever coming back
4186
4187 Wed Feb 18 22:21:35 2004  Ben Pfaff  <blp@gnu.org>
4188
4189         Got rid of approx.h.  In general, replaced all references to
4190         approx_eq() by ==, approx_lt() by <, etc.  Other types of changes
4191         noted below.
4192
4193         * Makefile.am: (pspp_SOURCES) Removed approx.h.
4194
4195         * data-out.c: (try_F) Replaced test for approx_eq(number, 0.0) by
4196         test for mag < EPSILON.
4197
4198         * misc.h: Add definition of EPSILON.
4199
4200 Wed Feb 18 21:32:44 2004  Ben Pfaff  <blp@gnu.org>
4201
4202         * vfm.c: (procedure) Add check to prevent recursive call.
4203
4204 Wed Feb 18 21:48:54 WST 2004 John Darrington <john@darrington.wattle.id.au>
4205
4206         * Moved the declarations relating to values to their own header file
4207           (val.h)
4208
4209         * Added levene.c and levene.h
4210
4211         * vars-atr.c: Changed the signature of compare_values to 
4212         take const * arguments.
4213                 
4214         * t-test.q: Changed the structure of struct t_test_proc 
4215        variables now contain their own group statistics information.
4216        Eventually, t_test_proc might get renamed, because it'd be 
4217        applicable to other commands too.
4218
4219 Mon Feb 16 23:15:51 2004  Ben Pfaff  <blp@gnu.org>
4220
4221         * data-out.c: Clean up.  Changed interface of convert_*() to take
4222         either a `double' or a `const char *' instead of a `const union
4223         value *'.  Update all implementations of those interfaces.
4224         (data_out) Use switch statements instead of a table.
4225         (convert_AHEX) Rewrite.
4226
4227         * format.h: Update comment.
4228
4229 Mon Feb 16 22:14:36 2004  Ben Pfaff  <blp@gnu.org>
4230
4231         * q2c.c: (dump_header) Add an Emacs header line to output files
4232         that makes generated .c files read-only by default, to make it
4233         difficult to accidentally change generated files.
4234
4235 Mon Feb 16 22:12:07 2004  Ben Pfaff  <blp@gnu.org>
4236
4237         * frequencies.q: (compare_freq_numeric_a) Compare by frequency,
4238         not bogus a->v.c <=> b->v.c pointer compare.
4239         (compare_freq_alpha_a) Ditto.
4240         (compare_freq_numeric_d) Ditto.
4241         (compare_freq_alpha_d) Ditto.
4242         
4243 Mon Feb 16 22:00:53 2004  Ben Pfaff  <blp@gnu.org>
4244
4245         Changed data_out() to store string data directly into a `union
4246         value''s s member, not indirectly into c.
4247
4248         * crosstabs.q: (output_pivot_table) Use format_short() instead of
4249         data_out().
4250         (table_value_missing) Ditto.
4251         (float_M_suffix) Ditto.
4252         (format_short) New function.
4253
4254         * data-in.h: (data_in_finite_line) Remove inline definition.
4255
4256         * data-list.c: (destroy_dls_var_spec) New function.
4257         (destroy_dls) Rewrite in terms of destroy_dls_var_spec().
4258         (data_list_source_destroy_source) Avoid cast.
4259         (struct repeating_data_trns) New field `id_value'.  Update
4260         comments.
4261         (cmd_repeating_data) Initialize id_value.  Use new
4262         repeating_data_trns_free() for freeing REPEATING DATA
4263         transformations.
4264         (rpd_parse_record) Rewrite support for record ID to be less bogus.
4265         (repeating_data_trns_free) New function.
4266
4267         * data-out.c: (data_out) Change return type to `void' by replacing
4268         error returns by writing a message into the output buffer.
4269         (convert_A) Read from v->s instead of v->c.
4270         (convert_AHEX) Ditto.
4271
4272         * expr-evl.c: Update comment.
4273         (expr_evaluate) Add assertion in OP_STRING case.
4274
4275         * format.h: (macro MAX_FORMATTED_LEN) New macro.
4276
4277         * list.q: (list_cases) Update for new data_out() semantics.
4278
4279         * print.c: (print_trns_proc) Ditto.
4280
4281         * tab.c: (tab_value) Ditto.
4282         (tab_float) Avoid stupid cast.
4283
4284         * var.h: Update comments.
4285         (macro MAX_STRING) New macro.
4286         (macro MAX_ELEMS_PER_VALUE) New macro.
4287
4288         * vars-atr.c: (compare_values) New function.
4289
4290         * vfm.c: (dump_splits) Update for new data_out() semantics.
4291
4292 Mon Feb 16 21:45:47 2004  Ben Pfaff  <blp@gnu.org>
4293
4294         * crosstabs.q: (struct table_entry) Rename v[] to values[].  All
4295         references updated.
4296         (struct crosstab) Rename v[] to vars[].  All references updated.
4297         (hash_table_entry) Replace the hash algorithm and fix a bug at the
4298         same time, which caused the hash value to depend only on a single
4299         value, not all of the variables' values.
4300         
4301 Mon Feb 16 12:49:53 2004  Ben Pfaff  <blp@gnu.org>
4302
4303         Clean up struct dictionary's value_cnt usage.
4304
4305         * dictionary.c: Add a function comment to each function.
4306         (struct dictionary) Rename value_cnt to next_value_idx, which more
4307         accurately reflects its meaning.  All references updated.
4308         (dict_rename_vars) Add assertion.
4309         (dict_get_value_cnt) Rename dict_get_next_value_idx().  All
4310         references updated.
4311         (dict_get_case_size) New function.
4312
4313         * aggregate.c: (create_sysfile) Use dict_get_case_size().
4314
4315         * get.c: (mtf_read_nonactive_records) Ditto.
4316
4317         * sort.c: (allocate_cases) Ditto.
4318         (write_initial_runs) Ditto.
4319         (merge) Ditto.
4320         (merge_once) Ditto.
4321
4322         * vfm.c: (prepare_for_writing) Ditto.
4323         (setup_lag) Ditto.
4324         (lag_case) Ditto.
4325
4326 Mon Feb 16 00:17:55 2004  Ben Pfaff  <blp@gnu.org>
4327
4328         Make vfm.c slightly less grotesque.
4329
4330         * vfm.c: (filter_var) Removed.
4331         (filter_index) Removed.
4332         (FILTERED macro) Removed.
4333         (exclude_this_case) New function.
4334         (process_active_file_write_case) Use exclude_this_case() instead
4335         of FILTERED and inline tests.
4336         (procedure_write_case) Ditto.
4337         (setup_filter) Removed.
4338         (open_active_file) Don't call setup_filter().
4339         (close_active_file) Call dict_get_filter() instead of checking
4340         filter_var.
4341
4342 Mon Feb 16 00:01:53 2004  Ben Pfaff  <blp@gnu.org>
4343
4344         * var.h: (struct variable) Update comments.
4345
4346 Sun Feb 15 23:14:59 2004  Ben Pfaff  <blp@gnu.org>
4347
4348         New functions dict_create_var_assert(), dict_lookup_var_assert().
4349         Converted several dict_*_var()/assert pairs into a single
4350         dict_*_var_assert().
4351
4352         * dictionary.c: (dict_create_var_assert) New function.
4353         (dict_lookup_var_assert) New function.
4354
4355 Sun Feb 15 23:06:08 2004  Ben Pfaff  <blp@gnu.org>
4356
4357         Got rid of "struct long_vec", envector(), devector(), etc.  Added
4358         two members `init', `reinit' to struct variable as a substitute.
4359         
4360         * Makefile.am: (pspp_SOURCES) Removed cases.c, cases.h.
4361         
4362         * cases.c: Removed.
4363
4364         * cases.h: Removed.
4365
4366         * aggregate.c: (parse_aggregate_functions) destvar doesn't need
4367         init.
4368
4369         * autorecode.c: (cmd_autorecode) destvars don't need init.
4370
4371         * compute.c: (lvalue_finalize) Set reinit.
4372
4373         * data-list.c: (fixed_parse_compatible) Don't need init usually.
4374         (dump_fmt_list) Ditto.
4375         (parse_free) Ditto.
4376
4377         * descript.q: (run_z_pass) Don't need init for z-scores.
4378
4379         * dictionary.c: (dict_create_var) Initialize `init', `reinit'
4380         members.
4381         (dict_clone_var) Copy `reinit' member, initialize `init' member.
4382
4383         * glob.c: (init_glob) Remove vec_init() calls.
4384
4385         * inpt-pgm.c: (cmd_end_input_program) Use `reinit', not `left'.
4386         
4387         * loop.c: (internal_cmd_loop) Don't need to call envector().
4388
4389         * numeric.c: (cmd_numeric) Ditto.
4390         (cmd_string) Ditto.
4391         (cmd_leave) Ditto.  Set `init', `reinit' members.
4392
4393         * recode.c: (cmd_recode) Don't need to call envector().
4394
4395         * repeat.c: (internal_cmd_do_repeat) Ditto.
4396
4397         * var.h: (struct variable) Remove `left'.  Add `init', `reinit'.
4398         (force_create_variable) Removed prototype.
4399         (force_dup_variable) Ditto.
4400
4401         * vector.c: (cmd_vector) Don't need to call envector().
4402
4403         * vfm.c: (reinit_sysmis) Removed.
4404         (reinit_blanks) Removed.
4405         (init_zero) Removed.
4406         (init_blanks) Removed.
4407         (process_active_file_write_case) No need to deal with vectors.
4408         Call clear_temp_case().
4409         (vector_initialization) Rewrite to use `init', `reinit'.
4410         (close_active_file) No need to call vec_clear().
4411         (procedure_write_case) Call clear_temp_case().
4412         (clear_temp_case) New function.
4413
4414 Sun Feb 15 20:50:36 2004  Ben Pfaff  <blp@gnu.org>
4415
4416         * pfm-write.c: (bufwrite) Get rid of nasty cast that also invoked
4417         undefined behavior.
4418
4419 Thu Feb 12 23:35:15 2004  Ben Pfaff  <blp@gnu.org>
4420
4421         Add auxiliary argument to procedure() interface.  Associated small
4422         clean-ups of vfm interface.
4423         
4424         * Updated every caller of procedure() and process_active_file() to
4425         reflect modified interface.  Simple, ordinary changes not listed
4426         otherwise below.
4427
4428         * Updated every function that implements struct case_stream's
4429         `read' function to take a write_case_func and a write_case_data.
4430         Also updated every caller of write_case() to instead call them
4431         through these arguments.  In some cases this meant that the extra
4432         args had to be threaded through a couple of extra levels.  This
4433         wasn't difficult or interesting so the details won't be given.
4434
4435         * data-list.c: (struct repeating_data_trns) Add members
4436         `write_case', `wc_data' as kluge.
4437         (read_one_set_of_repetitions) Rename repeating_data_trns_proc and
4438         make non-static.
4439         (repeating_data_set_write_case) New function.
4440
4441         * data-list.h: New file to declare repeating_data_trns_proc() and
4442         repeating_data_set_write_case().
4443
4444         * inpt-pgm.c: (input_program_source_read) Call
4445         repeating_data_set_write_case() for all the REPEATING DATA
4446         transformations, so that they know where to send their cases.
4447         It's a big kluge.  Also kluge in END CASE.
4448         (end_case_trns_proc) Never called anymore, but we still need it,
4449         so just assert(0).
4450
4451         * sort.c: (read_sort_output) Update to match struct case_stream
4452         `read' member.
4453
4454         * vfm.c: (struct write_case_data) New structure.
4455         (proc_func) Removed.
4456         (virt_proc_func) Removed.
4457         (begin_func) Removed.
4458         (virt_begin_func) Removed.
4459         (end_func) Removed.
4460         (write_case) Removed.
4461         (procedure) Added an auxiliary parameter to each function pointer
4462         argument's prototype.  Added an auxiliary data parameter.
4463         Rewrote.
4464         (process_active_file) Ditto.
4465         (process_active_file_write_case) Pass aux data along.
4466         (close_active_file) Ditto.
4467         (procedure_write_case) Ditto.
4468         (SPLIT_FILE_procfunc) Ditto.
4469
4470         * vfm.h: (typedef write_case_data) New.
4471         (typedef write_case_func) New.
4472         (struct case_stream) Add parameters to `read' member prototype.
4473         
4474 Thu Feb 12 19:24:53 WST 2004 John Darrington <john@darrington.wattle.id.au>
4475
4476         * t-test.q:  Added calculations for independent samples. (But no Levene
4477         test yet!)
4478
4479         * Makefile.am: Moved q_sources_c into own variable 
4480
4481 Wed Feb 11 23:56:51 2004  Ben Pfaff  <blp@gnu.org>
4482
4483         Miscellaneous cleanups.
4484         
4485         * Change unused to UNUSED in many source files to reflect modified
4486         pref.h.  Change use of __WIN32__, __MSDOS, __DJGPP__,
4487         __CYGWIN32__, __unix__, and unix not to assume that they're
4488         defined to a nonzero value.  Change use of __attribute__ to use
4489         NO_RETURN or PRINTF_FORMAT instead.
4490         
4491         * alloc.h: Move definitions for local_alloc(), local_free() here
4492         from ../pref.h.orig and simplify.
4493
4494         * expr-evl.c: Instead of working differently based on PAGED_STACK,
4495         use a pool allocator unconditionally.
4496         (CHECK_STRING_SPACE) Removed.
4497         (ALLOC_STRING_SPACE) Removed.
4498         (expr_evaluate) Use e->pool instead of CHECK_STRING_SPACE and
4499         ALLOC_STRING_SPACE.
4500
4501         * expr-opt.c: (dump_expression) Allocate string pool.
4502
4503         * expr-prs.c: (expr_free) Free string pool.
4504
4505         * pool.c: (pool_destroy) This pool must be removed from its
4506         parent's list of gizmos, not from its own.  Use free_all_gizmos().
4507         (pool_clear) New function.
4508         (free_all_gizmos) New function.
4509         (pool_alloc) Use space in empty block after this one if any.
4510         (pool_release) Only empty out blocks, don't actually free() them.
4511
4512         * print.c: Get rid of PAGED_STACK special case by always
4513         dynamically allocating line buffers.
4514         (struct print_trns) Always include the `line' member.
4515         (internal_cmd_print) Always initialize the `line' member.
4516         (alloc_line) Always allocate memory for `line'.
4517         (print_trns_proc) Always initialize buf from `line' member.
4518         (print_trns_free) Always free `line' memory.
4519
4520         * sort.c: (allocate_file_handles) Special-case MS-DOS for mkdir()
4521         call.
4522         
4523 Wed Feb 11 20:33:18 2004  Ben Pfaff  <blp@gnu.org>
4524
4525         * flip.c: Fixed crash from FLIP when a numeric variable is
4526           specified on NEWNAMES and a large value is used, and a couple of
4527           other minor bugs besides.
4528           (struct varname) Make name a 9-character fixed-size array
4529           instead of a 1-character variable size array.
4530           (make_new_var) Allow digits in variable names.
4531           (flip_stream_write) Limit numeric values to 8 characters and
4532           format system missing and very large and small values more
4533           appropriately.
4534
4535 Thu Feb  5 13:19:06 WAST 2004 John Darrington <john@darrington.wattle.id.au>
4536
4537         * command.c: Fixed test on command return status for the correct 
4538           value,  which had been causing a crash under certain invalid input.
4539
4540 Wed Feb  4 15:34:11 WST 2004 John Darrington <john@darrington.wattle.id.au>
4541
4542         * t-test.q: Added calculations for the one sample variant of the T-TEST
4543
4544 Tue Feb  3 20:09:54 2004  Ben Pfaff  <blp@gnu.org>
4545
4546         * tab.c: (render_strip) Fix bug that sometimes caused joined text
4547           in joined cells to be rendered outside box boundaries.
4548
4549 Tue Feb  3 18:56:45 WST 2004 John Darrington <john@darrington.wattle.id.au>
4550
4551         * random.c (rng_create): Fixed seeding so that it gets reseeded after
4552         SET seed=xx has been called.
4553
4554 Mon Jan 19 14:08:09 2004  Ben Pfaff  <blp@gnu.org> 
4555
4556         * random.c (rng_get_double): Fix always-returning-zero bug in my
4557         preferred way, and at the same time make sure rounding doesn't
4558         bite us.
4559
4560 Thu Jan  1 23:16:41 2004  Ben Pfaff  <blp@gnu.org>
4561
4562         * html.c: (change_attributes) Dead code, removed.
4563         (escape_string) Eliminate code to call change_attributes() that
4564         never actually called it.
4565         (output_tab_table) Get rid of dependence on tab_hit
4566         and struct tab_joined_cell's hit member, which are abominations.
4567
4568         * tab.c: (tab_output_text) Don't call
4569         d->class->text_set_font_by_name if it's a null pointer.
4570         (macro UNROLL_LOOP) Eliminate.
4571         (macro UNROLL_3_LOOPS) Eliminate.
4572         (tabi_render) Rewrite not to use the above macros.
4573
4574 Thu Jan  1 23:09:07 2004  Ben Pfaff  <blp@gnu.org>
4575
4576         Start working on a new output driver system, one that doesn't suck
4577         so much, by adding a "device-independent" output driver.  The idea
4578         is to write out only a single output stream, then use separate
4579         processes to translate them into whatever formats we want.  This
4580         is similar to how "groff" works with its various output drivers
4581         (grops, grotty, grodvi, ...).
4582         
4583         * Makefile.am: (pspp_SOURCES) Add devind.c, devind.h.
4584
4585         * list.q: (write_all_headers) Stub out devind class.
4586         (clean_up) Ditto.
4587         (determine_layout) Ditto.
4588         (list_cases) Ditto.
4589
4590         * output.c: (outp_init) Add devind class.
4591
4592         * devind.c: New file.
4593
4594         * devind.h: New file.
4595
4596 Thu Jan  1 23:08:14 2004  Ben Pfaff  <blp@gnu.org>
4597
4598         * frequencies.q: (hash_value_alpha) Fixed up the previous change
4599         to use the proper string length.
4600
4601 Wed Dec 31 16:27:33 WAST 2003 John Darrington <john@darrington.wattle.id.au>
4602
4603         * Fixed bug where FREQ would crash on alpha values
4604
4605 Tue Dec 30 22:42:57 2003  Ben Pfaff  <blp@gnu.org>
4606
4607         * Removed bletcherous alloca() workarounds for AIX from top of
4608         many files.  AIX can use the alternative alloca() implementation
4609         instead.
4610
4611 Tue Dec 30 22:35:16 2003  Ben Pfaff  <blp@gnu.org>
4612
4613         * ascii.c: (ascii_option) Fix implementation of headers option.
4614
4615 Tue Dec 30 22:32:53 2003  Ben Pfaff  <blp@gnu.org>
4616
4617         * ascii.c: Add a "squeeze" option to the ASCII driver to squeeze
4618         multiple blank lines into one.
4619         (struct ascii_driver_ext) Add squeeze_blank_lines option.
4620         (ascii_preopen_driver) Initialize squeeze_blank_lines.
4621         (static var option_tab) Add squeeze entry.
4622         (ascii_option) Set squeeze_blank_lines.
4623         (output_lines) Implement squeezing blank lines.
4624
4625 Wed Dec 31 07:19:46 WST 2003 John Darrington <john@darrington.wattle.id.au>
4626
4627         * Removed redundant code from output.h
4628
4629 Sat Dec 27 22:17:52 2003  Ben Pfaff  <blp@gnu.org>
4630
4631         Dictionary classes: each variable is "ordinary", "system", or
4632         "scratch".
4633
4634         * var.h: (enum dict_class) New enum.
4635
4636         * vars-prs.c: (dict_class_from_id) New function.
4637         (dict_class_to_name) New function.
4638
4639 Sat Dec 27 22:16:06 2003  Ben Pfaff  <blp@gnu.org>
4640
4641         * var.h: (struct freq_tab_set) Removed (not used).
4642
4643 Sat Dec 27 22:15:21 2003  Ben Pfaff  <blp@gnu.org>
4644
4645         * value-labels.c: (val_labs_destroy) vls needs to be freed too.
4646
4647 Sat Dec 27 22:10:49 2003  Ben Pfaff  <blp@gnu.org>
4648
4649         * stats.c: (hypercube) Rename pow4().  All references updated.
4650
4651 Sat Dec 27 22:05:49 2003  Ben Pfaff  <blp@gnu.org>
4652
4653         * rename-vars.c: (cmd_rename_variables) Rewritten.
4654         (compare_name) Removed.
4655
4656 Sat Dec 27 22:03:51 2003  Ben Pfaff  <blp@gnu.org>
4657
4658         var_set feature, and code taking advantage of it.
4659         
4660         * crosstabs.q: (static var var_dict) Removed.
4661         (static var variables) New variable.
4662         (static var variables_cnt) New variable.
4663         (cmd_crosstabs) Free variables instead of var_dict.
4664         (internal_cmd_crosstabs) Initialize and use variables,
4665         variables_cnt instead of var_dict.
4666         (free_var_dict) Removed.
4667         (crs_custom_tables) Use var_set instead of a copied dictionary.
4668         (crs_custom_variables) Set up variables, variables_cnt instead of
4669         var_dict.
4670         [DEBUGGING] (debug_print) Ditto.
4671
4672         * means.q: (mns_custom_tables) Use var_set instead of a copied
4673         dictionary.
4674
4675         * vars-prs.c: (parse_vs_variable) New function.
4676         (parse_dict_variable) Rewritten.
4677         (parse_variable) Rewritten.
4678         (parse_variables) Renamed parse_var_set_vars(), rewritten.
4679         (parse_variables) New function in terms of parse_var_set_vars().
4680         Now requires its first argument to be non-null.  All references
4681         that passed a null pointer updated to pass default_dict instead.
4682         (macro id_dict) Removed.
4683         (parse_DATA_LIST_vars) Add assertions.
4684         (parse_mixed_vars) Ditto.
4685         (struct var_set) New structure.
4686         (var_set_get_cnt) New function.
4687         (var_set_get_var) New function.
4688         (var_set_lookup_var) New function.
4689         (var_set_destroy) New function.
4690         (dict_var_set_get_cnt) New function.
4691         (dict_var_set_get_var) New function.
4692         (dict_var_set_lookup_var) New function.
4693         (dict_var_set_destroy) New function.
4694         (var_set_create_from_dict) New function.
4695         (struct array_var_set) New structure.
4696         (array_var_set_get_cnt) New function.
4697         (array_var_set_get_var) New function.
4698         (array_var_set_lookup_var) New function.
4699         (array_var_set_destroy) New function.
4700         (var_set_create_from_array) New function.
4701
4702         * q2c.c: (dump_parser) Use parse_variables(default_dict, ...)
4703         instead of parse_variables(NULL, ...) in output code.
4704
4705 Sat Dec 27 21:38:53 2003  Ben Pfaff  <blp@gnu.org>
4706
4707         Change inp_init from a 2-bit vector to an ordinary array.
4708         Initialize it all in cmd_end_input_program() instead of in
4709         create_variable().
4710
4711         * inpt-pgm.c: (enum value_init_type) New enum.
4712         (global var inp_init) Change to `enum value_init_type *', make
4713         static.
4714         (inp_init_size) Removed.
4715         (inp_nval) Change to `size_t', make static.
4716         (cmd_input_program) Don't initialize inp_init or inp_init_size.
4717         (cmd_end_input_program) Initialize inp_init, inp_nval.
4718         (init_case) Rewrite.
4719         (clear_case) Rewrite.
4720
4721         * inpt-pgm.h: Removed.
4722
4723 Sat Dec 27 21:36:38 2003  Ben Pfaff  <blp@gnu.org>
4724
4725         * hash.c: (hsh_hash_bytes) Use Fowler-Noll-Vo hash instead of
4726         Colin Plumb hash.  It is simpler and should better resist
4727         collisions.
4728         (hsh_hash_string) Ditto.
4729
4730 Sat Dec 27 21:34:57 2003  Ben Pfaff  <blp@gnu.org>
4731
4732         * get.c: (export_write_case_func) Remove debug printing code.
4733
4734 Sat Dec 27 21:11:09 2003  Ben Pfaff  <blp@gnu.org>
4735
4736         * get.c: (cmd_save_internal) Rename parameter.  Use &t->h instead
4737         of cast.
4738         (save_write_case_func) Use &trns->h instead of cast.
4739         (cmd_export) Use &t->h instead of cast.
4740
4741 Sat Dec 27 20:57:42 2003  Ben Pfaff  <blp@gnu.org>
4742
4743         Moved vectors into the dictionary.
4744
4745         * var.h: (struct vector) Moved here from vector.h.  `index' member
4746         renamed `idx', `v' renamed `var', `nv' renamed `cnt'.  All
4747         references updated.
4748         
4749         * vector.h: Removed.
4750
4751         * vector.c: (global var vec) Removed.
4752         (global var nvec) Removed.
4753         (cmd_vector) Rewritten.
4754         (find_vector) Removed.
4755
4756         * dictionary.c: (dict_create_vector) New function.
4757         (dict_get_vector) New function, replaces reading global vec[]
4758         array.
4759         (dict_get_vector_cnt) New function, replaces reading global nvec
4760         variable.
4761         (dict_lookup_vector) New function, replaces find_vector().
4762         (dict_clear_vectors) New function.
4763
4764 Sat Dec 27 20:54:01 2003  Ben Pfaff  <blp@gnu.org>
4765
4766         Start to move away from `struct variable' p `union' member to void
4767         * aux member.
4768
4769         * var.h: (struct variable) Add `aux' member.
4770
4771 Sat Dec 27 20:36:25 2003  Ben Pfaff  <blp@gnu.org>
4772
4773         Get rid of struct variable `foo' member.
4774
4775         * frequencies.q: (internal_cmd_frequencies) Use p.frq.used instead
4776         of foo.
4777         (frq_custom_variables) Ditto.
4778         (frq_custom_grouped) Ditto.
4779
4780         * get.c: (struct save_trns) Change `var' member from `int *' to
4781         `struct variable **'.
4782         (cmd_save_internal) Use aux instead of foo.
4783         (save_trns_proc) Use revised `var' member.
4784         (static var mtf_seq_no) Renamed mtf_seq_num.
4785         (static var mtf_seq_nums) New static var.
4786         (cmd_match_files) Initialize mtf_seq_nums.
4787         (mtf_free) Free mtf_seq_nums.
4788         (mtf_processing) Use mtf_seq_nums instead of foo.
4789         (mtf_merge_dictionary) No need to initialize mv->foo.
4790         (cmd_export) Use aux instead of foo.  Use revised `var' member.
4791         (mns_custom_tables) Don't use foo to check for duplicates, that's
4792         what PV_NO_DUPLICATE is for.
4793
4794         * var.h: (struct variable) Remove `foo' member.
4795         (struct frequencies_proc) New member.
4796         
4797 Sat Dec 27 19:46:13 2003  Ben Pfaff  <blp@gnu.org>
4798
4799         Clean up COMPUTE and IF.
4800
4801         * compute.c: More or less rewrite the darn thing.
4802         (struct compute_trns) Rename and reorder and add and delete
4803         members.
4804         (cmd_compute) Rewrite.
4805         (compute_num) Make conditional on test expression.  Now used for
4806         both COMPUTE and IF.
4807         (compute_num_vec) Ditto.
4808         (compute_str) Ditto.
4809         (compute_str_vec) Ditto.
4810         (cmd_if) Rewrite.
4811         (if_num) Removed.
4812         (if_num_vec) Removed.
4813         (if_str) Removed.
4814         (if_str_vec) Removed.
4815         (parse_target_expression) Renamed parse_rvalue_expression(),
4816         rewritten.
4817         (new_trns) Renamed compute_trns_create(), rewritten.
4818         (delete_trns) Removed.
4819         (free_trns) Renamed compute_trns_free(), rewritten.
4820         (struct lvalue) New structure.
4821         (parse_var_or_vec) Renamed lvalue_parse(), rewritten.
4822         (lvalue_get_type) New function.
4823         (lvalue_is_vector) New function.
4824         (lvalue_finalize) New function.
4825         (lvalue_destroy) New function.
4826         
4827 Sat Dec 27 19:44:14 2003  Ben Pfaff  <blp@gnu.org>
4828
4829         * command.def: Disallow MODIFY VARS in input mode, so that
4830         variables can't get dropped and confuse cmd_end_input_program()'s
4831         attempt to fill inp_init[].
4832         
4833         * modify-vars.c: (static var forward_positional_ordering) New
4834         variable.
4835         (struct var_modification) Entirely changed.
4836         (rearrange_dict) Interface changed, rewritten.
4837         (cmd_modify_vars) Deal with modified struct var_modification, much
4838         rewritten.
4839         (struct var_renaming) New structure.
4840         (compare_var_renaming_by_new_name) New function.
4841         (validate_var_modification) New function.
4842
4843         * var.h: (struct modify_vars_proc) Removed.
4844         (struct variable) Removed member p.mfv.
4845
4846 Sat Dec 27 19:40:26 2003  Ben Pfaff  <blp@gnu.org>
4847
4848         Make EVALUATE a valid command whether we're debugging or not, so
4849         that `make check' can succeed regardless of whether debugging is
4850         turned on.
4851         
4852         * command.def: [GLOBAL_DEBUGGING] Drop the #if.
4853
4854         * compute.c: [GLOBAL_DEBUGGING] (cmd_evaluate) Drop the #if.
4855
4856 Sat Dec 27 19:34:40 2003  Ben Pfaff  <blp@gnu.org>
4857
4858         * apply-dict.c: (cmd_apply_dictionary) Replace a ghastly switch
4859         statement by a simple if test.
4860
4861         * dfm.c: (dfm_get_record) Add assertion.
4862
4863 Sat Dec 27 17:51:26 2003  Ben Pfaff  <blp@gnu.org>
4864
4865         For each file x.c, move #include "x.h" to the very top of the
4866         include list, to catch x.h failing to include the proper headers.
4867
4868 Sat Dec 27 17:50:19 2003  Ben Pfaff  <blp@gnu.org>
4869
4870         * algorithm.c: (find) New function.
4871         (remove_equal) New function.
4872         (set_difference) New function.
4873         (adjacent_find_equal) New function.
4874         [TEST_UNIQUE] Removed test case.
4875         (copy_if) Find end test.
4876
4877 Sat Dec 27 17:42:45 2003  Ben Pfaff  <blp@gnu.org>
4878
4879         * dictionary.c: (dict_get_case_weight) New convenience function.
4880
4881         * aggregate.c: (accumulate_aggregate_info) Use
4882         dict_get_case_weight().
4883
4884         * frequencies.q: (calc_general) Ditto.
4885         (calc_integer) Ditto.
4886         (calc) Ditto.
4887
4888         * t-test.q: (groups_calc) Ditto.
4889         (z_calc) Ditto.
4890
4891 Sat Dec 27 17:29:45 2003  Ben Pfaff  <blp@gnu.org>
4892
4893         * glob.c: (global var default_dict) Change from `struct
4894         dictionary' to `struct dictionary *'.  All references changed.
4895         (init_glob) Initialize default_dict with dict_create().
4896
4897 Sat Dec 27 17:06:06 2003  Ben Pfaff  <blp@gnu.org>
4898
4899         struct dictionary now made opaque.  All related functions:
4900
4901         * get.c: (rename_variables) Removed.
4902         (dict_delete_run) Removed.
4903         
4904         * temporary.c: (copy_variable) Removed.
4905         (new_dictionary) Removed.
4906         (save_dictionary) Removed.
4907         (restore_dictionary) Removed.
4908         (free_dictionary) Removed.
4909
4910         * vars-atr.c: (clear_default_dict) Removed.
4911         (find_variable) Removed.
4912         (find_dict_variable) Removed.
4913         (create_variable) Removed.
4914         (delete_variable) Removed.
4915         (common_init_stuff) Removed.
4916         (init_variable) Removed.  Updating of inp_init moved into
4917         cmd_end_input_program().
4918         (replace_variable) Removed.
4919         (rename_variable) Removed.
4920         (clear_variable) Removed.
4921         (dup_variable) Removed.
4922
4923         * vars-prs.c: (is_varname) Removed.
4924         (is_dict_varname) Removed.
4925         (fill_all_vars) Removed.
4926
4927         * vector.c: (find_vector) Removed.
4928
4929         * weight.c: (stop_weighting) Removed.
4930
4931         * dictionary.c: New file.
4932         (dict_create) New, replaces new_dictionary().
4933         (dict_clone) New, replaces save_dictionary() and
4934         restore_dictionary().
4935         (dict_clear) New, replaces clear_default_dict().
4936         (dict_destroy) New, replaces free_dictionary().
4937         (dict_get_var_cnt) New function, replaces references to
4938         dict->nvar.
4939         (dict_get_var) New function, replaces references to dict->var[i].
4940         (dict_get_vars) New function, replaces fill_all_vars().
4941         (dict_create_var) New, replaces create_variable().  Interface
4942         drops `type' parameter, using a zero `width' to designate numeric.
4943         (dict_clone_var) New, replaces dup_variable().
4944         (dict_rename_var) New, replaces rename_variable().
4945         (dict_lookup_var) New, replaces find_variable(),
4946         find_dict_variable(), is_varname().
4947         (dict_contains_var) New function.
4948         (compare_variable_dblptrs) New function.
4949         (dict_delete_var) New function, replaces clear_variable().
4950         (dict_delete_vars) New function, replaces dict_delete_run().
4951         (dict_reorder_vars) New function.
4952         (dict_rename_vars) New function, replaces rename_variables().
4953         (dict_get_weight) New function, replaces reading dict->weight_var.
4954         (dict_set_weight) New function, replaces writing dict->weight_var
4955         or calling stop_weight(dict).
4956         (dict_get_filter) New function, replaces reading dict->filter_var.
4957         (dict_set_filter) New function, replaces writing dict->filter_var.
4958         (dict_get_case_limit) New function, replaces reading dict->N.
4959         (dict_set_case_limit) New function, replaces writing dict->N.
4960         (dict_get_value_cnt) New function, replaces reading dict->nval.
4961         (dict_compact_values) New function, replaces a loop that was
4962         replicated in several places.
4963         (dict_get_split_vars) New function, replaces reading dict->splits.
4964         (dict_get_split_cnt) New function, replaces reading
4965         dict->n_splits.
4966         (dict_set_split_vars) New function, replaces writing dict->splits.
4967         (dict_get_label) New function, replaces reading dict->label.
4968         (dict_set_label) New function, replaces writing dict->label.
4969         (dict_get_documents) New function, replaces reading
4970         dict->documents.
4971         (dict_set_documents) New function, replaces writing
4972         dict->documents.
4973         
4974         All references to above functions updated.
4975         
4976         * aggregate.c: (cmd_aggregate) Copy file label and documents from
4977         old dictionary to new by hand, because dict_create() can't do it
4978         itself.  Use dict_set_documents(), dict_set_split_vars().
4979
4980         * temporary.c: (cancel_temporary) Also set temp_dict to NULL after
4981         calling dict_destroy().
4982
4983         * data-list.c: (dls_var_spec) Remove `type' member, replace by
4984         `width'.
4985         (fixed_parse_compatible) Some slightly nontrivial changes for
4986         dict_create_var().
4987         (dump_fmt_list) Ditto.
4988         (parse_free) Ditto.
4989
4990         * file-type.c: (create_col_var) Ditto.
4991
4992         * get.c: (cmd_get) Use dict_compact_values() instead of a loop.
4993         (trim_dictionary) Use dict_delete_vars(), dict_reorder_vars().
4994         (rename_variables) Use dict_rename_vars().
4995         (mtf_merge_dictionary) Use dict_get_documents(),
4996         dict_set_documents(), dict_compact_values().
4997
4998         * pfm-read.c: (read_variables) Deal with changes to weighting.
4999
5000         * q2c.c: (dump_parser) Use dict_lookup_var() instead of
5001         is_varname() in output code.
5002
5003         * sfm-read.c: (read_header) Use dict_create(), dict_set_label(),
5004         other dictionary functions.
5005
5006         * title.c: (add_document_line) Use dict_get_documents(),
5007         dict_set_documents().
5008
5009         * vars-atr.c: (discard_variables) Use dict_clear(default_dict),
5010         reset default_handle by hand.  dict_clear() will clear vectors so
5011         there's no need for that by hand.
5012
5013         * vfm.c: (close_active_file) Move call to finish_compaction()
5014         earlier, so that we can do the compaction as a single step using
5015         dict_compact_values().  Use dict_clear_vectors().
5016         (finish_compaction) Use dict_delete_var(), dict_compact_values().
5017                 
5018         Some functions don't have replacements:
5019
5020         * vars-atr.c: (force_create_variable) Removed.  All references
5021         updated to dict_create_var() followed by an assertion.
5022         (force_dup_variable) Removed.  All references updated to
5023         dict_clone_var() followed by an assertion.
5024         
5025         * weight.c: (update_weighting) Removed.  No longer necessary, so
5026         all references removed.
5027
5028 Sat Dec 27 16:43:01 2003  Ben Pfaff  <blp@gnu.org>
5029
5030         Clean up AGGREGATE.
5031         
5032         * aggregate.c: Eliminate separation of weighted and unweighted
5033         case.  It made the code too obscure and I doubt it was actually
5034         faster.  Instead, all code uses the "weighted" code, because
5035         that's a generalization of the "unweighted" code.
5036         (FWEIGHT) Removed.
5037         (FOPTIONS) Ditto.
5038         (parse_aggregate_functions) No need to set FWEIGHT.
5039         (accumulate_aggregate_info) Get rid of FWEIGHT cases.
5040         (dump_aggregate_info) Ditto.
5041         (initialize_aggregate_info) No need for special plain_function
5042         that gets rid of FWEIGHT option.
5043
5044         * aggregate.c: Get rid of approximations.
5045         (accumulate_aggregate_info) Don't use approx_gt(), approx_lt(),
5046         approx_in_range().
5047         (aggregate_single_case) Don't use approx_ne().
5048
5049 Sat Dec 27 16:19:36 2003  Ben Pfaff  <blp@gnu.org>
5050
5051         * ascii.c (ascii_line_width): Dead code, removed.
5052
5053         * postscript.c (ps_line_width): Ditto.
5054
5055         * q2c.c (xrealloc): Ditto.
5056
5057         * count.c (internal_cmd_count): Ditto.
5058
5059         * means.q (validate_dependent_endpoint): Ditto.
5060
5061         * set.q: (cmd_gset) Ditto.
5062
5063         * weight.c: [0] (weight_trns_proc) Ditto.
5064
5065 Sat Dec 27 16:18:16 2003  Ben Pfaff  <blp@gnu.org>
5066
5067         Make the code -Wmissing-prototypes clean.
5068
5069         * Makefile.am (version.c): Add #include "version.h".
5070         
5071         * ascii.c: (ascii_open_global) Make static.
5072         (ascii_close_page) Ditto.
5073         (ascii_font_sizes) Ditto.
5074         (ascii_postopen_driver) Ditto.
5075         (ascii_close_driver) Ditto.
5076         (ascii_option) Ditto.
5077         (ascii_open_page) Ditto.
5078         (ascii_line_horz) Ditto.
5079         (ascii_line_vert) Ditto.
5080         (ascii_line_intersection) Ditto.
5081         (ascii_box) Ditto.
5082         (ascii_polyline_begin) Ditto.
5083         (ascii_polyline_point) Ditto.
5084         (ascii_polyline_end) Ditto.
5085         (ascii_text_set_font_by_name) Ditto.
5086         (ascii_text_set_font_by_position) Ditto.
5087         (ascii_text_set_font_by_family) Ditto.
5088         (ascii_text_get_font_name) Ditto.
5089         (ascii_text_get_font_family) Ditto.
5090         (ascii_text_set_size) Ditto.
5091         (ascii_text_get_size) Ditto.
5092         (ascii_text_metrics) Ditto.
5093         (ascii_text_draw) Ditto.
5094         (ascii_close_page) Ditto.
5095
5096         * cmdline.h: New header for parse_command_line().  Used where
5097         needed.
5098
5099         * command.c: Move prototypes for cmd_*() functions to command.h.
5100
5101         * command.h: Prototypes for cmd_*() functions moved here from
5102         command.c.
5103
5104         * crosstabs.q: (gamma_int) Ditto.
5105
5106         * file-handle.h: Add fh_init_files() prototype.
5107         
5108         * getline.c: (welcome) Ditto.
5109
5110         * glob.h: New header for init_glob().  Used where appropriate.
5111
5112         * hash.c: (comparison_helper) Ditto.
5113
5114         * html.c: (html_open_global) Ditto.
5115         (html_close_global) Ditto.
5116         (html_preopen_driver) Ditto.
5117         (html_postopen_driver) Ditto.
5118         (html_close_driver) Ditto.
5119         (html_option) Ditto.
5120         (html_open_page) Ditto.
5121         (html_close_page) Ditto.
5122         (html_submit) Ditto.
5123
5124         * inpt-pgm.c: (input_program_source_read) Ditto.
5125
5126         * output.c: (find_defn_value) Ditto.
5127         (destroy_list) Ditto.
5128
5129         * pfm-read.c: (read_int) Ditto.
5130
5131         * postscript.c: (ps_open_global) Ditto.
5132         (ps_close_global) Ditto.
5133         (ps_font_sizes) Ditto.
5134         (ps_preopen_driver) Ditto.
5135         (ps_postopen_driver) Ditto.
5136         (ps_close_driver) Ditto.
5137         (ps_option) Ditto.
5138         (ps_open_page) Ditto.
5139         (ps_close_page) Ditto.
5140         (ps_line_horz) Ditto.
5141         (ps_line_vert) Ditto.
5142         (ps_line_intersection) Ditto.
5143         (ps_box) Ditto.
5144         (ps_polyline_begin) Ditto.
5145         (ps_polyline_point) Ditto.
5146         (ps_polyline_end) Ditto.
5147         (ps_text_set_font_by_name) Ditto.
5148         (ps_text_set_font_by_position) Ditto.
5149         (ps_text_set_font_family) Ditto.
5150         (ps_text_get_font_name) Ditto.
5151         (ps_text_get_font_family) Ditto.
5152         (ps_text_set_size) Ditto.
5153         (ps_text_get_size) Ditto.
5154         (ps_text_metrics) Ditto.
5155         (ps_text_draw) Ditto.
5156
5157         * q2c.c: (finish_up) Ditto.
5158         (xmalloc) Ditto.
5159         (xstrdup) Ditto.
5160         (get_buffer) Ditto.
5161         (st_lower) Ditto.
5162         (st_upper) Ditto.
5163         (skip_ws) Ditto.
5164         (get_line) Ditto.
5165         (add_symbol) Ditto.
5166         (find_symbol) Ditto.
5167         (lex_get) Ditto.
5168         (force_id) Ditto.
5169         (force_string) Ditto.
5170         (match_id) Ditto.
5171         (match_token) Ditto.
5172         (skip_token) Ditto.
5173         (parse) Ditto.
5174         (parse_setting) Ditto.
5175         (parse_specifier) Ditto.
5176         (parse_specifiers) Ditto.
5177         (parse_subcommand) Ditto.
5178         (dump_specifier_vars) Ditto.
5179         (is_keyword) Ditto.
5180         (make_identifier) Ditto.
5181         (dump_declarations) Ditto.
5182         (dump_specifier_init) Ditto.
5183         (dump_vars_init) Ditto.
5184         (make_match) Ditto.
5185         (dump_specifier_parse) Ditto.
5186         (dump_subcommand) Ditto.
5187         (dump_parser) Ditto.
5188         (dump_header) Ditto.
5189         (dump_free) Ditto.
5190         (recognize_directive) Ditto.
5191
5192         * recode.c: (string_to_long) Ditto.
5193
5194         * repeat.c: (find_DO_REPEAT_substitution) Ditto.
5195
5196         * repeat.h: New header for perform_DO_REPEAT_substitutions, used
5197         where appropriate.
5198
5199         * sort.c: (sort_stream_read) Ditto.
5200         (sort_stream_mode) Ditto.
5201         
5202 Fri Dec 19 23:35:04 2003  Ben Pfaff  <blp@gnu.org>
5203
5204         * algorithm.c (binary_search): Fix comparison.
5205
5206 Fri Dec 19 23:27:45 2003  Ben Pfaff  <blp@gnu.org>
5207
5208         * algorithm.c: (binary_search) Fix assertion.
5209
5210 Fri Dec 19 21:31:48 2003  Ben Pfaff  <blp@gnu.org>
5211
5212         * sysfile-info.c: (compare_vectors_by_name) Rewrite.
5213
5214 Fri Dec 19 21:30:24 2003  Ben Pfaff  <blp@gnu.org>
5215
5216         * sort.c: (compare_case_lists) Rewrite.
5217
5218 Fri Dec 19 16:44:22 2003  Ben Pfaff  <blp@gnu.org>
5219
5220         * quicksort.c: Removed (not used).
5221
5222         * quicksort.h: Removed (not used).
5223
5224         * sort.c: Removed blp_quicksort() prototype.
5225
5226 Fri Dec 19 16:42:13 2003  Ben Pfaff  <blp@gnu.org>
5227
5228         * postscript.c: (int_2_compare) Rewrite.
5229         (compare_line) Rewrite.
5230
5231 Fri Dec 19 16:38:35 2003  Ben Pfaff  <blp@gnu.org>
5232
5233         * matrix-data.c (compare_factors) Use lexicographical_compare()
5234         algorithm.
5235         (compare_doubles) New function.
5236         
5237         * algorithm.c: (lexicographical_compare) New algorithm.
5238
5239 Fri Dec 19 16:23:45 2003  Ben Pfaff  <blp@gnu.org>
5240
5241         * matrix-data.c (compare_variables_by_mxd_vartype): Rewrite.
5242
5243 Fri Dec 19 15:54:45 2003  Ben Pfaff  <blp@gnu.org>
5244
5245         * expr-prs.c: (cmp_func) Removed.
5246         (parse_function) Use binary_search() algorithm.
5247         (compare_functions) New function.
5248         (init_func_tab) Use sort() algorithm.
5249
5250         * algorithm.c: (binary_search) New algorithm.
5251
5252 Fri Dec 19 15:50:45 2003  Ben Pfaff  <blp@gnu.org>
5253
5254         * descript.q: (display) Use sort() algorithm instead of qsort().
5255         (compare_func) Removed.
5256         (descriptives_compare_variables) New function.
5257
5258 Fri Dec 19 15:08:38 2003  Ben Pfaff  <blp@gnu.org>
5259
5260         Get rid of AVL trees.  Hashes are more appropriate for everything
5261         PSPP does.
5262
5263         * Makefile.am: (pspp_SOURCES) Remove avl.c, avl.h.
5264         
5265         * avl.c: Removed.
5266
5267         * avl.h: Removed.
5268
5269 Fri Dec 19 14:33:31 2003  Ben Pfaff  <blp@gnu.org>
5270
5271         Much code can be clarified by using C++ STL-like algorithms.  Not
5272         all uses of these algorithms are listed below, only the ones where
5273         the change to an algorithm was the only change of interest.
5274         
5275         * Makefile.am: (pspp_SOURCES) Add algorithm.c, algorithm.h.
5276         
5277         * algorithm.c: New file.
5278
5279         * algorithm.h: New file.
5280
5281         * modify-vars.c: (static var forward) Removed.
5282         (static var positional) Removed.
5283         (compare_variables) Removed.
5284         (struct ordering) New.
5285         (cmd_modify_vars) Use sort() algorithm.
5286         (compare_variables_given_ordering) New function.
5287         (rearrange_dict) Use sort() algorithm.
5288
5289         * sysfile-info.c: (cmd_display) Use sort() algorithm.
5290         (cmp_var_by_name) Removed.
5291
5292 Fri Dec 19 14:26:17 2003  Ben Pfaff  <blp@gnu.org>
5293
5294         Make file handles use a hash table.
5295         
5296         * file-handle.q: (files) Change to hash table, make static.
5297         (cmd_file_handle) Use hash table functions.
5298         (fh_get_handle_by_filename) Ditto.
5299         (fh_get_handle_by_name) Ditto.
5300         (hash_file_handle) New function.
5301         (cmp_file_handle) Rewrite.
5302         (fh_init_files) Use hash table functions.
5303
5304 Fri Dec 19 14:24:38 2003  Ben Pfaff  <blp@gnu.org>
5305
5306         Clean up FREQUENCIES.
5307         
5308         * Makefile.am: (pspp_SOURCES) Remove frequencies.g.
5309
5310         * frequencies.q: Remove a lot of old #if'd out code at the end.
5311         (internal_cmd_frequencies) Use calc() instead of calc_no_weight()
5312         or calc_weight().  Initialize percentile_values.
5313         (calc) New function based on calc_weight() from frequencies.g.
5314         (precalc) Use hash functions.
5315         (static var comparison_func) Removed.
5316         (static var comparison_param) Removed.
5317         (comparison_helper) Removed.
5318         (get_freq_comparator) New function.
5319         (not_missing) New function.
5320         (add_freq) Removed.
5321         (postprocess_freq_tab) Use hash table functions, algorithms,
5322         get_freq_comparator().  Rewrite.
5323         (cleanup_freq_tab) Rephrase.
5324         (add_percentile) Clean up spacing.
5325         (hash_value_numeric) New function.
5326         (hash_value_alpha) New function.
5327         (compare_value_numeric_a) Rewrite.
5328         (compare_value_alpha_a) Rewrite.
5329         (compare_value_numeric_d) Rewrite.
5330         (compare_value_alpha_d) Rewrite.
5331         (compare_freq_numeric_a) Rewrite.
5332         (compare_freq_alpha_a) Rewrite.
5333         (compare_freq_numeric_d) Rewrite.
5334         (compare_freq_alpha_d) Rewrite.
5335         (calc_stats) Clean up mode, percentiles, max.
5336         (dump_statistics) Clean up spacing.
5337         
5338         * frequencies.g: Removed.
5339
5340         * var.h: (struct freq_tab) Change `data' to hash table.
5341
5342 Fri Dec 19 14:15:46 2003  Ben Pfaff  <blp@gnu.org>
5343
5344         * file-handle.h: Remove declaration of global variable `files',
5345         which wasn't used anywhere.
5346
5347         * postscript.c: (add_encoding) Remove superfluous cast.
5348         (line) Ditto.
5349
5350         * sfm-read.c: [linux] (bswap_int32) Drop ntohl() non-portable
5351         version.
5352
5353         * temporary.c: [0] (display_tree) Removed.
5354
5355 Fri Dec 19 14:13:04 2003  Ben Pfaff  <blp@gnu.org>
5356
5357         Implement a new random number generator based on the alleged RC4
5358         algorithm.
5359
5360         * expr-evl.c: (expr_evaluate) Use rng_get_double_normal() instead
5361         of rand_normal().
5362
5363         * random.c: [!HAVE_GOOD_RANDOM] (real_rand) Removed.
5364         [!HAVE_GOOD_RANDOM] (real_srand) Removed.
5365         (macro k) Removed.
5366         (static var V[]) Removed.
5367         (static var Y) Removed.
5368         (static var X2) Removed.
5369         (setup_randomize) Removed.
5370         (shuffle) Removed.
5371         (rand_uniform) Removed.
5372         (rand_normal) Removed.
5373         (struct rng) New structure.
5374         (rng_create) New function.
5375         (rng_destroy) New function.
5376         (swap_byte) New static function.
5377         (rng_seed) New function.
5378         (rng_get_bytes) New function.
5379         (rng_get_int) New function.
5380         (rng_get_unsigned) New function.
5381         (rng_get_double) New function.
5382         (rng_get_double_normal) New function.
5383         (pspp_rng) New function.
5384
5385         * random.h: Sync up to random.c.
5386
5387         * sample.c: (struct sample_trns) Make `frac' unsigned and a
5388         fraction of UINT_MAX, not 65536.
5389         (cmd_sample) Use rng_get_unsigned(), rng_get_double(), UINT_MAX
5390         fraction.
5391
5392         * vfm.c: (open_active_file) No need to call setup_randomize() any
5393         longer.
5394
5395 Fri Dec 19 12:05:56 2003  Ben Pfaff  <blp@gnu.org>
5396
5397         Change dictionary name indexes to use hash tables instead of AVL
5398         trees.
5399
5400         * crosstabs.q: (free_var_dict) Use hash tables.
5401         (crs_custom_tables) Ditto.
5402         (calc_general) Ditto.
5403         (compare_table_entry) Rewrite.
5404         (enum_var_values) Reorder parameters.  All references updated.
5405         Rewrite.
5406
5407         * get.c: (rename_variable) Use hash tables.
5408         (mtf_merge_dictionary) Ditto.
5409
5410         * glob.c: (init_glob) Use hash tables.
5411         (cmp_variable) Removed.
5412
5413         * means.q: (mns_custom_tables) Use hash tables.
5414
5415         * modify-vars.c: (rearrange_dict) Use hash tables.
5416
5417         * rename-vars.c: (cmd_rename_variables) Use hash tables.
5418
5419         * sfm-read.c: (read_header) Use hash tables.
5420         (read_variables) Ditto.
5421
5422         * temporary.c: (new_dictionary) Use hash tables.
5423         (save_dictionary) Ditto.
5424         (restore_dictionary) Ditto.
5425
5426         * var.h: (struct dictionary) Change AVL tree `var_by_name' into
5427         hash table `name_tab'.
5428
5429         * vars-atr.c: [DEBUGGING] (dump_one_var_node) Removed.
5430         [DEBUGGING] (dump_var_tree) Removed.
5431         (find_variable) Use hash tables.
5432         (find_dict_variable) Ditto.
5433         (common_init_stuff) Ditto.
5434         (rename_variable) Ditto.
5435         (clear_variable) Ditto.  Also, remove debug code.
5436         (dup_variable) Use hash tables.
5437
5438         * vars-prs.c: (fill_all_vars) Use hash tables.
5439         (is_dict_varname) Ditto.
5440         (parse_dict_variable) Ditto.
5441         
5442 Fri Dec 19 11:46:23 2003  Ben Pfaff  <blp@gnu.org>
5443
5444         Change value labels to use hash tables instead of AVL trees, and
5445         change value labels into an ADT.
5446
5447         * Makefile.am: (pspp_SOURCES) Add value-labels.c, value-labels.h.
5448         
5449         * value-labels.c: New file.
5450
5451         * value-labels.h: New file.
5452
5453         * apply-dict.c: (cmd_apply_dictionary) Use value label ADT.
5454         Get rid of a stupid use of goto.
5455
5456         * autorecode.c: (compare_alpha_value) Rewrite.
5457         (hash_alpha_value) Ditto.
5458         (compare_numeric_value) Rewrite.
5459         (hash_numeric_value) Ditto.
5460
5461         * frequencies.q: (dump_full) Use value label ADT.
5462
5463         * pfm-read.c: (read_value_label) Use value label ADT.
5464
5465         * pfm-write.c: (write_value_labels) Use value label ADT.
5466
5467         * sfm-read.c: (read_variables) Use value label ADT.
5468         (read_value_labels) Rewrite.
5469
5470         * sfm-write.c: (write_value_labels) Rewrite.
5471
5472         * sysfile-info.c: (cmd_sysfile_info) Use value label ADT.
5473         (display_variables) Ditto.
5474         (describe_variable) Ditto.
5475
5476         * t-test.q: (print_t_groups) Use value label ADT.
5477
5478         * temporary.c: (copy_variable) Use value label ADT.
5479         (free_dictionary) Ditto.
5480
5481         * val-labs.c: (verify_val_labs) Use value label ADT.
5482         (get_label) Ditto.
5483         (debug_print) Ditto.
5484         (val_lab_cmp) Removed.
5485         (inc_ref_count) Removed.
5486         (copy_value_labels) Removed.
5487
5488         * var.h: (struct value_label) Removed.
5489         (struct variable) Change AVL tree `val_lab' into hash table
5490         `val_labs'.
5491
5492         * vars-atr.c: (init_variable) Use value label ADT.
5493         (clear_variable) Ditto.
5494         (free_value_label) Removed.
5495         (free_val_lab) Removed.
5496         (get_val_lab) Removed.
5497         (compare_variables) New function.
5498         (hash_variable) New function.
5499
5500         * vfm.c: (dump_splits) Use value label ADT.
5501
5502 Fri Dec 19 11:18:11 2003  Ben Pfaff  <blp@gnu.org>
5503
5504         Add to the hash table interface.
5505
5506         * hash.c: (hsh_hash_bytes) Add assertion.
5507         (hsh_hash_string) Ditto.
5508         (hsh_clear) Ditto.
5509         (hsh_rehash) Ditto.
5510         (hsh_probe) Ditto.
5511         (hsh_create) Ditto.  Also make minimum `size'.
5512         (hsh_destroy) Rephrase.
5513         (sort_nulls_last) Removed.
5514         (not_null) New function.
5515         (hsh_data) Ditto.
5516         (comparison_helper) Ditto.
5517         (hsh_sort) Rewritten.
5518         (hsh_data_copy) New function.
5519         (hsh_sort_copy) Ditto.
5520         (hsh_insert) Ditto.
5521         (hsh_replace) Ditto.
5522         (hsh_hash_double) Ditto.
5523         (hsh_delete) Fix stupid bug.
5524         
5525 Thu Dec 18 12:27:03 WAST 2003 John Darrington <john@darrington.wattle.id.au>
5526         * added a calculation of the mode to FREQUENCIES
5527
5528 Wed Dec 17 12:53:01 WAST 2003 John Darrington <john@darrington.wattle.id.au>
5529
5530         * moved (un)defs of DEBUGGING to config.h
5531
5532 Mon Dec 15 21:35:59 2003  Ben Pfaff  <blp@gnu.org>
5533
5534         * groff-font.c: (add_kern) Fix indentation.
5535         (add_kern) Use & instead of % to take power-of-2 modulus.
5536         (font_get_kern_adjust) Likewise.
5537
5538 Fri Dec 12 23:54:37 2003  Ben Pfaff  <blp@gnu.org>
5539
5540         * autorecode.c: (recode) Replace stupid use of memcpy() by
5541         memberwise copy.
5542         (hash_alpha_value) Use hsh_hash_bytes().  Get rid of nasty casts.
5543         (hash_numeric_value) Ditto.
5544         (autorecode_proc_func) pool_strdup() was wrong here because the
5545         source string was not null-terminated.  Use new pool_strndup()
5546         instead.
5547
5548         * crosstabs.q: (enum_var_values) Remove superfluous and bizarre
5549         use of hsh_iterator_init().
5550
5551         * data-in.c: (parse_N) Initialize i->v->f.
5552
5553         * flip.c: (cmd_flip) Use memmove(), not memcpy(), to copy
5554         overlapping arrays.
5555
5556         * groff-font.c: Use power-of-2 hash table sizes, not prime.
5557         (groff_read_font) Don't call hsh_next_prime().  Don't call
5558         fclose(NULL).
5559         (static var hash) Remove `size_p', `max_used' members.
5560         (font_char_name_to_index) Don't call hsh_next_prime().  Use
5561         hsh_hash_string() instead of hashpjw(), & instead of %.
5562         (default_font) Don't call hsh_next_prime().
5563
5564         * pool.c: (pool_strndup) New function.
5565         (pool_strdup) Reimplement in terms of pool_strndup.
5566
5567         * postscript.c: (hash_font_entry) Use hsh_hash_string().  Get rid
5568         of nasty casts.
5569         (hash_ps_encoding) Use hsh_hash_string().
5570         (hash_ps_combo) Use hsh_hash_string(), hsh_hash_int().
5571         (hash_filename2font) Use hsh_hash_string().
5572
5573         * som.c: Add #include <stdlib.h>.
5574
5575         * tab.c: (tab_destroy) Don't set t->container after freeing `t'
5576         (by destroying its pool).
5577         
5578 Fri Dec 12 23:18:59 2003  Ben Pfaff  <blp@gnu.org>
5579
5580         Miscellaneous hash table code cleanup:
5581         
5582         * hash.h: (struct hsh_table) Moved into hash.c.
5583         (hsh_count) Ditto, and transformed into function.
5584         (hsh_compare_func) New typedef, used for defining otherwise-long
5585         function types here and in hash.c
5586         (hsh_hash_func) Ditto.
5587         (hsh_free_func) Ditto.
5588         
5589         * hash.c: (struct hsh_table) Renamed `n' to `used', `m' to `size',
5590         `table' to `entries'.  Removed `mp'.  All references updated.
5591         (hsh_clear) Don't shrink entries array; if the hash was this big
5592         once, it probably will be again.
5593         (hsh_rehash) Made static.
5594         (force_hsh_insert) Renamed hsh_force_insert.
5595         (force_hsh_find) Renamed hsh_force_find.
5596
5597         Made hash table sizes powers of 2, because that's fine with any
5598         reasonable hash function and because taking a power-of-2 modulus
5599         is faster than any other:
5600         
5601         (hsh_prime_tab) Removed;
5602         (hsh_next_prime) Ditto.
5603         (next_power_of_2) New function.
5604         (hsh_create) Use next_power_of_2.
5605         (hsh_rehash) Use & instead of %.
5606
5607         Cleaned up hsh_sort:
5608         
5609         (internal_comparison_fn) Removed.
5610         (sort_nulls_last) New function.
5611         (hsh_sort) Removed second parameter, switched to using the new
5612         quicksort() function from quicksort.h to avoid using nasty need
5613         for static variables with qsort().  All references updated.
5614
5615         Changed the hash functions offered, because there are better hash
5616         functions than the ones we had, and cleaned up the names to boot:
5617         
5618         * hash.c: (hashpjw_d) Removed.
5619         (hashpjw) Ditto.
5620         (hsh_hash_bytes) New function.
5621         (hsh_hash_string) New function.
5622         (hsh_hash_int) New function.
5623
5624         Improved the hash table iteration interface:
5625         
5626         * hash.h: (hsh_iterator_init) Removed.
5627         (struct hsh_iterator) Removed `init' member, change `next' to
5628         size_t.
5629
5630         * hash.c: (hsh_foreach) Removed.  All references updated to use
5631         hsh_first/hsh_next instead.
5632         (hsh_first) New function.  Notably, unlike hsh_foreach() it does
5633         not treat a null pointer as an empty hash table.
5634         (hsh_next) New function.
5635
5636         Made deletion possible, though slow:
5637
5638         * hash.c: (locate_matching_entry) New function.
5639         (hsh_find) Use locate_matching_entry().
5640         (hsh_delete) New function also using locate_matching_entry().
5641         (hsh_force_delete) New function.
5642
5643 Fri Dec 12 23:16:10 2003  Ben Pfaff  <blp@gnu.org>
5644
5645         * quicksort.c: New file implementing a sort routine with a
5646         interface better than qsort() because it passes a user-provided
5647         parameter to the sort routine.
5648
5649         * Makefile.am: Add quicksort.c, quicksort.h.
5650
5651 Fri Dec 12 13:31:58 2003  Ben Pfaff  <blp@gnu.org>
5652
5653         * All source files: Get rid of nasty special cases for Checker,
5654         which is pretty obsolete now.
5655
5656 Thu Dec 11 21:38:24 WST 2003 John Darrington <john@darrington.wattle.id.au>
5657
5658         * Fixed a bug apparent when using the FREQUENCIES command with the
5659         html driver.  The html driver was incorrectly trying to display 
5660         empty cells.
5661
5662 Sun Jan  2 21:40:13 2000  Ben Pfaff  <blp@gnu.org>
5663
5664         * Makefile.am: Reorganized.  Put locale dir in version.c instead
5665         of passing it to each compile command.  Only put local gmp libs in
5666         LD_ADD if not installed on system.  Remove `boast' target.
5667
5668         * All source files: struct and union typedefs eliminated.
5669         `sizeof type' replaced by `sizeof object' where practical.  Moved
5670         `unused' qualifiers from start to end of declarations for gcc
5671         2.7.2 compatibility.  Change `while (1)' to `for (;;)'.  Made
5672         assertions on pointers strictly compliant.  Removed _ prefixes on
5673         some function parameter names.
5674
5675         * alloc.c: New source file, containing these external linkage
5676         functions removed from common.c: xmalloc, xcalloc, xrealloc,
5677         xstrdup.
5678
5679         * arena.c: Removed.
5680         
5681         * arena.h: Removed.
5682
5683         * ascii.c: Migrated from arenas to pools.
5684         (struct ascii_driver_ext) ops[], box[], fonts[] changed from
5685         c_string to len_string.  All references changed.
5686         (ascii_option) Signature changed to comply to new output.c
5687         interface.
5688         (count_fancy_chars) Removed.
5689         (delineate) Removed support for rich text.
5690         (ascii_text_metrics) Ditto.
5691         (text_draw) Ditto.
5692         (output_shorts) Change `box', `off', `on' from c_string to
5693         len_string.  Change `remaining' from int to size_t.
5694         (ascii_close_page) Make page numbering less haphazard.
5695
5696         * autorecode.c: Migrate from arenas to pools.
5697
5698         * avl.c: Migrate from arenas to pools.  Synch from libavl 1.4.0.
5699
5700         * bitvector.h: New file containing these macros from misc.h:
5701         SET_BIT, CLEAR_BIT, SET_BIT_TO, TEST_BIT, BIT_INDEX.
5702
5703         * command.c: (struct command) cmd1, cmd2, cmd3 members changed to
5704         word[3].  ncmd removed.
5705         (var empty_string) Removed.
5706         (var cmd_table) Declaration updated.
5707         (var cmdtab) Removed.
5708         (cmp_command) Removed.
5709         (split_words) Rewritten to use strtok_r().
5710         (init_cmd_parser) Renamed cmd_init().  Rewritten.
5711         (find_command) Removed.
5712         (FILE_TYPE_okay) Rewritten.
5713         (cmd_parse) Rewritten.  Semantics of the return value of command
5714         handlers has changed: they must now return one of the new CMD_*
5715         enumerals, rather than a magic value.  This meant that all
5716         commands had to be modified, and they were.
5717         (figure_out_command) New function.
5718
5719         * command.def: Add CORRELATIONS, PEARSON CORRELATIONS.  Add
5720         #defines for INIT, INPU, etc.
5721
5722         * command.h: New CMD_* enum series.
5723         (cur_proc) Make const char *, not char *.
5724         (cmd_init) Prototype.
5725         (cmd_parse) Ditto.
5726
5727         * common.c: Removed.
5728
5729         * common.h: Removed.
5730
5731         * correlations.q: New file.
5732
5733         * crosstabs.q: Migrate from arenas to pools.  Migrate to new-style
5734         q2c.
5735         (custom_tables) Renamed crs_custom_tables().
5736         (custom_variables) Renamed crs_custom_variables().
5737         (calc_integer) Add in some `const' qualifiers.
5738         (table_value_missing) Change from a_string to len_string.
5739         (float_M_suffix) Change from a_string to len_string.
5740
5741         * data-in.c: Rewritten.  All references to
5742         parse_string_as_format() changed to data_in().
5743
5744         * data-in.h: New file.
5745
5746         * data-list.c: Change DLS_* from #define's to enums.  Move from
5747         rpd_msg() to tmsg().
5748         (RPD_ERR) New #define.
5749         (do_reading) Change dfm_push_cust() to dfm_push(), pop_cust() to
5750         dfm_pop().
5751         (read_from_data_list_fixed) Change from old
5752         parse_string_as_format() to new data_in().
5753         (read_from_data_list_free) Ditto.
5754         (read_from_data_list_list) Ditto.
5755         (cmd_repeating_data) Modify approach to checking for end of
5756         command.
5757         (rpd_msg) Removed.
5758         (rpd_parse_record) Change from old parse_string_as_format() to new
5759         data_in().  Change from old convert_format_to_string() to new
5760         data_out().
5761         (read_one_set_of_repetitions) Change dfm_push_cust() to
5762         dfm_push(), pop_cust() to dfm_pop().
5763
5764         * data-out.c: Rewritten.  All references to
5765         convert_format_to_string() changed to data_out().
5766
5767         * descript.q: Migrate to new q2c.
5768         (cmd_descriptives) Removed.
5769         (internal_cmd_descriptives) Renamed cmd_descriptives ().
5770         (custom_variables) Renamed dsc_custom_variables().
5771
5772         * dfm.c: (struct dfm_fhuser_ext) `ln' removed.  All references
5773         removed.
5774         (open_file_r) Initialize h->where.line_number.  Migrate to new
5775         struct string.
5776         (open_file_w) Initialize h->where.line_number.
5777         (read_record) Change from ext->ln to h->where.line_number.
5778         Migrate to struct string.
5779         (dfm_put_record) Rephrased.
5780         (dfm_push_cust) Renamed dfm_push(), rewritten.
5781         (dfm_pop) New function.
5782
5783         * error.c: All references updated.
5784         (glob var error_count) Renamed err_err_count.
5785         (glob var warning_count) Renamed err_warning_count.
5786         (glob var error_already_flagged) Renamed err_already_flagged.
5787         (glob var verbosity) Renamed err_verbosity.
5788         (glob var cust_fn) Removed.
5789         (glob var cust_ln) Removed.
5790         (static var file_loc) New.
5791         (static var nfile_loc) New.
5792         (static var mfile_loc) New.
5793         (tmsg) New function.
5794         (push_cust) Removed.
5795         (pop_cust) Removed.
5796         (msg) Rewritten.
5797         (static var terminating) Removed.
5798         (failure) Renamed err_failure().
5799         (hcf) Renamed err_hcf().
5800         (err_push_file_locator) New function.
5801         (err_pop_file_locator) New function.
5802         (err_location) New function.
5803         (check_error_count) Renamed err_check_count().
5804         (vmsg) Renamed err_vmsg().  Interface changed.
5805         (verbose_msg) Removed.
5806         (err_cond_fail) New function.
5807         (error_break) Renamed err_break().
5808
5809         * error.h: All references updated.
5810         (enum MSG_CLASS_COUNT) Renamed ERR_CLASS_COUNT.
5811         (enum ERR_CLASS_MASK, ERR_VERBOSITY_SHIFT, ERR_VERBOSITY_MASK)
5812         New.
5813         (struct file_locator) New.
5814         (struct error) New.
5815         (macro verbose_msg) Removed.
5816         (macro cond_fail) Removed.
5817
5818         * expr-opt.c: (evaluate_tree) sizeof(char) == 1.
5819
5820         * expr-prs.c: Reorganized.  All references updated.
5821         (exprtypename) Renamed expr_type_name().
5822         (typename) Renamed type_name().
5823         (free_expression) Renamed expr_free().
5824         (parse_expression) Renamed expr_parse().  Uses new type_check()
5825         function.
5826         (init_functab) Renamed init_func_tab().
5827         (type_check) New function.
5828         (parse_or) Rewritten to use new allocate_nonterminal() and
5829         append_nonterminal_arg() functions.
5830         (parse_and) Ditto.
5831         (parse_not) Ditto.
5832         (parse_rel) Ditto.  Also simplified logic.
5833         (parse_add) Ditto.
5834         (parse_mul) Ditto.
5835         (parse_neg) Ditto.
5836         (parse_exp) Ditto.
5837         (SYSMIS_func) Ditto.
5838         (VALUE_func) Rephrased.
5839         (CONCAT_func) Fix memory leak by replacing free by free_node on
5840         lossage.
5841         (generic_str_func) Ditto.
5842         (parse_function) Ditto.  Also rephrasings.  Uses bsearch() to find
5843         function.
5844         (allocate_nonterminal) New function.
5845         (append_nonterminal_arg) New function.
5846         (static func_tab[]) Now at file level.
5847         (cmp_func) Moved.
5848         (init_func_tab) Moved.  Now just uses qsort() to sort func_tab[].
5849
5850         * expr.h: (enum series OP_*) Moved to exprP.h.
5851         (OP_* defines) Ditto.
5852         (struct op_desc) Ditto.
5853         (global ops[]) Ditto.
5854         (struct num_con_node) Ditto.
5855         (struct str_con_node) Ditto.
5856         (struct var_node) Ditto.
5857         (struct lag_node) Ditto.
5858         (struct casenum_node) Ditto.
5859         (struct nonterm_node) Ditto.
5860         (union any_node) Members renamed.
5861         (struct sys_node) Removed.
5862         (struct val_node) Removed.
5863         (operator typedef) Removed.
5864         (typedef exprtype) Removed.
5865         (enum series EX_*) Moved to exprP.h.
5866         (struct expression) Ditto.  Also renamed a lot of the members.
5867         (PXP_* defines) Changed to enums.
5868         (free_node prototype) Moved to exprP.h.
5869
5870         * file-handle.h: (struct file_handle) New member `where'.
5871
5872         * file-handle.q: Migrated to new q2c format.
5873         (prepend_current_directory) Removed (dead code).
5874         (cmd_file_handle) Incorporated all of internal_cmd_file_handle().
5875         (fh_get_handle_by_filename) Removed dead code.
5876         Set new `where' member.
5877
5878         * file-type.c: (file_type_source_read) References to
5879         parse_string_as_format() changed to data_in().
5880         dfm_push_cust()/pop_cust() changed to dfm_push()/dfm_pop().
5881
5882         * filename.c: All references updated.
5883         (init_filename) Renamed fn_init().
5884         (expand_line) Removed.
5885         (macro EXPAND_LINE) Removed.
5886         (interp_vars) Renamed fn_interp_vars().  Now uses st_*() instead
5887         of custom functions.
5888         (gnu_getcwd) Renamed fn_get_cwd(), rewritten.
5889         (tilde_expand) Renamed fn_tilde_expand(), uses ds_*().
5890         (normalize_filename) Renamed fn_normalize().
5891         (search_path) Renamed fn_search_path(), rewritten.
5892         (prepend_dir) Renamed fn_prepend_dir().
5893         (blp_getenv) Renamed fn_getenv().
5894         (blp_dirname) Renamed fn_dirname().
5895         (fn_basename) New function, not used.
5896         (absolute_filename_p) Renamed fn_absolute_p().
5897         (is_special_filename) Renamed fn_special_p().
5898         (file_exists) Renamed fn_exists_p().
5899         (readlink_malloc) Renamed fn_readlink().
5900         (getenv_default) Renamed fn_getenv_default().
5901         (open_file) Renamed fn_open().
5902         (close_file) Renamed fn_close().
5903         (open_file_ext) Renamed fn_open_ext().
5904         (close_file_ext) Renamed fn_close_ext().
5905
5906         * font.h: Migrate from arenas to pools.
5907
5908         * format.c: (parse_format_specifier_name) Deal with ds_* strings.
5909
5910         * frequencies.g: Migrate from arenas to pools.
5911
5912         * frequencies.q: Migrate to new q2c version.  Migrate from arenas
5913         to pools.
5914
5915         * getline.c: All references updated.
5916         (global getl_buf) Changed from char * to struct string.
5917         (static getl_include_path) Ditto.
5918         (global getl_buf_len) Removed.
5919         (global getl_buf_size) Removed.
5920         (getl_include_path) Deal with new getl_buf, getl_include_path.
5921         (getl_uninitialize) New function.
5922         (getl_get_current_directory) Rewritten.
5923         (getl_clear_include_path) Rewritten.
5924         (getl_add_include_dir) Rewritten.
5925         (getl_add_file) Assertion fixed.
5926         (getl_add_virtual_file) Change initial value of `remaining_loops'
5927         from 2 to 1.
5928         (welcome) Rewritten.
5929         (handle_line_buffer) Make static.  Change logic to make
5930         getl_add_virtual_file() change sensible.  Use ds_*() strings.
5931         (getl_read_line) Use ds_*() strings.  Implement SET ECHO.
5932         (getl_close_file) Moved.
5933         (getl_location) New function.
5934
5935         * getline.h: All references updated.
5936         (macro curln) Removed.
5937         (macro curfn) Removed.
5938         (macro am_interactive) Renamed getl_am_interactive.
5939         (macro am_reading_script) Renamed getl_reading_script.
5940
5941         * glob.c: (global fmt_parse_ignore_error) Removed.
5942         (init_glob) Use locale_dir not LOCALEDIR.  Use feholdexcept() on
5943         systems that support it (C99).  Turn off SET ECHO by default.  No
5944         necessary julcal initialization anymore.
5945
5946         * groff-font.c: Migrate from arenas to pools.
5947         (groff_read_font) Use err_push_file_locator().
5948         (groff_read_DESC) Ditto.
5949         (font_msg) Use tmsg().
5950
5951         * hash.c: (hsh_sort) Fix debug code.
5952         [GLOBAL_DEBUGGING] Include stdio.h.
5953
5954         * hash.h: (macro force_hsh_insert) Rephrase.
5955
5956         * heap.c: Rewritten.
5957         
5958         * heap.h: Rewritten.
5959
5960         * html.c: (html_option) Change from outp_value to struct string.
5961         (postopen) Change from curfn to getl_location().
5962         (escape_string) Remove rich-text code.  Signature changed.
5963         (output_tab_table) Switch from a_string to struct len_string.
5964         Remove rich text support.
5965
5966         * lexer.c: All references updated.  Largely rewritten.  Major
5967         changes listed below.  Removed tagged quote support.  Adapted to
5968         struct string tokstr.
5969         (global tokstr) Changed to struct string.
5970         (global tokstr_size) Removed.
5971         (global tokstr_len) Removed.
5972         (global tokid) New.
5973         (global tokint) Removed.
5974         (global toklongstr) Removed.
5975         (C* defines) Removed.
5976         (static tbl[]) Removed.
5977         (static id[]) Removed.
5978         (static une[]) Removed.
5979         (discard_line) Renamed lex_discard_line().
5980         (get_entire_line) Renamed lex_entire_line().
5981         (get_rest_of_line) Renamed lex_rest_of_line().
5982         (get_dotted_rest_of_line) Merged into lex_rest_of_line().
5983         (make_hexit) Removed.
5984         (syntax_error) Renamed lex_error().  Return value removed.
5985         (get_token_representation) Renamed lex_token_representation().
5986         (putback) Renamed lex_put_back().
5987         (putfwd) Renamed lex_put_forward().
5988         (convert_negative_to_dash) Renamed lex_negative_to_dash().
5989         (set_prog) Renamed lex_set_prog().
5990         (init_lex) Renamed lex_init().
5991         (reset_eof) Renamed lex_reset_eof().
5992         (lookahead) Renamed lex_look_ahead().
5993         (check_id) Rewritten.
5994         (yylex) Renamed lex_get(), rewritten.
5995         (lex_end_of_command) New function.  Many commands were rephrased
5996         using this.
5997         (lex_integer_p) New function.  Replaces compare of tokint against
5998         NOT_LONG.
5999         (lex_integer) New function.  Replaces tokint.
6000         (match_tok) Renamed lex_match().
6001         (match_id) Renamed lex_match_id().
6002         (match_int) Renamed lex_match_int().
6003         (force_match_id) Renamed lex_force_match_id(), added return value.
6004         (force_match) Renamed lex_force_match(), added return value.
6005         (force_string) Renamed lex_force_string(), added return value.
6006         (force_int) Renamed lex_force_int(), added return value.
6007         (lex_id_match_len) New function.
6008         (id_match) Renamed lex_id_match(), rewritten.
6009         (get_line) Renamed lex_get_line().
6010         (preprocess_line) Renamed lex_preprocess_line().
6011         (tokname) Renamed lex_token_name().
6012         (bin_value_func) Removed.
6013         (oct_value_func) Removed.
6014         (hex_value_func) Removed.
6015         (unexpected_eof) New function.
6016         (convert_numeric_string_to_char_string) New function.
6017         (parse_string) Rewritten, signature changed.
6018         (add_tokstr_char) Removed.
6019         (add_tokstr_unsigned) Removed.
6020         (add_tokstr_string) Removed.
6021         (parse_tagged_quote) Removed.
6022         (skip_comment) Renamed lex_skip_comment().
6023
6024         * lexer.h: All references updated.
6025         (macro is_id1) Renamed CHAR_IS_ID1.
6026         (macro is_idn) Renamed CHAR_IS_IDN.
6027         (token names ID, NUM, STRING, STOP, ... WITH, EXP) Renamed with
6028         prefix T_: T_ID, T_NUM, T_STRING, T_STOP, ... T_WITH, T_EXP.
6029         (macro get_token) Removed.
6030         (macro id_match) Removed.
6031         (macro force_match_id) Removed.
6032         (macro force_match) Removed.
6033         (macro force_string) Removed.
6034         (macro force_int) Removed.
6035         (macro force_num) Removed.
6036         (macro force_id) Removed.
6037
6038         * lexerP.h: Removed.
6039
6040         * list.q: Migrated to new q2c format.
6041         (write_line) Deal with struct len_string.
6042         (write_varname) Ditto.
6043         (write_fallback_headers) Ditto.
6044
6045         * magic.c: New file, incorporating the following global variables
6046         previously in other files: endian, second_lowest_value.  And both
6047         of those are conditional on #define's.
6048
6049         * magic.h: New file, incorporating the following global variable
6050         declarations: endian, second_lowest_value, and the following macro
6051         declarations: NOT_DOUBLE, NOT_LONG, NOT_INT.
6052
6053         * main.c: Added declarations of pgmname, finished, curdate,
6054         start_interactive.
6055         (main) Call new parse_script() function.
6056         (parse_script) New function.
6057         (execute_command) New function.
6058         (dump_token) Removed.
6059         (handle_error) New function.
6060
6061         * matrix.c: New file.
6062
6063         * matrix.h: New file.
6064
6065         * matrix-data.c: Migrated from arenas to pools.
6066         (mget_token) Change from parse_string_as_format() to data_in().
6067
6068         * means.q: Migrate to new q2c.
6069         (custom_tables) Renamed mns_custom_tables().
6070         (custom_crossbreak) Renamed mns_custom_crossbreak().
6071         (custom_variables) Renamed mns_custom_variables().
6072
6073         * mis-val.c: (static var width) Changed from `int' to `size_t'.
6074         (parse_varnames) Prototype.
6075         (parse_numeric) Rephrasings.
6076         (parse_alpha) Adapt to new struct string tokstr.
6077
6078         * misc.c: (intlog10) Rewritten.
6079         (spacing) Removed.
6080         (ansi_rand) Renamed real_rand(), moved into random.c.
6081         (ansi_srand) Renamed real_srand(), moved into random.c.
6082         (setup_randomize) Moved to random.c.
6083         (rand_uniform) Ditto.
6084         (rand_normal) Ditto.
6085         (rand_simple) Ditto.
6086         (get_config_line) Removed.
6087         (reverse) Removed (dead code).
6088
6089         * misc.h: (macro SET_BIT) Moved to bitvector.h.
6090         (macro CLEAR_BIT) Ditto.
6091         (macro TEST_BIT) Ditto.
6092         (macro SET_BIT_TO) Ditto.
6093         (macro BIT_INDEX) Ditto.
6094
6095         * output.c: (outp_read_devices) Move to err_push_file_locator()
6096         from push_cust().  Use struct string.
6097         (expand_op_tokstr) Removed.
6098         (static var op_tokstr) Changed to struct string.
6099         (static var op_tokstr_size) Removed.
6100         (tokener) Rephrasings.  Use struct string.
6101         (parse_options) Use struct string.
6102         (destroy_driver) Fix assertion.
6103         (outp_get_paper_size) Move to err_push_file_locator().
6104         [0] Removed dead code.
6105         (outp_string_width) Move to len_string.
6106
6107         * output.h: Comment fixes.
6108         (TAG_* enum series) Removed.
6109         (struct outp_value) Removed.
6110         (enum OUTP_T_FANCY) Removed.
6111         (struct outp_text) `s' changed from a_string to len_string.
6112         (struct outp_class) `option' change arg 3 from outp_value to
6113         struct string.
6114
6115         * pfm-read.c: (corrupt_msg) Rewritten.
6116
6117         * pfm-write.c: (bufwrite) Fix assertion.
6118
6119         * pool.c: New file, reference version.
6120
6121         * pool.h: New file, reference version.
6122
6123         * postscript.c: (ps_font_sizes) Fix assertion.
6124         (ps_option) Change arg 3 from outp_value to struct string.
6125         Adapt to struct string.
6126         (macro output_line) Removed.
6127         (macro add_string) Removed.
6128         (output_encodings) Adapted to struct string.  Moved to
6129         err_push_file_locator().
6130         (find_encoding_file) Fix assertion.
6131         (read_ps_encodings) Move to err_push_file_locator().
6132         (postopen) Use getl_location() instead of curfn.
6133         (out_text_plain) Move to len_string.
6134         (text) Ditto.  Remove rich text support.
6135
6136         * print.c: (cmd_print) Remove now-unneeded resource cleanup code.
6137         (cmd_print_eject) Ditto.
6138         (cmd_write) Ditto.
6139         (internal_cmd_print) Now cleans up after itself.  Uses
6140         fh_parse_file_handle() now.
6141         (cmd_print_space) Use PXP_NUMERIC to type-check.
6142
6143         * q2c.c: Overhauled.  Removed _("") i18n support.  All references
6144         updated.  All output functions updated to handle structures rather
6145         than local or static variables.  Adapt to new PSPP lex_*()
6146         functions.
6147         (macro _) Removed.
6148         (macro N_) Removed.
6149         (macro MAX_N_SBC) Removed.
6150         (global bare) Removed.
6151         (enum STRING) Renamed T_STRING.
6152         (enum ID) Renamed T_ID.
6153         (get_buffer) Buffer size increased.
6154         (strlower) Renamed st_lower(), rephrased.
6155         (strupper) Renamed st_upper(), rephrased.
6156         (skip_ws) New function.
6157         (get_line) Don't special-case any types of lines (like those
6158         beginning with ! or $, for instance).
6159         (get_token) Renamed lex_get().  Rephrased.
6160         (static var `prefix') New.
6161         (parse) New function.
6162         (parse_setting) Minor rephrasing.
6163         (dump_specifier_vars) Ditto.
6164         (make_identifier) Put null terminator on identifier, duh.
6165         (dump_vars) Renamed dump_declarations().  Never indent.  Never
6166         static.  Output changed entirely.
6167         (dump_specifier_init) Rephrase.
6168         (dump_vars_init) No index variable needed.  Other modifications.
6169         (dump_parser) Don't parse command name.  Do dump functions instead
6170         of just code fragments.
6171         (dump_free) Dump function instead of code fragment.
6172         (recognize_directive) New function.
6173         (main) Use recognize_directive().  Don't rely on magic $ line
6174         beginning: instead, parse comments.  Update list of headers.
6175
6176         * random.c: New file, containing the following functions:
6177         real_rand(), real_srand(), setup_randomize, shuffle, rand_uniform,
6178         rand_normal, rand_simple.
6179
6180         * random.h: New file.
6181
6182         * recode.c: (cmd_recode) Merge internal_cmd_recode() into this
6183         function.  `max_src_width', `max_dst_width' changed to size_t.
6184         (internal_cmd_recode) Removed.
6185         (parse_dest_spec) Merge similar cases.
6186         (parse_src_spec) Add assertion.
6187
6188         * repeat.c: (recognize_keyword) New function.
6189         (internal_cmd_do_repeat) Parse and handle PRINT keyword on END
6190         REPEAT.  Improve recognition of END REPEAT (use
6191         recognize_keyword()).  Move from curfn to getl_location().  Use
6192         struct string.
6193                 
6194         (perform_DO_REPEAT_substitutions) Adapt to struct string.
6195
6196         * set.q: Adapt to new q2c.
6197         (cmd_set) Range-check some values better.
6198         (custom_blanks) Renamed stc_custom_blanks().
6199         (custom_length) Renamed stc_custom_length().
6200         (custom_results) Renamed stc_custom_results().
6201         (custom_seed) Renamed stc_custom_seed().
6202         (custom_width) Renamed stc_custom_width().
6203         (custom_format) Renamed stc_custom_format().
6204         (custom_journal) Renamed stc_custom_journal().
6205         (custom_color) Renamed stc_custom_color().
6206         (custom_listing) Renamed stc_custom_listing().
6207         (custom_disk) Renamed stc_custom_disk().
6208         (custom_log) Renamed stc_custom_log().
6209         (custom_rcolor) Renamed stc_custom_rcolor().
6210         (custom_viewlength) Renamed stc_custom_viewlength().
6211         (custom_workdev) Renamed stc_custom_workdev().
6212
6213         * settings.h: Not necessary to include format.h any longer.
6214
6215         * sfm-read.h: (macro bswap_int32) Moved here from sfmP.h.
6216         (corrupt_msg) Rewritten.
6217
6218         * sort.c: Adapt to rewritten heap ADT.
6219
6220         * str.c: (aa_strcpy) Removed.
6221         (ab_strcpy) Removed.
6222         (ac_strcpy) Removed.
6223         (ba_strcpy) Removed.
6224         (bb_strcpy) Removed.
6225         (ca_strcpy) Removed.
6226         (aa_strdup) Removed.
6227         (aa_strdupcpy) Removed.
6228         (ba_strdup) Removed.
6229         (sa_strdup) Removed.
6230         (memrev) Renamed mm_reverse().
6231         (memrmem) Renamed mm_find_reverse().
6232         (cmp_str) Renamed st_compare_pad().
6233         (strmaxcpy) Removed.
6234         (strbarepadcpy) Renamed st_bare_pad_copy(), signature changed.
6235         (strbarepadlencpy) Renamed st_bare_pad_len_copy(), signature
6236         changed.
6237         (strpadcpy) Renamed st_pad_copy(), signature changed.
6238         (blpstrset) Removed.
6239         (ds_create) New function.
6240         (ds_init) New function.
6241         (ds_replace) New function.
6242         (ds_destroy) New function.
6243         (ds_clear) New function.
6244         (ds_extend) New function.
6245         (ds_shrink) New function.
6246         (ds_truncate) New function.
6247         (ds_length) New function.
6248         (ds_size) New function.
6249         (ds_value) New function.
6250         (ds_end) New function.
6251         (ds_concat) New function.
6252         (ds_concat_buffer) New function.
6253         (ds_printf) New function.
6254         (ds_putchar) New function.
6255         (ds_getline) New function.
6256         (ds_get_config_line) New function derived from the old
6257         misc.c:get_config_line().
6258         (ls_create) New function.
6259         (ls_create_buffer) New function.
6260         (ls_init) New function.
6261         (ls_shallow_copy) New function.
6262         (ls_destroy) New function.
6263         (ls_null) New function.
6264         (ls_null_p) New function.
6265         (ls_empty_p) New function.
6266         (ls_length) New function.
6267         (ls_value) New function.
6268         (ls_end) New function.
6269
6270         * str.h: Reformatted.
6271         (struct a_string) Removed.
6272         (struct b_string) Removed.
6273         (struct c_string) Removed.
6274         (struct len_string) New.
6275         (struct string) New.
6276         (macro as_streq) Removed.
6277         (macro bs_streq) Removed.
6278         (macro cs_streq) Removed.
6279         (macro sa_streq) Removed.
6280         (macro sb_streq) Removed.
6281         [__GNUC__] (inline function ds_putchar) New function.
6282         [__GNUC__] (inline function ds_length) New function.
6283         [__GNUC__] (inline function ds_value) New function.
6284         [__GNUC__] (inline function ds_end) New function.
6285
6286         * sysfile-info.c: (cmd_sysfile_info) Rephrased.
6287         (display_vectors) Fix missing i18n.
6288
6289         * t-test.q: Migrate to new q2c.
6290
6291         * tab.c: Migrate from arenas to pools.
6292         (tab_create) Use struct len_string.
6293         (tab_realloc) Ditto.
6294         (text_format) Ditto.
6295         (tab_joint_text) Ditto.
6296         (tab_natural_width) Remove rich text support.
6297         (tab_natural_height) Ditto.
6298         (tab_output_text) Handle TAT_FIX.
6299         (tab_raw) Change arg from a_string to len_string.
6300         (tabi_driver) Fix assertion.  Use struct len_string.
6301         (render_strip) Use struct len_string.  Remove rich text support.
6302         Add `const' qualifiers.
6303
6304         * tab.h: (enum TAB_RICH) Remove.
6305         (enums TAB_COL_NONE, TAB_COL_DONE) New.  Where appropriate,
6306         SOM_COL_* updated to read TAB_COL_*.
6307         (struct tab_table) Change arena to pool.  Change a_string to
6308         len_string.
6309
6310         * temporary.c: (restore_dictionary) Rewrite Checker code.
6311
6312         * var.h: (macros MAX_SHORT_STRING, MIN_LONG_STRING, SYSMIS,
6313         LOWEST, HIGHEST) Moved here from common.h.
6314         (typedef any_trns) Removed.  All references changed to `struct
6315         trns_header'.
6316
6317         * vars-atr.c: (force_create_variable) Fix assertion.
6318         (force_dup_variable) Fix assertion.
6319         
6320 Thu Jun  3 18:40:42 1999  Ben Pfaff  <blp@gnu.org>
6321
6322         Using alphanumeric variables in functions under AGGREGATE
6323         segfaulted.  Fixed.  Thanks to Dr. Dirk Melcher
6324         <BZN-mdksh@t-online.de> for reporting this bug.
6325         
6326         * aggregate.c: (parse_aggregate_functions) When setting the
6327         FSTRING bit, also allocate memory for the `string' member of
6328         agr_next.
6329         (free_aggregate_functions) Free iter->string.  Don't use the
6330         non-function bits when indexing the array of functions.
6331         [DEBUGGING] (debug_print) Don't use the non-function bits when
6332         indexing the array of functions.        
6333
6334 Sun May 30 00:00:54 1999  Ben Pfaff  <blp@gnu.org>
6335
6336         Under certain circumstances, the final case would be omitted from
6337         the results of an AGGREGATE operation.  Fixed.  Thanks to Dr. Dirk
6338         Melcher <BZN-mdksh@t-online.de> for reporting this bug.
6339         
6340         * aggregate.c (agr_00x_end_func): Increment number of cases in
6341         sink before writing case.  For streams that keep track of how many
6342         cases there are based on this value, this means that the last case
6343         will be read in on the next stream read.
6344
6345 Sat May 29 22:03:31 1999  Ben Pfaff  <blp@gnu.org>
6346
6347         Undefined behavior was invoked by referencing a freed pointer.
6348         
6349         * vfm.c (memory_stream_write): Free pointer *after* checking for
6350         non-null status.
6351
6352 Sat May 29 22:02:22 1999  Ben Pfaff  <blp@gnu.org>
6353
6354         A wrong record size was displayed when paging the active file to
6355         disk.
6356         
6357         * vfm.c: (memory_stream_write) Fix off-by-one error.
6358
6359 Sat May 29 21:50:26 1999  Ben Pfaff  <blp@gnu.org>
6360
6361         Not having enough temporary space for sorting caused a core dump.
6362         Fixed.
6363         
6364         * sort.c: (allocate_cases) Initialize i.
6365
6366 Sat May 29 21:40:54 1999  Ben Pfaff  <blp@gnu.org>
6367
6368         Syntax errors in function descriptions on AGGREGATE caused core
6369         dumps.  Fixed.
6370         
6371         * aggregate.c (cmd_aggregate): Don't free agr_dict after calling
6372         free_aggregate_functions(), since that function already frees
6373         agr_dict.
6374         
6375 Sat May 29 21:06:10 1999  Ben Pfaff  <blp@gnu.org>
6376
6377         A null pointer was dereferenced, causing a core dump, when
6378         PERCENTILES was specified on FREQUENCIES.  This fixes the problem,
6379         but PSPP still doesn't calculate percentiles.  Thanks to Regnor
6380         Jernsletten <rjernsle@eunet.no> for reporting this problem.
6381         
6382         * arena.c: (arena_malloc) If the arena hasn't been initialized
6383         already, initialize it.
6384
6385 Sat May 29 20:47:29 1999  Ben Pfaff  <blp@gnu.org>
6386
6387         * Makefile.cygwin: New file supplied by Hankin <hankin@dunno.com>
6388         for compilation with Cygnus Windows B20.  Not used by other
6389         systems.
6390
6391 Sat May 29 20:36:04 1999  Ben Pfaff  <blp@gnu.org>
6392
6393         SORT always sorted in ascending order.  Fixed.  Thanks to Dr. Dirk
6394         Melcher <BZN-mdksh@t-online.de> for reporting this bug.
6395
6396         * sort.c: (compare_case_lists) Reverse sense of comparison if
6397         sorting in descending order.
6398         (compare_record) Ditto.
6399
6400 Tue Mar  9 13:18:54 1999  Ben Pfaff  <blp@gnu.org>
6401
6402         SPLIT FILE with a string variable caused a core dump.  Fixed.
6403
6404         * vfm.c: If the variable is a string then make a temporary value
6405         struct pointing to it.  The underlying problem is a lot bigger
6406         than this (see TODO) but this is a stopgap for the simple case at
6407         least.
6408         
6409 Tue Mar  9 13:15:53 1999  Ben Pfaff  <blp@gnu.org>
6410
6411         Nested INCLUDEs didn't work.  Fixed.
6412
6413         * getline.c: (getl_include) Set first_line to NULL in allocated
6414         structure.
6415
6416 Tue Mar  9 13:13:46 1999  Ben Pfaff  <blp@gnu.org>
6417
6418         The MATCH FILES procedure set the values of variables not present
6419         to 0.  It should have been SYSMIS.  This is now fixed.
6420
6421         * get.c: (mtf_delete_file_in_place) Replace 0.0 by SYSMIS.
6422
6423 Tue Mar  9 12:52:23 1999  Ben Pfaff  <blp@gnu.org>
6424
6425         The REMARK command was too aggressive about skipping lines.  It
6426         didn't like being the last command in a file.
6427
6428         * command.c: (cmd_remark) Call get_entire_line() instead of
6429         get_line().
6430
6431 Tue Mar  9 12:48:05 1999  Ben Pfaff  <blp@gnu.org>
6432
6433         Comment parsing wasn't consistent with the rest of the code in its
6434         idea of where one command ends and another starts.  This meant
6435         that sometimes commands would be mysteriously ignored.  Thanks to
6436         Dr. Dirk Melcher <BZN-mdksh@t-online.de> for reporting this bug.
6437          
6438         * command.c: (parse_cmd) Hand off comment parsing to new function
6439         skip_comment() in lexer.c.
6440         * lexer.c: (skip_comment) New function.
6441
6442 Wed Jan 20 20:22:07 1999  Ben Pfaff  <blp@gnu.org>
6443
6444         The TABLE subcommand on MATCH FILES worked only erratically at
6445         best.  This fixes it.  Thanks to Dr. Dirk Melcher
6446         <BZN-mdksh@t-online.de> for reporting this bug.
6447
6448         * get.c: (mtf_compare_BY_values) When comparing string values, a
6449         difference of 1 is still a difference :-)
6450         (mtf_processing) Inverted TABLE reading logic fixed.  Also don't
6451         advance TABLE files automatically when matched.  Comment fixes.
6452
6453 Tue Jan 19 22:32:31 1999  Ben Pfaff  <blp@gnu.org>
6454
6455         VARIABLE LABELS rejected a slash before the first variable
6456         specification, contradicting the documentation.  Thanks to Walter
6457         M. Gray <graywm@northernc.on.ca> for reporting this bug.
6458
6459         * var-labs.c: (cmd_variable_labels) Ignore a leading slash in
6460         command specification.
6461
6462 Tue Jan 19 22:29:54 1999  Ben Pfaff  <blp@gnu.org>
6463
6464         Because of an incorrect optimization in memory allocation,
6465         CROSSTABS sometimes segfaulted when asked to output multiple
6466         tables.  Thanks to Walter M. Gray <graywm@northernc.on.ca> for
6467         reporting this bug.
6468
6469         * crosstabs.q: (postcalc) New variables maxcols, maxcells, which
6470         are passed to output_pivot_table() for its use.
6471         (output_pivot_table) Instead of assuming the number of columns is
6472         constant, keep track with maxcols.  In general mode, use maxcells
6473         to determine whether more matrix cells need to be allocated.    
6474
6475 Tue Jan 19 22:27:46 1999  Ben Pfaff  <blp@gnu.org>
6476
6477         CROSSTABS didn't display value labels for column and row
6478         variables.  Thanks to Walter M. Gray <graywm@northernc.on.ca> for
6479         reporting this bug.
6480
6481         * crosstabs.q: (table_value_missing) If the specified value has a
6482         value label for this variable, then show it instead of the raw
6483         value.
6484         (display_dimensions) Delegate display of value_labels to
6485         table_value_missing.
6486
6487 Mon Jan 18 20:04:06 1999  Ben Pfaff  <blp@gnu.org>
6488
6489         WRITE didn't write line ends.  Fixed.  Thanks to Dr. Dirk Melcher
6490         <BZN-mdksh@t-online.de> for reporting this bug.
6491
6492         * print.c: (print_trns_proc) Write (CR/)LF if PRINT is used _or_
6493         if the file isn't declared as binary.
6494
6495 Mon Jan 18 19:56:45 1999  Ben Pfaff  <blp@gnu.org>
6496
6497         MATCH FILES corrupted memory and dumped core on some syntax
6498         errors.  Fixed.
6499
6500         * get.c: (cmd_match_files) Set file->handle to NULL before
6501         jumping to lossage.
6502         (mtf_free_file) Don't free a null dictionary.   
6503
6504 Mon Jan 18 19:27:57 1999  Ben Pfaff  <blp@gnu.org>
6505
6506         MATCH FILES should set numeric values not available to the
6507         system-missing value, not to 0.  Thanks to Dr. Dirk Melcher
6508         <BZN-mdksh@t-online.de> for reporting this bug.
6509
6510         * get.c: (mtf_processing) Set unused records to system-missing,
6511         not 0.
6512
6513 Mon Jan 18 15:06:46 1999  Ben Pfaff  <blp@gnu.org>
6514
6515         KEEP didn't work properly on the SAVE procedure.  Fixed.  Thanks
6516         to Ralf Geschke <ralf@kuerbis.org> for reporting this bug.
6517
6518         * temporary.c: (save_dictionary) Initialize var_by_name AVL tree
6519         in newly created dictionary, and add each copied variable to the
6520         tree.
6521  
6522 Mon Jan 18 15:04:48 1999  Ben Pfaff  <blp@gnu.org>
6523
6524         Memory leak fix.
6525         
6526         * get.c: (trim_dictionary) Free variable list for KEEP after
6527         finishing with it.
6528
6529 Mon Jan 18 12:57:36 1999  Ben Pfaff  <blp@gnu.org>
6530
6531         Some systems didn't like the way open_file was coded.  Thanks to
6532         Hankin <hankin@rogue.consultco.com> for pointing this out.
6533
6534         * filename.c: (open_file) Don't try to store stdin, stdout,
6535         stderr as part of an array, because that doesn't always work.
6536
6537 Mon Jan 18 12:53:27 1999  Ben Pfaff  <blp@gnu.org>
6538
6539         The SAVE procedure didn't save long string variables properly.
6540         Fixed by this patch.  Thanks to Hankin
6541         <hankin@rogue.consultco.com> for this patch.
6542         
6543         * sfm-write.c: (write_variable) Fix off-by-one error in writing
6544         out variable pad records.
6545
6546 Tue Jan  5 14:29:27 1999  Ben Pfaff  <blp@gnu.org>
6547
6548         Previously, if PRINT SPACE were given a negative argument, it
6549         would report an error, then spin in an (almost) infinite loop.
6550         This fixes that behavior.
6551
6552         * print.c: (print_space_trns_proc) After reporting a negative
6553         argument, set number of lines to print to 1.
6554
6555 Tue Jan  5 13:59:55 1999  Ben Pfaff  <blp@gnu.org>
6556
6557         SPSS 8.0 outputs some new record types in its system files, and it
6558         allows longer value labels.  Accept these system files.
6559
6560         * sfm-read.c: (sfm_read_dictionary) Ignore record type 7 subtype
6561         11 emitted by SPSS 8.0.
6562         
6563 Tue Jan  5 13:55:50 1999  Ben Pfaff  <blp@gnu.org>
6564
6565         The LIST procedure was too conservative in allocating space for
6566         buffers, which caused a bug that only showed up with very long
6567         output variables.  Thanks to Hankin <hankin@dunno.com> for this
6568         bug report.
6569
6570         * list.q: (determine_layout) Allocate 1022 bytes instead of 256.
6571
6572 Tue Jan  5 13:34:34 1999  Ben Pfaff  <blp@gnu.org>
6573
6574         Typo meant string format specifiers weren't checked properly.  I
6575         think that Hankin <hankin@dunno.com> sent me this report, but I'm
6576         willing to be corrected on this point.
6577  
6578         * format.c: (check_string_specifier) Fix obvious typo.  
6579
6580 Tue Jan  5 12:50:42 1999  Ben Pfaff  <blp@gnu.org>
6581
6582         Using $CASENUM in an expression didn't work.  Here's a fix.
6583         Thanks to Dirk Melcher <BZN-mdksh@t-online.de> for reporting this
6584         bug.
6585          
6586         * expr-evl.c: (evaluate_expression) Add OP_CASENUM case.
6587
6588         * expr-opt.c: (dump_node) OP_CASENUM is acceptable.
6589
6590 Tue Jan  5 12:47:48 1999  Ben Pfaff  <blp@gnu.org>
6591
6592         The changes in 0.2.1 to fix DATA LIST FREE parsing broke some
6593         other behavior, *sigh*.  This patch hopefully fixes that.  This
6594         time I've actually tested it.
6595
6596         Thanks to Hankin <hankin@dunno.com> for reporting this bug.
6597
6598         * data-list.c: (read_from_data_list_free,
6599         read_from_data_list_list) Call parse_string_as_format() directly
6600         without mucking around with the field width.
6601
6602 Tue Jan  5 12:31:19 1999  Ben Pfaff  <blp@gnu.org>
6603
6604         Occasionally, you may encounter a script that wants to be
6605         interpreted in interactive mode.  Make -i emulate this behavior to
6606         allow such scripts to be executed with PSPP.
6607
6608         Thanks to Hankin <hankin@dunno.com> for reporting this behavior.
6609
6610         * cmdline.c: (pre_syntax_message[]) Update -i description.
6611
6612         * lexer.c: (preprocess_line) When getl_interactive is 2 (i.e.,
6613         when -i is given on the command line) don't treat unindented lines
6614         as starting a new command.
6615
6616 Tue Jan  5 12:30:10 1999  Ben Pfaff  <blp@gnu.org>
6617
6618         In conjunction with egcs 1.1.1, Checker emits some bogus warnings,
6619         mostly caused by local initialized aggregates.  After egcs is
6620         fixed upstream these can be removed, but for now they're not a big
6621         deal.
6622         
6623         * ascii.c: (ascii_postopen_driver) Checker chokes on local
6624         initialized arrays.  Avoid this.
6625
6626         * sfm-write.c: (sfm_write_dictionary) Don't use a local
6627         initialized struct.
6628
6629 Tue Jan  5 12:07:24 1999  Ben Pfaff  <blp@gnu.org>
6630
6631         egcs 1.1.1 has some new warnings relative to gcc 2.8.1, which the
6632         following changes avoid.  Currently I compile sources with egcs
6633         1.1.1 and gcc 2.7.2.3 before sending them out.
6634
6635         * apply-dict.c: (apply_dict) Use new avl_traverser_init() macro.
6636         
6637         * ascii.c: (option_tab[]) Initialize all struct members.
6638
6639         * avl.h: (avl_traverser_init) New macro.
6640         
6641         * command.c: (DEFCMD, UNIMPL macros, cmd_table[]) Initialize all
6642         struct members.
6643
6644         * crosstabs.q: (enum_var_values) Use new hsh_iterator_init()
6645         macro.
6646
6647         * hash.c: Comment fix.
6648
6649         * hash.h: (hsh_iterator_init) New macro.
6650
6651         * html.c: (option_tab[]) Initialize all struct members.
6652
6653         * pfm-write.c: (write_value_labels) Use new avl_traverser_init()
6654         macro.
6655
6656         * postscript.c: (option_tab[]) Initialize all struct members.
6657         (output_encodings, preclose, dump_lines) Use new
6658         hsh_iterator_init() macro.
6659
6660         * sfm-write.c: (write_value_labels) Use new avl_traverser_init()
6661         macro.
6662
6663         * sysfile-info.c: (describe_variable) Use new avl_traverser_init()
6664         macro.
6665
6666 Thu Nov 19 12:32:45 1998  Ben Pfaff  <blp@gnu.org>
6667
6668         * data-in.c: Examined each of the parsing functions to make sure
6669         that they wouldn't dump core if they were passed a string of the
6670         wrong length, since now the DATA LIST FREE/LIST routines don't
6671         check for field width before passing it to the data parser.
6672         (parse_RBHEX, parse_AHEX) Reject odd length input.
6673         (parse_string_as_format) Reject input that's too short or too
6674         long.
6675
6676         * data-list.c: Before, the DATA LIST FREE/LIST routines would pad
6677         a field to its entire declared output width then pass it to the
6678         data-in parsing routines.  This contradicted the documented
6679         behavior.  This is fixed in these changes.  Thanks to Mark H. Wood
6680         <mwood@IUPUI.Edu>.  In addition, this fixes a few more details of
6681         free-format parsing that differed from SPSS.
6682         (cut_field) Commas and spaces are treated identically.  Returns
6683         the proper column instead of a fixed 1 value.
6684         (parse_field) Removed.
6685         (read_from_data_list_free, read_from_data_list_list) Call
6686         parse_string_as_format directly instead of parse_field.
6687
6688         * heap.c: (heap_delete) Stylistic fixes.
6689
6690 Sun Aug  9 11:12:13 1998  Ben Pfaff  <blp@gnu.org>
6691
6692         * loop.c: (loop_2_trns_proc) Formatting fix.
6693
6694         * sel-if.c: (cmd_filter) Set FILTER_before_TEMPORARY.
6695
6696         * var.h: (glob var FILTER_before_TEMPORARY) New global var.
6697
6698         * vfm.c: (macro FILTERED) New.
6699         (static var filter_var) New.
6700         (process_active_file_write_case) Use FILTERED.
6701         (setup_filter) Set filter_var.
6702         (close_active_file) Delete the filter if not
6703         FILTER_before_TEMPORARY.
6704         (procedure_write_case) Use FILTERED.
6705
6706 Sat Aug  8 00:20:14 1998  Ben Pfaff  <blp@gnu.org>
6707
6708         * crosstabs.q: Changed /PIVOT={ON,OFF} to /FORMAT={PIVOT,NOPIVOT}.
6709
6710         * data-in.c: (parse_day_count) Message fix.
6711         (parse_month) Style fix.
6712
6713         * data-list.c: (struct data_list_pgm) New member eof.
6714         (cmd_data_list) Init eof to 0.
6715         (do_reading) Implement the /END subcommand and read-past-eof
6716         checking.
6717
6718         * do-if.c: Include stdio.h when debugging.
6719         (cmd_else_if) Make sure the command is .-terminated.
6720
6721         * glob.c: (init_glob) Capitalize the command prompt.
6722
6723         * inpt-pgm.c: (end_case_trns_proc) Debugging message.
6724         (end_file_trns_proc) Debugging message.
6725
6726         * loop.c: (internal_cmd_loop) Make it work when there's no loop
6727         index!
6728         (loop_2_trns_proc) Enable MXLOOPS (why was this disabled?)
6729
6730         * main.c: (dump_token) Make kwtab[] const.
6731
6732         * set.q: Spelling, comment fixes.
6733
6734         * sysfile-info.c: (cmd_display) DISPLAY VECTORS not DISPLAY
6735         VECTOR.
6736
6737         * vars-prs.c: (fill_all_vars) Style fix.
6738
6739         * vfm.c: (index_to_varname) Return const.
6740
6741 Tue Aug  4 23:49:23 1998  Ben Pfaff  <blp@gnu.org>
6742
6743         * Changes in many source files for partial -ansi -pedantic and
6744         no-debugging compliance: Remove trailing common in enum
6745         declarations; add `unused' attributes; insert some appropriate
6746         casts.
6747
6748         * cmdline.c: (parse_command_line) Add new --testing-mode flag.
6749
6750         * command.c: (shell) Make static.
6751         (run_command) Make static.
6752
6753         * data-list.c: (dump_fixed_table) Remove use of local_strdup().
6754
6755         * dfm.c: (cmd_begin_data) I18n fix.
6756
6757         * error.c: (verbose_msg) Define if __STRICT_ANSI__.
6758
6759         * error.h: (macro verbose_msg) Define if __STRICT_ANSI__.
6760
6761         * expr-opt.c: (evaluate_tree) Don't initialize local arrays if
6762         __STRICT_ANSI__.
6763
6764         * file-handle.q: Don't prepend the source file directory name to
6765         the data file name.  (Ongoing issue.)
6766         (prepend_current_directory) Comment out.
6767         (internal_cmd_file_handle) Don't call prepend_current_directory().
6768         (fh_get_handle_by_filename) Ditto.
6769
6770         * filename.c: Append zero byte to readlink() return value.
6771
6772         * getline.c: (getl_read_line) I18n fix.
6773
6774         * lexer.h: Don't use gcc features if __STRICT_ANSI__.
6775
6776         * misc.h: Don't use gcc features if __STRICT_ANSI__.
6777
6778         * pfm-write.c: (bufwrite) Don't try to increment a void * pointer
6779         directly.
6780
6781         * postscript.c: (output_encodings) Don't use local_strdup().
6782         (postopen) Ditto.
6783
6784         * print.c: Don't use gcc features if __STRICT_ANSI__.
6785
6786         * q2c.c: (dump_vars) Don't put a , at the end of the last enum.
6787
6788         * recode.c: (parse_src_spec) Fully brace nested if's.
6789
6790         * set.q: (global var set_testing_mode) New var.
6791
6792 Wed Jul 29 22:01:44 1998  Ben Pfaff  <blp@gnu.org>
6793
6794         * ascii.c: Add some more `unused' attributes that only come into
6795         play when NDEBUG is defined.
6796         (ascii_close_page) Set s_len when reallocating s.
6797         
6798         * crosstabs.q: (delete_missing) New function.
6799         (output_pivot_table) Call delete_missing() if /MISSING=REPORT.
6800         (make_summary_table) Create summary table reallocable.
6801
6802         * postscript.c: Add more `unused' attributes as above.
6803
6804         * tab.c: (tab_create) [GLOBAL_DEBUGGING] Set reallocable member.
6805         (tab_realloc) [GLOBAL_DEBUGGING] Assert that table is reallocable.
6806          
6807         * tab.h: (struct tab_table) [GLOBAL_DEBUGGING] New `reallocable'
6808         member.
6809
6810         * var.h: (macro force_dup_variable) [!GLOBAL_DEBUGGING] Remove
6811         gratuitous space between parameter definition.
6812
6813         * vars-atr.c: Changed some assert(0)'s to abort()'s to prevent
6814         complaints about running off the end of functions with NDEBUG
6815         enabled.
6816
6817 Sun Jul  5 00:17:25 1998  Ben Pfaff  <blp@gnu.org>
6818
6819         * Several source files: Removed some PORTME notes when reflection
6820         revealed that ANSI forbids that sort of breakage.  Also, added
6821         lots of `unused' qualifiers here and there.
6822
6823         * aggregate.c: (accumulate_aggregate_info) Remove local var
6824         weighting that turned out not to be used.
6825
6826         * avl.c: Update to version 1.1.0.  Add unused specifier.
6827         (avl_destroy) Initialize ab to 0.  Comment fixes.  Cast return
6828         value to void *.
6829         (avl_probe) Replace some instances of 1 with +1 where appropriate.
6830         (avl_find) Cast return value to void *.
6831         (avl_delete) q doesn't need to be initialized at the beginning of
6832         the function.  Replace some instances of 1 with +1.
6833         (force_avl_delete) Renamed avl_force_delete, all references changed.
6834         (compare_ints) `param' marked unused.
6835         (print_int) `param' marked unused.
6836         (recurse_tree) Replace some instances of 1 with +1.
6837
6838         * avl.h: Update to version 1.1.0.  Only declares avl function
6839         types if not already declared.
6840         (AVL_MAX_HEIGHT) Only define if not already defined.
6841         (struct avl_node) New unused member char pad[2].
6842         [GLOBAL_DEBUGGING] Change conditionalization to NDEBUG instead.
6843         (force_avl_insert) Renamed avl_force_insert.
6844         (force_avl_delete) Renamed avl_force_delete.
6845
6846         * crosstabs.q: (struct table_entry) Put `freq' into a union with
6847         new member `data'.
6848         (struct crosstab) Add new member `ofs'.
6849         (glob var int_tab) Removed.
6850         (custom_tables) In integer mode, assign v[i] properly through the
6851         indirect var_dict.
6852         (custom_variables) Now p.crs.max == max + 1.
6853         [DEBUGGING] (debug_print) p.crs.min and p.crs.max are now ints.
6854         (precalc) Implement integer mode.
6855         (calc_integer) Implement integer mode.
6856         (compare_table_entry) Remove unused local variable `comparing'.
6857         (make_summary_table) Implement integer mode.
6858         (macro ns_rows) Implemented as static variable now.
6859         (several variables) Made static, from global.
6860         (output_pivot_table) Use table_value_missing() for column heads.
6861         Remove several unused local variables.  Implement integer mode
6862         table summing.  Count up ns_rows.
6863         (crosstabs_dim) Make columns wider when /MISSING=REPORT requested.
6864         (find_pivot_extent) Moved into find_pivot_extent_general; now just
6865         calls that function or find_pivot_extent_integer.
6866         (find_pivot_extent_integer) New function.
6867         (enum_var_values) Implemented for integer mode.
6868         (table_value_missing) New function.
6869         (display_dimensions) Call table_value_missing() for heads.
6870         (float_M_suffix) New function.
6871         (display_crosstabulation) Call table_value_missing() for row
6872         heads.  Handle missing values in /MISSING=REPORT mode.
6873         (calc_fisher) Remove unused var N.
6874         (calc_r) Remove unused var fact.
6875
6876         * data-list.c: (dump_fixed_table) Fix table dimensioning.
6877         (read_one_set_of_repetitions) Remove unused vars var_spec, column.
6878
6879         * data-out.c: (insert_commas) Remove unused var cp.
6880         (convert_CCx) Remove unused vars save_set_decimal,
6881         save_set_grouping.
6882
6883         * descript.q: (dump_z_table) Fix table dimensioning.
6884         (pre_calc) Remove unused var j.
6885         (display) Remove unused vars title, s.  Fix table dimensioning.
6886
6887         * expr-evl.c: Comment fixes.
6888
6889         * frequencies.q: (full_dim) New function.
6890         (dump_full) Fix table dimensioning.
6891         (condensed_dim) New function.
6892         (dump_condensed) Fix table dimensioning.
6893
6894         * get.c: (cmd_match_files) Remove unused var n_val.  Remove unused
6895         label winnage.
6896
6897         * html.c: (html_close_drive) Remove unused var i.
6898         (postopen) Remove unused vars title, curfn_len, cp.
6899         (preclose) Remove unused vars this, x.
6900
6901         * lexer.c: Comment fixes.
6902
6903         * matrix-data.c: (cmd_matrix_data) Remove unused var index.
6904
6905         * means.q: (custom_tables) Remove unused var m_dim.
6906
6907         * mis-val.c: Format fix.
6908
6909         * modify-vars.c: (cmd_modify_vars) Remove unused var new_dict.
6910
6911         * output.c: (outp_get_paper_size) Remove unused var cp.
6912
6913         * pfm-read.c: (read_float) Remove unused var save, unused label
6914         underflow.
6915         (read_variables) Remove unused vars cp, j.
6916         (read_value_label) Remove unused var j.
6917
6918         * pfm-write.c: (bufwrite) Remove unused var i.
6919
6920         * postscript.c: (ps_postopen_drive) Remove unused vars dev_info,
6921         fn.
6922         (output_encodings) Remove unused vars char_cp, n_output.
6923         (read_ps_encodings) Remove unused var ep.
6924         (postopen) Remove unused var title.
6925         (preclose) Remove unused var fp.
6926         (ps_open_page) Remove unused vars true, false, orientation,
6927         mirror_horz, mirror_vert, width, length.
6928         (ps_text_metrics) Remove unused var x.
6929
6930         * q2c.c: (find_symbol) Remove unused var y.
6931         (parse_setting) Remove unused parameter sbc, all references
6932         changed.
6933         (dump_parser) Remove unused var cp.
6934         (dump_free) Remove unused var i.
6935
6936         * set.q: (static vars args, n) Removed.
6937         (internal_cmd_gset) Removed.
6938
6939         * sfm-read.c: (sfm_read_dictionary) Removed unused var i.
6940         (read_machine_flt64_info) Removed unused var file_endian.
6941         (read_documents) Removed unused var i.
6942         (read_compressed_data) Removed unused parameter dict, all
6943         references changed.
6944
6945         * sfm-write.c: (bufwrite) Removed unused var i.
6946         (sfm_write_case) Removed unused var i.
6947
6948         * sort.c: (merge_once) Remove unused var t.
6949         (write_separate) #if 0 out as dead code.
6950
6951         * split-file.c: (cmd_split_file) Remove unused var i.
6952
6953         * sysfile-info.c: (sysfile_info_dim) New function.
6954         (cmd_sysfile_info) Fix table dimensioning.
6955         (variables_dim) New function.
6956         (display_variables) Fix table dimensioning.
6957         (describe_variable) Remove unused var prev_r.
6958
6959         * t-test.q: (z_postcalc) Removed.
6960         (pairs_calc) Remove unused var bad_weight.
6961         (postcalc) Remove unused vars dfn, dfd.
6962
6963         * tab.c: (tab_create) Set t->dim to NULL.
6964         (tab_dim) Make sure t->dim is NULL first.
6965         (tab_natural_width) Remove parameter `clamp'.
6966         (tab_value) Remove duplicate assertion for table.
6967         (tab_raw) New function.
6968         (nowrap_dim) New function.
6969         (wrap_dim) New function.
6970         (tab_output_text) Fix table dimensioning.
6971
6972         * tab.h: (tab_raw) New macro.
6973
6974         * val-labs.c: (get_label) Remove unused var type.
6975         (copy_value_labels) Remove unused var trav.
6976
6977         * var.h: (struct crosstab_proc) Completely changed.
6978
6979         * vars-prs.c: (parse_dict_variable) Remove unused var v.
6980
6981         * vfm.c: (open_active_file) Remove unused vars i, lp.
6982
6983         * weight.c: (weight_trns_proc) #if 0 out as dead code.
6984         
6985 Tue Jun  2 23:37:21 1998  Ben Pfaff  <blp@gnu.org>
6986
6987         * Makefile.am: Add apply-dict.c, flip.c.
6988
6989         * apply-dict.c: New file.
6990         
6991         * command.c: (struct command) Make cmd[] larger for CLEAR
6992         TRANSFORMATIONS command name.
6993         (parse_cmd) Make sure we're in a valid state before using it as an
6994         index.  Discard variables and reset state on invalid transitions.
6995         (cmd_clear_transformations) New function.
6996
6997         * command.def: Add APPLY DICTIONARY, CLEAR TRANSFORMATIONS, FLIP.
6998         Add unimplemented PRESERVE, RESTORE.
6999
7000         * file-handle.h: Include stddef.h.
7001
7002         * flip.c: New file.
7003         
7004         * pfm-read.c: (parse_value) Pad value label values with spaces,
7005         not nulls.
7006
7007         * sfm-read.c: (struct sfm_fhuser_ext) Add reference count.
7008         (sfm_close) Decrement reference count, make sure it's zero.
7009         (sfm_maybe_close) New function.
7010         (sfm_read_dictionary) Handle reference counts.
7011
7012         * vars-atr.c: (clear_default_dict) New function.
7013         (discard_variables) Use clear_default_dict().
7014
7015 Sun May 31 00:58:05 1998  Ben Pfaff  <blp@gnu.org>
7016
7017         * Makefile.am: Add pfm-write.c.
7018         (LDADD) Add the libgmp2 libraries.
7019
7020         * command.def: Define EXPORT.
7021
7022         * get.c: (cmd_export) New function.
7023         (export_write_case_func) New function.
7024
7025         * pfm-read.c: (static spss2ascii[]) Make it const.
7026
7027         * pfm-write.c: New file.
7028
7029         * sfm-write.c: Formatting, comment fixes.
7030
7031         * var.h: Comment fix.
7032
7033 Fri May 29 21:44:12 1998  Ben Pfaff  <blp@gnu.org>
7034
7035         * Makefile.am: Add pfm.h, pfm-read.c.
7036
7037         * command.def: IMPORT is now implemented.
7038
7039         * format.c: (glob var translate_fmt[]) New var.
7040
7041         * get.c: (enum GTSV_NONE) Renamed GTSV_OPT_NONE.
7042         (cmd_import) New function.
7043         (import_source_read) New function.
7044         (glob var import_source) New var.
7045
7046         * pfm-read.c: New file.
7047
7048         * pfm.h: New file.
7049         
7050         * sfm-read.c: (parse_format_spec) Local variable translate_fmt[]
7051         moved in format.c.
7052         (dump_dictionary) Disabled printing a couple of items.
7053
7054 Mon May 25 12:42:37 1998  Ben Pfaff  <blp@gnu.org>
7055
7056         * crosstabs.q: (postcalc) Call make_summary_table().
7057         (make_summary_table) New function.
7058         (insert_summary) New function.
7059         (display_dimensions) Remove some unnecessary arguments, all
7060         references changed.
7061         (output_pivot_table) Fix lots of problems with the risk table
7062         setup.
7063         (submit) Don't display an empty table.
7064         (display_risk) Fix order of arguments to calc_risk().
7065
7066         * glob.c: Always include assert.h and stdlib.h.
7067
7068         * output.h: (enum OUTP_T_JUST_FULL) Removed, all references
7069         removed.
7070
7071         * tab.c: (tab_create) Cosmetic changes.
7072
7073         * tab.h: (enum TAB_JUSTIFY) Removed, all references removed.
7074
7075 Sun May 24 22:39:23 1998  Ben Pfaff  <blp@gnu.org>
7076
7077         * tab.def: Removed.
7078
7079         * crosstabs.q: (output_pivot_table) Headers drawing and submission
7080         code simplified, moved into new function submit().
7081         (submit) New function.
7082         (crosstabs_dim) New function.
7083         (display_directional) Substitute variable names for %s where
7084         appropriate.
7085         (somers_d_v[], somers_d_ase[], somers_d_t[]) New static vars.
7086         (calc_symmetric) Initialize parameters only if non-NULL.
7087         Calculate Somers' d.
7088         (calc_directional) Calculate Somers' d (or copy it, really).
7089         Calculate eta.
7090
7091         * output.c: (outp_string_width) New function.
7092
7093         * postscript.c: (postopen) Calculate font widths based on the
7094         width of the zero '0' character, not the width of the space
7095         character.  Set paper-width and paper-length based on points, not
7096         device units.
7097         (ps_open_page) Fix page setup string for landscape mode.
7098
7099         * som.h: (struct som_dimension) Removed.
7100         (struct som_table_class) height, width members take int * not
7101         som_dimesion * now.
7102
7103         * tab.c: Many functions now have added parameter validation.
7104         (tab_height, tab_width) These functions were removed and merged
7105         into a single function tab_resize(), and all references changed.
7106         (tab_dim) Rewritten since the interface changed; reduced from
7107         hundreds of lines to two.  All callers were changed.  Currently
7108         most of them just use tab_natural_dimensions as their callback and
7109         await detailed translation of functionality.
7110         (tab_natural_width) New function.
7111         (tab_natural_height) New function.
7112         (tab_natural_dimensions) New function.  This is a callback
7113         function, not something that you'd want to call directly.
7114         (tab_nat_dim) Removed.
7115         (tabi_table) Allocates t->w and t->h.
7116         (tabi_driver) Inlined sum_columns()'s functionality.  Calls the
7117         dimensions callback.
7118         (evaluate_dimensions) Removed.
7119         (sum_columns) Removed.
7120
7121         * tab.h: (enum TAL_1THIN) Removed.
7122         (enum series t_*) Removed.
7123         (struct tab_table) Members trh, trv changed to unsigned char *
7124         from int *.  Member dim changed to a function pointer from a
7125         unsigned char *.  Member max_stack_height removed.  New members
7126         hr_tot, vr_tot.
7127         (macros tab_l, tab_r, tab_t, tab_b) New.
7128
7129 Sat May 23 23:22:13 1998  Ben Pfaff  <blp@gnu.org>
7130
7131         * ascii.c: (delineate) Assign last_space_nchars before skipping
7132         spaces, to fix right justification.
7133
7134         * crosstabs.q: (static vars risk, direct) New vars.
7135         (static var pearson_r) Removed.
7136         (glob var chisq_fisher) Made static.
7137         (static vars row_tot[], col_tot[]) Don't include grand total
7138         anymore.
7139         (static var grand_total) Renamed W, all references changed.
7140         (output_pivot_table) Only make `table' if num_cells != 0.  Make
7141         risk and directional tables.  Deal with grand total no longer part
7142         of col_tot[].  Free rows and cols after we're done with them.
7143         (display_risk) New function.
7144         (display_directional) New function.
7145         (clac_r) Rewritten so that it stores all its results into its
7146         arguments, so it can be used for Spearman's correlation too.
7147         (calc_symmetric) Added a t[] argument, all references changed.
7148         Calculates ASEs for tau-b, tau-c, gamma.  Calculates Spearman's r,
7149         Pearson's r, Cohen's kappa.
7150         (calc_risk) New function.
7151         (calc_directional) New function.
7152
7153         * som.c: (som_submit) Improved debugging code.
7154
7155         * stats.c: (hypercube) New function.
7156         (cube) New function.
7157         (sqr) New function.
7158         (normal_sig) Went back to old implementation, which actually
7159         worked.
7160
7161         * stats.h: (macros square, cube, hypercube) Removed.  The
7162         equivalent functions in stats.c are inlined here; all references
7163         to square changed to sqr.
7164
7165 Fri May 22 00:03:41 1998  Ben Pfaff  <blp@gnu.org>
7166
7167         * crosstabs.q: (N_SYMMETRIC) New define.
7168         (postcalc) Disable debug printing.
7169         (static vars chisq_fisher, pearson_r) New.
7170         (output_pivot_table) Add support for symmetric measures.  Add
7171         chi-square output of exact sigs.
7172         (display_chisq) Rewritten.
7173         (display_symmetric) New function.
7174         (gamma_int) New function.
7175         (Pr) New function.
7176         (swap) New function.
7177         (calc_fisher) New function.
7178         (calc_chisq) Check boundary conditions better. Calculate Yates,
7179         Fisher, Mantel-Haenszel tests.
7180         (calc_r) New function.
7181         (calc_symmetric) New function.
7182
7183         * stats.c: (normal_sig) Rewritten with new algorithm.  Renamed
7184         from calc_normal.
7185         (chisq_sig) Better boundary conditions.  Renamed from
7186         calc_significance.
7187
7188         * tab.h: (struct tab_table) New member cf.
7189
7190         * tab.c: (tab_create) Set cf.
7191         (tab_width) New function.
7192         (tab_realloc) Handle cf.
7193         (tab_vline) Handle cf.
7194         (tab_hline) Handle cf.
7195         (tab_box) Handle cf.
7196         (tab_value) Handle cf.
7197         (tab_float) Handle cf.
7198         (tab_text) Handle cf.
7199         (tab_joint_text) Handle cf.
7200         (tab_offset) Handle cf.
7201         (tab_next_row) Handle cf.
7202         (evaluate_dimensions) Handle cf.
7203         (render_strip) Handle cf.
7204
7205 Wed May 20 00:03:59 1998  Ben Pfaff  <blp@gnu.org>
7206
7207         * crosstabs.q: (postcalc) New vars row_tot, col_tot, pass them to
7208         output_pivot_table().
7209         (output_pivot_table) Moved lots of local variables outside and
7210         made them static.  Add beginnings of chi-square statistic
7211         support.  Now column and row totals aren't in the main matrix.
7212         Always zero out any leftover rows & columns after we're done with
7213         the table entries.  Move all output stuff into
7214         display_dimensions(), display_crosstabs(), display_chisq().
7215         (display_dimensions) New function.
7216         (display_crosstabulation) New function.
7217         (display_chisq) New function.
7218         (calc_chisq) Implemented Pearson and likelihood-ratio chisquares.
7219
7220         * frequencies.q: (dump_full, dump_condensed) Remove tab_null()
7221         references, simplify logic.
7222
7223         * postscript.c: Remove scale, translate-x, translate-y,
7224         mirror-horz, mirror-vert, rotate-180 options.
7225         (struct ps_driver_ext) Remove scale, translate_x, translate_y.
7226         All references deleted.
7227         (macro YT) New macro.
7228         (array option_tab[]) Removed options.
7229         (ps_option) Removed options.
7230         (ps_open_page) Write page setup explicitly to output file, without
7231         using now-deleted BP function.
7232         (macro dump_line) Use YT().
7233         (macro dump_thick_line) Use YT().
7234         (draw_headers) Use YT().
7235         (switch_font) Reorder arguments to SF function.
7236         (write_text) Use YT().
7237
7238         * sfm-read.c: (sfm_read_case) Don't attempt to read variables that
7239         have get.fv == -1.
7240
7241         * sysfile-info.c: (describe_variables) Don't use tab_nulls().
7242
7243         * tab.c: (tab_create) Initialize t->ct to zeros.  Remove
7244         null-debugging code.
7245         (tab_realloc) Remove null-debugging code.  Initialize new regions
7246         of t->ct to zeros.
7247         (tab_vline) Support offsets.
7248         (tab_hline) Support offsets.
7249         (tab_box) Support offsets.
7250         (tab_null) Removed.
7251         (tab_nulls) Removed.
7252         (tab_row) Removed.
7253         (tab_col) Removed.
7254         (evaluate_dimensions) Remove null-debugging code.  Understand
7255         TAB_EMPTY attribute.  Assert that text.s.s is always non-NULL if
7256         TAB_EMPTY not present.
7257
7258         * tab.h: New cell attribute TAB_EMPTY.
7259         (macros tab_nr, tab_nc, tab_row, tab_col) New.
7260
7261         * vars-atr.c: (init_variable) Set get.fv to -1 so that GET doesn't
7262         try to read them from system files.
7263
7264         * vfm.c: (dump_splits) Don't call tab_null().   
7265
7266 Sat May 16 19:36:55 1998  Ben Pfaff  <blp@gnu.org>
7267
7268         * crosstabs.q: (struct crosstab) Added `missing' member.
7269         (custom_tables) Init missing.
7270         (calc_general) Handle missing values.
7271         (calc_chisq) New function.
7272         (output_pivot_table) Start work on chi-square output.  Update for
7273         new tab offset support functions.  Shorten statistic names.
7274
7275         * Several files: add in more `const's to placate gcc's warnings.
7276
7277         * tab.h: (struct tab_table) Add col_ofs, row_ofs members.  Comment
7278         fixes.
7279
7280         * tab.c: (tab_height, tab_realloc, tab_vline, tab_hline, tab_box,
7281         tab_null, tab_nulls, tab_value, tab_float, tab_text,
7282         tab_joint_text) Add col_ofs and row_ofs support.
7283         (tab_offset) New function.
7284         (tab_next_row) New function.
7285         (tab_row) New function.
7286         (tab_col) New function.
7287         (tabi_table) Add col_ofs and row_ofs support.
7288
7289         * vars-atr.c: (is_system_missing) New function.
7290
7291 Tue May 12 16:14:30 1998  Ben Pfaff  <blp@gnu.org>
7292
7293         * crosstabs.q: Expanded subcommand names RESID --> RESIDUAL, etc.
7294         (static var no_cells) Removed.
7295         (static var num_cells) New.
7296         (static var expected) New.
7297         (static var cells[]) New.
7298         (internal_cmd_crosstabs) Deal with new variables.
7299         (postcalc) Removed most of the meat and put it in new function
7300         output_pivot_table().
7301         (output_pivot_table) Calculates and outputs an entire pivot table.
7302
7303         * postscript.c: (postopen) Fix problems with free()ing addresses
7304         not obtained from malloc().
7305
7306         * som.c: (som_submit) Add assertion.
7307
7308         * sysfile-info.c: (describe_variable) Use new tab_nulls()
7309         function.
7310
7311         * tab.c: (static var tab_names[]) New.
7312         (tab_realloc) -1 for nc or nr indicates no change.
7313         (tab_nulls) New function.
7314         (tab_dim) Use tab_names[].
7315         (tabi_cumulate) Don't include bottom or right headers.  Furrfu.
7316         (evaluate_dimensions) Don't terminate on uninited cells, just put
7317         an X in them and emit a notice.  Use tab_names[].
7318
7319         * tab.h: Move bits into tab.def.
7320
7321         * tab.def: New.  Don't try to declare tab_table_class because then
7322         som.h has to be included.       
7323         
7324 Thu May  7 22:55:04 1998  Ben Pfaff  <blp@gnu.org>
7325
7326         * command.def: New file, contains all the command definitions
7327         previously included bodily in command.c.
7328
7329         * format.def: New file, contains all of the format definitions
7330         previously split across format.h, format.c, and sfm-write.c.
7331
7332         * lexer.h: Renamed from tokens.h in order to match corresponding
7333         .c file name.
7334
7335         * lexerP.h: Moved some rarely used functions exported by lexer.c
7336         into here.
7337
7338         * Makefile.am: Commemorate renamed files.
7339         (EXTRA_DIST) Add command.def, format.def.
7340
7341         * command.c: [0] (walk_cmdtable_func) Removed.
7342
7343         * crosstabs.q: (postcalc) Made it work and print out matrices
7344         proving it.
7345         (enum_column_values) Renamed enum_var_values, generalized for any
7346         variable.
7347
7348         * format.h: (struct fmt_desc) New member `spss'.
7349
7350         * q2c.c: (main) Generated code includes lexer.h instead of
7351         tokens.h.
7352
7353         * sfm-write.c: (write_format_spec) Use new spss member of fmt_spec
7354         instead of an independent translation table.
7355
7356 Tue May  5 13:19:03 1998  Ben Pfaff  <blp@gnu.org>
7357
7358         * Lots of source files: Added const to declarations.
7359
7360         * aggregate.c: (parse_aggregate_function) Rename inner i to j.
7361         
7362         * arena.c: (arena_clear) Set prev pointer to null when done.
7363
7364         * ascii.c: (ascii_option) Rename index as indx.
7365
7366         * avl.c: This is now a separate library called libavl.
7367         (xmalloc) Make static.
7368         (avl_probe) Step A7 can use the cache instead of an explicit
7369         compare.
7370         (avl_delete) Don't maintain a q pointer because it's always
7371         available in the pointer stack.  Comment fix.
7372
7373         * avl.h: This is now a separate library called libavl.
7374
7375         * command.c: (cmd_table[]) Remove spurious trailing "".
7376
7377         * common.h: Only include random() fix if this system needs it.
7378
7379         * crosstabs.q: Include alloca headers.
7380         (n_sorted_tab) New global var.
7381         (postcalc) Mostly rewritten.
7382         (find_pivot_extent) Rewritten.
7383         (enum_column_values) Rewritten.
7384
7385         * data-out.c: (convert_F) Rename inner n as n_spaces.
7386
7387         * error.c: (dump_message) Don't have an outer var i.
7388
7389         * file-handle.q: (static var f) Removed.  All references removed.
7390         (internal_cmd_file_handle) Uses a local variable instead of f.
7391
7392         * get.c: (trim_dictionary) Change scope of i, i1, i2.
7393         (cmd_match_files) Don't strcpy tokstr into sbc (why was this ever
7394         done?)
7395
7396         * getline.h: Declare getl_history as extern.  Reported by
7397         palme@uni-wuppertal.de (Hubert Palme).
7398
7399         * postscript.c: (postopen) Some large mods for constness.
7400
7401         * recode.c: Remove spurious copyrights since PSPP is owned by FSF
7402         anyway.
7403
7404 Fri Apr 24 12:52:47 1998  Ben Pfaff  <blp@gnu.org>
7405
7406         * Makefile.am: Rename BUILT_SOURCES to q_sources, all references
7407         changed.  Add avl.c, avl.h to pspp_SOURCES.  Remove avllib from
7408         LDADD.
7409
7410         * avl.c, avl.h: New files.  These form a clean-room
7411         reimplementation of avllib.  Iterative algorithms are used in
7412         place of recursive ones, so there is no resemblance in the code.
7413
7414         * Lots of headers: Don't include other headers by default.
7415
7416         * Lots of source files: Explicitly include all needed headers.
7417
7418         * arena.c: (arena_clear) New function.
7419
7420         * crosstabs.q: (ROW_VAR, COL_VAR) New enums.
7421         (static var ar) Removed.
7422         (staitc vars ar_tc, ar_col) New.
7423         (cmd_crosstabs) Destroy the arenas.
7424         (internal_cmd_crosstabs) Create the arenas.
7425         (precalc) Don't need a free function for the hash.
7426         (calc_general) Make sure to zero out the trailer on the key data
7427         before inserting.
7428         (print_table_entries) Updated.
7429         (postcalc) Worked on actually implementing.
7430         (find_pivot_extent) New function.
7431         (compare_value) New function.
7432         (enum_column_values) New function.
7433
7434         * data-in.c: (parse_month) Make local array `static const'.
7435         
7436         * data-out.c: (convert_date) Make local array `static const'.
7437         (convert_WKDAY) Same.
7438         (convert_MONTH) Same.
7439
7440         * frequencies.q: (postprocess_freq_tab) avl_walk_inorder() has
7441         been renamed to avl_walk().
7442         
7443         * hash.c: Rewritten more efficiently.
7444
7445         * hash.h: Add attribute const to hsh_next_prime declaration.
7446
7447         * lexer.c: (id_match) Make arguments const.
7448
7449         * postscript.c: (ps_postopen_driver) Make default fonts the
7450         Helvetica family.
7451
7452         * q2c.c: (main) Generated code needs stdlib.h.
7453
7454         * sfm-write.c: (write_value_labels) An avl_traverser needs to be
7455         initialized to 0 now, not to NULL.  All other references to
7456         avl_traverser were updated in the same way.
7457
7458         * tokens.h: Macro version of id_match updated to use const
7459         properly.
7460
7461         * val-labs.c: (inc_ref_count) New function.
7462         (copy_value_labels) Simply through use of new avl_copy() function.
7463
7464 Wed Apr 15 13:01:58 1998  Ben Pfaff  <blp@gnu.org>
7465
7466         * crosstabs.q: Probably doesn't compile.  New PIVOT subcommand.
7467         (postcalc) Worked on this.
7468
7469         * postscript.c: (OPO_DOUBLE_LINE) New enum.
7470         (struct ps_driver_ext) New line_width_thick member.
7471         (ps_preopen_drive) Init line_width_thick.
7472         (option_tab[]) Add line-* options.
7473         (ps_option) Parse line-* options.
7474         (postopen) Add line_width_thick support.  Strip leading spaces on
7475         prologue output lines.
7476         (ps_open_page) Include line_width_thick in output.
7477         (macro dump_thick_line) New.
7478         (dump_fancy_line) Support thick lines as well as double lines.
7479
7480 Tue Apr 14 00:50:08 1998  Ben Pfaff  <blp@gnu.org>
7481
7482         * Makefile.am: Add crosstabs.c to BUILT_SOURCES.  Add crosstabs.q
7483         to pspp_SOURCES.  Add crosstabs.q to EXTRA_DIST.
7484
7485         * Many source files: Rename `options' to `pv_opts' as appropriate.
7486
7487         * command.c: (static var cmd_table[]) Add CROSSTABS command.
7488
7489         * common.c: (xcalloc) New function.
7490
7491         * crosstabs.q: New file.  Not finished yet, though.
7492                 
7493         * data-list.c: Comment fix.
7494
7495         * error.c: Remove some old Checker cruft.
7496
7497         * frequencies.q: (dump_full) Cumulate valid percent instead of
7498         regular percent.
7499
7500         * getline.c: Comment fix.
7501
7502         * hash.c: Comment fixes.
7503
7504         * hash.h: (struct hsh_table) Make hash functions return unsigned
7505         instead of int to avoid problems with taking the modulo of
7506         negative return values.  All references changed.
7507
7508         * misc.c: (intlog10) Make its table static const instead of auto.
7509
7510         * sfm-read.c: (read_header) Make `prefix' static const instead of
7511         auto.
7512
7513         * var.h: (union value) Add member `hash'.
7514         (struct variable) Rename prv_index as `foo'--all references
7515         changed.  Reorder.
7516         (typedef pv_opts) Removed.  All references changed.
7517
7518         * vars-prs.c: (parse_variables) Message fixes.
7519         
7520 Mon Mar  9 15:35:08 1998  Ben Pfaff  <blp@gnu.org>
7521
7522         * get.c: (cmd_match_files) Don't reverse the order of FILEs as
7523         they are being inserted.  Don't check for BY variables of
7524         different types.  Discard variables if the active file isn't
7525         included in the merge.
7526         (mtf_processing) Essentially rewritten.
7527         (mtf_merge_dictionary) Check for master/slave variables of
7528         different types/widths.
7529
7530         * vfm.c: (static var not_canceled) New var.
7531         (process_active_file) Don't call vfm_source->read() if
7532         there's no vfm-source.  Initialize not_canceled.
7533         (process_active_file_write_case) Honor and update not_canceled.
7534         (prepare_for_writing) Rollback changes from yesterday, they were
7535         wrong.
7536         (close_active_file) Don't destroy vfm_source unless it exists.
7537         
7538 Mon Mar  9 00:56:16 1998  Ben Pfaff  <blp@gnu.org>
7539
7540         * Lots of source files: Added { } around nested if/else constructs
7541         to avoid new gcc 2.8 warnings.
7542
7543         * data-in.c: (parse_Z) Declare `int' type explicitly.
7544         (convert_Z) Ditto.
7545
7546         * get.c: (struct mtf_file) Add prev, next_min, by, input members.
7547         (cmd_match_files) Initialize mtf_by_values.  Manage by, input,
7548         prev members.  Put TABLEs at the end of the chain and FILEs at the
7549         beginning.  Don't allow the active file in STATE_INIT.  Use proper
7550         `seen' value for the active file.  Fill out the by members and
7551         make sure they're of consistent type.  Do the actual merge
7552         operation.
7553         (mtf_processing_finish) New function.
7554         (var_type_description) New function.
7555         (mtf_free_file) New function.
7556         (mtf_free) Rewritten.
7557         (mtf_delete_file_in_place) New function.
7558         (mtf_read_nonactive_records) New function.
7559         (mtf_compare_BY_values) New function.
7560         (static var mtf_seq_no) New var.
7561         (mtf_processing) New function.
7562         (mtf_merge_dictionary) Assign nval members for the system file
7563         dictionary.  Assign fv values for its variables.  Point each slave
7564         variable to the corresponding master variable.
7565
7566         * hash.c: Include str.h.
7567
7568         * mis-val.c: (copy_missing_values) src arg is const.
7569
7570         * misc.c: (spacing) Make `max' var explicitly int.
7571
7572         * sfm-read.c: (dump_dictionary) Message reformatting.
7573         (sfm_read_case) Add assertion.
7574
7575         * sort.c: Esthetic fixes.
7576
7577         * var.h: (struct match_files_proc) New struct.
7578         (struct variable) Add private data match_files_proc.
7579
7580         * vars-atr.c: (delete_variable) Implement.  Add argument for the
7581         dictionary that owning the variable.
7582         (dup_variable) Add assertion.
7583
7584         * vfm.c: Comment fixes, hopefully the comments are correct now.
7585         (process_active_file) New function.
7586         (process_active_file_write_case) New function.
7587         (process_active_file_output_case) New function.
7588         (prepare_for_writing) Use temp_dict->nval for vfm_info, not
7589         default_dict.nval.
7590         (write_case) Renamed procedure_write_case().  Now write_case is a
7591         pointer to a function.  Style fixes.
7592         
7593 1998-03-05  Ben Pfaff  <blp@gnu.org>
7594
7595         * Makefile.am: (q2c) Link with libmisc.
7596         (version.c) Define default_config_path, include_path,
7597         groff_font_path.
7598
7599         * ascii.c: (ascii_postopen_driver) When the default newline string
7600         is requested, open file in text mode.  Suggested by
7601         palme@uni-wuppertal.de (Hubert Palme).
7602         (static vars line_buf, line_p) Change from char * to unsigned char
7603         *.
7604         (ascii_close_page) char * to unsigned char *.
7605
7606         * cmdline.c: (parse_command_line) Implement -r option by
7607         prepending ~/.pspp/rc to the list of files to process.
7608
7609         * command.c: (cmd_remark) Reset getl_prompt to the standard prompt
7610         before pulling in a final line.
7611         (null_func, null_int_func) Removed (dead code).
7612
7613         * descript.q: (display) Calculate width of variable name column
7614         properly.  Calculate number of valid cases properly.  Reported by
7615         palme@uni-wuppertal.de (Hubert Palme).
7616
7617         * filename.c: (init_filename) Use default_config_path instead of
7618         now obsolete CONFIG_PATH.
7619
7620         * getline.c: (getl_initialize) Use include_path instead of now
7621         obsolete INCLUDE_PATH.
7622         (getl_add_file) New argument `where'.  All references changed.
7623
7624         * groff.c: (find_font_file) Use groff_font_path instead of now
7625         obsolete GROFF_FONT_PATH.
7626         
7627         * postscript.c: (find_ps_file) Use groff_font_path instead of now
7628         obsolete GROFF_FONT_PATH.  Copy through temporary variable to
7629         avoid problems with constness.
7630
7631         * str.h: (macro cs_streq) New macro.
7632
7633         * version.h: (glob var default_config_path, include_path,
7634         groff_font_path) New vars.
7635         
7636 1998-02-23  Ben Pfaff  <blp@gnu.org>
7637
7638         * Many source files: Change verbose_msg() priority levels and
7639         messages.
7640
7641         * aggregate.c: Include debug-print.h.
7642
7643         * cmdline.c: (parse_command_line) Add --safer/-s and --command/-c
7644         options.
7645         (static var pre_syntax_message) Document --safer/-s and
7646         --command/-c.
7647
7648         * command.c: (cmd_erase, cmd_host) Disable if set_safer is set.
7649
7650         * dfm.c: (open_inline_file) [__CHECKER__] Zero out ext->file,
7651         because it's not used but it's still copied.
7652         (open_file_r) Remove gratuitous debug message.
7653
7654         * filename.c: (safety_violation) New function.
7655         (open_file) Remove gratuitous debug messages.  Don't allow pipe
7656         files if set_safer is set.
7657
7658         * get.c: Turn off debugging.
7659
7660         * getline.c: (getl_add_virtual_file) New function.
7661         (getl_read_line) Add verbose_msg() call for opening new syntax
7662         file.
7663         (getl_perform_delayed_reset) Add a return value describing whether
7664         any action was taken.  Call reset_eof().
7665
7666         * getline.h: Comment fix.
7667
7668         * groff-font.c: (groff_read_font) Use `goto next_iteration' in
7669         place of incorrect `continue'.  Use strtok_r() instead of
7670         strtok().  Always check strtok_r() return value.
7671         (groff_read_DESC) Use strtok_r() instead of strtok().
7672
7673         * lexer.c: (reset_eof) New function.
7674
7675         * main.c: (parse) Get a token after performing a delayed reset
7676         action; allow empty syntax files.
7677
7678         * postscript.c: (output_encodings) Use strtok_r() instead of
7679         strtok().
7680
7681         * q2c.c: (dump_parser) Use strtok_r() instead of strtok().
7682
7683         * set.q: Comment fixes.
7684         (glob var set_safer) New var.
7685         (internal_cmd_set) Support SAFER.
7686
7687         * str.h: [!HAVE_STRTOK_R] Declare strtok_r() prototype.
7688
7689         * temporary.c: (free_dictionary) Set d->splits to NULL after
7690         freeing.
7691
7692         * vars-atr.c: (clear_variable) Decrement dict->n_splits if
7693         variable deleted, not if it *isn't* deleted.
7694
7695 1998-02-16  Ben Pfaff  <blp@gnu.org>
7696
7697         * command.c: (array cmd_table[]) Add MATCH FILES.
7698
7699         * common.c: Comment fixes.
7700
7701         * data-list.c, dfm.c, error.c, filename.c, list.q, matrix-data.c,
7702         modify-vars.c, postscript.c, sfm-read.c, sfm-write.c, tab.c:
7703         Include alloca.h.  Problem reported by palme@uni-wuppertal.de
7704         (Hubert Palme).
7705
7706         * expr-opt.c: Include str.h.  Problem reported by
7707         palme@uni-wuppertal.de (Hubert Palme).
7708
7709         * get.c: (cmd_get) [DEBUGGING] Update v->p.get to v->get.
7710         (static var mtf_by) Change from char ** to variable **.
7711         (static var mtf_master) New var.
7712         (mtf_merge_dictionary) New function.
7713         (cmd_match_files) Init mtf_master.  Parse mtf_by according to new
7714         var type.  Reorder tests properly.  Initialize file->dict.  Detect
7715         TABLE= without BY=.  Read file dictionaries and merge them.  Give
7716         subcommand name with IN, LAST, FIRST error messages.  Create IN,
7717         LAST, FIRST variables.  Comment fixes.
7718         (mtf_free) Don't free default_dict.  Free mtf_master.
7719
7720         * getline.c: Define getl_mode.  Change getl_buf_size to size_t
7721         from int.
7722         (handle_line_buffer) Cast int to size_t in comparison to avoid
7723         warning.
7724
7725         * getline.h: Declare getl_mode extern.
7726
7727         * groff-font.c: (groff_read_font) Type-fix calls to getline.
7728         (groff_read_DESC) Make line_size a size_t.
7729         (match_tok) Parenthesize name to avoid macro expansion.
7730
7731         * mis-val.c: (copy_missing_values) New function.
7732
7733         * postscript.c: (postopen) Make buf_size a size_t.
7734
7735         * sfm-read.c: (dump_dictionary) Make global from static.  Print
7736         variable info in parts for easier debugging with Checker.
7737
7738         * temporary.c: (copy_variable) Use copy_value_labels().
7739         (new_dictionary) New arg: whether to copy file label, documents.
7740
7741         * val-labs.c: (copy_value_labels) New function.
7742
7743         * var.h: (enums MISSING_*) Add MISSING_COUNT.
7744
7745         * vars-atr.c: [GLOBAL_DEBUGGING] (force_dup_variable) New
7746         function.
7747         (dup_variable) Set prv_index, get.fv, get.nv.
7748
7749 Fri Feb 13 15:38:36 1998  Ben Pfaff  <blp@gnu.org>
7750
7751         * Makefile.am: (pspp_SOURCE) Add htmlP.h.
7752
7753         * Many source files: For ANSI-compliance, add empty statement
7754         after label.  Reported by palme@uni-wuppertal.de (Hubert Palme)
7755         and Micah Altman <maltman@www-vdc.fas.harvard.edu>.
7756
7757         * data-in.c: (parse_numeric) Some header files break on
7758         -DBL_MIN_10_EXP because they get a --; add () for safety.
7759         Reported by palme@uni-wuppertal.de (Hubert Palme).
7760
7761         * dfm.c: Idea by Dr Eberhard W Lisse <el@linux.lisse.na>.
7762         (struct dfm_fhuser_ext) Change `file' from FILE * to file_ext.
7763         (dfm_close) Use close_file_ext.
7764         (open_inline_file) Set file.file to NULL, not file.
7765         (open_file_r, open_file_w) Initialize file.file; fill in file_ext
7766         struct and use open_file_ext().
7767         (read_record) Use file.file.
7768
7769         * file-handle.q: (prepend_current_directory) Pass through special
7770         filenames.
7771
7772         * filename.c: Only include unistd.h if HAVE_UNISTD_H.
7773         (normalize_filename) Pass through special filenames.
7774         (open_file, close_file) Accept pipe| and |pipe syntaxes as
7775         equivalent.
7776         (dirname) Rename blp_dirname() because of name conflict on some
7777         OS.  All references changed.  Reported by palme@uni-wuppertal.de
7778         (Hubert Palme).
7779         (is_special_filename) New function.
7780
7781         * get.c: (GTSV_OPT*) Add GTSV_OPT_MATCH_FILES.
7782         (trim_dictionary) Conditionalize some of the options on whether
7783         GTSV_OPT_MATCH_FILES is in *options.
7784         (rename_variables) Don't allow variables to be renamed as scratch
7785         variables.
7786         (MTF_*) New enum series.
7787         (struct mtf_file) New struct.
7788         (static vars mtf_head, mtf_tail, mtf_by, mtf_n_by, mtf_free) New
7789         vars.
7790         (cmd_match_files, mtf_free) New functions.
7791
7792         * lexer.c: (match_int) Needed parentheses around name to escape
7793         macro expansion.  Reported by Micah Altman
7794         <maltman@www-vdc.fas.harvard.edu>.
7795
7796         * print.c: Needed to include alloca.h.  Reported by Micah Altman
7797         <maltman@www-vdc.fas.harvard.edu>.
7798
7799         * recode.c: (convert_to_double) Parenthesize -DBL_MIN_10_EXP to
7800         -(DBL_MIN_10_EXP).  Reported by palme@uni-wuppertal.de (Hubert
7801         Palme).
7802         
7803         * str.h: Include stdarg.h.  Reported by palme@uni-wuppertal.de
7804         (Hubert Palme) and Micah Altman <maltman@www-vdc.fas.harvard.edu>.
7805
7806 Thu Feb  5 00:18:21 1998  Ben Pfaff  <blp@gnu.org>
7807
7808         * html.c: (struct html_driver_ext) Move into htmlP.h.
7809         (html_preopen_driver) Initialize cp_x, cp_y.
7810         (html_submit) Implement as call to output_tab_table().
7811         (change_attributes) New function.
7812         (escape_string) New function.
7813         (output_tab_table) New function.
7814
7815         * list.q: (write_all_headers) Add code for writing headers for the
7816         html driver.
7817         (clean_up) Write out the html close-table tag.
7818         (determine_layout) Ignore html driver.
7819         (list_cases) Write html data.
7820
7821         * som.c: (som_submit) Move more of the code into output_table().
7822
7823         * tab.c: (static var hit) Make a global var and rename tab_hit.
7824         (static var tab_table_class) Make a global var.
7825
7826         * htmlP.h: New file.
7827
7828 Tue Feb  3 16:12:18 1998  Ben Pfaff  <blp@gnu.org>
7829
7830         * dump-sysfile.c: Removed.
7831
7832         * html.c: (preclose) Change comment in emitted code.
7833
7834         * matrix-data.c: Debugging off by default.  Comment fixes.
7835         (static var container) New var.
7836         (cmd_matrix_data) Create and destroy container.  Initialize
7837         is_per_factor[] to 0s.  Move code into new function
7838         string_to_content_type().  Require split values to be present in
7839         the data when ROWTYPE_ is explicit.  Call specific function, not
7840         general read_matrices().
7841         (string_to_content_type) New function.
7842         (context) Exclude all whitespace, not just spaces.
7843         (mget_token) A dot is a number.  Add assertion.
7844         (static var data) Renamed nr_data.
7845         (static var factor_values) Renamed nr_factor_values.
7846         (read_matrices) Renamed read_matrices_without_rowtype().  Handle
7847         only specific case.  Close data_file before exit.
7848         (fill_matrix) New function.
7849         (read_data_lines) Renamed nr_read_data_lines().  Remove debug
7850         printing.  Style fixes.  Message fixes.  Move code into
7851         fill_matrix().
7852         (read_matrices_without_rowtype) Rename
7853         matrix_data_read_without_rowtype().  Fix off-by-one error on
7854         loops.  Allocate nr_data[] memory from arena.
7855         (read_matrices_with_rowtype) Removed.
7856         (read_splits) Renamed nr_read_splits().  Style fixes.
7857         (read_factors) Renamed nr_read_factors().
7858         (dump_cell_content) Comment fixes.  Arguments changed.  Change
7859         debug printing.  All references changed.
7860         (output_data) Renamed nr_output_data().
7861         (static var wr_content) New var.
7862         (struct factor_data) New struct.
7863         (static var wr_data) New var.
7864         (static var wr_current) New var.
7865         (matrix_data_source_destroy_source) Removed.
7866         (read_matrices_with_rowtype) New function.
7867         (matrix_data_read_with_rowtype) New function.
7868         (wr_read_splits) New function.
7869         (compare_factors) New function.
7870         (wr_output_data) New function.
7871         (wr_read_rowtype) New function.
7872         (wr_read_factors) New function.
7873         (wr_read_indeps) New function.
7874         (glob var matrix_data_source) Make destroy_source member NULL as
7875         well.
7876
7877 Fri Jan 23 00:09:08 1998  Ben Pfaff  <blp@gnu.org>
7878
7879         * lexer.c: (syntax_error) Give better error message when at end of
7880         file.
7881
7882         * matrix-data.c: (var content_names[]) Fix PROX spelling.  Change
7883         N_SCALAR to output as plain N.
7884         (mdump_token) Change output format.
7885         (context) Fix message output interaction with spaces in input.
7886         (another_token) New function.
7887         (force_eol) Improved error message.
7888         (static var max_cell_index) New var.
7889         (read_matrices) Init `cells'.  factor_values is now per-cell.
7890         Init max_cell_index.
7891         (read_data_lines) Replace `compare' local with new `compare' arg.
7892         Debugging messages changed.  Only read factors if per_factor.
7893         Propagate error return from read_factors(), force_eol().
7894         Copy N_SCALAR values across the N vector.
7895         (read_matrices_without_rowtype) Don't init `cells'.  Don't need to
7896         check parentheses manually since we now have is_per_factor[].
7897         Call read_data_lines() with new args.  Check for end of data after
7898         looping, using another_token().
7899         (read_factors) Arguments changed.  Use max_cell_index to determine
7900         whether to read or compare factors.  Message fixes.
7901         (dump_cell_content) New function.
7902         (output_data) Completely rewritten because content types were
7903         supported to be nested inside factor values, not vice versa.
7904         
7905 Thu Jan 22 00:26:38 1998  Ben Pfaff  <blp@gnu.org>
7906
7907         * lexer.c: (syntax_error) Support formatted varargs messages.
7908
7909         * matrix-data.c: Turn debugging on by default.
7910         (static content_type[]) New array.
7911         (static content_names[]) New array.
7912         (static rowtype_, varname_) New vars.
7913         (static is_per_factor[]) New array.
7914         (static split_values) Moved declaration.
7915         (static n_continuous, first_continuous) New var.
7916         (cmd_matrix_data) Don't init split_values.  Assign ROWTYPE_ to
7917         rowtype_.  Simplify SPLIT code.  Init is_per_factor[].  Assign
7918         VARNAME_ to varname_.  Initialize first_continuous, n_continuous.
7919         Check for continuous variables.
7920         [DEBUGGING] (debug_print) Remove content_names[].
7921         (mdump_token) New macro.
7922         (mget_token_dump) New function.
7923         (mdump_token) New function.
7924         (context) New function.
7925         (mget_token) Fix messages.
7926         (static var data, split_values, factor_values) New vars.
7927         (read_matrices) Manage split_values, factor_values.
7928         (read_data_lines) New function.
7929         (read_matrices_without_rowtype) Implemented.
7930         (read_splits) Message fixes.  Uses `just_read'.
7931         (read_factors) New function.
7932         (output_data) New function.
7933         (matrix_data_source_destroy_source) Close the file handle.
7934         (glob var matrix_source) Change name from "DATA LIST" to "MATRIX
7935         DATA".
7936
7937         * str.c: (strpadcmp) Removed.
7938
7939         * vfm.c: (dump_splits) Initialize i; fix test for end of splits.
7940
7941 Sun Jan 18 00:30:59 1998  Ben Pfaff  <blp@gnu.org>
7942
7943         * Lots of source files: Add cast to unsigned character to calls to
7944         tolower() and toupper().
7945
7946         * aggregate.c: Set default_dict.splits to NULL.
7947
7948         * command.c: (static variable tab[]) Add MATRIX DATA.
7949
7950         * data-in.c: Add debugging defines.  Formatting fixes.
7951
7952         * expr-opt.c: Formatting fixes.
7953
7954         * lexer.c: (syntax_error) Message fixes.
7955
7956         * matrix-data.c: New enum series.
7957         (static vars fmt, section, diag, explicit_rowtype, signle_split,
7958         split_values, n_factors, factors, cells, pop_n, contents,
7959         n_contents) New vars.
7960         (cmd_matrix_data) Finished implementation.
7961         (compare_variables_by_mxd_vartype) New function.
7962         [DEBUGGING] (debug_print) New function.
7963         (static vars mtoken, mtokstr, mtoklen, mtokval) New vars.
7964         (read_matrices) New function.
7965         (read_matrices_without_rowtype) New function.
7966         (read_matrices_with_rowtype) New function.
7967         (read_splits) New function.
7968         (mget_token) New function.
7969         (force_eol) New function.
7970         [0] (test_tokenizer) New function.
7971         (matrix_data_source_destroy_source) New function.
7972         (glob var matrix_data_source) New var.
7973
7974         * misc.h: Include ieeefp.h if present.
7975
7976         * split-file.h: (cmd_split_file) Changes corresponding to struct
7977         dictionary changes.
7978
7979         * str.h: Fix memmem prototype.
7980
7981         * temporary.c: (save_dictionary, restore_dictionary,
7982         free_dictionary) Changes corresponding to struct dictionary
7983         changes.
7984
7985         * var.h: (MXD_* enums) New enum series.
7986         (struct matrix_data_proc) New struct.
7987         (struct split) Removed.
7988         (struct dictionary) Changed `splits' member from `split *' to
7989         `variable **'.
7990         (macro force_create_variable) New macro.  Replaced lots of
7991         create_variable()/assert() calls with calls to this macro.
7992
7993         * vars-atr.c: (discard_variables) Changed assertion.
7994         [GLOBAL_DEBUGGING] (force_create_variable) New function
7995         called by the macro of the same name.
7996         (clear_variable) Changes to delete splits from the dictionary
7997         corresponding to struct dictionary changes.
7998
7999         * vars-prs.c: (parse_variables) [GLOBAL_DEBUGGING] Check for
8000         corrupted variable `index' values in the dictionary passed in
8001         every time this function is called.
8002
8003         * vfm.c: (dump_splits, SPLIT_FILE_procfunc) Changes corresponding
8004         to struct dictionary changes.
8005
8006 Tue Jan 13 23:45:02 1998  Ben Pfaff  <blp@gnu.org>
8007
8008         * Makefile.am: (pspp_SOURCES) Add matrix-data.c.
8009
8010         * command.c: New includes.
8011         (static array cmd_table[]) Add ERASE, HOST, NEW FILE.
8012         (cmd_erase) New function.
8013         [unix] (shell) New function.
8014         (run_command) New function.
8015         (cmd_host) New function.
8016         (cmd_new_file) New function.
8017
8018         * expr-prs.c: (parse_primary) Message fix.
8019
8020         * inpt-pgm.c: Formatting fix.
8021         (cmd_reread) Implement the FILE subcommand.
8022
8023         * matrix-data.c: New file.
8024
8025         * q2c.c: (dump_header) Change output commenting style.
8026
8027         * weight.c: Comment fix.
8028
8029 Tue Jan 13 00:53:39 1998  Ben Pfaff  <blp@gnu.org>
8030
8031         * aggregate.c: (buf64_10x) Renamed buf64_1xx, all references
8032         changed.
8033         (buf_10x) Renamed buf_1xx, all references changed.
8034         (cmd_aggregate) Implemented cases 010, 011, 110, and 111 (all
8035         cases now implemented).
8036         (create_sysfile) New function.
8037         (agr_11x_func) New function.
8038
8039         * data-in.c: (parse_numeric) Work properly if there's an
8040         explicitly coded decimal point in the data and decimal places are
8041         specified on DATA LIST.  Bug reported by Dr Eberhard W Lisse
8042         <el@linux.lisse.na>.
8043
8044         * get.c: (cmd_get, cmd_save_internal) Allow extraneous slash
8045         before file specification on GET, SAVE, XSAVE.  Bug reported by Dr
8046         Eberhard W Lisse <el@linux.lisse.na>.
8047
8048         * q2c.c: [!HAVE_STRERROR] Include misc/strerror.c, not
8049         strerror.c.  Bug reported by Alexandre Oliva
8050         <oliva@dcc.unicamp.br>.
8051
8052         * sort.c: Include sort.h.  Comment fixes.  A few esthetic fixes.
8053         (static var separate_case_tab) New var.
8054         (cmd_sort_cases) Cancel temporary transformations here.  Free
8055         v_sort before return.
8056         (sort_cases) Run an EXECUTE procedure if SEPARATE is nonzero and
8057         we're reading from a sort stream.  Don't cancel temporary
8058         transformations.  Offload internal sorting to do_internal_sort().
8059         (do_internal_sort) New function.  Handles internal sorting even
8060         when SEPARATE is nonzero.  Doesn't free v_sort.
8061         (do_external_sort) Take new arg SEPARATE.  Only destroy `x' if
8062         it's non-NULL.
8063         (write_initial_runs) Take new arg SEPARATE.  Only destroy the old
8064         sink if SEPARATE is zero.
8065         (read_output_cases) Renamed read_sort_output(), all references
8066         changed.  Now uses separate_case_tab when it exists.
8067         (write_separate) New function.
8068
8069         * vfm.c: (page_to_disk) Destroy memory_source_cases, not
8070         memory_sink_cases.  Don't redundantly call
8071         vfm_source->destroy_source().
8072         (memory_stream_mode) After switching over, set memory_sink_cases
8073         to NULL.
8074
8075 Sat Jan 10 23:35:51 1998  Ben Pfaff  <blp@gnu.org>
8076
8077         * aggregate.c: (struct agr_var) Expand dbl[] array from 2 to 3
8078         elements.
8079         (static var prev_case) New, moved out of aggregate_single_case()
8080         local scope.
8081         (static var buf64_10x, buf_10x) New.
8082         (cmd_aggregate) Initialize prev_case.  Comment fixes.  Implement
8083         the 000, 001, 100, and 101 cases.  Free prev_case.
8084         (parse_aggregate_functions) Disallow scratch variables.
8085         (free_aggregate_functions) Only free agr_dict if non-null.  Use
8086         iter->function to determine numeric/string type, not
8087         iter->src->type.
8088         (aggregate_single_case) Don't manage prev_case.  Initialize
8089         aggregate info after dumping it.
8090         (accumulate_aggregate_info) Fix sum, weighted sum, mean, weighted
8091         mean, stddev, weighted stddev definitions.
8092         (dump_aggregate_info) Implemented.
8093         (initialize_aggregate_info) Renamed from
8094         initialize_aggregate_functions().  Initializes dbl[2].
8095         (agr_00x_trns_proc, agr_00x_end_func, write_case_to_sfm,
8096         agr_10x_trns_proc, agr_10x_trns_free, agr_10x_end_func) New.
8097
8098         * cases.c: (alloc_val) Removed.
8099
8100         * get.c: (cmd_save_internal) Initialize new `dict' member.
8101
8102         * sfm-write.c: (sfm_write_dictionary, write_header,
8103         write_variable, write_value_labels, write_documents) Reorganize,
8104         simplify for new parameter structure.
8105         (write_variable) Only one variable * argument now.
8106
8107         * sfm.h: (struct sfm_write_info) Removed `pri', `sec', and
8108         replaced by new `dict' member.
8109
8110         * temporary.c: (new_dictionary) Initialize n_documents.
8111
8112         * vars-atr.c: (dup_variable) Allocate `value's from dict into
8113         v->fv manually.
8114         (init_variable, replace_variable) Eliminate usage of alloc_val().
8115
8116         * vars-prs.c: (parse_DATA_LIST_vars) Accept PV_NO_SCRATCH option.
8117
8118         * vfm.c: (arrange_compaction) Allow `temporary' value of 2 to
8119         signal that AGGREGATE is to be used for forming final cases.
8120         (close_active_file) Call end_func before stopping lagging.  Cancel
8121         temporary after finishing compaction.
8122         (write_case) Comment fixes.  Cleaned up.
8123         (compact_case) Let AGGREGATE handle compaction when `temporary' is
8124         2.
8125
8126 Sat Jan 10 02:10:47 1998  Ben Pfaff  <blp@gnu.org>
8127
8128         * Makefile.am: (BUILT_SOURCES) Add means.c.
8129         (pspp_SOURCES) Add means.c.
8130         (EXTRA_DIST) Add means.q.
8131
8132         * command.c: (array cmd_table[]) Add MEANS.
8133
8134         * common.h: Esthetic fixes.  Comment fixes.  Test for
8135         MAX_SHORT_STRING greater than 8.
8136         (macros LOWEST, HIGHEST) New.
8137
8138         * data-in.c, data-list.c, recode.c: Comment fixes.
8139
8140         * means.q: New file, base version.
8141
8142         * mis-val.c: (parse_num_or_range, parse_numeric) Replace -DBL_MAX
8143         with LOWEST, DBL_MAX with HIGHEST.
8144
8145         * q2c.c: (dump_vars) Add an enum to array types giving the number
8146         of values for the enum.
8147
8148         * sfm-read.c: (sfm_read_dictionary, read_machine_flt64_info)
8149         Replace second_lowest_value with second_lowest_flt64.
8150
8151         * sfm-write.c: (write_variable, write_rec_7_34) Replace
8152         second_lowest_value with second_lowest_flt64.
8153
8154         * t-test.q: Comment fix.
8155
8156         * temporary.c: (restore_dictionary) Esthetic fix.
8157
8158         * tokens.h: (force_match_id, force_match, force_string, force_int,
8159         force_num, force_id) Replace msg() with syntax_error().
8160
8161         * var.h: (struct means_proc) New.
8162         (struct variable) Add mns member to `p' union.
8163
8164         * vars-prs.c: (parse_variable, parse_dict_variable,
8165         parse_variables, parse_DATA_LIST_vars) Replace msg() with
8166         syntax_error().
8167
8168 Thu Jan  8 22:28:41 1998  Ben Pfaff  <blp@gnu.org>
8169
8170         * Makefile.am: (pspp_SOURCES) Add tab.h.
8171
8172         * Most source files: Added a cast to unsigned char in usages of
8173         the ctype is*() functions.  Replaced `end of command expected'
8174         calls to msg() with calls to syntax_error().
8175
8176         * frequencies.q: (dump_condensed) Fix tab_dim() column reference.
8177
8178         * lexer.c: (hex_val) Removed (was dead code).
8179         (idmatch) Parenthesize function name to avoid macro expansion.
8180
8181         * postscript.c: Comment fixes.
8182         (ps_preopen_driver) Change default font size to 10pt.
8183
8184         * sfm-read.c: (read_variables) Byteswap sv.print, sv.write as
8185         int32s.
8186         (parse_format_spec) Change system-file format spec argument type
8187         to int32.  Parse the format spec with bitwise operators.
8188
8189         * sfmP.h: (struct sysfile_format) Removed.
8190         (struct sysfile_variable) Changed print, write members from
8191         sysfile_format to int32.
8192
8193         * tokens.h: Esthetic fixes.
8194         [__GNUC__] (macro id_match) New macro to hopefully speed up
8195         identifier matching.
8196         (macros match_id, match_tok, match_int) Implemented in
8197         compiler-independent manner; no longer GNU C only.
8198
8199         * vfm.h: Include time.h.
8200
8201 Mon Jan  5 11:06:15 1998  Ben Pfaff  <blp@gnu.org>
8202
8203         * data-list.c: (dump_fixed_table) Change tab_dim().
8204
8205         * dump-sysfile.c: (open_sysfile) Fix mmap() call.
8206
8207         * error.c: Include command.h.
8208
8209         * frequencies.g: Formatting fixes.
8210
8211         * frequencies.q: Add tab_dim() calls.  Make the total cell a
8212         joined cell.
8213
8214         * glob.c: Include command.h.
8215
8216         * sfm-read.c: (struct sfm_fhuser_ext) New members sysmis, highest,
8217         lowest.
8218         (sfm_read_dictionary) Initialize sysmis, highest, lowest.
8219         (sfm_read_machine_flt64_info) Update sysmis, highest, lowest.
8220         (read_variables) Byteswap sv.type; byteswap sv.print, sv.write as
8221         the other elements (is this right?).
8222         (read_variables) Use lowest, highest members.
8223         (parse_format_spec) New arg `vv' for more stringent checking.
8224         (dump_dictionary) Byteswaps nonexplicit data.
8225         (sfm_read_case) Byteswap numeric data.
8226
8227         * som.c: Initialize table_num to 1.
8228         (render_segments) Remember to increment y_index after each table
8229         segment.
8230
8231         * sysfile-info.c: (cmd_sysfile_info) Change tab_dim().  Don't call
8232         avl_count() on a NULL tree.  No title for the second table.
8233         (cmd_display) Handle DISPLAY VECTORS by calling display_vectors().
8234         Handle AS_SCRATCH as AS_NAMES.  Warn if no variables.  Re-enable;
8235         fix call to display_variables().
8236         (display_variables) Default to 4 columns, not 3.  Set up headers.
8237         Column title is Variable, not Name.  Fix index column.
8238         Add joint text.  Add tab_dim().  Handle value labels properly.
8239         Handle DISPLAY LABELS properly.  Draw boxes correctly.
8240         (describe_variable) Value labels don't need titles.  Don't clear
8241         nonexistent index column.
8242         (compare_vectors_by_name) New function.
8243         (display_vectors) New function.
8244
8245         * tab.c: (tab_height) Add assertion.
8246         (tab_null) Add debug code.
8247         (evaluate_dimensions) Add debug code.
8248
8249         * var.h: (struct variable) get_proc data is sometimes used
8250         simultaneously with other per-procedure info, therefore it was
8251         removed from the union.  All references changed.        
8252
8253 Sun Jan  4 18:13:33 1998  Ben Pfaff  <blp@gnu.org>
8254
8255         * ascii.c: (ascii_close_page) Put title on second line of headers
8256         if there is no subtitle.
8257
8258         * command.c: (glob var cur_proc) Move definition here, from
8259         common.c.
8260         (cmd_remark) Emit blank line before remarks.
8261
8262         * command.h: (glob var cur_proc) Move declaration here, from
8263         common.h.
8264
8265         * data-list.c: (dump_fixed_table) Fix messages.
8266         (dump_free_table) Call tab_nat_dim().
8267
8268         * descript.q: (dump_z_table) Modify tab_dim() call.
8269
8270         * frequencies.q: (dump_condensed, dump_statistics) Add tab_dim()
8271         call.
8272         (dump_statistics) Don't output header.
8273
8274         * groff-font.c: Minor format fix.
8275
8276         * html.c: Comment fix.
8277
8278         * list.q: (write_varname) Indent after advancing page.
8279
8280         * output.h: Minor reordering.
8281
8282         * postscript.c: Comment fixes.  Many places, '\n' was replaced by
8283         a reference to eol[].
8284         (struct ps_driver_ext) New member eol[].
8285         (ps_preopen_driver) Initialize eol[].
8286         (ps_postopen_driver) Fix sense of text for text_opt, line_opt
8287         defaults.  Handle headers.  Fix test for minimum page length.
8288         (static var option_tab[]) Add `line-ends'.
8289         (ps_option) Handle line-ends to change eol[].
8290         (postopen) Scale prop_em_width and fixed_width properly.  Set the
8291         prologue title to outp_title if applicable.  Replace the prologue
8292         line ends with eol[].  Call draw_headers() if headers are enabled.
8293         (text_width) New function.
8294         (out_text_plain) New function.
8295         (draw_headers) New function.
8296
8297         * print.c: (dump_table) Call tab_nat_dim().
8298
8299         * som.c: (som_blank_line) Only advance a line if not at the top of
8300         a page.
8301         (som_submit) Move several informational table calls here.
8302         Increment subtable_num if SOMF_NO_TITLE not set.
8303         (output_table) Advance a line if SOMF_NO_SPACING not set.
8304         (render_columns, render_segments, render_simple) Handle spacing
8305         between tables.  Handle table titles.  Remove debug output.
8306
8307         * som.h: (SOMF_*) New enum series.
8308         (struct som_table_class) New member `flags'.
8309
8310         * sysfile-info.c: (cmd_sysfile_info) Calls tab_nat_dim().  No
8311         headers or spacing.
8312         (display_variables) Calls tab_nat_dim().
8313         (describe_variable) Remove restriction on number of value labels.
8314         Make value labels separated by thin lines.
8315
8316         * tab.c: (tab_create) Default `flags' to none.
8317         (tab_float) New arg `w'.  All references changed.
8318         (tab_nat_dim) New function.
8319         (tab_output_text) No title or spacing.
8320         (tab_flags) New function.
8321         (tabi_flags) New function.
8322         (tabi_title) New function.
8323         (strip_height) Removed.
8324         (tabi_render) Skip title when necessary.
8325         (static var tab_tab_class) Add tabi_flags, tabi_title.
8326         (evaluate_dimensions) Disable display of column, row size.
8327         (sum_columns) Add title height to top header.
8328         (render_strip) Moved within file.
8329
8330         * tab.h: (struct tab_table) New member `flags'.
8331
8332         * vfm.c: (dump_splits) Calls tab_nat_dim().  No title.
8333
8334 Sat Jan  3 16:55:44 1998  Ben Pfaff  <blp@gnu.org>
8335
8336         * Most source files: Add `const' attribute in all appropriate
8337         places.
8338         
8339         * sysfile-info.c: (cmd_sysfile_info) Add tab_dim() call, add a
8340         column to the variables table for use by describe_variable().
8341         (cmd_display) Disable for the present.
8342         (display_documents) Don't wrap documents.
8343         (display_variables) Table has four columns now.
8344         (describe_variable) Table has four columns now.  Don't use a
8345         subtable, use joined cells instead.
8346
8347         * tab.c: (tab_create) Don't set `join'.
8348         (tab_realloc) ct array is not made up of a_string's.
8349         Reallocate trh, hrh, h arrays, initialize trh array.  Initialize
8350         cell contents on GLOBAL_DEBUGGING, not DEBUGGING.
8351         (text_format) New function.
8352         (tab_title) Rewritten, uses text_format().
8353         (tab_text) Rewritten, uses text_format().
8354         (tab_joint_text) New function.
8355         (tab_join) Removed.
8356         (static var hit) New variable.
8357         (render_strip) New args r1, r2.  Implement joined cells that fit
8358         on a single page.
8359         (tabi_render) Increment hit.  Pass new args to render_strip().
8360         (evaluate_dimensions) [GLOBAL_DEBUGGING] Check for uninitialized
8361         cells.  For t_naw and t_nah, ignore joined cells and null cells in
8362         calculations.
8363         
8364         * tab.h: (struct tab_join_rect) Removed.
8365         (struct tab_table) Removed `join'.
8366         (TAB_JOIN_MAIN) Removed.
8367         (struct tab_joined_cell) New struct.
8368         (TAT_NOWRAP) New enum.
8369
8370 Fri Jan  2 01:39:58 1998  Ben Pfaff  <blp@gnu.org>
8371
8372         * ascii.c: (ascii_postopen) Replace ASCII_* macros with their
8373         expansions.
8374         (ascii_postopen_driver) Fix initialization of *_spacing so that
8375         the TAL_0 bit doesn't count.
8376
8377         * data-list.c: (dump_fixed_table) Use natural width for Format
8378         column.
8379
8380         * glob.c: (rerange) Removed.
8381         (get_date) Formatting fixes.  Internationalization fix.
8382
8383         * html.c: (html_postopen_driver) Replace HTML_DEFAULT_OUTPUT_FILE
8384         with "pspp.html".
8385
8386         * postscript.c: (ps_postopen_driver) Replace
8387         PS_DEFAULT_OUTPUT_FILE with "pspp.ps".
8388
8389         * som.c: (som_submit) Don't eject page before every table.
8390         (output_table) Fix order of arguments on call to area().
8391         (render_columns) Fix calculation of max_len.
8392         
8393         * tab.c: (tabi_cumulate) Minor change to increase elegance.
8394         (render_strip) New function.
8395         (strip_height) New function.
8396         (tabi_render) Rewrite as calls to render_strip().
8397
8398         * tab.h: (TAT_* enums) Removed TAT_RICH, all references removed.
8399         Renumbered TAT_PRINTF, TAT_TITLE, TAT_FIX to correspond better
8400         with the TAB_* and OUTP_T_* constants.
8401         
8402 Thu Jan  1 11:53:52 1998  Ben Pfaff  <blp@gnu.org>
8403
8404         * Makefile.am: Formatting fixes.
8405
8406         * ascii.c: (ascii_postopen_driver) Initialize *_line_spacing[],
8407         *_line_width[].
8408
8409         * data-list.c: (dump_fixed_table) Add tab_dim() call.
8410
8411         * descript.q: (dump_z_table, display) Add tab_dim() calls.
8412
8413         * dump-sysfile.c: (glob var length) Make type off_t.
8414         (usage) Fix arguments.
8415         (main) Return 0.
8416
8417         * output.h: (OUTP_T_*) Change constants' value to match tab.h.
8418         Now right-justification is the default so many references had to
8419         change.
8420         (struct outp_class) Removed line_width, all references changed.
8421         (OUTP_DEV_*) Add OUTP_DEV_DISABLED.
8422         (struct outp_driver) Add elements horiz_line_width,
8423         vert_line_width, horiz_line_spacing, vert_line_spacing.  Remove
8424         som element.
8425
8426         * postscript.c: (outp_encodings) Formatting fixes.  Fix garbage
8427         collection.
8428         (postopen) Initialize all the informational members of
8429         outp_driver.
8430
8431         * som.c: (som_blank_line) New function, renamed from blank_line(),
8432         all references changed.
8433         (som_submit) Disables drivers whose pages can't be opened.
8434         (render_columns, render_simple, render_segments) Add debug output.
8435         (render_columns) Fix loop range.
8436         (render_simple) Don't try to render the headers, they're taken
8437         care of automatically.  Advance cp_y past the table when done.
8438         (render_segments) Fix loop ranges.
8439
8440         * tab.c: Initialize new members of tab_table.
8441         (tab_vline) Handle trv[]; don't set style for spacing-only lines.
8442         (tab_hline) Handle trh[]; don't set style for spacing-only lines.
8443         (tab_box) Handle trh[], trv[]; don't set style for spacing-only
8444         lines.
8445         (set_expr) Removed.
8446         (tab_dim) New function.
8447         (tab_col_width) Removed.
8448         (tab_row_height) Removed.
8449         (tab_output_text) Call tab_dim().
8450         (tabi_driver) Call evaluate_dimensions(), sum_columns().
8451         (tabi_area) Implemented.
8452         (tabi_cumulate) Implemented.
8453         (tabi_render) Partially implemented, but broken.
8454         (var tab_table_class) Made static.
8455         (evaluate_dimensions) New function.
8456         (sum_columns) New function.
8457
8458         * tab.h: (enum t_*) Now start at t_end.  New: t_ptw, t_nr, t_nc,
8459         t_nah, t_naw, t_neg, t_xch, t_dup, t_lbl, t_jnz, t_sac, t_sar,
8460         t_scr, t_srr, t_sentinel.  Removed: t_nat.
8461         (struct tab_table) New: wl, wr, ht, hb, trh, hrh, trv, wrv, dim,
8462         max_stack_height, w, h.  Removed: ce, re.
8463         (macro blank_line) Removed.
8464         (glob var zero_length) Removed.
8465
8466 Fri Dec 26 15:44:31 1997  Ben Pfaff  <blp@gnu.org>
8467
8468         * Most source files: include some of the new include files broken
8469         out of var.h.
8470         
8471         * Makefile.am: (pspp_SOURCES) Add all the new source files to the
8472         list.
8473
8474         * aggregate.c: (glob var outfile) Make static.
8475
8476         * command.c: (glob var pgm_state) Move here.
8477
8478         * common.c: (glob vars endian, second_lowest_value, pgmname,
8479         finished, curdate, cur_proc, start_interactive, history_file) Move
8480         here.
8481
8482         * descript.q: (structs dsc_z_score, descriptives_trns) Move here.
8483
8484         * file-handle.q: (glob vars files, inline_file) Move here.
8485
8486         * glob.c: Lost lots of glob vars, detailed in individual file
8487         entries.
8488         (init_glob) set_printer, set_screen were obsolete, deleted.
8489         set_cprompt has fewer spaces because pspp has fewer letters than
8490         fiasco.
8491
8492         * inpt-pgm.c: (glob vars inp_init, inp_init_size) Move here.
8493         (inp_nval) Made static.
8494
8495         * lexer.c: (glob vars token, tokval, tokstr, tokstr_size,
8496         tokstr_len, toklongstr, tokint) Move here.
8497
8498         * misc.c: Lost several vars and functions.
8499
8500         * set.q: (all the set_* variables) Move here.
8501
8502         * str.c: (strmaxcpy, strbarepadcpy, strbarepadlencpy, strpadcpy,
8503         blpstrset, strpadcmp, memrev, memrmem, cmp_str) Move here from
8504         misc.c.
8505
8506         * tab.c: (set_expr, tab_col_width, tab_row_height) New functions.
8507
8508         * tab.h: (enum series t_*) New enums.
8509         (struct tab_table) Use arena struct tag.  New members ce, re.
8510
8511         * tokens.h: Comment fixes.
8512
8513         * var.h: Move lots of enums and variables and functions and
8514         structures to other files.  Use and declare a lot more union and
8515         struct tags.  Comment fixes.  
8516
8517         * vector.c: (glob vars vec, nvec) Move here.
8518
8519         * vfm.c: (glob vars reinit_sysmis, reinit_blanks, init_zero,
8520         init_blanks, last_vfm_invocation) Move here.
8521
8522         * cases.h: New file.
8523         (struct long_vec) Move here.
8524         (vec_init, vec_clear, vec_insert, vec_delete, devector, envector)
8525         Move here.
8526
8527         * command.h: New file.
8528         (STATE_* enums) Move here.
8529         (glob var pgm_state) Move here.
8530
8531         * format.c: New file.
8532         (glob var formats) Move here.
8533         (parse_format_specifier_name, fmt_to_string,
8534         check_input_specifier, check_output_specifier,
8535         check_string_specifier, convert_fmt_ItoO, parse_format_specifier)
8536         Move here.
8537
8538         * format.h: New file.  Move functions now in format.c here.
8539         (FMT_* enums) Move here.
8540         (struct fmt_desc) Move here.
8541         (FCAT_* enums) Move here.
8542         (struct fmt_spec) Move here.
8543         (glob vars formats, fmt_parse_ignore_error) Move here.
8544
8545         * inpt-pgm.h: New file.
8546         (INP_* enums) Move here, make #defines into enums.
8547         (glob vars inp_init, inp_init_size) Move here.
8548
8549         * sort.h: New file.
8550         (glob vars v_sort, nv_sort) Move here.
8551         (sort_cases, read_sort_output) Move here.
8552
8553         * vector.h: New file.
8554         (struct vector) Move here, add struct tag.
8555         (glob vars vec, nvec) Move here.
8556         (find_vector) Move here.
8557
8558         * New file.
8559         (glob vars last_vfm_invocation, temp_case, reinit_sysmis,
8560         reinit_blanks, init_zero, init_blanks) Move here.
8561         (struct case_stream) Move here.
8562         (glob vars vfm_source, vfm_sink, vfm_memory_stream,
8563         vfm_disk_stream, sort_stream, data_list_source,
8564         input_program_source, file_type_source, get_source, n_lag) Move
8565         here.
8566         (procedure, write_case, lagged_case, compact_case, page_to_disk)
8567         Move here.
8568                 
8569 Wed Dec 24 22:40:42 1997  Ben Pfaff  <blp@gnu.org>
8570
8571         * Makefile.am: (pspp_SOURCES) Added html.c, som.c, som.h.
8572         (LDADD) Add libdcdflib.
8573
8574         * ascii.c: Comment and formatting fixes.  Almost every external
8575         function had an assert added, checking driver_open and page_open.
8576         (ascii_init_driver) Broken into ascii_preopen_driver,
8577         ascii_postopen_driver, ascii_close_driver.  Manages driver_open.
8578         (ascii_open_page) Sets page_open.
8579         (ascii_close_page) Clears page_open.
8580
8581         * html.c: Comment and formatting fixes.  Almost every external
8582         function had an assert added, checking driver_open and page_open.
8583         (html_init_driver) Broken into html_preopen_driver,
8584         html_postopen_driver, html_close_driver.  Manages driver_open.
8585         (html_open_page) Sets page_open.
8586         (html_close_page) Clears page_open.
8587         (html_submit) Disabled.
8588
8589         * lexer.c: (parse_string) Remove debugging printf.
8590
8591         * list.q: (determine_layout) Open a page if one is not yet open.
8592
8593         * output.c: Comment fixes.
8594         (add_class) Set the class member of the new list element.
8595         (parse_options) Don't handle device type.
8596         (colon_tokenize) New function.
8597         (configure_driver) New four-field format with a field for device
8598         type.  Now initialize driver_open, page_open, next, and prev
8599         fields.  Use new colon_tokenize() function.  Don't do a memory
8600         copy to replace a driver, it doesn't work; instead delete the old
8601         driver and insert a new one.
8602         (destroy_driver) Don't call som_destroy_driver().  Close the page
8603         if it's open.  Find the class in the list of classes and decrement
8604         that reference count.  Remove the driver from the global driver
8605         list.
8606         (outp_iterate_enabled_drivers) Renamed outp_drivers().  All
8607         references changed.  Rewritten.  Don't return a driver that's not
8608         enabled.
8609         (outp_eject_page) All references to som_internal_eject_page()
8610         changed to use this.  Sets cp_x to 0 as well as cp_y.
8611
8612         * output.h: (OUTP_I_* enums) Removed.
8613         (struct som_submission_form) Removed.
8614         (struct outp_class) init_driver broken into preopen_driver,
8615         postopen_driver, and close_driver.  submit changed to take a
8616         som_table argument.
8617
8618         * postscript.c: Comment and formatting fixes.  Almost every
8619         external function had an assert added, checking driver_open and
8620         page_open.
8621         (ps_init_driver) Broken into ps_preopen_driver,
8622         ps_postopen_driver, ps_close_driver.  Manages driver_open.
8623         (ps_open_page) Sets page_open.
8624         (ps_close_page) Clears page_open.
8625
8626         * som.c: New file, base implementation.
8627         
8628         * som.h: (struct som_table) Add struct tag.
8629         (enum SOM_COL_ACROSS) Removed.
8630         (SOM_ROWS, SOM_COLUMNS) New enums.
8631         (struct som_table_class) Add member `cumulate'.  Remove `segment';
8632         change `render' arguments.
8633         (struct som_point, struct som_rect) Removed.
8634         (som_submit_table) Fixed typo, should have been som_submit.
8635
8636         * sysfile-info: (describe_variable) Don't try to insert a
8637         subtable; just destroy it for now.
8638
8639         * t-test.q: Include dcdflib/cdflib.h instead of cdflib.h.  Fix
8640         references to value labels.
8641
8642         * tab.c: (tab_destroy) New function.
8643         (tab_columns) Change argument.
8644         [0] (tab_submit) Remove dead code.
8645         (tab_title) Allocate string from the table's arena.
8646         (tab_output_text) Only free the buffer if we allocated it.
8647         (tab_submit) New function.
8648         (static vars t, d) New static vars.
8649         (tabi_table, tabi_driver, tabi_count, tabi_area, tabi_columns,
8650         tabi_headers, tabi_cumulate, tabi_render) New functions.
8651         (glob var tab_table_class) New global var.
8652
8653         * tab.h: (struct tab_join_rect) Don't use a som_rect; directly
8654         encapsulate the rectangle.  All references changed.
8655         
8656 Sun Dec 21 16:18:58 1997  Ben Pfaff  <blp@gnu.org>
8657
8658         * All header files updated to use struct tags in addition to
8659         typedefs for all structures.  Don't use word `struct' in struct
8660         tags.
8661         
8662         * Makefile.am: (pspp_SOURCES) Remove html.c.
8663         (INCLUDES) Replace the lib/* includes with a single lib/ include;
8664         all references updated.
8665
8666         * command.c: (parse_cmd) Remove call to som_check_workspace.
8667         (output_line) Update to new som.
8668
8669         * data-in.c: (parse_numeric) A single dot is not an error; it is
8670         the system-missing value.
8671
8672         * data-list.c: (dump_fixed_table, dump_free_table) Update to new
8673         som.
8674
8675         * data-out.c: Added `const' as appropriate to many prototypes.
8676         (convert_E, convert_F, convert_CCx) Take double argument instead
8677         of value * argument.
8678         (convert_format_to_string) Call changed functions appropriately.
8679         Instead of modifying the caller's value for FCAT_SHIFT_DECIMAL,
8680         make a local copy of the value.
8681
8682         * descript.q: Remove custom_variables() prototype now provided by
8683         q2c.  
8684         (custom_variables) Don't increment sbc_variables, the caller does
8685         this.
8686         (dump_z_table, display) Update to new som.
8687
8688         * error.c: (vmsg) Add const to prototype.  Remove code to handle
8689         `too many errors' condition.
8690         (check_error_count) New function.
8691         (msg) Add const to prototype.
8692
8693         * filename.c: (open_file) Rewrite for elegance.
8694
8695         * frequencies.q: Remove custom_*() prototypes now provided by q2c.
8696         (dump_full, dump_condensed, dump_statistics) Update for new som.
8697
8698         * list.q: Don't include somP.h.  Change all references to
8699         som_driver_ext to refer to the new members of som_driver.  Change
8700         som_internal_eject_page() references to outp_eject_page().
8701
8702         * main.c: (parse) Rewrite for elegance.  Add call to
8703         check_error_count().
8704
8705         * output.c: (add_class, outp_list_classes, outp_configure_driver)
8706         Rewrite or revise for new outp_driver_class_list structure.
8707         (outp_iterate_enabled_drivers) Fix comparison between disabled
8708         devices and current device type.
8709         (outp_eject_page) New function.
8710
8711         * output.h: Comment fixes.
8712         (struct outp_driver) New members driver_open, page_open, cp_x,
8713         cp_y, font_height, prop_em_width, fixed_width.  Deleted members
8714         ref_count, next.
8715         (struct outp_driver_class_list) New struct.
8716         (outp_class_list) Changed to type outp_driver_class_list; all
8717         references updated.
8718
8719         * print.c: (dump_table, print_trns_proc) Updated for new som.
8720
8721         * q2c.c: (dump_vars) Simplify array subcommand code.  Declare
8722         prototypes for custom subcommands.
8723         (dump_subcommand) Always include the `else'.
8724         (dump_parser) Fix comments in output code.
8725
8726         * set.q: Reordered functions.
8727
8728         * som-frnt.c, som-high.c, som-low.c, somP.h: Removed.
8729         
8730         * som.h: Rewritten from scratch.
8731
8732         * str.h: Remove dead code.
8733
8734         * tab.c, tab.h: New files, base implementation.
8735
8736         * sysfile-info.c: (cmd_sysfile_info, describe_variable) Update to
8737         new som.
8738
8739         * t-test.q: New code from John Williams
8740         <johnr.williams@stonebow.otago.ac.nz>.  Include math.h, cdflib.h.
8741         Many many new static vars and defines.
8742         (precalc, postcalc, g_postcalc, z_postcalc, t_pairs, t_groups,
8743         groups_calc, pairs_calc, z_dev_calc, z_calc) New functions.
8744         (struct value_list) New struct.
8745         (variance, covariance, pooled_variance, oneway, pearson_r, f_sig,
8746         t_crt, t_sig, print_t_groups) New functions.
8747         (cmd_t_test) Implemented.
8748
8749         * temporary.c: (cancel_temporary) Only free the temp_dict if it's
8750         non-NULL.
8751
8752         * vfm.c: (dump_splits) Update to new som.
8753
8754 Thu Dec  4 23:02:22 1997  Ben Pfaff  <blp@gnu.org>
8755
8756         * Makefile.am: (fiasco_SOURCES) Add html.c.
8757
8758         * aggregate.c: Base source.
8759
8760         * ascii.c: (postopen, preclose) Reformat.
8761
8762         * data-out.c, expr-evl.c: Comment fixes.
8763         
8764         * filename.c: (open_file) When opening a file for writing, use
8765         line buffering instead of full buffering for better interactive
8766         performance.  Suggested by Valerio Aimale
8767         <valerio@svpop.com.dist.unige.it>.  Also, recognize special file
8768         names `stdin', `stdout', `stderr'.
8769
8770         * groff-font.c: Comment fixes.
8771
8772         * html.c: New file; base version.
8773
8774         * list.q: (write_all_headers, clean_up, determine_layout,
8775         list_cases) Ignore `special' devices for now.  Needs to be fixed
8776         later.
8777
8778         * output.c: (outp_init) Add html driver to list; reverse list
8779         order.
8780
8781         * output.h: (struct outp_class_struct) New members `special',
8782         `submit'; comment fixes.  All references changed.
8783
8784         * postscript.c: (ps_init_driver) Make defaults for text_opt,
8785         line_opt depend on whether the OUTP_DEV_SCREEN bit is set on the
8786         device.
8787         (postopen) Comment fix.
8788         (preclose) Comment fixes, formatting fixes.  Change x->file.file
8789         references to more proper f->file.
8790
8791         * som-high.c: (som_submit_table) Special classes use their own
8792         renderers.
8793
8794         * som.h: Comment fixes.
8795
8796         * temporary.c: (new_dictionary) Don't try to xstrdup() a NULL
8797         string.
8798         
8799 Tue Dec  2 14:36:07 1997  Ben Pfaff  <blp@gnu.org>
8800
8801         * Makefile.am: (fiasco_SOURCES) Add aggregate.c back in.
8802
8803         * aggregate.c: Still working on this.
8804
8805         * command.c: (cmd_table[]) Add AGGREGATE back in.
8806         (split_words) Make '-' a legal word separator as well as ' '.
8807
8808         * main.c: Comment fixes.
8809
8810         * q2c.c: (dump_parser) Don't require the procedure's full name to
8811         be present, in the generated source.
8812
8813         * t-test.q: Change name to `t-test' from `t test'.  Let PAIRS be
8814         multiply specified and let it be default; let MISSING, CRITERIA,
8815         FORMAT be multiply specified.
8816         (cmd_t_test) Parse command name.  [DEBUGGING] Call debug_print().
8817         (custom_groups) Fix defaults.
8818         (custom_pairs) Check whether this is a PAIRS subcommand before
8819         attempting to parse.  Better garbage collection.  Proper storage
8820         allocation.
8821         [DEBUGGING] (debug_print) New function.
8822
8823         * temporary.c: Comment fixes.
8824         (copy_variable) Don't copy variable name and index.
8825         (save_dictionary) Copy variable name and index by hand.
8826
8827         * vars-atr.c: Comment fixes.
8828         (create_variable) New dictionary argument.  All references
8829         changed.
8830         (common_init_stuff) New dictionary argument.  All references
8831         changed.
8832         (init_variable) New dictionary argument.  All references changed.
8833         (dup_variable) New function.
8834
8835         * vars-prs.c: (parse_variables) If there are any errors, we always
8836         return 0.  Previously, it was possible for some types of errors to
8837         be ignored.
8838         
8839 Sat Nov 22 01:20:59 1997  Ben Pfaff  <blp@gnu.org>
8840
8841         * Makefile.am: (fiasco_SOURCES) For 0.1.5 release, remove
8842         aggregate.c.
8843
8844         * command.c: (cmd_table[]) Comment out AGGREGATE; add T TEST.
8845
8846         * list.q, t-test.q: Remove ALL option from VARLIST declaration in
8847         grammar rules.
8848
8849         * q2c.c: Comment fixes.
8850         (SBC_* enums) Remove SBC_VARLIST_ALL; all references removed.
8851         
8852         * t-test.q: (cmd_list) Rename cmd_t_test.
8853
8854         * temporary.c: (new_dictionary) Don't declare as static.
8855         
8856 Fri Nov 21 00:03:06 1997  Ben Pfaff  <blp@gnu.org>
8857
8858         * aggregate.c: Changes, still not finished.
8859
8860         * file-handle.q, frequencies.q, list.q, set.q: Comment fixes.
8861
8862         * q2c.c: Comment fixes.  Now its output is internationalized.
8863         (get_token) Fix parsing of escapes within literal strings.
8864         (main) Fix bad #line directives in output.
8865
8866         * t-test.q: Base implementation.
8867
8868         * temporary.c: (new_dictionary) New function.
8869         (restore_dictionary) [__CHECKER__] Change fill character to *
8870         (from @).
8871         
8872 Sun Nov 16 01:29:57 1997  Ben Pfaff  <blp@gnu.org>
8873
8874         * Makefile.am: (BUILT_SOURCES, fiasco_SOURCES) Add t-test.c
8875
8876         * aggregate.c: Changes, still not finished.
8877
8878         * descript.q, list.q: Comment fixes.
8879
8880         * q2c.c: Almost completely rewritten.
8881
8882         * t-test.q: New file, not complete.
8883
8884 Fri Nov 14 00:14:48 1997  Ben Pfaff  <blp@gnu.org>
8885
8886         * aggregate.c: Changes, still not finished.
8887
8888         * sort.c: (sort_cases) Call cancel_temporary() instead of doing it
8889         by hand.
8890
8891         * temporary.c: (cancel_temporary) New function.
8892
8893         * vars-atr.c: (discard_variables) Call cancel_temporary() instead
8894         of doing it by hand.
8895
8896         * vfm.c: (close_active_file) After restoring a TEMPORARY
8897         dictionary, set temp_dict to NULL.  Cancel TEMPORARY through
8898         cancel_temporary().
8899         (SPLIT_FILE_procfunc) Comment fix.
8900
8901 Tue Oct 28 16:08:45 1997  Ben Pfaff  <blp@gnu.org>
8902
8903         * Makefile.am: (fiasco_SOURCES) Add aggregate.c.
8904
8905         * aggregate.c: New file, not finished yet.
8906
8907         * command.c: (cmd_table) Add AGGREGATE.
8908
8909         * common.h: (pgm_state) Move declaration to var.h.
8910
8911         * lexer.c: (bin_value_func, oct_value_func, hex_value_func) i18n
8912         fixes.
8913         (parse_string) Message fix.
8914
8915         * recode.c: Comment fix.
8916
8917         * sfm-read.c: (read_variables) Code esthetic fixes.
8918         (write_header) Default date is `Jan', not `JAN'.
8919
8920         * sfmP.h: (bswap_int32) [!__linux__] Fix off-by-one errors.
8921
8922         * sort.c: (cmd_sort_cases) Farm the work out to new function
8923         parse_sort_variables().
8924         (parse_sort_variables) New function.
8925         (sort_cases) New function.  Cancels temporary transformations,
8926         which sorting didn't do previously.
8927         (cmd_sort_cases) Better garbage collection on error.  Uses
8928         do_external_sort().
8929         (write_initial_runs, merge_once) Improved code esthetics.
8930         (sort_stream_read) Reduced to one call to read_output_cases().
8931         (read_output_cases) New function.
8932
8933         * var-labs.c: (cmd_variable_labels) Re-enabled truncation of
8934         variable labels to 120 characters.
8935
8936         * var.h: Comment fixes.
8937         (glob var pgm_state) From common.h.
8938
8939         * vars-atr.c: (discard_variables) Set pgm_state to STATE_INIT.
8940
8941         * vars-prs.c: (parse_DATA_LIST_vars) Support PV_SINGLE in
8942         options.  Set *names to NULL on error.
8943
8944         * vfm.c: (memory_stream_init) Assert compaction_nval != 0.
8945
8946 Thu Oct  9 09:59:49 1997  Ben Pfaff  <blp@gnu.org>
8947
8948         * sfm-write.c, vfm.c: [HAVE_UNISTD] #include <unistd.h>, needed by
8949         SunOS4.  From Alexandre Oliva <oliva@dcc.unicamp.br>.
8950
8951 Wed Oct  8 18:55:24 1997  Ben Pfaff  <blp@gnu.org>
8952
8953         * vfm.c: (page_to_disk) Added missing local variables.
8954
8955 Tue Oct  7 20:23:17 1997  Ben Pfaff  <blp@gnu.org>
8956
8957         * get.c: Comment fix.
8958
8959         * sort.c: (cmd_sort_cases) Attempt to perform internal sort if the
8960         source is anything other than a disk stream, not just if it's in a
8961         memory stream.  Call page_to_disk() before external sort.
8962         (allocate_cases) Message fix.
8963
8964         * vfm.c: (prepare_for_writing) Warn user when paging workspace to
8965         disk.
8966         (page_to_disk) New function.
8967
8968 Sun Oct  5 15:56:14 1997  Ben Pfaff  <blp@gnu.org>
8969
8970         * Makefile.am: (INCLUDES) Include .. instead of $(top_srcdir).
8971
8972         * common.h: (macro strerror) Remove.  From Alexandre Oliva
8973         <oliva@dcc.unicamp.br>.
8974
8975         * get.c: (dict_delete_run) The number of variables to delete is
8976         not necessarily the number of variables that need to be shifted
8977         up.
8978         (trim_dictionary) Don't set *options to 0.  Fix bug that caused
8979         too many variables to be deleted.
8980
8981         * postscript.c: Comment fix.
8982
8983         * q2c.c: Include strerror.c.  From Alexandre Oliva
8984         <oliva@dcc.unicamp.br>.
8985
8986         * set.q: #undef ON and OFF.  From Alexandre Oliva
8987         <oliva@dcc.unicamp.br>.
8988
8989         * sfm-read.c: (sfm_read_dictionary) Don't set the file class too
8990         early, otherwise errors cause a bad free().
8991
8992         * str.h: (macro nvsprintf) s/FORMATS/FORMAT/ typo.  From Alexandre
8993         Oliva <oliva@dcc.unicamp.br>.
8994
8995         * temporary.c: (save_dictionary) Don't allocate memory if
8996         n_documents is 0.
8997
8998         * vfm.c: (memory_stream_write) Message fix.
8999
9000 Sat Oct  4 16:20:43 1997  Ben Pfaff  <blp@gnu.org>
9001
9002         * command.c: (static var cmd_table[]) Define REPEATING DATA
9003         command.
9004
9005         * common.h: Added support for broken systems that are missing
9006         EXIT_SUCCESS, EXIT_FAILURE, RAND_MAX, and/or strerror().
9007
9008         * Many source files: Replace syntax error messages via msg() with
9009         call to syntax_error().
9010
9011         * data-list.c: (dump_fixed_table) Add support for dumping table
9012         for REPEATING DATA as well as DATA LIST FIXED.
9013         (cmd_repeating_data) Allows and requires `/' between subcommands.
9014         Does proper thing with allowing rpd.starts_end to stay 0.  Allows
9015         CONTINUED specifications to be omitted.  Forces CONTINUED to be
9016         specified if ID is.  Calculates starts_end, cont_end from logical
9017         record length as reported by fhp.  Calls dump_fixed_table() if
9018         requested.  Fixed length of record copied by memcpy.
9019         (parse_num_or_var) Sets `num' to 0, not NOT_INT, for variables.
9020         Message fix.
9021         (realize_value) Returns sensible value for out-of-range variable
9022         values.
9023         (rpd_parse_record) New argument `ofs'.  Fixed confusion between
9024         length of occurrences and length of line.  Added warning for
9025         fields that exceed the line length.  Fixed infinite loop.
9026         (read_one_set_of_repetitions) Numerous minor changes for more
9027         complete SPSS compliance.  Message fixes.
9028
9029         * dfm.c: (dfm_close) If the file being closed is the inline file,
9030         read all the remaining data before closing it.
9031         (dfm_get_record) Don't close the file on lossage, as either it
9032         has been closed already or it doesn't belong to us.
9033
9034         * error.c: (puts_stdout) New function.
9035         (vmsg) Use puts_stdout instead of puts.
9036
9037         * file-handle.q: (fh_record_width) New function.
9038
9039         * inpt-pgm.c: (init_case) Fixed buffer overrun when inp_nval % 4
9040         == 0.
9041         (clear_case) Ditto.
9042         (input_program_source_read) Made an old kluge an approved method.
9043
9044         * lexer.c: (syntax_error) New function.
9045
9046         * misc.c: [BROKEN_RAND] (ansi_rand, ansi_srand; static var next)
9047         New.
9048
9049         * output.c: (oupt_get_paper_size) Message fix.
9050
9051         * q2c.c: Numerous fixes to formatting of generated code made to
9052         conform to GNU coding standards.  Uses syntax_error() in generated
9053         code.  Other miscellaneous generated message fixes.  Added support
9054         for broken systems that are missing EXIT_SUCCESS, EXIT_FAILURE,
9055         RAND_MAX, and/or strerror().
9056
9057 Sat Oct  4 02:09:56 1997  Ben Pfaff  <blp@gnu.org>
9058
9059         * data-in.c: Comment fixes.
9060
9061         * data-list.c: (struct repeating_data_trns) New member `id_spec'.
9062         (find_variable_input_spec) New function.
9063         (cmd_repeating_data) Initializes id_spec.
9064         (rpd_parse_record) Implemented.
9065         (read_one_set_of_repetitions) Returns -3 by default in order to
9066         kluge out some potential bugs.
9067
9068         * data-out.c: Comment fixes.
9069
9070         * file-type.c: (internal_cmd_record_type) Message fix.
9071
9072         * inpt-pgm.c: (input_program_source_read) Special temporary kluge
9073         for handling -3 return value.
9074
9075 Sat Sep 20 23:58:15 1997  Ben Pfaff  <blp@gnu.org>
9076
9077         * data-list.c: Comment fixes.
9078         (struct dls_var_spec) Reordered members.
9079         (read_from_data_list_fixed) Restructured.
9080         (struct repeating_data_trns) Reordered members.  Renamed `starts'
9081         as `starts_beg', `ends' as `starts_end'.
9082         (cmd_repeating_data) Calculates length of repeated data if
9083         necessary and possible.
9084         (parse_num_or_var) Don't allow string variables.
9085         (realize_value) New function.
9086         (rpd_msg) New function.
9087         (rpd_parse_record) New function.  Currently stubbed out.
9088         (read_one_set_of_repetitions) Implemented.
9089
9090         * inpt-pgm.c: (input_program_source_read) Comment fix.
9091
9092 Thu Sep 18 21:34:57 1997  Ben Pfaff  <blp@gnu.org>
9093
9094         * command.c: (cmd_end_repeat_p) Removed.
9095         (init_cmd_parser) Doesn't set cmd_end_repeat_p.
9096         (parse_cmd_name) Removed.
9097
9098         * data-list.c: Comment fixes.
9099         (data_list_pgm) Removed `eof' member.
9100         (static var first) New var.
9101         (cmd_data_list) Sets `first'.  Ensures that DATA LIST uses the
9102         FILE TYPE file inside FILE TYPE structures.
9103         (append_var_spec) Appends to *first, not dls.spec.
9104         (parse_fixed) Message fixes.
9105         (struct rpd_num_or_var) New.
9106         (struct repeating_data_trns) New.
9107         (static var rpd) New.
9108         (cmd_repeating_data) New function.
9109         (parse_num_or_var) New function.
9110         (parse_repeating_data) New function.
9111         (read_one_set_of_repetitions) New function.
9112
9113         * file-type.c: (cmd_file_type) Message fixes.  Always
9114         default_handle to FILE TYPE file handle.
9115         (internal_cmd_record_type) Message fixes.
9116
9117 Wed Aug 20 14:22:03 1997  Ben Pfaff  <blp@gnu.org>
9118
9119         * repeat.c: Comment fix.  Disable debugging.
9120
9121         * temporary.c: (restore_dictionary) Sets splits to NULL and
9122         n_splits to 0 before destroying the variables because now doing
9123         this tries to remove split variables.
9124
9125         * vars-atr.c: (discard_variables) Asserts that n_splits is 0 after
9126         destroying the dictionary.
9127         (clear_variable) Removes a variable from splits after destroying
9128         it.
9129
9130 Mon Aug 18 18:06:55 1997  Ben Pfaff  <blp@gnu.org>
9131
9132         * cmdline.c: (set_compat) Removed.
9133         (pick_compat) Removed.
9134         (parse_command_line) Removed -c option.
9135         (pre_syntax_message) Removed -c option.
9136         (usage) Remove compatibility code.
9137
9138         * common.h: (macros VER_PC, VER_WND, VER_X) Removed.
9139         (glob var compat) Removed.
9140
9141         * compute.c: (type_check) Fixed messages about type mismatches.
9142
9143         * data-list.c: (cmd_data_list) Removed compatibility code.
9144         (fixed_parse_compatible) Calls convert_negative_to_dash().
9145         Fixed bug where it only set the variable in fx.spec if it created
9146         the variable itself.
9147         (dump_fmt_list) Spelling fix.
9148         (cut_field) Removed compatibility code.
9149
9150         * dfm.c: (cmd_begin_data) Don't require a command terminator on
9151         BEGIN DATA command.
9152
9153         * expr-evl.c: (evaluate_expression) Implement LAG.
9154
9155         * expr-prs.c: (parse_add) Calls convert_negative_to_dash().
9156         (parse_neg) Calls convert_negative_to_dash().
9157         (LAG_func) Increases n_lag to the lag requested.  Fixed assignment
9158         bug.
9159
9160         * expr.h: (struct expression_struct) Removed member max_lag.
9161
9162         * file-type.c: (parse_col_spec) Calls convert_negative_to_dash().
9163         (internal_cmd_record_type) Removed special handling to produce
9164         negative numbers from dash tokens.
9165
9166         * getline.c: (static var DO_REPEAT_level) New var.
9167         (getl_add_DO_REPEAT_file) Increments DO_REPEAT_level.
9168         (handle_line_buffer) Copies the line into getl_buf; doesn't call
9169         copy_with_DO_REPEAT_substitutions().
9170         (getl_read_line) Maintains value of getl_mode.  Calls
9171         perform_DO_REPEAT_substitutions() whenever DO_REPEAT_level is
9172         positive.
9173         (getl_close_file) Decrements DO_REPEAT_level when appropriate.
9174
9175         * getline.h: (getl_mode) New glob var.
9176
9177         * glob.c: Comment fixes.
9178         (init_glob) Restructured.  Sets set_seed.
9179         (init_compat_dependent) Removed.  All references removed.
9180         (get_date) Format changed from MM/DD/YY to DD MMM YYYY.
9181         (__htonl, __htons) Removed.  (What were these for?)
9182
9183         * lexer.c: (static var tbl) Dash set to class CNUM.
9184         (make_hexit) New function from data-out.c.
9185         (get_token_representation) Rewritten.
9186         (convert_negative_to_dash) New function.
9187         (lex_init_compat_dependent) Removed.
9188         (yylex) A dash is parsed as part of a number if it is followed by
9189         a digit.  The ASCII representation of a number is copied to
9190         tokstr.  String parsing farmed out to parse_string().  Comment
9191         fixes.
9192         (bin_value_func, oct_value_func, hex_value_func, parse_string) New
9193         functions.
9194         (preprocess_line) Line processing depends on interactive/batch
9195         mode, not on compatibility mode.  Removed PC+ compatibility code.
9196
9197         * loop.c: (loop_3_trns_proc) Comment fix.
9198
9199         * main.c: Remove dead code.
9200         (main) Remove call to init_compat_dependent().
9201
9202         * misc.c: (convert_fmt_ItoO) Make E format conversion more
9203         conformant.
9204
9205         * print.c: (parse_string_argument) Calls
9206         convert_negative_to_dash().
9207         (fixed_parse_compatible) Calls convert_negative_to_dash().
9208
9209         * repeat.c: (RPT_* defines) Removed.
9210         (struct rpt_numeric) Removed.
9211         (struct repeat_entry) New member type, changed `replacement' from
9212         char * to char **.
9213         (clean_up) Deallocation adapted to new repeat_entry.
9214         (internal_cmd_do_repeat) `type' defaults to 0.  Remove lookahead()
9215         usage.  Creates vars for `type' of 1.
9216         (parse_ids) Sets type of 1.  Adapted to new repeat_entry.
9217         (store_numeric) Rewritten, new interface.
9218         (parse_numbers) Rewritten.
9219         (parse_strings) Rewritten.
9220         (find_DO_REPEAT_substitution) New function.
9221         (perform_DO_REPEAT_substitutions) New function.
9222         (copy_with_DO_REPEAT_substitutions) Removed.
9223         (debug_print) Rewritten.
9224
9225         * set.q: Comment fix.
9226         (custom_results) Removed compatibility code.
9227         (internal_cmd_set) Removed SET EMULATION subcommand.  Removed
9228         compatibility code.
9229
9230         * sysfile-info.c: (cmd_display) Removed compatibility code.
9231
9232         * tokens.h: Comment fixes.
9233         (token types enum) Removed `toktype' typedef name for this int
9234         type.  Removed SUBST.  Restructured.
9235
9236         * vars-atr.c: (discard_variables) Sets n_lag to 0.
9237
9238         * vars-prs.c: Comment fix.
9239
9240         * vfm.c: Comment fixes.
9241         (glob var n_lag) New var.
9242         (static vars lag_count, lag_head, lag_queue) New vars.
9243         (procedure) Removed argument nlag.
9244         (setup_lag) New function.
9245         (close_active_file) Discards lagging state.
9246         (lag_case) New function.
9247         (lagged_case) New function.
9248         (write_case) Lags a case if lagging.
9249
9250         * weight.c: (cmd_weight) Removed compatibility code.
9251         
9252 Sun Aug 17 22:34:40 1997  Ben Pfaff  <blp@gnu.org>
9253
9254         * getline.h: (struct getl_script) New members loop_index, macros.
9255
9256         * getline.c: (getl_add_file) Sets first_line field to NULL.
9257         (getl_add_DO_REPEAT_file) New function.
9258         (handle_line_buffer) When the current line's length is negative,
9259         set the filename and line number.  Increment line number after
9260         reading line.  Pass the line to
9261         copy_with_DO_REPEAT_substitutions() for processing.
9262         (getl_close_file) Free DO REPEAT lines before freeing the
9263         filename, and just set the filename to NULL when doing this,
9264         because otherwise the filename gets freed twice.
9265
9266         * glob.c: (glob var queuing) Removed.  All references removed.
9267
9268         * lexer.c: Comment fixes.
9269         (get_token_representation) New function.
9270
9271         * repeat.c: Comment fixes.
9272         (struct repeat_entry) Replaced type and v union members with a
9273         simple string.
9274         (append_record) New function.
9275         (internal_cmd_do_repeat) Started reforming it for the new
9276         repeat_entry struct.  Properly records filename changes in the
9277         getl_line_buf.  Fixed improper use of = for ==.  Fixed sense of
9278         strncasecmp() result usage.  Uses append_record() to simplify.
9279         Properly discards END REPEAT line.  Calls getl_add_DO_REPEAT_file
9280         to add in the file.
9281
9282         (copy_with_DO_REPEAT_substitutions) Started coding.
9283
9284         [DEBUGGING] (debug_print_lines) New function.
9285
9286         * set.q: (custom_results, internal_cmd_set) s/VER_PCP40/VER_PC/;
9287
9288         * tokens.h: (macro is_id1, is_idn) New macros.
9289
9290 Sat Aug 16 10:57:41 1997  Ben Pfaff  <blp@gnu.org>
9291
9292         * cmdline.c: (static var pre_syntax_message) Changed `win'
9293         compatibility mode to `wnd'.
9294
9295         * data-list.c: (fixed_parse_spss) Renamed
9296         fixed_parse_compatible().
9297
9298         * glob.c: (init_glob) Excise unused code for
9299         program_invocation_short_name.
9300
9301         * lexer.c: (preprocess_line) Leading indentors are ignored in Wnd
9302         as well as in X.
9303
9304         * print.c: (fixed_parse_spss) Renamed fixed_parse_compatible().
9305
9306         * set.q: `win' compatibility renamed `wnd'.
9307
9308 Thu Aug 14 22:11:12 1997  Ben Pfaff  <blp@gnu.org>
9309
9310         * filename.c: [__WIN32__] Change the included Windows header files
9311         (again).
9312         (absolute_filename_p) [__MSDOS__] A filename with a colon as the
9313         second character is absolute.
9314         (dirname) Fix logic error.  Don't printf() the results.
9315         (prepend_dir) Don't printf() the results.
9316
9317         * getline.c: (handle_line_buffer) New function.
9318         (getl_read_line) Reads line with handle_line_buffer() when
9319         appropriate.
9320         (getl_close_file) Discard line buffer data.
9321
9322         * getline.h: Comment fixes.
9323         (struct getl_line_list) New struct.
9324         (getl_script_struct) Added line buffer members.  These are hooks
9325         for use by DO REPEAT to allow it to insert virtual source code
9326         into the program.
9327
9328         * glob.c: (init_glob) [__DJGPP__ || (__WIN32__ && __BORLANDC__)]
9329         Override Borland C++ stupidity that claims Windows has a console
9330         window size of 0x3.
9331
9332         * repeat.c: This is in the process of being restructured from
9333         using a token-buffering approach to the DO REPEAT facility to
9334         using the more flexible approach of a line-buffering approach in
9335         conjunction with the getline module.  Comment fixes.
9336         (struct tok_struct) Removed.
9337         (static vars queue_index, queue_head, queue) Removed.
9338         (static vars line_buf_head, line_buf_tail) New vars.
9339         (internal_cmd_do_repeat) Instead of queuing tokens, queue lines.
9340         Not complete.
9341         (pull_queue, destroy_queue) Removed.
9342         [DEBUGGING] (debug_print_tokens) Removed.
9343
9344 Tue Aug  5 13:57:58 1997  Ben Pfaff  <blp@gnu.org>
9345
9346         * file-handle.q: (prepend_current_directory) New function.
9347         (internal_cmd_file_handle, fh_get_handle_by_filename) Prepends
9348         current directory before normalizing filename.
9349
9350         * filename.c: (gnu_getcwd) New function.
9351         (absolute_filename_p) New function.
9352         (search_path) New argument, PREPEND.  All references changed to
9353         pass NULL except those explicitly mentioned.  Uses
9354         absolute_filename_p().  Prepends PREPEND before trying the
9355         filename.
9356         (dirname, prepend_dir) New functions.
9357
9358         * getline.c: (getl_get_current_directory) New function.
9359         (getl_include) Passes getl_get_current_directory() as PREPEND arg
9360         to search_path().
9361                 
9362 Sun Aug  3 11:42:36 1997  Ben Pfaff  <blp@gnu.org>
9363
9364         * In several source files, the term `script' was replaced with
9365         `syntax file' inside error messages.  Usage of the term `script'
9366         in the sense of a syntax file is now deprecated.
9367
9368         * cmdline.c: (static vars pre_syntax_message, post_syntax_message)
9369         Updated messages.
9370
9371         * dump-sysfile.c: (usage) Update message.
9372
9373         * getline.c: (getl_read_line) Ignore lines beginning with `#!'.
9374
9375         * getline.h: (glob var getl_include_path) Declare extern.
9376
9377         * list.q: Define EXTERN as extern before #including somP.h.
9378
9379         * var.h: Remove declaration of `disptype' variable.
9380
9381         * vfm.c: (close_active_file) After switching the data sink to a
9382         data source, set vfm_sink to NULL, because it doesn't exist any
9383         more.
9384
9385 Thu Jul 17 21:41:44 1997  Ben Pfaff  <blp@gnu.org>
9386
9387         * glob.c: [__BORLANDC__] Include math.h.  Define _matherr() and
9388         _matherrl() to ignore all math errors.
9389
9390         * sfm-read.c: (read_value_labels) When reading the labels from
9391         disk, read the little parts separately instead of as a struct;
9392         this avoids alignment problems.
9393
9394         * sfm-write.c: (struct sfm_fhuser_ext) New member `elem_type'.
9395         (sfm_write_dictionary) Sets elem_type and frees it on lossage.
9396         (write_header) Allocates and initializes elem_type.
9397         (sfm_write_case) Uses elem_type to determine how to handle each
9398         flt64 element.
9399         (sfm_close) Frees elem_type.
9400
9401         * sfmP.h: Comment fix.
9402         [__BORLANDC__] Uses #pragma -a to adjust structure member
9403         alignment.
9404         
9405 Thu Jul 17 01:55:12 1997  Ben Pfaff  <blp@gnu.org>
9406
9407         * Makefile.am: (fiasco_SOURCES) Remove display.c.
9408
9409         * common.c: Fix typo.
9410
9411         * dfm.c: (read_record) Remove strncasecmp() emulation and fix the
9412         sense of the condition.
9413
9414         * expr-evl.c: (macro ALLOC_STRING_SPACE) [!PAGED_STACK] Add
9415         line-continuation backslash.
9416
9417         * filename.c: [__WIN32__] Include <windef.h> before <winbase.h>.
9418
9419         * frequencies.q: (custom_grouped, add_percentile) Don't use a
9420         non-constant expression as an argument to sizeof.
9421
9422         * glob.c: [__WIN32__ && __BORLANDC__] When including <conio.h>,
9423         undefine gettext macro because that's a conio function.
9424
9425         * hash.h: (hsh_prime_tab declaration) Remove.
9426
9427         * list.q: (write_fallback_headers) Move `leader' allocation out of
9428         main loop.  Change to local_alloc() allocation.
9429
9430         * output.h: Formatting fixes.  Put __attribute__ in right place on
9431         function prototypes.
9432
9433         * sfm-read.c: (read_machine_flt64_info, read_variables) Change
9434         incorrect `SECOND_LOWEST_VALUE' references to proper
9435         `second_lowest_value'.
9436
9437         * som-frnt.c: (EXTERN macro) Define as `extern' instead of null
9438         value.  This way 2 out of 3 of the som files define the vars
9439         extern, the correct way, that actually works under BC++.
9440         (som_set_float) Don't use nonconstant initializers for a struct.
9441
9442         * som-high.c: Add the standard alloca() header.
9443         (replicate_table) Add prototype.
9444
9445         Merged DISPLAY routine.
9446         * sysfile-info.c: (AS_*) New enum series.
9447         (cmd_sysfile_info) Gutted.  Calls describe_variable() to do the
9448         dirty work.
9449         (cmd_display, display_macros, display_documents,
9450         display_variables) Stolen from defunct display.c.
9451         (describe_variable) New function.
9452
9453         * temporary.c: [0] (display_tree) New debug function.
9454         (copy_variable) Performs shallow copy of value labels instead of
9455         deep copy; i.e., just copys the AVL tree and increments the
9456         reference counts.
9457
9458         * val-labs.c: Comment fixes.
9459         (do_value_labels) Optionally skip leading forward slash.
9460         (get_label) Creates only a single value label instead of many
9461         copies of one, and sets the reference count.
9462
9463         * display.c: Removed.
9464
9465         * dump-sysfile.c: New file, not yet complete.
9466
9467 Fri Jul 11 23:02:18 1997  Ben Pfaff  <blp@gnu.org>
9468
9469         For lots of source files I added more verbose_msg's.  These aren't
9470         listed below as they have tested as being benign.  In some cases
9471         these replaced debug_printf() calls.
9472
9473         * output.c: (outp_read_devices) Message fix.
9474
9475         * postscript.c: (output_encodings) Message fix.  Reports errors on
9476         fclose().
9477         (postopen) Message fix.
9478         
9479 Fri Jul 11 14:09:40 1997  Ben Pfaff  <blp@gnu.org>
9480
9481         * dfm.c: (dfm_close) Don't call fclose() for a NULL FILE.
9482
9483         * filename.c: (close_file_ext) Set f->file to NULL *after* closing
9484         it.
9485
9486         * main.c: Remove <malloc.h> #include.
9487
9488         * mis-val.c: (parse_numeric) Set .f member for each missing[]
9489         instead of trying to just set the missing[] itself, which is a
9490         gcc-specific idiom.
9491
9492         * sfm-read.c: (read_variables) Same.
9493
9494         * str.h: Add memmem() prototype.
9495
9496         * val-labs.c, var-labs.c: Replace <malloc.h> with <stdlib.h>.
9497
9498 Thu Jul 10 22:13:53 1997  Ben Pfaff  <blp@gnu.org>
9499
9500         * Makefile.am: (q2c) Don't include any libraries in the link.
9501
9502         * dfm.c: (force_line_buffer_extension) New macro.
9503         (count_tabs) New function.
9504         (tabs_To_spaces) New function.
9505         (read_record) Calls tabs_to_spaces() on the line being processed.
9506
9507         * q2c.c: Disabled i18n for this proglet so that libintl.a doesn't
9508         have to be compiled twice (once for CC, once for LOCAL_CC).
9509  
9510 Sun Jul  6 19:14:33 1997  Ben Pfaff  <blp@gnu.org>
9511
9512         * Makefile.am: (INCLUDES) Add intl directory; fix directories.
9513         (LDADD) Add @INTLLIBS@.
9514         (q2c) Add LIBS, @INTLLIBS@ to link step.
9515
9516         * inpt-pgm.c: Turn off debugging.
9517
9518         * postscript.c: (postopen) Format fix.  local_free() blocks
9519         returned by local_alloc(); don't free() them.
9520
9521 Sat Jul  5 23:44:51 1997  Ben Pfaff  <blp@gnu.org>
9522
9523         * data-in.c: (parse_string_as_format) Comment fix.  Fix check for
9524         string length.
9525
9526         * data-list.c: (read_from_data_list_fixed) Pass proper value for
9527         LEN arg, not simply the full string length.
9528
9529         * sort.c: (allocate_file_handles) Check SPSS compatible temp file
9530         directories before generic temp file directories.
9531
9532         * vfm.c: Disable debugging.
9533
9534 Fri Jul  4 13:26:41 1997  Ben Pfaff  <blp@gnu.org>
9535
9536         * get.c: Comment fix.
9537         (cmd_save_internal) Always passes GTSV_OPT_SAVE option.
9538
9539 Wed Jun 25 22:52:28 1997  Ben Pfaff  <blp@gnu.org>
9540
9541         * expr-prs.c: (debug_print_postfix) Conditionally included on
9542         GLOBAL_DEBUGGING.  Removed out_header() reference.
9543
9544         * exprP.h: Removed #undef GLOBAL_DEBUGGING.
9545
9546 Sun Jun 22 22:00:28 1997  Ben Pfaff  <blp@gnu.org>
9547
9548         * ascii.c: Removed obsolete ascii_close_page() prototype.
9549
9550         * command.c: (output_line) Comment fix.
9551
9552         * data-in.c: Formatting fix.
9553         (parse_string_as_format) Now the `fc' argument is used only for
9554         the purpose of error messages; it is not an index into the string
9555         passed.  All references changed.
9556
9557         * data-list.c: Comment fix.
9558         (cut_field) Comment fix.  Now returns the column number of the
9559         position of the field cut out on success.
9560         (parse_field) Added `column' argument.  Puts the column numbers in
9561         the error message.
9562         (read_from_data_list_free, read_from_data_list_list) Record the
9563         column number returned by cut_field(), pass it to parse_field().
9564
9565         * dfm.c: Comment fix.
9566
9567         * do-ifP.h: Comment fix.
9568
9569         * expr-prs.c: (SYSMIS_func) Implemented string-type arguments for
9570         the SYSMIS function.
9571
9572         * expr.h, exprP.h: Comment fix.
9573
9574         * glob.c: (init_glob) Only calls setlocale() and family if
9575         ENABLE_NLS set.
9576
9577         * hash.h: Comment fix.
9578
9579         * include.c: Comment fix.
9580
9581         * output.c: Comment fix.
9582
9583         * postscript.c: (ps_line_intersection) Simplified assertion.
9584
9585         * repeat.c: Comment fix.
9586
9587         * vars-atr.c: Comment fix.
9588
9589         * vars-prs.c: Comment fix.
9590
9591         * vfm.c: (vector_initialization) [DEBUGGING] Fixed undefined
9592         behavior with usage of postincrement.
9593         (memory_stream_read) Discards cases as it goes. 
9594
9595 Sun Jun 15 16:45:17 1997  Ben Pfaff  <blp@gnu.org>
9596
9597         * Makefile.am: Cleans q2c, not just distcleans it.  Distcleans
9598         foo.
9599
9600         * Most source files: Includes debug-print.h, related comment
9601         fixes.
9602
9603         * cases.c: (alloc_val) Removed complex allocation code.  Merely
9604         increments default_dict.nval and returns the former value.
9605         (envector, devector) Removed references to lv member of struct
9606         variable.
9607
9608         * common.h: (macro VME) Replaced complex definition with simple
9609         one.
9610
9611         * data-list.c: (cmd_data_list) Sets vfm_source instead of
9612         read_active_file and cancel_input_pgm.
9613         (read_from_data_list, cancel_data_list) Removed.
9614         (data_list_source_read, data_list_source_destroy_source) New
9615         functions.
9616         (glob var data_list_source) New var.
9617
9618         * dfm.c: (open_file_r, open_file_w) Simplified debug output.
9619         (cmd_begin_data) Improved criteria for an input program accessing
9620         the inline file.  Still not perfect.
9621
9622         * do-if.c: (do_if_trns_proc) Simplified debug output.
9623
9624         * expr-prs.c: Comment fixes.
9625         [DEBUGGING] (debug_print_postfix) Simplified debug output.
9626
9627         * file-handle.q: (fh_close_handle) Simplified debug output.
9628
9629         * file-type.c: Comment fixes.
9630         (cmd_file_type) Sets vfm_source instead of read_active_file and
9631         cancel_input_pgm.
9632         (cmd_end_file_type) On failure, discards variables in place of
9633         just canceling the input program.
9634         (read_from_file_type) Renamed file_type_source_read.
9635         (cancel_file_type) Renamed file_type_source_destroy_source.
9636         (glob var file_type_source) New var.
9637
9638         * get.c: (GTSV_* enum series) New enums GTSV_OPT_SAVE, GTSV_NONE.
9639         (cmd_get) Initializes options to GTSV_NONE before passing to
9640         trim_dictionary().  Removed `lv' reference.  Sets vfm_source
9641         instead of read_active_file and cancel_input_pgm.
9642         (cmd_save_internal) Initializes options before passing to
9643         trim_dictionary().  Local var `nval' removed.
9644         (dict_delete_run) Comment fixes.
9645         (trim_dictionary) Comment fixes.  Disallows scratch variables if
9646         GTSV_OPT_SAVE set in options.
9647         (read_from_get) Renamed get_source_read.
9648         (cancel_get) Renamed get_source_destroy_source.
9649         (glob var get_source) New var.
9650
9651         * inpt-pgm.c: (cmd_input_program) Sets vfm_source instead of
9652         read_active_file and cancel_input_pgm.
9653         (read_from_input_program) Renamed input_program_source_read.
9654         Simplified debug output.
9655         (cancel_input_program) Renamed
9656         input_program_source_destroy_source.
9657         (glob var input_program_source) New var.
9658
9659         * loop.c: (loop_1_trns_proc) Simplified debug output.
9660
9661         * main.c: (dump_token) Made eof output more explicit.
9662
9663         * sfm-read.c: (read_variables, dump_dictionary) Removed `lv'
9664         references.
9665
9666         * sort.c: (cmd_sort_cases) Disallows scratch variables.  Removed
9667         code for always-memory or always-disk cases.  malloc's case-list
9668         based on vfm_source_info.ncases.  Explicit support for
9669         memory_stream via memory_source_cases.
9670         (do_external_sort) Sets vfm_source instead of read_active_file and
9671         cancel_input_pgm.
9672         (allocate_file_handles) The temporary directory permissions are
9673         set to 0700 instead of 0777.
9674         (allocate_cases) Formatting fixes.  Simplified debug output.
9675         (output_record) Compacts the case if necessary before writing it
9676         out.
9677         (close_handle, open_handle_w) Simplified debug output.
9678         (write_initial_runs) Destroys vfm_sink, then sets it to
9679         sort_stream.  Writes records to memory based on
9680         vfm_sink_info.case_size.
9681         (write_to_sort_cases) Renamed sort_stream_write().
9682         (merge) Simplified error handling.  Simplified debug output.
9683         Formatting fixes.
9684         (read_from_external_sort) Renamed sort_stream_read().
9685         Reads records based on vfm_source_info.case_size.
9686         (sort_stream_write) Writes records to memory based on
9687         vfm_sink_info.case_size.
9688         (sort_stream_mode) New function.
9689         (glob var sort_stream) New variable.
9690
9691         * temporary.c: (cmd_temporary) Simplified debug output.
9692         (copy_variable) Removed references to `lv'.
9693
9694         * title.c: (get_title) Simplified debug output.
9695
9696         * var.h: Comment fixes.
9697         (struct get_proc) Removed member `lv'.
9698         (struct variable) Removed member `lv'.  Comment fixes.
9699         (glob vars read_active_file, write_active_file, cancel_input_pgm)
9700         Removed.
9701         (struct case_stream) New.
9702
9703         * vars-atr.c: (discard_variables) Changed cancel_input_pgm,
9704         read_active_file references to use vfm_source.
9705         (init_variable, replace_variable) Removed references to `lv'.
9706
9707         * vfm.c: Comment fixes.
9708         (glob var vfm_source, vfm_sink, vfm_source_info, vfm_sink_info)
9709         New variables.
9710         (static var queue, qh, qt, n_lag) Removed.  All references
9711         removed.
9712         (glob var compaction_necessary, compaction_nval, compaction_case,
9713         paging) New variables.
9714         (record_case) Removed.
9715         (procedure) Comment fixes.  Calls vfm_source->read() instead of
9716         read_active_file().
9717         (lag) Removed.
9718         (prepare_for_writing, arrange_compaction, make_temp_case,
9719         vector_initialization, setup_filter) New function.
9720         (open_active_file) Most of the code moved into the abovementioned
9721         new functions.  Now sets temp_dict to &default_dict if there is no
9722         temporary dictionary, for convenience.  New debug output.
9723         (close_active_file) Deals with changing the sink to the source.
9724         Calls finish_compaction().  Frees compaction_case.  Mostly
9725         rewritten.
9726         (glob vars disk_source_file, disk_sink_file) New vars.
9727         (destroy_active_file, read_from_memory) Removed.
9728         (disk_stream_init, disk_stream_read, disk_stream_write,
9729         disk_stream_mode, disk_stream_destroy_source,
9730         disk_stream_destroy_sink) New functions.
9731         (glob var vfm_disk_stream) New var.
9732         (glob vars memory_source_cases, memory_sink_cases,
9733         memory_sink_iter, memory_sink_max_cases) New vars.
9734         (memory_stream_init, memory_stream_read, memory_stream_write,
9735         memory_stream_mode, memory_stream_destroy_source,
9736         memory_stream_destroy_sink) New functions.
9737         (glob var vfm_memory_stream) New var.
9738         (write_case) Local var `i' renamed `cur_trns'; local var `retval'
9739         named `more_cases'.  Simplified debug output.  Otherwise mostly
9740         rewritten.
9741         (record_case) Moved into the stream drivers.  Removed.
9742         (transform) Removed (was dead code).
9743         (SPLIT_FILE_procfunc) s/vfm_replacement/vfm_sink_info/.  In the
9744         common case that the splits don't change, we don't need to copy
9745         the case into prev_case again--pointless.
9746         (compact_case) New function.
9747         (finish_compaction) New function.
9748
9749         * vfmP.h: Comment fixes.
9750         (DEV_* enum series) Removed. 
9751         (struct storage) Renamed `stream_info'.  Removed variant record.
9752         Removed `device' member.
9753
9754         * debug-print.h: New file.
9755         
9756 Sun Jun  8 01:12:38 1997  Ben Pfaff  <blp@gnu.org>
9757
9758         * autorecode.c: Turned off debugging.
9759
9760         * data-list.c: (destroy_dls) Closes the associated file handle.
9761
9762         * descript.q: (custom_variables) Added PV_NO_SCRATCH to
9763         parse_variables() options.
9764
9765         * dfm.c: (open_file_r) Removed gratuituous argument to msg() call.
9766
9767         * display.c: (display_variables) Really fixed null cell bug.
9768
9769         * file-handle.q: (fh_close_handle) Changed debugging message.
9770
9771         * frequencies.q: (custom_variables) Added PV_NO_SCRATCH to
9772         parse_variables() options.
9773
9774         * list.q: Added PV_NO_SCRATCH in q2c varlist options.
9775         (cmd_list) Fails if no variables specified.
9776         (determine_layout) Writes blank lines manually.
9777
9778         * loop.c: (loop_1_trns_proc) Made debugging code only print
9779         messages if debugging.
9780
9781         * q2c.c: (dump_subcommand) Appends sbc->message to SBC_VARLIST
9782         parse_variables() arguments.
9783         (main) Parses optional parenthesized options to varlist
9784         subcommands into sbc->message.
9785
9786         * sfm-read.c: Format fix.
9787
9788         * var.h: (FV_*) New enum series.
9789         (PV_*) New enum PV_NO_SCRATCH.
9790
9791         * vars-prs.c: (find_var) Removed.
9792         (fill_all_vars) Takes FV_* enum instead of boolean third
9793         argument.  Rewritten to deal with scratch as well as system
9794         variables.
9795         (parse_variables) Error message on scratch variable if
9796         PV_NO_SCRATCH set.
9797
9798         * vfm.c: (static var virt_begin_func) New var.
9799         (procedure) Sets up virt_begin_func.
9800         (SPLIT_FILE_procfunc) For the first case, calls virt_begin_func()
9801         after dump_splits().  For succeeding groups changes, calls
9802         virt_begin_func() instead of begin_func().      
9803
9804 Fri Jun  6 22:42:23 1997  Ben Pfaff  <blp@gnu.org>
9805
9806         * count.c, data-out.c, file-handle.q, list.q, loop.c: Turned off
9807         debugging.
9808
9809         * dfm.c: Added some debugging messages, disabled by default.
9810         (open_file_r) Fixed error message.
9811         (read_record) On eof on inline_file, instead of calling
9812         fh_close_handle(), simply jump to eof label like a normal file.
9813         Message fixes.
9814
9815         * display.c: Thin lines between rows for certain kinds of
9816         listing.  Fixed `null cell' bug.
9817
9818         * error.c: (failure) Flush stdout, stderr before failing.
9819
9820         * file-handle.q: (fh_close_handle) Added debugging message.
9821
9822         * frequencies.q: (dump_full) Bottom line extends across entire
9823         table width.  Changed title formatting.
9824         (dump_condensed) Changed title formatting.
9825         (dump_statistics) Fixed title formatting.
9826
9827         * glob.c: (init_glob) Moved initialization of cur_proc out of #if.
9828         Sets default value of set_format.
9829
9830         * list.q: (cmd_list) Calls blank_line() before determine_layout().
9831         Passes write_all_headers() to procedure() as pre-group func.
9832         (write_all_headers) New function.
9833         (determine_layout) Removed calls to write_header().
9834         Calls blank_line() before and after write_fallback_headers().
9835
9836         * recode.c: (recode_trns_free) Only attempts to free head->map if
9837         non-NULL.
9838
9839         * sfm-read.c: (read_variables) Allows `#' at beginning of system
9840         file variable names but gives a warning.  Sets `left' based on
9841         first character being/not being `#'.  On lossage frees dict->var.
9842
9843         * som-high.c: (som_draw_title) Simplified title formatting.
9844
9845         * vfm.c: (dump_splits) Fixed and changed splits formatting.
9846
9847 Thu Jun  5 22:51:15 1997  Ben Pfaff  <blp@gnu.org>
9848
9849         * autorecode.c: (cmd_autorecode) Sets h_trans to NULL at
9850         beginning.  Frees v_src, v_dest on successful exit.  Frees
9851         h_trans[*], h_trans on lossage.
9852         (recode) Frees h_trans[*], h_trans.
9853
9854         * dfm.c: (dfm_close) Formatting change.
9855         (open_inline_file) Now passed a dfm_fhuser_ext to initialize; no
9856         longer allocates its own in inline_file.
9857         (open_file_r) Passes the local dfm_fhuser_ext to
9858         open_inline_file().
9859         (open_file_w) Message fix. 
9860         (read_record) Buffer reallocation strategy changed.  Frees
9861         ext->line even in inline_file to prevent leaks.
9862         (dfm_put_record) Fixed bug where `ext' was cached before the file
9863         was opened and thus it would be NULL when the file really was
9864         open.
9865         (cmd_begin_data) Sets up inline_file basics itself, then calls
9866         open_inline_file() for the dfm_fhuser_ext.  Formatting fix.
9867
9868         * list.q: (write_line) Formatting fix.
9869         (clean_up) Minor strategy change.  Sets proportional font after
9870         finishing cleanup.
9871         (determine_layout) Sets fixed font before writing regular headers,
9872         or after writing fallback headers.
9873
9874         * modify-vars.c: (cmd_modify_vars) Frees variable lists for DROP
9875         and KEEP vars after using them.
9876
9877         * postscript.c: (ps_init_driver) Frees x->family.
9878         (postopen) When loading fonts, free the temporary font name buffer
9879         after using it.
9880         (ps_text_set_font_by_position) Free temporary font name buffer
9881         after using it.
9882         (text) Fixed code that calculated `lig' so that `lig' always gets
9883         initialized.  Formatting fix.
9884
9885         * som-low.c: (get_cell_size, som_get_table_size) `prop_height' ->
9886         `font_height'.
9887         [GLOBAL_DEBUGGIGN] (check_table) Use arena_alloc() to allocate
9888         cells, not xmalloc(), so that the cells will get destroyed
9889         automatically.
9890
9891         * sysfile-info.c: (cmd_sysfile_info) Frees the dictionary after
9892         using it.
9893
9894 Tue Jun  3 23:33:22 1997  Ben Pfaff  <blp@gnu.org>
9895
9896         * ascii.c: (ascii_text_draw) Always sets metrics for strings that
9897         are drawn.
9898
9899         * dfm.c: Comment fix.
9900
9901         * list.q: Comment fixes.  Include somP.h.  Removed static vars
9902         table, n_columns, n_rows, part.  New struct list_ext.  New static
9903         var line_buf.
9904         (n_lines_remaining, n_chars_width, write_line) New functions.
9905         (cmd_list, list_cases) Rewritten.
9906         (begin_row, end_row, flush_table) Removed.
9907         (write_header, clean_up, write_varname, write_fallback_headers,
9908         determine_layout) New functions.
9909
9910         * output.c: (outp_iterate_enabled_drivers) Minor reformat.
9911
9912         * output.h: Comment fix.
9913
9914         * postscript.c: Comment fix.
9915         (struct ps_driver_ext) Removed prop_size, fixed_size members;
9916         added font_size.  All references changed.
9917         (ps_init_driver) Initializes font_size.  Simplified space checking
9918         code.
9919         (static var option_tab[]) Removed prop-size, fixed-size; added
9920         font-size.
9921         (ps_option) Handles font_size.
9922
9923         * som-high.c: Moved prototypes into somP.h.
9924         (som_init_driver) New function.
9925         (som_submit_table) Moved some code into new function
9926         som_init_driver().
9927         (build_target) Moved some code into new function
9928         som_internal_eject_page().
9929         (som_eject_page) Uses som_internal_eject_page().
9930         (som_internal_eject_page) New function.
9931
9932         * som-low.c: Moved prototypes into somP.h.
9933
9934         * som.h: Formatting fixes.
9935
9936         * somP.h: (struct som_driver_ext) Removed em_width;
9937         added prop_em_width, fixed_width.
9938
9939 Mon Jun  2 14:25:25 1997  Ben Pfaff  <blp@gnu.org>
9940
9941         * Makefile.am: Added `localedir' definition.  Added
9942         -DLOCALEDIR="..." to DEFS.  Added -I. to INCLUDES.
9943
9944         * ascii.c: (macro draw_line) Fixed capitalization.
9945
9946         * ascii.c, autorecode.c, cases.c, cmdline.c, command.c, common.c,
9947         compute.c, count.c, data-in.c, data-list.c, data-out.c,
9948         descript.q, dfm.c, display.c, do-if.c, error.c, expr-evl.c,
9949         expr-opt.c, expr-prs.c, file-handle.q, file-type.c, filename.c,
9950         formats.c, frequencies.q, get.c, getline.c, glob.c, groff-font.c,
9951         hash.c, heap.c, include.c, inpt-pgm.c, lexer.c, list.q, loop.c,
9952         main.c, mis-val.c, misc.c, modify-vars.c, numeric.c, output.c,
9953         postscript.c, print.c, q2c.c, recode.c, rename-vars.c, repeat.c,
9954         sample.c, sel-if.c, sfm-read.c, sfm-write.c, sfmP.h, som-frnt.c,
9955         som-high.c, som-low.c, sort.c, split-file.c, sysfile-info.c,
9956         temporary.c, title.c, tokens.h, val-labs.c, var-labs.c,
9957         vars-atr.c, vars-prs.c, vector.c, vfm.c, weight.c: Marked strings
9958         for internationlization.
9959
9960         * glob.c: [HAVE_LOCALE_H] Includes locale.h.
9961
9962 Sun Jun  1 23:31:18 1997  Ben Pfaff  <blp@gnu.org>
9963
9964         * do-if.c, sort.c, val-labs.c: Comment fixes.
9965
9966         * glob.c: (init_glob) Uncommented, updated i18n support.
9967         
9968         * arena.c, ascii.c, data-in.c, descript.q, error.c, expr-evl.c,
9969         expr-opt.c, expr-prs.c, filename.c, frequencies.q, groff-font.c,
9970         output.c, postscript.c, sfm-read.c, som-high.c, vars-prs.c: Made
9971         the declarations of macros taking arguments a lot nicer.
9972
9973 Sun Jun  1 17:22:04 1997  Ben Pfaff  <blp@gnu.org>
9974
9975         * error.h: Removed CE, CW aliases for SE, SW.
9976
9977         * q2c.c: Removed explicit streq() definition since it's duplicated
9978         in str.h.
9979         
9980         * approx.h, error.h, font.h, hash.h, misc.h, output.h, somP.h,
9981         stats.h, str.h, tokens.h: Made the declarations of macros taking
9982         arguments a lot nicer-looking of <pinard@iro.umontreal.ca>.
9983         Comment fixes.
9984
9985 Sun Jun  1 12:02:06 1997  Ben Pfaff  <blp@gnu.org>
9986
9987         * cmdline.c: Comment fixes.
9988         (pick_compat) Changed return type to int.  Now, instead of setting
9989         glob var `compat' to the emulation, returns the emulation.  All
9990         references changed.
9991         (parse_command_line) Added terminating null to end of
9992         `long_options' array definition.
9993         (pre_syntax_message) Fixes.
9994         (usage) Shows the default emulation in the syntax message by
9995         calling pick_compat().
9996
9997         * getline.c: (getl_add_include_dir) Separates paths with
9998         PATH_DELIMITER, not DIR_SEPARATOR.
9999
10000         * glob.c: (init_glob) Fixed references to DEFAULT_VER_PCP40,
10001         DEFAULT_VER_WIN61, DEFAULT_VER_X40.
10002
10003         * output.c: (outp_configure_macro) Make earlier definitions for a
10004         particular key override later ones for the same key.
10005         
10006 Fri May 30 19:40:49 1997  Ben Pfaff  <blp@gnu.org>
10007
10008         * ascii.c: Comment fixes.
10009
10010         * output.c: (outp_get_paper_size)
10011         s/STAT_OUTPUT_INIT_FILE/STAT_OUTPUT_PAPERSIZE_FILE/.
10012         
10013 Sun May 25 22:34:07 1997  Ben Pfaff  <blp@gnu.org>
10014
10015         * ascii.c, postscript.c, sfm-read.c, sfm-write.c, sort.c: Include
10016         <errno.h>.  GNU libc 2 enforces this!
10017
10018         * command.c: (parse_cmd) Fixed problem with `else' clause being
10019         paired with wrong `if'.  Comment fix.
10020
10021 Fri May  9 16:53:52 1997  Ben Pfaff  <blp@gnu.org>
10022
10023         * getline.c: [!HAVE_LIBREADLINE] (read_console) Changed
10024         blp_getline() to getline().
10025
10026         * output.c: (outp_eval_dimension) Changed the fix from last time;
10027         there was no variable `a'.
10028
10029         * q2c.c: (get_line) Fixed boundary condition overrun bug.
10030
10031 Mon May  5 21:58:22 1997  Ben Pfaff  <blp@gnu.org>
10032
10033         * output.c: (outp_evaluate_dimension) Fixed handling of negative
10034         numbers having fractional parts.  Added case of a fraction without
10035         a whole-number part.
10036
10037 Fri May  2 22:08:05 1997  Ben Pfaff  <blp@gnu.org>
10038
10039         * ascii.c: (ascii_text_get_font_position) Removed.
10040
10041         * expr.h, exprP.h: Disabled debugging.
10042
10043         * groff-font.c, postscript.c: Changed `groff' to `Groff' in
10044         several places.
10045
10046         * output.h: (struct outp_class_struct) Removed
10047         text_get_font_position method.  All references deleted.
10048
10049         * postscript.c: Big change here.  Fontmaps were completely
10050         eliminated because of a change in philosophy.  Comment fixes.
10051         (struct ps_fontmap, ps2dit_map, font_family, dit2family_map)
10052         Removed.
10053         (struct ps_driver_ext) `position', `fontmap', `prop_name',
10054         `fixed_name' members removed.  New members `prop_family',
10055         `fixed_family'.  `family' member changed to type char *.
10056         (static var ps_fontmaps) Removed.
10057         () Removed.
10058         (ps_init_driver) Removed obsolete references, updated.
10059         Initializes `translate_x', `translate_y', `scale'.  Doesn't read
10060         fontmap, of course.  Refers to font names through internal_name
10061         rather than subversive means.  Frees proper items.
10062         (static var option_tab[]) Removed `fontmap-file' option; renamed
10063         `fixed-font', `prop-font'.
10064         (ps_option) Corresponds to option_tab[].
10065         (read_fontmap, release_fontmap, ps_to_dit, compare_ps2dit,
10066         hash_ps2dit, compare_dit2family, hash_dit2family, compare_family,
10067         hash_family) Removed.
10068         (postopen) Generates font names from family names.  Gets
10069         PostScript font name properly.  New prologue file comment `!!!'
10070         style.
10071         (ps_open_page) Adds translate_x, translate_y to BP prologue
10072         function; gives SF argument floating-point format.
10073         (ps_text_set_font_by_name) Doesn't try to map PostScript->Groff
10074         font name.  Doesn't change font family.
10075         (ps_text_set_font_by_position) Generates Groff font name from font
10076         family name instead of through table lookup.
10077         (ps_text_set_font_by_family) Renamed `ps_text_set_font_family',
10078         all references changed.  Reduced to simple string assignment.
10079         (ps_get_font_name) Removed.
10080         (ps_get_font_family) Reduced to string return.
10081         (text) Doesn't save `position' since it no longer exists.  Ugly
10082         kluge to save font family--fix soon?
10083         (load_font) Removed PostScript name argument.
10084         
10085 Thu May  1 14:58:59 1997  Ben Pfaff  <blp@gnu.org>
10086
10087         * postscript.c: Comment fix.
10088         (ps_open_page) Puts scale factor in PostScript output.
10089         
10090 Sat Apr 26 11:49:32 1997  Ben Pfaff  <blp@gnu.org>
10091
10092         * Makefile.am: Distcleans q2c.
10093
10094 Wed Apr 23 21:33:48 1997  Ben Pfaff  <blp@gnu.org>
10095
10096         * ascii.c: (delineate) Sets text size even if width is zero.
10097
10098         * command.c: Comment fix.
10099         (static var cmd_table[]) Re-enabled EVALUATE command.
10100         (parse_cmd) Lotsa comment fixes.  Fixed infinite loop in parsing
10101         of comments in script files.  Now more liberal on criteria for
10102         performing a state transition--if *anything* happened correctly,
10103         not just if *everything* happened correctly.
10104
10105         * data-out.c: (convert_F) Comment fix.  Why in the fsck does
10106         Checker segfault on formatting large numbers and why in the fsck
10107         hadn't I noticed this before?
10108
10109         * expr.h, exprP.h: No longer turn off GLOBAL_DEBUGGING.
10110
10111         * list.q: (cmd_list) Commented out the actual output routine
10112         because of various problems.  Probably will abandon the idea of
10113         using the general `crushed tables' for the LIST procedure.
10114
10115         * temporary.c: (restore_dictionary) Sets var_by_name to NULL after
10116         clearing it.  Allocates a new var_by_name dictionary before trying
10117         to add members to it.
10118
10119         * vars-atr.c: [DEBUGGING] (dump_one_var_node) Removed argument
10120         `sib'.  Changed type of `node' argument.
10121         [DEBUGGING] (dump_var_tree) Replaced avlwalk() with
10122         avl_walk_inorder().
10123         (clear_variable) Only dumps the var tree if var_by_name non-NULL.
10124         [DEBUGGING] Only deletes the variable from var_by_name if that var
10125         non-NULL.
10126
10127 Fri Apr 18 16:48:41 1997  Ben Pfaff  <blp@gnu.org>
10128
10129         * Makefile.am: Added include files to SOURCES.  Added
10130         frequencies.q to EXTRA_DIST.  Removed include/ from INCLUDES.  Now
10131         includes rules for q2c.  Added `boast' target.
10132
10133 Fri Apr 18 15:42:22 1997  Ben Pfaff  <blp@gnu.org>
10134
10135         * Makefile.am: Maintainer-clean Makefile.in.
10136         
10137         * Makefile.am: Fixed redundant EXTRA_DIST line.
10138
10139         * ascii.c: Comment fixes.
10140         (ascii_line_vert) Fixed overly aggressive range check.
10141
10142         * display.c: Removed dead code.
10143
10144         * list.q: Turn debugging on.
10145         (flush_table) New debug code.
10146
10147         * sfm-read.c: (read_value_labels) malloc's the structure before
10148         trying to assign to its members.
10149
10150         * sfm-write.c: Comment fix.
10151
10152         * som-high.c: (som_submit_table) Sets som.t and som.d on each call
10153         to output_table().
10154         (output_table) No arguments anymore--gets them through `som'
10155         global.  New debug code.  In crushed tables, now sets `htv' as
10156         well as `hv' to avoid bad confusion later.
10157         (dump_crush_page) New debug code.
10158
10159         * som-low.c: (som_dump_crush_page) New debug code.
10160
10161 Thu Mar 27 01:11:29 1997  Ben Pfaff  <blp@gnu.org>
10162
10163         All source files: Broke long lines into multiple lines.
10164         
10165         * ascii.c: (ascii_close_page) Uses host_system var in place of
10166         HOST_SYSTEM constant.
10167
10168         * cmdline.c: (var syntax_message[]) Broke into
10169         pre_syntax_message[] and post_syntax_message[].
10170         (usage) Outputs both parts, separated by driver list.
10171
10172         * error.h: Fixed broken formatting.
10173
10174         * expr-opt.c: (str_search, str_rsearch) New functions.
10175
10176         * misc.c: (blp_getdelim) Removed.  All references changed to
10177         `getdelim'.
10178         (str_search, str_rsearch) Removed.
10179         (memrmem) New function.
10180
10181         * misc.h: (blp_getline) Removed.  All reference changed to
10182         `getline'.
10183
10184         * stat.h: New file.
10185
10186         * filename.c: Includes "stat.h", not <sys/stat.h>.
10187         (blp_getenv) Uses host_system var instead of HOST_SYSTEM constant.
10188
10189         * output.c: (outp_list_classes) Changed output formatting.
10190
10191         * sfm-write.c: (write_header) Uses host_system var instead of
10192         HOST_SYSTEM constant.
10193         (write_rec_7_34) Extracts version numbers from the version string.
10194         Untested.
10195
10196         * sort.c: Includes "stat.h", not <sys/stat.h>.
10197
10198         * str.c: (strcasecmp) Removed.
10199
10200         * title.c: (cmd_document) Uses host_system var instead of
10201         HOST_SYSTEM constant.
10202
10203         * version.c: Generated on-the-fly by the Makefile instead of being
10204         static.
10205
10206         * str.h: Comment fixes.  Doesn't substitute for missing memmove or
10207         memcpy.
10208         [!HAVE_STRNCASECMP] Declares strncasecmp().
10209
10210         * version.h: Removed stray character.  Comment fixes.
10211         (vars host_system, build_system) New vars.
10212
10213 Mon Mar 24 21:47:31 1997  Ben Pfaff  <blp@gnu.org>
10214
10215         * Most source files: Changed formatting of copyright notice; fixed
10216         FSF address; reformatted to better conform to GNU standards;
10217         comment fixes.  Added markups to prevent GNU indent from messing
10218         up my beautiful formatting :-).
10219         
10220         * q2c.c: (get_line) Ignores lines that begin with `/* *INDENT' so
10221         that GNU indent markups can be passed through without problems.
10222
10223 Wed Feb 19 21:30:31 1997  Ben Pfaff  <blp@gnu.org>
10224
10225         * get.c: Turned off debugging.
10226
10227         * glob.c: (init_glob) Turned on save-file compression by default.
10228
10229         * sfm-write.c: (sfm_write_case) Fixed bug which resulted in less
10230         compression than was possible in save files.
10231
10232 Sun Feb 16 20:57:20 1997  Ben Pfaff  <blp@gnu.org>
10233
10234         * data-out.c: (convert_F) Comment fixes.  Debug message fixes.
10235
10236         * frequencies.q: Removed Fiasco extensions.  Updated calculation
10237         algorithms.  Polished output format. 
10238         (struct frq_info_struct) Removed members `max_degree', `min_n',
10239         all references removed.
10240         (macro frq_extensions) Removed.
10241         (static vars min_n, max_degree) Removed, all references removed.
10242         (internal_cmd_frequencies) Doesn't handle extensions.  Doesn't
10243         calculate `min_n', `max_degree'.
10244         (postcalc) Passes new arg to dump_statistics().
10245         (dump_full) Honor NOLABEL option.  Buggy?  Adds variable name
10246         title.
10247         (dump_condensed) Adds variable name title.
10248         (sum_freqs) Removed.
10249         (calc_stats) Updated calculation algorithm.
10250         (dump_statistics) Removed warning for too-few observations.
10251         Changed table formatting.  Adds variable name title if passed new
10252         arg is nonzero.
10253
10254         * output.h: Comment fix.
10255
10256         * recode.c, sample.c, sort.c: Disabled debug code.
10257
10258         * som-frnt.c: (som_set_value, som_set_float, som_set_text)
10259         Improved debug code.
10260
10261         * var.h: (enum series frq_*) Removed Fiasco extensions.
10262
10263 Sat Feb 15 21:26:53 1997  Ben Pfaff  <blp@gnu.org>
10264
10265         * command.c: Added PROCESS IF to command table.
10266
10267         * Lots & lots of places, removed checks for NULLs preceding calls
10268         to free_expression(), which itself checks.
10269
10270         * descript.q: Removed Fiasco extensions.  Removed optimizations
10271         for non-weighted active files.  Implemented some options.
10272         Finished polishing output format.  Comment fixes.  Merged
10273         `descript.g'.
10274         (static vars n_glob_miss_list, n_glob_valid, n_glob_missing,
10275         max_degree, min_n) Removed.
10276         (macro dsc_extensions) Removed.
10277         (struct dsc_info_struct) Removed `min_n' member, all references
10278         fixed.
10279         (internal_cmd_descriptives) Removed calculation of min_n,
10280         max_degree.  Only deals with one `calc' routine instead of two
10281         flavors.
10282         (precalc) Eliminated redundancy.  Updated for changes to
10283         descriptives_proc structure.
10284         (calc) Moved here from `descript.g'.  Rewritten to calculate
10285         statistics via `moments about the mean' rather than by summing,
10286         summing squares, summing cubes, and so on.
10287         (postcalc) Rewritten for new-style statistical calculation.
10288         (display) Removed support for displaying variables across rows.
10289         No longer crushes the descriptives table.  Removed ancient code.
10290         Added display of N, by variable and listwise.
10291
10292         * descript.g: Removed; merged into `descript.q'.
10293
10294         * expr-evl.c: (evaluate_expression) Now returns a double.  For
10295         numeric results, it returns the result as well as storing it in
10296         the passed `value' structure if non-NULL.  For string results it
10297         just returns 0.0 and it must be passed non-NULL.  Many references
10298         to this function were optimized by use of this change, especially
10299         but not exclusively in `compute.c'.
10300
10301         * frequencies.g: Comment fix.
10302
10303         * glob.c: (glob var process_if_expr) New global var.
10304
10305         * postscript.c: (static var option_tab[]) Corrected entry for
10306         `fixed_size'.
10307         (postopen) Sets x->size to x->prop_size.
10308         (ps_text_set_font_by_name) Sets font size as well as typeface for
10309         PROP and FIXED fonts.
10310         
10311         * sel-if.c: (cmd_process_if) New function.
10312
10313         * sfm-write.c: (struct sfm_fhuser_ext) New member `n_cases'.
10314         (sfm_write_dictionary) Sets `n_cases' to 0.
10315         (sfm_write_case) Increments `n_cases'.
10316         (sfm_close) Attempts to seek the system file back to the header
10317         and write the number of cases in its proper slot.
10318
10319         * som-frnt.c: (som_insert_table) Masks off expansion options since
10320         only SOPT_X_NORM seems to work sensibly.
10321
10322         * som-low.c: (get_cell_size) Fixed bug when a table cell was sized
10323         with a `fixed' value of 2.
10324
10325         * sort.c: (cmd_sort_cases) Cancels PROCESS IF.
10326
10327         * sysfile-info.c: (cmd_sysfile_info) Doesn't display more than 10
10328         value labels; uses SOPT_NONE instead of SOPT_X_BOTH.
10329
10330         * var.h: (enum series dsc_*) Removed Fiasco extensions.
10331         (struct descriptives_proc) Removed `miss_noweight'; new members
10332         `X_bar', `M2', `M3', `M4', `min', `max'.
10333
10334         * vars-atr.c: (discard_variables) Cancels PROCESS IF.
10335
10336         * vfm.c: (close_active_file) Cancels PROCESS IF.
10337         (write_case) Doesn't process cases unselected by PROCESS IF.
10338
10339 Fri Feb 14 23:32:58 1997  Ben Pfaff  <blp@gnu.org>
10340
10341         * glob.c: (glob var err) Removed.
10342
10343         * sysfile-info.c: (cmd_sysfile_info) When adjusting table size,
10344         doesn't have to take into account number of value labels since
10345         they're in a subtable anyway.  Also, doesn't display more than 10
10346         value labels since we can't yet break pages in subtables.
10347
10348 Tue Feb  4 15:15:50 1997  Ben Pfaff  <blp@gnu.org>
10349
10350         * som-frnt.c: (som_change_table_size) Simple change for elegance
10351         that shouldn't change behavior.
10352         (som_set_value) Comment fix.
10353
10354         * som-high.c: (som_submit_table) Message fix.
10355
10356 Wed Jan 22 21:54:00 1997  Ben Pfaff  <blp@gnu.org>
10357
10358         * command.c: Added SYSFILE INFO to command table.
10359
10360         * file-handle.q: (fh_handle_filename) New function.
10361
10362         * get.c: (save_trns_proc) Fixed a bug in padding of output data
10363         with spaces.
10364
10365         * main.c: (parse) New return value for command functions, -3.
10366
10367         * misc.h: Comment fix.
10368
10369         * output.h: Comment fixes.
10370         (macro COMPONENTS) Removed.
10371
10372         * postscript.c: (write_text) Modified literal_chars[] so that `('
10373         and ')' are not written to the output in strings as literals.
10374
10375         * sfm-read.c: (sfm_read_dictionary) New argument.
10376         (read_header) New argument.  Sets the information structure's
10377         values from the header information.  
10378         (read_variables) [__CHECKER__] Redefines isalnum()--some sort of
10379         bizarre Checker problem, I guess.
10380         (read_variables) Proper cleanup on lossage.
10381
10382         * sfm.h: (struct sfm_read_info) New struct for use by
10383         sfm_read_dictionary().
10384
10385         * som-frnt.c: (som_create_table) New argument CREATE_FLAGS,
10386         currently used just for tables that can be dynamically resized and
10387         thus have to be allocated with arena_malloc() instead of
10388         arena_alloc().  All references changed.
10389         (som_change_table_size) New function.
10390         (som_insert_table) Bugfix: now inserts `cell', not `c'!
10391
10392         * som-high.c: [GLOBAL_DEBUGGING] (check_table) Moved to som-low.c.
10393         (som_submit_table) [GLOBAL_DEBUGGING] Doesn't call check_table()
10394         any more.
10395
10396         * som-low.c: (draw_cell) Calls draw_table_cell() for SCON_TABLE
10397         cells.
10398         (draw_intersection) Now takes an argument specifying the table in
10399         question.  All references changed.
10400         (draw_table_cell) New function.
10401         (som_get_table_size) [GLOBAL_DEBUGGING] Calls check_table().
10402         (som_get_table_size) Many nice new explanatory comments.
10403         [GLOBAL_DEBUGGING] (check_table) Moved here from som-high.c.
10404
10405         * som.h: New enum series SOM_CREATE_* for use as create flags with
10406         som_create_table().
10407
10408         * str.h: Moved a comment here from TODO.
10409
10410         * sysfile-info.c: New file.  Reference implementation.
10411
10412 Sun Jan 19 14:22:11 1997  Ben Pfaff  <blp@gnu.org>
10413
10414         * command.c: Added RENAME VARIABLES to table of commands.
10415
10416         * data-in.c: (dls_error) Sets `cust_field'.
10417         (parse_N) Message fix.
10418         (parse_day_count) New function.
10419         (to_roman) Never outputs VX as a `short form' of V.
10420         (parse_month) Fixed parsing of Roman numerals.
10421         (parse_trailer) Message fix.
10422         (parse_DATE, parse_ADATE, parse_EDATE, parse_SDATE, parse_JDATE,
10423         parse_QYR, parse_MOYR, parse_WKYR, parse_DTIME) Issue a message if
10424         the date is invalid.
10425         (parse_SDATE) Fixed swapped day, year.
10426         (parse_JDATE) Fixed bug for dates in 1582.
10427         (parse_DTIME) Allows days not between 1 and 31.
10428         (parse_numeric) Makes local copy of f.type for easier usage.
10429         FMT_DOLLAR fixed.
10430
10431         * data-out.c: (convert_F) When outputting as scientific, properly
10432         sets f.type as fp->type.
10433         (insert_commas) Fixed operator precedence problem with setting of
10434         nitems.  Changed strcpy to memcpy (no null terminator). 
10435         (convert_date) Fixed FMT_JDATE: added 1900 to year.
10436         (convert_CCx) Essentially rewritten, but now it works.
10437
10438         * display.c: (cmd_display) Added DISPLAY FILE LABEL (undocumented
10439         feature of Fiasco).
10440         (display_documents) Implemented.
10441
10442         * error.c: (glob var cust_field) New var.
10443         (vmsg) Displays cust_field as part of message classes DE and DW.
10444
10445         * formats.c: (debug_print) Fixed to compile under updated
10446         dictionary format.
10447
10448         * get.c: (cmd_get, cmd_save_internal) Close file handle on
10449         failure.
10450
10451         * misc.c: (parse_format_specifier) Formatting fix.
10452
10453         * modify-vars.c: (struct var_modification) Renamed `n_reorder' as
10454         `n_rename' for clarity.
10455         (cmd_modify_vars) Initializes `forward' and `positional' at
10456         appropriate times.  Frees lists of vars to rename on failure.
10457         Comment fix.  Frees memory on success.  
10458         (rearrange_dict) Simplified `for' loop condition.
10459
10460         * rename-vars.c: New file (reference implementation).
10461         
10462         * set.q: (internal_cmd_set) Fixed `emu' test condition.
10463
10464         * sfm-read.c: (read_header) File label is created only if file
10465         label in file is not blank.
10466         (read_variables) Initializes `dict' local variable.
10467         (read_documents) Proper behavior on lossage.
10468
10469         * sfm-write.c: (write_header) Doesn't blank out the file label
10470         (why was this here to begin with?!)
10471
10472         * temporary.c: (save_dictionary) File label is copied only if
10473         non-NULL.  Doesn't try to xstrdup() dictionary documents.
10474         Adapted so as to not irritate Checker.
10475         (free_dictionary) Only destroys var_by_name if non-NULL.
10476
10477         * title.c: (cmd_file_label) Doesn't skip FILE, LABEL tokens.
10478         (cmd_document) Doesn't skip DOCUMENT token.  Adds some header
10479         lines to the document, indents the document.  Also, it works now.
10480         (add_document_line) New function.
10481
10482         * var.h: (struct dictionary) Reordering.
10483
10484         * vars-prs.c: (parse_variables) On lossage, only local_free()'s
10485         bits if it was allocated to begin with.
10486
10487 Thu Jan 16 13:08:57 1997  Ben Pfaff  <blp@gnu.org>
10488
10489         * command.c: Added MODIFY VARS to list of commands.
10490
10491         * configure.in: Updated custom macros for autoconf 2.12.  Removed
10492         mmap reference; fixed termcap library reference.
10493
10494         * display.c: (display_variables) Fixed a few bugs although it's
10495         still not well written.
10496
10497         * error.c: [!__CHECKER__] (chkr_disp_call_chain) New function.
10498         (induce_segfault) Calls chkr_disp_call_chain() instead of
10499         inducing an actual SIGSEGV.
10500
10501         * expr-opt.c: (evaluate_tree) Swapped order of arguments to
10502         str_search() and str_rsearch().  Fixed tests for matches on
10503         OP_INDEX and OP_RINDEX.
10504
10505         * filename.c: (good_getcwd) Removed as the new libc for Checker
10506         doesn't contain this bug, apparently.
10507
10508         * misc.c: (str_search, str_rsearch) Changed order of arguments for
10509         consistency with GNU memmem.
10510         (blp_getdelim) Changed `len' from `int' to `size_t'.
10511
10512         * modify-vars.c: Reference implementation.
10513
10514         * som-frnt.c: (zero_length) New global var.
10515         (som_create_table) Message fix.
10516
10517         * som.h: Added gcc attributions to som_set_text(),
10518         som_output_text() prototypes.  blank_line() refers to
10519         zero_length[] instead of a literal null string to suppress gcc
10520         warnings.
10521
10522         * sort.c: (do_external_sort) Fixed fencepost error on lossage.
10523         (allocate_cases) Decrements x_max so the last element of x[] can
10524         be used by the algorithm.
10525
10526         * var.h: Changed minor details of `variable' declaration.  
10527         (struct modify_vars_proc) New struct.
10528         (struct variable) Added field p.mfv.
10529
10530         * vars-atr.c: Comment fix.
10531
10532         * vars-prs.c: (fill_all_vars) More optimal implementation.
10533
10534         * vfm.c: (dump_splits) Sets the last byte of temp_buf to a null
10535         character, which it shouldn't have to do but printf() seems to
10536         read the null byte even though I supply a maximum length...
10537
10538 Fri Jan 10 20:22:08 1997  Ben Pfaff  <blp@gnu.org>
10539
10540         * command.c: Removed command alias X for QUIT.
10541         (parse_cmd) Fixed comment parsing.
10542
10543         * dfm.c: (struct dfm_fhuser_ext) Fields `len', `size' are now of
10544         type size_t.
10545         (read_record) Fixed references to len, size.
10546         (dfm_get_record) Restructured.
10547
10548         * file-handle.h: (struct file_handle) Field `lrecl' now of type
10549         size_t.
10550
10551         * file-handle.q: (internal_cmd_file_handle) Checks for nonpositive
10552         record length.
10553
10554         * modify-vars.c: New file.  Not complete.
10555         
10556         * set.q: (set_ccx) Fixed operator precedence problem regarding ^
10557         and ==.
10558
10559         * sfm-read.c: (bswap_flt64, read_header, write_variable) Fixed
10560         problems caused by int/size_t differences.
10561
10562         * sort.c: (output_record, merge_once) Cast `size_t's to `int's in
10563         appropriate spots.
10564
10565         * str.c: (strcasecmp) Fixed bug that cropped up when the strings
10566         being compared were of equal length.
10567
10568 Thu Jan  2 19:08:23 1997  Ben Pfaff  <blp@gnu.org>
10569
10570         * command.c: Added DOCUMENT, DROP DOCUMENTS, FILE LABEL.
10571
10572         * lexer.c: (get_dotted_rest_of_line) New function.
10573
10574         * sel-if.c: (cmd_filter) Cannot choose string or scratch variables
10575         as filters.
10576
10577         * sfm-read.c: (sfm_read_dictionary) Calls read_documents() to read
10578         type 6 records.  Frees the dictionary properly.
10579         (read_header) Initializes the dictionary instead of letting
10580         read_variables() do it.  Sets the dictionary file label from the
10581         system file.
10582         (read_documents) New function.
10583
10584         * sfm-write.c: (sfm_write_dictionary) Calls write_documents() to
10585         write type 6 record if appropriate.
10586         (write_header) Writes file label from dictionary.
10587         (write_documents) New function.
10588
10589         * temporary.c: (save_dictionary, restore_dictionary,
10590         free_dictionary) Properly handle new fields in dictionary struct.
10591
10592         * title.c: (get_title) Returns after failure().
10593         (cmd_file_label, cmd_document, cmd_drop_documents) New functions
10594         for new commands FILE LABEL, DOCUMENT, DROP DOCUMENTS.  Untested.
10595
10596         * var.h: (struct dictionary) New fields `label', `n_documents',
10597         `documents'.
10598
10599 Wed Jan  1 22:08:10 1997  Ben Pfaff  <blp@gnu.org>
10600
10601         * command.c: Added FILTER to list of commands.
10602
10603         * frequencies.g: [WEIGHTING] Removed test for weighting!=-1 since
10604         it's always true.
10605
10606         * get.c: (cmd_save_internal) Removed weighting code since it's now
10607         handled by sfm-write.c.  Properly commented out debug code.
10608
10609         * glob.c: (glob var weighting) Removed.
10610
10611         * sel-if.c: Comment fixes.
10612         (cmd_filter) New function.
10613
10614         * sfm-read.c: (struct sfm_fhuser_ext) New field `weight_index'.
10615         (sfm_read_dictionary) Sets weighting variable direct in the
10616         created dictionary now.  (Apparently we previously didn't support
10617         weighting on GET?)
10618         (read_header) Sets weight_index field in sfm_fhuser_ext from
10619         header read from disk.
10620
10621         * sfm-write.c: (sfm_write_dictionary) Comment fix.
10622         (write_header) Now sets the weighting in the header from the
10623         passed primary dictionary instead of from the sfm_write_info.
10624
10625         * sfm.h: (struct sfm_write_info) Removed field `weight'.
10626
10627         * som-high.c: (dump_crush_table) Fixed a couple of assertions that
10628         broke on boundary conditions.
10629
10630         * var.h: (struct dictionary) New fields `weight_var',
10631         `weight_index', and `filter_var'.
10632         (glob var weighting) Removed.  This is now part of struct
10633         dictionary.  All references changed; the less mechanical changes
10634         are described above.
10635
10636         * vars-atr.c: (find_dict_variable) New function.
10637
10638         * vfm.c: (static var filter_index) New variable.
10639         (open_active_file) Initializes filter_index from default_dict.
10640         (write_case) Calls proc_func() only if the filter variable is
10641         nonzero; this implements FILTER behavior.
10642
10643         * weight.c: (static var weight_varname) Removed.
10644         (cmd_weight) Modified default_dict instead of glob vars.
10645         (update_weighting) Changed the signature to modify a dictionary
10646         instead of glob vars.  Now returns the weighting variable.
10647         (get_weighting_variable) Removed; its function is absorbed by
10648         update_weighting().
10649         (stop_weighting) Operates on a dictionary now.
10650
10651 Wed Jan  1 17:00:59 1997  Ben Pfaff  <blp@gnu.org>
10652
10653         * sort.c: Removed debugging info from messages.
10654         (do_external_sort) Cleans up after itself by deleting the
10655         temporary directory on failure.  (On success it is deleted by the
10656         input program.)
10657         (allocate_cases) Removed debug code.  Added clean up code.
10658         (output_record) Removed debug code.
10659         (merge) Added code to close all the input files that are currently
10660         open.  This is a likely location for bugs, because I'm not sure
10661         about boundary conditions.  Removed an unnecesary heap_delete().
10662         (merge_once) Removed input file "optimization" that in fact
10663         screwed up the rest of the code.  Message and comment fixes.
10664
10665 Sun Dec 29 21:36:48 1996  Ben Pfaff  <blp@gnu.org>
10666
10667         * error.c: [__CHECKER__] (induce_segfault) Flushes output streams.
10668
10669         * heap.c: (heap_delete) New argument.
10670
10671         * sort.c: Finished implementation of external sort.
10672
10673         * vfm.c: (read_from_disk) Returns after a disk error.
10674
10675 Sun Dec 22 23:10:39 1996  Ben Pfaff  <blp@gnu.org>
10676
10677         * sort.c: (static var state) Removed.
10678         (static vars max_handles, tmp_basename, tmp_extname,
10679         huffman_queue) New variables.
10680         (do_external_sort) Moved most code to new functions.
10681         Creates huffman_queue.
10682         (allocate_file_handles, allocate_cases) New functions.
10683         (static vars run_no, run_length, file_index, case_count) New
10684         variables. 
10685         (output_record) Returns success.  Now really writes to the output
10686         file.
10687         (begin_run, end_run) New functions.
10688         (write_initial_runs) Returns success.  Initializes run_no to -1.
10689         Calls begin_run(), end_run() at appropriate times.  Outputs debug
10690         messages.
10691         (write_to_sort_cases) Calls begin_run(), end_run() at appropriate
10692         times.
10693         (merge) New function.
10694
10695         * heap.c, heap.h: New files.  Hopefully in near-final form.
10696
10697 Sat Dec 21 21:51:04 1996  Ben Pfaff  <blp@gnu.org>
10698
10699         * glob.c: Added write_active_file to global vars.
10700
10701         * sort.c: Several new miscellaneous static variables.
10702         (cmd_sort_cases) Big comment fix.
10703         (perform_case_2) Renamed `do_external_sort' and completely
10704         rewritten.
10705         (case_2_proc_func) Removed.
10706         (output_record, write_initial_runs, write_to_sort_cases,
10707         compare_record) New functions.
10708
10709         * vfm.c: [DEBUGGING] (index_to_varname) Excised bit rot.
10710
10711 Tue Dec 17 18:57:59 1996  Ben Pfaff  <blp@gnu.org>
10712
10713         * sort.c: (perform_case_2) Changed the method for allocation of
10714         lots of memory--now allocates one case at a time in hopes that
10715         more cases can be allocated with heavily fragmented memory.
10716
10717         * var.h: (write_active_file) New global var.
10718
10719         * vfm.c: (procedure, close_active_file, write_case,
10720         SPLIT_FILE_procfunc) Now allow beginfunc, procfunc, and endfunc
10721         arguments to procedure() to be NULL.  All references to
10722         procedure() that made use of dummy functions were changed to NULL
10723         functions.
10724         (open_active_file) If write_active_file is non-NULL, the output
10725         device becomes DEV_PGM (a new enum).
10726         (close_active_file) Sets write_active_file to NULL.
10727         (read_from_memory) Comment fix.
10728         (record_case) Calls write_active_file() when the output device is
10729         DEV_PGM.
10730
10731 Sun Dec 15 15:32:16 1996  Ben Pfaff  <blp@gnu.org>
10732
10733         * sort.c: New file.
10734
10735         * autorecode.c: (cmd_autorecode) Fixed parsing of options.
10736         Fixed checking for duplicate varnames.
10737         (recode) xmalloc()'s the transformation instead of arena_alloc()'ing
10738         it.
10739         (autorecode_trns_free) Destroys hash tables for each recoding
10740         specification.
10741         (autorecode_proc_func) Compares NULL to *vpp instead of vpp.
10742
10743         * command.c: Added SORT CASES to cmd_table.
10744         (null_func, null_int_func) Prototyped.
10745
10746         * descript.g: (calc_weight, calc_noweight) Computes own case
10747         number now.
10748         
10749         * frequencies.q: (dump_statistics) Fixed problem with
10750         too-few-cases warning message.
10751
10752         * get.c: (cmd_save_internal) Handles weighting properly.
10753
10754         * hash.c: (hsh_dump) Output format changed.
10755         (force_hsh_insert) Actually works now, prototype changed.
10756
10757         * list.q: (static var case_num) New variable.
10758         (cmd_list) Initializes case_num.
10759         (list_cases) Increments case_num.
10760
10761         * var.h: Added definitions for SORT CASES.  Comment fixes.
10762
10763         * vfm.c: Some definitions moved to new file vfmP.h.  Comment
10764         fixes.  `active' renamed vfm_active, `rep' renamed
10765         vfm_replacement, all references changed.
10766         (procedure) The procfunc no longer receives a case number.  All
10767         references changed.
10768         (write_case) Subtle reordering.
10769         (SPLIT_FILE_procfunc) Counts cases differently.  Slightly less
10770         redundant.
10771
10772         * weight.c: (get_weighting_variable) New function.
10773
10774         * vfmP.h: New file with definitions from vfm.c.
10775
10776 Sat Dec 14 10:35:30 1996  Ben Pfaff  <blp@gnu.org>
10777
10778         * command.c: (FILE_TYPE_okay) Commented out some tests because
10779         they're clumsy and not yet needed.
10780
10781         * var.h: Most *_trns structures moved to their respective source
10782         files.  Some were moved into a new file, do-ifP.h.  Comment fixes.
10783         (union any_trns) Changed to a typedef for trns_header.
10784         (struct input_program_pgm) Removed.
10785
10786         * vars-prs.c: (parse_variables) Only local_free()'s bits if it
10787         was allocated in the first place.
10788
10789 Fri Dec 13 21:30:53 1996  Ben Pfaff  <blp@gnu.org>
10790
10791         * autorecode.c: New file.
10792         
10793         * command.c: Added AUTORECODE to command table; re-enabled SET.
10794
10795         * data-out.c: (convert_F) Handles infinities and NaNs properly.
10796
10797         * error.c: (vmsg) Comment fixes.
10798
10799         * hash.c: Comment fix.
10800         (hashpjw_d) New function.
10801         (hashpjw) Reimplemented as call to more general function
10802         hashpjw_d().
10803         (internal_comparison_fn) Initializes pointers properly.
10804         (hsh_sort) [GLOBAL_DEBUGGING] New debugging code.
10805         (force_hsh_insert, force_hsh_find) New debugging wrapper
10806         functions.
10807
10808         * main.c: (main) Message fix.
10809
10810         * output.c: (outp_read_devices) Message fix.
10811
10812         * set.q: Comment fixes.
10813         (custom_results) Implemented Wnd/X form of subcommand.
10814         (set_routing) New function.
10815         (internal_cmd_set) Implemented ERRORS, MESSAGES.
10816
10817         * settings.h: (SET_ROUTE_*) New enum series.
10818         (set_results) Renamed set_results_file, all references changed.
10819         (set_messages) Removed.
10820         (glob vars set_errors, set_messages, set_results) New vars.
10821
10822         * title.c: (get_title) Remembers to xstrdup() the result of
10823         get_rest_of_line().
10824
10825         * var.h: (arc_item, arc_spec, autorecode_trns) New structures for
10826         use by AUTORECODE.
10827         (union any_trns) New element `arc'.
10828
10829 Fri Dec  6 23:53:47 1996  Ben Pfaff  <blp@gnu.org>
10830
10831         * command.c: (output_line) Removed references to set_screen.
10832
10833         * error.c: (static var terminating) New var.
10834         (hcf) Sets terminating to 1.
10835         (vmsg) If terminating is nonzero, does not attempt to call hcf().
10836         This prevents an infinite loop if an error occurs within hcf().
10837
10838         * expr-evl.c: (evaluate_expression) [__CHECKER__] Replaced case
10839         statement circumlocution with `case 42000' trick.
10840         (evaluate_expression) New support for OP_STR_MIS.
10841
10842         * expr-opt.c: (evaluate_expression) [__CHECKER__] Replaced case
10843         statement circumlocution with `case 42000' trick.
10844         (dump_node) Handles OP_STR_MIS.
10845
10846         * expr-prs.c: (MISSING_func, SYSMIS_func) Rewrote to handle string
10847         variables exceptions.
10848         (parse_function) Message fix.
10849         (ops[]) Added OP_STR_MIS.
10850
10851         * expr.h: Added OP_STR_MIS to OP_* enum.  Comment fixes.
10852
10853         * exprP.h: [__CHECKER__] Removed case statement circumlocution.
10854
10855         * glob.c: Removed set_scrnfile glob var.
10856         (init_glob) set_errorbreak set to 0 by default.
10857
10858         * groff-font.c: Changed included files.
10859         (groff_read_font) Initializes font_arena local var correctly.
10860         (default_font) New function.
10861
10862         * output.c: Comment fixes.
10863         (glob var disabled_devices) New variable.
10864         [GLOBAL_DEBUGGING] (static var iterating_driver_list) New
10865         variable.
10866         [GLOBAL_DEBUGGING] (reentrancy) New function.
10867         [GLOBAL_DEBUGGING] (outp_read_devices, outp_done, find_driver,
10868         outp_iterate_enabled_drivers) Calls to reentrancy().
10869         (destroy_list) New function.
10870         (outp_done) Moved code to destroy_list().
10871         (parse_options) Parses `listing', `screen', `printer' options
10872         internally.
10873         (configure_driver) Sets new `device' member of driver.
10874         (outp_iterate_enabled_drivers, outp_enable_device) New functions.
10875
10876         * output.h: Comment fixes.  New enum series OUTP_DEV_*.
10877         (struct outp_driver_struct) New member `device'.
10878
10879         * postscript.c: (find_encoding_file) Doesn't display its own error
10880         messages.
10881         (default_encoding) New function.
10882         (switch_font) Calls default_encoding() if no encoding can be
10883         found.
10884         (text) Makes up a character metric if none exists for the desired
10885         character.
10886         (load_font) Properly copies a fallback filename.  Calls
10887         default_font() for a font if none at all are known.
10888
10889         * set.q: Comment fixes.  Removed OUTPUT subcommand.
10890         (custom_listing) Calls outp_enable_device() to enable/disable
10891         listing device.
10892         (turn_screen_on) Removed.
10893         (internal_cmd_set) Calls outp_enable_device() to enable/disable
10894         screen, printer devices.
10895
10896         * settings.h: Comment fixes.
10897         (glob vars set_output, set_printer, set_screen, set_scrnfile)
10898         Removed.
10899
10900         * som-high.c: (som_submit_table, som_eject_page) Use
10901         outp_iterate_enabled_drivers() instead of iterating
10902         outp_driver_list directly.
10903
10904 Wed Dec  4 21:34:17 1996  Ben Pfaff  <blp@gnu.org>
10905
10906         * data-in.c: (parse_EDATE, parse_SDATE) New functions.
10907         (parse_string_as_format) Handles new formats.
10908         (parse_numeric) Now handles DOT and PCT formats.
10909
10910         * data-out.c: (convert_E, convert_F, insert_commas) Handle DOT
10911         format now.
10912         (convert_date) Handle EDATE and SDATE formats.
10913         (convert_CCx) Now if there's not room for the currency characters,
10914         converts it as F format if it's positive instead of giving up
10915         quickly.  Also fixed save-and-restore bug with decimal point
10916         characters.  
10917         (convert_format_to_string) Handles new formats.
10918
10919         * misc.c: (formats[]) Added new formats.
10920         (convert_fmt_ItoO) Supports new formats.
10921
10922         * sfm-read.c: (parse_format_spec) Supports new formats.  Better
10923         data checking.  New argument, all references changed.
10924
10925         * sfm-write.c: (write_format_spec) Supports new formats.
10926
10927         * var.h: New formats FMT_DOT, FMT_PCT, FMT_EDATE, FMT_SDATE.
10928         Comment fixes.
10929
10930 Sun Dec  1 17:19:00 1996  Ben Pfaff  <blp@gnu.org>
10931
10932         * cmdline.c: Comment fixes.
10933         (parse_command_line) Changed return type to void.
10934
10935         * data-in.c: (parse_string_as_format) Added FMT_CCA...FMT_CCE to
10936         switch.
10937         (parse_numeric) Handles international numbers (comma as decimal
10938         point).  Some reformatting.
10939
10940         * data-list.c: (parse_free) Default output format is now
10941         set_format instead of hard-coded F8.2.
10942         (read_from_data_list_list) Emits error message on undefined data
10943         only if set_undefined is nonzero.
10944
10945         * data-out.c: (convert_E) Changes decimal point from period to
10946         comma if appropriate.  Restructured.  Better comments.
10947         (convert_F) Changes decimal point from period to comma if
10948         appropriate.
10949         (insert_commas) Major bug with handling of negative values fixed.
10950         Also, inserts periods instead of commas if appropriate.
10951         (convert_CCx) New function.
10952         (convert_format_to_string) Added FMT_CCA...FMT_CCE to switch.
10953         (num_to_string) Changed `.' to set_decimal.
10954
10955         * dfm.c: Comment fixes.
10956         (dfm_close) Frees ext->line even in inline_file.
10957         (open_inline_file) New function.
10958         (open_file_r) When opening the inline file: now properly
10959         recognizes `BEGIN DATA.' line, and calls open_inline_file() to
10960         finish up.
10961         (read_record) Calls fh_close_handle() instead of dfm_close() to
10962         close the inline file.  Makes a copy of the line getl_buf to avoid
10963         interlock problems.
10964         (dfm_get_record) Restructured.  Now checks the return value of
10965         open_file_r().
10966         (cmd_begin_data) Moved open code into open_inline_file().  Relaxed
10967         checking for use of inline file.  No longer tries to close inline
10968         file.
10969
10970         * error.c: (glob var error_already_flagged) New var.
10971         (vmsg) Message change.  Now checks max number of errors/warnings,
10972         acts on it.
10973
10974         * file-handle.q: (fh_handle_name) Now allows closing of
10975         inline_file.
10976         (fh_init_files) Reformatted.
10977
10978         * get.c: (trim_dictionary) Checks SCOMP option instead of COMP.
10979
10980         * getline.c: (getl_include) Fixed bug that popped up when called
10981         when file queue was empty.
10982         (read_console) Resets error_count, warning_count,
10983         error_already_flagged to zero.
10984
10985         * glob.c: Many changes to update list of variables.
10986         (init_compat_dependent) Now this function is called whenever
10987         `compat' changes.  It now sets set_seed only if it hasn't
10988         previously been referenced.  It now calls
10989         lex_init_compat_dependent().
10990
10991         * include.c: (cmd_include_at) Frees temporary buffer instead of
10992         line buffer.  
10993         (cmd_include) Doesn't make copy of include file name.
10994
10995         * lexer.c: Comment fixes.
10996         (init_lex) Moved some code into new function
10997         lex_init_compat_dependent().
10998         (lex_init_compat_dependent) New function.
10999         (hex_val) Simplified.
11000         (preprocess_line) Uses set_endcmd instead of hardcoding `.'.
11001
11002         * main.c: Comment fixes.
11003         (main) Reformatted.
11004
11005         * misc.c: (formats[]) Added FMT_CCA...FMT_CCE.
11006         (check_input_specifier) Disallows FMT_CCA...FMT_CCE.
11007         (convert_fmt_ItoO) Detects FMT_CCA...FMT_CCE.
11008         (setup_randomize) Sets set_seed_used.
11009
11010         * set.q: Comment fixes.
11011         (custom_results) Conditionalizes on `compat'.
11012         (custom_log) Calls custom_journal().
11013         (set_ccx) New function.
11014         (cmd_set) Calls init_compat_dependent() when `compat' changes.
11015         Calls set_ccx() to handle CCA...CCE.  Sets set_grouping
11016         when set_decimal changes.  Range-checks values for MITERATE,
11017         MNEST.  Message fixes.
11018
11019         * settings.h: Comment fixes.
11020         (struct set_cust_currency) New struct.
11021         (set_cc[], set_grouping, set_seed_used) New global vars.
11022
11023         * var.h: (FMT_CCA...FMT_CCE) New output formats.
11024         (FCAT_OUTPUT_ONLY) New FCAT_* constant.
11025
11026 Thu Nov 28 23:14:07 1996  Ben Pfaff  <blp@gnu.org>
11027
11028         * glob.c: Revised variables to correspond to settings.h.
11029         (init_glob) Initializes variables from settings.h properly.
11030
11031         * set.q: Began long-overdue major revision to correspond to new
11032         philosophy.  Most code changed. 
11033
11034         * settings.h: Mostly changed; reorganized, reordered, large new
11035         comment.
11036
11037 Thu Nov 28 19:46:10 1996  Ben Pfaff  <blp@gnu.org>
11038
11039         * get.c: (cmd_save_internal) No longer forces compression off.
11040
11041         * sfm-read.c: (read_compressed_data) If eof is reached when
11042         reading a new instruction octet, only signal error if we're in the
11043         middle of a case.
11044
11045         * sfm-write.c: (COMPRESSION_BIAS) New #define.
11046         (struct sfm_fhuser_ext) New member `end'.
11047         (write_header) Refers to COMPRESSION_BIAS instead of magic 100.0.
11048         (ensure_buf_space) New function.
11049         (sfm_write_case) Reimplemented in order to support compression.
11050         (sfm_close) Writes out the remaining contents of the compression
11051         buffer if any.
11052
11053 Wed Nov 27 23:18:35 1996  Ben Pfaff  <blp@gnu.org>
11054
11055         * command.c: Defined SAVE and XSAVE commands in command table.
11056
11057         * common.h: second_lowest_value is of type flt64, not double.
11058
11059         * file-handle.h: Comment fix.
11060
11061         * get.c: Comment fixes.
11062         (static var `trns') New.
11063         (save_write_case_func, save_trns_proc, save_trns_free, null_func,
11064         cmd_save_internal, cmd_save, cmd_xsave) New functions.
11065         (dict_delete_run) Clears the variables and frees them now.
11066         (trim_dictionary) Sets default for compression.
11067         On KEEP subcommand, frees deleted variables as well as clearing
11068         them.  Finally got the sense of the test for deleting all
11069         variables correct.
11070         [DEBUGGING] (dump_dict_variables) Message fix.
11071
11072         * glob.c: (init_glob) set_compression set to 1 by default.
11073
11074         * list.q: Properly #includes config.h.
11075
11076         * misc.h: New macro REM_RND_UP.
11077
11078         * settings.h: Comment fix.
11079
11080         * sfm-read.c: (structs sysfile_header, sysfile_format,
11081         sysfile_variable; inline function bswap_int32) Moved to new file
11082         sfmP.h.
11083         (corrupt_msg) [__CHECKER__] No longer induces segfault.
11084         (sfm_read_dictionary) Fixed bug caused by failing to initialize
11085         var_by_index.
11086         (read_machine_flt64_info) Fixed some problems caused by confusion
11087         between flt64 and double types.
11088         (read_header) Message fix.
11089         (read_variables) Fixed set of cases in which we byte-swap sv.print
11090         and sv.write.  Fixed confusion of flt64 and double.
11091
11092         * sfm.h: (struct sfm_write_info) New.
11093
11094         * som-high.c: (som_draw_title) Properly frees `s'.
11095
11096         * temporary.c: (save_dictionary) Comment fix.
11097
11098         * var.h: Comment fixes.  New FMT_* enum, FMT_NUMBER_OF_FORMATS.
11099         (struct trns_header) Formatting fix.
11100         (struct save_trns) New.
11101
11102         * vars-atr.c: (discard_variables) Comment fix.
11103
11104         * sfm-write.c: New file, baseline release.
11105
11106         * sfmP.h: New file, baseline release.
11107
11108 Sun Nov 24 14:53:53 1996  Ben Pfaff  <blp@gnu.org>
11109
11110         * cmdline.c: (parse_command_line) `--version' output updated.
11111         (glob var syntax_message[]) Added my e-mail address.
11112
11113         * file-handle.q, lexer.c, vfm.c: Changed many instances of
11114         `illegal' to `invalid'.
11115
11116         * sfm-read.c: (struct sfm_fhuser_ext) New fields used as
11117         uncompression buffer.
11118         (sfm_close) Frees decompression buffer.
11119         (sfm_read_dictionary) Initializes decompression buffer.
11120         (buffer_input, read_compressed_data) New functions.
11121         (sfm_read_case) Restructured; now calls read_compressed_data() to
11122         handle compressed system file data.
11123
11124         * var.h: Comment fix.
11125
11126 Mon Nov 11 15:34:09 1996  Ben Pfaff  <blp@gnu.org>
11127
11128         * dfm.c: (dfm_close) Does not set h->{ext,class} because the
11129         caller handles it.
11130          
11131         * get.c: New comments.  New static var `get_file'.
11132         (cmd_get) Now fully implemented.  Calls discard_variables();
11133         initializes fv and lv for all variables; new debug code; sets
11134         up the dictionary; sets up the input program.
11135         (read_from_get, cancel_get) New functions.
11136
11137         * sfm-read.c: Comment fixes.
11138         (sfm_close) New static function.
11139         (sfm_read_dictionary) Properly sets up the class of the
11140         file_handle.  No longer cares what size the data is in records of
11141         type 7.  Also, on failure, properly cleans up the file_handle and
11142         free()s some stuff.
11143         (read_variables) No longer thinks it knows `nval' of the
11144         dictionary.  Now sets p.get.fv, etc., instead of speculatively
11145         setting fv itself.
11146         (read_value_labels) Fixed off-by-one error in indexing of
11147         var_by_index[].
11148         (sfm_read_case) New function.
11149         (sfm_r_class) New static var.
11150
11151         * var.h: (get_proc) New struct.
11152         (struct variable) New member p.get.
11153
11154 Thu Nov  7 20:52:28 1996  Ben Pfaff  <blp@gnu.org>
11155
11156         * get.c: Removed GTSV_OPT_MAP because of a misinterpretation of
11157         the manual's meaning.
11158         (rename_variables) New function.
11159         (trim_variables) Doesn't try to parse MAP any more.  Removed debug
11160         code.  Now properly reorders the dictionary on the KEEP keyword.
11161
11162         * sfm-read.c: (read_value_labels) Fixed some bugs regarding
11163         garbage collection.
11164
11165         * vars-atr.c: (clear_variable) New argument `dictionary *'.
11166         (rename_variable) New function.
11167         (free_val_lab) Reformatted.
11168
11169 Thu Nov  7 17:29:16 1996  Ben Pfaff  <blp@gnu.org>
11170
11171         * var.h: Reindented entire file.  Comment fixes.
11172         (glob vars var, var_by_name, nvar, N, nval, n_splits, splits)
11173         Removed.
11174         (glob var default_dict) New.
11175         (struct indirect_dictionary) Removed.
11176
11177         * Many other source files were changed to add `default_dict.'
11178         before all references to the dictionary of the active file.
11179         
11180         * vars-atr.c: (make_indirect_dictionary) Removed.
11181
11182         * glob.c: Reindented all variable declarations.  Updated for
11183         changed var.h.  Comment fixes.
11184
11185         * temporary.c: (restore_dictionary, save_dictionary) Simplified
11186         because now we can mainly copy dictionary structs.
11187
11188         * vars-prs.c: (is_dict_varname, parse_dict_variable,
11189         parse_variables) Takes dictionary instead of indirect_dictionary
11190         first argument.
11191         (parse_variables) Instead of calling make_indirect_dictionary,
11192         just sets DICT to &default_dict if DICT is NULL.  Of course, lots
11193         of `*dict.' references had to be changed to `dict->'.  Removed
11194         debug code.
11195
11196 Thu Nov  7 15:48:52 1996  Ben Pfaff  <blp@gnu.org>
11197
11198         * get.c: Added GTSV_OPT_* series of enums.
11199         (trim_dictionary, dict_delete_run) New functions.
11200         [DEBUGGING] (dump_dict_variables) New function.
11201         (cmd_get) Calls trim_dictionary() to get dictionary fully set-up.
11202         [DEBUGGING] Calls dump_dict_variables() to display results.
11203
11204         * glob.c: (cmp_variable) Now a public function declared in var.h.
11205
11206         * sfm-read.c: Turned off debug code.  Comment fixes.
11207         (read_machine_int32_info, read_machine_flt64_info) New functions
11208         to parse type 7 records.
11209         (sfm_read_dictionary) Properly byteswaps several fields now.
11210         Calls read_machine_*_info() to parse type 7 subtypes 3 and 4
11211         records.  [DEBUGGING] Dumps dictionary.
11212         (read_variables) Sets `index' field of variables created properly.
11213         Constructs avl tree of variables in dictionary.  [DEBUGGING] No
11214         longer dumps dictionary.
11215         (read_value_labels) Properly byteswaps fields.  [DEBUGGING] New
11216         debug code.
11217         [DEBUGGING] (dump_dictionary) No longer stubbed out.
11218
11219         * temporary.c: (restore_dictionary) Destroys `var_by_name' glob
11220         var before destroying any variables just to save a little time.
11221
11222         * var.h: (struct variable) Reordered in order to make name[] the
11223         first member; this makes pointers to `variable' pointers to the
11224         variable name, simplifying avl trees, etc.
11225         (struct indirect_dictionary) New struct.
11226
11227         * vars-atr.c: (find_variable) Rewritten for efficiency.
11228         (make_indirect_dictionary, is_dict_varname, parse_dict_variable)
11229         New functions.
11230         (is_varname) Rewritten for efficiency.
11231         (parse_variables) New argument, which is a `dictionary *'.  All
11232         references changed.  This function now reads variable names from
11233         the dictionary passed, or from the default dictionary if NULL.
11234
11235 Tue Nov  5 18:34:59 1996  Ben Pfaff  <blp@gnu.org>
11236
11237         * misc.h: Added new macro DIV_RND_UP to perform integer division,
11238         rounding up.  Changed many references to ROUND_UP to use this
11239         instead.
11240
11241         * sfm-read.c: Includes avl.h.
11242         (corrupt_msg) Induces a segfault under Checker.
11243         (macro assertive_bufread) New.  Many references to bufread() now
11244         use this instead.
11245         (sfm_read_dictionary) Split up into several functions.  Added code
11246         to read dictionary records following the the type 2 records.  Not
11247         quite complete.  New variable `var_by_index'.
11248         (read_header, read_variables) New functions extracted from
11249         sfm_read_dictionary().
11250         (read_value_labels) New function.
11251         (bufread) Checks ferror() if fread() doesn't return the expected
11252         value; if ferror() is zero it's just EOF.
11253         (dump_dictionary) Stubbed out.
11254
11255         * BTW: The source code now exceeds 50000 lines!
11256         
11257 Mon Nov  4 22:03:28 1996  Ben Pfaff  <blp@gnu.org>
11258
11259         * command.c: Added GET to cmd_table[].
11260
11261         * list.q: Removed reference to alloca headers.
11262         (cmd_list) Gave prototype.
11263
11264         * sfm-read.c: Added DEBUGGING comments.
11265         (sfm_read_dictionary) Checks bias correctly.  Sets
11266         dict->var_by_name to NULL.  Calculates long_string_count
11267         correctly.  realloc's dict->var[] array to minimum size.
11268         [DEBUGGING] Calls dump_dictionary.
11269         [DEBUGGING] (dump_dictionary) New function.
11270
11271         * temporary.c: (save_dictionary) Sets var_by_name to NULL.
11272         (restore_dictionary) If the dictionary contains a non-NULL
11273         var_by_name, uses that instead of generating one.
11274         (free_dictionary) Destroys var_by_name.
11275
11276         * var.h: (struct dictionary) Added field `var_by_name'.
11277
11278         * get.c: New file, not complete.
11279
11280 Sun Nov  3 12:24:36 1996  Ben Pfaff  <blp@gnu.org>
11281
11282         * mis-val.c: New enums MV_NOR_*.  New struct num_or_range.
11283         (parse_num_or_range) New function.
11284         (parse_numeric) Reimplemented in order to support LOW THRU <n> and
11285         <n> THRU HIGH missing values.
11286
11287         * output.h: [__GNUC__>1 && __OPTIMIZE__] (width, height) Made
11288         __attribute__((const)).
11289
11290         * q2c.c: (get_token) Merged isdigit || isalpha into isalnum.
11291
11292         * sfm-read.c: Finished reference implementation.
11293
11294         * sfm.h: Includes var.h.
11295
11296         * var.h: Comment fixes.
11297         (struct `variable') Reordered some fields.
11298
11299         * vars-atr.c: (is_num_user_missing) Added support for MISSING_*
11300         constants added previously.
11301
11302 Wed Oct 30 17:13:08 1996  Ben Pfaff  <blp@gnu.org>
11303
11304         * common.h: Comment fixes.  Added declaration of
11305         `second_lowest_value' as variable or macro.  Made `compat_type',
11306         `pgm_state_type' into anonymous enums.
11307
11308         * display.c: Comment fix.
11309
11310         * glob.c: [ENDIAN==UNKNOWN] Added definition for `endian' global
11311         var.
11312         [!defined SECOND_LOWEST_VALUE] Added definition for
11313         `second_lowest_value' global var.
11314         (compat, pgm_state global vars) Changed types to `int'.
11315         (init_glob) Initializes `second_lowest_value'.
11316
11317         * sfm-read.c: Continued work, not complete.
11318
11319         * var.h: Added new MISSING_* constants to handle LOWEST and
11320         HIGHEST.
11321
11322 Sat Oct 26 23:06:06 1996  Ben Pfaff  <blp@gnu.org>
11323
11324         * sfm-read.c: New file, not complete.
11325
11326         * cases.c: (vec_insert) Changed vector expansion algorithm.
11327         (vec_delete) Fixed bug that screwed up deletion sometimes, it was
11328         mucking up the RECODE transformation in particular.
11329         (envector) Harmless change in notation.
11330
11331         dfm is now fairly well tested again.  
11332         * dfm.c: (dfm_get_record) Only returns ext->ptr if ext is
11333         non-NULL--duh.
11334         (cmd_begin_data) if(ext->line) replaced by if(ext && ext->line).
11335
11336         * recode.c: Comment fix.
11337
11338         * sfm.h: Interface should be fairly final now, or at least for a
11339         day or so...
11340
11341         * vfm.c: [DEBUGGING] (index_to_varname) New function.
11342         (open_active_file) [DEBUGGING] Translates ccase indices into
11343         variable names now to make it easier to understand what's really
11344         going on.
11345
11346 Sat Oct 26 20:46:31 1996  Ben Pfaff  <blp@gnu.org>
11347
11348         * data-in.c: Comment fix.
11349
11350         * data-list.c: Includes dfm.h.
11351         (do_reading) Uses new function dfm_push_cust().
11352
11353         * data-out.c: (convert_time, convert_WKDAY, convert_MONTH) Added
11354         `return 1;' at end.
11355
11356         * file-handle.h: Completely changed.  Some parts split off into
11357         new file dfm.h.  Implemented in file-handle.q.
11358         (enum FH_*) Removed.
11359         (struct fh_ext_class) New struct.
11360         (struct file_handle) Retained only these fields: name, norm_fn,
11361         fn, recform, lrecl, mode.  New fields class, ext.
11362         (get_handle_by_name, get_handle_by_filename, parse_file_handle,
11363         close_handle, handle_name) Added `fh_' prefix to name, all
11364         references changed.
11365
11366         * dfm.h: New file, implemented in dfm.c.
11367         (get_record, put_record, fwd_record, bkwd_record, set_record,
11368         get_cur_col) Functions moved from file-handle.h, now prefixed with
11369         `dfm_'.
11370         (dfm_push_cust) New function.
11371
11372         * sfm.h: New file.  Incomplete.
11373
11374         * dfm.c: All functions adjusted/rewritten for new dfm/fhp
11375         interface.  Functions reordered, comments changed.  Not well
11376         tested, probably full of bugs.
11377         (struct dfm_fhuser_ext) New struct.
11378         (dfm_close) New function.
11379         (open_file_r) Pickier about finding `BEGIN DATA.' line.
11380         (open_file_w) User messages changed.
11381         (get_record) Comment fixed.
11382         (read_record) Increments ext->ln even for inline_file.  Calls
11383         dfm_close() for inline_file when `END DATA.' encountered.
11384         (dfm_get_record) Experimental restructuring.
11385         (dfm_push_cust) New function.
11386         (cmd_begin_data) Detects whether the inline file was fully read by
11387         checking whether it is still open; detects whether it was read at
11388         all by checking whether the line number is greater than zero.
11389
11390         * file-handle.q: All functions adjust/rewritten for new dfm/fhp
11391         interface.  Functions reordered, comments changed.  Not well
11392         tested, probably full of bugs.
11393         (init_file_handle) Removed initializers for obsolete fields, added
11394         new fields.
11395         (fh_close_handle) Much simpler, now mainly calls the class
11396         function.
11397         (fh_init_files) Renamed inline file internal filename.
11398
11399         * file-type.c: Includes dfm.h.
11400         (read_from_file_type) Doesn't use dfm internal state anymore.
11401
11402         * inpt-pgm.c, print.c: Include dfm.h.
11403
11404         * recode.c: (internal_cmd_recode) Casts strlen() return value to
11405         int in comparison with other int.
11406
11407         * som-high.c: (build_target) Fixed operator precedence problem in
11408         if statement (& versus ==).
11409
11410 Sat Oct 26 10:39:25 1996  Ben Pfaff  <blp@gnu.org>
11411
11412         * dfm.c: (read_record) Can now read fixed-length records; not
11413         tested.
11414         (put_record) Can now write fixed-length records; not tested.
11415
11416         * file-handle.h: FH_* defines changed to enums.  New enum series
11417         FH_RF_*, FH_MD_*.
11418         (struct file_handle) New members recform, lrecl, mode.
11419
11420         * file-handle.q: Parser changed.
11421         (internal_cmd_file_handle) Added support for new /RECFORM, /MODE,
11422         /LRECL subcommands.  These are compatible with Windows.
11423         (init_file_handle) Initializes recform, mode fields.
11424
11425         * q2c.c: (get_line) When outputting `!' comment lines, now
11426         increments the output file line number so that `#line' directives
11427         are correct.
11428         (make_identifier) New function that converts an arbitrary string
11429         into a valid C identifier.
11430         (dump_vars) Calls make_identifier() in two places in order to
11431         suppress some errors for bad identifiers.
11432         (make_match) Allows TRUE as synonym for YES and FALSE as synonym
11433         for NO.  Allows numbers to be prefixed by underscores to make them
11434         acceptable C identifiers but still to be parsed as numbers by the
11435         Fiasco lexer.
11436
11437 Thu Oct 24 20:13:42 1996  Ben Pfaff  <blp@gnu.org>
11438
11439         * command.c: Re-enabled RECODE, SAMPLE, SELECT IF.
11440         
11441         * dfm.c: Comment fixes. (get_record) Gives error if file handle
11442         was opened for writing.
11443         (open_file_w) New function.
11444         (read_record) Uses strncasecmp if available.  Improved error
11445         messages, comments.
11446         (put_record) New function.
11447
11448         * file-handle.h: Moved function comments into dfm.c and
11449         file-handle.q.  Comment fixes.  Removed declarations of
11450         tilde_expand() and normalize_filename().
11451         (struct file_handle) Changed `open' from boolean to enumerated
11452         field to allow for three states--closed, open for reading, open
11453         for writing--all references changed.
11454
11455         * file-handle.q: Includes filename.h.
11456
11457         * print.c: (CMD_* enums) Renamed PRT_* and moved into var.h; all
11458         references changed.
11459         (alloc_line) Makes allowance for line terminator characters in
11460         calculations.
11461         (print_trns_proc) Now handles OUTFILE, WRITE differences.
11462         (print_space_trns_proc) Handles OUTFILE differences.
11463
11464         * recode.c, sample.c: Comment fixes.
11465
11466         * var.h: (struct print_trns) Changed boolean field `eject' to
11467         bitmapped field `options'; all references changed.  New enums
11468         PRT_* for use with this field.
11469
11470         * exception.h, test-exception.c: Removed.
11471
11472 Thu Oct 24 17:47:14 1996  Ben Pfaff  <blp@gnu.org>
11473
11474         * ascii.c: (delineate) Turned off debug output.
11475
11476         * common.c: [Checker and Linux] (__assert_fail, __eprintf) Moved
11477         to error.c.
11478
11479         * data-in.c: (parse_string_as_format) Sets the entire string value
11480         to spaces, not just the short string part of it.  Is this correct
11481         now? 
11482
11483         * data-out.c: (convert_date) Fixed DATETIME format problems with
11484         decimal places, removed debug code.
11485
11486         * dfm.c: (open_file_r) Fixed bug where an error would occur in the
11487         middle of parsing BEGIN DATA that would cause the lexer to read
11488         from a wild pointer `prog'; now calls new function
11489         preprocess_line() in lexer.c.
11490
11491         * error.c: [__CHECKER__] (hcf) Calls induce_segfault() on improper
11492         termination.
11493         [Checker and Linux] (__assert_fail, _eprintf) Moved from common.c.
11494         Now call induce_segfault() to induce the segfault.
11495         (induce_segfault) New function.
11496
11497         * expr-opt.c: Comment fix.
11498         (parse_sysvar) New function.
11499         (parse_primary) Added system variable support--calls
11500         parse_sysvar().
11501         (global var ops) Added OP_CASENUM operator.
11502
11503         * expr.h: Comment fixes.
11504         (OP_* enum) added OP_CASENUM operator.
11505         (struct casenum_node) New struct.
11506         (union any_union_union) New member `cas' of type `casenum_node'.
11507
11508         * glob.c: (global var last_vfm_invocation) New var.
11509         (init_glob) Initializes last_vfm_invocation.
11510
11511         * lexer.c: (lookahead) Fixed reversed condition on if statement.
11512
11513         * getline.c: (get_line) Split into get_line() and preprocess_line().
11514         (preprocess_line) New function.
11515
11516         * var.h: Declares last_vfm_invocation.
11517
11518         * vfm.c: (procedure) Sets last_vfm_invocation.
11519
11520 Wed Oct 23 21:53:43 1996  Ben Pfaff  <blp@gnu.org>
11521
11522         * command.c: (parse_cmd) Fixed bad assertion related to
11523         lookahead().
11524
11525         * data-in.c: (parse_month) Implemented to parse months according
11526         to full interpretation of standard.
11527         (to_roman) New function.
11528         (parse_wk_delimiter) Bug fix (forgot to skip `WK' in string).
11529         (parse_weekday) Bug fix (forgot to skip all the day name).
11530
11531         * data-list.c: (read_from_data_list_fixed) Fixed bug that screwed
11532         up parsing of multirecord data items.  Also fixed user message.
11533
11534         * data-out.c: Comment fix.
11535         (year2, year4, convert_date, convert_time, convert_WKDAY,
11536         convert_MONTH) New functions to support time & date output.
11537         (convert_format_to_string) Calls new time & date output routines.
11538
11539         * expr-prs.c: (nary_num_func) Found a bug, but didn't fix it yet.
11540
11541         * lexer.c: (lookahead) Noted a previously unnoticed caveat in
11542         comment.
11543
11544         * main.c: [DEBUGGING] (dump_token) Updated to handle getline.h.
11545
11546         * misc.c: (global var formats) Fixed declarations of DATETIME,
11547         TIME, DTIME.
11548
11549         * postscript.c: (text) Fixed a pair of bugs in the reallocation of
11550         the output_char buffer.
11551
11552         * vars-prs.c: (parse_DATA_LIST_vars) Fixed a failure to free
11553         memory bug.  Fixed user messages.
11554
11555 Tue Oct 22 17:27:04 1996  Ben Pfaff  <blp@gnu.org>
11556
11557         * Removed #pragma argsused from lots of places.
11558         
11559         * data-in.c: Implemented zoned decimal and time-date formats.
11560         Untested.  This is a huge chunk of code--maybe 1000 lines and 50
11561         new functions.
11562
11563         * data-out.c: Implemented zoned decimal format.
11564
11565         * expr.h: Moved yrmoda() declaration here from exprP.h.
11566
11567         * misc.c: (global var formats) Minor fixes--added
11568         FCAT_SHIFT_DECIMAL to formats N and Z.
11569         (convert_fmt_ItoO) Added support for format Z.
11570
11571         * som-frnt.c: (som_set_value) Fixed bug regarding string values.
11572
11573 Mon Oct 21 20:39:59 1996  Ben Pfaff  <blp@gnu.org>
11574
11575         * command.c: (parse_cmd) [GLOBAL_DEBUGGING] Inserted call to
11576         som_check_workspace() that is activated between commands.
11577
11578         * data-list.c: (dump_fixed_table, dump_free_table) Finished these
11579         for good, I hope.
11580
11581         * list.q: (begin_row) Changed title expansion style from
11582         SOPT_X_VERT to SOPT_X_SHSP.
11583
11584         * som-frnt.c: Now includes `somP.h'.
11585         (som_push_workspace, som_pop_workspace) New functions that, taken
11586         together, form a solution to the recursive table building problem
11587         mentioned yesterday.  Surrounded every table output routine
11588         throughout the program with calls to these functions.
11589         [GLOBAL_DEBUGGING] (som_check_workspace) New function.
11590         (som_create_table) Checks that there's an active workspace.
11591         (som_destroy_all_tables, som_crush) Removed.
11592
11593         * som-high.c: (global var som_preserve_tables) Removed, all
11594         references deleted.
11595         (som_submit_table) Checks that there's an active workspace.
11596         (dump_columnated_table) Doesn't columnate tables that would have
11597         just one row per column.
11598         (dump_crush_page, som_dump_crush_page) Removed debugging code.
11599         (som_dump_crush_page) Moved row number labels from left side of
11600         tables to right side.
11601         (som_get_table_size) Added support for SOPT_X_SHSP.
11602
11603         * som.h: New cell expansion type SOPT_X_SHSP.
11604
11605         * somP.h: (global vars arena_stack, n_arena_stack, m_arena_stack)
11606         New vars.
11607         (global var curtab_arena) Moved from som-frnt.c.
11608
11609 Sun Oct 20 13:45:28 1996  Ben Pfaff  <blp@gnu.org>
11610
11611         * ascii.c: [GLOBAL_DEBUGGING] (SUPPRESS_WARNINGS) New debug option
11612         that causes bad location warnings to be suppressed.
11613         (delineate) Saves current font when calling draw_text(); fixed
11614         handling of NULLs when backing up.  Also fixed line-wrapping bug.
11615
11616         * command.c: Re-enabled `LEAVE', `NUMERIC', `PRINT', `PRINT EJECT',
11617         `PRINT FORMATS', `PRINT SPACE', `STRING', `TITLE', `WRITE'.
11618
11619         * common.c: Added code to cause assertion failure to dump core
11620         when run under Checker.
11621
11622         * data-list.c: (dump_fixed_table) Fixed some inconsistencies, but
11623         there are still bugs.
11624
11625         * glob.c: (__eprintf) Removed.
11626
11627         * list.q: Inserted som_preserve_tables kluge that prevents tables
11628         from being thrown away due to recursive table building through
11629         som_output_line being called from a transformation during the LIST
11630         procedure invocation.  This is a general problem that must be
11631         solved in a better way since it applies to all procedures in
11632         general.
11633         (begin_row) Changed title options to SOM_X_VERT from SOM_X_BOTH.
11634         (flush_table) Removed SOM_TOPT_PRESERVE from submission options.
11635
11636         * numeric.c: Fixed several errors in the form of msg() calls.
11637
11638         * print.c: Updated for use of som.
11639         (dump_table) Reimplemented.
11640         (print_trns_proc) Calls som_eject_page() instead of eject_page().
11641         Calls som_output_text() instead of outs_line().
11642
11643         * som-frnt.c: (som_destroy_all_tables) Sets som_preserve_tables to
11644         0.
11645         (som_output_text) Function moved from som-low.c.  Interface
11646         changed.
11647
11648         * som-high.c: (som_preserve_tables) New global public variable
11649         declared in som.h.
11650         (som_submit_table) Destroys the tables only if som_preserve_tables
11651         is 0.
11652         (paginate_horizontally) Bugfix: sets som.mpw even if there's only
11653         one subrow per row.  Now labels subrows if there's more than one
11654         subrow per row.
11655         (dump_crush_table) Added wishlist comment.
11656         (som_eject_page) New public function declared in som.h.
11657
11658         * som-low.c: (som_dump_crush_page) Draws row labels if there's
11659         more than one subrow per row.
11660         (som_output_text) Moved to som-frnt.c.
11661
11662         * som.h: (SOM_TOPT_PRESERVE) Removed.
11663
11664         * title.c: (get_title) Changed interface.
11665         (cmd_title) Changed `title' to `outp_title'.
11666         (cmd_subtitle) Changed `subtitle' to `outp_subtitle'.
11667
11668 Sun Oct 20 09:04:15 1996  Ben Pfaff  <blp@gnu.org>
11669
11670         * list.q: (flush_table) Conforms to new partial options in
11671         som_submission_form.
11672
11673         * som-high.c: (paginate_horizontally) Changed form of subrow
11674         number labels.
11675         (build_target) Omits spacing before table if
11676         SOM_TOPT_PARTIAL_OMIT_TOP is selected.
11677         (dump_crush_page) Changed interface.  Only trims bottom rule if
11678         SOM_TOPT_PARTIAL_OMIT_BTM is not selected.
11679         (dump_crush_table) Handles partial tables.
11680         (output_row_label) New function.
11681         (som_dump_crush_page) Emits subrow number labels.  Draws vertical
11682         rule on the right edge of narrow subrows.
11683
11684         * som.h: Changed SOM_SUB_PARTIAL_* series of submission type
11685         constants to a series of SOM_TOPT_PARTIAL_* submission options.
11686         All references updated.
11687
11688 Fri Oct 18 19:46:49 1996  Ben Pfaff  <blp@gnu.org>
11689
11690         * misc.c: Comment fix.
11691
11692         * som-high.c: (examine_table) Treats crushed tables separates for
11693         purpose of determining header size.
11694         (paginate_horizontally) Allots space for line numbers in crushed
11695         tables with lots of subrows per row.  Calculates the `maximum page
11696         width', the width of the widest horizontal page.
11697         (build_target) Removed trim argument; all references changed.
11698         Stricter assertions.  (dump_crush_page) New function.
11699         (dump_crush_table) Reimplemented.
11700
11701         * som-low.c: (som_dump_page) Uses new RULE_ROW &c. constants.
11702         (som_dump_crush_page) Reimplemented, interface changed.
11703
11704         * somP.h: Many many new helper macros for use with crushed tables.
11705         (global var som) Removed `tv', `cum_y' members; all references
11706         removed.  New members `mpw', `digit_space'.
11707
11708 Sun Sep 29 19:37:03 1996  Ben Pfaff  <blp@gnu.org>
11709
11710         * arena.c: (arena_alloc) [!DISCRETE_BLOCKS] Removed `size'
11711         variable, changed to constant 1024.
11712         (arena_ca_strdup) Changed `sizeof(a_string)' to
11713         `sizeof(c_string)'.
11714         (arena_ca_strdup) [!DISCRETE_BLOCKS] Changed bad cast from
11715         `(c_string *)' to `(char *)'; this fixed some offset problems.
11716
11717         * filename.c: (readlink_malloc) Changed initial allocation from
11718         100 bytes to 128.
11719         (good_getcwd) Changed from xmalloc() to local_alloc(); removed
11720         comment.
11721
11722         * postscript.c: (read_fontmap) Fixed leak by changing &owner to
11723         &fm->owner in several places.
11724
11725         * som-high.c: (output_table) Changed interface to rest of world.
11726         (examine_crush_table) Removed.  Crushed tables are re-broken now,
11727         in preparation for rewrite.
11728
11729         * som.h: Comment fix.
11730
11731 Sat Sep 28 21:28:07 1996  Ben Pfaff  <blp@gnu.org>
11732
11733         * ascii.c: (ascii_init_driver) Disposes of x->file.filename and x
11734         itself in the cleanup stage.
11735
11736         * descript.q: (display) At least temporarily, changed the table
11737         format to a crushed table.
11738
11739         * list.q: (begin_row) At least temporarily, added horizontal lines
11740         between cases.
11741
11742         * som-high.c: (examine_crush_table) Sets som.hh to the width of
11743         the horizontal "headers," that is, to the width of the far left
11744         and far right rules.
11745         (justify_pagination) Sets som.th to the width of the widest row
11746         in the crushed table.  Fixed inner loop off-by-one error.
11747
11748         * som-low.c: (som_dump_crush_page) Added code to draw horizontal
11749         rules.
11750
11751         * somP.h: Comment fix.
11752
11753 Fri Sep 27 20:08:39 1996  Ben Pfaff  <blp@gnu.org>
11754
11755         * filename.c: (open_file_ext) Now, doesn't set f->file to NULL
11756         before closing it; also, opens the constructed filename `s'
11757         instead of f->filename.
11758
11759         * postscript.c: Moved initialization of x->loaded, x->prop,
11760         x->fixed, x->current, also the add_encoding() calls, into
11761         postopen().
11762         (preclose) Destroys x->combos; sets x->loaded, x->combos to NULL;
11763         sets x->last_font to NULL; sets x->next_combo to zero.
11764
11765         * som-high.c: (crushed_row_height) Moved definition farther up.
11766         (som_submit_table) Doesn't calculate line width, font size until
11767         after calling open_page(), to accomodate changes to PostScript
11768         driver.
11769         (vert_headers) Removed; equivalent functionality moved to
11770         examine_table(), examine_crush_table().
11771         (justify_pagination) Replaced with different algorithm.
11772         (dump_crush_table) Bugfix that caused tables to fail to be clipped
11773         at the bottom of the page.
11774
11775 Thu Sep 26 22:20:26 1996  Ben Pfaff  <blp@gnu.org>
11776
11777         * command.c: Added cmd_list back into cmd_table.
11778
11779         * freq.c, frequencies.q, repeat.c, list.q, vars-atr.c, vfm.c:
11780         Comment fix: `#define DEBUGGING' --> `#define DEBUGGING 1'.
11781
11782         * list.q: (flush_table) Updated to new som_submission_form format.
11783
11784         * som-frnt.c: Comment fix.
11785
11786         * som-high.c: Changed `#endif' to `#undef EXTERN'.
11787         (output_table) Calls som_get_table_size() directly; handles
11788         crushed tables.
11789         (examine_crush_table) New function; calls vert_headers().
11790         (examine_table) Moved some code into new function, vert_headers().
11791         (justify_pagination) New function.
11792         (dump_plain_table) Removed `static' from `cy'.
11793         (dump_crush_table) New function.
11794
11795         * som-low.c: (som_dump_crush_page) New function.
11796
11797         * som.h: Comment fixes.
11798         (enum SOM_TOPT_CRUSH) New.
11799         (SOM_SUB_PARTIAL_BEG, SOM_SUB_PARTIAL_MID, SOM_SUB_PARTIAL_END)
11800         Temporarily set to zero to make do with LIST procedure.
11801
11802         * somP.h: Re-ordering.
11803
11804 Wed Sep 25 19:36:11 1996  Ben Pfaff  <blp@gnu.org>
11805
11806         * som.c: Split into som-frnt.c, som-high.c, som-low.c.
11807
11808         * somP.h: New file for use by som-high.c, som-low.c.
11809
11810         * q2c.c: Added definition for VME.
11811         (get_line) Now dumps `!' comment lines to the output file
11812         verbatim.
11813
11814         * crosstabs.q, descript.q, file-handle.q, frequencies.q, list.q,
11815         set.q: Changed format of `!' comment lines.
11816
11817 Tue Sep 24 18:39:09 1996  Ben Pfaff  <blp@gnu.org>
11818
11819         * All source files: Added copyright notice.
11820
11821         * common.c: (xmalloc, xrealloc, xstrdup) Cast size_t's to unsigned
11822         longs in msg() calls.
11823
11824         * con32s.c: (xmalloc, xrealloc) Updated from common.c.
11825
11826         * q2c.c: (xmalloc, xrealloc, xstrdup) Updated from common.c.
11827
11828 Sat Sep 21 23:16:31 1996  Ben Pfaff  <blp@gnu.org>
11829
11830         * output.c: (outp_read_devices) Changed criteria for
11831         distinguishing different types of lines.
11832
11833 Fri Sep 20 22:52:28 1996  Ben Pfaff  <blp@gnu.org>
11834
11835         * cmdline.c: Changed syntax message.
11836
11837         * filename.c: (good_getcwd) Bug fix (?).
11838         (normalize_filename) [__BORLANDC__] Uses _fullpath() library
11839         function.
11840         (search_path) Appends DIR_SEPARATOR to directory name only if it
11841         does not already end with one.
11842
11843         * glob.c: Checks STAT_PAGER envvar before PAGER.
11844
11845         * output.c: Checks environment variables instead of just local
11846         macros.
11847
11848 Tue Sep 10 21:39:00 1996  Ben Pfaff  <blp@gnu.org>
11849
11850         * arena.c: (arena_destroy) Swatted a subtle bug that cropped up
11851         when the pointer passed to the function was within the arena
11852         itself, so that it couldn't properly be set to NULL _after the
11853         arena was freed_.
11854
11855         * command.c: Re-enabled DISPLAY.
11856
11857         * display.c: Rewritten to handle tables.  Untested.
11858
11859         * filename.c: (search_path) Fixed memory leak.
11860
11861         * frequencies.q: (cmd_frequencies) Frees v_variables.
11862         (postcalc) Calls cleanup_freq_tab() after displaying statistics.
11863         (cleanup_freq_tab) New function to garbage collect.
11864         (dump_full) Elegantized.
11865
11866         * main.c: New comment.
11867
11868         * output.h: New tag for tagged quotes: TAG_NEWLINE.
11869
11870         * postscript.c: Comment fix.
11871         (release_fontmap, free_font_entry) New functions.
11872         (ps_init_driver) Sets free_font_entry() as the freefunc for
11873         hashtable `loaded'.  Calls release_fontmap() when destroying a
11874         driver; also frees the output filename; also frees the
11875         ps_driver_ext block.
11876         (free_ps_encoding) Frees the filename as well as the encoding
11877         block.
11878         (output_encodings) Frees the line buffer and pops the msg-filename
11879         stack.
11880         (read_fontmap) Frees the fontmap filename and the line buffer.
11881         (postopen, preclose) Misc. garbage collection fixes.
11882         (ps_open_page) Destroys the `combos' hash table; sets `last_font'
11883         to NULL; this fixes some output problems.
11884         (text) Handles TAG_NEWLINE.  Untested.
11885
11886         * som.c: (cell_byte_size) Merged SCON_VALUE and SCON_TEXT cases.
11887         (som_set_string) Removed.  All references changed to
11888         `som_set_text'.
11889         (som_set_text) Rewritten.  New interface.  More general.
11890
11891         * som.h: Minor format changes.
11892         (struct som_value_cell) Removed; all references changed to
11893         `som_text_cell'.
11894         (enums SOT_*) Changed.
11895
11896 Mon Sep  9 21:43:13 1996  Ben Pfaff  <blp@gnu.org>
11897
11898         * command.c: Re-enabled SPLIT FILE.
11899
11900         * postscript.c: Comment fix.
11901
11902         * som.h: Added `SOT_NONE'.
11903
11904         * split-file.h: (cmd_split_file) Removed superfluous parenthesis.
11905
11906         * vfm.c: (dump_splits) Reimplemented.
11907
11908 Sat Sep  7 22:35:12 1996  Ben Pfaff  <blp@gnu.org>
11909
11910         * Compiled the project under gcc 2.7.2, which gave some new
11911         warnings.  This led to many additions of casts from unsigned to
11912         int sprinkled throughout the code.
11913         
11914         * arena.c: Many uses of `unsigned' changed to `size_t'.
11915
11916         * command.c: Added END FILE, END REPEAT to command table.
11917         (var cmd_end_repeat) Renamed cmd_end_repeat_p.
11918         (find_command, FILE_TYPE_okay) Not commented out anymore.
11919         (parse_cmd) Calls FILE_TYPE_okay again.
11920         (output_line) Added calls to som_output_text() to put the line
11921         in the output files.
11922
11923         * common.c: (macro VME) Format changes.
11924         (xstrdup) Asserts that its argument is not NULL.
11925         
11926         * data-list.c: Implemented dump_fixed_table().
11927         
11928         * inpt-pgm.c: Formatting changes.  Comment changes.
11929         (end_case_proc) Renamed end_case_trns_proc.
11930         (cmd_end_file, end_file_trns_proc) New functions.
11931
11932         * misc.c: Many uses of `int' and `unsigned' changed to `size_t'.
11933
11934         * misc.h: (local_strdup) New macro corresponding to strdup() but
11935         allocating its data through local_alloc() if possible--that is, if
11936         GNU C is in use.
11937
11938         * postscript.c: Comment changes.
11939         (quote_ps_name, quote_ps_string, output_encodings) New functions.
11940         (output_line, add_string) New macros supporting
11941         output_encodings().
11942         (postopen) Fixed contents of ${fixed-font} and ${prop-font}
11943         substitution vars.  Calls output_encodings() when a line
11944         consisting of `!encodings' is encountered.
11945         (preclose) Some code moved into quote_ps_string().
11946         (dump_line) Changed into macro supporting dump_fancy_line().
11947         (switch_font) Now outputs DSC "%%IncludeResource: font (...)"
11948         command when appropriate.
11949         (write_text) Fixed `literal_char' array (I think it's fixed, at
11950         least.)
11951         (text) Fixed bug when width was zero.  Now exits immediately on
11952         zero height_left.  Now, when executing `goto restart;', checks
11953         that cp<end, so that we don't read beyond end-of-string.  Also,
11954         outputs the correct code to the output file by outputting the code
11955         from the metric instead of the internal metric index.
11956
11957         * repeat.c: (cmd_end_repeat) New function.
11958
11959         * som.c: (var som) `headers' renamed `options' and semantics
11960         changed.  All references changed.
11961         (draw_title) `if(px!=-1 || px!=-1)' --> `if(px!=-1 || py!=-1)'.
11962         (build_target) Only inserts spacing if SOM_TOPT_SPACING not
11963         selected.
11964         (som_text_table) Removed.
11965         (som_output_text) New function.
11966
11967         * som.h: (struct som_submission_form) Removed `header', `reuse',
11968         replaced with bitmapped field `options'.
11969         (SOM_TOPT_*) New enum set for som_submission_form.options.
11970         (SOT_*) New enum set for som_output_text().
11971
11972         * temporary.c: (copy_variable) When copying the var label, only
11973         calls xstrdup() if it's non-NULL.
11974
11975         * var.h: (enum type `vartype') Removed; all references changed to
11976         `int'.
11977
11978         * vars-atr.c: (init_variable) Changed local var `nbytes' from
11979         `int' to `size_t'.
11980
11981 Thu Sep  5 22:05:56 1996  Ben Pfaff  <blp@gnu.org>
11982
11983         * font.h: Comment changes.
11984
11985         * groff-font.c: (groff_read_font) Initializes `name' field to
11986         NULL.  Handles `encoding' field.
11987
11988         * hash.c: (hsh_dump) [GLOBAL_DEBUGGING] Output formatting changes.
11989
11990         * postscript.c: (struct font_entry) Removed `position' field.
11991         (struct ps_font_combo) New struct.
11992         (struct ps_driver_ext) Removed field `next_position'.  New fields
11993         `combos', `next_combo'.  `last_font' field changed from
11994         `font_entry *' to `ps_font_combo *'.
11995         (ps_init_driver) Reformatted; handles new fields.  When
11996         OPO_AUTO_ENCODE is set, adds the two default fonts' encodings to
11997         the encoding list.
11998         (get_encoding, find_encoding_file) New functions.
11999         (add_encoding) Some code moved out into find_encoding_file().
12000         (postopen) Changed value for ${title}.
12001         (preclose) Sets `loaded' field to NULL after destroying the hash
12002         table.
12003         (ps_open_page) Added comment.  Inits the `combos' and `next_combo'
12004         fields.
12005         (ps_text_set_font_by_position) Figures out the current family if
12006         not known.
12007         (compare_ps_combo, hash_ps_combo, free_ps_combo) New functions.
12008         (switch_font) Implemented.
12009         (write_text) Calls switch_font() more often.  Format changes.
12010         #undefs its macros after they're no longer useful.
12011         (text) Changed `continue' at one point to a jump to the top of the
12012         loop because we don't want `separate' reset to 0 at that point.
12013         (load_font) No longer sets `position' in the font_entry created.
12014
12015 Wed Sep  4 21:45:35 1996  Ben Pfaff  <blp@gnu.org>
12016
12017         * font.h: (struct font_desc) New member `encoding', which is not
12018         properly handled yet.
12019
12020         * glob.c: (init_glob) Some new i18n code, which is probably
12021         screwed up.
12022
12023         * output.c: (outp_read_devices, outp_get_paper_size) Changed
12024         `size' local from `int' to `size_t'.
12025
12026         * postscript.c: New driver configuration parameter `auto-encode'.
12027         New enums OPO_AUTO_ENCODE, ODA_COUNT.
12028         (struct font_entry) New member `position'.
12029         (struct ps_driver_ext) Reordered.  New hash table member
12030         `encodings'; new members `next_position', `next_encoding',
12031         `last_font'.  Members `current', `prop', `fixed' changed from type
12032         `font_desc *' to `font_entry *'; all references changed.
12033         (struct ps_encoding) New struct.
12034         (read_ps_encodings, compare_ps_encoding, hash_ps_encoding,
12035         free_ps_encoding, add_encoding) New functions.
12036         (ps_init_driver) Added OPO_AUTO_ENCODE to default
12037         x->output_options.  Initializes new members of ps_driver_ext.
12038         Changed default value for prologue_fn, encoding_fn.  Calls
12039         read_ps_encodings after loading default fonts.
12040         (option_tab[], ps_option) Handle new configuration parameter.
12041         (switch_font) New function.
12042         (struct output_char) `font' member changed from `font_desc *' to
12043         `font_entry *'.  New member `separate'.
12044         (read_fontmap) Changed `size' from `int' to `size_t'.
12045         (output_line, put_number) New macros for write_text().
12046         (write_text) Optimizes text output by consolidating multiple
12047         calls to PostScript `show' operator.
12048         (text) Keeps track of when text arguments can't be consolidated by
12049         write_text(), and marks those spots in the output stream.
12050         (load_font) Sets `position' of the allocated font_entry to -1, cuz
12051         the font hasn't been switched to by switch_font(), which is where
12052         the position is important--the PostScript is what cares about the
12053         position.
12054
12055 Sat Aug 31 23:52:38 1996  Ben Pfaff  <blp@gnu.org>
12056
12057         * hash.c: (hsh_destroy) Ignores NULL argument.  Doesn't try to
12058         call a NULL free_func.
12059         (hsh_rehash) Elegantized.
12060         (hsh_probe) Fix bug that manifested when the table was expanded
12061         and thus had to change location in memory.  Good thing
12062         too--otherwise could have been much more subtle.
12063         (hsh_find) [GLOBAL_DEBUGGING] Not stubbed out anymore.
12064         (hsh_foreach) New function for hash table iteration.
12065
12066         * hash.h: (struct hsh_iterator) New.
12067
12068         * lexer.c: (parse_tagged_quote) Font and family name strings in
12069         tags are now null-terminated.
12070
12071         * output.c: (outp_evaluate_dimension) Fixed over-aggressive unit
12072         parsing.
12073         (internal_get_paper_size, outp_get_paper_size) Fixed; now work as
12074         documented.  (Never before tested?)
12075
12076         * output.h: Comment changes.
12077
12078         * postscript.c: New driver options `optimize-text-size',
12079         `optimize-line-size', `max-fonts-simult'.  New enum set for
12080         specing cached line types.  Comment fixes.
12081         (struct line_form) New struct.
12082         (struct ps_driver_struct) New members `text_opt', `line_opt',
12083         `max_fonts', `lines'.
12084         (ps_init_driver) Initializes new members of ps_driver_struct.
12085         (user option type enum set) New member `nonneg_int_arg'.
12086         (static var option_tab[]) Supports new options.
12087         (ps_option) Handles new options.
12088         (find_ps_file) Made static.  No longer calls hsh_dump().
12089         (ps_get_var) Made static.
12090         (preclose) Dumps out proper DSC trailer.
12091         (ps_open_page) Elegantized.
12092         (ps_close_page) Calls dump_lines() if appropriate.
12093         (ps_line_horz, ps_line_vert, ps_line_intersection) Reduced to
12094         wrappers around line().
12095         (int_2_compare, compare_line, dump_line, dump_fancy_line,
12096         dump_lines, hash_line, free_line, line) New functions for support
12097         of line caching.
12098         (write_text, text) Made static.
12099         (text) Added to font support, not finished.
12100
12101 Thu Aug 29 21:36:41 1996  Ben Pfaff  <blp@gnu.org>
12102
12103         * font.h: (struct font_desc) New members ascent, descent.
12104
12105         * groff-font.c: (groff_read_font) Calculates font ascent and
12106         descent from the ascent and descent of the `d' and `p' characters,
12107         respectively, as per a suggestion on comp.fonts.
12108
12109         * postscript.c: (ps_open_page, ps_close_page, ps_line_horz,
12110         ps_line_vert, ps_line_intersection) Rewritten to deal with changed
12111         prologue.
12112         (write_text) Handles text right-justification and centering (not
12113         full justification).  Still very inefficient.  (One output line
12114         per character?!)
12115         (struct output_char) Added fields for font and font size.
12116         (text) Many bugfixes.
12117
12118 Sat Aug 24 23:26:00 1996  Ben Pfaff  <blp@gnu.org>
12119
12120         * cmdline.c: (usage) Calls outp_list_classes().
12121
12122         * font.h: Comment fix.
12123
12124         * groff-font.c: New exported global var `space_index'.
12125         (groff_init) New function to initialize `space_index'.
12126         (hash_kern) Casts result to unsigned.
12127         (font_name_to_index) Renamed font_char_name_to_index.  All
12128         references changed.  Also, now returns the value of `space_index'
12129         when passed an ASCII space character as an argument.  Fixed
12130         handling of nulls.
12131         (font_get_kern_adjust) Changed i from `int' to `unsigned'.
12132         Handles passed NULL pointers properly.
12133
12134         * lexer.c: (parse_tagged_quote) Comment fix.  Better range
12135         checking.
12136
12137         * output.c: (outp_list_drivers) Removed.  Removed all references.
12138         
12139         * output.h: Comment fixes.
12140
12141         * postscript.c: (ps_open_global) Calls groff_init().
12142         (output_char) New structure.
12143         (write_text) New function.
12144         (text) No longer stubbed out!  Now the output is correct--with a
12145         few exceptions, one of them being that the page has to be held
12146         upside down into a mirror.
12147
12148 Sun Aug 11 21:31:22 1996  Ben Pfaff  <blp@gnu.org>
12149
12150         * font.h: Comment fix.
12151         
12152         * font.c: (name_to_index) Renamed font_name_to_index, made extern.
12153         All callers changed.
12154         (number_to_index) Renamed font_number_to_index, made extern.  All
12155         callers changed.
12156         (font_get_kern_adjust, font_get_char_metrics) New functions.
12157
12158         * output.h: New constant OUTP_T_INTERNAL_DRAW.
12159
12160         * postscript.c: Changed default line width back to 1/2 point.
12161         (ps_line_horz, ps_line_vert, ps_line_intersection) Now lines are
12162         in the center of the space allotted for them, not just a fixed
12163         offset from the edge of the space; this fixes some bugs.
12164         (ps_line_intersection) Now supports all command line styles.
12165         (ps_text_get_size) Bug fix in computation of em width.
12166         (text) New function, the meat behind ps_text_metrics and
12167         ps_text_draw.  Not complete.
12168         (ps_text_metrics, ps_text_draw) Removed the stub taken from
12169         ascii.c; call text().
12170
12171 Sat Aug 10 23:28:17 1996  Ben Pfaff  <blp@gnu.org>
12172
12173         * arena.c: (arena_free) Assert that the argument is non-NULL.
12174         
12175         * groff-font.c: (add_kern) Calls arena_free() for old_kern if and
12176         only if old_kern is non-NULL.
12177
12178         * postscript.c: (ps_init_driver) Changed default line width to 1
12179         point.
12180         (postopen) New prologue variables.
12181         (ps_line_horz, ps_line_vert, ps_line_intersection) Implements some
12182         more of the common line styles properly, but not all.
12183         (ps_text_metrics) Fixed problem with this stubbed out version that
12184         kept it from taking font sizes into account.
12185
12186 Thu Aug  8 22:31:11 1996  Ben Pfaff  <blp@gnu.org>
12187
12188         * arena.c: (arena_malloc) Bug fix.
12189         (arena_dump) [GLOBAL_DEBUGGING] New function.
12190
12191         * ascii.c: Comment fix.
12192         (count_fancy_chars, delineate) Now static functions.
12193         
12194         * filename.c: (interp_vars) Bug fixes.
12195
12196         * font.h: Comment fixes.
12197
12198         * glob.c: (init_glob) Sets set_viewwidth, set_viewlength at
12199         beginning in case we have an error message to display before
12200         initializing the display.
12201
12202         * groff-font.c: Comment fix.  Changed rehash threshold from 2/3
12203         full to 1/2 full.
12204         (groff_read_font) Bug fixes.
12205         (name_to_index) Increments hash.used.  Sets `name' field of hash
12206         entry properly.
12207         (add_kern) Sets kern_max_used after rehashing.  Other bug fixes.
12208
12209         * hash.c: Return type changed.
12210
12211         * postscript.c: Continued development.  Now marks lines on the
12212         paper, but very buggy.
12213
12214 Sat Aug  3 20:50:35 1996  Ben Pfaff  <blp@gnu.org>
12215
12216         * Changed comments in many source files from `/* xxx /* yyy */' to
12217         `/* xxx */ /* yyy */' for cleanliness.
12218
12219         * arena.c: (arena_sd_strdup) New function.
12220         
12221         * ascii.c: (struct ascii_driver_ext) New member `file'.
12222         (ascii_init_driver) Fills out member `file' for initing; uses
12223         close_file_ext for closing drivers.
12224         (ascii_option) Changed %.*s back to %s because the a_string's are
12225         always null-terminated.
12226         (postopen, preclose) New functions.
12227         (ascii_open_page) Uses new style of open_file_ext.
12228         (ascii_option, commit_line_buf, output_lines) Use ext->file.file
12229         instead of this->output.
12230         (__assert_fail) Removed.
12231
12232         * cmdline.c: Changed syntax_message[].
12233
12234         * error.c: #include's <readline/history.h> only if the history
12235         library is available, not if just the readline library is
12236         available.
12237
12238         * filename.c: (expand_line) Removed alloca() support.
12239         (interp_vars) No longer tilde-expands argument.  Limit on output
12240         length removed.
12241         (tilde_expand) Now treats argument as path rather than filename.
12242         [!unix] Now is a no-op function.
12243         (search_path) Better verbose message formatting.
12244         (open_file, close_file) Comment fixes.
12245         (close_file) [!unix] Doesn't bother with pipes.
12246         (open_file_ext) Completely rewritten, interface revamped.
12247         (close_file_ext) New function.
12248
12249         * font.h: Comment changes.
12250
12251         * frequencies.q: Removed AIX alloca support since it doesn't use
12252         alloca.
12253
12254         * hash.c: Comment changes & additions.
12255         (hsh_create) Initializes entire table instead of first M entries.
12256         (hsh_probe) Stupid bug fixed.  Now it works.
12257         (hsh_dump) [GLOBAL_DEBUGGING] New function.
12258
12259         * main.c: (parse) Detects EOF properly in token-eating loop.
12260         Should the STOP token have its value changed to 0?
12261
12262         * misc.c: (blp_getdelim) [HAVE_GETDELIM] Now it's a macro.
12263         (blp_getline) Now it's a macro.
12264
12265         * output.h: (struct outp_driver) Removed members output, filename.
12266         
12267         * output.c: (outp_init) [!NO_POSTSCRIPT] Installs PostScript
12268         drivers in driver table.
12269         (outp_read_devices) Frees buf.  Warns if there are no active
12270         output drivers.
12271         (outp_configure_clear) Sets outp_configure_vec to NULL after
12272         deleting its elements.
12273         (configure_driver, destroy_driver) Removed references to output,
12274         filename members of outp_driver.
12275         (outp_evaluate_dimension, internal_get_paper_size,
12276         outp_get_paper_size) New functions.
12277
12278         * postscript.c: Continued development.  Now links but doesn't make
12279         any marks on the page.  Lotsa bugs I suppose.
12280
12281         * str.c: (strcasecmp) [!HAVE_STRCASECMP] New function.
12282
12283         * str.h: Comment changes.
12284
12285 Sat Jul 27 22:32:38 1996  Ben Pfaff  <blp@gnu.org>
12286
12287         * Removed dependencies on non-nested comments in several files.
12288         Also removed references to (unix || __unix__) in #if's since
12289         prefh.orig makes those two equivalent.
12290         
12291         * ascii.c: (ascii_open_global) Creates ascii_arena.
12292         (ascii_close_global) Destroys ascii_arena.
12293         (ascii_init_driver) Doesn't create ascii_arena.
12294         (ascii_copy_driver) Removed.
12295         (ascii_option) Possible bugfix regarding %s vs. %.*s with a_string's.
12296         (outp_class ascii_class) Removed ascii_copy_driver reference.
12297
12298         * frequencies.q: Now can display all statistics except median.
12299         Still not finished.
12300
12301         * output.c: Handles outp_class.ref_count so output class
12302         destructors are called properly.
12303         (add_class) Sets ref_count to 0.
12304         (configure_driver) Initializes class if ref_count++ is 0.
12305         (destroy_driver) Destructs class if --ref_count is 0.  Frees the
12306         class output file name.
12307         
12308         * output.h: (struct outp_class) Removed copy_driver, inited.
12309         Added ref_count.
12310
12311         * postscript.c: Completely replaced but not finished.
12312         
12313 Tue Jul 23 21:48:36 1996  Ben Pfaff  <blp@gnu.org>
12314
12315         * approx.h: #includes <float.h>.
12316
12317         * arena.h, arena.c: Many functions changed to take an arena **
12318         instead of an arena *, for consistency.  All callers changed.
12319         (arena_alloc) Now creates a new arena if passed *A that is NULL.
12320         (arena_destroy) Sets *A to NULL.
12321         
12322         * ascii.c: (delineate) Implements OUTP_T_VERT correctly.  Removed
12323         assertion that `width' be positive.
12324
12325         * command.c: Removed #if's from cmd_table.
12326         (walk_cmdtable_func) [0] New function (debug code).
12327         (init_cmd_parser) [0] Dumps out cmd_table (debug code).
12328         (parse_cmd) Doesn't return failure for unimplemented commands.
12329
12330         * common.h: (SYSMIS) Changed from DBL_MAX to -DBL_MAX.
12331         (SYSCODE) New constant macro.
12332
12333         * descript.q: Checks for positive n_variables before performing
12334         analysis.
12335
12336         * file-handle.q: (get_handle_by_filename) Bug fix: passes &f to
12337         avl_find instead of &fp as arg 2.
12338
12339         * frequencies.g, frequencies.q: Continued updating; now compiles &
12340         works again, but not complete.
12341
12342         * main.c: Changes to user messages.
12343
12344         * misc.c: (reverse) [0] New function.
12345
12346         * settings.h: Comment removed.  #includes "common.h".
12347
12348         * som.c: (som_set_null) New function.
12349         (som_set_value, som_set_string, som_set_text) More detailing
12350         assertions.
12351         (som_set_float) Implemented function.
12352         (dump_columnated_table) Bug fix regarding page breaks.
12353         (draw_cell) Bug fix regarding text that spilled out of a cell.
12354         (draw_intersection, draw_horz_rule, draw_vert_rule) No longer draw
12355         null lines.
12356         (get_cell_size) Support SCON_EMPTY cells.
12357         (get_table_size) When calculating rules' widths and heights, mask
12358         out SLIN_SPACING bit.  Added SOPT_X_HLTL support.
12359         
12360         * som.h: (som_any_cell) New option SOPT_X_HTLT.  Removed
12361         SOPT_X_SHADE.
12362         (struct som_submission_form) New member `header'; all users
12363         changed.
12364
12365         * val-labs.c: (get_label) User messages changed.
12366
12367         * var.h: Changed FREQUENCIES structures.
12368
12369         * vars-atr.c: (is_num_user_missing, is_str_user_missing) Made
12370         inline.
12371         
12372 Fri Jul 19 19:11:13 1996  Ben Pfaff  <blp@gnu.org>
12373
12374         * approx.h: Definition of EPSILON now depends on system's
12375         DBL_EPSILON.  Removed GNU C specific code.
12376         (cmpapx) Renamed approx_compare.
12377
12378         * frequencies.g, frequencies.q: Continued updating; still doesn't
12379         compile.
12380
12381         * groff-font.c: (name_to_index) Fix bug that kept it from
12382         compiling.
12383
12384         * hash.c, hash.h: Completed work.
12385
12386         * var.h: Changes to freq_tab, frequencies_proc.
12387         
12388 Wed Jul 17 21:23:36 1996  Ben Pfaff  <blp@gnu.org>
12389
12390         New hashing code.
12391         * hash.c, hash.h: New files.  Not completed.
12392         * Makefile.am: Added hash.c to source file list.
12393         * font.h: (struct font_desc) New member kern_size_p.
12394         * groff-font.c: Uses hash.h.
12395         (hashpjw) Moved to hash.c.
12396         (next_prime_power) Rewrote, renamed hsh_next_prime, moved to
12397         hash.c.
12398         (static var hash) New member size_p.
12399         * var.h: Includes hash.h.
12400         (struct freq_tab) Changed AVL_TREE to hash_tab.
12401
12402         * vars-prs.c: Comment, formatting fixes.
12403
12404         * frequencies.g, frequencies.q: Continued updating.  Not yet
12405         working.
12406
12407         * formats.c: Bug fix.
12408
12409 Tue Jul 16 22:10:04 1996  Ben Pfaff  <blp@gnu.org>
12410
12411         Increasing parallelism between DESCRIPTIVES and FREQUENCIES.
12412         * descript.g: Comment fixes.
12413         * descript.q: Comment fixes.  Moved some declarations into var.h.
12414         Made dsc_info a static table.  Updated FIXMEs.
12415         (internal_cmd_descriptives) Beautified.
12416         
12417         * frequencies.q: Started updating into working order.
12418         * frequencies.g: New file analogous to descript.g.
12419         * var.h: Comment fixes.  Added structures for FREQUENCIES.
12420         
12421         * som.c: Removed vestiges of crushing and partial table support.
12422
12423 Sun Jul 14 15:45:31 1996  Ben Pfaff  <blp@gnu.org>
12424
12425         * Many more changes to som.c especially, but these will not be
12426         documented as I have resolved to remove them.  This patchlevel is
12427         being released solely so that I can fall back to it if I decide
12428         that removing the changes is not a good idea.
12429
12430 Sat Jul 13 09:58:44 1996  Ben Pfaff  <blp@gnu.org>
12431
12432         * som.c: (global var som) New member `cum_y'.
12433         (build_target) Properly handles titles for partial tables.
12434         (dump_partial_beg, dump_partial_mid, dump_partial_end)
12435         Merged into single new function dump_partial().  Fixed problem
12436         with titles on partial tables.
12437         (dump_table) Calls dump_partial() for all parts of partial tables.
12438         (dump_page) Criteria for drawing title changed.
12439         
12440 Fri Jul 12 22:03:36 1996  Ben Pfaff  <blp@gnu.org>
12441
12442         * command.c: (cmd_table) Added LIST, WEIGHT.
12443
12444         * command.c: (cmd_remark) No longer frees `s' since it's not
12445         dynamically allocated.
12446         
12447         * data-out.c: (convert_f) Now correctly handles the case where
12448         abs(v->f)<1 but v->f rounds to a value of 1.00 given the specified
12449         number of decimals.
12450         (som_destroy_all_tables) Removed argument.  All callers changed.
12451         (som_vline, som_hline) Argument validity checking corrected.
12452         (som_set_value) Implemented half-heartedly.
12453         (replicate_table) Copies tables piece-by-piece when using Checker.
12454
12455         * som.h: New line style SLIN_1THIN, currently equivalent to
12456         SLIN_0.  New enum set SOM_SUB_*.
12457         (struct som_submission_form) Removed `seq_no'.  Added `type'.
12458         
12459         * list.q: Newly working file; uses partial tables.
12460         
12461         * som.c: (som_reduce_table) Renamed som_set_table_height().
12462         (som_crush) Removed argument `group'.
12463         (global var som) Removed `nt', `seq_no'.  Added `type'.
12464         (som_submit_table) Arguments changed.
12465         (output_table) Removed partial table code.
12466         (build_target) New arg; partial table support added.  All callers
12467         changed.
12468         (dump_plain_table) Removed partial table code.
12469         (dump_partial_beg, dump_partial_mid, dump_partial_end) New functions.
12470         (dump_table) Supports partial tables.
12471         (dump_page) New argument to allow not drawing top and/or bottom
12472         headers.  All callers changed.  Supports partial tables.
12473
12474 Sat Jul  6 22:22:25 1996  Ben Pfaff  <blp@gnu.org>
12475
12476         * data-out.c: Changed `#include <approx.h>' to `#include
12477         "approx.h".
12478         (convert_F) Comment fix.  Now won't print `-.000', etc.
12479
12480         * descript.q: Now Z-scores work, although there appears to
12481         be a bug (which might actually be in data-out.c:convert_F()).
12482         (descriptives_trns_proc, descriptives_trns_free) New functions.
12483         (run_z_pass) Implemented.
12484         
12485         * var.h: Comment fixes.
12486         (dsc_z_score, descriptives_trns) New structs.
12487         (descriptives_trns) Added to any_trns as `dsc'.
12488
12489         * error.c, error.h: New error class, IS (Installation Script
12490         error), used in those instances where the error is in the
12491         installation, but there is a script file or installation file that
12492         can be usefully referred to.
12493         
12494         * output.c: Change many IE classes to IS classes.
12495
12496         * cases.c, command.c, common.c, crosstabs.q, expr-evl.c,
12497         frequencies.q, list.q, vars-prs.c, vfm.c: Removed reference to
12498         HAVE_MALLOC_H because Borland C++ alloca() is broken, so why
12499         include the corresponding header?
12500         
12501         * glob.c: (init_glob) Don't malloc term_buffer under Checker.
12502         Don't bail out if termcap can't be read.
12503
12504         * som.c: (som_destroy_table) Removed.
12505         (som_reduce_table, som_destroy_all_tables) New functions.
12506         (som_crush) New function, not implemented.
12507         
12508         * som.h: New table option STAB_CRUSH.  Comment fix.  New struct
12509         som_submission_form.  Function prototypes revised.
12510
12511         Outputting huge tables (1000s of rows) a few rows at a time
12512         is supported, though untested.  May even break everything.
12513         Actually, the code doesn't even compile right now.
12514         * som.c: (struct som) New fields htv, nt, seq_no.
12515         (som_submit_table) Multiple arguments changed to a single
12516         pointer to struct submission_form.  Only increments subtable_num
12517         if seq_no is zero.  Only destroys table if it's not going to
12518         be reused.
12519         (replicate_table) New function.
12520         (output_table) Comment fix.
12521         (examine_table) Changed inline code to code calling
12522         replicate_table().  Calculates htv.  Supports partial tables.
12523         (draw_title) Removed comment.
12524         (build_target) Only allows for title on first part of partial
12525         tables.
12526         (dump_plain_table) Only resets table chunk number on first part
12527         of partial tables; FIXME: doesn't work quite right.  Supports
12528         partial tables.
12529         (dump_page) Titles only on first part of partial tables.
12530
12531 Fri Jul  5 20:16:19 1996  Ben Pfaff  <blp@gnu.org>
12532
12533         * Thanks to an unreliable IDE hard drive, I have spent the last
12534         day reconstructing my Debian GNU/Linux installation and redoing
12535         the previous day's changes--somehow I managed to save every file
12536         except for output.c and output.h.  So the following changes could
12537         really be considered independent of the output.c, output.h changes
12538         from Jul 4.
12539
12540         * output.h, output.c: Moved the outp_configure_vec global var,
12541         outp_names struct, and enum set OUTP_S_* from output.h to output.c.
12542         outp_configure_vec is now static.
12543         
12544 Thu Jul  4 20:20:24 1996  Ben Pfaff  <blp@gnu.org>
12545
12546         * The entire philosophy behind configuration of the output drivers
12547         changed.  Now there is a termcap-type configuration where drivers
12548         to be read are determined beforehand, rather than parsing the
12549         entire output init file and storing it in memory & deciding what
12550         to actually use later.  Faster & more memory-efficient at the same
12551         time, cool.
12552         
12553         * output.c: Comment fix.  Removed outp_init_drivers global var.
12554         Removed all references to synonyms.  New structure outp_defn.  New
12555         global vars outp_macros, outp_configure_vec.
12556         (search_name, delete_name, add_name, check_configure_vec,
12557         expand_name, find_defn_value) New static functions.
12558         (outp_configure_clear, outp_configure_add, outp_configure_macro,
12559         outp_read_devices) New extern functions.
12560         (outp_init) Much functionality moved into outp_read_devices.
12561         (outp_read_devices) Format of output init file changed; name of
12562         file is `devices' rather than `output' to avoid Makefile
12563         conflicts.
12564         (outp_clear) Renamed outp_done.
12565         (outp_list_classes) Bug fix, cleaned up.
12566         (outp_list_drivers) Not implemented anymore.
12567         (outp_configure_driver) Now a static function; simplified; now
12568         interpolates macros; supports new structure.
12569         (outp_enable_driver, match_synonym) Removed; all references
12570         removed.
12571         (find_driver) First argument removed.
12572         
12573         * output.h: Global var outp_init_drivers removed; new structure
12574         outp_names; new enum set OUTP_S_*; new global var
12575         outp_configure_vec; function prototypes for output.c exports
12576         updated.
12577         
12578         * main.c: (main) Calls outp_read_devices() after parsing the
12579         command line.
12580         
12581         * cmdline.c: (parse_command_line) New option -v --verbose;
12582         --version changed to -V.  --device option changed syntax to just
12583         take a single device name.  Accepts key=value declaration of
12584         output init file macros.  Syntax message updated.
12585
12586         * filename.c: (expand_line) New function.
12587         (interp_environ_vars) Renamed interp_vars; no longer uses
12588         fixed-size buffer.
12589         (blp_getenv) Allows $ARCH and $VER pseudo-environment-vars to be
12590         overridden by real environment vars.
12591         (search_path) Uses verbose_msg() instead of #ifdef'd printf().
12592         * filename.h: interp_environ_vars() renamed interp_vars().
12593         
12594         * error.c, error.h: Added extern variable `verbosity', message
12595         class MM.
12596         
12597         * error.c: (vmsg) Support message class MM.
12598         (verbose_msg) New function.
12599
12600         * descript.q: (generate_z_varname) Bug fix in generation of
12601         Z-score varnames.
12602         (dump_z_table) Bug fix in column headers.
12603         
12604         * ascii.c: (ascii_init_driver) Changed minimum number of lines per
12605         page from 29 to 15.  Don't set a default for ops[OPS_INIT,
12606         OPS_DONE].  Writes the uninit string when the driver is closed.
12607         (ascii_open_page) Write the init string before the first page.
12608         (output_shorts) Form of main loop changed from `while' to `for'.
12609         Bug fix with overstrikes: the character is printed *after* the
12610         backspace.  Eliminated a lot of `& 0xff' modifiers.
12611         (advance_to_left_margin) New function.
12612         (return_carriage, output_lines) Handle left margin.
12613
12614 Thu Jul  4 00:35:59 1996  Ben Pfaff  <blp@gnu.org>
12615
12616         * ascii.c: New option `carriage-return-style'.
12617
12618         * ascii.c: (count_fancy_chars) New function.
12619         (delineate, text_metrics) Use new function; bug fixes regarding
12620         rich text strings.
12621         (text_draw) Bug fix with rich text.
12622         (output_string, output_shorts) Reordered.
12623         (output_shorts) Now handles boxchars and some overstrike font
12624         changes.
12625         (output_char, return_carriage) New functions.
12626         (output_lines) Now handles overstriking and font changes properly;
12627         some code moved to output_shorts.
12628
12629 Tue Jul  2 22:13:23 1996  Ben Pfaff  <blp@gnu.org>
12630
12631         [GLOBAL_DEBUGGING]
12632         * ascii.c: New member `debug' in ascii_driver_ext.
12633         (ascii_init_driver, delineate) Uses new member.
12634
12635         Now you can set a vertical height on writing text.
12636         * ascii.c: (delineate) Keeps track of vertical position.
12637         (text_draw) No longer considers fully justified text an internal
12638         error.
12639         
12640         * output.h: New flag OUTP_T_VERT; other OUTP_T_ values changed.
12641
12642         Tables' titles are drawn; they can have variable height.
12643         * som.c: `som' struct has new member, title_height.
12644         (draw_title) New argument.  Moved within file.  All caller
12645         changed.
12646         (build_target) New argument, amount of space needed for first row.
12647         Calculates height of title, takes that into account.  All callers
12648         changed.
12649         (dump_plain_table, dump_columnated_table) Took calculation of y1,
12650         y2 out of loop.
12651         (dump_columnated_table) [GLOBAL_DEBUGGING] Debugging code
12652         improved.
12653         (dump_columnated_table) Organized for readability.
12654         (dump_page) Makes use of som.title_height.
12655
12656         * som.c: Many comment bug fixes.
12657
12658         * descript.q: (try_name, generate_z_name) Bug fix regarding
12659         generation of Z-score variable names.
12660         * var.h: Removed num from descriptives_proc; all referents removed.
12661
12662 Mon Jul  1 22:13:39 1996  Ben Pfaff  <blp@gnu.org>
12663
12664         * ascii.c: (ascii_line_horz, ascii_line_vert,
12665         ascii_line_intersection) Added debugging code.
12666
12667         Added a descriptive line above each table to describe it.
12668         * command.c: (parse_cmd) Calls som_new_series.
12669         
12670         * som.c: New static vars table_num, subtable_num.  New `som'
12671         member `title'.
12672         (dump_page) New arguments.
12673         (som_submit_table) Handle new variables.
12674         
12675         * som.c, som.h: (som_submit_table) New arguments.  All callers
12676         changed.
12677         (som_new_series) New function.
12678         (build_target) Makes room for extra line.
12679         (draw_title) New function.
12680         (dump_page) Calls draw_title.  Bug fix: doesn't always set
12681         som.ext->cp to 0.
12682         
12683         Columnation of tables support.
12684         * som.h: Deleted fr, lr, ri from som_table.  Reorganized.
12685         
12686         * som.c: Deleted references to fr, lr, ri.
12687         (som_columnate) Bux fix: sets group member of table.
12688         (som_add_options) Function removed.
12689         (dump_table) Split into three functions; extensively reworked.
12690         
12691         * descript.q: (dump_z_table) Better output table formatting; added
12692         title support to correspond to som.h changes.
12693         (display) Title support.
12694
12695         * output.h: Added OUTP_T_NONE.
12696         
12697 Mon Jul  1 13:00:00 1996  Ben Pfaff  <blp@gnu.org>
12698
12699         * descript.q: Improved handling of Z scores; still not perfect.
12700         
12701         * output.h, ascii.c: Added hook for getting em width of current
12702         font.
12703         
12704         * som.c: Uses new em-width hook.  Added debugging code to
12705         several functions.
12706         (som_columnate) New argument.
12707         (som_add_options) Removed.
12708
12709 Jun 29 17:40:47 1996  Ben Pfaff  <blp@gnu.org>
12710
12711         * som.h, som.c, output.c, output.h, ascii.c: Updated to work with
12712         rules as a property of the table instead of as a property of the
12713         cells.
12714         
12715         * ascii.c: Added `header' to table of options.
12716         
12717         * descript.q: Added even shorter statistic names; modified to work
12718         with new som interface.
12719         
12720         * misc.c (blp_getdelim): Bug fix.
12721         
12722         * version.c: includes 'conf.h'.
12723         
12724 ----------------------------------------------------------------------
12725 Local Variables:
12726 mode: change-log
12727 version-control: never
12728 End: