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