Fri Dec 19 16:38:35 2003 Ben Pfaff <blp@gnu.org>
[pspp-builds.git] / src / ChangeLog
1 Fri Dec 19 16:38:35 2003  Ben Pfaff  <blp@gnu.org>
2
3         * matrix-data.c (compare_factors) Use lexicographical_compare()
4         algorithm.
5         (compare_doubles) New function.
6         
7         * algorithm.c: (lexicographical_compare) New algorithm.
8
9 Fri Dec 19 16:23:45 2003  Ben Pfaff  <blp@gnu.org>
10
11         * matrix-data.c (compare_variables_by_mxd_vartype): Rewrite.
12
13 Fri Dec 19 15:54:45 2003  Ben Pfaff  <blp@gnu.org>
14
15         * expr-prs.c: (cmp_func) Removed.
16         (parse_function) Use binary_search() algorithm.
17         (compare_functions) New function.
18         (init_func_tab) Use sort() algorithm.
19
20         * algorithm.c: (binary_search) New algorithm.
21
22 Fri Dec 19 15:50:45 2003  Ben Pfaff  <blp@gnu.org>
23
24         * descript.q: (display) Use sort() algorithm instead of qsort().
25         (compare_func) Removed.
26         (descriptives_compare_variables) New function.
27
28 Fri Dec 19 15:08:38 2003  Ben Pfaff  <blp@gnu.org>
29
30         Get rid of AVL trees.  Hashes are more appropriate for everything
31         PSPP does.
32
33         * Makefile.am: (pspp_SOURCES) Remove avl.c, avl.h.
34         
35         * avl.c: Removed.
36
37         * avl.h: Removed.
38
39 Fri Dec 19 14:33:31 2003  Ben Pfaff  <blp@gnu.org>
40
41         Much code can be clarified by using C++ STL-like algorithms.  Not
42         all uses of these algorithms are listed below, only the ones where
43         the change to an algorithm was the only change of interest.
44         
45         * Makefile.am: (pspp_SOURCES) Add algorithm.c, algorithm.h.
46         
47         * algorithm.c: New file.
48
49         * algorithm.h: New file.
50
51         * modify-vars.c: (static var forward) Removed.
52         (static var positional) Removed.
53         (compare_variables) Removed.
54         (struct ordering) New.
55         (cmd_modify_vars) Use sort() algorithm.
56         (compare_variables_given_ordering) New function.
57         (rearrange_dict) Use sort() algorithm.
58
59         * sysfile-info.c: (cmd_display) Use sort() algorithm.
60         (cmp_var_by_name) Removed.
61
62 Fri Dec 19 14:26:17 2003  Ben Pfaff  <blp@gnu.org>
63
64         Make file handles use a hash table.
65         
66         * file-handle.q: (files) Change to hash table, make static.
67         (cmd_file_handle) Use hash table functions.
68         (fh_get_handle_by_filename) Ditto.
69         (fh_get_handle_by_name) Ditto.
70         (hash_file_handle) New function.
71         (cmp_file_handle) Rewrite.
72         (fh_init_files) Use hash table functions.
73
74 Fri Dec 19 14:24:38 2003  Ben Pfaff  <blp@gnu.org>
75
76         Clean up FREQUENCIES.
77         
78         * Makefile.am: (pspp_SOURCES) Remove frequencies.g.
79
80         * frequencies.q: Remove a lot of old #if'd out code at the end.
81         (internal_cmd_frequencies) Use calc() instead of calc_no_weight()
82         or calc_weight().  Initialize percentile_values.
83         (calc) New function based on calc_weight() from frequencies.g.
84         (precalc) Use hash functions.
85         (static var comparison_func) Removed.
86         (static var comparison_param) Removed.
87         (comparison_helper) Removed.
88         (get_freq_comparator) New function.
89         (not_missing) New function.
90         (add_freq) Removed.
91         (postprocess_freq_tab) Use hash table functions, algorithms,
92         get_freq_comparator().  Rewrite.
93         (cleanup_freq_tab) Rephrase.
94         (add_percentile) Clean up spacing.
95         (hash_value_numeric) New function.
96         (hash_value_alpha) New function.
97         (compare_value_numeric_a) Rewrite.
98         (compare_value_alpha_a) Rewrite.
99         (compare_value_numeric_d) Rewrite.
100         (compare_value_alpha_d) Rewrite.
101         (compare_freq_numeric_a) Rewrite.
102         (compare_freq_alpha_a) Rewrite.
103         (compare_freq_numeric_d) Rewrite.
104         (compare_freq_alpha_d) Rewrite.
105         (calc_stats) Clean up mode, percentiles, max.
106         (dump_statistics) Clean up spacing.
107         
108         * frequencies.g: Removed.
109
110         * var.h: (struct freq_tab) Change `data' to hash table.
111
112 Fri Dec 19 14:15:46 2003  Ben Pfaff  <blp@gnu.org>
113
114         * file-handle.h: Remove declaration of global variable `files',
115         which wasn't used anywhere.
116
117         * postscript.c: (add_encoding) Remove superfluous cast.
118         (line) Ditto.
119
120         * sfm-read.c: [linux] (bswap_int32) Drop ntohl() non-portable
121         version.
122
123         * temporary.c: [0] (display_tree) Removed.
124
125 Fri Dec 19 14:13:04 2003  Ben Pfaff  <blp@gnu.org>
126
127         Implement a new random number generator based on the alleged RC4
128         algorithm.
129
130         * expr-evl.c: (expr_evaluate) Use rng_get_double_normal() instead
131         of rand_normal().
132
133         * random.c: [!HAVE_GOOD_RANDOM] (real_rand) Removed.
134         [!HAVE_GOOD_RANDOM] (real_srand) Removed.
135         (macro k) Removed.
136         (static var V[]) Removed.
137         (static var Y) Removed.
138         (static var X2) Removed.
139         (setup_randomize) Removed.
140         (shuffle) Removed.
141         (rand_uniform) Removed.
142         (rand_normal) Removed.
143         (struct rng) New structure.
144         (rng_create) New function.
145         (rng_destroy) New function.
146         (swap_byte) New static function.
147         (rng_seed) New function.
148         (rng_get_bytes) New function.
149         (rng_get_int) New function.
150         (rng_get_unsigned) New function.
151         (rng_get_double) New function.
152         (rng_get_double_normal) New function.
153         (pspp_rng) New function.
154
155         * random.h: Sync up to random.c.
156
157         * sample.c: (struct sample_trns) Make `frac' unsigned and a
158         fraction of UINT_MAX, not 65536.
159         (cmd_sample) Use rng_get_unsigned(), rng_get_double(), UINT_MAX
160         fraction.
161
162         * vfm.c: (open_active_file) No need to call setup_randomize() any
163         longer.
164
165 Fri Dec 19 12:05:56 2003  Ben Pfaff  <blp@gnu.org>
166
167         Change dictionary name indexes to use hash tables instead of AVL
168         trees.
169
170         * crosstabs.q: (free_var_dict) Use hash tables.
171         (crs_custom_tables) Ditto.
172         (calc_general) Ditto.
173         (compare_table_entry) Rewrite.
174         (enum_var_values) Reorder parameters.  All references updated.
175         Rewrite.
176
177         * get.c: (rename_variable) Use hash tables.
178         (mtf_merge_dictionary) Ditto.
179
180         * glob.c: (init_glob) Use hash tables.
181         (cmp_variable) Removed.
182
183         * means.q: (mns_custom_tables) Use hash tables.
184
185         * modify-vars.c: (rearrange_dict) Use hash tables.
186
187         * rename-vars.c: (cmd_rename_variables) Use hash tables.
188
189         * sfm-read.c: (read_header) Use hash tables.
190         (read_variables) Ditto.
191
192         * temporary.c: (new_dictionary) Use hash tables.
193         (save_dictionary) Ditto.
194         (restore_dictionary) Ditto.
195
196         * var.h: (struct dictionary) Change AVL tree `var_by_name' into
197         hash table `name_tab'.
198
199         * vars-atr.c: [DEBUGGING] (dump_one_var_node) Removed.
200         [DEBUGGING] (dump_var_tree) Removed.
201         (find_variable) Use hash tables.
202         (find_dict_variable) Ditto.
203         (common_init_stuff) Ditto.
204         (rename_variable) Ditto.
205         (clear_variable) Ditto.  Also, remove debug code.
206         (dup_variable) Use hash tables.
207
208         * vars-prs.c: (fill_all_vars) Use hash tables.
209         (is_dict_varname) Ditto.
210         (parse_dict_variable) Ditto.
211         
212 Fri Dec 19 11:46:23 2003  Ben Pfaff  <blp@gnu.org>
213
214         Change value labels to use hash tables instead of AVL trees, and
215         change value labels into an ADT.
216
217         * Makefile.am: (pspp_SOURCES) Add value-labels.c, value-labels.h.
218         
219         * value-labels.c: New file.
220
221         * value-labels.h: New file.
222
223         * apply-dict.c: (cmd_apply_dictionary) Use value label ADT.
224         Get rid of a stupid use of goto.
225
226         * autorecode.c: (compare_alpha_value) Rewrite.
227         (hash_alpha_value) Ditto.
228         (compare_numeric_value) Rewrite.
229         (hash_numeric_value) Ditto.
230
231         * frequencies.q: (dump_full) Use value label ADT.
232
233         * pfm-read.c: (read_value_label) Use value label ADT.
234
235         * pfm-write.c: (write_value_labels) Use value label ADT.
236
237         * sfm-read.c: (read_variables) Use value label ADT.
238         (read_value_labels) Rewrite.
239
240         * sfm-write.c: (write_value_labels) Rewrite.
241
242         * sysfile-info.c: (cmd_sysfile_info) Use value label ADT.
243         (display_variables) Ditto.
244         (describe_variable) Ditto.
245
246         * t-test.q: (print_t_groups) Use value label ADT.
247
248         * temporary.c: (copy_variable) Use value label ADT.
249         (free_dictionary) Ditto.
250
251         * val-labs.c: (verify_val_labs) Use value label ADT.
252         (get_label) Ditto.
253         (debug_print) Ditto.
254         (val_lab_cmp) Removed.
255         (inc_ref_count) Removed.
256         (copy_value_labels) Removed.
257
258         * var.h: (struct value_label) Removed.
259         (struct variable) Change AVL tree `val_lab' into hash table
260         `val_labs'.
261
262         * vars-atr.c: (init_variable) Use value label ADT.
263         (clear_variable) Ditto.
264         (free_value_label) Removed.
265         (free_val_lab) Removed.
266         (get_val_lab) Removed.
267         (compare_variables) New function.
268         (hash_variable) New function.
269
270         * vfm.c: (dump_splits) Use value label ADT.
271
272 Fri Dec 19 11:18:11 2003  Ben Pfaff  <blp@gnu.org>
273
274         Add to the hash table interface.
275
276         * hash.c: (hsh_hash_bytes) Add assertion.
277         (hsh_hash_string) Ditto.
278         (hsh_clear) Ditto.
279         (hsh_rehash) Ditto.
280         (hsh_probe) Ditto.
281         (hsh_create) Ditto.  Also make minimum `size'.
282         (hsh_destroy) Rephrase.
283         (sort_nulls_last) Removed.
284         (not_null) New function.
285         (hsh_data) Ditto.
286         (comparison_helper) Ditto.
287         (hsh_sort) Rewritten.
288         (hsh_data_copy) New function.
289         (hsh_sort_copy) Ditto.
290         (hsh_insert) Ditto.
291         (hsh_replace) Ditto.
292         (hsh_hash_double) Ditto.
293         (hsh_delete) Fix stupid bug.
294         
295 Thu Dec 18 12:27:03 WAST 2003 John Darrington <john@darrington.wattle.id.au>
296         * added a calculation of the mode to FREQUENCIES
297
298 Wed Dec 17 12:53:01 WAST 2003 John Darrington <john@darrington.wattle.id.au>
299
300         * moved (un)defs of DEBUGGING to config.h
301
302 Mon Dec 15 21:35:59 2003  Ben Pfaff  <blp@gnu.org>
303
304         * groff-font.c: (add_kern) Fix indentation.
305         (add_kern) Use & instead of % to take power-of-2 modulus.
306         (font_get_kern_adjust) Likewise.
307
308 Fri Dec 12 23:54:37 2003  Ben Pfaff  <blp@gnu.org>
309
310         * autorecode.c: (recode) Replace stupid use of memcpy() by
311         memberwise copy.
312         (hash_alpha_value) Use hsh_hash_bytes().  Get rid of nasty casts.
313         (hash_numeric_value) Ditto.
314         (autorecode_proc_func) pool_strdup() was wrong here because the
315         source string was not null-terminated.  Use new pool_strndup()
316         instead.
317
318         * crosstabs.q: (enum_var_values) Remove superfluous and bizarre
319         use of hsh_iterator_init().
320
321         * data-in.c: (parse_N) Initialize i->v->f.
322
323         * flip.c: (cmd_flip) Use memmove(), not memcpy(), to copy
324         overlapping arrays.
325
326         * groff-font.c: Use power-of-2 hash table sizes, not prime.
327         (groff_read_font) Don't call hsh_next_prime().  Don't call
328         fclose(NULL).
329         (static var hash) Remove `size_p', `max_used' members.
330         (font_char_name_to_index) Don't call hsh_next_prime().  Use
331         hsh_hash_string() instead of hashpjw(), & instead of %.
332         (default_font) Don't call hsh_next_prime().
333
334         * pool.c: (pool_strndup) New function.
335         (pool_strdup) Reimplement in terms of pool_strndup.
336
337         * postscript.c: (hash_font_entry) Use hsh_hash_string().  Get rid
338         of nasty casts.
339         (hash_ps_encoding) Use hsh_hash_string().
340         (hash_ps_combo) Use hsh_hash_string(), hsh_hash_int().
341         (hash_filename2font) Use hsh_hash_string().
342
343         * som.c: Add #include <stdlib.h>.
344
345         * tab.c: (tab_destroy) Don't set t->container after freeing `t'
346         (by destroying its pool).
347         
348 Fri Dec 12 23:18:59 2003  Ben Pfaff  <blp@gnu.org>
349
350         Miscellaneous hash table code cleanup:
351         
352         * hash.h: (struct hsh_table) Moved into hash.c.
353         (hsh_count) Ditto, and transformed into function.
354         (hsh_compare_func) New typedef, used for defining otherwise-long
355         function types here and in hash.c
356         (hsh_hash_func) Ditto.
357         (hsh_free_func) Ditto.
358         
359         * hash.c: (struct hsh_table) Renamed `n' to `used', `m' to `size',
360         `table' to `entries'.  Removed `mp'.  All references updated.
361         (hsh_clear) Don't shrink entries array; if the hash was this big
362         once, it probably will be again.
363         (hsh_rehash) Made static.
364         (force_hsh_insert) Renamed hsh_force_insert.
365         (force_hsh_find) Renamed hsh_force_find.
366
367         Made hash table sizes powers of 2, because that's fine with any
368         reasonable hash function and because taking a power-of-2 modulus
369         is faster than any other:
370         
371         (hsh_prime_tab) Removed;
372         (hsh_next_prime) Ditto.
373         (next_power_of_2) New function.
374         (hsh_create) Use next_power_of_2.
375         (hsh_rehash) Use & instead of %.
376
377         Cleaned up hsh_sort:
378         
379         (internal_comparison_fn) Removed.
380         (sort_nulls_last) New function.
381         (hsh_sort) Removed second parameter, switched to using the new
382         quicksort() function from quicksort.h to avoid using nasty need
383         for static variables with qsort().  All references updated.
384
385         Changed the hash functions offered, because there are better hash
386         functions than the ones we had, and cleaned up the names to boot:
387         
388         * hash.c: (hashpjw_d) Removed.
389         (hashpjw) Ditto.
390         (hsh_hash_bytes) New function.
391         (hsh_hash_string) New function.
392         (hsh_hash_int) New function.
393
394         Improved the hash table iteration interface:
395         
396         * hash.h: (hsh_iterator_init) Removed.
397         (struct hsh_iterator) Removed `init' member, change `next' to
398         size_t.
399
400         * hash.c: (hsh_foreach) Removed.  All references updated to use
401         hsh_first/hsh_next instead.
402         (hsh_first) New function.  Notably, unlike hsh_foreach() it does
403         not treat a null pointer as an empty hash table.
404         (hsh_next) New function.
405
406         Made deletion possible, though slow:
407
408         * hash.c: (locate_matching_entry) New function.
409         (hsh_find) Use locate_matching_entry().
410         (hsh_delete) New function also using locate_matching_entry().
411         (hsh_force_delete) New function.
412
413 Fri Dec 12 23:16:10 2003  Ben Pfaff  <blp@gnu.org>
414
415         * quicksort.c: New file implementing a sort routine with a
416         interface better than qsort() because it passes a user-provided
417         parameter to the sort routine.
418
419         * Makefile.am: Add quicksort.c, quicksort.h.
420
421 Fri Dec 12 13:31:58 2003  Ben Pfaff  <blp@gnu.org>
422
423         * All source files: Get rid of nasty special cases for Checker,
424         which is pretty obsolete now.
425
426 Thu Dec 11 21:38:24 WST 2003 John Darrington <john@darrington.wattle.id.au>
427
428         * Fixed a bug apparent when using the FREQUENCIES command with the
429         html driver.  The html driver was incorrectly trying to display 
430         empty cells.
431
432 Sun Jan  2 21:40:13 2000  Ben Pfaff  <blp@gnu.org>
433
434         * Makefile.am: Reorganized.  Put locale dir in version.c instead
435         of passing it to each compile command.  Only put local gmp libs in
436         LD_ADD if not installed on system.  Remove `boast' target.
437
438         * All source files: struct and union typedefs eliminated.
439         `sizeof type' replaced by `sizeof object' where practical.  Moved
440         `unused' qualifiers from start to end of declarations for gcc
441         2.7.2 compatibility.  Change `while (1)' to `for (;;)'.  Made
442         assertions on pointers strictly compliant.  Removed _ prefixes on
443         some function parameter names.
444
445         * alloc.c: New source file, containing these external linkage
446         functions removed from common.c: xmalloc, xcalloc, xrealloc,
447         xstrdup.
448
449         * arena.c: Removed.
450         
451         * arena.h: Removed.
452
453         * ascii.c: Migrated from arenas to pools.
454         (struct ascii_driver_ext) ops[], box[], fonts[] changed from
455         c_string to len_string.  All references changed.
456         (ascii_option) Signature changed to comply to new output.c
457         interface.
458         (count_fancy_chars) Removed.
459         (delineate) Removed support for rich text.
460         (ascii_text_metrics) Ditto.
461         (text_draw) Ditto.
462         (output_shorts) Change `box', `off', `on' from c_string to
463         len_string.  Change `remaining' from int to size_t.
464         (ascii_close_page) Make page numbering less haphazard.
465
466         * autorecode.c: Migrate from arenas to pools.
467
468         * avl.c: Migrate from arenas to pools.  Synch from libavl 1.4.0.
469
470         * bitvector.h: New file containing these macros from misc.h:
471         SET_BIT, CLEAR_BIT, SET_BIT_TO, TEST_BIT, BIT_INDEX.
472
473         * command.c: (struct command) cmd1, cmd2, cmd3 members changed to
474         word[3].  ncmd removed.
475         (var empty_string) Removed.
476         (var cmd_table) Declaration updated.
477         (var cmdtab) Removed.
478         (cmp_command) Removed.
479         (split_words) Rewritten to use strtok_r().
480         (init_cmd_parser) Renamed cmd_init().  Rewritten.
481         (find_command) Removed.
482         (FILE_TYPE_okay) Rewritten.
483         (cmd_parse) Rewritten.  Semantics of the return value of command
484         handlers has changed: they must now return one of the new CMD_*
485         enumerals, rather than a magic value.  This meant that all
486         commands had to be modified, and they were.
487         (figure_out_command) New function.
488
489         * command.def: Add CORRELATIONS, PEARSON CORRELATIONS.  Add
490         #defines for INIT, INPU, etc.
491
492         * command.h: New CMD_* enum series.
493         (cur_proc) Make const char *, not char *.
494         (cmd_init) Prototype.
495         (cmd_parse) Ditto.
496
497         * common.c: Removed.
498
499         * common.h: Removed.
500
501         * correlations.q: New file.
502
503         * crosstabs.q: Migrate from arenas to pools.  Migrate to new-style
504         q2c.
505         (custom_tables) Renamed crs_custom_tables().
506         (custom_variables) Renamed crs_custom_variables().
507         (calc_integer) Add in some `const' qualifiers.
508         (table_value_missing) Change from a_string to len_string.
509         (float_M_suffix) Change from a_string to len_string.
510
511         * data-in.c: Rewritten.  All references to
512         parse_string_as_format() changed to data_in().
513
514         * data-in.h: New file.
515
516         * data-list.c: Change DLS_* from #define's to enums.  Move from
517         rpd_msg() to tmsg().
518         (RPD_ERR) New #define.
519         (do_reading) Change dfm_push_cust() to dfm_push(), pop_cust() to
520         dfm_pop().
521         (read_from_data_list_fixed) Change from old
522         parse_string_as_format() to new data_in().
523         (read_from_data_list_free) Ditto.
524         (read_from_data_list_list) Ditto.
525         (cmd_repeating_data) Modify approach to checking for end of
526         command.
527         (rpd_msg) Removed.
528         (rpd_parse_record) Change from old parse_string_as_format() to new
529         data_in().  Change from old convert_format_to_string() to new
530         data_out().
531         (read_one_set_of_repetitions) Change dfm_push_cust() to
532         dfm_push(), pop_cust() to dfm_pop().
533
534         * data-out.c: Rewritten.  All references to
535         convert_format_to_string() changed to data_out().
536
537         * descript.q: Migrate to new q2c.
538         (cmd_descriptives) Removed.
539         (internal_cmd_descriptives) Renamed cmd_descriptives ().
540         (custom_variables) Renamed dsc_custom_variables().
541
542         * dfm.c: (struct dfm_fhuser_ext) `ln' removed.  All references
543         removed.
544         (open_file_r) Initialize h->where.line_number.  Migrate to new
545         struct string.
546         (open_file_w) Initialize h->where.line_number.
547         (read_record) Change from ext->ln to h->where.line_number.
548         Migrate to struct string.
549         (dfm_put_record) Rephrased.
550         (dfm_push_cust) Renamed dfm_push(), rewritten.
551         (dfm_pop) New function.
552
553         * error.c: All references updated.
554         (glob var error_count) Renamed err_err_count.
555         (glob var warning_count) Renamed err_warning_count.
556         (glob var error_already_flagged) Renamed err_already_flagged.
557         (glob var verbosity) Renamed err_verbosity.
558         (glob var cust_fn) Removed.
559         (glob var cust_ln) Removed.
560         (static var file_loc) New.
561         (static var nfile_loc) New.
562         (static var mfile_loc) New.
563         (tmsg) New function.
564         (push_cust) Removed.
565         (pop_cust) Removed.
566         (msg) Rewritten.
567         (static var terminating) Removed.
568         (failure) Renamed err_failure().
569         (hcf) Renamed err_hcf().
570         (err_push_file_locator) New function.
571         (err_pop_file_locator) New function.
572         (err_location) New function.
573         (check_error_count) Renamed err_check_count().
574         (vmsg) Renamed err_vmsg().  Interface changed.
575         (verbose_msg) Removed.
576         (err_cond_fail) New function.
577         (error_break) Renamed err_break().
578
579         * error.h: All references updated.
580         (enum MSG_CLASS_COUNT) Renamed ERR_CLASS_COUNT.
581         (enum ERR_CLASS_MASK, ERR_VERBOSITY_SHIFT, ERR_VERBOSITY_MASK)
582         New.
583         (struct file_locator) New.
584         (struct error) New.
585         (macro verbose_msg) Removed.
586         (macro cond_fail) Removed.
587
588         * expr-opt.c: (evaluate_tree) sizeof(char) == 1.
589
590         * expr-prs.c: Reorganized.  All references updated.
591         (exprtypename) Renamed expr_type_name().
592         (typename) Renamed type_name().
593         (free_expression) Renamed expr_free().
594         (parse_expression) Renamed expr_parse().  Uses new type_check()
595         function.
596         (init_functab) Renamed init_func_tab().
597         (type_check) New function.
598         (parse_or) Rewritten to use new allocate_nonterminal() and
599         append_nonterminal_arg() functions.
600         (parse_and) Ditto.
601         (parse_not) Ditto.
602         (parse_rel) Ditto.  Also simplified logic.
603         (parse_add) Ditto.
604         (parse_mul) Ditto.
605         (parse_neg) Ditto.
606         (parse_exp) Ditto.
607         (SYSMIS_func) Ditto.
608         (VALUE_func) Rephrased.
609         (CONCAT_func) Fix memory leak by replacing free by free_node on
610         lossage.
611         (generic_str_func) Ditto.
612         (parse_function) Ditto.  Also rephrasings.  Uses bsearch() to find
613         function.
614         (allocate_nonterminal) New function.
615         (append_nonterminal_arg) New function.
616         (static func_tab[]) Now at file level.
617         (cmp_func) Moved.
618         (init_func_tab) Moved.  Now just uses qsort() to sort func_tab[].
619
620         * expr.h: (enum series OP_*) Moved to exprP.h.
621         (OP_* defines) Ditto.
622         (struct op_desc) Ditto.
623         (global ops[]) Ditto.
624         (struct num_con_node) Ditto.
625         (struct str_con_node) Ditto.
626         (struct var_node) Ditto.
627         (struct lag_node) Ditto.
628         (struct casenum_node) Ditto.
629         (struct nonterm_node) Ditto.
630         (union any_node) Members renamed.
631         (struct sys_node) Removed.
632         (struct val_node) Removed.
633         (operator typedef) Removed.
634         (typedef exprtype) Removed.
635         (enum series EX_*) Moved to exprP.h.
636         (struct expression) Ditto.  Also renamed a lot of the members.
637         (PXP_* defines) Changed to enums.
638         (free_node prototype) Moved to exprP.h.
639
640         * file-handle.h: (struct file_handle) New member `where'.
641
642         * file-handle.q: Migrated to new q2c format.
643         (prepend_current_directory) Removed (dead code).
644         (cmd_file_handle) Incorporated all of internal_cmd_file_handle().
645         (fh_get_handle_by_filename) Removed dead code.
646         Set new `where' member.
647
648         * file-type.c: (file_type_source_read) References to
649         parse_string_as_format() changed to data_in().
650         dfm_push_cust()/pop_cust() changed to dfm_push()/dfm_pop().
651
652         * filename.c: All references updated.
653         (init_filename) Renamed fn_init().
654         (expand_line) Removed.
655         (macro EXPAND_LINE) Removed.
656         (interp_vars) Renamed fn_interp_vars().  Now uses st_*() instead
657         of custom functions.
658         (gnu_getcwd) Renamed fn_get_cwd(), rewritten.
659         (tilde_expand) Renamed fn_tilde_expand(), uses ds_*().
660         (normalize_filename) Renamed fn_normalize().
661         (search_path) Renamed fn_search_path(), rewritten.
662         (prepend_dir) Renamed fn_prepend_dir().
663         (blp_getenv) Renamed fn_getenv().
664         (blp_dirname) Renamed fn_dirname().
665         (fn_basename) New function, not used.
666         (absolute_filename_p) Renamed fn_absolute_p().
667         (is_special_filename) Renamed fn_special_p().
668         (file_exists) Renamed fn_exists_p().
669         (readlink_malloc) Renamed fn_readlink().
670         (getenv_default) Renamed fn_getenv_default().
671         (open_file) Renamed fn_open().
672         (close_file) Renamed fn_close().
673         (open_file_ext) Renamed fn_open_ext().
674         (close_file_ext) Renamed fn_close_ext().
675
676         * font.h: Migrate from arenas to pools.
677
678         * format.c: (parse_format_specifier_name) Deal with ds_* strings.
679
680         * frequencies.g: Migrate from arenas to pools.
681
682         * frequencies.q: Migrate to new q2c version.  Migrate from arenas
683         to pools.
684
685         * getline.c: All references updated.
686         (global getl_buf) Changed from char * to struct string.
687         (static getl_include_path) Ditto.
688         (global getl_buf_len) Removed.
689         (global getl_buf_size) Removed.
690         (getl_include_path) Deal with new getl_buf, getl_include_path.
691         (getl_uninitialize) New function.
692         (getl_get_current_directory) Rewritten.
693         (getl_clear_include_path) Rewritten.
694         (getl_add_include_dir) Rewritten.
695         (getl_add_file) Assertion fixed.
696         (getl_add_virtual_file) Change initial value of `remaining_loops'
697         from 2 to 1.
698         (welcome) Rewritten.
699         (handle_line_buffer) Make static.  Change logic to make
700         getl_add_virtual_file() change sensible.  Use ds_*() strings.
701         (getl_read_line) Use ds_*() strings.  Implement SET ECHO.
702         (getl_close_file) Moved.
703         (getl_location) New function.
704
705         * getline.h: All references updated.
706         (macro curln) Removed.
707         (macro curfn) Removed.
708         (macro am_interactive) Renamed getl_am_interactive.
709         (macro am_reading_script) Renamed getl_reading_script.
710
711         * glob.c: (global fmt_parse_ignore_error) Removed.
712         (init_glob) Use locale_dir not LOCALEDIR.  Use feholdexcept() on
713         systems that support it (C99).  Turn off SET ECHO by default.  No
714         necessary julcal initialization anymore.
715
716         * groff-font.c: Migrate from arenas to pools.
717         (groff_read_font) Use err_push_file_locator().
718         (groff_read_DESC) Ditto.
719         (font_msg) Use tmsg().
720
721         * hash.c: (hsh_sort) Fix debug code.
722         [GLOBAL_DEBUGGING] Include stdio.h.
723
724         * hash.h: (macro force_hsh_insert) Rephrase.
725
726         * heap.c: Rewritten.
727         
728         * heap.h: Rewritten.
729
730         * html.c: (html_option) Change from outp_value to struct string.
731         (postopen) Change from curfn to getl_location().
732         (escape_string) Remove rich-text code.  Signature changed.
733         (output_tab_table) Switch from a_string to struct len_string.
734         Remove rich text support.
735
736         * lexer.c: All references updated.  Largely rewritten.  Major
737         changes listed below.  Removed tagged quote support.  Adapted to
738         struct string tokstr.
739         (global tokstr) Changed to struct string.
740         (global tokstr_size) Removed.
741         (global tokstr_len) Removed.
742         (global tokid) New.
743         (global tokint) Removed.
744         (global toklongstr) Removed.
745         (C* defines) Removed.
746         (static tbl[]) Removed.
747         (static id[]) Removed.
748         (static une[]) Removed.
749         (discard_line) Renamed lex_discard_line().
750         (get_entire_line) Renamed lex_entire_line().
751         (get_rest_of_line) Renamed lex_rest_of_line().
752         (get_dotted_rest_of_line) Merged into lex_rest_of_line().
753         (make_hexit) Removed.
754         (syntax_error) Renamed lex_error().  Return value removed.
755         (get_token_representation) Renamed lex_token_representation().
756         (putback) Renamed lex_put_back().
757         (putfwd) Renamed lex_put_forward().
758         (convert_negative_to_dash) Renamed lex_negative_to_dash().
759         (set_prog) Renamed lex_set_prog().
760         (init_lex) Renamed lex_init().
761         (reset_eof) Renamed lex_reset_eof().
762         (lookahead) Renamed lex_look_ahead().
763         (check_id) Rewritten.
764         (yylex) Renamed lex_get(), rewritten.
765         (lex_end_of_command) New function.  Many commands were rephrased
766         using this.
767         (lex_integer_p) New function.  Replaces compare of tokint against
768         NOT_LONG.
769         (lex_integer) New function.  Replaces tokint.
770         (match_tok) Renamed lex_match().
771         (match_id) Renamed lex_match_id().
772         (match_int) Renamed lex_match_int().
773         (force_match_id) Renamed lex_force_match_id(), added return value.
774         (force_match) Renamed lex_force_match(), added return value.
775         (force_string) Renamed lex_force_string(), added return value.
776         (force_int) Renamed lex_force_int(), added return value.
777         (lex_id_match_len) New function.
778         (id_match) Renamed lex_id_match(), rewritten.
779         (get_line) Renamed lex_get_line().
780         (preprocess_line) Renamed lex_preprocess_line().
781         (tokname) Renamed lex_token_name().
782         (bin_value_func) Removed.
783         (oct_value_func) Removed.
784         (hex_value_func) Removed.
785         (unexpected_eof) New function.
786         (convert_numeric_string_to_char_string) New function.
787         (parse_string) Rewritten, signature changed.
788         (add_tokstr_char) Removed.
789         (add_tokstr_unsigned) Removed.
790         (add_tokstr_string) Removed.
791         (parse_tagged_quote) Removed.
792         (skip_comment) Renamed lex_skip_comment().
793
794         * lexer.h: All references updated.
795         (macro is_id1) Renamed CHAR_IS_ID1.
796         (macro is_idn) Renamed CHAR_IS_IDN.
797         (token names ID, NUM, STRING, STOP, ... WITH, EXP) Renamed with
798         prefix T_: T_ID, T_NUM, T_STRING, T_STOP, ... T_WITH, T_EXP.
799         (macro get_token) Removed.
800         (macro id_match) Removed.
801         (macro force_match_id) Removed.
802         (macro force_match) Removed.
803         (macro force_string) Removed.
804         (macro force_int) Removed.
805         (macro force_num) Removed.
806         (macro force_id) Removed.
807
808         * lexerP.h: Removed.
809
810         * list.q: Migrated to new q2c format.
811         (write_line) Deal with struct len_string.
812         (write_varname) Ditto.
813         (write_fallback_headers) Ditto.
814
815         * magic.c: New file, incorporating the following global variables
816         previously in other files: endian, second_lowest_value.  And both
817         of those are conditional on #define's.
818
819         * magic.h: New file, incorporating the following global variable
820         declarations: endian, second_lowest_value, and the following macro
821         declarations: NOT_DOUBLE, NOT_LONG, NOT_INT.
822
823         * main.c: Added declarations of pgmname, finished, curdate,
824         start_interactive.
825         (main) Call new parse_script() function.
826         (parse_script) New function.
827         (execute_command) New function.
828         (dump_token) Removed.
829         (handle_error) New function.
830
831         * matrix.c: New file.
832
833         * matrix.h: New file.
834
835         * matrix-data.c: Migrated from arenas to pools.
836         (mget_token) Change from parse_string_as_format() to data_in().
837
838         * means.q: Migrate to new q2c.
839         (custom_tables) Renamed mns_custom_tables().
840         (custom_crossbreak) Renamed mns_custom_crossbreak().
841         (custom_variables) Renamed mns_custom_variables().
842
843         * mis-val.c: (static var width) Changed from `int' to `size_t'.
844         (parse_varnames) Prototype.
845         (parse_numeric) Rephrasings.
846         (parse_alpha) Adapt to new struct string tokstr.
847
848         * misc.c: (intlog10) Rewritten.
849         (spacing) Removed.
850         (ansi_rand) Renamed real_rand(), moved into random.c.
851         (ansi_srand) Renamed real_srand(), moved into random.c.
852         (setup_randomize) Moved to random.c.
853         (rand_uniform) Ditto.
854         (rand_normal) Ditto.
855         (rand_simple) Ditto.
856         (get_config_line) Removed.
857         (reverse) Removed (dead code).
858
859         * misc.h: (macro SET_BIT) Moved to bitvector.h.
860         (macro CLEAR_BIT) Ditto.
861         (macro TEST_BIT) Ditto.
862         (macro SET_BIT_TO) Ditto.
863         (macro BIT_INDEX) Ditto.
864
865         * output.c: (outp_read_devices) Move to err_push_file_locator()
866         from push_cust().  Use struct string.
867         (expand_op_tokstr) Removed.
868         (static var op_tokstr) Changed to struct string.
869         (static var op_tokstr_size) Removed.
870         (tokener) Rephrasings.  Use struct string.
871         (parse_options) Use struct string.
872         (destroy_driver) Fix assertion.
873         (outp_get_paper_size) Move to err_push_file_locator().
874         [0] Removed dead code.
875         (outp_string_width) Move to len_string.
876
877         * output.h: Comment fixes.
878         (TAG_* enum series) Removed.
879         (struct outp_value) Removed.
880         (enum OUTP_T_FANCY) Removed.
881         (struct outp_text) `s' changed from a_string to len_string.
882         (struct outp_class) `option' change arg 3 from outp_value to
883         struct string.
884
885         * pfm-read.c: (corrupt_msg) Rewritten.
886
887         * pfm-write.c: (bufwrite) Fix assertion.
888
889         * pool.c: New file, reference version.
890
891         * pool.h: New file, reference version.
892
893         * postscript.c: (ps_font_sizes) Fix assertion.
894         (ps_option) Change arg 3 from outp_value to struct string.
895         Adapt to struct string.
896         (macro output_line) Removed.
897         (macro add_string) Removed.
898         (output_encodings) Adapted to struct string.  Moved to
899         err_push_file_locator().
900         (find_encoding_file) Fix assertion.
901         (read_ps_encodings) Move to err_push_file_locator().
902         (postopen) Use getl_location() instead of curfn.
903         (out_text_plain) Move to len_string.
904         (text) Ditto.  Remove rich text support.
905
906         * print.c: (cmd_print) Remove now-unneeded resource cleanup code.
907         (cmd_print_eject) Ditto.
908         (cmd_write) Ditto.
909         (internal_cmd_print) Now cleans up after itself.  Uses
910         fh_parse_file_handle() now.
911         (cmd_print_space) Use PXP_NUMERIC to type-check.
912
913         * q2c.c: Overhauled.  Removed _("") i18n support.  All references
914         updated.  All output functions updated to handle structures rather
915         than local or static variables.  Adapt to new PSPP lex_*()
916         functions.
917         (macro _) Removed.
918         (macro N_) Removed.
919         (macro MAX_N_SBC) Removed.
920         (global bare) Removed.
921         (enum STRING) Renamed T_STRING.
922         (enum ID) Renamed T_ID.
923         (get_buffer) Buffer size increased.
924         (strlower) Renamed st_lower(), rephrased.
925         (strupper) Renamed st_upper(), rephrased.
926         (skip_ws) New function.
927         (get_line) Don't special-case any types of lines (like those
928         beginning with ! or $, for instance).
929         (get_token) Renamed lex_get().  Rephrased.
930         (static var `prefix') New.
931         (parse) New function.
932         (parse_setting) Minor rephrasing.
933         (dump_specifier_vars) Ditto.
934         (make_identifier) Put null terminator on identifier, duh.
935         (dump_vars) Renamed dump_declarations().  Never indent.  Never
936         static.  Output changed entirely.
937         (dump_specifier_init) Rephrase.
938         (dump_vars_init) No index variable needed.  Other modifications.
939         (dump_parser) Don't parse command name.  Do dump functions instead
940         of just code fragments.
941         (dump_free) Dump function instead of code fragment.
942         (recognize_directive) New function.
943         (main) Use recognize_directive().  Don't rely on magic $ line
944         beginning: instead, parse comments.  Update list of headers.
945
946         * random.c: New file, containing the following functions:
947         real_rand(), real_srand(), setup_randomize, shuffle, rand_uniform,
948         rand_normal, rand_simple.
949
950         * random.h: New file.
951
952         * recode.c: (cmd_recode) Merge internal_cmd_recode() into this
953         function.  `max_src_width', `max_dst_width' changed to size_t.
954         (internal_cmd_recode) Removed.
955         (parse_dest_spec) Merge similar cases.
956         (parse_src_spec) Add assertion.
957
958         * repeat.c: (recognize_keyword) New function.
959         (internal_cmd_do_repeat) Parse and handle PRINT keyword on END
960         REPEAT.  Improve recognition of END REPEAT (use
961         recognize_keyword()).  Move from curfn to getl_location().  Use
962         struct string.
963                 
964         (perform_DO_REPEAT_substitutions) Adapt to struct string.
965
966         * set.q: Adapt to new q2c.
967         (cmd_set) Range-check some values better.
968         (custom_blanks) Renamed stc_custom_blanks().
969         (custom_length) Renamed stc_custom_length().
970         (custom_results) Renamed stc_custom_results().
971         (custom_seed) Renamed stc_custom_seed().
972         (custom_width) Renamed stc_custom_width().
973         (custom_format) Renamed stc_custom_format().
974         (custom_journal) Renamed stc_custom_journal().
975         (custom_color) Renamed stc_custom_color().
976         (custom_listing) Renamed stc_custom_listing().
977         (custom_disk) Renamed stc_custom_disk().
978         (custom_log) Renamed stc_custom_log().
979         (custom_rcolor) Renamed stc_custom_rcolor().
980         (custom_viewlength) Renamed stc_custom_viewlength().
981         (custom_workdev) Renamed stc_custom_workdev().
982
983         * settings.h: Not necessary to include format.h any longer.
984
985         * sfm-read.h: (macro bswap_int32) Moved here from sfmP.h.
986         (corrupt_msg) Rewritten.
987
988         * sort.c: Adapt to rewritten heap ADT.
989
990         * str.c: (aa_strcpy) Removed.
991         (ab_strcpy) Removed.
992         (ac_strcpy) Removed.
993         (ba_strcpy) Removed.
994         (bb_strcpy) Removed.
995         (ca_strcpy) Removed.
996         (aa_strdup) Removed.
997         (aa_strdupcpy) Removed.
998         (ba_strdup) Removed.
999         (sa_strdup) Removed.
1000         (memrev) Renamed mm_reverse().
1001         (memrmem) Renamed mm_find_reverse().
1002         (cmp_str) Renamed st_compare_pad().
1003         (strmaxcpy) Removed.
1004         (strbarepadcpy) Renamed st_bare_pad_copy(), signature changed.
1005         (strbarepadlencpy) Renamed st_bare_pad_len_copy(), signature
1006         changed.
1007         (strpadcpy) Renamed st_pad_copy(), signature changed.
1008         (blpstrset) Removed.
1009         (ds_create) New function.
1010         (ds_init) New function.
1011         (ds_replace) New function.
1012         (ds_destroy) New function.
1013         (ds_clear) New function.
1014         (ds_extend) New function.
1015         (ds_shrink) New function.
1016         (ds_truncate) New function.
1017         (ds_length) New function.
1018         (ds_size) New function.
1019         (ds_value) New function.
1020         (ds_end) New function.
1021         (ds_concat) New function.
1022         (ds_concat_buffer) New function.
1023         (ds_printf) New function.
1024         (ds_putchar) New function.
1025         (ds_getline) New function.
1026         (ds_get_config_line) New function derived from the old
1027         misc.c:get_config_line().
1028         (ls_create) New function.
1029         (ls_create_buffer) New function.
1030         (ls_init) New function.
1031         (ls_shallow_copy) New function.
1032         (ls_destroy) New function.
1033         (ls_null) New function.
1034         (ls_null_p) New function.
1035         (ls_empty_p) New function.
1036         (ls_length) New function.
1037         (ls_value) New function.
1038         (ls_end) New function.
1039
1040         * str.h: Reformatted.
1041         (struct a_string) Removed.
1042         (struct b_string) Removed.
1043         (struct c_string) Removed.
1044         (struct len_string) New.
1045         (struct string) New.
1046         (macro as_streq) Removed.
1047         (macro bs_streq) Removed.
1048         (macro cs_streq) Removed.
1049         (macro sa_streq) Removed.
1050         (macro sb_streq) Removed.
1051         [__GNUC__] (inline function ds_putchar) New function.
1052         [__GNUC__] (inline function ds_length) New function.
1053         [__GNUC__] (inline function ds_value) New function.
1054         [__GNUC__] (inline function ds_end) New function.
1055
1056         * sysfile-info.c: (cmd_sysfile_info) Rephrased.
1057         (display_vectors) Fix missing i18n.
1058
1059         * t-test.q: Migrate to new q2c.
1060
1061         * tab.c: Migrate from arenas to pools.
1062         (tab_create) Use struct len_string.
1063         (tab_realloc) Ditto.
1064         (text_format) Ditto.
1065         (tab_joint_text) Ditto.
1066         (tab_natural_width) Remove rich text support.
1067         (tab_natural_height) Ditto.
1068         (tab_output_text) Handle TAT_FIX.
1069         (tab_raw) Change arg from a_string to len_string.
1070         (tabi_driver) Fix assertion.  Use struct len_string.
1071         (render_strip) Use struct len_string.  Remove rich text support.
1072         Add `const' qualifiers.
1073
1074         * tab.h: (enum TAB_RICH) Remove.
1075         (enums TAB_COL_NONE, TAB_COL_DONE) New.  Where appropriate,
1076         SOM_COL_* updated to read TAB_COL_*.
1077         (struct tab_table) Change arena to pool.  Change a_string to
1078         len_string.
1079
1080         * temporary.c: (restore_dictionary) Rewrite Checker code.
1081
1082         * var.h: (macros MAX_SHORT_STRING, MIN_LONG_STRING, SYSMIS,
1083         LOWEST, HIGHEST) Moved here from common.h.
1084         (typedef any_trns) Removed.  All references changed to `struct
1085         trns_header'.
1086
1087         * vars-atr.c: (force_create_variable) Fix assertion.
1088         (force_dup_variable) Fix assertion.
1089         
1090 Thu Jun  3 18:40:42 1999  Ben Pfaff  <blp@gnu.org>
1091
1092         Using alphanumeric variables in functions under AGGREGATE
1093         segfaulted.  Fixed.  Thanks to Dr. Dirk Melcher
1094         <BZN-mdksh@t-online.de> for reporting this bug.
1095         
1096         * aggregate.c: (parse_aggregate_functions) When setting the
1097         FSTRING bit, also allocate memory for the `string' member of
1098         agr_next.
1099         (free_aggregate_functions) Free iter->string.  Don't use the
1100         non-function bits when indexing the array of functions.
1101         [DEBUGGING] (debug_print) Don't use the non-function bits when
1102         indexing the array of functions.        
1103
1104 Sun May 30 00:00:54 1999  Ben Pfaff  <blp@gnu.org>
1105
1106         Under certain circumstances, the final case would be omitted from
1107         the results of an AGGREGATE operation.  Fixed.  Thanks to Dr. Dirk
1108         Melcher <BZN-mdksh@t-online.de> for reporting this bug.
1109         
1110         * aggregate.c (agr_00x_end_func): Increment number of cases in
1111         sink before writing case.  For streams that keep track of how many
1112         cases there are based on this value, this means that the last case
1113         will be read in on the next stream read.
1114
1115 Sat May 29 22:03:31 1999  Ben Pfaff  <blp@gnu.org>
1116
1117         Undefined behavior was invoked by referencing a freed pointer.
1118         
1119         * vfm.c (memory_stream_write): Free pointer *after* checking for
1120         non-null status.
1121
1122 Sat May 29 22:02:22 1999  Ben Pfaff  <blp@gnu.org>
1123
1124         A wrong record size was displayed when paging the active file to
1125         disk.
1126         
1127         * vfm.c: (memory_stream_write) Fix off-by-one error.
1128
1129 Sat May 29 21:50:26 1999  Ben Pfaff  <blp@gnu.org>
1130
1131         Not having enough temporary space for sorting caused a core dump.
1132         Fixed.
1133         
1134         * sort.c: (allocate_cases) Initialize i.
1135
1136 Sat May 29 21:40:54 1999  Ben Pfaff  <blp@gnu.org>
1137
1138         Syntax errors in function descriptions on AGGREGATE caused core
1139         dumps.  Fixed.
1140         
1141         * aggregate.c (cmd_aggregate): Don't free agr_dict after calling
1142         free_aggregate_functions(), since that function already frees
1143         agr_dict.
1144         
1145 Sat May 29 21:06:10 1999  Ben Pfaff  <blp@gnu.org>
1146
1147         A null pointer was dereferenced, causing a core dump, when
1148         PERCENTILES was specified on FREQUENCIES.  This fixes the problem,
1149         but PSPP still doesn't calculate percentiles.  Thanks to Regnor
1150         Jernsletten <rjernsle@eunet.no> for reporting this problem.
1151         
1152         * arena.c: (arena_malloc) If the arena hasn't been initialized
1153         already, initialize it.
1154
1155 Sat May 29 20:47:29 1999  Ben Pfaff  <blp@gnu.org>
1156
1157         * Makefile.cygwin: New file supplied by Hankin <hankin@dunno.com>
1158         for compilation with Cygnus Windows B20.  Not used by other
1159         systems.
1160
1161 Sat May 29 20:36:04 1999  Ben Pfaff  <blp@gnu.org>
1162
1163         SORT always sorted in ascending order.  Fixed.  Thanks to Dr. Dirk
1164         Melcher <BZN-mdksh@t-online.de> for reporting this bug.
1165
1166         * sort.c: (compare_case_lists) Reverse sense of comparison if
1167         sorting in descending order.
1168         (compare_record) Ditto.
1169
1170 Tue Mar  9 13:18:54 1999  Ben Pfaff  <blp@gnu.org>
1171
1172         SPLIT FILE with a string variable caused a core dump.  Fixed.
1173
1174         * vfm.c: If the variable is a string then make a temporary value
1175         struct pointing to it.  The underlying problem is a lot bigger
1176         than this (see TODO) but this is a stopgap for the simple case at
1177         least.
1178         
1179 Tue Mar  9 13:15:53 1999  Ben Pfaff  <blp@gnu.org>
1180
1181         Nested INCLUDEs didn't work.  Fixed.
1182
1183         * getline.c: (getl_include) Set first_line to NULL in allocated
1184         structure.
1185
1186 Tue Mar  9 13:13:46 1999  Ben Pfaff  <blp@gnu.org>
1187
1188         The MATCH FILES procedure set the values of variables not present
1189         to 0.  It should have been SYSMIS.  This is now fixed.
1190
1191         * get.c: (mtf_delete_file_in_place) Replace 0.0 by SYSMIS.
1192
1193 Tue Mar  9 12:52:23 1999  Ben Pfaff  <blp@gnu.org>
1194
1195         The REMARK command was too aggressive about skipping lines.  It
1196         didn't like being the last command in a file.
1197
1198         * command.c: (cmd_remark) Call get_entire_line() instead of
1199         get_line().
1200
1201 Tue Mar  9 12:48:05 1999  Ben Pfaff  <blp@gnu.org>
1202
1203         Comment parsing wasn't consistent with the rest of the code in its
1204         idea of where one command ends and another starts.  This meant
1205         that sometimes commands would be mysteriously ignored.  Thanks to
1206         Dr. Dirk Melcher <BZN-mdksh@t-online.de> for reporting this bug.
1207          
1208         * command.c: (parse_cmd) Hand off comment parsing to new function
1209         skip_comment() in lexer.c.
1210         * lexer.c: (skip_comment) New function.
1211
1212 Wed Jan 20 20:22:07 1999  Ben Pfaff  <blp@gnu.org>
1213
1214         The TABLE subcommand on MATCH FILES worked only erratically at
1215         best.  This fixes it.  Thanks to Dr. Dirk Melcher
1216         <BZN-mdksh@t-online.de> for reporting this bug.
1217
1218         * get.c: (mtf_compare_BY_values) When comparing string values, a
1219         difference of 1 is still a difference :-)
1220         (mtf_processing) Inverted TABLE reading logic fixed.  Also don't
1221         advance TABLE files automatically when matched.  Comment fixes.
1222
1223 Tue Jan 19 22:32:31 1999  Ben Pfaff  <blp@gnu.org>
1224
1225         VARIABLE LABELS rejected a slash before the first variable
1226         specification, contradicting the documentation.  Thanks to Walter
1227         M. Gray <graywm@northernc.on.ca> for reporting this bug.
1228
1229         * var-labs.c: (cmd_variable_labels) Ignore a leading slash in
1230         command specification.
1231
1232 Tue Jan 19 22:29:54 1999  Ben Pfaff  <blp@gnu.org>
1233
1234         Because of an incorrect optimization in memory allocation,
1235         CROSSTABS sometimes segfaulted when asked to output multiple
1236         tables.  Thanks to Walter M. Gray <graywm@northernc.on.ca> for
1237         reporting this bug.
1238
1239         * crosstabs.q: (postcalc) New variables maxcols, maxcells, which
1240         are passed to output_pivot_table() for its use.
1241         (output_pivot_table) Instead of assuming the number of columns is
1242         constant, keep track with maxcols.  In general mode, use maxcells
1243         to determine whether more matrix cells need to be allocated.    
1244
1245 Tue Jan 19 22:27:46 1999  Ben Pfaff  <blp@gnu.org>
1246
1247         CROSSTABS didn't display value labels for column and row
1248         variables.  Thanks to Walter M. Gray <graywm@northernc.on.ca> for
1249         reporting this bug.
1250
1251         * crosstabs.q: (table_value_missing) If the specified value has a
1252         value label for this variable, then show it instead of the raw
1253         value.
1254         (display_dimensions) Delegate display of value_labels to
1255         table_value_missing.
1256
1257 Mon Jan 18 20:04:06 1999  Ben Pfaff  <blp@gnu.org>
1258
1259         WRITE didn't write line ends.  Fixed.  Thanks to Dr. Dirk Melcher
1260         <BZN-mdksh@t-online.de> for reporting this bug.
1261
1262         * print.c: (print_trns_proc) Write (CR/)LF if PRINT is used _or_
1263         if the file isn't declared as binary.
1264
1265 Mon Jan 18 19:56:45 1999  Ben Pfaff  <blp@gnu.org>
1266
1267         MATCH FILES corrupted memory and dumped core on some syntax
1268         errors.  Fixed.
1269
1270         * get.c: (cmd_match_files) Set file->handle to NULL before
1271         jumping to lossage.
1272         (mtf_free_file) Don't free a null dictionary.   
1273
1274 Mon Jan 18 19:27:57 1999  Ben Pfaff  <blp@gnu.org>
1275
1276         MATCH FILES should set numeric values not available to the
1277         system-missing value, not to 0.  Thanks to Dr. Dirk Melcher
1278         <BZN-mdksh@t-online.de> for reporting this bug.
1279
1280         * get.c: (mtf_processing) Set unused records to system-missing,
1281         not 0.
1282
1283 Mon Jan 18 15:06:46 1999  Ben Pfaff  <blp@gnu.org>
1284
1285         KEEP didn't work properly on the SAVE procedure.  Fixed.  Thanks
1286         to Ralf Geschke <ralf@kuerbis.org> for reporting this bug.
1287
1288         * temporary.c: (save_dictionary) Initialize var_by_name AVL tree
1289         in newly created dictionary, and add each copied variable to the
1290         tree.
1291  
1292 Mon Jan 18 15:04:48 1999  Ben Pfaff  <blp@gnu.org>
1293
1294         Memory leak fix.
1295         
1296         * get.c: (trim_dictionary) Free variable list for KEEP after
1297         finishing with it.
1298
1299 Mon Jan 18 12:57:36 1999  Ben Pfaff  <blp@gnu.org>
1300
1301         Some systems didn't like the way open_file was coded.  Thanks to
1302         Hankin <hankin@rogue.consultco.com> for pointing this out.
1303
1304         * filename.c: (open_file) Don't try to store stdin, stdout,
1305         stderr as part of an array, because that doesn't always work.
1306
1307 Mon Jan 18 12:53:27 1999  Ben Pfaff  <blp@gnu.org>
1308
1309         The SAVE procedure didn't save long string variables properly.
1310         Fixed by this patch.  Thanks to Hankin
1311         <hankin@rogue.consultco.com> for this patch.
1312         
1313         * sfm-write.c: (write_variable) Fix off-by-one error in writing
1314         out variable pad records.
1315
1316 Tue Jan  5 14:29:27 1999  Ben Pfaff  <blp@gnu.org>
1317
1318         Previously, if PRINT SPACE were given a negative argument, it
1319         would report an error, then spin in an (almost) infinite loop.
1320         This fixes that behavior.
1321
1322         * print.c: (print_space_trns_proc) After reporting a negative
1323         argument, set number of lines to print to 1.
1324
1325 Tue Jan  5 13:59:55 1999  Ben Pfaff  <blp@gnu.org>
1326
1327         SPSS 8.0 outputs some new record types in its system files, and it
1328         allows longer value labels.  Accept these system files.
1329
1330         * sfm-read.c: (sfm_read_dictionary) Ignore record type 7 subtype
1331         11 emitted by SPSS 8.0.
1332         
1333 Tue Jan  5 13:55:50 1999  Ben Pfaff  <blp@gnu.org>
1334
1335         The LIST procedure was too conservative in allocating space for
1336         buffers, which caused a bug that only showed up with very long
1337         output variables.  Thanks to Hankin <hankin@dunno.com> for this
1338         bug report.
1339
1340         * list.q: (determine_layout) Allocate 1022 bytes instead of 256.
1341
1342 Tue Jan  5 13:34:34 1999  Ben Pfaff  <blp@gnu.org>
1343
1344         Typo meant string format specifiers weren't checked properly.  I
1345         think that Hankin <hankin@dunno.com> sent me this report, but I'm
1346         willing to be corrected on this point.
1347  
1348         * format.c: (check_string_specifier) Fix obvious typo.  
1349
1350 Tue Jan  5 12:50:42 1999  Ben Pfaff  <blp@gnu.org>
1351
1352         Using $CASENUM in an expression didn't work.  Here's a fix.
1353         Thanks to Dirk Melcher <BZN-mdksh@t-online.de> for reporting this
1354         bug.
1355          
1356         * expr-evl.c: (evaluate_expression) Add OP_CASENUM case.
1357
1358         * expr-opt.c: (dump_node) OP_CASENUM is acceptable.
1359
1360 Tue Jan  5 12:47:48 1999  Ben Pfaff  <blp@gnu.org>
1361
1362         The changes in 0.2.1 to fix DATA LIST FREE parsing broke some
1363         other behavior, *sigh*.  This patch hopefully fixes that.  This
1364         time I've actually tested it.
1365
1366         Thanks to Hankin <hankin@dunno.com> for reporting this bug.
1367
1368         * data-list.c: (read_from_data_list_free,
1369         read_from_data_list_list) Call parse_string_as_format() directly
1370         without mucking around with the field width.
1371
1372 Tue Jan  5 12:31:19 1999  Ben Pfaff  <blp@gnu.org>
1373
1374         Occasionally, you may encounter a script that wants to be
1375         interpreted in interactive mode.  Make -i emulate this behavior to
1376         allow such scripts to be executed with PSPP.
1377
1378         Thanks to Hankin <hankin@dunno.com> for reporting this behavior.
1379
1380         * cmdline.c: (pre_syntax_message[]) Update -i description.
1381
1382         * lexer.c: (preprocess_line) When getl_interactive is 2 (i.e.,
1383         when -i is given on the command line) don't treat unindented lines
1384         as starting a new command.
1385
1386 Tue Jan  5 12:30:10 1999  Ben Pfaff  <blp@gnu.org>
1387
1388         In conjunction with egcs 1.1.1, Checker emits some bogus warnings,
1389         mostly caused by local initialized aggregates.  After egcs is
1390         fixed upstream these can be removed, but for now they're not a big
1391         deal.
1392         
1393         * ascii.c: (ascii_postopen_driver) Checker chokes on local
1394         initialized arrays.  Avoid this.
1395
1396         * sfm-write.c: (sfm_write_dictionary) Don't use a local
1397         initialized struct.
1398
1399 Tue Jan  5 12:07:24 1999  Ben Pfaff  <blp@gnu.org>
1400
1401         egcs 1.1.1 has some new warnings relative to gcc 2.8.1, which the
1402         following changes avoid.  Currently I compile sources with egcs
1403         1.1.1 and gcc 2.7.2.3 before sending them out.
1404
1405         * apply-dict.c: (apply_dict) Use new avl_traverser_init() macro.
1406         
1407         * ascii.c: (option_tab[]) Initialize all struct members.
1408
1409         * avl.h: (avl_traverser_init) New macro.
1410         
1411         * command.c: (DEFCMD, UNIMPL macros, cmd_table[]) Initialize all
1412         struct members.
1413
1414         * crosstabs.q: (enum_var_values) Use new hsh_iterator_init()
1415         macro.
1416
1417         * hash.c: Comment fix.
1418
1419         * hash.h: (hsh_iterator_init) New macro.
1420
1421         * html.c: (option_tab[]) Initialize all struct members.
1422
1423         * pfm-write.c: (write_value_labels) Use new avl_traverser_init()
1424         macro.
1425
1426         * postscript.c: (option_tab[]) Initialize all struct members.
1427         (output_encodings, preclose, dump_lines) Use new
1428         hsh_iterator_init() macro.
1429
1430         * sfm-write.c: (write_value_labels) Use new avl_traverser_init()
1431         macro.
1432
1433         * sysfile-info.c: (describe_variable) Use new avl_traverser_init()
1434         macro.
1435
1436 Thu Nov 19 12:32:45 1998  Ben Pfaff  <blp@gnu.org>
1437
1438         * data-in.c: Examined each of the parsing functions to make sure
1439         that they wouldn't dump core if they were passed a string of the
1440         wrong length, since now the DATA LIST FREE/LIST routines don't
1441         check for field width before passing it to the data parser.
1442         (parse_RBHEX, parse_AHEX) Reject odd length input.
1443         (parse_string_as_format) Reject input that's too short or too
1444         long.
1445
1446         * data-list.c: Before, the DATA LIST FREE/LIST routines would pad
1447         a field to its entire declared output width then pass it to the
1448         data-in parsing routines.  This contradicted the documented
1449         behavior.  This is fixed in these changes.  Thanks to Mark H. Wood
1450         <mwood@IUPUI.Edu>.  In addition, this fixes a few more details of
1451         free-format parsing that differed from SPSS.
1452         (cut_field) Commas and spaces are treated identically.  Returns
1453         the proper column instead of a fixed 1 value.
1454         (parse_field) Removed.
1455         (read_from_data_list_free, read_from_data_list_list) Call
1456         parse_string_as_format directly instead of parse_field.
1457
1458         * heap.c: (heap_delete) Stylistic fixes.
1459
1460 Sun Aug  9 11:12:13 1998  Ben Pfaff  <blp@gnu.org>
1461
1462         * loop.c: (loop_2_trns_proc) Formatting fix.
1463
1464         * sel-if.c: (cmd_filter) Set FILTER_before_TEMPORARY.
1465
1466         * var.h: (glob var FILTER_before_TEMPORARY) New global var.
1467
1468         * vfm.c: (macro FILTERED) New.
1469         (static var filter_var) New.
1470         (process_active_file_write_case) Use FILTERED.
1471         (setup_filter) Set filter_var.
1472         (close_active_file) Delete the filter if not
1473         FILTER_before_TEMPORARY.
1474         (procedure_write_case) Use FILTERED.
1475
1476 Sat Aug  8 00:20:14 1998  Ben Pfaff  <blp@gnu.org>
1477
1478         * crosstabs.q: Changed /PIVOT={ON,OFF} to /FORMAT={PIVOT,NOPIVOT}.
1479
1480         * data-in.c: (parse_day_count) Message fix.
1481         (parse_month) Style fix.
1482
1483         * data-list.c: (struct data_list_pgm) New member eof.
1484         (cmd_data_list) Init eof to 0.
1485         (do_reading) Implement the /END subcommand and read-past-eof
1486         checking.
1487
1488         * do-if.c: Include stdio.h when debugging.
1489         (cmd_else_if) Make sure the command is .-terminated.
1490
1491         * glob.c: (init_glob) Capitalize the command prompt.
1492
1493         * inpt-pgm.c: (end_case_trns_proc) Debugging message.
1494         (end_file_trns_proc) Debugging message.
1495
1496         * loop.c: (internal_cmd_loop) Make it work when there's no loop
1497         index!
1498         (loop_2_trns_proc) Enable MXLOOPS (why was this disabled?)
1499
1500         * main.c: (dump_token) Make kwtab[] const.
1501
1502         * set.q: Spelling, comment fixes.
1503
1504         * sysfile-info.c: (cmd_display) DISPLAY VECTORS not DISPLAY
1505         VECTOR.
1506
1507         * vars-prs.c: (fill_all_vars) Style fix.
1508
1509         * vfm.c: (index_to_varname) Return const.
1510
1511 Tue Aug  4 23:49:23 1998  Ben Pfaff  <blp@gnu.org>
1512
1513         * Changes in many source files for partial -ansi -pedantic and
1514         no-debugging compliance: Remove trailing common in enum
1515         declarations; add `unused' attributes; insert some appropriate
1516         casts.
1517
1518         * cmdline.c: (parse_command_line) Add new --testing-mode flag.
1519
1520         * command.c: (shell) Make static.
1521         (run_command) Make static.
1522
1523         * data-list.c: (dump_fixed_table) Remove use of local_strdup().
1524
1525         * dfm.c: (cmd_begin_data) I18n fix.
1526
1527         * error.c: (verbose_msg) Define if __STRICT_ANSI__.
1528
1529         * error.h: (macro verbose_msg) Define if __STRICT_ANSI__.
1530
1531         * expr-opt.c: (evaluate_tree) Don't initialize local arrays if
1532         __STRICT_ANSI__.
1533
1534         * file-handle.q: Don't prepend the source file directory name to
1535         the data file name.  (Ongoing issue.)
1536         (prepend_current_directory) Comment out.
1537         (internal_cmd_file_handle) Don't call prepend_current_directory().
1538         (fh_get_handle_by_filename) Ditto.
1539
1540         * filename.c: Append zero byte to readlink() return value.
1541
1542         * getline.c: (getl_read_line) I18n fix.
1543
1544         * lexer.h: Don't use gcc features if __STRICT_ANSI__.
1545
1546         * misc.h: Don't use gcc features if __STRICT_ANSI__.
1547
1548         * pfm-write.c: (bufwrite) Don't try to increment a void * pointer
1549         directly.
1550
1551         * postscript.c: (output_encodings) Don't use local_strdup().
1552         (postopen) Ditto.
1553
1554         * print.c: Don't use gcc features if __STRICT_ANSI__.
1555
1556         * q2c.c: (dump_vars) Don't put a , at the end of the last enum.
1557
1558         * recode.c: (parse_src_spec) Fully brace nested if's.
1559
1560         * set.q: (global var set_testing_mode) New var.
1561
1562 Wed Jul 29 22:01:44 1998  Ben Pfaff  <blp@gnu.org>
1563
1564         * ascii.c: Add some more `unused' attributes that only come into
1565         play when NDEBUG is defined.
1566         (ascii_close_page) Set s_len when reallocating s.
1567         
1568         * crosstabs.q: (delete_missing) New function.
1569         (output_pivot_table) Call delete_missing() if /MISSING=REPORT.
1570         (make_summary_table) Create summary table reallocable.
1571
1572         * postscript.c: Add more `unused' attributes as above.
1573
1574         * tab.c: (tab_create) [GLOBAL_DEBUGGING] Set reallocable member.
1575         (tab_realloc) [GLOBAL_DEBUGGING] Assert that table is reallocable.
1576          
1577         * tab.h: (struct tab_table) [GLOBAL_DEBUGGING] New `reallocable'
1578         member.
1579
1580         * var.h: (macro force_dup_variable) [!GLOBAL_DEBUGGING] Remove
1581         gratuitous space between parameter definition.
1582
1583         * vars-atr.c: Changed some assert(0)'s to abort()'s to prevent
1584         complaints about running off the end of functions with NDEBUG
1585         enabled.
1586
1587 Sun Jul  5 00:17:25 1998  Ben Pfaff  <blp@gnu.org>
1588
1589         * Several source files: Removed some PORTME notes when reflection
1590         revealed that ANSI forbids that sort of breakage.  Also, added
1591         lots of `unused' qualifiers here and there.
1592
1593         * aggregate.c: (accumulate_aggregate_info) Remove local var
1594         weighting that turned out not to be used.
1595
1596         * avl.c: Update to version 1.1.0.  Add unused specifier.
1597         (avl_destroy) Initialize ab to 0.  Comment fixes.  Cast return
1598         value to void *.
1599         (avl_probe) Replace some instances of 1 with +1 where appropriate.
1600         (avl_find) Cast return value to void *.
1601         (avl_delete) q doesn't need to be initialized at the beginning of
1602         the function.  Replace some instances of 1 with +1.
1603         (force_avl_delete) Renamed avl_force_delete, all references changed.
1604         (compare_ints) `param' marked unused.
1605         (print_int) `param' marked unused.
1606         (recurse_tree) Replace some instances of 1 with +1.
1607
1608         * avl.h: Update to version 1.1.0.  Only declares avl function
1609         types if not already declared.
1610         (AVL_MAX_HEIGHT) Only define if not already defined.
1611         (struct avl_node) New unused member char pad[2].
1612         [GLOBAL_DEBUGGING] Change conditionalization to NDEBUG instead.
1613         (force_avl_insert) Renamed avl_force_insert.
1614         (force_avl_delete) Renamed avl_force_delete.
1615
1616         * crosstabs.q: (struct table_entry) Put `freq' into a union with
1617         new member `data'.
1618         (struct crosstab) Add new member `ofs'.
1619         (glob var int_tab) Removed.
1620         (custom_tables) In integer mode, assign v[i] properly through the
1621         indirect var_dict.
1622         (custom_variables) Now p.crs.max == max + 1.
1623         [DEBUGGING] (debug_print) p.crs.min and p.crs.max are now ints.
1624         (precalc) Implement integer mode.
1625         (calc_integer) Implement integer mode.
1626         (compare_table_entry) Remove unused local variable `comparing'.
1627         (make_summary_table) Implement integer mode.
1628         (macro ns_rows) Implemented as static variable now.
1629         (several variables) Made static, from global.
1630         (output_pivot_table) Use table_value_missing() for column heads.
1631         Remove several unused local variables.  Implement integer mode
1632         table summing.  Count up ns_rows.
1633         (crosstabs_dim) Make columns wider when /MISSING=REPORT requested.
1634         (find_pivot_extent) Moved into find_pivot_extent_general; now just
1635         calls that function or find_pivot_extent_integer.
1636         (find_pivot_extent_integer) New function.
1637         (enum_var_values) Implemented for integer mode.
1638         (table_value_missing) New function.
1639         (display_dimensions) Call table_value_missing() for heads.
1640         (float_M_suffix) New function.
1641         (display_crosstabulation) Call table_value_missing() for row
1642         heads.  Handle missing values in /MISSING=REPORT mode.
1643         (calc_fisher) Remove unused var N.
1644         (calc_r) Remove unused var fact.
1645
1646         * data-list.c: (dump_fixed_table) Fix table dimensioning.
1647         (read_one_set_of_repetitions) Remove unused vars var_spec, column.
1648
1649         * data-out.c: (insert_commas) Remove unused var cp.
1650         (convert_CCx) Remove unused vars save_set_decimal,
1651         save_set_grouping.
1652
1653         * descript.q: (dump_z_table) Fix table dimensioning.
1654         (pre_calc) Remove unused var j.
1655         (display) Remove unused vars title, s.  Fix table dimensioning.
1656
1657         * expr-evl.c: Comment fixes.
1658
1659         * frequencies.q: (full_dim) New function.
1660         (dump_full) Fix table dimensioning.
1661         (condensed_dim) New function.
1662         (dump_condensed) Fix table dimensioning.
1663
1664         * get.c: (cmd_match_files) Remove unused var n_val.  Remove unused
1665         label winnage.
1666
1667         * html.c: (html_close_drive) Remove unused var i.
1668         (postopen) Remove unused vars title, curfn_len, cp.
1669         (preclose) Remove unused vars this, x.
1670
1671         * lexer.c: Comment fixes.
1672
1673         * matrix-data.c: (cmd_matrix_data) Remove unused var index.
1674
1675         * means.q: (custom_tables) Remove unused var m_dim.
1676
1677         * mis-val.c: Format fix.
1678
1679         * modify-vars.c: (cmd_modify_vars) Remove unused var new_dict.
1680
1681         * output.c: (outp_get_paper_size) Remove unused var cp.
1682
1683         * pfm-read.c: (read_float) Remove unused var save, unused label
1684         underflow.
1685         (read_variables) Remove unused vars cp, j.
1686         (read_value_label) Remove unused var j.
1687
1688         * pfm-write.c: (bufwrite) Remove unused var i.
1689
1690         * postscript.c: (ps_postopen_drive) Remove unused vars dev_info,
1691         fn.
1692         (output_encodings) Remove unused vars char_cp, n_output.
1693         (read_ps_encodings) Remove unused var ep.
1694         (postopen) Remove unused var title.
1695         (preclose) Remove unused var fp.
1696         (ps_open_page) Remove unused vars true, false, orientation,
1697         mirror_horz, mirror_vert, width, length.
1698         (ps_text_metrics) Remove unused var x.
1699
1700         * q2c.c: (find_symbol) Remove unused var y.
1701         (parse_setting) Remove unused parameter sbc, all references
1702         changed.
1703         (dump_parser) Remove unused var cp.
1704         (dump_free) Remove unused var i.
1705
1706         * set.q: (static vars args, n) Removed.
1707         (internal_cmd_gset) Removed.
1708
1709         * sfm-read.c: (sfm_read_dictionary) Removed unused var i.
1710         (read_machine_flt64_info) Removed unused var file_endian.
1711         (read_documents) Removed unused var i.
1712         (read_compressed_data) Removed unused parameter dict, all
1713         references changed.
1714
1715         * sfm-write.c: (bufwrite) Removed unused var i.
1716         (sfm_write_case) Removed unused var i.
1717
1718         * sort.c: (merge_once) Remove unused var t.
1719         (write_separate) #if 0 out as dead code.
1720
1721         * split-file.c: (cmd_split_file) Remove unused var i.
1722
1723         * sysfile-info.c: (sysfile_info_dim) New function.
1724         (cmd_sysfile_info) Fix table dimensioning.
1725         (variables_dim) New function.
1726         (display_variables) Fix table dimensioning.
1727         (describe_variable) Remove unused var prev_r.
1728
1729         * t-test.q: (z_postcalc) Removed.
1730         (pairs_calc) Remove unused var bad_weight.
1731         (postcalc) Remove unused vars dfn, dfd.
1732
1733         * tab.c: (tab_create) Set t->dim to NULL.
1734         (tab_dim) Make sure t->dim is NULL first.
1735         (tab_natural_width) Remove parameter `clamp'.
1736         (tab_value) Remove duplicate assertion for table.
1737         (tab_raw) New function.
1738         (nowrap_dim) New function.
1739         (wrap_dim) New function.
1740         (tab_output_text) Fix table dimensioning.
1741
1742         * tab.h: (tab_raw) New macro.
1743
1744         * val-labs.c: (get_label) Remove unused var type.
1745         (copy_value_labels) Remove unused var trav.
1746
1747         * var.h: (struct crosstab_proc) Completely changed.
1748
1749         * vars-prs.c: (parse_dict_variable) Remove unused var v.
1750
1751         * vfm.c: (open_active_file) Remove unused vars i, lp.
1752
1753         * weight.c: (weight_trns_proc) #if 0 out as dead code.
1754         
1755 Tue Jun  2 23:37:21 1998  Ben Pfaff  <blp@gnu.org>
1756
1757         * Makefile.am: Add apply-dict.c, flip.c.
1758
1759         * apply-dict.c: New file.
1760         
1761         * command.c: (struct command) Make cmd[] larger for CLEAR
1762         TRANSFORMATIONS command name.
1763         (parse_cmd) Make sure we're in a valid state before using it as an
1764         index.  Discard variables and reset state on invalid transitions.
1765         (cmd_clear_transformations) New function.
1766
1767         * command.def: Add APPLY DICTIONARY, CLEAR TRANSFORMATIONS, FLIP.
1768         Add unimplemented PRESERVE, RESTORE.
1769
1770         * file-handle.h: Include stddef.h.
1771
1772         * flip.c: New file.
1773         
1774         * pfm-read.c: (parse_value) Pad value label values with spaces,
1775         not nulls.
1776
1777         * sfm-read.c: (struct sfm_fhuser_ext) Add reference count.
1778         (sfm_close) Decrement reference count, make sure it's zero.
1779         (sfm_maybe_close) New function.
1780         (sfm_read_dictionary) Handle reference counts.
1781
1782         * vars-atr.c: (clear_default_dict) New function.
1783         (discard_variables) Use clear_default_dict().
1784
1785 Sun May 31 00:58:05 1998  Ben Pfaff  <blp@gnu.org>
1786
1787         * Makefile.am: Add pfm-write.c.
1788         (LDADD) Add the libgmp2 libraries.
1789
1790         * command.def: Define EXPORT.
1791
1792         * get.c: (cmd_export) New function.
1793         (export_write_case_func) New function.
1794
1795         * pfm-read.c: (static spss2ascii[]) Make it const.
1796
1797         * pfm-write.c: New file.
1798
1799         * sfm-write.c: Formatting, comment fixes.
1800
1801         * var.h: Comment fix.
1802
1803 Fri May 29 21:44:12 1998  Ben Pfaff  <blp@gnu.org>
1804
1805         * Makefile.am: Add pfm.h, pfm-read.c.
1806
1807         * command.def: IMPORT is now implemented.
1808
1809         * format.c: (glob var translate_fmt[]) New var.
1810
1811         * get.c: (enum GTSV_NONE) Renamed GTSV_OPT_NONE.
1812         (cmd_import) New function.
1813         (import_source_read) New function.
1814         (glob var import_source) New var.
1815
1816         * pfm-read.c: New file.
1817
1818         * pfm.h: New file.
1819         
1820         * sfm-read.c: (parse_format_spec) Local variable translate_fmt[]
1821         moved in format.c.
1822         (dump_dictionary) Disabled printing a couple of items.
1823
1824 Mon May 25 12:42:37 1998  Ben Pfaff  <blp@gnu.org>
1825
1826         * crosstabs.q: (postcalc) Call make_summary_table().
1827         (make_summary_table) New function.
1828         (insert_summary) New function.
1829         (display_dimensions) Remove some unnecessary arguments, all
1830         references changed.
1831         (output_pivot_table) Fix lots of problems with the risk table
1832         setup.
1833         (submit) Don't display an empty table.
1834         (display_risk) Fix order of arguments to calc_risk().
1835
1836         * glob.c: Always include assert.h and stdlib.h.
1837
1838         * output.h: (enum OUTP_T_JUST_FULL) Removed, all references
1839         removed.
1840
1841         * tab.c: (tab_create) Cosmetic changes.
1842
1843         * tab.h: (enum TAB_JUSTIFY) Removed, all references removed.
1844
1845 Sun May 24 22:39:23 1998  Ben Pfaff  <blp@gnu.org>
1846
1847         * tab.def: Removed.
1848
1849         * crosstabs.q: (output_pivot_table) Headers drawing and submission
1850         code simplified, moved into new function submit().
1851         (submit) New function.
1852         (crosstabs_dim) New function.
1853         (display_directional) Substitute variable names for %s where
1854         appropriate.
1855         (somers_d_v[], somers_d_ase[], somers_d_t[]) New static vars.
1856         (calc_symmetric) Initialize parameters only if non-NULL.
1857         Calculate Somers' d.
1858         (calc_directional) Calculate Somers' d (or copy it, really).
1859         Calculate eta.
1860
1861         * output.c: (outp_string_width) New function.
1862
1863         * postscript.c: (postopen) Calculate font widths based on the
1864         width of the zero '0' character, not the width of the space
1865         character.  Set paper-width and paper-length based on points, not
1866         device units.
1867         (ps_open_page) Fix page setup string for landscape mode.
1868
1869         * som.h: (struct som_dimension) Removed.
1870         (struct som_table_class) height, width members take int * not
1871         som_dimesion * now.
1872
1873         * tab.c: Many functions now have added parameter validation.
1874         (tab_height, tab_width) These functions were removed and merged
1875         into a single function tab_resize(), and all references changed.
1876         (tab_dim) Rewritten since the interface changed; reduced from
1877         hundreds of lines to two.  All callers were changed.  Currently
1878         most of them just use tab_natural_dimensions as their callback and
1879         await detailed translation of functionality.
1880         (tab_natural_width) New function.
1881         (tab_natural_height) New function.
1882         (tab_natural_dimensions) New function.  This is a callback
1883         function, not something that you'd want to call directly.
1884         (tab_nat_dim) Removed.
1885         (tabi_table) Allocates t->w and t->h.
1886         (tabi_driver) Inlined sum_columns()'s functionality.  Calls the
1887         dimensions callback.
1888         (evaluate_dimensions) Removed.
1889         (sum_columns) Removed.
1890
1891         * tab.h: (enum TAL_1THIN) Removed.
1892         (enum series t_*) Removed.
1893         (struct tab_table) Members trh, trv changed to unsigned char *
1894         from int *.  Member dim changed to a function pointer from a
1895         unsigned char *.  Member max_stack_height removed.  New members
1896         hr_tot, vr_tot.
1897         (macros tab_l, tab_r, tab_t, tab_b) New.
1898
1899 Sat May 23 23:22:13 1998  Ben Pfaff  <blp@gnu.org>
1900
1901         * ascii.c: (delineate) Assign last_space_nchars before skipping
1902         spaces, to fix right justification.
1903
1904         * crosstabs.q: (static vars risk, direct) New vars.
1905         (static var pearson_r) Removed.
1906         (glob var chisq_fisher) Made static.
1907         (static vars row_tot[], col_tot[]) Don't include grand total
1908         anymore.
1909         (static var grand_total) Renamed W, all references changed.
1910         (output_pivot_table) Only make `table' if num_cells != 0.  Make
1911         risk and directional tables.  Deal with grand total no longer part
1912         of col_tot[].  Free rows and cols after we're done with them.
1913         (display_risk) New function.
1914         (display_directional) New function.
1915         (clac_r) Rewritten so that it stores all its results into its
1916         arguments, so it can be used for Spearman's correlation too.
1917         (calc_symmetric) Added a t[] argument, all references changed.
1918         Calculates ASEs for tau-b, tau-c, gamma.  Calculates Spearman's r,
1919         Pearson's r, Cohen's kappa.
1920         (calc_risk) New function.
1921         (calc_directional) New function.
1922
1923         * som.c: (som_submit) Improved debugging code.
1924
1925         * stats.c: (hypercube) New function.
1926         (cube) New function.
1927         (sqr) New function.
1928         (normal_sig) Went back to old implementation, which actually
1929         worked.
1930
1931         * stats.h: (macros square, cube, hypercube) Removed.  The
1932         equivalent functions in stats.c are inlined here; all references
1933         to square changed to sqr.
1934
1935 Fri May 22 00:03:41 1998  Ben Pfaff  <blp@gnu.org>
1936
1937         * crosstabs.q: (N_SYMMETRIC) New define.
1938         (postcalc) Disable debug printing.
1939         (static vars chisq_fisher, pearson_r) New.
1940         (output_pivot_table) Add support for symmetric measures.  Add
1941         chi-square output of exact sigs.
1942         (display_chisq) Rewritten.
1943         (display_symmetric) New function.
1944         (gamma_int) New function.
1945         (Pr) New function.
1946         (swap) New function.
1947         (calc_fisher) New function.
1948         (calc_chisq) Check boundary conditions better. Calculate Yates,
1949         Fisher, Mantel-Haenszel tests.
1950         (calc_r) New function.
1951         (calc_symmetric) New function.
1952
1953         * stats.c: (normal_sig) Rewritten with new algorithm.  Renamed
1954         from calc_normal.
1955         (chisq_sig) Better boundary conditions.  Renamed from
1956         calc_significance.
1957
1958         * tab.h: (struct tab_table) New member cf.
1959
1960         * tab.c: (tab_create) Set cf.
1961         (tab_width) New function.
1962         (tab_realloc) Handle cf.
1963         (tab_vline) Handle cf.
1964         (tab_hline) Handle cf.
1965         (tab_box) Handle cf.
1966         (tab_value) Handle cf.
1967         (tab_float) Handle cf.
1968         (tab_text) Handle cf.
1969         (tab_joint_text) Handle cf.
1970         (tab_offset) Handle cf.
1971         (tab_next_row) Handle cf.
1972         (evaluate_dimensions) Handle cf.
1973         (render_strip) Handle cf.
1974
1975 Wed May 20 00:03:59 1998  Ben Pfaff  <blp@gnu.org>
1976
1977         * crosstabs.q: (postcalc) New vars row_tot, col_tot, pass them to
1978         output_pivot_table().
1979         (output_pivot_table) Moved lots of local variables outside and
1980         made them static.  Add beginnings of chi-square statistic
1981         support.  Now column and row totals aren't in the main matrix.
1982         Always zero out any leftover rows & columns after we're done with
1983         the table entries.  Move all output stuff into
1984         display_dimensions(), display_crosstabs(), display_chisq().
1985         (display_dimensions) New function.
1986         (display_crosstabulation) New function.
1987         (display_chisq) New function.
1988         (calc_chisq) Implemented Pearson and likelihood-ratio chisquares.
1989
1990         * frequencies.q: (dump_full, dump_condensed) Remove tab_null()
1991         references, simplify logic.
1992
1993         * postscript.c: Remove scale, translate-x, translate-y,
1994         mirror-horz, mirror-vert, rotate-180 options.
1995         (struct ps_driver_ext) Remove scale, translate_x, translate_y.
1996         All references deleted.
1997         (macro YT) New macro.
1998         (array option_tab[]) Removed options.
1999         (ps_option) Removed options.
2000         (ps_open_page) Write page setup explicitly to output file, without
2001         using now-deleted BP function.
2002         (macro dump_line) Use YT().
2003         (macro dump_thick_line) Use YT().
2004         (draw_headers) Use YT().
2005         (switch_font) Reorder arguments to SF function.
2006         (write_text) Use YT().
2007
2008         * sfm-read.c: (sfm_read_case) Don't attempt to read variables that
2009         have get.fv == -1.
2010
2011         * sysfile-info.c: (describe_variables) Don't use tab_nulls().
2012
2013         * tab.c: (tab_create) Initialize t->ct to zeros.  Remove
2014         null-debugging code.
2015         (tab_realloc) Remove null-debugging code.  Initialize new regions
2016         of t->ct to zeros.
2017         (tab_vline) Support offsets.
2018         (tab_hline) Support offsets.
2019         (tab_box) Support offsets.
2020         (tab_null) Removed.
2021         (tab_nulls) Removed.
2022         (tab_row) Removed.
2023         (tab_col) Removed.
2024         (evaluate_dimensions) Remove null-debugging code.  Understand
2025         TAB_EMPTY attribute.  Assert that text.s.s is always non-NULL if
2026         TAB_EMPTY not present.
2027
2028         * tab.h: New cell attribute TAB_EMPTY.
2029         (macros tab_nr, tab_nc, tab_row, tab_col) New.
2030
2031         * vars-atr.c: (init_variable) Set get.fv to -1 so that GET doesn't
2032         try to read them from system files.
2033
2034         * vfm.c: (dump_splits) Don't call tab_null().   
2035
2036 Sat May 16 19:36:55 1998  Ben Pfaff  <blp@gnu.org>
2037
2038         * crosstabs.q: (struct crosstab) Added `missing' member.
2039         (custom_tables) Init missing.
2040         (calc_general) Handle missing values.
2041         (calc_chisq) New function.
2042         (output_pivot_table) Start work on chi-square output.  Update for
2043         new tab offset support functions.  Shorten statistic names.
2044
2045         * Several files: add in more `const's to placate gcc's warnings.
2046
2047         * tab.h: (struct tab_table) Add col_ofs, row_ofs members.  Comment
2048         fixes.
2049
2050         * tab.c: (tab_height, tab_realloc, tab_vline, tab_hline, tab_box,
2051         tab_null, tab_nulls, tab_value, tab_float, tab_text,
2052         tab_joint_text) Add col_ofs and row_ofs support.
2053         (tab_offset) New function.
2054         (tab_next_row) New function.
2055         (tab_row) New function.
2056         (tab_col) New function.
2057         (tabi_table) Add col_ofs and row_ofs support.
2058
2059         * vars-atr.c: (is_system_missing) New function.
2060
2061 Tue May 12 16:14:30 1998  Ben Pfaff  <blp@gnu.org>
2062
2063         * crosstabs.q: Expanded subcommand names RESID --> RESIDUAL, etc.
2064         (static var no_cells) Removed.
2065         (static var num_cells) New.
2066         (static var expected) New.
2067         (static var cells[]) New.
2068         (internal_cmd_crosstabs) Deal with new variables.
2069         (postcalc) Removed most of the meat and put it in new function
2070         output_pivot_table().
2071         (output_pivot_table) Calculates and outputs an entire pivot table.
2072
2073         * postscript.c: (postopen) Fix problems with free()ing addresses
2074         not obtained from malloc().
2075
2076         * som.c: (som_submit) Add assertion.
2077
2078         * sysfile-info.c: (describe_variable) Use new tab_nulls()
2079         function.
2080
2081         * tab.c: (static var tab_names[]) New.
2082         (tab_realloc) -1 for nc or nr indicates no change.
2083         (tab_nulls) New function.
2084         (tab_dim) Use tab_names[].
2085         (tabi_cumulate) Don't include bottom or right headers.  Furrfu.
2086         (evaluate_dimensions) Don't terminate on uninited cells, just put
2087         an X in them and emit a notice.  Use tab_names[].
2088
2089         * tab.h: Move bits into tab.def.
2090
2091         * tab.def: New.  Don't try to declare tab_table_class because then
2092         som.h has to be included.       
2093         
2094 Thu May  7 22:55:04 1998  Ben Pfaff  <blp@gnu.org>
2095
2096         * command.def: New file, contains all the command definitions
2097         previously included bodily in command.c.
2098
2099         * format.def: New file, contains all of the format definitions
2100         previously split across format.h, format.c, and sfm-write.c.
2101
2102         * lexer.h: Renamed from tokens.h in order to match corresponding
2103         .c file name.
2104
2105         * lexerP.h: Moved some rarely used functions exported by lexer.c
2106         into here.
2107
2108         * Makefile.am: Commemorate renamed files.
2109         (EXTRA_DIST) Add command.def, format.def.
2110
2111         * command.c: [0] (walk_cmdtable_func) Removed.
2112
2113         * crosstabs.q: (postcalc) Made it work and print out matrices
2114         proving it.
2115         (enum_column_values) Renamed enum_var_values, generalized for any
2116         variable.
2117
2118         * format.h: (struct fmt_desc) New member `spss'.
2119
2120         * q2c.c: (main) Generated code includes lexer.h instead of
2121         tokens.h.
2122
2123         * sfm-write.c: (write_format_spec) Use new spss member of fmt_spec
2124         instead of an independent translation table.
2125
2126 Tue May  5 13:19:03 1998  Ben Pfaff  <blp@gnu.org>
2127
2128         * Lots of source files: Added const to declarations.
2129
2130         * aggregate.c: (parse_aggregate_function) Rename inner i to j.
2131         
2132         * arena.c: (arena_clear) Set prev pointer to null when done.
2133
2134         * ascii.c: (ascii_option) Rename index as indx.
2135
2136         * avl.c: This is now a separate library called libavl.
2137         (xmalloc) Make static.
2138         (avl_probe) Step A7 can use the cache instead of an explicit
2139         compare.
2140         (avl_delete) Don't maintain a q pointer because it's always
2141         available in the pointer stack.  Comment fix.
2142
2143         * avl.h: This is now a separate library called libavl.
2144
2145         * command.c: (cmd_table[]) Remove spurious trailing "".
2146
2147         * common.h: Only include random() fix if this system needs it.
2148
2149         * crosstabs.q: Include alloca headers.
2150         (n_sorted_tab) New global var.
2151         (postcalc) Mostly rewritten.
2152         (find_pivot_extent) Rewritten.
2153         (enum_column_values) Rewritten.
2154
2155         * data-out.c: (convert_F) Rename inner n as n_spaces.
2156
2157         * error.c: (dump_message) Don't have an outer var i.
2158
2159         * file-handle.q: (static var f) Removed.  All references removed.
2160         (internal_cmd_file_handle) Uses a local variable instead of f.
2161
2162         * get.c: (trim_dictionary) Change scope of i, i1, i2.
2163         (cmd_match_files) Don't strcpy tokstr into sbc (why was this ever
2164         done?)
2165
2166         * getline.h: Declare getl_history as extern.  Reported by
2167         palme@uni-wuppertal.de (Hubert Palme).
2168
2169         * postscript.c: (postopen) Some large mods for constness.
2170
2171         * recode.c: Remove spurious copyrights since PSPP is owned by FSF
2172         anyway.
2173
2174 Fri Apr 24 12:52:47 1998  Ben Pfaff  <blp@gnu.org>
2175
2176         * Makefile.am: Rename BUILT_SOURCES to q_sources, all references
2177         changed.  Add avl.c, avl.h to pspp_SOURCES.  Remove avllib from
2178         LDADD.
2179
2180         * avl.c, avl.h: New files.  These form a clean-room
2181         reimplementation of avllib.  Iterative algorithms are used in
2182         place of recursive ones, so there is no resemblance in the code.
2183
2184         * Lots of headers: Don't include other headers by default.
2185
2186         * Lots of source files: Explicitly include all needed headers.
2187
2188         * arena.c: (arena_clear) New function.
2189
2190         * crosstabs.q: (ROW_VAR, COL_VAR) New enums.
2191         (static var ar) Removed.
2192         (staitc vars ar_tc, ar_col) New.
2193         (cmd_crosstabs) Destroy the arenas.
2194         (internal_cmd_crosstabs) Create the arenas.
2195         (precalc) Don't need a free function for the hash.
2196         (calc_general) Make sure to zero out the trailer on the key data
2197         before inserting.
2198         (print_table_entries) Updated.
2199         (postcalc) Worked on actually implementing.
2200         (find_pivot_extent) New function.
2201         (compare_value) New function.
2202         (enum_column_values) New function.
2203
2204         * data-in.c: (parse_month) Make local array `static const'.
2205         
2206         * data-out.c: (convert_date) Make local array `static const'.
2207         (convert_WKDAY) Same.
2208         (convert_MONTH) Same.
2209
2210         * frequencies.q: (postprocess_freq_tab) avl_walk_inorder() has
2211         been renamed to avl_walk().
2212         
2213         * hash.c: Rewritten more efficiently.
2214
2215         * hash.h: Add attribute const to hsh_next_prime declaration.
2216
2217         * lexer.c: (id_match) Make arguments const.
2218
2219         * postscript.c: (ps_postopen_driver) Make default fonts the
2220         Helvetica family.
2221
2222         * q2c.c: (main) Generated code needs stdlib.h.
2223
2224         * sfm-write.c: (write_value_labels) An avl_traverser needs to be
2225         initialized to 0 now, not to NULL.  All other references to
2226         avl_traverser were updated in the same way.
2227
2228         * tokens.h: Macro version of id_match updated to use const
2229         properly.
2230
2231         * val-labs.c: (inc_ref_count) New function.
2232         (copy_value_labels) Simply through use of new avl_copy() function.
2233
2234 Wed Apr 15 13:01:58 1998  Ben Pfaff  <blp@gnu.org>
2235
2236         * crosstabs.q: Probably doesn't compile.  New PIVOT subcommand.
2237         (postcalc) Worked on this.
2238
2239         * postscript.c: (OPO_DOUBLE_LINE) New enum.
2240         (struct ps_driver_ext) New line_width_thick member.
2241         (ps_preopen_drive) Init line_width_thick.
2242         (option_tab[]) Add line-* options.
2243         (ps_option) Parse line-* options.
2244         (postopen) Add line_width_thick support.  Strip leading spaces on
2245         prologue output lines.
2246         (ps_open_page) Include line_width_thick in output.
2247         (macro dump_thick_line) New.
2248         (dump_fancy_line) Support thick lines as well as double lines.
2249
2250 Tue Apr 14 00:50:08 1998  Ben Pfaff  <blp@gnu.org>
2251
2252         * Makefile.am: Add crosstabs.c to BUILT_SOURCES.  Add crosstabs.q
2253         to pspp_SOURCES.  Add crosstabs.q to EXTRA_DIST.
2254
2255         * Many source files: Rename `options' to `pv_opts' as appropriate.
2256
2257         * command.c: (static var cmd_table[]) Add CROSSTABS command.
2258
2259         * common.c: (xcalloc) New function.
2260
2261         * crosstabs.q: New file.  Not finished yet, though.
2262                 
2263         * data-list.c: Comment fix.
2264
2265         * error.c: Remove some old Checker cruft.
2266
2267         * frequencies.q: (dump_full) Cumulate valid percent instead of
2268         regular percent.
2269
2270         * getline.c: Comment fix.
2271
2272         * hash.c: Comment fixes.
2273
2274         * hash.h: (struct hsh_table) Make hash functions return unsigned
2275         instead of int to avoid problems with taking the modulo of
2276         negative return values.  All references changed.
2277
2278         * misc.c: (intlog10) Make its table static const instead of auto.
2279
2280         * sfm-read.c: (read_header) Make `prefix' static const instead of
2281         auto.
2282
2283         * var.h: (union value) Add member `hash'.
2284         (struct variable) Rename prv_index as `foo'--all references
2285         changed.  Reorder.
2286         (typedef pv_opts) Removed.  All references changed.
2287
2288         * vars-prs.c: (parse_variables) Message fixes.
2289         
2290 Mon Mar  9 15:35:08 1998  Ben Pfaff  <blp@gnu.org>
2291
2292         * get.c: (cmd_match_files) Don't reverse the order of FILEs as
2293         they are being inserted.  Don't check for BY variables of
2294         different types.  Discard variables if the active file isn't
2295         included in the merge.
2296         (mtf_processing) Essentially rewritten.
2297         (mtf_merge_dictionary) Check for master/slave variables of
2298         different types/widths.
2299
2300         * vfm.c: (static var not_canceled) New var.
2301         (process_active_file) Don't call vfm_source->read() if
2302         there's no vfm-source.  Initialize not_canceled.
2303         (process_active_file_write_case) Honor and update not_canceled.
2304         (prepare_for_writing) Rollback changes from yesterday, they were
2305         wrong.
2306         (close_active_file) Don't destroy vfm_source unless it exists.
2307         
2308 Mon Mar  9 00:56:16 1998  Ben Pfaff  <blp@gnu.org>
2309
2310         * Lots of source files: Added { } around nested if/else constructs
2311         to avoid new gcc 2.8 warnings.
2312
2313         * data-in.c: (parse_Z) Declare `int' type explicitly.
2314         (convert_Z) Ditto.
2315
2316         * get.c: (struct mtf_file) Add prev, next_min, by, input members.
2317         (cmd_match_files) Initialize mtf_by_values.  Manage by, input,
2318         prev members.  Put TABLEs at the end of the chain and FILEs at the
2319         beginning.  Don't allow the active file in STATE_INIT.  Use proper
2320         `seen' value for the active file.  Fill out the by members and
2321         make sure they're of consistent type.  Do the actual merge
2322         operation.
2323         (mtf_processing_finish) New function.
2324         (var_type_description) New function.
2325         (mtf_free_file) New function.
2326         (mtf_free) Rewritten.
2327         (mtf_delete_file_in_place) New function.
2328         (mtf_read_nonactive_records) New function.
2329         (mtf_compare_BY_values) New function.
2330         (static var mtf_seq_no) New var.
2331         (mtf_processing) New function.
2332         (mtf_merge_dictionary) Assign nval members for the system file
2333         dictionary.  Assign fv values for its variables.  Point each slave
2334         variable to the corresponding master variable.
2335
2336         * hash.c: Include str.h.
2337
2338         * mis-val.c: (copy_missing_values) src arg is const.
2339
2340         * misc.c: (spacing) Make `max' var explicitly int.
2341
2342         * sfm-read.c: (dump_dictionary) Message reformatting.
2343         (sfm_read_case) Add assertion.
2344
2345         * sort.c: Esthetic fixes.
2346
2347         * var.h: (struct match_files_proc) New struct.
2348         (struct variable) Add private data match_files_proc.
2349
2350         * vars-atr.c: (delete_variable) Implement.  Add argument for the
2351         dictionary that owning the variable.
2352         (dup_variable) Add assertion.
2353
2354         * vfm.c: Comment fixes, hopefully the comments are correct now.
2355         (process_active_file) New function.
2356         (process_active_file_write_case) New function.
2357         (process_active_file_output_case) New function.
2358         (prepare_for_writing) Use temp_dict->nval for vfm_info, not
2359         default_dict.nval.
2360         (write_case) Renamed procedure_write_case().  Now write_case is a
2361         pointer to a function.  Style fixes.
2362         
2363 1998-03-05  Ben Pfaff  <blp@gnu.org>
2364
2365         * Makefile.am: (q2c) Link with libmisc.
2366         (version.c) Define default_config_path, include_path,
2367         groff_font_path.
2368
2369         * ascii.c: (ascii_postopen_driver) When the default newline string
2370         is requested, open file in text mode.  Suggested by
2371         palme@uni-wuppertal.de (Hubert Palme).
2372         (static vars line_buf, line_p) Change from char * to unsigned char
2373         *.
2374         (ascii_close_page) char * to unsigned char *.
2375
2376         * cmdline.c: (parse_command_line) Implement -r option by
2377         prepending ~/.pspp/rc to the list of files to process.
2378
2379         * command.c: (cmd_remark) Reset getl_prompt to the standard prompt
2380         before pulling in a final line.
2381         (null_func, null_int_func) Removed (dead code).
2382
2383         * descript.q: (display) Calculate width of variable name column
2384         properly.  Calculate number of valid cases properly.  Reported by
2385         palme@uni-wuppertal.de (Hubert Palme).
2386
2387         * filename.c: (init_filename) Use default_config_path instead of
2388         now obsolete CONFIG_PATH.
2389
2390         * getline.c: (getl_initialize) Use include_path instead of now
2391         obsolete INCLUDE_PATH.
2392         (getl_add_file) New argument `where'.  All references changed.
2393
2394         * groff.c: (find_font_file) Use groff_font_path instead of now
2395         obsolete GROFF_FONT_PATH.
2396         
2397         * postscript.c: (find_ps_file) Use groff_font_path instead of now
2398         obsolete GROFF_FONT_PATH.  Copy through temporary variable to
2399         avoid problems with constness.
2400
2401         * str.h: (macro cs_streq) New macro.
2402
2403         * version.h: (glob var default_config_path, include_path,
2404         groff_font_path) New vars.
2405         
2406 1998-02-23  Ben Pfaff  <blp@gnu.org>
2407
2408         * Many source files: Change verbose_msg() priority levels and
2409         messages.
2410
2411         * aggregate.c: Include debug-print.h.
2412
2413         * cmdline.c: (parse_command_line) Add --safer/-s and --command/-c
2414         options.
2415         (static var pre_syntax_message) Document --safer/-s and
2416         --command/-c.
2417
2418         * command.c: (cmd_erase, cmd_host) Disable if set_safer is set.
2419
2420         * dfm.c: (open_inline_file) [__CHECKER__] Zero out ext->file,
2421         because it's not used but it's still copied.
2422         (open_file_r) Remove gratuitous debug message.
2423
2424         * filename.c: (safety_violation) New function.
2425         (open_file) Remove gratuitous debug messages.  Don't allow pipe
2426         files if set_safer is set.
2427
2428         * get.c: Turn off debugging.
2429
2430         * getline.c: (getl_add_virtual_file) New function.
2431         (getl_read_line) Add verbose_msg() call for opening new syntax
2432         file.
2433         (getl_perform_delayed_reset) Add a return value describing whether
2434         any action was taken.  Call reset_eof().
2435
2436         * getline.h: Comment fix.
2437
2438         * groff-font.c: (groff_read_font) Use `goto next_iteration' in
2439         place of incorrect `continue'.  Use strtok_r() instead of
2440         strtok().  Always check strtok_r() return value.
2441         (groff_read_DESC) Use strtok_r() instead of strtok().
2442
2443         * lexer.c: (reset_eof) New function.
2444
2445         * main.c: (parse) Get a token after performing a delayed reset
2446         action; allow empty syntax files.
2447
2448         * postscript.c: (output_encodings) Use strtok_r() instead of
2449         strtok().
2450
2451         * q2c.c: (dump_parser) Use strtok_r() instead of strtok().
2452
2453         * set.q: Comment fixes.
2454         (glob var set_safer) New var.
2455         (internal_cmd_set) Support SAFER.
2456
2457         * str.h: [!HAVE_STRTOK_R] Declare strtok_r() prototype.
2458
2459         * temporary.c: (free_dictionary) Set d->splits to NULL after
2460         freeing.
2461
2462         * vars-atr.c: (clear_variable) Decrement dict->n_splits if
2463         variable deleted, not if it *isn't* deleted.
2464
2465 1998-02-16  Ben Pfaff  <blp@gnu.org>
2466
2467         * command.c: (array cmd_table[]) Add MATCH FILES.
2468
2469         * common.c: Comment fixes.
2470
2471         * data-list.c, dfm.c, error.c, filename.c, list.q, matrix-data.c,
2472         modify-vars.c, postscript.c, sfm-read.c, sfm-write.c, tab.c:
2473         Include alloca.h.  Problem reported by palme@uni-wuppertal.de
2474         (Hubert Palme).
2475
2476         * expr-opt.c: Include str.h.  Problem reported by
2477         palme@uni-wuppertal.de (Hubert Palme).
2478
2479         * get.c: (cmd_get) [DEBUGGING] Update v->p.get to v->get.
2480         (static var mtf_by) Change from char ** to variable **.
2481         (static var mtf_master) New var.
2482         (mtf_merge_dictionary) New function.
2483         (cmd_match_files) Init mtf_master.  Parse mtf_by according to new
2484         var type.  Reorder tests properly.  Initialize file->dict.  Detect
2485         TABLE= without BY=.  Read file dictionaries and merge them.  Give
2486         subcommand name with IN, LAST, FIRST error messages.  Create IN,
2487         LAST, FIRST variables.  Comment fixes.
2488         (mtf_free) Don't free default_dict.  Free mtf_master.
2489
2490         * getline.c: Define getl_mode.  Change getl_buf_size to size_t
2491         from int.
2492         (handle_line_buffer) Cast int to size_t in comparison to avoid
2493         warning.
2494
2495         * getline.h: Declare getl_mode extern.
2496
2497         * groff-font.c: (groff_read_font) Type-fix calls to getline.
2498         (groff_read_DESC) Make line_size a size_t.
2499         (match_tok) Parenthesize name to avoid macro expansion.
2500
2501         * mis-val.c: (copy_missing_values) New function.
2502
2503         * postscript.c: (postopen) Make buf_size a size_t.
2504
2505         * sfm-read.c: (dump_dictionary) Make global from static.  Print
2506         variable info in parts for easier debugging with Checker.
2507
2508         * temporary.c: (copy_variable) Use copy_value_labels().
2509         (new_dictionary) New arg: whether to copy file label, documents.
2510
2511         * val-labs.c: (copy_value_labels) New function.
2512
2513         * var.h: (enums MISSING_*) Add MISSING_COUNT.
2514
2515         * vars-atr.c: [GLOBAL_DEBUGGING] (force_dup_variable) New
2516         function.
2517         (dup_variable) Set prv_index, get.fv, get.nv.
2518
2519 Fri Feb 13 15:38:36 1998  Ben Pfaff  <blp@gnu.org>
2520
2521         * Makefile.am: (pspp_SOURCE) Add htmlP.h.
2522
2523         * Many source files: For ANSI-compliance, add empty statement
2524         after label.  Reported by palme@uni-wuppertal.de (Hubert Palme)
2525         and Micah Altman <maltman@www-vdc.fas.harvard.edu>.
2526
2527         * data-in.c: (parse_numeric) Some header files break on
2528         -DBL_MIN_10_EXP because they get a --; add () for safety.
2529         Reported by palme@uni-wuppertal.de (Hubert Palme).
2530
2531         * dfm.c: Idea by Dr Eberhard W Lisse <el@linux.lisse.na>.
2532         (struct dfm_fhuser_ext) Change `file' from FILE * to file_ext.
2533         (dfm_close) Use close_file_ext.
2534         (open_inline_file) Set file.file to NULL, not file.
2535         (open_file_r, open_file_w) Initialize file.file; fill in file_ext
2536         struct and use open_file_ext().
2537         (read_record) Use file.file.
2538
2539         * file-handle.q: (prepend_current_directory) Pass through special
2540         filenames.
2541
2542         * filename.c: Only include unistd.h if HAVE_UNISTD_H.
2543         (normalize_filename) Pass through special filenames.
2544         (open_file, close_file) Accept pipe| and |pipe syntaxes as
2545         equivalent.
2546         (dirname) Rename blp_dirname() because of name conflict on some
2547         OS.  All references changed.  Reported by palme@uni-wuppertal.de
2548         (Hubert Palme).
2549         (is_special_filename) New function.
2550
2551         * get.c: (GTSV_OPT*) Add GTSV_OPT_MATCH_FILES.
2552         (trim_dictionary) Conditionalize some of the options on whether
2553         GTSV_OPT_MATCH_FILES is in *options.
2554         (rename_variables) Don't allow variables to be renamed as scratch
2555         variables.
2556         (MTF_*) New enum series.
2557         (struct mtf_file) New struct.
2558         (static vars mtf_head, mtf_tail, mtf_by, mtf_n_by, mtf_free) New
2559         vars.
2560         (cmd_match_files, mtf_free) New functions.
2561
2562         * lexer.c: (match_int) Needed parentheses around name to escape
2563         macro expansion.  Reported by Micah Altman
2564         <maltman@www-vdc.fas.harvard.edu>.
2565
2566         * print.c: Needed to include alloca.h.  Reported by Micah Altman
2567         <maltman@www-vdc.fas.harvard.edu>.
2568
2569         * recode.c: (convert_to_double) Parenthesize -DBL_MIN_10_EXP to
2570         -(DBL_MIN_10_EXP).  Reported by palme@uni-wuppertal.de (Hubert
2571         Palme).
2572         
2573         * str.h: Include stdarg.h.  Reported by palme@uni-wuppertal.de
2574         (Hubert Palme) and Micah Altman <maltman@www-vdc.fas.harvard.edu>.
2575
2576 Thu Feb  5 00:18:21 1998  Ben Pfaff  <blp@gnu.org>
2577
2578         * html.c: (struct html_driver_ext) Move into htmlP.h.
2579         (html_preopen_driver) Initialize cp_x, cp_y.
2580         (html_submit) Implement as call to output_tab_table().
2581         (change_attributes) New function.
2582         (escape_string) New function.
2583         (output_tab_table) New function.
2584
2585         * list.q: (write_all_headers) Add code for writing headers for the
2586         html driver.
2587         (clean_up) Write out the html close-table tag.
2588         (determine_layout) Ignore html driver.
2589         (list_cases) Write html data.
2590
2591         * som.c: (som_submit) Move more of the code into output_table().
2592
2593         * tab.c: (static var hit) Make a global var and rename tab_hit.
2594         (static var tab_table_class) Make a global var.
2595
2596         * htmlP.h: New file.
2597
2598 Tue Feb  3 16:12:18 1998  Ben Pfaff  <blp@gnu.org>
2599
2600         * dump-sysfile.c: Removed.
2601
2602         * html.c: (preclose) Change comment in emitted code.
2603
2604         * matrix-data.c: Debugging off by default.  Comment fixes.
2605         (static var container) New var.
2606         (cmd_matrix_data) Create and destroy container.  Initialize
2607         is_per_factor[] to 0s.  Move code into new function
2608         string_to_content_type().  Require split values to be present in
2609         the data when ROWTYPE_ is explicit.  Call specific function, not
2610         general read_matrices().
2611         (string_to_content_type) New function.
2612         (context) Exclude all whitespace, not just spaces.
2613         (mget_token) A dot is a number.  Add assertion.
2614         (static var data) Renamed nr_data.
2615         (static var factor_values) Renamed nr_factor_values.
2616         (read_matrices) Renamed read_matrices_without_rowtype().  Handle
2617         only specific case.  Close data_file before exit.
2618         (fill_matrix) New function.
2619         (read_data_lines) Renamed nr_read_data_lines().  Remove debug
2620         printing.  Style fixes.  Message fixes.  Move code into
2621         fill_matrix().
2622         (read_matrices_without_rowtype) Rename
2623         matrix_data_read_without_rowtype().  Fix off-by-one error on
2624         loops.  Allocate nr_data[] memory from arena.
2625         (read_matrices_with_rowtype) Removed.
2626         (read_splits) Renamed nr_read_splits().  Style fixes.
2627         (read_factors) Renamed nr_read_factors().
2628         (dump_cell_content) Comment fixes.  Arguments changed.  Change
2629         debug printing.  All references changed.
2630         (output_data) Renamed nr_output_data().
2631         (static var wr_content) New var.
2632         (struct factor_data) New struct.
2633         (static var wr_data) New var.
2634         (static var wr_current) New var.
2635         (matrix_data_source_destroy_source) Removed.
2636         (read_matrices_with_rowtype) New function.
2637         (matrix_data_read_with_rowtype) New function.
2638         (wr_read_splits) New function.
2639         (compare_factors) New function.
2640         (wr_output_data) New function.
2641         (wr_read_rowtype) New function.
2642         (wr_read_factors) New function.
2643         (wr_read_indeps) New function.
2644         (glob var matrix_data_source) Make destroy_source member NULL as
2645         well.
2646
2647 Fri Jan 23 00:09:08 1998  Ben Pfaff  <blp@gnu.org>
2648
2649         * lexer.c: (syntax_error) Give better error message when at end of
2650         file.
2651
2652         * matrix-data.c: (var content_names[]) Fix PROX spelling.  Change
2653         N_SCALAR to output as plain N.
2654         (mdump_token) Change output format.
2655         (context) Fix message output interaction with spaces in input.
2656         (another_token) New function.
2657         (force_eol) Improved error message.
2658         (static var max_cell_index) New var.
2659         (read_matrices) Init `cells'.  factor_values is now per-cell.
2660         Init max_cell_index.
2661         (read_data_lines) Replace `compare' local with new `compare' arg.
2662         Debugging messages changed.  Only read factors if per_factor.
2663         Propagate error return from read_factors(), force_eol().
2664         Copy N_SCALAR values across the N vector.
2665         (read_matrices_without_rowtype) Don't init `cells'.  Don't need to
2666         check parentheses manually since we now have is_per_factor[].
2667         Call read_data_lines() with new args.  Check for end of data after
2668         looping, using another_token().
2669         (read_factors) Arguments changed.  Use max_cell_index to determine
2670         whether to read or compare factors.  Message fixes.
2671         (dump_cell_content) New function.
2672         (output_data) Completely rewritten because content types were
2673         supported to be nested inside factor values, not vice versa.
2674         
2675 Thu Jan 22 00:26:38 1998  Ben Pfaff  <blp@gnu.org>
2676
2677         * lexer.c: (syntax_error) Support formatted varargs messages.
2678
2679         * matrix-data.c: Turn debugging on by default.
2680         (static content_type[]) New array.
2681         (static content_names[]) New array.
2682         (static rowtype_, varname_) New vars.
2683         (static is_per_factor[]) New array.
2684         (static split_values) Moved declaration.
2685         (static n_continuous, first_continuous) New var.
2686         (cmd_matrix_data) Don't init split_values.  Assign ROWTYPE_ to
2687         rowtype_.  Simplify SPLIT code.  Init is_per_factor[].  Assign
2688         VARNAME_ to varname_.  Initialize first_continuous, n_continuous.
2689         Check for continuous variables.
2690         [DEBUGGING] (debug_print) Remove content_names[].
2691         (mdump_token) New macro.
2692         (mget_token_dump) New function.
2693         (mdump_token) New function.
2694         (context) New function.
2695         (mget_token) Fix messages.
2696         (static var data, split_values, factor_values) New vars.
2697         (read_matrices) Manage split_values, factor_values.
2698         (read_data_lines) New function.
2699         (read_matrices_without_rowtype) Implemented.
2700         (read_splits) Message fixes.  Uses `just_read'.
2701         (read_factors) New function.
2702         (output_data) New function.
2703         (matrix_data_source_destroy_source) Close the file handle.
2704         (glob var matrix_source) Change name from "DATA LIST" to "MATRIX
2705         DATA".
2706
2707         * str.c: (strpadcmp) Removed.
2708
2709         * vfm.c: (dump_splits) Initialize i; fix test for end of splits.
2710
2711 Sun Jan 18 00:30:59 1998  Ben Pfaff  <blp@gnu.org>
2712
2713         * Lots of source files: Add cast to unsigned character to calls to
2714         tolower() and toupper().
2715
2716         * aggregate.c: Set default_dict.splits to NULL.
2717
2718         * command.c: (static variable tab[]) Add MATRIX DATA.
2719
2720         * data-in.c: Add debugging defines.  Formatting fixes.
2721
2722         * expr-opt.c: Formatting fixes.
2723
2724         * lexer.c: (syntax_error) Message fixes.
2725
2726         * matrix-data.c: New enum series.
2727         (static vars fmt, section, diag, explicit_rowtype, signle_split,
2728         split_values, n_factors, factors, cells, pop_n, contents,
2729         n_contents) New vars.
2730         (cmd_matrix_data) Finished implementation.
2731         (compare_variables_by_mxd_vartype) New function.
2732         [DEBUGGING] (debug_print) New function.
2733         (static vars mtoken, mtokstr, mtoklen, mtokval) New vars.
2734         (read_matrices) New function.
2735         (read_matrices_without_rowtype) New function.
2736         (read_matrices_with_rowtype) New function.
2737         (read_splits) New function.
2738         (mget_token) New function.
2739         (force_eol) New function.
2740         [0] (test_tokenizer) New function.
2741         (matrix_data_source_destroy_source) New function.
2742         (glob var matrix_data_source) New var.
2743
2744         * misc.h: Include ieeefp.h if present.
2745
2746         * split-file.h: (cmd_split_file) Changes corresponding to struct
2747         dictionary changes.
2748
2749         * str.h: Fix memmem prototype.
2750
2751         * temporary.c: (save_dictionary, restore_dictionary,
2752         free_dictionary) Changes corresponding to struct dictionary
2753         changes.
2754
2755         * var.h: (MXD_* enums) New enum series.
2756         (struct matrix_data_proc) New struct.
2757         (struct split) Removed.
2758         (struct dictionary) Changed `splits' member from `split *' to
2759         `variable **'.
2760         (macro force_create_variable) New macro.  Replaced lots of
2761         create_variable()/assert() calls with calls to this macro.
2762
2763         * vars-atr.c: (discard_variables) Changed assertion.
2764         [GLOBAL_DEBUGGING] (force_create_variable) New function
2765         called by the macro of the same name.
2766         (clear_variable) Changes to delete splits from the dictionary
2767         corresponding to struct dictionary changes.
2768
2769         * vars-prs.c: (parse_variables) [GLOBAL_DEBUGGING] Check for
2770         corrupted variable `index' values in the dictionary passed in
2771         every time this function is called.
2772
2773         * vfm.c: (dump_splits, SPLIT_FILE_procfunc) Changes corresponding
2774         to struct dictionary changes.
2775
2776 Tue Jan 13 23:45:02 1998  Ben Pfaff  <blp@gnu.org>
2777
2778         * Makefile.am: (pspp_SOURCES) Add matrix-data.c.
2779
2780         * command.c: New includes.
2781         (static array cmd_table[]) Add ERASE, HOST, NEW FILE.
2782         (cmd_erase) New function.
2783         [unix] (shell) New function.
2784         (run_command) New function.
2785         (cmd_host) New function.
2786         (cmd_new_file) New function.
2787
2788         * expr-prs.c: (parse_primary) Message fix.
2789
2790         * inpt-pgm.c: Formatting fix.
2791         (cmd_reread) Implement the FILE subcommand.
2792
2793         * matrix-data.c: New file.
2794
2795         * q2c.c: (dump_header) Change output commenting style.
2796
2797         * weight.c: Comment fix.
2798
2799 Tue Jan 13 00:53:39 1998  Ben Pfaff  <blp@gnu.org>
2800
2801         * aggregate.c: (buf64_10x) Renamed buf64_1xx, all references
2802         changed.
2803         (buf_10x) Renamed buf_1xx, all references changed.
2804         (cmd_aggregate) Implemented cases 010, 011, 110, and 111 (all
2805         cases now implemented).
2806         (create_sysfile) New function.
2807         (agr_11x_func) New function.
2808
2809         * data-in.c: (parse_numeric) Work properly if there's an
2810         explicitly coded decimal point in the data and decimal places are
2811         specified on DATA LIST.  Bug reported by Dr Eberhard W Lisse
2812         <el@linux.lisse.na>.
2813
2814         * get.c: (cmd_get, cmd_save_internal) Allow extraneous slash
2815         before file specification on GET, SAVE, XSAVE.  Bug reported by Dr
2816         Eberhard W Lisse <el@linux.lisse.na>.
2817
2818         * q2c.c: [!HAVE_STRERROR] Include misc/strerror.c, not
2819         strerror.c.  Bug reported by Alexandre Oliva
2820         <oliva@dcc.unicamp.br>.
2821
2822         * sort.c: Include sort.h.  Comment fixes.  A few esthetic fixes.
2823         (static var separate_case_tab) New var.
2824         (cmd_sort_cases) Cancel temporary transformations here.  Free
2825         v_sort before return.
2826         (sort_cases) Run an EXECUTE procedure if SEPARATE is nonzero and
2827         we're reading from a sort stream.  Don't cancel temporary
2828         transformations.  Offload internal sorting to do_internal_sort().
2829         (do_internal_sort) New function.  Handles internal sorting even
2830         when SEPARATE is nonzero.  Doesn't free v_sort.
2831         (do_external_sort) Take new arg SEPARATE.  Only destroy `x' if
2832         it's non-NULL.
2833         (write_initial_runs) Take new arg SEPARATE.  Only destroy the old
2834         sink if SEPARATE is zero.
2835         (read_output_cases) Renamed read_sort_output(), all references
2836         changed.  Now uses separate_case_tab when it exists.
2837         (write_separate) New function.
2838
2839         * vfm.c: (page_to_disk) Destroy memory_source_cases, not
2840         memory_sink_cases.  Don't redundantly call
2841         vfm_source->destroy_source().
2842         (memory_stream_mode) After switching over, set memory_sink_cases
2843         to NULL.
2844
2845 Sat Jan 10 23:35:51 1998  Ben Pfaff  <blp@gnu.org>
2846
2847         * aggregate.c: (struct agr_var) Expand dbl[] array from 2 to 3
2848         elements.
2849         (static var prev_case) New, moved out of aggregate_single_case()
2850         local scope.
2851         (static var buf64_10x, buf_10x) New.
2852         (cmd_aggregate) Initialize prev_case.  Comment fixes.  Implement
2853         the 000, 001, 100, and 101 cases.  Free prev_case.
2854         (parse_aggregate_functions) Disallow scratch variables.
2855         (free_aggregate_functions) Only free agr_dict if non-null.  Use
2856         iter->function to determine numeric/string type, not
2857         iter->src->type.
2858         (aggregate_single_case) Don't manage prev_case.  Initialize
2859         aggregate info after dumping it.
2860         (accumulate_aggregate_info) Fix sum, weighted sum, mean, weighted
2861         mean, stddev, weighted stddev definitions.
2862         (dump_aggregate_info) Implemented.
2863         (initialize_aggregate_info) Renamed from
2864         initialize_aggregate_functions().  Initializes dbl[2].
2865         (agr_00x_trns_proc, agr_00x_end_func, write_case_to_sfm,
2866         agr_10x_trns_proc, agr_10x_trns_free, agr_10x_end_func) New.
2867
2868         * cases.c: (alloc_val) Removed.
2869
2870         * get.c: (cmd_save_internal) Initialize new `dict' member.
2871
2872         * sfm-write.c: (sfm_write_dictionary, write_header,
2873         write_variable, write_value_labels, write_documents) Reorganize,
2874         simplify for new parameter structure.
2875         (write_variable) Only one variable * argument now.
2876
2877         * sfm.h: (struct sfm_write_info) Removed `pri', `sec', and
2878         replaced by new `dict' member.
2879
2880         * temporary.c: (new_dictionary) Initialize n_documents.
2881
2882         * vars-atr.c: (dup_variable) Allocate `value's from dict into
2883         v->fv manually.
2884         (init_variable, replace_variable) Eliminate usage of alloc_val().
2885
2886         * vars-prs.c: (parse_DATA_LIST_vars) Accept PV_NO_SCRATCH option.
2887
2888         * vfm.c: (arrange_compaction) Allow `temporary' value of 2 to
2889         signal that AGGREGATE is to be used for forming final cases.
2890         (close_active_file) Call end_func before stopping lagging.  Cancel
2891         temporary after finishing compaction.
2892         (write_case) Comment fixes.  Cleaned up.
2893         (compact_case) Let AGGREGATE handle compaction when `temporary' is
2894         2.
2895
2896 Sat Jan 10 02:10:47 1998  Ben Pfaff  <blp@gnu.org>
2897
2898         * Makefile.am: (BUILT_SOURCES) Add means.c.
2899         (pspp_SOURCES) Add means.c.
2900         (EXTRA_DIST) Add means.q.
2901
2902         * command.c: (array cmd_table[]) Add MEANS.
2903
2904         * common.h: Esthetic fixes.  Comment fixes.  Test for
2905         MAX_SHORT_STRING greater than 8.
2906         (macros LOWEST, HIGHEST) New.
2907
2908         * data-in.c, data-list.c, recode.c: Comment fixes.
2909
2910         * means.q: New file, base version.
2911
2912         * mis-val.c: (parse_num_or_range, parse_numeric) Replace -DBL_MAX
2913         with LOWEST, DBL_MAX with HIGHEST.
2914
2915         * q2c.c: (dump_vars) Add an enum to array types giving the number
2916         of values for the enum.
2917
2918         * sfm-read.c: (sfm_read_dictionary, read_machine_flt64_info)
2919         Replace second_lowest_value with second_lowest_flt64.
2920
2921         * sfm-write.c: (write_variable, write_rec_7_34) Replace
2922         second_lowest_value with second_lowest_flt64.
2923
2924         * t-test.q: Comment fix.
2925
2926         * temporary.c: (restore_dictionary) Esthetic fix.
2927
2928         * tokens.h: (force_match_id, force_match, force_string, force_int,
2929         force_num, force_id) Replace msg() with syntax_error().
2930
2931         * var.h: (struct means_proc) New.
2932         (struct variable) Add mns member to `p' union.
2933
2934         * vars-prs.c: (parse_variable, parse_dict_variable,
2935         parse_variables, parse_DATA_LIST_vars) Replace msg() with
2936         syntax_error().
2937
2938 Thu Jan  8 22:28:41 1998  Ben Pfaff  <blp@gnu.org>
2939
2940         * Makefile.am: (pspp_SOURCES) Add tab.h.
2941
2942         * Most source files: Added a cast to unsigned char in usages of
2943         the ctype is*() functions.  Replaced `end of command expected'
2944         calls to msg() with calls to syntax_error().
2945
2946         * frequencies.q: (dump_condensed) Fix tab_dim() column reference.
2947
2948         * lexer.c: (hex_val) Removed (was dead code).
2949         (idmatch) Parenthesize function name to avoid macro expansion.
2950
2951         * postscript.c: Comment fixes.
2952         (ps_preopen_driver) Change default font size to 10pt.
2953
2954         * sfm-read.c: (read_variables) Byteswap sv.print, sv.write as
2955         int32s.
2956         (parse_format_spec) Change system-file format spec argument type
2957         to int32.  Parse the format spec with bitwise operators.
2958
2959         * sfmP.h: (struct sysfile_format) Removed.
2960         (struct sysfile_variable) Changed print, write members from
2961         sysfile_format to int32.
2962
2963         * tokens.h: Esthetic fixes.
2964         [__GNUC__] (macro id_match) New macro to hopefully speed up
2965         identifier matching.
2966         (macros match_id, match_tok, match_int) Implemented in
2967         compiler-independent manner; no longer GNU C only.
2968
2969         * vfm.h: Include time.h.
2970
2971 Mon Jan  5 11:06:15 1998  Ben Pfaff  <blp@gnu.org>
2972
2973         * data-list.c: (dump_fixed_table) Change tab_dim().
2974
2975         * dump-sysfile.c: (open_sysfile) Fix mmap() call.
2976
2977         * error.c: Include command.h.
2978
2979         * frequencies.g: Formatting fixes.
2980
2981         * frequencies.q: Add tab_dim() calls.  Make the total cell a
2982         joined cell.
2983
2984         * glob.c: Include command.h.
2985
2986         * sfm-read.c: (struct sfm_fhuser_ext) New members sysmis, highest,
2987         lowest.
2988         (sfm_read_dictionary) Initialize sysmis, highest, lowest.
2989         (sfm_read_machine_flt64_info) Update sysmis, highest, lowest.
2990         (read_variables) Byteswap sv.type; byteswap sv.print, sv.write as
2991         the other elements (is this right?).
2992         (read_variables) Use lowest, highest members.
2993         (parse_format_spec) New arg `vv' for more stringent checking.
2994         (dump_dictionary) Byteswaps nonexplicit data.
2995         (sfm_read_case) Byteswap numeric data.
2996
2997         * som.c: Initialize table_num to 1.
2998         (render_segments) Remember to increment y_index after each table
2999         segment.
3000
3001         * sysfile-info.c: (cmd_sysfile_info) Change tab_dim().  Don't call
3002         avl_count() on a NULL tree.  No title for the second table.
3003         (cmd_display) Handle DISPLAY VECTORS by calling display_vectors().
3004         Handle AS_SCRATCH as AS_NAMES.  Warn if no variables.  Re-enable;
3005         fix call to display_variables().
3006         (display_variables) Default to 4 columns, not 3.  Set up headers.
3007         Column title is Variable, not Name.  Fix index column.
3008         Add joint text.  Add tab_dim().  Handle value labels properly.
3009         Handle DISPLAY LABELS properly.  Draw boxes correctly.
3010         (describe_variable) Value labels don't need titles.  Don't clear
3011         nonexistent index column.
3012         (compare_vectors_by_name) New function.
3013         (display_vectors) New function.
3014
3015         * tab.c: (tab_height) Add assertion.
3016         (tab_null) Add debug code.
3017         (evaluate_dimensions) Add debug code.
3018
3019         * var.h: (struct variable) get_proc data is sometimes used
3020         simultaneously with other per-procedure info, therefore it was
3021         removed from the union.  All references changed.        
3022
3023 Sun Jan  4 18:13:33 1998  Ben Pfaff  <blp@gnu.org>
3024
3025         * ascii.c: (ascii_close_page) Put title on second line of headers
3026         if there is no subtitle.
3027
3028         * command.c: (glob var cur_proc) Move definition here, from
3029         common.c.
3030         (cmd_remark) Emit blank line before remarks.
3031
3032         * command.h: (glob var cur_proc) Move declaration here, from
3033         common.h.
3034
3035         * data-list.c: (dump_fixed_table) Fix messages.
3036         (dump_free_table) Call tab_nat_dim().
3037
3038         * descript.q: (dump_z_table) Modify tab_dim() call.
3039
3040         * frequencies.q: (dump_condensed, dump_statistics) Add tab_dim()
3041         call.
3042         (dump_statistics) Don't output header.
3043
3044         * groff-font.c: Minor format fix.
3045
3046         * html.c: Comment fix.
3047
3048         * list.q: (write_varname) Indent after advancing page.
3049
3050         * output.h: Minor reordering.
3051
3052         * postscript.c: Comment fixes.  Many places, '\n' was replaced by
3053         a reference to eol[].
3054         (struct ps_driver_ext) New member eol[].
3055         (ps_preopen_driver) Initialize eol[].
3056         (ps_postopen_driver) Fix sense of text for text_opt, line_opt
3057         defaults.  Handle headers.  Fix test for minimum page length.
3058         (static var option_tab[]) Add `line-ends'.
3059         (ps_option) Handle line-ends to change eol[].
3060         (postopen) Scale prop_em_width and fixed_width properly.  Set the
3061         prologue title to outp_title if applicable.  Replace the prologue
3062         line ends with eol[].  Call draw_headers() if headers are enabled.
3063         (text_width) New function.
3064         (out_text_plain) New function.
3065         (draw_headers) New function.
3066
3067         * print.c: (dump_table) Call tab_nat_dim().
3068
3069         * som.c: (som_blank_line) Only advance a line if not at the top of
3070         a page.
3071         (som_submit) Move several informational table calls here.
3072         Increment subtable_num if SOMF_NO_TITLE not set.
3073         (output_table) Advance a line if SOMF_NO_SPACING not set.
3074         (render_columns, render_segments, render_simple) Handle spacing
3075         between tables.  Handle table titles.  Remove debug output.
3076
3077         * som.h: (SOMF_*) New enum series.
3078         (struct som_table_class) New member `flags'.
3079
3080         * sysfile-info.c: (cmd_sysfile_info) Calls tab_nat_dim().  No
3081         headers or spacing.
3082         (display_variables) Calls tab_nat_dim().
3083         (describe_variable) Remove restriction on number of value labels.
3084         Make value labels separated by thin lines.
3085
3086         * tab.c: (tab_create) Default `flags' to none.
3087         (tab_float) New arg `w'.  All references changed.
3088         (tab_nat_dim) New function.
3089         (tab_output_text) No title or spacing.
3090         (tab_flags) New function.
3091         (tabi_flags) New function.
3092         (tabi_title) New function.
3093         (strip_height) Removed.
3094         (tabi_render) Skip title when necessary.
3095         (static var tab_tab_class) Add tabi_flags, tabi_title.
3096         (evaluate_dimensions) Disable display of column, row size.
3097         (sum_columns) Add title height to top header.
3098         (render_strip) Moved within file.
3099
3100         * tab.h: (struct tab_table) New member `flags'.
3101
3102         * vfm.c: (dump_splits) Calls tab_nat_dim().  No title.
3103
3104 Sat Jan  3 16:55:44 1998  Ben Pfaff  <blp@gnu.org>
3105
3106         * Most source files: Add `const' attribute in all appropriate
3107         places.
3108         
3109         * sysfile-info.c: (cmd_sysfile_info) Add tab_dim() call, add a
3110         column to the variables table for use by describe_variable().
3111         (cmd_display) Disable for the present.
3112         (display_documents) Don't wrap documents.
3113         (display_variables) Table has four columns now.
3114         (describe_variable) Table has four columns now.  Don't use a
3115         subtable, use joined cells instead.
3116
3117         * tab.c: (tab_create) Don't set `join'.
3118         (tab_realloc) ct array is not made up of a_string's.
3119         Reallocate trh, hrh, h arrays, initialize trh array.  Initialize
3120         cell contents on GLOBAL_DEBUGGING, not DEBUGGING.
3121         (text_format) New function.
3122         (tab_title) Rewritten, uses text_format().
3123         (tab_text) Rewritten, uses text_format().
3124         (tab_joint_text) New function.
3125         (tab_join) Removed.
3126         (static var hit) New variable.
3127         (render_strip) New args r1, r2.  Implement joined cells that fit
3128         on a single page.
3129         (tabi_render) Increment hit.  Pass new args to render_strip().
3130         (evaluate_dimensions) [GLOBAL_DEBUGGING] Check for uninitialized
3131         cells.  For t_naw and t_nah, ignore joined cells and null cells in
3132         calculations.
3133         
3134         * tab.h: (struct tab_join_rect) Removed.
3135         (struct tab_table) Removed `join'.
3136         (TAB_JOIN_MAIN) Removed.
3137         (struct tab_joined_cell) New struct.
3138         (TAT_NOWRAP) New enum.
3139
3140 Fri Jan  2 01:39:58 1998  Ben Pfaff  <blp@gnu.org>
3141
3142         * ascii.c: (ascii_postopen) Replace ASCII_* macros with their
3143         expansions.
3144         (ascii_postopen_driver) Fix initialization of *_spacing so that
3145         the TAL_0 bit doesn't count.
3146
3147         * data-list.c: (dump_fixed_table) Use natural width for Format
3148         column.
3149
3150         * glob.c: (rerange) Removed.
3151         (get_date) Formatting fixes.  Internationalization fix.
3152
3153         * html.c: (html_postopen_driver) Replace HTML_DEFAULT_OUTPUT_FILE
3154         with "pspp.html".
3155
3156         * postscript.c: (ps_postopen_driver) Replace
3157         PS_DEFAULT_OUTPUT_FILE with "pspp.ps".
3158
3159         * som.c: (som_submit) Don't eject page before every table.
3160         (output_table) Fix order of arguments on call to area().
3161         (render_columns) Fix calculation of max_len.
3162         
3163         * tab.c: (tabi_cumulate) Minor change to increase elegance.
3164         (render_strip) New function.
3165         (strip_height) New function.
3166         (tabi_render) Rewrite as calls to render_strip().
3167
3168         * tab.h: (TAT_* enums) Removed TAT_RICH, all references removed.
3169         Renumbered TAT_PRINTF, TAT_TITLE, TAT_FIX to correspond better
3170         with the TAB_* and OUTP_T_* constants.
3171         
3172 Thu Jan  1 11:53:52 1998  Ben Pfaff  <blp@gnu.org>
3173
3174         * Makefile.am: Formatting fixes.
3175
3176         * ascii.c: (ascii_postopen_driver) Initialize *_line_spacing[],
3177         *_line_width[].
3178
3179         * data-list.c: (dump_fixed_table) Add tab_dim() call.
3180
3181         * descript.q: (dump_z_table, display) Add tab_dim() calls.
3182
3183         * dump-sysfile.c: (glob var length) Make type off_t.
3184         (usage) Fix arguments.
3185         (main) Return 0.
3186
3187         * output.h: (OUTP_T_*) Change constants' value to match tab.h.
3188         Now right-justification is the default so many references had to
3189         change.
3190         (struct outp_class) Removed line_width, all references changed.
3191         (OUTP_DEV_*) Add OUTP_DEV_DISABLED.
3192         (struct outp_driver) Add elements horiz_line_width,
3193         vert_line_width, horiz_line_spacing, vert_line_spacing.  Remove
3194         som element.
3195
3196         * postscript.c: (outp_encodings) Formatting fixes.  Fix garbage
3197         collection.
3198         (postopen) Initialize all the informational members of
3199         outp_driver.
3200
3201         * som.c: (som_blank_line) New function, renamed from blank_line(),
3202         all references changed.
3203         (som_submit) Disables drivers whose pages can't be opened.
3204         (render_columns, render_simple, render_segments) Add debug output.
3205         (render_columns) Fix loop range.
3206         (render_simple) Don't try to render the headers, they're taken
3207         care of automatically.  Advance cp_y past the table when done.
3208         (render_segments) Fix loop ranges.
3209
3210         * tab.c: Initialize new members of tab_table.
3211         (tab_vline) Handle trv[]; don't set style for spacing-only lines.
3212         (tab_hline) Handle trh[]; don't set style for spacing-only lines.
3213         (tab_box) Handle trh[], trv[]; don't set style for spacing-only
3214         lines.
3215         (set_expr) Removed.
3216         (tab_dim) New function.
3217         (tab_col_width) Removed.
3218         (tab_row_height) Removed.
3219         (tab_output_text) Call tab_dim().
3220         (tabi_driver) Call evaluate_dimensions(), sum_columns().
3221         (tabi_area) Implemented.
3222         (tabi_cumulate) Implemented.
3223         (tabi_render) Partially implemented, but broken.
3224         (var tab_table_class) Made static.
3225         (evaluate_dimensions) New function.
3226         (sum_columns) New function.
3227
3228         * tab.h: (enum t_*) Now start at t_end.  New: t_ptw, t_nr, t_nc,
3229         t_nah, t_naw, t_neg, t_xch, t_dup, t_lbl, t_jnz, t_sac, t_sar,
3230         t_scr, t_srr, t_sentinel.  Removed: t_nat.
3231         (struct tab_table) New: wl, wr, ht, hb, trh, hrh, trv, wrv, dim,
3232         max_stack_height, w, h.  Removed: ce, re.
3233         (macro blank_line) Removed.
3234         (glob var zero_length) Removed.
3235
3236 Fri Dec 26 15:44:31 1997  Ben Pfaff  <blp@gnu.org>
3237
3238         * Most source files: include some of the new include files broken
3239         out of var.h.
3240         
3241         * Makefile.am: (pspp_SOURCES) Add all the new source files to the
3242         list.
3243
3244         * aggregate.c: (glob var outfile) Make static.
3245
3246         * command.c: (glob var pgm_state) Move here.
3247
3248         * common.c: (glob vars endian, second_lowest_value, pgmname,
3249         finished, curdate, cur_proc, start_interactive, history_file) Move
3250         here.
3251
3252         * descript.q: (structs dsc_z_score, descriptives_trns) Move here.
3253
3254         * file-handle.q: (glob vars files, inline_file) Move here.
3255
3256         * glob.c: Lost lots of glob vars, detailed in individual file
3257         entries.
3258         (init_glob) set_printer, set_screen were obsolete, deleted.
3259         set_cprompt has fewer spaces because pspp has fewer letters than
3260         fiasco.
3261
3262         * inpt-pgm.c: (glob vars inp_init, inp_init_size) Move here.
3263         (inp_nval) Made static.
3264
3265         * lexer.c: (glob vars token, tokval, tokstr, tokstr_size,
3266         tokstr_len, toklongstr, tokint) Move here.
3267
3268         * misc.c: Lost several vars and functions.
3269
3270         * set.q: (all the set_* variables) Move here.
3271
3272         * str.c: (strmaxcpy, strbarepadcpy, strbarepadlencpy, strpadcpy,
3273         blpstrset, strpadcmp, memrev, memrmem, cmp_str) Move here from
3274         misc.c.
3275
3276         * tab.c: (set_expr, tab_col_width, tab_row_height) New functions.
3277
3278         * tab.h: (enum series t_*) New enums.
3279         (struct tab_table) Use arena struct tag.  New members ce, re.
3280
3281         * tokens.h: Comment fixes.
3282
3283         * var.h: Move lots of enums and variables and functions and
3284         structures to other files.  Use and declare a lot more union and
3285         struct tags.  Comment fixes.  
3286
3287         * vector.c: (glob vars vec, nvec) Move here.
3288
3289         * vfm.c: (glob vars reinit_sysmis, reinit_blanks, init_zero,
3290         init_blanks, last_vfm_invocation) Move here.
3291
3292         * cases.h: New file.
3293         (struct long_vec) Move here.
3294         (vec_init, vec_clear, vec_insert, vec_delete, devector, envector)
3295         Move here.
3296
3297         * command.h: New file.
3298         (STATE_* enums) Move here.
3299         (glob var pgm_state) Move here.
3300
3301         * format.c: New file.
3302         (glob var formats) Move here.
3303         (parse_format_specifier_name, fmt_to_string,
3304         check_input_specifier, check_output_specifier,
3305         check_string_specifier, convert_fmt_ItoO, parse_format_specifier)
3306         Move here.
3307
3308         * format.h: New file.  Move functions now in format.c here.
3309         (FMT_* enums) Move here.
3310         (struct fmt_desc) Move here.
3311         (FCAT_* enums) Move here.
3312         (struct fmt_spec) Move here.
3313         (glob vars formats, fmt_parse_ignore_error) Move here.
3314
3315         * inpt-pgm.h: New file.
3316         (INP_* enums) Move here, make #defines into enums.
3317         (glob vars inp_init, inp_init_size) Move here.
3318
3319         * sort.h: New file.
3320         (glob vars v_sort, nv_sort) Move here.
3321         (sort_cases, read_sort_output) Move here.
3322
3323         * vector.h: New file.
3324         (struct vector) Move here, add struct tag.
3325         (glob vars vec, nvec) Move here.
3326         (find_vector) Move here.
3327
3328         * New file.
3329         (glob vars last_vfm_invocation, temp_case, reinit_sysmis,
3330         reinit_blanks, init_zero, init_blanks) Move here.
3331         (struct case_stream) Move here.
3332         (glob vars vfm_source, vfm_sink, vfm_memory_stream,
3333         vfm_disk_stream, sort_stream, data_list_source,
3334         input_program_source, file_type_source, get_source, n_lag) Move
3335         here.
3336         (procedure, write_case, lagged_case, compact_case, page_to_disk)
3337         Move here.
3338                 
3339 Wed Dec 24 22:40:42 1997  Ben Pfaff  <blp@gnu.org>
3340
3341         * Makefile.am: (pspp_SOURCES) Added html.c, som.c, som.h.
3342         (LDADD) Add libdcdflib.
3343
3344         * ascii.c: Comment and formatting fixes.  Almost every external
3345         function had an assert added, checking driver_open and page_open.
3346         (ascii_init_driver) Broken into ascii_preopen_driver,
3347         ascii_postopen_driver, ascii_close_driver.  Manages driver_open.
3348         (ascii_open_page) Sets page_open.
3349         (ascii_close_page) Clears page_open.
3350
3351         * html.c: Comment and formatting fixes.  Almost every external
3352         function had an assert added, checking driver_open and page_open.
3353         (html_init_driver) Broken into html_preopen_driver,
3354         html_postopen_driver, html_close_driver.  Manages driver_open.
3355         (html_open_page) Sets page_open.
3356         (html_close_page) Clears page_open.
3357         (html_submit) Disabled.
3358
3359         * lexer.c: (parse_string) Remove debugging printf.
3360
3361         * list.q: (determine_layout) Open a page if one is not yet open.
3362
3363         * output.c: Comment fixes.
3364         (add_class) Set the class member of the new list element.
3365         (parse_options) Don't handle device type.
3366         (colon_tokenize) New function.
3367         (configure_driver) New four-field format with a field for device
3368         type.  Now initialize driver_open, page_open, next, and prev
3369         fields.  Use new colon_tokenize() function.  Don't do a memory
3370         copy to replace a driver, it doesn't work; instead delete the old
3371         driver and insert a new one.
3372         (destroy_driver) Don't call som_destroy_driver().  Close the page
3373         if it's open.  Find the class in the list of classes and decrement
3374         that reference count.  Remove the driver from the global driver
3375         list.
3376         (outp_iterate_enabled_drivers) Renamed outp_drivers().  All
3377         references changed.  Rewritten.  Don't return a driver that's not
3378         enabled.
3379         (outp_eject_page) All references to som_internal_eject_page()
3380         changed to use this.  Sets cp_x to 0 as well as cp_y.
3381
3382         * output.h: (OUTP_I_* enums) Removed.
3383         (struct som_submission_form) Removed.
3384         (struct outp_class) init_driver broken into preopen_driver,
3385         postopen_driver, and close_driver.  submit changed to take a
3386         som_table argument.
3387
3388         * postscript.c: Comment and formatting fixes.  Almost every
3389         external function had an assert added, checking driver_open and
3390         page_open.
3391         (ps_init_driver) Broken into ps_preopen_driver,
3392         ps_postopen_driver, ps_close_driver.  Manages driver_open.
3393         (ps_open_page) Sets page_open.
3394         (ps_close_page) Clears page_open.
3395
3396         * som.c: New file, base implementation.
3397         
3398         * som.h: (struct som_table) Add struct tag.
3399         (enum SOM_COL_ACROSS) Removed.
3400         (SOM_ROWS, SOM_COLUMNS) New enums.
3401         (struct som_table_class) Add member `cumulate'.  Remove `segment';
3402         change `render' arguments.
3403         (struct som_point, struct som_rect) Removed.
3404         (som_submit_table) Fixed typo, should have been som_submit.
3405
3406         * sysfile-info: (describe_variable) Don't try to insert a
3407         subtable; just destroy it for now.
3408
3409         * t-test.q: Include dcdflib/cdflib.h instead of cdflib.h.  Fix
3410         references to value labels.
3411
3412         * tab.c: (tab_destroy) New function.
3413         (tab_columns) Change argument.
3414         [0] (tab_submit) Remove dead code.
3415         (tab_title) Allocate string from the table's arena.
3416         (tab_output_text) Only free the buffer if we allocated it.
3417         (tab_submit) New function.
3418         (static vars t, d) New static vars.
3419         (tabi_table, tabi_driver, tabi_count, tabi_area, tabi_columns,
3420         tabi_headers, tabi_cumulate, tabi_render) New functions.
3421         (glob var tab_table_class) New global var.
3422
3423         * tab.h: (struct tab_join_rect) Don't use a som_rect; directly
3424         encapsulate the rectangle.  All references changed.
3425         
3426 Sun Dec 21 16:18:58 1997  Ben Pfaff  <blp@gnu.org>
3427
3428         * All header files updated to use struct tags in addition to
3429         typedefs for all structures.  Don't use word `struct' in struct
3430         tags.
3431         
3432         * Makefile.am: (pspp_SOURCES) Remove html.c.
3433         (INCLUDES) Replace the lib/* includes with a single lib/ include;
3434         all references updated.
3435
3436         * command.c: (parse_cmd) Remove call to som_check_workspace.
3437         (output_line) Update to new som.
3438
3439         * data-in.c: (parse_numeric) A single dot is not an error; it is
3440         the system-missing value.
3441
3442         * data-list.c: (dump_fixed_table, dump_free_table) Update to new
3443         som.
3444
3445         * data-out.c: Added `const' as appropriate to many prototypes.
3446         (convert_E, convert_F, convert_CCx) Take double argument instead
3447         of value * argument.
3448         (convert_format_to_string) Call changed functions appropriately.
3449         Instead of modifying the caller's value for FCAT_SHIFT_DECIMAL,
3450         make a local copy of the value.
3451
3452         * descript.q: Remove custom_variables() prototype now provided by
3453         q2c.  
3454         (custom_variables) Don't increment sbc_variables, the caller does
3455         this.
3456         (dump_z_table, display) Update to new som.
3457
3458         * error.c: (vmsg) Add const to prototype.  Remove code to handle
3459         `too many errors' condition.
3460         (check_error_count) New function.
3461         (msg) Add const to prototype.
3462
3463         * filename.c: (open_file) Rewrite for elegance.
3464
3465         * frequencies.q: Remove custom_*() prototypes now provided by q2c.
3466         (dump_full, dump_condensed, dump_statistics) Update for new som.
3467
3468         * list.q: Don't include somP.h.  Change all references to
3469         som_driver_ext to refer to the new members of som_driver.  Change
3470         som_internal_eject_page() references to outp_eject_page().
3471
3472         * main.c: (parse) Rewrite for elegance.  Add call to
3473         check_error_count().
3474
3475         * output.c: (add_class, outp_list_classes, outp_configure_driver)
3476         Rewrite or revise for new outp_driver_class_list structure.
3477         (outp_iterate_enabled_drivers) Fix comparison between disabled
3478         devices and current device type.
3479         (outp_eject_page) New function.
3480
3481         * output.h: Comment fixes.
3482         (struct outp_driver) New members driver_open, page_open, cp_x,
3483         cp_y, font_height, prop_em_width, fixed_width.  Deleted members
3484         ref_count, next.
3485         (struct outp_driver_class_list) New struct.
3486         (outp_class_list) Changed to type outp_driver_class_list; all
3487         references updated.
3488
3489         * print.c: (dump_table, print_trns_proc) Updated for new som.
3490
3491         * q2c.c: (dump_vars) Simplify array subcommand code.  Declare
3492         prototypes for custom subcommands.
3493         (dump_subcommand) Always include the `else'.
3494         (dump_parser) Fix comments in output code.
3495
3496         * set.q: Reordered functions.
3497
3498         * som-frnt.c, som-high.c, som-low.c, somP.h: Removed.
3499         
3500         * som.h: Rewritten from scratch.
3501
3502         * str.h: Remove dead code.
3503
3504         * tab.c, tab.h: New files, base implementation.
3505
3506         * sysfile-info.c: (cmd_sysfile_info, describe_variable) Update to
3507         new som.
3508
3509         * t-test.q: New code from John Williams
3510         <johnr.williams@stonebow.otago.ac.nz>.  Include math.h, cdflib.h.
3511         Many many new static vars and defines.
3512         (precalc, postcalc, g_postcalc, z_postcalc, t_pairs, t_groups,
3513         groups_calc, pairs_calc, z_dev_calc, z_calc) New functions.
3514         (struct value_list) New struct.
3515         (variance, covariance, pooled_variance, oneway, pearson_r, f_sig,
3516         t_crt, t_sig, print_t_groups) New functions.
3517         (cmd_t_test) Implemented.
3518
3519         * temporary.c: (cancel_temporary) Only free the temp_dict if it's
3520         non-NULL.
3521
3522         * vfm.c: (dump_splits) Update to new som.
3523
3524 Thu Dec  4 23:02:22 1997  Ben Pfaff  <blp@gnu.org>
3525
3526         * Makefile.am: (fiasco_SOURCES) Add html.c.
3527
3528         * aggregate.c: Base source.
3529
3530         * ascii.c: (postopen, preclose) Reformat.
3531
3532         * data-out.c, expr-evl.c: Comment fixes.
3533         
3534         * filename.c: (open_file) When opening a file for writing, use
3535         line buffering instead of full buffering for better interactive
3536         performance.  Suggested by Valerio Aimale
3537         <valerio@svpop.com.dist.unige.it>.  Also, recognize special file
3538         names `stdin', `stdout', `stderr'.
3539
3540         * groff-font.c: Comment fixes.
3541
3542         * html.c: New file; base version.
3543
3544         * list.q: (write_all_headers, clean_up, determine_layout,
3545         list_cases) Ignore `special' devices for now.  Needs to be fixed
3546         later.
3547
3548         * output.c: (outp_init) Add html driver to list; reverse list
3549         order.
3550
3551         * output.h: (struct outp_class_struct) New members `special',
3552         `submit'; comment fixes.  All references changed.
3553
3554         * postscript.c: (ps_init_driver) Make defaults for text_opt,
3555         line_opt depend on whether the OUTP_DEV_SCREEN bit is set on the
3556         device.
3557         (postopen) Comment fix.
3558         (preclose) Comment fixes, formatting fixes.  Change x->file.file
3559         references to more proper f->file.
3560
3561         * som-high.c: (som_submit_table) Special classes use their own
3562         renderers.
3563
3564         * som.h: Comment fixes.
3565
3566         * temporary.c: (new_dictionary) Don't try to xstrdup() a NULL
3567         string.
3568         
3569 Tue Dec  2 14:36:07 1997  Ben Pfaff  <blp@gnu.org>
3570
3571         * Makefile.am: (fiasco_SOURCES) Add aggregate.c back in.
3572
3573         * aggregate.c: Still working on this.
3574
3575         * command.c: (cmd_table[]) Add AGGREGATE back in.
3576         (split_words) Make '-' a legal word separator as well as ' '.
3577
3578         * main.c: Comment fixes.
3579
3580         * q2c.c: (dump_parser) Don't require the procedure's full name to
3581         be present, in the generated source.
3582
3583         * t-test.q: Change name to `t-test' from `t test'.  Let PAIRS be
3584         multiply specified and let it be default; let MISSING, CRITERIA,
3585         FORMAT be multiply specified.
3586         (cmd_t_test) Parse command name.  [DEBUGGING] Call debug_print().
3587         (custom_groups) Fix defaults.
3588         (custom_pairs) Check whether this is a PAIRS subcommand before
3589         attempting to parse.  Better garbage collection.  Proper storage
3590         allocation.
3591         [DEBUGGING] (debug_print) New function.
3592
3593         * temporary.c: Comment fixes.
3594         (copy_variable) Don't copy variable name and index.
3595         (save_dictionary) Copy variable name and index by hand.
3596
3597         * vars-atr.c: Comment fixes.
3598         (create_variable) New dictionary argument.  All references
3599         changed.
3600         (common_init_stuff) New dictionary argument.  All references
3601         changed.
3602         (init_variable) New dictionary argument.  All references changed.
3603         (dup_variable) New function.
3604
3605         * vars-prs.c: (parse_variables) If there are any errors, we always
3606         return 0.  Previously, it was possible for some types of errors to
3607         be ignored.
3608         
3609 Sat Nov 22 01:20:59 1997  Ben Pfaff  <blp@gnu.org>
3610
3611         * Makefile.am: (fiasco_SOURCES) For 0.1.5 release, remove
3612         aggregate.c.
3613
3614         * command.c: (cmd_table[]) Comment out AGGREGATE; add T TEST.
3615
3616         * list.q, t-test.q: Remove ALL option from VARLIST declaration in
3617         grammar rules.
3618
3619         * q2c.c: Comment fixes.
3620         (SBC_* enums) Remove SBC_VARLIST_ALL; all references removed.
3621         
3622         * t-test.q: (cmd_list) Rename cmd_t_test.
3623
3624         * temporary.c: (new_dictionary) Don't declare as static.
3625         
3626 Fri Nov 21 00:03:06 1997  Ben Pfaff  <blp@gnu.org>
3627
3628         * aggregate.c: Changes, still not finished.
3629
3630         * file-handle.q, frequencies.q, list.q, set.q: Comment fixes.
3631
3632         * q2c.c: Comment fixes.  Now its output is internationalized.
3633         (get_token) Fix parsing of escapes within literal strings.
3634         (main) Fix bad #line directives in output.
3635
3636         * t-test.q: Base implementation.
3637
3638         * temporary.c: (new_dictionary) New function.
3639         (restore_dictionary) [__CHECKER__] Change fill character to *
3640         (from @).
3641         
3642 Sun Nov 16 01:29:57 1997  Ben Pfaff  <blp@gnu.org>
3643
3644         * Makefile.am: (BUILT_SOURCES, fiasco_SOURCES) Add t-test.c
3645
3646         * aggregate.c: Changes, still not finished.
3647
3648         * descript.q, list.q: Comment fixes.
3649
3650         * q2c.c: Almost completely rewritten.
3651
3652         * t-test.q: New file, not complete.
3653
3654 Fri Nov 14 00:14:48 1997  Ben Pfaff  <blp@gnu.org>
3655
3656         * aggregate.c: Changes, still not finished.
3657
3658         * sort.c: (sort_cases) Call cancel_temporary() instead of doing it
3659         by hand.
3660
3661         * temporary.c: (cancel_temporary) New function.
3662
3663         * vars-atr.c: (discard_variables) Call cancel_temporary() instead
3664         of doing it by hand.
3665
3666         * vfm.c: (close_active_file) After restoring a TEMPORARY
3667         dictionary, set temp_dict to NULL.  Cancel TEMPORARY through
3668         cancel_temporary().
3669         (SPLIT_FILE_procfunc) Comment fix.
3670
3671 Tue Oct 28 16:08:45 1997  Ben Pfaff  <blp@gnu.org>
3672
3673         * Makefile.am: (fiasco_SOURCES) Add aggregate.c.
3674
3675         * aggregate.c: New file, not finished yet.
3676
3677         * command.c: (cmd_table) Add AGGREGATE.
3678
3679         * common.h: (pgm_state) Move declaration to var.h.
3680
3681         * lexer.c: (bin_value_func, oct_value_func, hex_value_func) i18n
3682         fixes.
3683         (parse_string) Message fix.
3684
3685         * recode.c: Comment fix.
3686
3687         * sfm-read.c: (read_variables) Code esthetic fixes.
3688         (write_header) Default date is `Jan', not `JAN'.
3689
3690         * sfmP.h: (bswap_int32) [!__linux__] Fix off-by-one errors.
3691
3692         * sort.c: (cmd_sort_cases) Farm the work out to new function
3693         parse_sort_variables().
3694         (parse_sort_variables) New function.
3695         (sort_cases) New function.  Cancels temporary transformations,
3696         which sorting didn't do previously.
3697         (cmd_sort_cases) Better garbage collection on error.  Uses
3698         do_external_sort().
3699         (write_initial_runs, merge_once) Improved code esthetics.
3700         (sort_stream_read) Reduced to one call to read_output_cases().
3701         (read_output_cases) New function.
3702
3703         * var-labs.c: (cmd_variable_labels) Re-enabled truncation of
3704         variable labels to 120 characters.
3705
3706         * var.h: Comment fixes.
3707         (glob var pgm_state) From common.h.
3708
3709         * vars-atr.c: (discard_variables) Set pgm_state to STATE_INIT.
3710
3711         * vars-prs.c: (parse_DATA_LIST_vars) Support PV_SINGLE in
3712         options.  Set *names to NULL on error.
3713
3714         * vfm.c: (memory_stream_init) Assert compaction_nval != 0.
3715
3716 Thu Oct  9 09:59:49 1997  Ben Pfaff  <blp@gnu.org>
3717
3718         * sfm-write.c, vfm.c: [HAVE_UNISTD] #include <unistd.h>, needed by
3719         SunOS4.  From Alexandre Oliva <oliva@dcc.unicamp.br>.
3720
3721 Wed Oct  8 18:55:24 1997  Ben Pfaff  <blp@gnu.org>
3722
3723         * vfm.c: (page_to_disk) Added missing local variables.
3724
3725 Tue Oct  7 20:23:17 1997  Ben Pfaff  <blp@gnu.org>
3726
3727         * get.c: Comment fix.
3728
3729         * sort.c: (cmd_sort_cases) Attempt to perform internal sort if the
3730         source is anything other than a disk stream, not just if it's in a
3731         memory stream.  Call page_to_disk() before external sort.
3732         (allocate_cases) Message fix.
3733
3734         * vfm.c: (prepare_for_writing) Warn user when paging workspace to
3735         disk.
3736         (page_to_disk) New function.
3737
3738 Sun Oct  5 15:56:14 1997  Ben Pfaff  <blp@gnu.org>
3739
3740         * Makefile.am: (INCLUDES) Include .. instead of $(top_srcdir).
3741
3742         * common.h: (macro strerror) Remove.  From Alexandre Oliva
3743         <oliva@dcc.unicamp.br>.
3744
3745         * get.c: (dict_delete_run) The number of variables to delete is
3746         not necessarily the number of variables that need to be shifted
3747         up.
3748         (trim_dictionary) Don't set *options to 0.  Fix bug that caused
3749         too many variables to be deleted.
3750
3751         * postscript.c: Comment fix.
3752
3753         * q2c.c: Include strerror.c.  From Alexandre Oliva
3754         <oliva@dcc.unicamp.br>.
3755
3756         * set.q: #undef ON and OFF.  From Alexandre Oliva
3757         <oliva@dcc.unicamp.br>.
3758
3759         * sfm-read.c: (sfm_read_dictionary) Don't set the file class too
3760         early, otherwise errors cause a bad free().
3761
3762         * str.h: (macro nvsprintf) s/FORMATS/FORMAT/ typo.  From Alexandre
3763         Oliva <oliva@dcc.unicamp.br>.
3764
3765         * temporary.c: (save_dictionary) Don't allocate memory if
3766         n_documents is 0.
3767
3768         * vfm.c: (memory_stream_write) Message fix.
3769
3770 Sat Oct  4 16:20:43 1997  Ben Pfaff  <blp@gnu.org>
3771
3772         * command.c: (static var cmd_table[]) Define REPEATING DATA
3773         command.
3774
3775         * common.h: Added support for broken systems that are missing
3776         EXIT_SUCCESS, EXIT_FAILURE, RAND_MAX, and/or strerror().
3777
3778         * Many source files: Replace syntax error messages via msg() with
3779         call to syntax_error().
3780
3781         * data-list.c: (dump_fixed_table) Add support for dumping table
3782         for REPEATING DATA as well as DATA LIST FIXED.
3783         (cmd_repeating_data) Allows and requires `/' between subcommands.
3784         Does proper thing with allowing rpd.starts_end to stay 0.  Allows
3785         CONTINUED specifications to be omitted.  Forces CONTINUED to be
3786         specified if ID is.  Calculates starts_end, cont_end from logical
3787         record length as reported by fhp.  Calls dump_fixed_table() if
3788         requested.  Fixed length of record copied by memcpy.
3789         (parse_num_or_var) Sets `num' to 0, not NOT_INT, for variables.
3790         Message fix.
3791         (realize_value) Returns sensible value for out-of-range variable
3792         values.
3793         (rpd_parse_record) New argument `ofs'.  Fixed confusion between
3794         length of occurrences and length of line.  Added warning for
3795         fields that exceed the line length.  Fixed infinite loop.
3796         (read_one_set_of_repetitions) Numerous minor changes for more
3797         complete SPSS compliance.  Message fixes.
3798
3799         * dfm.c: (dfm_close) If the file being closed is the inline file,
3800         read all the remaining data before closing it.
3801         (dfm_get_record) Don't close the file on lossage, as either it
3802         has been closed already or it doesn't belong to us.
3803
3804         * error.c: (puts_stdout) New function.
3805         (vmsg) Use puts_stdout instead of puts.
3806
3807         * file-handle.q: (fh_record_width) New function.
3808
3809         * inpt-pgm.c: (init_case) Fixed buffer overrun when inp_nval % 4
3810         == 0.
3811         (clear_case) Ditto.
3812         (input_program_source_read) Made an old kluge an approved method.
3813
3814         * lexer.c: (syntax_error) New function.
3815
3816         * misc.c: [BROKEN_RAND] (ansi_rand, ansi_srand; static var next)
3817         New.
3818
3819         * output.c: (oupt_get_paper_size) Message fix.
3820
3821         * q2c.c: Numerous fixes to formatting of generated code made to
3822         conform to GNU coding standards.  Uses syntax_error() in generated
3823         code.  Other miscellaneous generated message fixes.  Added support
3824         for broken systems that are missing EXIT_SUCCESS, EXIT_FAILURE,
3825         RAND_MAX, and/or strerror().
3826
3827 Sat Oct  4 02:09:56 1997  Ben Pfaff  <blp@gnu.org>
3828
3829         * data-in.c: Comment fixes.
3830
3831         * data-list.c: (struct repeating_data_trns) New member `id_spec'.
3832         (find_variable_input_spec) New function.
3833         (cmd_repeating_data) Initializes id_spec.
3834         (rpd_parse_record) Implemented.
3835         (read_one_set_of_repetitions) Returns -3 by default in order to
3836         kluge out some potential bugs.
3837
3838         * data-out.c: Comment fixes.
3839
3840         * file-type.c: (internal_cmd_record_type) Message fix.
3841
3842         * inpt-pgm.c: (input_program_source_read) Special temporary kluge
3843         for handling -3 return value.
3844
3845 Sat Sep 20 23:58:15 1997  Ben Pfaff  <blp@gnu.org>
3846
3847         * data-list.c: Comment fixes.
3848         (struct dls_var_spec) Reordered members.
3849         (read_from_data_list_fixed) Restructured.
3850         (struct repeating_data_trns) Reordered members.  Renamed `starts'
3851         as `starts_beg', `ends' as `starts_end'.
3852         (cmd_repeating_data) Calculates length of repeated data if
3853         necessary and possible.
3854         (parse_num_or_var) Don't allow string variables.
3855         (realize_value) New function.
3856         (rpd_msg) New function.
3857         (rpd_parse_record) New function.  Currently stubbed out.
3858         (read_one_set_of_repetitions) Implemented.
3859
3860         * inpt-pgm.c: (input_program_source_read) Comment fix.
3861
3862 Thu Sep 18 21:34:57 1997  Ben Pfaff  <blp@gnu.org>
3863
3864         * command.c: (cmd_end_repeat_p) Removed.
3865         (init_cmd_parser) Doesn't set cmd_end_repeat_p.
3866         (parse_cmd_name) Removed.
3867
3868         * data-list.c: Comment fixes.
3869         (data_list_pgm) Removed `eof' member.
3870         (static var first) New var.
3871         (cmd_data_list) Sets `first'.  Ensures that DATA LIST uses the
3872         FILE TYPE file inside FILE TYPE structures.
3873         (append_var_spec) Appends to *first, not dls.spec.
3874         (parse_fixed) Message fixes.
3875         (struct rpd_num_or_var) New.
3876         (struct repeating_data_trns) New.
3877         (static var rpd) New.
3878         (cmd_repeating_data) New function.
3879         (parse_num_or_var) New function.
3880         (parse_repeating_data) New function.
3881         (read_one_set_of_repetitions) New function.
3882
3883         * file-type.c: (cmd_file_type) Message fixes.  Always
3884         default_handle to FILE TYPE file handle.
3885         (internal_cmd_record_type) Message fixes.
3886
3887 Wed Aug 20 14:22:03 1997  Ben Pfaff  <blp@gnu.org>
3888
3889         * repeat.c: Comment fix.  Disable debugging.
3890
3891         * temporary.c: (restore_dictionary) Sets splits to NULL and
3892         n_splits to 0 before destroying the variables because now doing
3893         this tries to remove split variables.
3894
3895         * vars-atr.c: (discard_variables) Asserts that n_splits is 0 after
3896         destroying the dictionary.
3897         (clear_variable) Removes a variable from splits after destroying
3898         it.
3899
3900 Mon Aug 18 18:06:55 1997  Ben Pfaff  <blp@gnu.org>
3901
3902         * cmdline.c: (set_compat) Removed.
3903         (pick_compat) Removed.
3904         (parse_command_line) Removed -c option.
3905         (pre_syntax_message) Removed -c option.
3906         (usage) Remove compatibility code.
3907
3908         * common.h: (macros VER_PC, VER_WND, VER_X) Removed.
3909         (glob var compat) Removed.
3910
3911         * compute.c: (type_check) Fixed messages about type mismatches.
3912
3913         * data-list.c: (cmd_data_list) Removed compatibility code.
3914         (fixed_parse_compatible) Calls convert_negative_to_dash().
3915         Fixed bug where it only set the variable in fx.spec if it created
3916         the variable itself.
3917         (dump_fmt_list) Spelling fix.
3918         (cut_field) Removed compatibility code.
3919
3920         * dfm.c: (cmd_begin_data) Don't require a command terminator on
3921         BEGIN DATA command.
3922
3923         * expr-evl.c: (evaluate_expression) Implement LAG.
3924
3925         * expr-prs.c: (parse_add) Calls convert_negative_to_dash().
3926         (parse_neg) Calls convert_negative_to_dash().
3927         (LAG_func) Increases n_lag to the lag requested.  Fixed assignment
3928         bug.
3929
3930         * expr.h: (struct expression_struct) Removed member max_lag.
3931
3932         * file-type.c: (parse_col_spec) Calls convert_negative_to_dash().
3933         (internal_cmd_record_type) Removed special handling to produce
3934         negative numbers from dash tokens.
3935
3936         * getline.c: (static var DO_REPEAT_level) New var.
3937         (getl_add_DO_REPEAT_file) Increments DO_REPEAT_level.
3938         (handle_line_buffer) Copies the line into getl_buf; doesn't call
3939         copy_with_DO_REPEAT_substitutions().
3940         (getl_read_line) Maintains value of getl_mode.  Calls
3941         perform_DO_REPEAT_substitutions() whenever DO_REPEAT_level is
3942         positive.
3943         (getl_close_file) Decrements DO_REPEAT_level when appropriate.
3944
3945         * getline.h: (getl_mode) New glob var.
3946
3947         * glob.c: Comment fixes.
3948         (init_glob) Restructured.  Sets set_seed.
3949         (init_compat_dependent) Removed.  All references removed.
3950         (get_date) Format changed from MM/DD/YY to DD MMM YYYY.
3951         (__htonl, __htons) Removed.  (What were these for?)
3952
3953         * lexer.c: (static var tbl) Dash set to class CNUM.
3954         (make_hexit) New function from data-out.c.
3955         (get_token_representation) Rewritten.
3956         (convert_negative_to_dash) New function.
3957         (lex_init_compat_dependent) Removed.
3958         (yylex) A dash is parsed as part of a number if it is followed by
3959         a digit.  The ASCII representation of a number is copied to
3960         tokstr.  String parsing farmed out to parse_string().  Comment
3961         fixes.
3962         (bin_value_func, oct_value_func, hex_value_func, parse_string) New
3963         functions.
3964         (preprocess_line) Line processing depends on interactive/batch
3965         mode, not on compatibility mode.  Removed PC+ compatibility code.
3966
3967         * loop.c: (loop_3_trns_proc) Comment fix.
3968
3969         * main.c: Remove dead code.
3970         (main) Remove call to init_compat_dependent().
3971
3972         * misc.c: (convert_fmt_ItoO) Make E format conversion more
3973         conformant.
3974
3975         * print.c: (parse_string_argument) Calls
3976         convert_negative_to_dash().
3977         (fixed_parse_compatible) Calls convert_negative_to_dash().
3978
3979         * repeat.c: (RPT_* defines) Removed.
3980         (struct rpt_numeric) Removed.
3981         (struct repeat_entry) New member type, changed `replacement' from
3982         char * to char **.
3983         (clean_up) Deallocation adapted to new repeat_entry.
3984         (internal_cmd_do_repeat) `type' defaults to 0.  Remove lookahead()
3985         usage.  Creates vars for `type' of 1.
3986         (parse_ids) Sets type of 1.  Adapted to new repeat_entry.
3987         (store_numeric) Rewritten, new interface.
3988         (parse_numbers) Rewritten.
3989         (parse_strings) Rewritten.
3990         (find_DO_REPEAT_substitution) New function.
3991         (perform_DO_REPEAT_substitutions) New function.
3992         (copy_with_DO_REPEAT_substitutions) Removed.
3993         (debug_print) Rewritten.
3994
3995         * set.q: Comment fix.
3996         (custom_results) Removed compatibility code.
3997         (internal_cmd_set) Removed SET EMULATION subcommand.  Removed
3998         compatibility code.
3999
4000         * sysfile-info.c: (cmd_display) Removed compatibility code.
4001
4002         * tokens.h: Comment fixes.
4003         (token types enum) Removed `toktype' typedef name for this int
4004         type.  Removed SUBST.  Restructured.
4005
4006         * vars-atr.c: (discard_variables) Sets n_lag to 0.
4007
4008         * vars-prs.c: Comment fix.
4009
4010         * vfm.c: Comment fixes.
4011         (glob var n_lag) New var.
4012         (static vars lag_count, lag_head, lag_queue) New vars.
4013         (procedure) Removed argument nlag.
4014         (setup_lag) New function.
4015         (close_active_file) Discards lagging state.
4016         (lag_case) New function.
4017         (lagged_case) New function.
4018         (write_case) Lags a case if lagging.
4019
4020         * weight.c: (cmd_weight) Removed compatibility code.
4021         
4022 Sun Aug 17 22:34:40 1997  Ben Pfaff  <blp@gnu.org>
4023
4024         * getline.h: (struct getl_script) New members loop_index, macros.
4025
4026         * getline.c: (getl_add_file) Sets first_line field to NULL.
4027         (getl_add_DO_REPEAT_file) New function.
4028         (handle_line_buffer) When the current line's length is negative,
4029         set the filename and line number.  Increment line number after
4030         reading line.  Pass the line to
4031         copy_with_DO_REPEAT_substitutions() for processing.
4032         (getl_close_file) Free DO REPEAT lines before freeing the
4033         filename, and just set the filename to NULL when doing this,
4034         because otherwise the filename gets freed twice.
4035
4036         * glob.c: (glob var queuing) Removed.  All references removed.
4037
4038         * lexer.c: Comment fixes.
4039         (get_token_representation) New function.
4040
4041         * repeat.c: Comment fixes.
4042         (struct repeat_entry) Replaced type and v union members with a
4043         simple string.
4044         (append_record) New function.
4045         (internal_cmd_do_repeat) Started reforming it for the new
4046         repeat_entry struct.  Properly records filename changes in the
4047         getl_line_buf.  Fixed improper use of = for ==.  Fixed sense of
4048         strncasecmp() result usage.  Uses append_record() to simplify.
4049         Properly discards END REPEAT line.  Calls getl_add_DO_REPEAT_file
4050         to add in the file.
4051
4052         (copy_with_DO_REPEAT_substitutions) Started coding.
4053
4054         [DEBUGGING] (debug_print_lines) New function.
4055
4056         * set.q: (custom_results, internal_cmd_set) s/VER_PCP40/VER_PC/;
4057
4058         * tokens.h: (macro is_id1, is_idn) New macros.
4059
4060 Sat Aug 16 10:57:41 1997  Ben Pfaff  <blp@gnu.org>
4061
4062         * cmdline.c: (static var pre_syntax_message) Changed `win'
4063         compatibility mode to `wnd'.
4064
4065         * data-list.c: (fixed_parse_spss) Renamed
4066         fixed_parse_compatible().
4067
4068         * glob.c: (init_glob) Excise unused code for
4069         program_invocation_short_name.
4070
4071         * lexer.c: (preprocess_line) Leading indentors are ignored in Wnd
4072         as well as in X.
4073
4074         * print.c: (fixed_parse_spss) Renamed fixed_parse_compatible().
4075
4076         * set.q: `win' compatibility renamed `wnd'.
4077
4078 Thu Aug 14 22:11:12 1997  Ben Pfaff  <blp@gnu.org>
4079
4080         * filename.c: [__WIN32__] Change the included Windows header files
4081         (again).
4082         (absolute_filename_p) [__MSDOS__] A filename with a colon as the
4083         second character is absolute.
4084         (dirname) Fix logic error.  Don't printf() the results.
4085         (prepend_dir) Don't printf() the results.
4086
4087         * getline.c: (handle_line_buffer) New function.
4088         (getl_read_line) Reads line with handle_line_buffer() when
4089         appropriate.
4090         (getl_close_file) Discard line buffer data.
4091
4092         * getline.h: Comment fixes.
4093         (struct getl_line_list) New struct.
4094         (getl_script_struct) Added line buffer members.  These are hooks
4095         for use by DO REPEAT to allow it to insert virtual source code
4096         into the program.
4097
4098         * glob.c: (init_glob) [__DJGPP__ || (__WIN32__ && __BORLANDC__)]
4099         Override Borland C++ stupidity that claims Windows has a console
4100         window size of 0x3.
4101
4102         * repeat.c: This is in the process of being restructured from
4103         using a token-buffering approach to the DO REPEAT facility to
4104         using the more flexible approach of a line-buffering approach in
4105         conjunction with the getline module.  Comment fixes.
4106         (struct tok_struct) Removed.
4107         (static vars queue_index, queue_head, queue) Removed.
4108         (static vars line_buf_head, line_buf_tail) New vars.
4109         (internal_cmd_do_repeat) Instead of queuing tokens, queue lines.
4110         Not complete.
4111         (pull_queue, destroy_queue) Removed.
4112         [DEBUGGING] (debug_print_tokens) Removed.
4113
4114 Tue Aug  5 13:57:58 1997  Ben Pfaff  <blp@gnu.org>
4115
4116         * file-handle.q: (prepend_current_directory) New function.
4117         (internal_cmd_file_handle, fh_get_handle_by_filename) Prepends
4118         current directory before normalizing filename.
4119
4120         * filename.c: (gnu_getcwd) New function.
4121         (absolute_filename_p) New function.
4122         (search_path) New argument, PREPEND.  All references changed to
4123         pass NULL except those explicitly mentioned.  Uses
4124         absolute_filename_p().  Prepends PREPEND before trying the
4125         filename.
4126         (dirname, prepend_dir) New functions.
4127
4128         * getline.c: (getl_get_current_directory) New function.
4129         (getl_include) Passes getl_get_current_directory() as PREPEND arg
4130         to search_path().
4131                 
4132 Sun Aug  3 11:42:36 1997  Ben Pfaff  <blp@gnu.org>
4133
4134         * In several source files, the term `script' was replaced with
4135         `syntax file' inside error messages.  Usage of the term `script'
4136         in the sense of a syntax file is now deprecated.
4137
4138         * cmdline.c: (static vars pre_syntax_message, post_syntax_message)
4139         Updated messages.
4140
4141         * dump-sysfile.c: (usage) Update message.
4142
4143         * getline.c: (getl_read_line) Ignore lines beginning with `#!'.
4144
4145         * getline.h: (glob var getl_include_path) Declare extern.
4146
4147         * list.q: Define EXTERN as extern before #including somP.h.
4148
4149         * var.h: Remove declaration of `disptype' variable.
4150
4151         * vfm.c: (close_active_file) After switching the data sink to a
4152         data source, set vfm_sink to NULL, because it doesn't exist any
4153         more.
4154
4155 Thu Jul 17 21:41:44 1997  Ben Pfaff  <blp@gnu.org>
4156
4157         * glob.c: [__BORLANDC__] Include math.h.  Define _matherr() and
4158         _matherrl() to ignore all math errors.
4159
4160         * sfm-read.c: (read_value_labels) When reading the labels from
4161         disk, read the little parts separately instead of as a struct;
4162         this avoids alignment problems.
4163
4164         * sfm-write.c: (struct sfm_fhuser_ext) New member `elem_type'.
4165         (sfm_write_dictionary) Sets elem_type and frees it on lossage.
4166         (write_header) Allocates and initializes elem_type.
4167         (sfm_write_case) Uses elem_type to determine how to handle each
4168         flt64 element.
4169         (sfm_close) Frees elem_type.
4170
4171         * sfmP.h: Comment fix.
4172         [__BORLANDC__] Uses #pragma -a to adjust structure member
4173         alignment.
4174         
4175 Thu Jul 17 01:55:12 1997  Ben Pfaff  <blp@gnu.org>
4176
4177         * Makefile.am: (fiasco_SOURCES) Remove display.c.
4178
4179         * common.c: Fix typo.
4180
4181         * dfm.c: (read_record) Remove strncasecmp() emulation and fix the
4182         sense of the condition.
4183
4184         * expr-evl.c: (macro ALLOC_STRING_SPACE) [!PAGED_STACK] Add
4185         line-continuation backslash.
4186
4187         * filename.c: [__WIN32__] Include <windef.h> before <winbase.h>.
4188
4189         * frequencies.q: (custom_grouped, add_percentile) Don't use a
4190         non-constant expression as an argument to sizeof.
4191
4192         * glob.c: [__WIN32__ && __BORLANDC__] When including <conio.h>,
4193         undefine gettext macro because that's a conio function.
4194
4195         * hash.h: (hsh_prime_tab declaration) Remove.
4196
4197         * list.q: (write_fallback_headers) Move `leader' allocation out of
4198         main loop.  Change to local_alloc() allocation.
4199
4200         * output.h: Formatting fixes.  Put __attribute__ in right place on
4201         function prototypes.
4202
4203         * sfm-read.c: (read_machine_flt64_info, read_variables) Change
4204         incorrect `SECOND_LOWEST_VALUE' references to proper
4205         `second_lowest_value'.
4206
4207         * som-frnt.c: (EXTERN macro) Define as `extern' instead of null
4208         value.  This way 2 out of 3 of the som files define the vars
4209         extern, the correct way, that actually works under BC++.
4210         (som_set_float) Don't use nonconstant initializers for a struct.
4211
4212         * som-high.c: Add the standard alloca() header.
4213         (replicate_table) Add prototype.
4214
4215         Merged DISPLAY routine.
4216         * sysfile-info.c: (AS_*) New enum series.
4217         (cmd_sysfile_info) Gutted.  Calls describe_variable() to do the
4218         dirty work.
4219         (cmd_display, display_macros, display_documents,
4220         display_variables) Stolen from defunct display.c.
4221         (describe_variable) New function.
4222
4223         * temporary.c: [0] (display_tree) New debug function.
4224         (copy_variable) Performs shallow copy of value labels instead of
4225         deep copy; i.e., just copys the AVL tree and increments the
4226         reference counts.
4227
4228         * val-labs.c: Comment fixes.
4229         (do_value_labels) Optionally skip leading forward slash.
4230         (get_label) Creates only a single value label instead of many
4231         copies of one, and sets the reference count.
4232
4233         * display.c: Removed.
4234
4235         * dump-sysfile.c: New file, not yet complete.
4236
4237 Fri Jul 11 23:02:18 1997  Ben Pfaff  <blp@gnu.org>
4238
4239         For lots of source files I added more verbose_msg's.  These aren't
4240         listed below as they have tested as being benign.  In some cases
4241         these replaced debug_printf() calls.
4242
4243         * output.c: (outp_read_devices) Message fix.
4244
4245         * postscript.c: (output_encodings) Message fix.  Reports errors on
4246         fclose().
4247         (postopen) Message fix.
4248         
4249 Fri Jul 11 14:09:40 1997  Ben Pfaff  <blp@gnu.org>
4250
4251         * dfm.c: (dfm_close) Don't call fclose() for a NULL FILE.
4252
4253         * filename.c: (close_file_ext) Set f->file to NULL *after* closing
4254         it.
4255
4256         * main.c: Remove <malloc.h> #include.
4257
4258         * mis-val.c: (parse_numeric) Set .f member for each missing[]
4259         instead of trying to just set the missing[] itself, which is a
4260         gcc-specific idiom.
4261
4262         * sfm-read.c: (read_variables) Same.
4263
4264         * str.h: Add memmem() prototype.
4265
4266         * val-labs.c, var-labs.c: Replace <malloc.h> with <stdlib.h>.
4267
4268 Thu Jul 10 22:13:53 1997  Ben Pfaff  <blp@gnu.org>
4269
4270         * Makefile.am: (q2c) Don't include any libraries in the link.
4271
4272         * dfm.c: (force_line_buffer_extension) New macro.
4273         (count_tabs) New function.
4274         (tabs_To_spaces) New function.
4275         (read_record) Calls tabs_to_spaces() on the line being processed.
4276
4277         * q2c.c: Disabled i18n for this proglet so that libintl.a doesn't
4278         have to be compiled twice (once for CC, once for LOCAL_CC).
4279  
4280 Sun Jul  6 19:14:33 1997  Ben Pfaff  <blp@gnu.org>
4281
4282         * Makefile.am: (INCLUDES) Add intl directory; fix directories.
4283         (LDADD) Add @INTLLIBS@.
4284         (q2c) Add LIBS, @INTLLIBS@ to link step.
4285
4286         * inpt-pgm.c: Turn off debugging.
4287
4288         * postscript.c: (postopen) Format fix.  local_free() blocks
4289         returned by local_alloc(); don't free() them.
4290
4291 Sat Jul  5 23:44:51 1997  Ben Pfaff  <blp@gnu.org>
4292
4293         * data-in.c: (parse_string_as_format) Comment fix.  Fix check for
4294         string length.
4295
4296         * data-list.c: (read_from_data_list_fixed) Pass proper value for
4297         LEN arg, not simply the full string length.
4298
4299         * sort.c: (allocate_file_handles) Check SPSS compatible temp file
4300         directories before generic temp file directories.
4301
4302         * vfm.c: Disable debugging.
4303
4304 Fri Jul  4 13:26:41 1997  Ben Pfaff  <blp@gnu.org>
4305
4306         * get.c: Comment fix.
4307         (cmd_save_internal) Always passes GTSV_OPT_SAVE option.
4308
4309 Wed Jun 25 22:52:28 1997  Ben Pfaff  <blp@gnu.org>
4310
4311         * expr-prs.c: (debug_print_postfix) Conditionally included on
4312         GLOBAL_DEBUGGING.  Removed out_header() reference.
4313
4314         * exprP.h: Removed #undef GLOBAL_DEBUGGING.
4315
4316 Sun Jun 22 22:00:28 1997  Ben Pfaff  <blp@gnu.org>
4317
4318         * ascii.c: Removed obsolete ascii_close_page() prototype.
4319
4320         * command.c: (output_line) Comment fix.
4321
4322         * data-in.c: Formatting fix.
4323         (parse_string_as_format) Now the `fc' argument is used only for
4324         the purpose of error messages; it is not an index into the string
4325         passed.  All references changed.
4326
4327         * data-list.c: Comment fix.
4328         (cut_field) Comment fix.  Now returns the column number of the
4329         position of the field cut out on success.
4330         (parse_field) Added `column' argument.  Puts the column numbers in
4331         the error message.
4332         (read_from_data_list_free, read_from_data_list_list) Record the
4333         column number returned by cut_field(), pass it to parse_field().
4334
4335         * dfm.c: Comment fix.
4336
4337         * do-ifP.h: Comment fix.
4338
4339         * expr-prs.c: (SYSMIS_func) Implemented string-type arguments for
4340         the SYSMIS function.
4341
4342         * expr.h, exprP.h: Comment fix.
4343
4344         * glob.c: (init_glob) Only calls setlocale() and family if
4345         ENABLE_NLS set.
4346
4347         * hash.h: Comment fix.
4348
4349         * include.c: Comment fix.
4350
4351         * output.c: Comment fix.
4352
4353         * postscript.c: (ps_line_intersection) Simplified assertion.
4354
4355         * repeat.c: Comment fix.
4356
4357         * vars-atr.c: Comment fix.
4358
4359         * vars-prs.c: Comment fix.
4360
4361         * vfm.c: (vector_initialization) [DEBUGGING] Fixed undefined
4362         behavior with usage of postincrement.
4363         (memory_stream_read) Discards cases as it goes. 
4364
4365 Sun Jun 15 16:45:17 1997  Ben Pfaff  <blp@gnu.org>
4366
4367         * Makefile.am: Cleans q2c, not just distcleans it.  Distcleans
4368         foo.
4369
4370         * Most source files: Includes debug-print.h, related comment
4371         fixes.
4372
4373         * cases.c: (alloc_val) Removed complex allocation code.  Merely
4374         increments default_dict.nval and returns the former value.
4375         (envector, devector) Removed references to lv member of struct
4376         variable.
4377
4378         * common.h: (macro VME) Replaced complex definition with simple
4379         one.
4380
4381         * data-list.c: (cmd_data_list) Sets vfm_source instead of
4382         read_active_file and cancel_input_pgm.
4383         (read_from_data_list, cancel_data_list) Removed.
4384         (data_list_source_read, data_list_source_destroy_source) New
4385         functions.
4386         (glob var data_list_source) New var.
4387
4388         * dfm.c: (open_file_r, open_file_w) Simplified debug output.
4389         (cmd_begin_data) Improved criteria for an input program accessing
4390         the inline file.  Still not perfect.
4391
4392         * do-if.c: (do_if_trns_proc) Simplified debug output.
4393
4394         * expr-prs.c: Comment fixes.
4395         [DEBUGGING] (debug_print_postfix) Simplified debug output.
4396
4397         * file-handle.q: (fh_close_handle) Simplified debug output.
4398
4399         * file-type.c: Comment fixes.
4400         (cmd_file_type) Sets vfm_source instead of read_active_file and
4401         cancel_input_pgm.
4402         (cmd_end_file_type) On failure, discards variables in place of
4403         just canceling the input program.
4404         (read_from_file_type) Renamed file_type_source_read.
4405         (cancel_file_type) Renamed file_type_source_destroy_source.
4406         (glob var file_type_source) New var.
4407
4408         * get.c: (GTSV_* enum series) New enums GTSV_OPT_SAVE, GTSV_NONE.
4409         (cmd_get) Initializes options to GTSV_NONE before passing to
4410         trim_dictionary().  Removed `lv' reference.  Sets vfm_source
4411         instead of read_active_file and cancel_input_pgm.
4412         (cmd_save_internal) Initializes options before passing to
4413         trim_dictionary().  Local var `nval' removed.
4414         (dict_delete_run) Comment fixes.
4415         (trim_dictionary) Comment fixes.  Disallows scratch variables if
4416         GTSV_OPT_SAVE set in options.
4417         (read_from_get) Renamed get_source_read.
4418         (cancel_get) Renamed get_source_destroy_source.
4419         (glob var get_source) New var.
4420
4421         * inpt-pgm.c: (cmd_input_program) Sets vfm_source instead of
4422         read_active_file and cancel_input_pgm.
4423         (read_from_input_program) Renamed input_program_source_read.
4424         Simplified debug output.
4425         (cancel_input_program) Renamed
4426         input_program_source_destroy_source.
4427         (glob var input_program_source) New var.
4428
4429         * loop.c: (loop_1_trns_proc) Simplified debug output.
4430
4431         * main.c: (dump_token) Made eof output more explicit.
4432
4433         * sfm-read.c: (read_variables, dump_dictionary) Removed `lv'
4434         references.
4435
4436         * sort.c: (cmd_sort_cases) Disallows scratch variables.  Removed
4437         code for always-memory or always-disk cases.  malloc's case-list
4438         based on vfm_source_info.ncases.  Explicit support for
4439         memory_stream via memory_source_cases.
4440         (do_external_sort) Sets vfm_source instead of read_active_file and
4441         cancel_input_pgm.
4442         (allocate_file_handles) The temporary directory permissions are
4443         set to 0700 instead of 0777.
4444         (allocate_cases) Formatting fixes.  Simplified debug output.
4445         (output_record) Compacts the case if necessary before writing it
4446         out.
4447         (close_handle, open_handle_w) Simplified debug output.
4448         (write_initial_runs) Destroys vfm_sink, then sets it to
4449         sort_stream.  Writes records to memory based on
4450         vfm_sink_info.case_size.
4451         (write_to_sort_cases) Renamed sort_stream_write().
4452         (merge) Simplified error handling.  Simplified debug output.
4453         Formatting fixes.
4454         (read_from_external_sort) Renamed sort_stream_read().
4455         Reads records based on vfm_source_info.case_size.
4456         (sort_stream_write) Writes records to memory based on
4457         vfm_sink_info.case_size.
4458         (sort_stream_mode) New function.
4459         (glob var sort_stream) New variable.
4460
4461         * temporary.c: (cmd_temporary) Simplified debug output.
4462         (copy_variable) Removed references to `lv'.
4463
4464         * title.c: (get_title) Simplified debug output.
4465
4466         * var.h: Comment fixes.
4467         (struct get_proc) Removed member `lv'.
4468         (struct variable) Removed member `lv'.  Comment fixes.
4469         (glob vars read_active_file, write_active_file, cancel_input_pgm)
4470         Removed.
4471         (struct case_stream) New.
4472
4473         * vars-atr.c: (discard_variables) Changed cancel_input_pgm,
4474         read_active_file references to use vfm_source.
4475         (init_variable, replace_variable) Removed references to `lv'.
4476
4477         * vfm.c: Comment fixes.
4478         (glob var vfm_source, vfm_sink, vfm_source_info, vfm_sink_info)
4479         New variables.
4480         (static var queue, qh, qt, n_lag) Removed.  All references
4481         removed.
4482         (glob var compaction_necessary, compaction_nval, compaction_case,
4483         paging) New variables.
4484         (record_case) Removed.
4485         (procedure) Comment fixes.  Calls vfm_source->read() instead of
4486         read_active_file().
4487         (lag) Removed.
4488         (prepare_for_writing, arrange_compaction, make_temp_case,
4489         vector_initialization, setup_filter) New function.
4490         (open_active_file) Most of the code moved into the abovementioned
4491         new functions.  Now sets temp_dict to &default_dict if there is no
4492         temporary dictionary, for convenience.  New debug output.
4493         (close_active_file) Deals with changing the sink to the source.
4494         Calls finish_compaction().  Frees compaction_case.  Mostly
4495         rewritten.
4496         (glob vars disk_source_file, disk_sink_file) New vars.
4497         (destroy_active_file, read_from_memory) Removed.
4498         (disk_stream_init, disk_stream_read, disk_stream_write,
4499         disk_stream_mode, disk_stream_destroy_source,
4500         disk_stream_destroy_sink) New functions.
4501         (glob var vfm_disk_stream) New var.
4502         (glob vars memory_source_cases, memory_sink_cases,
4503         memory_sink_iter, memory_sink_max_cases) New vars.
4504         (memory_stream_init, memory_stream_read, memory_stream_write,
4505         memory_stream_mode, memory_stream_destroy_source,
4506         memory_stream_destroy_sink) New functions.
4507         (glob var vfm_memory_stream) New var.
4508         (write_case) Local var `i' renamed `cur_trns'; local var `retval'
4509         named `more_cases'.  Simplified debug output.  Otherwise mostly
4510         rewritten.
4511         (record_case) Moved into the stream drivers.  Removed.
4512         (transform) Removed (was dead code).
4513         (SPLIT_FILE_procfunc) s/vfm_replacement/vfm_sink_info/.  In the
4514         common case that the splits don't change, we don't need to copy
4515         the case into prev_case again--pointless.
4516         (compact_case) New function.
4517         (finish_compaction) New function.
4518
4519         * vfmP.h: Comment fixes.
4520         (DEV_* enum series) Removed. 
4521         (struct storage) Renamed `stream_info'.  Removed variant record.
4522         Removed `device' member.
4523
4524         * debug-print.h: New file.
4525         
4526 Sun Jun  8 01:12:38 1997  Ben Pfaff  <blp@gnu.org>
4527
4528         * autorecode.c: Turned off debugging.
4529
4530         * data-list.c: (destroy_dls) Closes the associated file handle.
4531
4532         * descript.q: (custom_variables) Added PV_NO_SCRATCH to
4533         parse_variables() options.
4534
4535         * dfm.c: (open_file_r) Removed gratuituous argument to msg() call.
4536
4537         * display.c: (display_variables) Really fixed null cell bug.
4538
4539         * file-handle.q: (fh_close_handle) Changed debugging message.
4540
4541         * frequencies.q: (custom_variables) Added PV_NO_SCRATCH to
4542         parse_variables() options.
4543
4544         * list.q: Added PV_NO_SCRATCH in q2c varlist options.
4545         (cmd_list) Fails if no variables specified.
4546         (determine_layout) Writes blank lines manually.
4547
4548         * loop.c: (loop_1_trns_proc) Made debugging code only print
4549         messages if debugging.
4550
4551         * q2c.c: (dump_subcommand) Appends sbc->message to SBC_VARLIST
4552         parse_variables() arguments.
4553         (main) Parses optional parenthesized options to varlist
4554         subcommands into sbc->message.
4555
4556         * sfm-read.c: Format fix.
4557
4558         * var.h: (FV_*) New enum series.
4559         (PV_*) New enum PV_NO_SCRATCH.
4560
4561         * vars-prs.c: (find_var) Removed.
4562         (fill_all_vars) Takes FV_* enum instead of boolean third
4563         argument.  Rewritten to deal with scratch as well as system
4564         variables.
4565         (parse_variables) Error message on scratch variable if
4566         PV_NO_SCRATCH set.
4567
4568         * vfm.c: (static var virt_begin_func) New var.
4569         (procedure) Sets up virt_begin_func.
4570         (SPLIT_FILE_procfunc) For the first case, calls virt_begin_func()
4571         after dump_splits().  For succeeding groups changes, calls
4572         virt_begin_func() instead of begin_func().      
4573
4574 Fri Jun  6 22:42:23 1997  Ben Pfaff  <blp@gnu.org>
4575
4576         * count.c, data-out.c, file-handle.q, list.q, loop.c: Turned off
4577         debugging.
4578
4579         * dfm.c: Added some debugging messages, disabled by default.
4580         (open_file_r) Fixed error message.
4581         (read_record) On eof on inline_file, instead of calling
4582         fh_close_handle(), simply jump to eof label like a normal file.
4583         Message fixes.
4584
4585         * display.c: Thin lines between rows for certain kinds of
4586         listing.  Fixed `null cell' bug.
4587
4588         * error.c: (failure) Flush stdout, stderr before failing.
4589
4590         * file-handle.q: (fh_close_handle) Added debugging message.
4591
4592         * frequencies.q: (dump_full) Bottom line extends across entire
4593         table width.  Changed title formatting.
4594         (dump_condensed) Changed title formatting.
4595         (dump_statistics) Fixed title formatting.
4596
4597         * glob.c: (init_glob) Moved initialization of cur_proc out of #if.
4598         Sets default value of set_format.
4599
4600         * list.q: (cmd_list) Calls blank_line() before determine_layout().
4601         Passes write_all_headers() to procedure() as pre-group func.
4602         (write_all_headers) New function.
4603         (determine_layout) Removed calls to write_header().
4604         Calls blank_line() before and after write_fallback_headers().
4605
4606         * recode.c: (recode_trns_free) Only attempts to free head->map if
4607         non-NULL.
4608
4609         * sfm-read.c: (read_variables) Allows `#' at beginning of system
4610         file variable names but gives a warning.  Sets `left' based on
4611         first character being/not being `#'.  On lossage frees dict->var.
4612
4613         * som-high.c: (som_draw_title) Simplified title formatting.
4614
4615         * vfm.c: (dump_splits) Fixed and changed splits formatting.
4616
4617 Thu Jun  5 22:51:15 1997  Ben Pfaff  <blp@gnu.org>
4618
4619         * autorecode.c: (cmd_autorecode) Sets h_trans to NULL at
4620         beginning.  Frees v_src, v_dest on successful exit.  Frees
4621         h_trans[*], h_trans on lossage.
4622         (recode) Frees h_trans[*], h_trans.
4623
4624         * dfm.c: (dfm_close) Formatting change.
4625         (open_inline_file) Now passed a dfm_fhuser_ext to initialize; no
4626         longer allocates its own in inline_file.
4627         (open_file_r) Passes the local dfm_fhuser_ext to
4628         open_inline_file().
4629         (open_file_w) Message fix. 
4630         (read_record) Buffer reallocation strategy changed.  Frees
4631         ext->line even in inline_file to prevent leaks.
4632         (dfm_put_record) Fixed bug where `ext' was cached before the file
4633         was opened and thus it would be NULL when the file really was
4634         open.
4635         (cmd_begin_data) Sets up inline_file basics itself, then calls
4636         open_inline_file() for the dfm_fhuser_ext.  Formatting fix.
4637
4638         * list.q: (write_line) Formatting fix.
4639         (clean_up) Minor strategy change.  Sets proportional font after
4640         finishing cleanup.
4641         (determine_layout) Sets fixed font before writing regular headers,
4642         or after writing fallback headers.
4643
4644         * modify-vars.c: (cmd_modify_vars) Frees variable lists for DROP
4645         and KEEP vars after using them.
4646
4647         * postscript.c: (ps_init_driver) Frees x->family.
4648         (postopen) When loading fonts, free the temporary font name buffer
4649         after using it.
4650         (ps_text_set_font_by_position) Free temporary font name buffer
4651         after using it.
4652         (text) Fixed code that calculated `lig' so that `lig' always gets
4653         initialized.  Formatting fix.
4654
4655         * som-low.c: (get_cell_size, som_get_table_size) `prop_height' ->
4656         `font_height'.
4657         [GLOBAL_DEBUGGIGN] (check_table) Use arena_alloc() to allocate
4658         cells, not xmalloc(), so that the cells will get destroyed
4659         automatically.
4660
4661         * sysfile-info.c: (cmd_sysfile_info) Frees the dictionary after
4662         using it.
4663
4664 Tue Jun  3 23:33:22 1997  Ben Pfaff  <blp@gnu.org>
4665
4666         * ascii.c: (ascii_text_draw) Always sets metrics for strings that
4667         are drawn.
4668
4669         * dfm.c: Comment fix.
4670
4671         * list.q: Comment fixes.  Include somP.h.  Removed static vars
4672         table, n_columns, n_rows, part.  New struct list_ext.  New static
4673         var line_buf.
4674         (n_lines_remaining, n_chars_width, write_line) New functions.
4675         (cmd_list, list_cases) Rewritten.
4676         (begin_row, end_row, flush_table) Removed.
4677         (write_header, clean_up, write_varname, write_fallback_headers,
4678         determine_layout) New functions.
4679
4680         * output.c: (outp_iterate_enabled_drivers) Minor reformat.
4681
4682         * output.h: Comment fix.
4683
4684         * postscript.c: Comment fix.
4685         (struct ps_driver_ext) Removed prop_size, fixed_size members;
4686         added font_size.  All references changed.
4687         (ps_init_driver) Initializes font_size.  Simplified space checking
4688         code.
4689         (static var option_tab[]) Removed prop-size, fixed-size; added
4690         font-size.
4691         (ps_option) Handles font_size.
4692
4693         * som-high.c: Moved prototypes into somP.h.
4694         (som_init_driver) New function.
4695         (som_submit_table) Moved some code into new function
4696         som_init_driver().
4697         (build_target) Moved some code into new function
4698         som_internal_eject_page().
4699         (som_eject_page) Uses som_internal_eject_page().
4700         (som_internal_eject_page) New function.
4701
4702         * som-low.c: Moved prototypes into somP.h.
4703
4704         * som.h: Formatting fixes.
4705
4706         * somP.h: (struct som_driver_ext) Removed em_width;
4707         added prop_em_width, fixed_width.
4708
4709 Mon Jun  2 14:25:25 1997  Ben Pfaff  <blp@gnu.org>
4710
4711         * Makefile.am: Added `localedir' definition.  Added
4712         -DLOCALEDIR="..." to DEFS.  Added -I. to INCLUDES.
4713
4714         * ascii.c: (macro draw_line) Fixed capitalization.
4715
4716         * ascii.c, autorecode.c, cases.c, cmdline.c, command.c, common.c,
4717         compute.c, count.c, data-in.c, data-list.c, data-out.c,
4718         descript.q, dfm.c, display.c, do-if.c, error.c, expr-evl.c,
4719         expr-opt.c, expr-prs.c, file-handle.q, file-type.c, filename.c,
4720         formats.c, frequencies.q, get.c, getline.c, glob.c, groff-font.c,
4721         hash.c, heap.c, include.c, inpt-pgm.c, lexer.c, list.q, loop.c,
4722         main.c, mis-val.c, misc.c, modify-vars.c, numeric.c, output.c,
4723         postscript.c, print.c, q2c.c, recode.c, rename-vars.c, repeat.c,
4724         sample.c, sel-if.c, sfm-read.c, sfm-write.c, sfmP.h, som-frnt.c,
4725         som-high.c, som-low.c, sort.c, split-file.c, sysfile-info.c,
4726         temporary.c, title.c, tokens.h, val-labs.c, var-labs.c,
4727         vars-atr.c, vars-prs.c, vector.c, vfm.c, weight.c: Marked strings
4728         for internationlization.
4729
4730         * glob.c: [HAVE_LOCALE_H] Includes locale.h.
4731
4732 Sun Jun  1 23:31:18 1997  Ben Pfaff  <blp@gnu.org>
4733
4734         * do-if.c, sort.c, val-labs.c: Comment fixes.
4735
4736         * glob.c: (init_glob) Uncommented, updated i18n support.
4737         
4738         * arena.c, ascii.c, data-in.c, descript.q, error.c, expr-evl.c,
4739         expr-opt.c, expr-prs.c, filename.c, frequencies.q, groff-font.c,
4740         output.c, postscript.c, sfm-read.c, som-high.c, vars-prs.c: Made
4741         the declarations of macros taking arguments a lot nicer.
4742
4743 Sun Jun  1 17:22:04 1997  Ben Pfaff  <blp@gnu.org>
4744
4745         * error.h: Removed CE, CW aliases for SE, SW.
4746
4747         * q2c.c: Removed explicit streq() definition since it's duplicated
4748         in str.h.
4749         
4750         * approx.h, error.h, font.h, hash.h, misc.h, output.h, somP.h,
4751         stats.h, str.h, tokens.h: Made the declarations of macros taking
4752         arguments a lot nicer-looking of <pinard@iro.umontreal.ca>.
4753         Comment fixes.
4754
4755 Sun Jun  1 12:02:06 1997  Ben Pfaff  <blp@gnu.org>
4756
4757         * cmdline.c: Comment fixes.
4758         (pick_compat) Changed return type to int.  Now, instead of setting
4759         glob var `compat' to the emulation, returns the emulation.  All
4760         references changed.
4761         (parse_command_line) Added terminating null to end of
4762         `long_options' array definition.
4763         (pre_syntax_message) Fixes.
4764         (usage) Shows the default emulation in the syntax message by
4765         calling pick_compat().
4766
4767         * getline.c: (getl_add_include_dir) Separates paths with
4768         PATH_DELIMITER, not DIR_SEPARATOR.
4769
4770         * glob.c: (init_glob) Fixed references to DEFAULT_VER_PCP40,
4771         DEFAULT_VER_WIN61, DEFAULT_VER_X40.
4772
4773         * output.c: (outp_configure_macro) Make earlier definitions for a
4774         particular key override later ones for the same key.
4775         
4776 Fri May 30 19:40:49 1997  Ben Pfaff  <blp@gnu.org>
4777
4778         * ascii.c: Comment fixes.
4779
4780         * output.c: (outp_get_paper_size)
4781         s/STAT_OUTPUT_INIT_FILE/STAT_OUTPUT_PAPERSIZE_FILE/.
4782         
4783 Sun May 25 22:34:07 1997  Ben Pfaff  <blp@gnu.org>
4784
4785         * ascii.c, postscript.c, sfm-read.c, sfm-write.c, sort.c: Include
4786         <errno.h>.  GNU libc 2 enforces this!
4787
4788         * command.c: (parse_cmd) Fixed problem with `else' clause being
4789         paired with wrong `if'.  Comment fix.
4790
4791 Fri May  9 16:53:52 1997  Ben Pfaff  <blp@gnu.org>
4792
4793         * getline.c: [!HAVE_LIBREADLINE] (read_console) Changed
4794         blp_getline() to getline().
4795
4796         * output.c: (outp_eval_dimension) Changed the fix from last time;
4797         there was no variable `a'.
4798
4799         * q2c.c: (get_line) Fixed boundary condition overrun bug.
4800
4801 Mon May  5 21:58:22 1997  Ben Pfaff  <blp@gnu.org>
4802
4803         * output.c: (outp_evaluate_dimension) Fixed handling of negative
4804         numbers having fractional parts.  Added case of a fraction without
4805         a whole-number part.
4806
4807 Fri May  2 22:08:05 1997  Ben Pfaff  <blp@gnu.org>
4808
4809         * ascii.c: (ascii_text_get_font_position) Removed.
4810
4811         * expr.h, exprP.h: Disabled debugging.
4812
4813         * groff-font.c, postscript.c: Changed `groff' to `Groff' in
4814         several places.
4815
4816         * output.h: (struct outp_class_struct) Removed
4817         text_get_font_position method.  All references deleted.
4818
4819         * postscript.c: Big change here.  Fontmaps were completely
4820         eliminated because of a change in philosophy.  Comment fixes.
4821         (struct ps_fontmap, ps2dit_map, font_family, dit2family_map)
4822         Removed.
4823         (struct ps_driver_ext) `position', `fontmap', `prop_name',
4824         `fixed_name' members removed.  New members `prop_family',
4825         `fixed_family'.  `family' member changed to type char *.
4826         (static var ps_fontmaps) Removed.
4827         () Removed.
4828         (ps_init_driver) Removed obsolete references, updated.
4829         Initializes `translate_x', `translate_y', `scale'.  Doesn't read
4830         fontmap, of course.  Refers to font names through internal_name
4831         rather than subversive means.  Frees proper items.
4832         (static var option_tab[]) Removed `fontmap-file' option; renamed
4833         `fixed-font', `prop-font'.
4834         (ps_option) Corresponds to option_tab[].
4835         (read_fontmap, release_fontmap, ps_to_dit, compare_ps2dit,
4836         hash_ps2dit, compare_dit2family, hash_dit2family, compare_family,
4837         hash_family) Removed.
4838         (postopen) Generates font names from family names.  Gets
4839         PostScript font name properly.  New prologue file comment `!!!'
4840         style.
4841         (ps_open_page) Adds translate_x, translate_y to BP prologue
4842         function; gives SF argument floating-point format.
4843         (ps_text_set_font_by_name) Doesn't try to map PostScript->Groff
4844         font name.  Doesn't change font family.
4845         (ps_text_set_font_by_position) Generates Groff font name from font
4846         family name instead of through table lookup.
4847         (ps_text_set_font_by_family) Renamed `ps_text_set_font_family',
4848         all references changed.  Reduced to simple string assignment.
4849         (ps_get_font_name) Removed.
4850         (ps_get_font_family) Reduced to string return.
4851         (text) Doesn't save `position' since it no longer exists.  Ugly
4852         kluge to save font family--fix soon?
4853         (load_font) Removed PostScript name argument.
4854         
4855 Thu May  1 14:58:59 1997  Ben Pfaff  <blp@gnu.org>
4856
4857         * postscript.c: Comment fix.
4858         (ps_open_page) Puts scale factor in PostScript output.
4859         
4860 Sat Apr 26 11:49:32 1997  Ben Pfaff  <blp@gnu.org>
4861
4862         * Makefile.am: Distcleans q2c.
4863
4864 Wed Apr 23 21:33:48 1997  Ben Pfaff  <blp@gnu.org>
4865
4866         * ascii.c: (delineate) Sets text size even if width is zero.
4867
4868         * command.c: Comment fix.
4869         (static var cmd_table[]) Re-enabled EVALUATE command.
4870         (parse_cmd) Lotsa comment fixes.  Fixed infinite loop in parsing
4871         of comments in script files.  Now more liberal on criteria for
4872         performing a state transition--if *anything* happened correctly,
4873         not just if *everything* happened correctly.
4874
4875         * data-out.c: (convert_F) Comment fix.  Why in the fsck does
4876         Checker segfault on formatting large numbers and why in the fsck
4877         hadn't I noticed this before?
4878
4879         * expr.h, exprP.h: No longer turn off GLOBAL_DEBUGGING.
4880
4881         * list.q: (cmd_list) Commented out the actual output routine
4882         because of various problems.  Probably will abandon the idea of
4883         using the general `crushed tables' for the LIST procedure.
4884
4885         * temporary.c: (restore_dictionary) Sets var_by_name to NULL after
4886         clearing it.  Allocates a new var_by_name dictionary before trying
4887         to add members to it.
4888
4889         * vars-atr.c: [DEBUGGING] (dump_one_var_node) Removed argument
4890         `sib'.  Changed type of `node' argument.
4891         [DEBUGGING] (dump_var_tree) Replaced avlwalk() with
4892         avl_walk_inorder().
4893         (clear_variable) Only dumps the var tree if var_by_name non-NULL.
4894         [DEBUGGING] Only deletes the variable from var_by_name if that var
4895         non-NULL.
4896
4897 Fri Apr 18 16:48:41 1997  Ben Pfaff  <blp@gnu.org>
4898
4899         * Makefile.am: Added include files to SOURCES.  Added
4900         frequencies.q to EXTRA_DIST.  Removed include/ from INCLUDES.  Now
4901         includes rules for q2c.  Added `boast' target.
4902
4903 Fri Apr 18 15:42:22 1997  Ben Pfaff  <blp@gnu.org>
4904
4905         * Makefile.am: Maintainer-clean Makefile.in.
4906         
4907         * Makefile.am: Fixed redundant EXTRA_DIST line.
4908
4909         * ascii.c: Comment fixes.
4910         (ascii_line_vert) Fixed overly aggressive range check.
4911
4912         * display.c: Removed dead code.
4913
4914         * list.q: Turn debugging on.
4915         (flush_table) New debug code.
4916
4917         * sfm-read.c: (read_value_labels) malloc's the structure before
4918         trying to assign to its members.
4919
4920         * sfm-write.c: Comment fix.
4921
4922         * som-high.c: (som_submit_table) Sets som.t and som.d on each call
4923         to output_table().
4924         (output_table) No arguments anymore--gets them through `som'
4925         global.  New debug code.  In crushed tables, now sets `htv' as
4926         well as `hv' to avoid bad confusion later.
4927         (dump_crush_page) New debug code.
4928
4929         * som-low.c: (som_dump_crush_page) New debug code.
4930
4931 Thu Mar 27 01:11:29 1997  Ben Pfaff  <blp@gnu.org>
4932
4933         All source files: Broke long lines into multiple lines.
4934         
4935         * ascii.c: (ascii_close_page) Uses host_system var in place of
4936         HOST_SYSTEM constant.
4937
4938         * cmdline.c: (var syntax_message[]) Broke into
4939         pre_syntax_message[] and post_syntax_message[].
4940         (usage) Outputs both parts, separated by driver list.
4941
4942         * error.h: Fixed broken formatting.
4943
4944         * expr-opt.c: (str_search, str_rsearch) New functions.
4945
4946         * misc.c: (blp_getdelim) Removed.  All references changed to
4947         `getdelim'.
4948         (str_search, str_rsearch) Removed.
4949         (memrmem) New function.
4950
4951         * misc.h: (blp_getline) Removed.  All reference changed to
4952         `getline'.
4953
4954         * stat.h: New file.
4955
4956         * filename.c: Includes "stat.h", not <sys/stat.h>.
4957         (blp_getenv) Uses host_system var instead of HOST_SYSTEM constant.
4958
4959         * output.c: (outp_list_classes) Changed output formatting.
4960
4961         * sfm-write.c: (write_header) Uses host_system var instead of
4962         HOST_SYSTEM constant.
4963         (write_rec_7_34) Extracts version numbers from the version string.
4964         Untested.
4965
4966         * sort.c: Includes "stat.h", not <sys/stat.h>.
4967
4968         * str.c: (strcasecmp) Removed.
4969
4970         * title.c: (cmd_document) Uses host_system var instead of
4971         HOST_SYSTEM constant.
4972
4973         * version.c: Generated on-the-fly by the Makefile instead of being
4974         static.
4975
4976         * str.h: Comment fixes.  Doesn't substitute for missing memmove or
4977         memcpy.
4978         [!HAVE_STRNCASECMP] Declares strncasecmp().
4979
4980         * version.h: Removed stray character.  Comment fixes.
4981         (vars host_system, build_system) New vars.
4982
4983 Mon Mar 24 21:47:31 1997  Ben Pfaff  <blp@gnu.org>
4984
4985         * Most source files: Changed formatting of copyright notice; fixed
4986         FSF address; reformatted to better conform to GNU standards;
4987         comment fixes.  Added markups to prevent GNU indent from messing
4988         up my beautiful formatting :-).
4989         
4990         * q2c.c: (get_line) Ignores lines that begin with `/* *INDENT' so
4991         that GNU indent markups can be passed through without problems.
4992
4993 Wed Feb 19 21:30:31 1997  Ben Pfaff  <blp@gnu.org>
4994
4995         * get.c: Turned off debugging.
4996
4997         * glob.c: (init_glob) Turned on save-file compression by default.
4998
4999         * sfm-write.c: (sfm_write_case) Fixed bug which resulted in less
5000         compression than was possible in save files.
5001
5002 Sun Feb 16 20:57:20 1997  Ben Pfaff  <blp@gnu.org>
5003
5004         * data-out.c: (convert_F) Comment fixes.  Debug message fixes.
5005
5006         * frequencies.q: Removed Fiasco extensions.  Updated calculation
5007         algorithms.  Polished output format. 
5008         (struct frq_info_struct) Removed members `max_degree', `min_n',
5009         all references removed.
5010         (macro frq_extensions) Removed.
5011         (static vars min_n, max_degree) Removed, all references removed.
5012         (internal_cmd_frequencies) Doesn't handle extensions.  Doesn't
5013         calculate `min_n', `max_degree'.
5014         (postcalc) Passes new arg to dump_statistics().
5015         (dump_full) Honor NOLABEL option.  Buggy?  Adds variable name
5016         title.
5017         (dump_condensed) Adds variable name title.
5018         (sum_freqs) Removed.
5019         (calc_stats) Updated calculation algorithm.
5020         (dump_statistics) Removed warning for too-few observations.
5021         Changed table formatting.  Adds variable name title if passed new
5022         arg is nonzero.
5023
5024         * output.h: Comment fix.
5025
5026         * recode.c, sample.c, sort.c: Disabled debug code.
5027
5028         * som-frnt.c: (som_set_value, som_set_float, som_set_text)
5029         Improved debug code.
5030
5031         * var.h: (enum series frq_*) Removed Fiasco extensions.
5032
5033 Sat Feb 15 21:26:53 1997  Ben Pfaff  <blp@gnu.org>
5034
5035         * command.c: Added PROCESS IF to command table.
5036
5037         * Lots & lots of places, removed checks for NULLs preceding calls
5038         to free_expression(), which itself checks.
5039
5040         * descript.q: Removed Fiasco extensions.  Removed optimizations
5041         for non-weighted active files.  Implemented some options.
5042         Finished polishing output format.  Comment fixes.  Merged
5043         `descript.g'.
5044         (static vars n_glob_miss_list, n_glob_valid, n_glob_missing,
5045         max_degree, min_n) Removed.
5046         (macro dsc_extensions) Removed.
5047         (struct dsc_info_struct) Removed `min_n' member, all references
5048         fixed.
5049         (internal_cmd_descriptives) Removed calculation of min_n,
5050         max_degree.  Only deals with one `calc' routine instead of two
5051         flavors.
5052         (precalc) Eliminated redundancy.  Updated for changes to
5053         descriptives_proc structure.
5054         (calc) Moved here from `descript.g'.  Rewritten to calculate
5055         statistics via `moments about the mean' rather than by summing,
5056         summing squares, summing cubes, and so on.
5057         (postcalc) Rewritten for new-style statistical calculation.
5058         (display) Removed support for displaying variables across rows.
5059         No longer crushes the descriptives table.  Removed ancient code.
5060         Added display of N, by variable and listwise.
5061
5062         * descript.g: Removed; merged into `descript.q'.
5063
5064         * expr-evl.c: (evaluate_expression) Now returns a double.  For
5065         numeric results, it returns the result as well as storing it in
5066         the passed `value' structure if non-NULL.  For string results it
5067         just returns 0.0 and it must be passed non-NULL.  Many references
5068         to this function were optimized by use of this change, especially
5069         but not exclusively in `compute.c'.
5070
5071         * frequencies.g: Comment fix.
5072
5073         * glob.c: (glob var process_if_expr) New global var.
5074
5075         * postscript.c: (static var option_tab[]) Corrected entry for
5076         `fixed_size'.
5077         (postopen) Sets x->size to x->prop_size.
5078         (ps_text_set_font_by_name) Sets font size as well as typeface for
5079         PROP and FIXED fonts.
5080         
5081         * sel-if.c: (cmd_process_if) New function.
5082
5083         * sfm-write.c: (struct sfm_fhuser_ext) New member `n_cases'.
5084         (sfm_write_dictionary) Sets `n_cases' to 0.
5085         (sfm_write_case) Increments `n_cases'.
5086         (sfm_close) Attempts to seek the system file back to the header
5087         and write the number of cases in its proper slot.
5088
5089         * som-frnt.c: (som_insert_table) Masks off expansion options since
5090         only SOPT_X_NORM seems to work sensibly.
5091
5092         * som-low.c: (get_cell_size) Fixed bug when a table cell was sized
5093         with a `fixed' value of 2.
5094
5095         * sort.c: (cmd_sort_cases) Cancels PROCESS IF.
5096
5097         * sysfile-info.c: (cmd_sysfile_info) Doesn't display more than 10
5098         value labels; uses SOPT_NONE instead of SOPT_X_BOTH.
5099
5100         * var.h: (enum series dsc_*) Removed Fiasco extensions.
5101         (struct descriptives_proc) Removed `miss_noweight'; new members
5102         `X_bar', `M2', `M3', `M4', `min', `max'.
5103
5104         * vars-atr.c: (discard_variables) Cancels PROCESS IF.
5105
5106         * vfm.c: (close_active_file) Cancels PROCESS IF.
5107         (write_case) Doesn't process cases unselected by PROCESS IF.
5108
5109 Fri Feb 14 23:32:58 1997  Ben Pfaff  <blp@gnu.org>
5110
5111         * glob.c: (glob var err) Removed.
5112
5113         * sysfile-info.c: (cmd_sysfile_info) When adjusting table size,
5114         doesn't have to take into account number of value labels since
5115         they're in a subtable anyway.  Also, doesn't display more than 10
5116         value labels since we can't yet break pages in subtables.
5117
5118 Tue Feb  4 15:15:50 1997  Ben Pfaff  <blp@gnu.org>
5119
5120         * som-frnt.c: (som_change_table_size) Simple change for elegance
5121         that shouldn't change behavior.
5122         (som_set_value) Comment fix.
5123
5124         * som-high.c: (som_submit_table) Message fix.
5125
5126 Wed Jan 22 21:54:00 1997  Ben Pfaff  <blp@gnu.org>
5127
5128         * command.c: Added SYSFILE INFO to command table.
5129
5130         * file-handle.q: (fh_handle_filename) New function.
5131
5132         * get.c: (save_trns_proc) Fixed a bug in padding of output data
5133         with spaces.
5134
5135         * main.c: (parse) New return value for command functions, -3.
5136
5137         * misc.h: Comment fix.
5138
5139         * output.h: Comment fixes.
5140         (macro COMPONENTS) Removed.
5141
5142         * postscript.c: (write_text) Modified literal_chars[] so that `('
5143         and ')' are not written to the output in strings as literals.
5144
5145         * sfm-read.c: (sfm_read_dictionary) New argument.
5146         (read_header) New argument.  Sets the information structure's
5147         values from the header information.  
5148         (read_variables) [__CHECKER__] Redefines isalnum()--some sort of
5149         bizarre Checker problem, I guess.
5150         (read_variables) Proper cleanup on lossage.
5151
5152         * sfm.h: (struct sfm_read_info) New struct for use by
5153         sfm_read_dictionary().
5154
5155         * som-frnt.c: (som_create_table) New argument CREATE_FLAGS,
5156         currently used just for tables that can be dynamically resized and
5157         thus have to be allocated with arena_malloc() instead of
5158         arena_alloc().  All references changed.
5159         (som_change_table_size) New function.
5160         (som_insert_table) Bugfix: now inserts `cell', not `c'!
5161
5162         * som-high.c: [GLOBAL_DEBUGGING] (check_table) Moved to som-low.c.
5163         (som_submit_table) [GLOBAL_DEBUGGING] Doesn't call check_table()
5164         any more.
5165
5166         * som-low.c: (draw_cell) Calls draw_table_cell() for SCON_TABLE
5167         cells.
5168         (draw_intersection) Now takes an argument specifying the table in
5169         question.  All references changed.
5170         (draw_table_cell) New function.
5171         (som_get_table_size) [GLOBAL_DEBUGGING] Calls check_table().
5172         (som_get_table_size) Many nice new explanatory comments.
5173         [GLOBAL_DEBUGGING] (check_table) Moved here from som-high.c.
5174
5175         * som.h: New enum series SOM_CREATE_* for use as create flags with
5176         som_create_table().
5177
5178         * str.h: Moved a comment here from TODO.
5179
5180         * sysfile-info.c: New file.  Reference implementation.
5181
5182 Sun Jan 19 14:22:11 1997  Ben Pfaff  <blp@gnu.org>
5183
5184         * command.c: Added RENAME VARIABLES to table of commands.
5185
5186         * data-in.c: (dls_error) Sets `cust_field'.
5187         (parse_N) Message fix.
5188         (parse_day_count) New function.
5189         (to_roman) Never outputs VX as a `short form' of V.
5190         (parse_month) Fixed parsing of Roman numerals.
5191         (parse_trailer) Message fix.
5192         (parse_DATE, parse_ADATE, parse_EDATE, parse_SDATE, parse_JDATE,
5193         parse_QYR, parse_MOYR, parse_WKYR, parse_DTIME) Issue a message if
5194         the date is invalid.
5195         (parse_SDATE) Fixed swapped day, year.
5196         (parse_JDATE) Fixed bug for dates in 1582.
5197         (parse_DTIME) Allows days not between 1 and 31.
5198         (parse_numeric) Makes local copy of f.type for easier usage.
5199         FMT_DOLLAR fixed.
5200
5201         * data-out.c: (convert_F) When outputting as scientific, properly
5202         sets f.type as fp->type.
5203         (insert_commas) Fixed operator precedence problem with setting of
5204         nitems.  Changed strcpy to memcpy (no null terminator). 
5205         (convert_date) Fixed FMT_JDATE: added 1900 to year.
5206         (convert_CCx) Essentially rewritten, but now it works.
5207
5208         * display.c: (cmd_display) Added DISPLAY FILE LABEL (undocumented
5209         feature of Fiasco).
5210         (display_documents) Implemented.
5211
5212         * error.c: (glob var cust_field) New var.
5213         (vmsg) Displays cust_field as part of message classes DE and DW.
5214
5215         * formats.c: (debug_print) Fixed to compile under updated
5216         dictionary format.
5217
5218         * get.c: (cmd_get, cmd_save_internal) Close file handle on
5219         failure.
5220
5221         * misc.c: (parse_format_specifier) Formatting fix.
5222
5223         * modify-vars.c: (struct var_modification) Renamed `n_reorder' as
5224         `n_rename' for clarity.
5225         (cmd_modify_vars) Initializes `forward' and `positional' at
5226         appropriate times.  Frees lists of vars to rename on failure.
5227         Comment fix.  Frees memory on success.  
5228         (rearrange_dict) Simplified `for' loop condition.
5229
5230         * rename-vars.c: New file (reference implementation).
5231         
5232         * set.q: (internal_cmd_set) Fixed `emu' test condition.
5233
5234         * sfm-read.c: (read_header) File label is created only if file
5235         label in file is not blank.
5236         (read_variables) Initializes `dict' local variable.
5237         (read_documents) Proper behavior on lossage.
5238
5239         * sfm-write.c: (write_header) Doesn't blank out the file label
5240         (why was this here to begin with?!)
5241
5242         * temporary.c: (save_dictionary) File label is copied only if
5243         non-NULL.  Doesn't try to xstrdup() dictionary documents.
5244         Adapted so as to not irritate Checker.
5245         (free_dictionary) Only destroys var_by_name if non-NULL.
5246
5247         * title.c: (cmd_file_label) Doesn't skip FILE, LABEL tokens.
5248         (cmd_document) Doesn't skip DOCUMENT token.  Adds some header
5249         lines to the document, indents the document.  Also, it works now.
5250         (add_document_line) New function.
5251
5252         * var.h: (struct dictionary) Reordering.
5253
5254         * vars-prs.c: (parse_variables) On lossage, only local_free()'s
5255         bits if it was allocated to begin with.
5256
5257 Thu Jan 16 13:08:57 1997  Ben Pfaff  <blp@gnu.org>
5258
5259         * command.c: Added MODIFY VARS to list of commands.
5260
5261         * configure.in: Updated custom macros for autoconf 2.12.  Removed
5262         mmap reference; fixed termcap library reference.
5263
5264         * display.c: (display_variables) Fixed a few bugs although it's
5265         still not well written.
5266
5267         * error.c: [!__CHECKER__] (chkr_disp_call_chain) New function.
5268         (induce_segfault) Calls chkr_disp_call_chain() instead of
5269         inducing an actual SIGSEGV.
5270
5271         * expr-opt.c: (evaluate_tree) Swapped order of arguments to
5272         str_search() and str_rsearch().  Fixed tests for matches on
5273         OP_INDEX and OP_RINDEX.
5274
5275         * filename.c: (good_getcwd) Removed as the new libc for Checker
5276         doesn't contain this bug, apparently.
5277
5278         * misc.c: (str_search, str_rsearch) Changed order of arguments for
5279         consistency with GNU memmem.
5280         (blp_getdelim) Changed `len' from `int' to `size_t'.
5281
5282         * modify-vars.c: Reference implementation.
5283
5284         * som-frnt.c: (zero_length) New global var.
5285         (som_create_table) Message fix.
5286
5287         * som.h: Added gcc attributions to som_set_text(),
5288         som_output_text() prototypes.  blank_line() refers to
5289         zero_length[] instead of a literal null string to suppress gcc
5290         warnings.
5291
5292         * sort.c: (do_external_sort) Fixed fencepost error on lossage.
5293         (allocate_cases) Decrements x_max so the last element of x[] can
5294         be used by the algorithm.
5295
5296         * var.h: Changed minor details of `variable' declaration.  
5297         (struct modify_vars_proc) New struct.
5298         (struct variable) Added field p.mfv.
5299
5300         * vars-atr.c: Comment fix.
5301
5302         * vars-prs.c: (fill_all_vars) More optimal implementation.
5303
5304         * vfm.c: (dump_splits) Sets the last byte of temp_buf to a null
5305         character, which it shouldn't have to do but printf() seems to
5306         read the null byte even though I supply a maximum length...
5307
5308 Fri Jan 10 20:22:08 1997  Ben Pfaff  <blp@gnu.org>
5309
5310         * command.c: Removed command alias X for QUIT.
5311         (parse_cmd) Fixed comment parsing.
5312
5313         * dfm.c: (struct dfm_fhuser_ext) Fields `len', `size' are now of
5314         type size_t.
5315         (read_record) Fixed references to len, size.
5316         (dfm_get_record) Restructured.
5317
5318         * file-handle.h: (struct file_handle) Field `lrecl' now of type
5319         size_t.
5320
5321         * file-handle.q: (internal_cmd_file_handle) Checks for nonpositive
5322         record length.
5323
5324         * modify-vars.c: New file.  Not complete.
5325         
5326         * set.q: (set_ccx) Fixed operator precedence problem regarding ^
5327         and ==.
5328
5329         * sfm-read.c: (bswap_flt64, read_header, write_variable) Fixed
5330         problems caused by int/size_t differences.
5331
5332         * sort.c: (output_record, merge_once) Cast `size_t's to `int's in
5333         appropriate spots.
5334
5335         * str.c: (strcasecmp) Fixed bug that cropped up when the strings
5336         being compared were of equal length.
5337
5338 Thu Jan  2 19:08:23 1997  Ben Pfaff  <blp@gnu.org>
5339
5340         * command.c: Added DOCUMENT, DROP DOCUMENTS, FILE LABEL.
5341
5342         * lexer.c: (get_dotted_rest_of_line) New function.
5343
5344         * sel-if.c: (cmd_filter) Cannot choose string or scratch variables
5345         as filters.
5346
5347         * sfm-read.c: (sfm_read_dictionary) Calls read_documents() to read
5348         type 6 records.  Frees the dictionary properly.
5349         (read_header) Initializes the dictionary instead of letting
5350         read_variables() do it.  Sets the dictionary file label from the
5351         system file.
5352         (read_documents) New function.
5353
5354         * sfm-write.c: (sfm_write_dictionary) Calls write_documents() to
5355         write type 6 record if appropriate.
5356         (write_header) Writes file label from dictionary.
5357         (write_documents) New function.
5358
5359         * temporary.c: (save_dictionary, restore_dictionary,
5360         free_dictionary) Properly handle new fields in dictionary struct.
5361
5362         * title.c: (get_title) Returns after failure().
5363         (cmd_file_label, cmd_document, cmd_drop_documents) New functions
5364         for new commands FILE LABEL, DOCUMENT, DROP DOCUMENTS.  Untested.
5365
5366         * var.h: (struct dictionary) New fields `label', `n_documents',
5367         `documents'.
5368
5369 Wed Jan  1 22:08:10 1997  Ben Pfaff  <blp@gnu.org>
5370
5371         * command.c: Added FILTER to list of commands.
5372
5373         * frequencies.g: [WEIGHTING] Removed test for weighting!=-1 since
5374         it's always true.
5375
5376         * get.c: (cmd_save_internal) Removed weighting code since it's now
5377         handled by sfm-write.c.  Properly commented out debug code.
5378
5379         * glob.c: (glob var weighting) Removed.
5380
5381         * sel-if.c: Comment fixes.
5382         (cmd_filter) New function.
5383
5384         * sfm-read.c: (struct sfm_fhuser_ext) New field `weight_index'.
5385         (sfm_read_dictionary) Sets weighting variable direct in the
5386         created dictionary now.  (Apparently we previously didn't support
5387         weighting on GET?)
5388         (read_header) Sets weight_index field in sfm_fhuser_ext from
5389         header read from disk.
5390
5391         * sfm-write.c: (sfm_write_dictionary) Comment fix.
5392         (write_header) Now sets the weighting in the header from the
5393         passed primary dictionary instead of from the sfm_write_info.
5394
5395         * sfm.h: (struct sfm_write_info) Removed field `weight'.
5396
5397         * som-high.c: (dump_crush_table) Fixed a couple of assertions that
5398         broke on boundary conditions.
5399
5400         * var.h: (struct dictionary) New fields `weight_var',
5401         `weight_index', and `filter_var'.
5402         (glob var weighting) Removed.  This is now part of struct
5403         dictionary.  All references changed; the less mechanical changes
5404         are described above.
5405
5406         * vars-atr.c: (find_dict_variable) New function.
5407
5408         * vfm.c: (static var filter_index) New variable.
5409         (open_active_file) Initializes filter_index from default_dict.
5410         (write_case) Calls proc_func() only if the filter variable is
5411         nonzero; this implements FILTER behavior.
5412
5413         * weight.c: (static var weight_varname) Removed.
5414         (cmd_weight) Modified default_dict instead of glob vars.
5415         (update_weighting) Changed the signature to modify a dictionary
5416         instead of glob vars.  Now returns the weighting variable.
5417         (get_weighting_variable) Removed; its function is absorbed by
5418         update_weighting().
5419         (stop_weighting) Operates on a dictionary now.
5420
5421 Wed Jan  1 17:00:59 1997  Ben Pfaff  <blp@gnu.org>
5422
5423         * sort.c: Removed debugging info from messages.
5424         (do_external_sort) Cleans up after itself by deleting the
5425         temporary directory on failure.  (On success it is deleted by the
5426         input program.)
5427         (allocate_cases) Removed debug code.  Added clean up code.
5428         (output_record) Removed debug code.
5429         (merge) Added code to close all the input files that are currently
5430         open.  This is a likely location for bugs, because I'm not sure
5431         about boundary conditions.  Removed an unnecesary heap_delete().
5432         (merge_once) Removed input file "optimization" that in fact
5433         screwed up the rest of the code.  Message and comment fixes.
5434
5435 Sun Dec 29 21:36:48 1996  Ben Pfaff  <blp@gnu.org>
5436
5437         * error.c: [__CHECKER__] (induce_segfault) Flushes output streams.
5438
5439         * heap.c: (heap_delete) New argument.
5440
5441         * sort.c: Finished implementation of external sort.
5442
5443         * vfm.c: (read_from_disk) Returns after a disk error.
5444
5445 Sun Dec 22 23:10:39 1996  Ben Pfaff  <blp@gnu.org>
5446
5447         * sort.c: (static var state) Removed.
5448         (static vars max_handles, tmp_basename, tmp_extname,
5449         huffman_queue) New variables.
5450         (do_external_sort) Moved most code to new functions.
5451         Creates huffman_queue.
5452         (allocate_file_handles, allocate_cases) New functions.
5453         (static vars run_no, run_length, file_index, case_count) New
5454         variables. 
5455         (output_record) Returns success.  Now really writes to the output
5456         file.
5457         (begin_run, end_run) New functions.
5458         (write_initial_runs) Returns success.  Initializes run_no to -1.
5459         Calls begin_run(), end_run() at appropriate times.  Outputs debug
5460         messages.
5461         (write_to_sort_cases) Calls begin_run(), end_run() at appropriate
5462         times.
5463         (merge) New function.
5464
5465         * heap.c, heap.h: New files.  Hopefully in near-final form.
5466
5467 Sat Dec 21 21:51:04 1996  Ben Pfaff  <blp@gnu.org>
5468
5469         * glob.c: Added write_active_file to global vars.
5470
5471         * sort.c: Several new miscellaneous static variables.
5472         (cmd_sort_cases) Big comment fix.
5473         (perform_case_2) Renamed `do_external_sort' and completely
5474         rewritten.
5475         (case_2_proc_func) Removed.
5476         (output_record, write_initial_runs, write_to_sort_cases,
5477         compare_record) New functions.
5478
5479         * vfm.c: [DEBUGGING] (index_to_varname) Excised bit rot.
5480
5481 Tue Dec 17 18:57:59 1996  Ben Pfaff  <blp@gnu.org>
5482
5483         * sort.c: (perform_case_2) Changed the method for allocation of
5484         lots of memory--now allocates one case at a time in hopes that
5485         more cases can be allocated with heavily fragmented memory.
5486
5487         * var.h: (write_active_file) New global var.
5488
5489         * vfm.c: (procedure, close_active_file, write_case,
5490         SPLIT_FILE_procfunc) Now allow beginfunc, procfunc, and endfunc
5491         arguments to procedure() to be NULL.  All references to
5492         procedure() that made use of dummy functions were changed to NULL
5493         functions.
5494         (open_active_file) If write_active_file is non-NULL, the output
5495         device becomes DEV_PGM (a new enum).
5496         (close_active_file) Sets write_active_file to NULL.
5497         (read_from_memory) Comment fix.
5498         (record_case) Calls write_active_file() when the output device is
5499         DEV_PGM.
5500
5501 Sun Dec 15 15:32:16 1996  Ben Pfaff  <blp@gnu.org>
5502
5503         * sort.c: New file.
5504
5505         * autorecode.c: (cmd_autorecode) Fixed parsing of options.
5506         Fixed checking for duplicate varnames.
5507         (recode) xmalloc()'s the transformation instead of arena_alloc()'ing
5508         it.
5509         (autorecode_trns_free) Destroys hash tables for each recoding
5510         specification.
5511         (autorecode_proc_func) Compares NULL to *vpp instead of vpp.
5512
5513         * command.c: Added SORT CASES to cmd_table.
5514         (null_func, null_int_func) Prototyped.
5515
5516         * descript.g: (calc_weight, calc_noweight) Computes own case
5517         number now.
5518         
5519         * frequencies.q: (dump_statistics) Fixed problem with
5520         too-few-cases warning message.
5521
5522         * get.c: (cmd_save_internal) Handles weighting properly.
5523
5524         * hash.c: (hsh_dump) Output format changed.
5525         (force_hsh_insert) Actually works now, prototype changed.
5526
5527         * list.q: (static var case_num) New variable.
5528         (cmd_list) Initializes case_num.
5529         (list_cases) Increments case_num.
5530
5531         * var.h: Added definitions for SORT CASES.  Comment fixes.
5532
5533         * vfm.c: Some definitions moved to new file vfmP.h.  Comment
5534         fixes.  `active' renamed vfm_active, `rep' renamed
5535         vfm_replacement, all references changed.
5536         (procedure) The procfunc no longer receives a case number.  All
5537         references changed.
5538         (write_case) Subtle reordering.
5539         (SPLIT_FILE_procfunc) Counts cases differently.  Slightly less
5540         redundant.
5541
5542         * weight.c: (get_weighting_variable) New function.
5543
5544         * vfmP.h: New file with definitions from vfm.c.
5545
5546 Sat Dec 14 10:35:30 1996  Ben Pfaff  <blp@gnu.org>
5547
5548         * command.c: (FILE_TYPE_okay) Commented out some tests because
5549         they're clumsy and not yet needed.
5550
5551         * var.h: Most *_trns structures moved to their respective source
5552         files.  Some were moved into a new file, do-ifP.h.  Comment fixes.
5553         (union any_trns) Changed to a typedef for trns_header.
5554         (struct input_program_pgm) Removed.
5555
5556         * vars-prs.c: (parse_variables) Only local_free()'s bits if it
5557         was allocated in the first place.
5558
5559 Fri Dec 13 21:30:53 1996  Ben Pfaff  <blp@gnu.org>
5560
5561         * autorecode.c: New file.
5562         
5563         * command.c: Added AUTORECODE to command table; re-enabled SET.
5564
5565         * data-out.c: (convert_F) Handles infinities and NaNs properly.
5566
5567         * error.c: (vmsg) Comment fixes.
5568
5569         * hash.c: Comment fix.
5570         (hashpjw_d) New function.
5571         (hashpjw) Reimplemented as call to more general function
5572         hashpjw_d().
5573         (internal_comparison_fn) Initializes pointers properly.
5574         (hsh_sort) [GLOBAL_DEBUGGING] New debugging code.
5575         (force_hsh_insert, force_hsh_find) New debugging wrapper
5576         functions.
5577
5578         * main.c: (main) Message fix.
5579
5580         * output.c: (outp_read_devices) Message fix.
5581
5582         * set.q: Comment fixes.
5583         (custom_results) Implemented Wnd/X form of subcommand.
5584         (set_routing) New function.
5585         (internal_cmd_set) Implemented ERRORS, MESSAGES.
5586
5587         * settings.h: (SET_ROUTE_*) New enum series.
5588         (set_results) Renamed set_results_file, all references changed.
5589         (set_messages) Removed.
5590         (glob vars set_errors, set_messages, set_results) New vars.
5591
5592         * title.c: (get_title) Remembers to xstrdup() the result of
5593         get_rest_of_line().
5594
5595         * var.h: (arc_item, arc_spec, autorecode_trns) New structures for
5596         use by AUTORECODE.
5597         (union any_trns) New element `arc'.
5598
5599 Fri Dec  6 23:53:47 1996  Ben Pfaff  <blp@gnu.org>
5600
5601         * command.c: (output_line) Removed references to set_screen.
5602
5603         * error.c: (static var terminating) New var.
5604         (hcf) Sets terminating to 1.
5605         (vmsg) If terminating is nonzero, does not attempt to call hcf().
5606         This prevents an infinite loop if an error occurs within hcf().
5607
5608         * expr-evl.c: (evaluate_expression) [__CHECKER__] Replaced case
5609         statement circumlocution with `case 42000' trick.
5610         (evaluate_expression) New support for OP_STR_MIS.
5611
5612         * expr-opt.c: (evaluate_expression) [__CHECKER__] Replaced case
5613         statement circumlocution with `case 42000' trick.
5614         (dump_node) Handles OP_STR_MIS.
5615
5616         * expr-prs.c: (MISSING_func, SYSMIS_func) Rewrote to handle string
5617         variables exceptions.
5618         (parse_function) Message fix.
5619         (ops[]) Added OP_STR_MIS.
5620
5621         * expr.h: Added OP_STR_MIS to OP_* enum.  Comment fixes.
5622
5623         * exprP.h: [__CHECKER__] Removed case statement circumlocution.
5624
5625         * glob.c: Removed set_scrnfile glob var.
5626         (init_glob) set_errorbreak set to 0 by default.
5627
5628         * groff-font.c: Changed included files.
5629         (groff_read_font) Initializes font_arena local var correctly.
5630         (default_font) New function.
5631
5632         * output.c: Comment fixes.
5633         (glob var disabled_devices) New variable.
5634         [GLOBAL_DEBUGGING] (static var iterating_driver_list) New
5635         variable.
5636         [GLOBAL_DEBUGGING] (reentrancy) New function.
5637         [GLOBAL_DEBUGGING] (outp_read_devices, outp_done, find_driver,
5638         outp_iterate_enabled_drivers) Calls to reentrancy().
5639         (destroy_list) New function.
5640         (outp_done) Moved code to destroy_list().
5641         (parse_options) Parses `listing', `screen', `printer' options
5642         internally.
5643         (configure_driver) Sets new `device' member of driver.
5644         (outp_iterate_enabled_drivers, outp_enable_device) New functions.
5645
5646         * output.h: Comment fixes.  New enum series OUTP_DEV_*.
5647         (struct outp_driver_struct) New member `device'.
5648
5649         * postscript.c: (find_encoding_file) Doesn't display its own error
5650         messages.
5651         (default_encoding) New function.
5652         (switch_font) Calls default_encoding() if no encoding can be
5653         found.
5654         (text) Makes up a character metric if none exists for the desired
5655         character.
5656         (load_font) Properly copies a fallback filename.  Calls
5657         default_font() for a font if none at all are known.
5658
5659         * set.q: Comment fixes.  Removed OUTPUT subcommand.
5660         (custom_listing) Calls outp_enable_device() to enable/disable
5661         listing device.
5662         (turn_screen_on) Removed.
5663         (internal_cmd_set) Calls outp_enable_device() to enable/disable
5664         screen, printer devices.
5665
5666         * settings.h: Comment fixes.
5667         (glob vars set_output, set_printer, set_screen, set_scrnfile)
5668         Removed.
5669
5670         * som-high.c: (som_submit_table, som_eject_page) Use
5671         outp_iterate_enabled_drivers() instead of iterating
5672         outp_driver_list directly.
5673
5674 Wed Dec  4 21:34:17 1996  Ben Pfaff  <blp@gnu.org>
5675
5676         * data-in.c: (parse_EDATE, parse_SDATE) New functions.
5677         (parse_string_as_format) Handles new formats.
5678         (parse_numeric) Now handles DOT and PCT formats.
5679
5680         * data-out.c: (convert_E, convert_F, insert_commas) Handle DOT
5681         format now.
5682         (convert_date) Handle EDATE and SDATE formats.
5683         (convert_CCx) Now if there's not room for the currency characters,
5684         converts it as F format if it's positive instead of giving up
5685         quickly.  Also fixed save-and-restore bug with decimal point
5686         characters.  
5687         (convert_format_to_string) Handles new formats.
5688
5689         * misc.c: (formats[]) Added new formats.
5690         (convert_fmt_ItoO) Supports new formats.
5691
5692         * sfm-read.c: (parse_format_spec) Supports new formats.  Better
5693         data checking.  New argument, all references changed.
5694
5695         * sfm-write.c: (write_format_spec) Supports new formats.
5696
5697         * var.h: New formats FMT_DOT, FMT_PCT, FMT_EDATE, FMT_SDATE.
5698         Comment fixes.
5699
5700 Sun Dec  1 17:19:00 1996  Ben Pfaff  <blp@gnu.org>
5701
5702         * cmdline.c: Comment fixes.
5703         (parse_command_line) Changed return type to void.
5704
5705         * data-in.c: (parse_string_as_format) Added FMT_CCA...FMT_CCE to
5706         switch.
5707         (parse_numeric) Handles international numbers (comma as decimal
5708         point).  Some reformatting.
5709
5710         * data-list.c: (parse_free) Default output format is now
5711         set_format instead of hard-coded F8.2.
5712         (read_from_data_list_list) Emits error message on undefined data
5713         only if set_undefined is nonzero.
5714
5715         * data-out.c: (convert_E) Changes decimal point from period to
5716         comma if appropriate.  Restructured.  Better comments.
5717         (convert_F) Changes decimal point from period to comma if
5718         appropriate.
5719         (insert_commas) Major bug with handling of negative values fixed.
5720         Also, inserts periods instead of commas if appropriate.
5721         (convert_CCx) New function.
5722         (convert_format_to_string) Added FMT_CCA...FMT_CCE to switch.
5723         (num_to_string) Changed `.' to set_decimal.
5724
5725         * dfm.c: Comment fixes.
5726         (dfm_close) Frees ext->line even in inline_file.
5727         (open_inline_file) New function.
5728         (open_file_r) When opening the inline file: now properly
5729         recognizes `BEGIN DATA.' line, and calls open_inline_file() to
5730         finish up.
5731         (read_record) Calls fh_close_handle() instead of dfm_close() to
5732         close the inline file.  Makes a copy of the line getl_buf to avoid
5733         interlock problems.
5734         (dfm_get_record) Restructured.  Now checks the return value of
5735         open_file_r().
5736         (cmd_begin_data) Moved open code into open_inline_file().  Relaxed
5737         checking for use of inline file.  No longer tries to close inline
5738         file.
5739
5740         * error.c: (glob var error_already_flagged) New var.
5741         (vmsg) Message change.  Now checks max number of errors/warnings,
5742         acts on it.
5743
5744         * file-handle.q: (fh_handle_name) Now allows closing of
5745         inline_file.
5746         (fh_init_files) Reformatted.
5747
5748         * get.c: (trim_dictionary) Checks SCOMP option instead of COMP.
5749
5750         * getline.c: (getl_include) Fixed bug that popped up when called
5751         when file queue was empty.
5752         (read_console) Resets error_count, warning_count,
5753         error_already_flagged to zero.
5754
5755         * glob.c: Many changes to update list of variables.
5756         (init_compat_dependent) Now this function is called whenever
5757         `compat' changes.  It now sets set_seed only if it hasn't
5758         previously been referenced.  It now calls
5759         lex_init_compat_dependent().
5760
5761         * include.c: (cmd_include_at) Frees temporary buffer instead of
5762         line buffer.  
5763         (cmd_include) Doesn't make copy of include file name.
5764
5765         * lexer.c: Comment fixes.
5766         (init_lex) Moved some code into new function
5767         lex_init_compat_dependent().
5768         (lex_init_compat_dependent) New function.
5769         (hex_val) Simplified.
5770         (preprocess_line) Uses set_endcmd instead of hardcoding `.'.
5771
5772         * main.c: Comment fixes.
5773         (main) Reformatted.
5774
5775         * misc.c: (formats[]) Added FMT_CCA...FMT_CCE.
5776         (check_input_specifier) Disallows FMT_CCA...FMT_CCE.
5777         (convert_fmt_ItoO) Detects FMT_CCA...FMT_CCE.
5778         (setup_randomize) Sets set_seed_used.
5779
5780         * set.q: Comment fixes.
5781         (custom_results) Conditionalizes on `compat'.
5782         (custom_log) Calls custom_journal().
5783         (set_ccx) New function.
5784         (cmd_set) Calls init_compat_dependent() when `compat' changes.
5785         Calls set_ccx() to handle CCA...CCE.  Sets set_grouping
5786         when set_decimal changes.  Range-checks values for MITERATE,
5787         MNEST.  Message fixes.
5788
5789         * settings.h: Comment fixes.
5790         (struct set_cust_currency) New struct.
5791         (set_cc[], set_grouping, set_seed_used) New global vars.
5792
5793         * var.h: (FMT_CCA...FMT_CCE) New output formats.
5794         (FCAT_OUTPUT_ONLY) New FCAT_* constant.
5795
5796 Thu Nov 28 23:14:07 1996  Ben Pfaff  <blp@gnu.org>
5797
5798         * glob.c: Revised variables to correspond to settings.h.
5799         (init_glob) Initializes variables from settings.h properly.
5800
5801         * set.q: Began long-overdue major revision to correspond to new
5802         philosophy.  Most code changed. 
5803
5804         * settings.h: Mostly changed; reorganized, reordered, large new
5805         comment.
5806
5807 Thu Nov 28 19:46:10 1996  Ben Pfaff  <blp@gnu.org>
5808
5809         * get.c: (cmd_save_internal) No longer forces compression off.
5810
5811         * sfm-read.c: (read_compressed_data) If eof is reached when
5812         reading a new instruction octet, only signal error if we're in the
5813         middle of a case.
5814
5815         * sfm-write.c: (COMPRESSION_BIAS) New #define.
5816         (struct sfm_fhuser_ext) New member `end'.
5817         (write_header) Refers to COMPRESSION_BIAS instead of magic 100.0.
5818         (ensure_buf_space) New function.
5819         (sfm_write_case) Reimplemented in order to support compression.
5820         (sfm_close) Writes out the remaining contents of the compression
5821         buffer if any.
5822
5823 Wed Nov 27 23:18:35 1996  Ben Pfaff  <blp@gnu.org>
5824
5825         * command.c: Defined SAVE and XSAVE commands in command table.
5826
5827         * common.h: second_lowest_value is of type flt64, not double.
5828
5829         * file-handle.h: Comment fix.
5830
5831         * get.c: Comment fixes.
5832         (static var `trns') New.
5833         (save_write_case_func, save_trns_proc, save_trns_free, null_func,
5834         cmd_save_internal, cmd_save, cmd_xsave) New functions.
5835         (dict_delete_run) Clears the variables and frees them now.
5836         (trim_dictionary) Sets default for compression.
5837         On KEEP subcommand, frees deleted variables as well as clearing
5838         them.  Finally got the sense of the test for deleting all
5839         variables correct.
5840         [DEBUGGING] (dump_dict_variables) Message fix.
5841
5842         * glob.c: (init_glob) set_compression set to 1 by default.
5843
5844         * list.q: Properly #includes config.h.
5845
5846         * misc.h: New macro REM_RND_UP.
5847
5848         * settings.h: Comment fix.
5849
5850         * sfm-read.c: (structs sysfile_header, sysfile_format,
5851         sysfile_variable; inline function bswap_int32) Moved to new file
5852         sfmP.h.
5853         (corrupt_msg) [__CHECKER__] No longer induces segfault.
5854         (sfm_read_dictionary) Fixed bug caused by failing to initialize
5855         var_by_index.
5856         (read_machine_flt64_info) Fixed some problems caused by confusion
5857         between flt64 and double types.
5858         (read_header) Message fix.
5859         (read_variables) Fixed set of cases in which we byte-swap sv.print
5860         and sv.write.  Fixed confusion of flt64 and double.
5861
5862         * sfm.h: (struct sfm_write_info) New.
5863
5864         * som-high.c: (som_draw_title) Properly frees `s'.
5865
5866         * temporary.c: (save_dictionary) Comment fix.
5867
5868         * var.h: Comment fixes.  New FMT_* enum, FMT_NUMBER_OF_FORMATS.
5869         (struct trns_header) Formatting fix.
5870         (struct save_trns) New.
5871
5872         * vars-atr.c: (discard_variables) Comment fix.
5873
5874         * sfm-write.c: New file, baseline release.
5875
5876         * sfmP.h: New file, baseline release.
5877
5878 Sun Nov 24 14:53:53 1996  Ben Pfaff  <blp@gnu.org>
5879
5880         * cmdline.c: (parse_command_line) `--version' output updated.
5881         (glob var syntax_message[]) Added my e-mail address.
5882
5883         * file-handle.q, lexer.c, vfm.c: Changed many instances of
5884         `illegal' to `invalid'.
5885
5886         * sfm-read.c: (struct sfm_fhuser_ext) New fields used as
5887         uncompression buffer.
5888         (sfm_close) Frees decompression buffer.
5889         (sfm_read_dictionary) Initializes decompression buffer.
5890         (buffer_input, read_compressed_data) New functions.
5891         (sfm_read_case) Restructured; now calls read_compressed_data() to
5892         handle compressed system file data.
5893
5894         * var.h: Comment fix.
5895
5896 Mon Nov 11 15:34:09 1996  Ben Pfaff  <blp@gnu.org>
5897
5898         * dfm.c: (dfm_close) Does not set h->{ext,class} because the
5899         caller handles it.
5900          
5901         * get.c: New comments.  New static var `get_file'.
5902         (cmd_get) Now fully implemented.  Calls discard_variables();
5903         initializes fv and lv for all variables; new debug code; sets
5904         up the dictionary; sets up the input program.
5905         (read_from_get, cancel_get) New functions.
5906
5907         * sfm-read.c: Comment fixes.
5908         (sfm_close) New static function.
5909         (sfm_read_dictionary) Properly sets up the class of the
5910         file_handle.  No longer cares what size the data is in records of
5911         type 7.  Also, on failure, properly cleans up the file_handle and
5912         free()s some stuff.
5913         (read_variables) No longer thinks it knows `nval' of the
5914         dictionary.  Now sets p.get.fv, etc., instead of speculatively
5915         setting fv itself.
5916         (read_value_labels) Fixed off-by-one error in indexing of
5917         var_by_index[].
5918         (sfm_read_case) New function.
5919         (sfm_r_class) New static var.
5920
5921         * var.h: (get_proc) New struct.
5922         (struct variable) New member p.get.
5923
5924 Thu Nov  7 20:52:28 1996  Ben Pfaff  <blp@gnu.org>
5925
5926         * get.c: Removed GTSV_OPT_MAP because of a misinterpretation of
5927         the manual's meaning.
5928         (rename_variables) New function.
5929         (trim_variables) Doesn't try to parse MAP any more.  Removed debug
5930         code.  Now properly reorders the dictionary on the KEEP keyword.
5931
5932         * sfm-read.c: (read_value_labels) Fixed some bugs regarding
5933         garbage collection.
5934
5935         * vars-atr.c: (clear_variable) New argument `dictionary *'.
5936         (rename_variable) New function.
5937         (free_val_lab) Reformatted.
5938
5939 Thu Nov  7 17:29:16 1996  Ben Pfaff  <blp@gnu.org>
5940
5941         * var.h: Reindented entire file.  Comment fixes.
5942         (glob vars var, var_by_name, nvar, N, nval, n_splits, splits)
5943         Removed.
5944         (glob var default_dict) New.
5945         (struct indirect_dictionary) Removed.
5946
5947         * Many other source files were changed to add `default_dict.'
5948         before all references to the dictionary of the active file.
5949         
5950         * vars-atr.c: (make_indirect_dictionary) Removed.
5951
5952         * glob.c: Reindented all variable declarations.  Updated for
5953         changed var.h.  Comment fixes.
5954
5955         * temporary.c: (restore_dictionary, save_dictionary) Simplified
5956         because now we can mainly copy dictionary structs.
5957
5958         * vars-prs.c: (is_dict_varname, parse_dict_variable,
5959         parse_variables) Takes dictionary instead of indirect_dictionary
5960         first argument.
5961         (parse_variables) Instead of calling make_indirect_dictionary,
5962         just sets DICT to &default_dict if DICT is NULL.  Of course, lots
5963         of `*dict.' references had to be changed to `dict->'.  Removed
5964         debug code.
5965
5966 Thu Nov  7 15:48:52 1996  Ben Pfaff  <blp@gnu.org>
5967
5968         * get.c: Added GTSV_OPT_* series of enums.
5969         (trim_dictionary, dict_delete_run) New functions.
5970         [DEBUGGING] (dump_dict_variables) New function.
5971         (cmd_get) Calls trim_dictionary() to get dictionary fully set-up.
5972         [DEBUGGING] Calls dump_dict_variables() to display results.
5973
5974         * glob.c: (cmp_variable) Now a public function declared in var.h.
5975
5976         * sfm-read.c: Turned off debug code.  Comment fixes.
5977         (read_machine_int32_info, read_machine_flt64_info) New functions
5978         to parse type 7 records.
5979         (sfm_read_dictionary) Properly byteswaps several fields now.
5980         Calls read_machine_*_info() to parse type 7 subtypes 3 and 4
5981         records.  [DEBUGGING] Dumps dictionary.
5982         (read_variables) Sets `index' field of variables created properly.
5983         Constructs avl tree of variables in dictionary.  [DEBUGGING] No
5984         longer dumps dictionary.
5985         (read_value_labels) Properly byteswaps fields.  [DEBUGGING] New
5986         debug code.
5987         [DEBUGGING] (dump_dictionary) No longer stubbed out.
5988
5989         * temporary.c: (restore_dictionary) Destroys `var_by_name' glob
5990         var before destroying any variables just to save a little time.
5991
5992         * var.h: (struct variable) Reordered in order to make name[] the
5993         first member; this makes pointers to `variable' pointers to the
5994         variable name, simplifying avl trees, etc.
5995         (struct indirect_dictionary) New struct.
5996
5997         * vars-atr.c: (find_variable) Rewritten for efficiency.
5998         (make_indirect_dictionary, is_dict_varname, parse_dict_variable)
5999         New functions.
6000         (is_varname) Rewritten for efficiency.
6001         (parse_variables) New argument, which is a `dictionary *'.  All
6002         references changed.  This function now reads variable names from
6003         the dictionary passed, or from the default dictionary if NULL.
6004
6005 Tue Nov  5 18:34:59 1996  Ben Pfaff  <blp@gnu.org>
6006
6007         * misc.h: Added new macro DIV_RND_UP to perform integer division,
6008         rounding up.  Changed many references to ROUND_UP to use this
6009         instead.
6010
6011         * sfm-read.c: Includes avl.h.
6012         (corrupt_msg) Induces a segfault under Checker.
6013         (macro assertive_bufread) New.  Many references to bufread() now
6014         use this instead.
6015         (sfm_read_dictionary) Split up into several functions.  Added code
6016         to read dictionary records following the the type 2 records.  Not
6017         quite complete.  New variable `var_by_index'.
6018         (read_header, read_variables) New functions extracted from
6019         sfm_read_dictionary().
6020         (read_value_labels) New function.
6021         (bufread) Checks ferror() if fread() doesn't return the expected
6022         value; if ferror() is zero it's just EOF.
6023         (dump_dictionary) Stubbed out.
6024
6025         * BTW: The source code now exceeds 50000 lines!
6026         
6027 Mon Nov  4 22:03:28 1996  Ben Pfaff  <blp@gnu.org>
6028
6029         * command.c: Added GET to cmd_table[].
6030
6031         * list.q: Removed reference to alloca headers.
6032         (cmd_list) Gave prototype.
6033
6034         * sfm-read.c: Added DEBUGGING comments.
6035         (sfm_read_dictionary) Checks bias correctly.  Sets
6036         dict->var_by_name to NULL.  Calculates long_string_count
6037         correctly.  realloc's dict->var[] array to minimum size.
6038         [DEBUGGING] Calls dump_dictionary.
6039         [DEBUGGING] (dump_dictionary) New function.
6040
6041         * temporary.c: (save_dictionary) Sets var_by_name to NULL.
6042         (restore_dictionary) If the dictionary contains a non-NULL
6043         var_by_name, uses that instead of generating one.
6044         (free_dictionary) Destroys var_by_name.
6045
6046         * var.h: (struct dictionary) Added field `var_by_name'.
6047
6048         * get.c: New file, not complete.
6049
6050 Sun Nov  3 12:24:36 1996  Ben Pfaff  <blp@gnu.org>
6051
6052         * mis-val.c: New enums MV_NOR_*.  New struct num_or_range.
6053         (parse_num_or_range) New function.
6054         (parse_numeric) Reimplemented in order to support LOW THRU <n> and
6055         <n> THRU HIGH missing values.
6056
6057         * output.h: [__GNUC__>1 && __OPTIMIZE__] (width, height) Made
6058         __attribute__((const)).
6059
6060         * q2c.c: (get_token) Merged isdigit || isalpha into isalnum.
6061
6062         * sfm-read.c: Finished reference implementation.
6063
6064         * sfm.h: Includes var.h.
6065
6066         * var.h: Comment fixes.
6067         (struct `variable') Reordered some fields.
6068
6069         * vars-atr.c: (is_num_user_missing) Added support for MISSING_*
6070         constants added previously.
6071
6072 Wed Oct 30 17:13:08 1996  Ben Pfaff  <blp@gnu.org>
6073
6074         * common.h: Comment fixes.  Added declaration of
6075         `second_lowest_value' as variable or macro.  Made `compat_type',
6076         `pgm_state_type' into anonymous enums.
6077
6078         * display.c: Comment fix.
6079
6080         * glob.c: [ENDIAN==UNKNOWN] Added definition for `endian' global
6081         var.
6082         [!defined SECOND_LOWEST_VALUE] Added definition for
6083         `second_lowest_value' global var.
6084         (compat, pgm_state global vars) Changed types to `int'.
6085         (init_glob) Initializes `second_lowest_value'.
6086
6087         * sfm-read.c: Continued work, not complete.
6088
6089         * var.h: Added new MISSING_* constants to handle LOWEST and
6090         HIGHEST.
6091
6092 Sat Oct 26 23:06:06 1996  Ben Pfaff  <blp@gnu.org>
6093
6094         * sfm-read.c: New file, not complete.
6095
6096         * cases.c: (vec_insert) Changed vector expansion algorithm.
6097         (vec_delete) Fixed bug that screwed up deletion sometimes, it was
6098         mucking up the RECODE transformation in particular.
6099         (envector) Harmless change in notation.
6100
6101         dfm is now fairly well tested again.  
6102         * dfm.c: (dfm_get_record) Only returns ext->ptr if ext is
6103         non-NULL--duh.
6104         (cmd_begin_data) if(ext->line) replaced by if(ext && ext->line).
6105
6106         * recode.c: Comment fix.
6107
6108         * sfm.h: Interface should be fairly final now, or at least for a
6109         day or so...
6110
6111         * vfm.c: [DEBUGGING] (index_to_varname) New function.
6112         (open_active_file) [DEBUGGING] Translates ccase indices into
6113         variable names now to make it easier to understand what's really
6114         going on.
6115
6116 Sat Oct 26 20:46:31 1996  Ben Pfaff  <blp@gnu.org>
6117
6118         * data-in.c: Comment fix.
6119
6120         * data-list.c: Includes dfm.h.
6121         (do_reading) Uses new function dfm_push_cust().
6122
6123         * data-out.c: (convert_time, convert_WKDAY, convert_MONTH) Added
6124         `return 1;' at end.
6125
6126         * file-handle.h: Completely changed.  Some parts split off into
6127         new file dfm.h.  Implemented in file-handle.q.
6128         (enum FH_*) Removed.
6129         (struct fh_ext_class) New struct.
6130         (struct file_handle) Retained only these fields: name, norm_fn,
6131         fn, recform, lrecl, mode.  New fields class, ext.
6132         (get_handle_by_name, get_handle_by_filename, parse_file_handle,
6133         close_handle, handle_name) Added `fh_' prefix to name, all
6134         references changed.
6135
6136         * dfm.h: New file, implemented in dfm.c.
6137         (get_record, put_record, fwd_record, bkwd_record, set_record,
6138         get_cur_col) Functions moved from file-handle.h, now prefixed with
6139         `dfm_'.
6140         (dfm_push_cust) New function.
6141
6142         * sfm.h: New file.  Incomplete.
6143
6144         * dfm.c: All functions adjusted/rewritten for new dfm/fhp
6145         interface.  Functions reordered, comments changed.  Not well
6146         tested, probably full of bugs.
6147         (struct dfm_fhuser_ext) New struct.
6148         (dfm_close) New function.
6149         (open_file_r) Pickier about finding `BEGIN DATA.' line.
6150         (open_file_w) User messages changed.
6151         (get_record) Comment fixed.
6152         (read_record) Increments ext->ln even for inline_file.  Calls
6153         dfm_close() for inline_file when `END DATA.' encountered.
6154         (dfm_get_record) Experimental restructuring.
6155         (dfm_push_cust) New function.
6156         (cmd_begin_data) Detects whether the inline file was fully read by
6157         checking whether it is still open; detects whether it was read at
6158         all by checking whether the line number is greater than zero.
6159
6160         * file-handle.q: All functions adjust/rewritten for new dfm/fhp
6161         interface.  Functions reordered, comments changed.  Not well
6162         tested, probably full of bugs.
6163         (init_file_handle) Removed initializers for obsolete fields, added
6164         new fields.
6165         (fh_close_handle) Much simpler, now mainly calls the class
6166         function.
6167         (fh_init_files) Renamed inline file internal filename.
6168
6169         * file-type.c: Includes dfm.h.
6170         (read_from_file_type) Doesn't use dfm internal state anymore.
6171
6172         * inpt-pgm.c, print.c: Include dfm.h.
6173
6174         * recode.c: (internal_cmd_recode) Casts strlen() return value to
6175         int in comparison with other int.
6176
6177         * som-high.c: (build_target) Fixed operator precedence problem in
6178         if statement (& versus ==).
6179
6180 Sat Oct 26 10:39:25 1996  Ben Pfaff  <blp@gnu.org>
6181
6182         * dfm.c: (read_record) Can now read fixed-length records; not
6183         tested.
6184         (put_record) Can now write fixed-length records; not tested.
6185
6186         * file-handle.h: FH_* defines changed to enums.  New enum series
6187         FH_RF_*, FH_MD_*.
6188         (struct file_handle) New members recform, lrecl, mode.
6189
6190         * file-handle.q: Parser changed.
6191         (internal_cmd_file_handle) Added support for new /RECFORM, /MODE,
6192         /LRECL subcommands.  These are compatible with Windows.
6193         (init_file_handle) Initializes recform, mode fields.
6194
6195         * q2c.c: (get_line) When outputting `!' comment lines, now
6196         increments the output file line number so that `#line' directives
6197         are correct.
6198         (make_identifier) New function that converts an arbitrary string
6199         into a valid C identifier.
6200         (dump_vars) Calls make_identifier() in two places in order to
6201         suppress some errors for bad identifiers.
6202         (make_match) Allows TRUE as synonym for YES and FALSE as synonym
6203         for NO.  Allows numbers to be prefixed by underscores to make them
6204         acceptable C identifiers but still to be parsed as numbers by the
6205         Fiasco lexer.
6206
6207 Thu Oct 24 20:13:42 1996  Ben Pfaff  <blp@gnu.org>
6208
6209         * command.c: Re-enabled RECODE, SAMPLE, SELECT IF.
6210         
6211         * dfm.c: Comment fixes. (get_record) Gives error if file handle
6212         was opened for writing.
6213         (open_file_w) New function.
6214         (read_record) Uses strncasecmp if available.  Improved error
6215         messages, comments.
6216         (put_record) New function.
6217
6218         * file-handle.h: Moved function comments into dfm.c and
6219         file-handle.q.  Comment fixes.  Removed declarations of
6220         tilde_expand() and normalize_filename().
6221         (struct file_handle) Changed `open' from boolean to enumerated
6222         field to allow for three states--closed, open for reading, open
6223         for writing--all references changed.
6224
6225         * file-handle.q: Includes filename.h.
6226
6227         * print.c: (CMD_* enums) Renamed PRT_* and moved into var.h; all
6228         references changed.
6229         (alloc_line) Makes allowance for line terminator characters in
6230         calculations.
6231         (print_trns_proc) Now handles OUTFILE, WRITE differences.
6232         (print_space_trns_proc) Handles OUTFILE differences.
6233
6234         * recode.c, sample.c: Comment fixes.
6235
6236         * var.h: (struct print_trns) Changed boolean field `eject' to
6237         bitmapped field `options'; all references changed.  New enums
6238         PRT_* for use with this field.
6239
6240         * exception.h, test-exception.c: Removed.
6241
6242 Thu Oct 24 17:47:14 1996  Ben Pfaff  <blp@gnu.org>
6243
6244         * ascii.c: (delineate) Turned off debug output.
6245
6246         * common.c: [Checker and Linux] (__assert_fail, __eprintf) Moved
6247         to error.c.
6248
6249         * data-in.c: (parse_string_as_format) Sets the entire string value
6250         to spaces, not just the short string part of it.  Is this correct
6251         now? 
6252
6253         * data-out.c: (convert_date) Fixed DATETIME format problems with
6254         decimal places, removed debug code.
6255
6256         * dfm.c: (open_file_r) Fixed bug where an error would occur in the
6257         middle of parsing BEGIN DATA that would cause the lexer to read
6258         from a wild pointer `prog'; now calls new function
6259         preprocess_line() in lexer.c.
6260
6261         * error.c: [__CHECKER__] (hcf) Calls induce_segfault() on improper
6262         termination.
6263         [Checker and Linux] (__assert_fail, _eprintf) Moved from common.c.
6264         Now call induce_segfault() to induce the segfault.
6265         (induce_segfault) New function.
6266
6267         * expr-opt.c: Comment fix.
6268         (parse_sysvar) New function.
6269         (parse_primary) Added system variable support--calls
6270         parse_sysvar().
6271         (global var ops) Added OP_CASENUM operator.
6272
6273         * expr.h: Comment fixes.
6274         (OP_* enum) added OP_CASENUM operator.
6275         (struct casenum_node) New struct.
6276         (union any_union_union) New member `cas' of type `casenum_node'.
6277
6278         * glob.c: (global var last_vfm_invocation) New var.
6279         (init_glob) Initializes last_vfm_invocation.
6280
6281         * lexer.c: (lookahead) Fixed reversed condition on if statement.
6282
6283         * getline.c: (get_line) Split into get_line() and preprocess_line().
6284         (preprocess_line) New function.
6285
6286         * var.h: Declares last_vfm_invocation.
6287
6288         * vfm.c: (procedure) Sets last_vfm_invocation.
6289
6290 Wed Oct 23 21:53:43 1996  Ben Pfaff  <blp@gnu.org>
6291
6292         * command.c: (parse_cmd) Fixed bad assertion related to
6293         lookahead().
6294
6295         * data-in.c: (parse_month) Implemented to parse months according
6296         to full interpretation of standard.
6297         (to_roman) New function.
6298         (parse_wk_delimiter) Bug fix (forgot to skip `WK' in string).
6299         (parse_weekday) Bug fix (forgot to skip all the day name).
6300
6301         * data-list.c: (read_from_data_list_fixed) Fixed bug that screwed
6302         up parsing of multirecord data items.  Also fixed user message.
6303
6304         * data-out.c: Comment fix.
6305         (year2, year4, convert_date, convert_time, convert_WKDAY,
6306         convert_MONTH) New functions to support time & date output.
6307         (convert_format_to_string) Calls new time & date output routines.
6308
6309         * expr-prs.c: (nary_num_func) Found a bug, but didn't fix it yet.
6310
6311         * lexer.c: (lookahead) Noted a previously unnoticed caveat in
6312         comment.
6313
6314         * main.c: [DEBUGGING] (dump_token) Updated to handle getline.h.
6315
6316         * misc.c: (global var formats) Fixed declarations of DATETIME,
6317         TIME, DTIME.
6318
6319         * postscript.c: (text) Fixed a pair of bugs in the reallocation of
6320         the output_char buffer.
6321
6322         * vars-prs.c: (parse_DATA_LIST_vars) Fixed a failure to free
6323         memory bug.  Fixed user messages.
6324
6325 Tue Oct 22 17:27:04 1996  Ben Pfaff  <blp@gnu.org>
6326
6327         * Removed #pragma argsused from lots of places.
6328         
6329         * data-in.c: Implemented zoned decimal and time-date formats.
6330         Untested.  This is a huge chunk of code--maybe 1000 lines and 50
6331         new functions.
6332
6333         * data-out.c: Implemented zoned decimal format.
6334
6335         * expr.h: Moved yrmoda() declaration here from exprP.h.
6336
6337         * misc.c: (global var formats) Minor fixes--added
6338         FCAT_SHIFT_DECIMAL to formats N and Z.
6339         (convert_fmt_ItoO) Added support for format Z.
6340
6341         * som-frnt.c: (som_set_value) Fixed bug regarding string values.
6342
6343 Mon Oct 21 20:39:59 1996  Ben Pfaff  <blp@gnu.org>
6344
6345         * command.c: (parse_cmd) [GLOBAL_DEBUGGING] Inserted call to
6346         som_check_workspace() that is activated between commands.
6347
6348         * data-list.c: (dump_fixed_table, dump_free_table) Finished these
6349         for good, I hope.
6350
6351         * list.q: (begin_row) Changed title expansion style from
6352         SOPT_X_VERT to SOPT_X_SHSP.
6353
6354         * som-frnt.c: Now includes `somP.h'.
6355         (som_push_workspace, som_pop_workspace) New functions that, taken
6356         together, form a solution to the recursive table building problem
6357         mentioned yesterday.  Surrounded every table output routine
6358         throughout the program with calls to these functions.
6359         [GLOBAL_DEBUGGING] (som_check_workspace) New function.
6360         (som_create_table) Checks that there's an active workspace.
6361         (som_destroy_all_tables, som_crush) Removed.
6362
6363         * som-high.c: (global var som_preserve_tables) Removed, all
6364         references deleted.
6365         (som_submit_table) Checks that there's an active workspace.
6366         (dump_columnated_table) Doesn't columnate tables that would have
6367         just one row per column.
6368         (dump_crush_page, som_dump_crush_page) Removed debugging code.
6369         (som_dump_crush_page) Moved row number labels from left side of
6370         tables to right side.
6371         (som_get_table_size) Added support for SOPT_X_SHSP.
6372
6373         * som.h: New cell expansion type SOPT_X_SHSP.
6374
6375         * somP.h: (global vars arena_stack, n_arena_stack, m_arena_stack)
6376         New vars.
6377         (global var curtab_arena) Moved from som-frnt.c.
6378
6379 Sun Oct 20 13:45:28 1996  Ben Pfaff  <blp@gnu.org>
6380
6381         * ascii.c: [GLOBAL_DEBUGGING] (SUPPRESS_WARNINGS) New debug option
6382         that causes bad location warnings to be suppressed.
6383         (delineate) Saves current font when calling draw_text(); fixed
6384         handling of NULLs when backing up.  Also fixed line-wrapping bug.
6385
6386         * command.c: Re-enabled `LEAVE', `NUMERIC', `PRINT', `PRINT EJECT',
6387         `PRINT FORMATS', `PRINT SPACE', `STRING', `TITLE', `WRITE'.
6388
6389         * common.c: Added code to cause assertion failure to dump core
6390         when run under Checker.
6391
6392         * data-list.c: (dump_fixed_table) Fixed some inconsistencies, but
6393         there are still bugs.
6394
6395         * glob.c: (__eprintf) Removed.
6396
6397         * list.q: Inserted som_preserve_tables kluge that prevents tables
6398         from being thrown away due to recursive table building through
6399         som_output_line being called from a transformation during the LIST
6400         procedure invocation.  This is a general problem that must be
6401         solved in a better way since it applies to all procedures in
6402         general.
6403         (begin_row) Changed title options to SOM_X_VERT from SOM_X_BOTH.
6404         (flush_table) Removed SOM_TOPT_PRESERVE from submission options.
6405
6406         * numeric.c: Fixed several errors in the form of msg() calls.
6407
6408         * print.c: Updated for use of som.
6409         (dump_table) Reimplemented.
6410         (print_trns_proc) Calls som_eject_page() instead of eject_page().
6411         Calls som_output_text() instead of outs_line().
6412
6413         * som-frnt.c: (som_destroy_all_tables) Sets som_preserve_tables to
6414         0.
6415         (som_output_text) Function moved from som-low.c.  Interface
6416         changed.
6417
6418         * som-high.c: (som_preserve_tables) New global public variable
6419         declared in som.h.
6420         (som_submit_table) Destroys the tables only if som_preserve_tables
6421         is 0.
6422         (paginate_horizontally) Bugfix: sets som.mpw even if there's only
6423         one subrow per row.  Now labels subrows if there's more than one
6424         subrow per row.
6425         (dump_crush_table) Added wishlist comment.
6426         (som_eject_page) New public function declared in som.h.
6427
6428         * som-low.c: (som_dump_crush_page) Draws row labels if there's
6429         more than one subrow per row.
6430         (som_output_text) Moved to som-frnt.c.
6431
6432         * som.h: (SOM_TOPT_PRESERVE) Removed.
6433
6434         * title.c: (get_title) Changed interface.
6435         (cmd_title) Changed `title' to `outp_title'.
6436         (cmd_subtitle) Changed `subtitle' to `outp_subtitle'.
6437
6438 Sun Oct 20 09:04:15 1996  Ben Pfaff  <blp@gnu.org>
6439
6440         * list.q: (flush_table) Conforms to new partial options in
6441         som_submission_form.
6442
6443         * som-high.c: (paginate_horizontally) Changed form of subrow
6444         number labels.
6445         (build_target) Omits spacing before table if
6446         SOM_TOPT_PARTIAL_OMIT_TOP is selected.
6447         (dump_crush_page) Changed interface.  Only trims bottom rule if
6448         SOM_TOPT_PARTIAL_OMIT_BTM is not selected.
6449         (dump_crush_table) Handles partial tables.
6450         (output_row_label) New function.
6451         (som_dump_crush_page) Emits subrow number labels.  Draws vertical
6452         rule on the right edge of narrow subrows.
6453
6454         * som.h: Changed SOM_SUB_PARTIAL_* series of submission type
6455         constants to a series of SOM_TOPT_PARTIAL_* submission options.
6456         All references updated.
6457
6458 Fri Oct 18 19:46:49 1996  Ben Pfaff  <blp@gnu.org>
6459
6460         * misc.c: Comment fix.
6461
6462         * som-high.c: (examine_table) Treats crushed tables separates for
6463         purpose of determining header size.
6464         (paginate_horizontally) Allots space for line numbers in crushed
6465         tables with lots of subrows per row.  Calculates the `maximum page
6466         width', the width of the widest horizontal page.
6467         (build_target) Removed trim argument; all references changed.
6468         Stricter assertions.  (dump_crush_page) New function.
6469         (dump_crush_table) Reimplemented.
6470
6471         * som-low.c: (som_dump_page) Uses new RULE_ROW &c. constants.
6472         (som_dump_crush_page) Reimplemented, interface changed.
6473
6474         * somP.h: Many many new helper macros for use with crushed tables.
6475         (global var som) Removed `tv', `cum_y' members; all references
6476         removed.  New members `mpw', `digit_space'.
6477
6478 Sun Sep 29 19:37:03 1996  Ben Pfaff  <blp@gnu.org>
6479
6480         * arena.c: (arena_alloc) [!DISCRETE_BLOCKS] Removed `size'
6481         variable, changed to constant 1024.
6482         (arena_ca_strdup) Changed `sizeof(a_string)' to
6483         `sizeof(c_string)'.
6484         (arena_ca_strdup) [!DISCRETE_BLOCKS] Changed bad cast from
6485         `(c_string *)' to `(char *)'; this fixed some offset problems.
6486
6487         * filename.c: (readlink_malloc) Changed initial allocation from
6488         100 bytes to 128.
6489         (good_getcwd) Changed from xmalloc() to local_alloc(); removed
6490         comment.
6491
6492         * postscript.c: (read_fontmap) Fixed leak by changing &owner to
6493         &fm->owner in several places.
6494
6495         * som-high.c: (output_table) Changed interface to rest of world.
6496         (examine_crush_table) Removed.  Crushed tables are re-broken now,
6497         in preparation for rewrite.
6498
6499         * som.h: Comment fix.
6500
6501 Sat Sep 28 21:28:07 1996  Ben Pfaff  <blp@gnu.org>
6502
6503         * ascii.c: (ascii_init_driver) Disposes of x->file.filename and x
6504         itself in the cleanup stage.
6505
6506         * descript.q: (display) At least temporarily, changed the table
6507         format to a crushed table.
6508
6509         * list.q: (begin_row) At least temporarily, added horizontal lines
6510         between cases.
6511
6512         * som-high.c: (examine_crush_table) Sets som.hh to the width of
6513         the horizontal "headers," that is, to the width of the far left
6514         and far right rules.
6515         (justify_pagination) Sets som.th to the width of the widest row
6516         in the crushed table.  Fixed inner loop off-by-one error.
6517
6518         * som-low.c: (som_dump_crush_page) Added code to draw horizontal
6519         rules.
6520
6521         * somP.h: Comment fix.
6522
6523 Fri Sep 27 20:08:39 1996  Ben Pfaff  <blp@gnu.org>
6524
6525         * filename.c: (open_file_ext) Now, doesn't set f->file to NULL
6526         before closing it; also, opens the constructed filename `s'
6527         instead of f->filename.
6528
6529         * postscript.c: Moved initialization of x->loaded, x->prop,
6530         x->fixed, x->current, also the add_encoding() calls, into
6531         postopen().
6532         (preclose) Destroys x->combos; sets x->loaded, x->combos to NULL;
6533         sets x->last_font to NULL; sets x->next_combo to zero.
6534
6535         * som-high.c: (crushed_row_height) Moved definition farther up.
6536         (som_submit_table) Doesn't calculate line width, font size until
6537         after calling open_page(), to accomodate changes to PostScript
6538         driver.
6539         (vert_headers) Removed; equivalent functionality moved to
6540         examine_table(), examine_crush_table().
6541         (justify_pagination) Replaced with different algorithm.
6542         (dump_crush_table) Bugfix that caused tables to fail to be clipped
6543         at the bottom of the page.
6544
6545 Thu Sep 26 22:20:26 1996  Ben Pfaff  <blp@gnu.org>
6546
6547         * command.c: Added cmd_list back into cmd_table.
6548
6549         * freq.c, frequencies.q, repeat.c, list.q, vars-atr.c, vfm.c:
6550         Comment fix: `#define DEBUGGING' --> `#define DEBUGGING 1'.
6551
6552         * list.q: (flush_table) Updated to new som_submission_form format.
6553
6554         * som-frnt.c: Comment fix.
6555
6556         * som-high.c: Changed `#endif' to `#undef EXTERN'.
6557         (output_table) Calls som_get_table_size() directly; handles
6558         crushed tables.
6559         (examine_crush_table) New function; calls vert_headers().
6560         (examine_table) Moved some code into new function, vert_headers().
6561         (justify_pagination) New function.
6562         (dump_plain_table) Removed `static' from `cy'.
6563         (dump_crush_table) New function.
6564
6565         * som-low.c: (som_dump_crush_page) New function.
6566
6567         * som.h: Comment fixes.
6568         (enum SOM_TOPT_CRUSH) New.
6569         (SOM_SUB_PARTIAL_BEG, SOM_SUB_PARTIAL_MID, SOM_SUB_PARTIAL_END)
6570         Temporarily set to zero to make do with LIST procedure.
6571
6572         * somP.h: Re-ordering.
6573
6574 Wed Sep 25 19:36:11 1996  Ben Pfaff  <blp@gnu.org>
6575
6576         * som.c: Split into som-frnt.c, som-high.c, som-low.c.
6577
6578         * somP.h: New file for use by som-high.c, som-low.c.
6579
6580         * q2c.c: Added definition for VME.
6581         (get_line) Now dumps `!' comment lines to the output file
6582         verbatim.
6583
6584         * crosstabs.q, descript.q, file-handle.q, frequencies.q, list.q,
6585         set.q: Changed format of `!' comment lines.
6586
6587 Tue Sep 24 18:39:09 1996  Ben Pfaff  <blp@gnu.org>
6588
6589         * All source files: Added copyright notice.
6590
6591         * common.c: (xmalloc, xrealloc, xstrdup) Cast size_t's to unsigned
6592         longs in msg() calls.
6593
6594         * con32s.c: (xmalloc, xrealloc) Updated from common.c.
6595
6596         * q2c.c: (xmalloc, xrealloc, xstrdup) Updated from common.c.
6597
6598 Sat Sep 21 23:16:31 1996  Ben Pfaff  <blp@gnu.org>
6599
6600         * output.c: (outp_read_devices) Changed criteria for
6601         distinguishing different types of lines.
6602
6603 Fri Sep 20 22:52:28 1996  Ben Pfaff  <blp@gnu.org>
6604
6605         * cmdline.c: Changed syntax message.
6606
6607         * filename.c: (good_getcwd) Bug fix (?).
6608         (normalize_filename) [__BORLANDC__] Uses _fullpath() library
6609         function.
6610         (search_path) Appends DIR_SEPARATOR to directory name only if it
6611         does not already end with one.
6612
6613         * glob.c: Checks STAT_PAGER envvar before PAGER.
6614
6615         * output.c: Checks environment variables instead of just local
6616         macros.
6617
6618 Tue Sep 10 21:39:00 1996  Ben Pfaff  <blp@gnu.org>
6619
6620         * arena.c: (arena_destroy) Swatted a subtle bug that cropped up
6621         when the pointer passed to the function was within the arena
6622         itself, so that it couldn't properly be set to NULL _after the
6623         arena was freed_.
6624
6625         * command.c: Re-enabled DISPLAY.
6626
6627         * display.c: Rewritten to handle tables.  Untested.
6628
6629         * filename.c: (search_path) Fixed memory leak.
6630
6631         * frequencies.q: (cmd_frequencies) Frees v_variables.
6632         (postcalc) Calls cleanup_freq_tab() after displaying statistics.
6633         (cleanup_freq_tab) New function to garbage collect.
6634         (dump_full) Elegantized.
6635
6636         * main.c: New comment.
6637
6638         * output.h: New tag for tagged quotes: TAG_NEWLINE.
6639
6640         * postscript.c: Comment fix.
6641         (release_fontmap, free_font_entry) New functions.
6642         (ps_init_driver) Sets free_font_entry() as the freefunc for
6643         hashtable `loaded'.  Calls release_fontmap() when destroying a
6644         driver; also frees the output filename; also frees the
6645         ps_driver_ext block.
6646         (free_ps_encoding) Frees the filename as well as the encoding
6647         block.
6648         (output_encodings) Frees the line buffer and pops the msg-filename
6649         stack.
6650         (read_fontmap) Frees the fontmap filename and the line buffer.
6651         (postopen, preclose) Misc. garbage collection fixes.
6652         (ps_open_page) Destroys the `combos' hash table; sets `last_font'
6653         to NULL; this fixes some output problems.
6654         (text) Handles TAG_NEWLINE.  Untested.
6655
6656         * som.c: (cell_byte_size) Merged SCON_VALUE and SCON_TEXT cases.
6657         (som_set_string) Removed.  All references changed to
6658         `som_set_text'.
6659         (som_set_text) Rewritten.  New interface.  More general.
6660
6661         * som.h: Minor format changes.
6662         (struct som_value_cell) Removed; all references changed to
6663         `som_text_cell'.
6664         (enums SOT_*) Changed.
6665
6666 Mon Sep  9 21:43:13 1996  Ben Pfaff  <blp@gnu.org>
6667
6668         * command.c: Re-enabled SPLIT FILE.
6669
6670         * postscript.c: Comment fix.
6671
6672         * som.h: Added `SOT_NONE'.
6673
6674         * split-file.h: (cmd_split_file) Removed superfluous parenthesis.
6675
6676         * vfm.c: (dump_splits) Reimplemented.
6677
6678 Sat Sep  7 22:35:12 1996  Ben Pfaff  <blp@gnu.org>
6679
6680         * Compiled the project under gcc 2.7.2, which gave some new
6681         warnings.  This led to many additions of casts from unsigned to
6682         int sprinkled throughout the code.
6683         
6684         * arena.c: Many uses of `unsigned' changed to `size_t'.
6685
6686         * command.c: Added END FILE, END REPEAT to command table.
6687         (var cmd_end_repeat) Renamed cmd_end_repeat_p.
6688         (find_command, FILE_TYPE_okay) Not commented out anymore.
6689         (parse_cmd) Calls FILE_TYPE_okay again.
6690         (output_line) Added calls to som_output_text() to put the line
6691         in the output files.
6692
6693         * common.c: (macro VME) Format changes.
6694         (xstrdup) Asserts that its argument is not NULL.
6695         
6696         * data-list.c: Implemented dump_fixed_table().
6697         
6698         * inpt-pgm.c: Formatting changes.  Comment changes.
6699         (end_case_proc) Renamed end_case_trns_proc.
6700         (cmd_end_file, end_file_trns_proc) New functions.
6701
6702         * misc.c: Many uses of `int' and `unsigned' changed to `size_t'.
6703
6704         * misc.h: (local_strdup) New macro corresponding to strdup() but
6705         allocating its data through local_alloc() if possible--that is, if
6706         GNU C is in use.
6707
6708         * postscript.c: Comment changes.
6709         (quote_ps_name, quote_ps_string, output_encodings) New functions.
6710         (output_line, add_string) New macros supporting
6711         output_encodings().
6712         (postopen) Fixed contents of ${fixed-font} and ${prop-font}
6713         substitution vars.  Calls output_encodings() when a line
6714         consisting of `!encodings' is encountered.
6715         (preclose) Some code moved into quote_ps_string().
6716         (dump_line) Changed into macro supporting dump_fancy_line().
6717         (switch_font) Now outputs DSC "%%IncludeResource: font (...)"
6718         command when appropriate.
6719         (write_text) Fixed `literal_char' array (I think it's fixed, at
6720         least.)
6721         (text) Fixed bug when width was zero.  Now exits immediately on
6722         zero height_left.  Now, when executing `goto restart;', checks
6723         that cp<end, so that we don't read beyond end-of-string.  Also,
6724         outputs the correct code to the output file by outputting the code
6725         from the metric instead of the internal metric index.
6726
6727         * repeat.c: (cmd_end_repeat) New function.
6728
6729         * som.c: (var som) `headers' renamed `options' and semantics
6730         changed.  All references changed.
6731         (draw_title) `if(px!=-1 || px!=-1)' --> `if(px!=-1 || py!=-1)'.
6732         (build_target) Only inserts spacing if SOM_TOPT_SPACING not
6733         selected.
6734         (som_text_table) Removed.
6735         (som_output_text) New function.
6736
6737         * som.h: (struct som_submission_form) Removed `header', `reuse',
6738         replaced with bitmapped field `options'.
6739         (SOM_TOPT_*) New enum set for som_submission_form.options.
6740         (SOT_*) New enum set for som_output_text().
6741
6742         * temporary.c: (copy_variable) When copying the var label, only
6743         calls xstrdup() if it's non-NULL.
6744
6745         * var.h: (enum type `vartype') Removed; all references changed to
6746         `int'.
6747
6748         * vars-atr.c: (init_variable) Changed local var `nbytes' from
6749         `int' to `size_t'.
6750
6751 Thu Sep  5 22:05:56 1996  Ben Pfaff  <blp@gnu.org>
6752
6753         * font.h: Comment changes.
6754
6755         * groff-font.c: (groff_read_font) Initializes `name' field to
6756         NULL.  Handles `encoding' field.
6757
6758         * hash.c: (hsh_dump) [GLOBAL_DEBUGGING] Output formatting changes.
6759
6760         * postscript.c: (struct font_entry) Removed `position' field.
6761         (struct ps_font_combo) New struct.
6762         (struct ps_driver_ext) Removed field `next_position'.  New fields
6763         `combos', `next_combo'.  `last_font' field changed from
6764         `font_entry *' to `ps_font_combo *'.
6765         (ps_init_driver) Reformatted; handles new fields.  When
6766         OPO_AUTO_ENCODE is set, adds the two default fonts' encodings to
6767         the encoding list.
6768         (get_encoding, find_encoding_file) New functions.
6769         (add_encoding) Some code moved out into find_encoding_file().
6770         (postopen) Changed value for ${title}.
6771         (preclose) Sets `loaded' field to NULL after destroying the hash
6772         table.
6773         (ps_open_page) Added comment.  Inits the `combos' and `next_combo'
6774         fields.
6775         (ps_text_set_font_by_position) Figures out the current family if
6776         not known.
6777         (compare_ps_combo, hash_ps_combo, free_ps_combo) New functions.
6778         (switch_font) Implemented.
6779         (write_text) Calls switch_font() more often.  Format changes.
6780         #undefs its macros after they're no longer useful.
6781         (text) Changed `continue' at one point to a jump to the top of the
6782         loop because we don't want `separate' reset to 0 at that point.
6783         (load_font) No longer sets `position' in the font_entry created.
6784
6785 Wed Sep  4 21:45:35 1996  Ben Pfaff  <blp@gnu.org>
6786
6787         * font.h: (struct font_desc) New member `encoding', which is not
6788         properly handled yet.
6789
6790         * glob.c: (init_glob) Some new i18n code, which is probably
6791         screwed up.
6792
6793         * output.c: (outp_read_devices, outp_get_paper_size) Changed
6794         `size' local from `int' to `size_t'.
6795
6796         * postscript.c: New driver configuration parameter `auto-encode'.
6797         New enums OPO_AUTO_ENCODE, ODA_COUNT.
6798         (struct font_entry) New member `position'.
6799         (struct ps_driver_ext) Reordered.  New hash table member
6800         `encodings'; new members `next_position', `next_encoding',
6801         `last_font'.  Members `current', `prop', `fixed' changed from type
6802         `font_desc *' to `font_entry *'; all references changed.
6803         (struct ps_encoding) New struct.
6804         (read_ps_encodings, compare_ps_encoding, hash_ps_encoding,
6805         free_ps_encoding, add_encoding) New functions.
6806         (ps_init_driver) Added OPO_AUTO_ENCODE to default
6807         x->output_options.  Initializes new members of ps_driver_ext.
6808         Changed default value for prologue_fn, encoding_fn.  Calls
6809         read_ps_encodings after loading default fonts.
6810         (option_tab[], ps_option) Handle new configuration parameter.
6811         (switch_font) New function.
6812         (struct output_char) `font' member changed from `font_desc *' to
6813         `font_entry *'.  New member `separate'.
6814         (read_fontmap) Changed `size' from `int' to `size_t'.
6815         (output_line, put_number) New macros for write_text().
6816         (write_text) Optimizes text output by consolidating multiple
6817         calls to PostScript `show' operator.
6818         (text) Keeps track of when text arguments can't be consolidated by
6819         write_text(), and marks those spots in the output stream.
6820         (load_font) Sets `position' of the allocated font_entry to -1, cuz
6821         the font hasn't been switched to by switch_font(), which is where
6822         the position is important--the PostScript is what cares about the
6823         position.
6824
6825 Sat Aug 31 23:52:38 1996  Ben Pfaff  <blp@gnu.org>
6826
6827         * hash.c: (hsh_destroy) Ignores NULL argument.  Doesn't try to
6828         call a NULL free_func.
6829         (hsh_rehash) Elegantized.
6830         (hsh_probe) Fix bug that manifested when the table was expanded
6831         and thus had to change location in memory.  Good thing
6832         too--otherwise could have been much more subtle.
6833         (hsh_find) [GLOBAL_DEBUGGING] Not stubbed out anymore.
6834         (hsh_foreach) New function for hash table iteration.
6835
6836         * hash.h: (struct hsh_iterator) New.
6837
6838         * lexer.c: (parse_tagged_quote) Font and family name strings in
6839         tags are now null-terminated.
6840
6841         * output.c: (outp_evaluate_dimension) Fixed over-aggressive unit
6842         parsing.
6843         (internal_get_paper_size, outp_get_paper_size) Fixed; now work as
6844         documented.  (Never before tested?)
6845
6846         * output.h: Comment changes.
6847
6848         * postscript.c: New driver options `optimize-text-size',
6849         `optimize-line-size', `max-fonts-simult'.  New enum set for
6850         specing cached line types.  Comment fixes.
6851         (struct line_form) New struct.
6852         (struct ps_driver_struct) New members `text_opt', `line_opt',
6853         `max_fonts', `lines'.
6854         (ps_init_driver) Initializes new members of ps_driver_struct.
6855         (user option type enum set) New member `nonneg_int_arg'.
6856         (static var option_tab[]) Supports new options.
6857         (ps_option) Handles new options.
6858         (find_ps_file) Made static.  No longer calls hsh_dump().
6859         (ps_get_var) Made static.
6860         (preclose) Dumps out proper DSC trailer.
6861         (ps_open_page) Elegantized.
6862         (ps_close_page) Calls dump_lines() if appropriate.
6863         (ps_line_horz, ps_line_vert, ps_line_intersection) Reduced to
6864         wrappers around line().
6865         (int_2_compare, compare_line, dump_line, dump_fancy_line,
6866         dump_lines, hash_line, free_line, line) New functions for support
6867         of line caching.
6868         (write_text, text) Made static.
6869         (text) Added to font support, not finished.
6870
6871 Thu Aug 29 21:36:41 1996  Ben Pfaff  <blp@gnu.org>
6872
6873         * font.h: (struct font_desc) New members ascent, descent.
6874
6875         * groff-font.c: (groff_read_font) Calculates font ascent and
6876         descent from the ascent and descent of the `d' and `p' characters,
6877         respectively, as per a suggestion on comp.fonts.
6878
6879         * postscript.c: (ps_open_page, ps_close_page, ps_line_horz,
6880         ps_line_vert, ps_line_intersection) Rewritten to deal with changed
6881         prologue.
6882         (write_text) Handles text right-justification and centering (not
6883         full justification).  Still very inefficient.  (One output line
6884         per character?!)
6885         (struct output_char) Added fields for font and font size.
6886         (text) Many bugfixes.
6887
6888 Sat Aug 24 23:26:00 1996  Ben Pfaff  <blp@gnu.org>
6889
6890         * cmdline.c: (usage) Calls outp_list_classes().
6891
6892         * font.h: Comment fix.
6893
6894         * groff-font.c: New exported global var `space_index'.
6895         (groff_init) New function to initialize `space_index'.
6896         (hash_kern) Casts result to unsigned.
6897         (font_name_to_index) Renamed font_char_name_to_index.  All
6898         references changed.  Also, now returns the value of `space_index'
6899         when passed an ASCII space character as an argument.  Fixed
6900         handling of nulls.
6901         (font_get_kern_adjust) Changed i from `int' to `unsigned'.
6902         Handles passed NULL pointers properly.
6903
6904         * lexer.c: (parse_tagged_quote) Comment fix.  Better range
6905         checking.
6906
6907         * output.c: (outp_list_drivers) Removed.  Removed all references.
6908         
6909         * output.h: Comment fixes.
6910
6911         * postscript.c: (ps_open_global) Calls groff_init().
6912         (output_char) New structure.
6913         (write_text) New function.
6914         (text) No longer stubbed out!  Now the output is correct--with a
6915         few exceptions, one of them being that the page has to be held
6916         upside down into a mirror.
6917
6918 Sun Aug 11 21:31:22 1996  Ben Pfaff  <blp@gnu.org>
6919
6920         * font.h: Comment fix.
6921         
6922         * font.c: (name_to_index) Renamed font_name_to_index, made extern.
6923         All callers changed.
6924         (number_to_index) Renamed font_number_to_index, made extern.  All
6925         callers changed.
6926         (font_get_kern_adjust, font_get_char_metrics) New functions.
6927
6928         * output.h: New constant OUTP_T_INTERNAL_DRAW.
6929
6930         * postscript.c: Changed default line width back to 1/2 point.
6931         (ps_line_horz, ps_line_vert, ps_line_intersection) Now lines are
6932         in the center of the space allotted for them, not just a fixed
6933         offset from the edge of the space; this fixes some bugs.
6934         (ps_line_intersection) Now supports all command line styles.
6935         (ps_text_get_size) Bug fix in computation of em width.
6936         (text) New function, the meat behind ps_text_metrics and
6937         ps_text_draw.  Not complete.
6938         (ps_text_metrics, ps_text_draw) Removed the stub taken from
6939         ascii.c; call text().
6940
6941 Sat Aug 10 23:28:17 1996  Ben Pfaff  <blp@gnu.org>
6942
6943         * arena.c: (arena_free) Assert that the argument is non-NULL.
6944         
6945         * groff-font.c: (add_kern) Calls arena_free() for old_kern if and
6946         only if old_kern is non-NULL.
6947
6948         * postscript.c: (ps_init_driver) Changed default line width to 1
6949         point.
6950         (postopen) New prologue variables.
6951         (ps_line_horz, ps_line_vert, ps_line_intersection) Implements some
6952         more of the common line styles properly, but not all.
6953         (ps_text_metrics) Fixed problem with this stubbed out version that
6954         kept it from taking font sizes into account.
6955
6956 Thu Aug  8 22:31:11 1996  Ben Pfaff  <blp@gnu.org>
6957
6958         * arena.c: (arena_malloc) Bug fix.
6959         (arena_dump) [GLOBAL_DEBUGGING] New function.
6960
6961         * ascii.c: Comment fix.
6962         (count_fancy_chars, delineate) Now static functions.
6963         
6964         * filename.c: (interp_vars) Bug fixes.
6965
6966         * font.h: Comment fixes.
6967
6968         * glob.c: (init_glob) Sets set_viewwidth, set_viewlength at
6969         beginning in case we have an error message to display before
6970         initializing the display.
6971
6972         * groff-font.c: Comment fix.  Changed rehash threshold from 2/3
6973         full to 1/2 full.
6974         (groff_read_font) Bug fixes.
6975         (name_to_index) Increments hash.used.  Sets `name' field of hash
6976         entry properly.
6977         (add_kern) Sets kern_max_used after rehashing.  Other bug fixes.
6978
6979         * hash.c: Return type changed.
6980
6981         * postscript.c: Continued development.  Now marks lines on the
6982         paper, but very buggy.
6983
6984 Sat Aug  3 20:50:35 1996  Ben Pfaff  <blp@gnu.org>
6985
6986         * Changed comments in many source files from `/* xxx /* yyy */' to
6987         `/* xxx */ /* yyy */' for cleanliness.
6988
6989         * arena.c: (arena_sd_strdup) New function.
6990         
6991         * ascii.c: (struct ascii_driver_ext) New member `file'.
6992         (ascii_init_driver) Fills out member `file' for initing; uses
6993         close_file_ext for closing drivers.
6994         (ascii_option) Changed %.*s back to %s because the a_string's are
6995         always null-terminated.
6996         (postopen, preclose) New functions.
6997         (ascii_open_page) Uses new style of open_file_ext.
6998         (ascii_option, commit_line_buf, output_lines) Use ext->file.file
6999         instead of this->output.
7000         (__assert_fail) Removed.
7001
7002         * cmdline.c: Changed syntax_message[].
7003
7004         * error.c: #include's <readline/history.h> only if the history
7005         library is available, not if just the readline library is
7006         available.
7007
7008         * filename.c: (expand_line) Removed alloca() support.
7009         (interp_vars) No longer tilde-expands argument.  Limit on output
7010         length removed.
7011         (tilde_expand) Now treats argument as path rather than filename.
7012         [!unix] Now is a no-op function.
7013         (search_path) Better verbose message formatting.
7014         (open_file, close_file) Comment fixes.
7015         (close_file) [!unix] Doesn't bother with pipes.
7016         (open_file_ext) Completely rewritten, interface revamped.
7017         (close_file_ext) New function.
7018
7019         * font.h: Comment changes.
7020
7021         * frequencies.q: Removed AIX alloca support since it doesn't use
7022         alloca.
7023
7024         * hash.c: Comment changes & additions.
7025         (hsh_create) Initializes entire table instead of first M entries.
7026         (hsh_probe) Stupid bug fixed.  Now it works.
7027         (hsh_dump) [GLOBAL_DEBUGGING] New function.
7028
7029         * main.c: (parse) Detects EOF properly in token-eating loop.
7030         Should the STOP token have its value changed to 0?
7031
7032         * misc.c: (blp_getdelim) [HAVE_GETDELIM] Now it's a macro.
7033         (blp_getline) Now it's a macro.
7034
7035         * output.h: (struct outp_driver) Removed members output, filename.
7036         
7037         * output.c: (outp_init) [!NO_POSTSCRIPT] Installs PostScript
7038         drivers in driver table.
7039         (outp_read_devices) Frees buf.  Warns if there are no active
7040         output drivers.
7041         (outp_configure_clear) Sets outp_configure_vec to NULL after
7042         deleting its elements.
7043         (configure_driver, destroy_driver) Removed references to output,
7044         filename members of outp_driver.
7045         (outp_evaluate_dimension, internal_get_paper_size,
7046         outp_get_paper_size) New functions.
7047
7048         * postscript.c: Continued development.  Now links but doesn't make
7049         any marks on the page.  Lotsa bugs I suppose.
7050
7051         * str.c: (strcasecmp) [!HAVE_STRCASECMP] New function.
7052
7053         * str.h: Comment changes.
7054
7055 Sat Jul 27 22:32:38 1996  Ben Pfaff  <blp@gnu.org>
7056
7057         * Removed dependencies on non-nested comments in several files.
7058         Also removed references to (unix || __unix__) in #if's since
7059         prefh.orig makes those two equivalent.
7060         
7061         * ascii.c: (ascii_open_global) Creates ascii_arena.
7062         (ascii_close_global) Destroys ascii_arena.
7063         (ascii_init_driver) Doesn't create ascii_arena.
7064         (ascii_copy_driver) Removed.
7065         (ascii_option) Possible bugfix regarding %s vs. %.*s with a_string's.
7066         (outp_class ascii_class) Removed ascii_copy_driver reference.
7067
7068         * frequencies.q: Now can display all statistics except median.
7069         Still not finished.
7070
7071         * output.c: Handles outp_class.ref_count so output class
7072         destructors are called properly.
7073         (add_class) Sets ref_count to 0.
7074         (configure_driver) Initializes class if ref_count++ is 0.
7075         (destroy_driver) Destructs class if --ref_count is 0.  Frees the
7076         class output file name.
7077         
7078         * output.h: (struct outp_class) Removed copy_driver, inited.
7079         Added ref_count.
7080
7081         * postscript.c: Completely replaced but not finished.
7082         
7083 Tue Jul 23 21:48:36 1996  Ben Pfaff  <blp@gnu.org>
7084
7085         * approx.h: #includes <float.h>.
7086
7087         * arena.h, arena.c: Many functions changed to take an arena **
7088         instead of an arena *, for consistency.  All callers changed.
7089         (arena_alloc) Now creates a new arena if passed *A that is NULL.
7090         (arena_destroy) Sets *A to NULL.
7091         
7092         * ascii.c: (delineate) Implements OUTP_T_VERT correctly.  Removed
7093         assertion that `width' be positive.
7094
7095         * command.c: Removed #if's from cmd_table.
7096         (walk_cmdtable_func) [0] New function (debug code).
7097         (init_cmd_parser) [0] Dumps out cmd_table (debug code).
7098         (parse_cmd) Doesn't return failure for unimplemented commands.
7099
7100         * common.h: (SYSMIS) Changed from DBL_MAX to -DBL_MAX.
7101         (SYSCODE) New constant macro.
7102
7103         * descript.q: Checks for positive n_variables before performing
7104         analysis.
7105
7106         * file-handle.q: (get_handle_by_filename) Bug fix: passes &f to
7107         avl_find instead of &fp as arg 2.
7108
7109         * frequencies.g, frequencies.q: Continued updating; now compiles &
7110         works again, but not complete.
7111
7112         * main.c: Changes to user messages.
7113
7114         * misc.c: (reverse) [0] New function.
7115
7116         * settings.h: Comment removed.  #includes "common.h".
7117
7118         * som.c: (som_set_null) New function.
7119         (som_set_value, som_set_string, som_set_text) More detailing
7120         assertions.
7121         (som_set_float) Implemented function.
7122         (dump_columnated_table) Bug fix regarding page breaks.
7123         (draw_cell) Bug fix regarding text that spilled out of a cell.
7124         (draw_intersection, draw_horz_rule, draw_vert_rule) No longer draw
7125         null lines.
7126         (get_cell_size) Support SCON_EMPTY cells.
7127         (get_table_size) When calculating rules' widths and heights, mask
7128         out SLIN_SPACING bit.  Added SOPT_X_HLTL support.
7129         
7130         * som.h: (som_any_cell) New option SOPT_X_HTLT.  Removed
7131         SOPT_X_SHADE.
7132         (struct som_submission_form) New member `header'; all users
7133         changed.
7134
7135         * val-labs.c: (get_label) User messages changed.
7136
7137         * var.h: Changed FREQUENCIES structures.
7138
7139         * vars-atr.c: (is_num_user_missing, is_str_user_missing) Made
7140         inline.
7141         
7142 Fri Jul 19 19:11:13 1996  Ben Pfaff  <blp@gnu.org>
7143
7144         * approx.h: Definition of EPSILON now depends on system's
7145         DBL_EPSILON.  Removed GNU C specific code.
7146         (cmpapx) Renamed approx_compare.
7147
7148         * frequencies.g, frequencies.q: Continued updating; still doesn't
7149         compile.
7150
7151         * groff-font.c: (name_to_index) Fix bug that kept it from
7152         compiling.
7153
7154         * hash.c, hash.h: Completed work.
7155
7156         * var.h: Changes to freq_tab, frequencies_proc.
7157         
7158 Wed Jul 17 21:23:36 1996  Ben Pfaff  <blp@gnu.org>
7159
7160         New hashing code.
7161         * hash.c, hash.h: New files.  Not completed.
7162         * Makefile.am: Added hash.c to source file list.
7163         * font.h: (struct font_desc) New member kern_size_p.
7164         * groff-font.c: Uses hash.h.
7165         (hashpjw) Moved to hash.c.
7166         (next_prime_power) Rewrote, renamed hsh_next_prime, moved to
7167         hash.c.
7168         (static var hash) New member size_p.
7169         * var.h: Includes hash.h.
7170         (struct freq_tab) Changed AVL_TREE to hash_tab.
7171
7172         * vars-prs.c: Comment, formatting fixes.
7173
7174         * frequencies.g, frequencies.q: Continued updating.  Not yet
7175         working.
7176
7177         * formats.c: Bug fix.
7178
7179 Tue Jul 16 22:10:04 1996  Ben Pfaff  <blp@gnu.org>
7180
7181         Increasing parallelism between DESCRIPTIVES and FREQUENCIES.
7182         * descript.g: Comment fixes.
7183         * descript.q: Comment fixes.  Moved some declarations into var.h.
7184         Made dsc_info a static table.  Updated FIXMEs.
7185         (internal_cmd_descriptives) Beautified.
7186         
7187         * frequencies.q: Started updating into working order.
7188         * frequencies.g: New file analogous to descript.g.
7189         * var.h: Comment fixes.  Added structures for FREQUENCIES.
7190         
7191         * som.c: Removed vestiges of crushing and partial table support.
7192
7193 Sun Jul 14 15:45:31 1996  Ben Pfaff  <blp@gnu.org>
7194
7195         * Many more changes to som.c especially, but these will not be
7196         documented as I have resolved to remove them.  This patchlevel is
7197         being released solely so that I can fall back to it if I decide
7198         that removing the changes is not a good idea.
7199
7200 Sat Jul 13 09:58:44 1996  Ben Pfaff  <blp@gnu.org>
7201
7202         * som.c: (global var som) New member `cum_y'.
7203         (build_target) Properly handles titles for partial tables.
7204         (dump_partial_beg, dump_partial_mid, dump_partial_end)
7205         Merged into single new function dump_partial().  Fixed problem
7206         with titles on partial tables.
7207         (dump_table) Calls dump_partial() for all parts of partial tables.
7208         (dump_page) Criteria for drawing title changed.
7209         
7210 Fri Jul 12 22:03:36 1996  Ben Pfaff  <blp@gnu.org>
7211
7212         * command.c: (cmd_table) Added LIST, WEIGHT.
7213
7214         * command.c: (cmd_remark) No longer frees `s' since it's not
7215         dynamically allocated.
7216         
7217         * data-out.c: (convert_f) Now correctly handles the case where
7218         abs(v->f)<1 but v->f rounds to a value of 1.00 given the specified
7219         number of decimals.
7220         (som_destroy_all_tables) Removed argument.  All callers changed.
7221         (som_vline, som_hline) Argument validity checking corrected.
7222         (som_set_value) Implemented half-heartedly.
7223         (replicate_table) Copies tables piece-by-piece when using Checker.
7224
7225         * som.h: New line style SLIN_1THIN, currently equivalent to
7226         SLIN_0.  New enum set SOM_SUB_*.
7227         (struct som_submission_form) Removed `seq_no'.  Added `type'.
7228         
7229         * list.q: Newly working file; uses partial tables.
7230         
7231         * som.c: (som_reduce_table) Renamed som_set_table_height().
7232         (som_crush) Removed argument `group'.
7233         (global var som) Removed `nt', `seq_no'.  Added `type'.
7234         (som_submit_table) Arguments changed.
7235         (output_table) Removed partial table code.
7236         (build_target) New arg; partial table support added.  All callers
7237         changed.
7238         (dump_plain_table) Removed partial table code.
7239         (dump_partial_beg, dump_partial_mid, dump_partial_end) New functions.
7240         (dump_table) Supports partial tables.
7241         (dump_page) New argument to allow not drawing top and/or bottom
7242         headers.  All callers changed.  Supports partial tables.
7243
7244 Sat Jul  6 22:22:25 1996  Ben Pfaff  <blp@gnu.org>
7245
7246         * data-out.c: Changed `#include <approx.h>' to `#include
7247         "approx.h".
7248         (convert_F) Comment fix.  Now won't print `-.000', etc.
7249
7250         * descript.q: Now Z-scores work, although there appears to
7251         be a bug (which might actually be in data-out.c:convert_F()).
7252         (descriptives_trns_proc, descriptives_trns_free) New functions.
7253         (run_z_pass) Implemented.
7254         
7255         * var.h: Comment fixes.
7256         (dsc_z_score, descriptives_trns) New structs.
7257         (descriptives_trns) Added to any_trns as `dsc'.
7258
7259         * error.c, error.h: New error class, IS (Installation Script
7260         error), used in those instances where the error is in the
7261         installation, but there is a script file or installation file that
7262         can be usefully referred to.
7263         
7264         * output.c: Change many IE classes to IS classes.
7265
7266         * cases.c, command.c, common.c, crosstabs.q, expr-evl.c,
7267         frequencies.q, list.q, vars-prs.c, vfm.c: Removed reference to
7268         HAVE_MALLOC_H because Borland C++ alloca() is broken, so why
7269         include the corresponding header?
7270         
7271         * glob.c: (init_glob) Don't malloc term_buffer under Checker.
7272         Don't bail out if termcap can't be read.
7273
7274         * som.c: (som_destroy_table) Removed.
7275         (som_reduce_table, som_destroy_all_tables) New functions.
7276         (som_crush) New function, not implemented.
7277         
7278         * som.h: New table option STAB_CRUSH.  Comment fix.  New struct
7279         som_submission_form.  Function prototypes revised.
7280
7281         Outputting huge tables (1000s of rows) a few rows at a time
7282         is supported, though untested.  May even break everything.
7283         Actually, the code doesn't even compile right now.
7284         * som.c: (struct som) New fields htv, nt, seq_no.
7285         (som_submit_table) Multiple arguments changed to a single
7286         pointer to struct submission_form.  Only increments subtable_num
7287         if seq_no is zero.  Only destroys table if it's not going to
7288         be reused.
7289         (replicate_table) New function.
7290         (output_table) Comment fix.
7291         (examine_table) Changed inline code to code calling
7292         replicate_table().  Calculates htv.  Supports partial tables.
7293         (draw_title) Removed comment.
7294         (build_target) Only allows for title on first part of partial
7295         tables.
7296         (dump_plain_table) Only resets table chunk number on first part
7297         of partial tables; FIXME: doesn't work quite right.  Supports
7298         partial tables.
7299         (dump_page) Titles only on first part of partial tables.
7300
7301 Fri Jul  5 20:16:19 1996  Ben Pfaff  <blp@gnu.org>
7302
7303         * Thanks to an unreliable IDE hard drive, I have spent the last
7304         day reconstructing my Debian GNU/Linux installation and redoing
7305         the previous day's changes--somehow I managed to save every file
7306         except for output.c and output.h.  So the following changes could
7307         really be considered independent of the output.c, output.h changes
7308         from Jul 4.
7309
7310         * output.h, output.c: Moved the outp_configure_vec global var,
7311         outp_names struct, and enum set OUTP_S_* from output.h to output.c.
7312         outp_configure_vec is now static.
7313         
7314 Thu Jul  4 20:20:24 1996  Ben Pfaff  <blp@gnu.org>
7315
7316         * The entire philosophy behind configuration of the output drivers
7317         changed.  Now there is a termcap-type configuration where drivers
7318         to be read are determined beforehand, rather than parsing the
7319         entire output init file and storing it in memory & deciding what
7320         to actually use later.  Faster & more memory-efficient at the same
7321         time, cool.
7322         
7323         * output.c: Comment fix.  Removed outp_init_drivers global var.
7324         Removed all references to synonyms.  New structure outp_defn.  New
7325         global vars outp_macros, outp_configure_vec.
7326         (search_name, delete_name, add_name, check_configure_vec,
7327         expand_name, find_defn_value) New static functions.
7328         (outp_configure_clear, outp_configure_add, outp_configure_macro,
7329         outp_read_devices) New extern functions.
7330         (outp_init) Much functionality moved into outp_read_devices.
7331         (outp_read_devices) Format of output init file changed; name of
7332         file is `devices' rather than `output' to avoid Makefile
7333         conflicts.
7334         (outp_clear) Renamed outp_done.
7335         (outp_list_classes) Bug fix, cleaned up.
7336         (outp_list_drivers) Not implemented anymore.
7337         (outp_configure_driver) Now a static function; simplified; now
7338         interpolates macros; supports new structure.
7339         (outp_enable_driver, match_synonym) Removed; all references
7340         removed.
7341         (find_driver) First argument removed.
7342         
7343         * output.h: Global var outp_init_drivers removed; new structure
7344         outp_names; new enum set OUTP_S_*; new global var
7345         outp_configure_vec; function prototypes for output.c exports
7346         updated.
7347         
7348         * main.c: (main) Calls outp_read_devices() after parsing the
7349         command line.
7350         
7351         * cmdline.c: (parse_command_line) New option -v --verbose;
7352         --version changed to -V.  --device option changed syntax to just
7353         take a single device name.  Accepts key=value declaration of
7354         output init file macros.  Syntax message updated.
7355
7356         * filename.c: (expand_line) New function.
7357         (interp_environ_vars) Renamed interp_vars; no longer uses
7358         fixed-size buffer.
7359         (blp_getenv) Allows $ARCH and $VER pseudo-environment-vars to be
7360         overridden by real environment vars.
7361         (search_path) Uses verbose_msg() instead of #ifdef'd printf().
7362         * filename.h: interp_environ_vars() renamed interp_vars().
7363         
7364         * error.c, error.h: Added extern variable `verbosity', message
7365         class MM.
7366         
7367         * error.c: (vmsg) Support message class MM.
7368         (verbose_msg) New function.
7369
7370         * descript.q: (generate_z_varname) Bug fix in generation of
7371         Z-score varnames.
7372         (dump_z_table) Bug fix in column headers.
7373         
7374         * ascii.c: (ascii_init_driver) Changed minimum number of lines per
7375         page from 29 to 15.  Don't set a default for ops[OPS_INIT,
7376         OPS_DONE].  Writes the uninit string when the driver is closed.
7377         (ascii_open_page) Write the init string before the first page.
7378         (output_shorts) Form of main loop changed from `while' to `for'.
7379         Bug fix with overstrikes: the character is printed *after* the
7380         backspace.  Eliminated a lot of `& 0xff' modifiers.
7381         (advance_to_left_margin) New function.
7382         (return_carriage, output_lines) Handle left margin.
7383
7384 Thu Jul  4 00:35:59 1996  Ben Pfaff  <blp@gnu.org>
7385
7386         * ascii.c: New option `carriage-return-style'.
7387
7388         * ascii.c: (count_fancy_chars) New function.
7389         (delineate, text_metrics) Use new function; bug fixes regarding
7390         rich text strings.
7391         (text_draw) Bug fix with rich text.
7392         (output_string, output_shorts) Reordered.
7393         (output_shorts) Now handles boxchars and some overstrike font
7394         changes.
7395         (output_char, return_carriage) New functions.
7396         (output_lines) Now handles overstriking and font changes properly;
7397         some code moved to output_shorts.
7398
7399 Tue Jul  2 22:13:23 1996  Ben Pfaff  <blp@gnu.org>
7400
7401         [GLOBAL_DEBUGGING]
7402         * ascii.c: New member `debug' in ascii_driver_ext.
7403         (ascii_init_driver, delineate) Uses new member.
7404
7405         Now you can set a vertical height on writing text.
7406         * ascii.c: (delineate) Keeps track of vertical position.
7407         (text_draw) No longer considers fully justified text an internal
7408         error.
7409         
7410         * output.h: New flag OUTP_T_VERT; other OUTP_T_ values changed.
7411
7412         Tables' titles are drawn; they can have variable height.
7413         * som.c: `som' struct has new member, title_height.
7414         (draw_title) New argument.  Moved within file.  All caller
7415         changed.
7416         (build_target) New argument, amount of space needed for first row.
7417         Calculates height of title, takes that into account.  All callers
7418         changed.
7419         (dump_plain_table, dump_columnated_table) Took calculation of y1,
7420         y2 out of loop.
7421         (dump_columnated_table) [GLOBAL_DEBUGGING] Debugging code
7422         improved.
7423         (dump_columnated_table) Organized for readability.
7424         (dump_page) Makes use of som.title_height.
7425
7426         * som.c: Many comment bug fixes.
7427
7428         * descript.q: (try_name, generate_z_name) Bug fix regarding
7429         generation of Z-score variable names.
7430         * var.h: Removed num from descriptives_proc; all referents removed.
7431
7432 Mon Jul  1 22:13:39 1996  Ben Pfaff  <blp@gnu.org>
7433
7434         * ascii.c: (ascii_line_horz, ascii_line_vert,
7435         ascii_line_intersection) Added debugging code.
7436
7437         Added a descriptive line above each table to describe it.
7438         * command.c: (parse_cmd) Calls som_new_series.
7439         
7440         * som.c: New static vars table_num, subtable_num.  New `som'
7441         member `title'.
7442         (dump_page) New arguments.
7443         (som_submit_table) Handle new variables.
7444         
7445         * som.c, som.h: (som_submit_table) New arguments.  All callers
7446         changed.
7447         (som_new_series) New function.
7448         (build_target) Makes room for extra line.
7449         (draw_title) New function.
7450         (dump_page) Calls draw_title.  Bug fix: doesn't always set
7451         som.ext->cp to 0.
7452         
7453         Columnation of tables support.
7454         * som.h: Deleted fr, lr, ri from som_table.  Reorganized.
7455         
7456         * som.c: Deleted references to fr, lr, ri.
7457         (som_columnate) Bux fix: sets group member of table.
7458         (som_add_options) Function removed.
7459         (dump_table) Split into three functions; extensively reworked.
7460         
7461         * descript.q: (dump_z_table) Better output table formatting; added
7462         title support to correspond to som.h changes.
7463         (display) Title support.
7464
7465         * output.h: Added OUTP_T_NONE.
7466         
7467 Mon Jul  1 13:00:00 1996  Ben Pfaff  <blp@gnu.org>
7468
7469         * descript.q: Improved handling of Z scores; still not perfect.
7470         
7471         * output.h, ascii.c: Added hook for getting em width of current
7472         font.
7473         
7474         * som.c: Uses new em-width hook.  Added debugging code to
7475         several functions.
7476         (som_columnate) New argument.
7477         (som_add_options) Removed.
7478
7479 Jun 29 17:40:47 1996  Ben Pfaff  <blp@gnu.org>
7480
7481         * som.h, som.c, output.c, output.h, ascii.c: Updated to work with
7482         rules as a property of the table instead of as a property of the
7483         cells.
7484         
7485         * ascii.c: Added `header' to table of options.
7486         
7487         * descript.q: Added even shorter statistic names; modified to work
7488         with new som interface.
7489         
7490         * misc.c (blp_getdelim): Bug fix.
7491         
7492         * version.c: includes 'conf.h'.
7493         
7494 ----------------------------------------------------------------------
7495 Local Variables:
7496 mode: change-log
7497 version-control: never
7498 End: