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