*** empty log message ***
[pspp-builds.git] / src / ChangeLog
1 2004-04-09  Michael Kiefte  <mkiefte@dal.ca>
2
3         * descript.c: 
4
5         fixed problem with parsing in match_statistic() causing
6         "DESCRIPTIVE STAT=MEAN." to barf.
7
8         "MEAN" is now default if "SORT" given without specification.
9
10         Fixed infinite loop with "DESCRIPT GIBBERISH=ALL."  Parsing is
11         generally less forgiving of syntax errors: better to have it do
12         nothing and type it in again then to not know what it actually did
13         instead.  
14
15         z-score transformation now checks score for user-missing values
16         and checks std_dev for SYSMIS.
17
18 2004-04-06  Michael Kiefte  <mkiefte@dal.ca>
19
20         * aggregate.c, crosstabs.q, descript.c, dictionary.c, frequencies.q, levene.c, t-test.q, var.h: 
21         Changed dict_get_case_weight() to accept an additional int * flag
22         to complain about system-missing, user-missing, zero, or negative
23         weights and updated existing functions to pass int * to
24         dict_get_case_weight().
25
26 2004-04-05  jmd  <jmd@gnu.org>
27
28         * main.c: Fixed configuration problems with gsl
29
30         * t-test.q: Fixed some problems encountered when compiling under Cygwin
31
32 2004-04-03  blp  <blp@gnu.org>
33
34         * lexer.c, ChangeLog:
35         Fix infinite loop on comment at end of file, add test.
36
37 2004-04-03  jmd  <jmd@gnu.org>
38
39         * settings.h, var.h, ChangeLog, Makefile.am, cmdline.c, command.c, command.h, error.h, filename.c, frequencies.q, lexer.h, main.c, q2c.c, set.q:
40         Fixed the calculation of percentiles and added --syntax and --algorithm options
41
42 Sat Apr  3 11:43:37 2004  Ben Pfaff  <blp@gnu.org>
43
44         * lexer.c: (lex_skip_comment) Handle end-of-file correctly (I
45         hope).
46
47 Sat Apr  3 15:00:18 WST 2004 John Darrington <john@darrington.wattle.id.au>
48
49         * frequencies.q:  Fixed the calculation of percentiles
50
51         * Makefile.am:  Added the --ansi flag and dealt with the
52         consequences.  Added some entries to PSPP_sources so that
53         make distcheck would pass
54
55         * cmdline.c:   Added the --syntax and --algorithm options
56
57         * q2c.c:  Added an implicit /ALGORITHM subcommand to everything.
58
59 Fri Apr  2 11:25:22 WAST 2004 John Darrington <john@darrington.wattle.id.au>
60
61         * t-test.q, levene.c, levene.h  Converted t-test (incl levene) to 
62         use the new multipass_split_... mechanism.
63
64 Wed Mar 31 22:36:22 2004  Ben Pfaff  <blp@gnu.org>
65
66         * frequencies.q: (calc_stats) Use moments data structure and
67         calc_seskew(), calc_sekurt() functions.
68
69         * set.q main.c settings.h Added support for --syntax and --algorithm 
70         options
71
72 Tue Mar 30 22:04:19 2004  Ben Pfaff  <blp@gnu.org>
73
74         * vfm.c: Had to get last call to multipass_split_output() inside
75         open_active_file()/close_active_file() pairing, so introduce new
76         function.
77         (internal_procedure) Move procedure() code here, except for calls
78         to open_active_file() and close_active_file().
79         (procedure) Wrap open_active_file() and close_active_file() around
80         internal_procedure().
81         (multipass_procedure_with_splits) Wrap open_active_file() and
82         close_active_file() around internal_procedure().
83
84 Tue Mar 30 22:01:57 2004  Ben Pfaff  <blp@gnu.org>
85
86         * descript.c: (cmd_descriptives) Free `vars' to avoid memory leak.
87
88 Mon Mar 29 16:26:40 2004  Ben Pfaff  <blp@gnu.org>
89
90         * debug.c: Removed.  Moved cmd_debug_evaluate() into expr-evl.c.
91
92         * expr-evl.c: (cmd_debug_evaluate) Moved here from debug.c.
93
94 Mon Mar 29 16:03:08 2004  Ben Pfaff  <blp@gnu.org>
95
96         * algorithm.c: By default turn off some of the more expensive
97         assertions.
98         (expensive_assert) New macro which expands to assert if
99         EXTRA_CHECKS is defined, to nothing otherwise.
100         (unique) Use expensive_assert().
101         (binary_search) Ditto.
102         (push_heap) Ditto.
103         (pop_heap) Ditto.
104         (make_heap) Ditto.
105         (sort_heap) Ditto.
106
107         * command.c: (conflicting_3char_prefixes) Words that are the same
108         don't cause conflicts when they are abbreviated to the first three
109         letters.
110
111         * expr-evl.c: (CONCAT_func) Fix memory leak by incrementing struct
112         nonterm_node's n earlier.
113         (generic_str_func) Ditto.
114         
115 Mon Mar 29 15:32:17 2004  Ben Pfaff  <blp@gnu.org>
116
117         Add support for multipass procedures.  Rewrite DESCRIPTIVES to
118         test multipass support, take advantage of new moments
119         calculation, and to not be such crappy code.  Get rid of q2c
120         processing for DESCRIPTIVES.
121
122         * vfm.c: (struct multipass_split_aux_data) New structure.
123         (multipass_procedure_with_splits) New function.
124         (multipass_split_callback) New function.
125         (multipass_split_output) New function.
126         * descript.q: Removed.
127
128         * descript.c: New file.
129
130         * var.h: Removed descriptives enums.
131         (struct descriptives_proc) Removed.
132         (struct variable) Removed p.dsc.
133
134         * Makefile.am: (q_sources_c) Remove descript.c.
135         (q_sources_q) Removed descript.q.
136         
137 Mon Mar 29 15:31:55 2004  Ben Pfaff  <blp@gnu.org>
138
139         New manager for keeping track of used workspace.
140         
141         * workspace.c: New file.
142
143         * workspace.h: New file.
144
145         * Makefile.am: (pspp_SOURCES) Add workspace.c, workspace.h.
146
147         * sort.c: (do_internal_sort) Use workspace_malloc().
148         (destroy_internal_sort) Use workspace_free().
149
150 Mon Mar 29 15:31:08 2004  Ben Pfaff  <blp@gnu.org>
151
152         New `struct casefile' for managing sets of cases.
153
154         * casefile.c: New file.
155
156         * casefile.h: New file.
157
158         * command.def: Add DEBUG CASEFILE command.
159
160         * Makefile.am: (pspp_SOURCES) Add casefile.c, casefile.h.
161
162         * sort.c: (sort_cases) Move logic for sending storage file to disk
163         into do_external_sort().
164         (struct internal_sort) Use an array of ccase pointers instead of a
165         case_list.
166         (do_internal_sort) Rewrite to handle casefiles.
167         (compare_case_list) Removed.
168         (compare_cases) New function.
169         (compare_case_dblptrs) New function.
170         (read_internal_sort_output) Deal with new struct internal_sort.
171
172         * vfm.c: (static var workspace_overflow) Removed.
173         (struct storage_stream_info) Removed all the members.  Added
174         struct casefile * member.
175         (storage_sink_open) Use casefile.
176         (open_storage_file) Removed.
177         (write_storage_file) Removed.
178         (storage_to_disk) Removed.
179         (destroy_storage_stream_info) Use casefile.
180         (storage_sink_write) Use casefile.
181         (storage_sink_make_source) Use casefile.
182         (storage_source_count) Use casefile.
183         (storage_source_read) Use casefile.
184         (storage_source_on_disk) Removed.
185         (storage_source_get_cases) Removed.
186         (storage_source_set_cases) Removed.
187         (storage_source_get_casefile) New function.
188         
189 Mon Mar 29 15:30:09 2004  Ben Pfaff  <blp@gnu.org>
190
191         New `struct moments' for calculating moments.
192
193         * stats.c: Removed.
194
195         * stats.h: Removed.
196
197         * moments.c: New file.
198
199         * moments.h: New file.
200
201         * command.def: Add DEBUG MOMENTS command.
202
203         * Makefile.am: (pspp_SOURCES) Add moments.c, moments.h.  Remove
204         stats.c, stats.h.
205
206         * aggregate.c: Modify AGGREGATE to use the new moments
207         calculation, even if not in such a great way.
208         (struct agr_var) Add `moments' member.
209         (parse_aggregate_functions) Set `moments' member to null.
210         (agr_destroy) Destroy `moments' member.
211         (accumulate_aggregate_info) Use `moments' for standard deviation.
212         (dump_aggregate_info) Ditto.
213         (initialize_aggregate_info) Create or clear `moments'.
214
215         * misc.h: Add pow2(), pow3(), pow4() functions in place of sqr(),
216         cube(), pow4() that were in stats.h.  All references updated.
217
218         * crosstabs.q: stats.h had chi-square significance functions.  Use
219         GSL instead.
220         (display_chisq) Use gsl_cdf_chisq_Q() instead of chisq_sig().
221
222         * expr-evl.c: (expr_evaluate) Use moments_of_values() for
223         OP_CFVAR, OP_MEAN, OP_SD, OP_VARIANCE.
224                 
225 Fri Mar 26 14:21:23 2004  Ben Pfaff  <blp@gnu.org>
226
227         * dictionary.c: (dict_compact_values) Compacted values need to
228         start off from 0.
229
230 Fri Mar 26 00:54:57 2004  Ben Pfaff  <blp@gnu.org>
231
232         * var-labs.c: (cmd_variable_labels) For compatibility, don't allow
233         `/' at start.  Check return value of parse_variables() for error
234         return.
235
236 Fri Mar 26 00:19:27 2004  Ben Pfaff  <blp@gnu.org>
237
238         Revamp expressions: make the code a little nicer, and fix bugs
239         found in testing.
240         
241         * expr-evl.c: (expr_evaluate) Make expression argument const.
242         Support OP_ADD, OP_SUB, OP_MUL, OP_DIV instead of OP_PLUS, OP_MUL.
243         OP_POW is missing for arg 2 <= 0.  OP_LOG is natural log, not
244         base-10 log.  Fix OP_ANY, OP_ANY_STRING, OP_RANGE, OP_RANGE_STRING
245         off-by-ones.  Add OP_MAX_STRING, OP_MIN_STRING.  Fix OP_TIME_HMS,
246         OP_DATE_WKYR boundary conditions.  Add OP_CTIME_DAYS,
247         OP_CTIME_HOURS, OP_CTIME_MINUTES, OP_CTIME_DAYS, OP_CTIME_SECONDS.
248         Support OP_INDEX_2, OP_INDEX_3, OP_RINDEX_2, OP_RINDEX_3 instead
249         of OP_INDEX, OP_INDEX_OPT, OP_RINDEX, OP_RINDEX_OPT.  Merge
250         OP_LPAD_OPT into OP_LPAD, OP_RPAD_OPT into OP_RPAD, OP_LTRIM_OPT
251         into OP_LTRIM, OP_RTRIM_OPT into OP_RTRIM, OP_NUMBER_OPT into
252         OP_NUMBER.  Fix OP_RTRIM fragility.  Support OP_SUBSTR_2,
253         OP_SUBSTR_3 instead of OP_SUBSTR, OP_SUBSTR_OPT.  Remove OP_INV.
254         Simplify OP_SYSMIS.  Remove OP_STR_MIS.
255
256         * expr-opt.c: (optimize_expression) Rewrite.
257         (macro n0) Removed.
258         (macro n1) Removed.
259         (macro n2) Removed.
260         (macro s0) Removed.
261         (macro s0l) Removed.
262         (macro s1) Removed.
263         (macro s1l) Removed.
264         (macro s2) Removed.
265         (macro s2l) Removed.
266         (macro s) Removed.
267         (macro sl) Removed.
268         (eq_num_con) New function.
269         (optimize_tree) New function.
270         (macro rnc) Removed.
271         (macro frnc) Removed.
272         (str_search) Add const to string params.
273         (str_rsearch) Ditto.
274         (evaluate_tree_no_missing) Renamed from evaluate_tree.  Add num[],
275         str[], str_len[] locals to substitute for most of removed macros.
276         Support OP_ADD, OP_SUB, OP_MUL, OP_DIV instead of OP_PLUS, OP_MUL.
277         Removed support for missing values because we're never called with
278         missing values.  Use set_number() or set_number_errno() instead of
279         rnc or frnc.  Removed any stuff that caused trouble in testing.
280         We can re-add it later if it really slows anything.  Fix some
281         random problems.
282         (evaluate_tree_with_missing) Not yet supported.  To be added later
283         if it's important.
284         (repl_num_con) Removed.
285         (collapse_node) New function.
286         (force_repl_num_con) Removed.
287         (set_number) New function.
288         (set_number_errno) New function.
289         (repl_str_con) Removed.
290         (set_string) New function.
291         (yrmoda) Tighten boundary conditions.  Adopt 2030 cut-off for
292         2-digit years.
293         (dump_node) No special case for OP_AND, OP_OR.
294
295         * expr-prs.c: (expr_prs) Honor EXPR_NO_OPTIMIZE bit.  Rewrite.
296         (expr_get_type) New function.
297         (type_check) Rewrite.
298         (type_coercion) New function.
299         (struct operator) New structure.
300         (match_operator New function.
301         (parse_binary_operators) New function.
302         (parse_inverting_unary_operator) New function.
303         (parse_or) Rewritten.
304         (parse_and) Rewritten.
305         (parse_not) Rewritten.
306         (parse_rel) Rewritten.
307         (parse_add) Rewritten.
308         (parse_mul) Rewritten.
309         (parse_neg) Rewritten.
310         (parse_exp) Rewritten.
311         (parse_sysvar) Add $TRUE, $FALSE system variables.
312         Get $LENGTH, $WIDTH from get_viewlength(), get_viewwidth().
313         (parse_primary) Use allocate_var_node(), allocate_num_con(),
314         allocate_str_con().
315         (struct function) Remove desc, change `func' prototype.
316         (unary_func) Remove special cases.
317         (MISSING_func) Reduce to unary_func() that just returns a boolean.
318         (SYSMIS_func) Handle SYSMIS((x)) like SYSMIS(x).
319         (VALUE_func) Use allocate_var_node().
320         (nary_num_func) Allow MIN and MAX for strings.
321         Use allocate_var_node().  Properly clean up.
322         Fix return type.
323         (generic_str_func) Use local table instead of removed `desc'
324         member.  Mostly rewrite.
325         (get_num_args) Revise error message.
326         (parse_function) Return EXPR_ERROR, not 0 on error.
327         (macro op) Removed.
328         (macro varies) Removed.
329         (ops[]) Use expr.def.
330         (free_node) Do nothing if node is null.
331         (allocate_num_con) New function.
332         (allocate_str_con) New function.
333         (allocate_var_node) New function.
334         (allocate_binary_nonterminal) New function.
335         (append_nonterminal_arg) Removed.
336         (static var func_tab[]) Revised.
337         (expr_debug_print_postfix) Make parameter const.
338         Use printf() instead of debug_printf().
339
340         * expr.def: New file.
341         
342         * expr.h: Change PXP_* to EXPR_*, all references updated.  Also
343         use named enum instead of unnamed, all references updated.  Add
344         EXPR_ANY, EXPR_NO_OPTIMIZE.
345
346         * exprP.h: Remove EX_*.  Add DEFINE_OPERATOR.  Use expr.def
347         instead of defining OP_* directly.
348         (macro IS_TERMINAL) New macro.
349         (macro IS_NONTERMINAL) New macro.
350         (enum OP_NO_FLAGS) New.
351         
352 Fri Mar 26 00:18:01 2004  Ben Pfaff  <blp@gnu.org>
353
354         * error.c: (err_assert_fail) msg variable needs to be non-const.
355
356 Fri Mar 26 00:17:24 2004  Ben Pfaff  <blp@gnu.org>
357
358         * debug.c: (cmd_debug_evaluate) Rewrite.
359
360 Fri Mar 26 00:15:13 2004  Ben Pfaff  <blp@gnu.org>
361
362         Fix some CROSSTABS bit rot stupidity.
363
364         * crosstabs.q: Reorder the CELLS subcommands for compatibility.
365         (internal_cmd_crosstabs) Initializes cells[] correctly.
366         (float_M_suffix) Rename format_cell_entry(), change prototype,
367         rewrite.
368         (display_crosstabulation) Fix cell formatting.
369
370 Fri Mar 26 00:14:09 2004  Ben Pfaff  <blp@gnu.org>
371
372         Make lex_rest_of_line(), lex_entire_end() not discard lines.  Have
373         to call lex_discard_line() to do that.
374
375         * command.c: (run_command) Call lex_discard_line() after
376         lex_rest_of_line().
377
378         * lexer.c: (lex_entire_end) Change behavior.
379         (lex_rest_of_line) Change behavior.  Return const char *.
380         (lex_discard_line) Don't clear getl_buf, don't emit message.
381
382         * main.c: (handle_error) Emit message here.
383
384         * repeat.c: (internal_cmd_do_repeat) Use lex_discard_line()
385         instead of lex_entire_line().
386
387         * str.c: (mm_find_reverse) Make length params size_t.  Rewrite.
388
389         * title.c: (get_title) Call lex_discard_line() after
390         lex_rest_of_line().
391         (cmd_file_label) Ditto.
392         (cmd_document) Deal with const char * return value.
393
394 Fri Mar 26 00:10:16 2004  Ben Pfaff  <blp@gnu.org>
395
396         Removed REMARK command.
397
398         * command.c: (extract_prefix) Removed.
399         (output_line) Removed.
400         (cmd_remark) Removed.
401
402         * command.def: Remove REMARK.
403
404 Fri Mar 26 00:08:38 2004  Ben Pfaff  <blp@gnu.org>
405
406         Added abort() after lots of assert(0) invocations to avoid some
407         compiler warnings.  We really need a NOT_REACHED macro.
408
409 Tue Mar 23 08:00:42 WAST 2004 John Darrington <john@darrington.wattle.id.au>
410
411         * sort.c: Added missing call to temp_file_close.  Changed error 
412         messages to warnings.
413
414         * set.q: Improved setting of set_view{length,width} to be more tolerant
415         of buggy OSes.
416
417 Sun Mar 21 10:11:14 WST 2004 John Darrington <john@darrington.wattle.id.au>
418
419         * val-labs.c: Fixed a bug where PSPP would crash, if VALUE LABELS was
420         used with incorrect syntax.
421
422         * error.c, error.h et al:  Overridden definition of assert for a
423         custom one.
424
425         * test-q.c: Fixed a buglet where it would crash if no /VARIABLES
426         subcommand was given when it ought to have been.
427
428 Sat Mar 20 22:19:08 2004  Ben Pfaff  <blp@gnu.org>
429
430         * tab.c: (tab_vline) Fix assertions to respect row_ofs and
431         col_ofs.
432         (tab_hline) Ditto.
433         (tab_box) Ditto.
434         (tab_joint_text) Ditto.
435
436 Sat Mar 20 17:57:23 2004  Ben Pfaff  <blp@gnu.org>
437
438         * levene.c: Add #include.
439
440         * set.q: (set_viewport) Add `int' argument to make its prototype
441         correct for signal().
442
443 Sat Mar 20 15:35:17 2004  Ben Pfaff  <blp@gnu.org>
444
445         * expr-evl.c: (expr_evaluate) Assert that `c' is nonzero before
446         using it.
447
448 Sat Mar 20 15:18:16 2004  Ben Pfaff  <blp@gnu.org>
449
450         Changed DFM from open-at-first-access to explicit-open.  Before,
451         calling dfm_get_record() or dfm_put_record() would automatically
452         open the file.  Now, you have to call dfm_open_for_reading() or
453         dfm_open_for_writing() explicitly.  This makes it possible to
454         check permissions, file existence, etc. earlier.
455
456         Also made struct file_handle more opaque, and clean up in general.
457
458         * data-list.c: (cmd_data_list) Open handle for reading.
459
460         * dfm.c: (struct dfm_fhuser_ext) Add `where', `saw_begin_data'
461         members.
462         (open_file_r) Renamed dfm_open_for_reading(), rewrote.
463         (open_file_w) Renamed dfm_open_for_writing(), rewrote.
464         (open_inline_file) Removed.
465         (read_record) For inline_file, if we haven't seen BEGIN DATA, read
466         it.  Deal with line_number in extension record instead of file
467         handle.
468         (dfm_get_record) Rewrote.
469         (dfm_put_record) Rewrote.
470         (dfm_push) Assert file is open and one of ours.  Deal with
471         line_number in extension record instead of file handle.
472         (dfm_pop) Assert file is open and one of ours.  Deal with
473         line_number in extension record instead of file handle.
474         (cmd_begin_data) Use dfm_open_for_reading().  Mark that we saw
475         BEGIN DATA.     
476
477         * file-handle.h: (enum constants RH_RF_*) Removed.
478         (enum constants FH_MD_*) Removed.
479         (struct file_handle) Removed `name', `norm_fn', `fn', `where',
480         `recform', `lrecl', `mode' members.  Public references to
481         `recform' changed to use handle_get_mode(), references to `lrecl'
482         changed to use handle_get_record_width().  Added `private' member.
483         (enum file_handle_mode) New.
484
485         * file-handle.q: (struct private_file_handle) New structure.
486         (struct file_handle_list) New structure.
487         (static var files) New.
488         (static var file_handles) Removed.
489         (init_file_handle) Removed.
490         (create_file_handle) Removed.
491         (get_handle_with_name) New function.
492         (get_handle_for_filename) New function.
493         (cmd_file_handle) Rewritten.
494         (hash_file_handle) Removed.
495         (cmp_file_handle) Removed.
496         (fh_init_files) Rewritten.
497         (fh_parse_file_handle) Rewritten.  Allows identifiers as
498         filenames.
499         (fh_get_handle_by_name) Renamed handle_get_name(), all references
500         updated.  Rewritten.
501         (fh_get_handle_by_filename) Renamed handle_get_filename(), all
502         references updated.  Rewritten.
503         (fh_record_width) Renamed handle_get_record_width(), all
504         references updated.  Rewritten.
505         (handle_get_mode) New function.
506
507         * file-type.c: (cmd_file_type) Open handle for reading.
508
509         * filename.c: [unix] (struct file_identity) New structure.
510         [unix] (fn_get_identity) New function.
511         [unix] (fn_free_identity) New function.
512         [unix] (fn_compare_file_identities) New function.
513         [!unix] (struct file_identity) New structure.
514         [!unix] (fn_get_identity) New function.
515         [!unix] (fn_free_identity) New function.
516         [!unix] (fn_compare_file_identities) New function.
517
518         * lexer.c: (static var put) Renamed put_token, all references
519         updated.
520         (static var put_tokstr) New.
521         (static var put_tokval) New.
522         (lex_init) Initialize put_tokstr().
523         (restore_token) New function.
524         (save_token) New function.
525         (lex_get) Use restore_token().
526         (lex_put_back) Use save_token().
527         (lex_put_back_id) New function.
528         (lex_put_forward) Removed.
529         (lex_preprocess_line) Set put_token instead of using
530         lex_put_forward().
531         (lex_negative_to_dash) Use save_token(), set put_token directly.
532         (dump_token) Use stderr instead of stdout.
533
534         * main.c: (main) Remove call to cmd_init().
535         
536         * matrix-data.c: (cmd_matrix_data) Open file for reading.
537
538         * pfm-read.c: Use handle_get_filename() instead of trying to use
539         h->fn directly, all over.
540
541         * pfm-write.c: Ditto.
542
543         * print.c: (internal_cmd_print) Open handle for writing.
544         (dump_table) Use handle_get_filename().
545         (print_trns_proc) Use handle_get_mode().
546         (cmd_print_space) Use fh_parse_file_handle().
547         Open handle for writing.
548         [0] (debug_print) Removed.
549
550         * sfm-read.c: Use handle_get_filename() instead of trying to use
551         h->fn directly, all over.
552
553         * sfm-write.c: Ditto.
554
555 Sat Mar 20 14:35:48 2004  Ben Pfaff  <blp@gnu.org>
556
557         Fix memory leaks.
558         
559         * autorecode.c: (arc_free) Free arc->src_values.
560
561         * error.c: (msg) Free buf.
562
563         * val-labs.c: (do_value_labels) Always free vars.
564
565         * vfm.c: (close_active_file) If sink has no make_source then call
566         its destroy function.
567
568 Sat Mar 20 14:00:24 2004  Ben Pfaff  <blp@gnu.org>
569
570         Fixed cmd_parse() so that it always skips past a full command
571         name.  A few special commands for which this would be bad get
572         special treatment.  This lets us drop code for skipping past the
573         end of a command name in most cmd_*() functions.  It's not worth
574         listing all the commands affected.
575
576         * command.c: (struct command) Remove `cmd' member, replace by
577         `name' member, all references updated.  Remove `word', `next',
578         `skip_entire_name' members.
579         (macro DEFCMD) Deal with revised `struct command'.
580         (macro UNIMPL) Ditto.
581         (macro SPCCMD) New macro for commands whose last word shouldn't be
582         skipped.
583         (static array cmd_table[]) Make const, rename `commands', remove
584         sentinel element.
585         (macro COMMAND_CNT) New macro.
586         (split_words) Removed.
587         (cmd_init) Removed.
588         (FILE_TYPE_okay) Make parameter const.
589         (cmd_parse) Improve error messages.
590         (match_strings) New function.
591         (next_word) New function.
592         (enum command_match) New enum.
593         (conflicting_3char_prefixes) New function.
594         (conflicting_3char_prefix_command) New function.
595         (cmd_match_words) New function.
596         (count_matching_commands) New function.
597         (get_command_name) New function.
598         (free_words) New function.
599         (unknown_command_error) New function.
600         (figure_out_command) Renamed parse_command_name(), rewritten.
601
602         * command.def: Removed @ command.  Marked BEGIN DATA, DOCUMENT,
603         FILE LABEL, REMARK, SUBTITLE, TITLE as special.  Renamed EVALUATE
604         to DEBUG EVALUATE.  Added N alias for N OF CASES, SORT alias for
605         SORT CASES.
606
607         * command.h: (macro SPCCMD) New.
608
609         * include.c: (cmd_include_at) Removed.
610         (cmd_include) Allow identifier to be used as filename.
611
612         * inpt-pgm.c: (cmd_reread) Use fh_parse_file_handle().
613
614         * t-test.q: (cmd_t_test) Command name is now parsed for us.
615         
616
617 Sat Mar 20 13:56:00 2004  Ben Pfaff  <blp@gnu.org>
618
619         Start work on better test framework.
620         
621         * Makefile.am: (pspp_sources) Add debug.c.
622         
623         * debug.c: New file.
624
625         * compute.c: (cmd_evaluate) Moved to debug.c, renamed
626         cmd_debug_evaluate().
627
628         * expr-prs.c: (expr_parse) Remove PXP_DUMP support.
629
630         * expr.h: (enum constant PXP_DUMP) Removed.
631
632 Sat Mar 20 00:05:42 WST 2004 John Darrington <john@darrington.wattle.id.au>
633
634         * set.q:  Implemented the SHOW command, and synced it to the existing 
635         SET cmd.
636
637         Added a handler for SIGWINCH so that viewlength and viewwidth follow
638         changes as the window size is changed.
639
640         Added fallback to set viewlength and viewwidth from LINES and COLUMS
641         environment variables if other methods are not available.
642
643         glob.c: Removed a lot of global variables from glob.c and encapsulated 
644         them in set.q
645
646         random.c: Tidied up the way the random seed is set.
647
648         str.c: Added a ds_vprintf function.
649
650         error.c: Extended dump_message so that messages are always broken at
651         '\n' characters.
652         
653 Thu Mar 18 11:07:14 2004  Ben Pfaff  <blp@gnu.org>
654
655         * pfm-write.c: (bufwrite) Write out the correct element for string
656         variables.  From Andreas Streichardt <streichardt@globalpark.de>.
657
658 Mon Mar 15 20:48:03 2004  Ben Pfaff  <blp@gnu.org>
659
660         Get rid of static and global (!) vars in matrix-data.c.
661
662         * matrix-data.c: (static var nr_data) Removed.
663         (static var nr_factor_values) Removed.
664         (static var max_cell_index) Removed.
665         (static var split_values) Removed.
666         (struct nr_aux_data) New structure.
667         (read_matrices_without_rowtype) Use a local struct nr_aux_data in
668         place of static vars, pass to create_case_source() and procedure()
669         as aux data.
670         (nr_read_data_lines) Use struct nr_aux_data * parameter instead of
671         struct matrix_data_pgm *.
672         (nr_read_splits) Ditto.
673         (nr_read_factors) Ditto.
674         (nr_output_data) Ditto.
675         (static var wr_content) Removed.
676         (global var wr_data) Removed.
677         (global var wr_current) Removed.
678         (struct wr_aux_data) New structure.
679         (read_matrices_with_rowtype) Use a local struct wr_aux_data in
680         place of static vars, pass to create_case_source() and procedure()
681         as aux data.
682         (matrix_data_read_with_rowtype) Use struct wr_aux_data * parameter
683         instead of matrix_data_pgm *.
684         (wr_read_splits) Ditto.
685         (wr_output_data) Ditto.
686         (wr_read_rowtype) Ditto.
687         (wr_read_factors) Ditto.
688         (wr_read_indeps) Ditto.
689         
690 Mon Mar 15 20:07:29 2004  Ben Pfaff  <blp@gnu.org>
691
692         Get rid of static vars in autorecode.c.
693
694         * autorecode.c: (struct autorecode_trns) Rename `arc' to `specs',
695         `n_arc' to `spec_cnt'.  All references updated.
696         (static var v_src) Removed.
697         (static var v_dest) Removed.
698         (static var h_trns) Removed.
699         (static var nv_src) Removed.
700         (static var descend) Removed.
701         (static var print) Removed.
702         (enum direction) New enum.
703         (struct autorecode_pgm) New structure.
704         (cmd_autorecode) Use struct autorecode_pgm instead of static vars.
705         Move n_dest local var into struct autorecode_pgm for ease of
706         clean-up.  Use arc_free().
707         (arc_free) New function.
708         (recode) Modify to take struct autorecode_pgm * parameter instead
709         of using statics.  Let the caller clean up.
710         (autorecode_proc_func) Use struct autorecode_pgm * auxiliary data
711         instead of statics.  Rearrange code a little.
712
713 Mon Mar 15 00:25:02 2004  Ben Pfaff  <blp@gnu.org>
714
715         Get rid of static, global vars in recode.c.  Remove debug code.
716
717         * recode.c: (static var head) Removed.
718         (global var v) Removed.
719         (global var nv) Removed.
720         (cmd_recode) New local variables head, v, nv.  Initialize and free
721         v.  Don't call debug_print().
722         [DEBUGGING] (dump_dest) Removed.
723         [DEBUGGING] (debug_print) Removed.
724
725 Mon Mar 15 00:14:49 2004  Ben Pfaff  <blp@gnu.org>
726
727         Get rid of static vars in expr-opt.c.
728
729         * expr-opt.c: (static var e) Removed.
730         (static var nop) Removed.
731         (static var mop) Removed.
732         (static var ndbl) Removed.
733         (static var mdbl) Removed.
734         (static var nstr) Removed.
735         (static var mstr) Removed.
736         (static var nvars) Removed.
737         (static var mvars) Removed.
738         (struct expr_dump_state) New structure.
739         (dump_expression) Use new struct expr_dump_state instead of static
740         vars and pass to functions we call.
741         (dump_node) Use struct expr_dump_state * parameter.
742         (emit) Ditto.
743         (emit_num_con) Ditto.
744         (emit_str_con) Ditto.
745         (emit_var) Ditto.
746         
747 Mon Mar 15 00:03:51 2004  Ben Pfaff  <blp@gnu.org>
748
749         Get rid of static var in COUNT.
750
751         * count.c: (static var head) Move into cmd_count().
752         (cmd_count) [DEBUGGING] Don't call debug_print.
753         [DEBUGGING] (debug_print) Removed.
754
755 Sun Mar 14 23:56:09 2004  Ben Pfaff  <blp@gnu.org>
756
757         Get rid of static vars in VALUE LABELS, ADD VALUE LABELS.
758
759         * val-labs.c: (static var v) Removed.
760         (static var nv) Removed.
761         [DEBUGGING] (debug_print) Removed.
762         (verify_val_labs) Add struct variable **, int parameters.
763         (get_label) Ditto.  Improve error messages, streamline.
764         (erase_labels) New function for erasing value labels, taking over
765         part of verify_val_labs()'s function.
766         (init) Removed.
767         (done) Removed.
768         (cmd_value_labels) No need to call init() or done() anymore.
769         (cmd_add_value_labels) Ditto.
770         (do_value_labels) Add vars, var_cnt local variables.  Clean up
771         after them internally.  Call erase_labels() if we should.  Don't
772         call debug_print().
773
774 Sun Mar 14 23:33:53 2004  Ben Pfaff  <blp@gnu.org>
775
776         Get rid of static vars in MATCH FILES.
777         
778         * get.c: (static var mtf_head) Removed.
779         (static var mtf_tail) Removed.
780         (static var mtf_by) Removed.
781         (static var mtf_n_by) Removed.
782         (static var mtf_master) Removed.
783         (static var mtf_seq_num) Removed.
784         (static var mtf_seq_nums) Removed.
785         (static var mtf_sink) Removed.
786         (static var mtf_case) Removed.
787         (struct mtf_proc) New structure.
788         (cmd_match_files) Use struct mtf_proc instead of static vars.
789         (mtf_processing_finish) Ditto.
790         (mtf_free) Ditto.
791         (mtf_delete_file_in_place) Ditto.
792         (mtf_read_nonactive_records) Ditto.
793         (mtf_compare_BY_values) Ditto.
794         (mtf_processing) Ditto.
795         (mtf_merge_dictionary) Ditto.
796
797 Sun Mar 14 22:48:12 2004  Ben Pfaff  <blp@gnu.org>
798
799         * command.def: Add CASESTOVARS, VARSTOCASES unimplemented commands.
800
801         * dictionary.c: (dict_rename_var) Add assertion.
802         (dict_contains_var) Check by index instead of name.
803
804 Sun Mar 14 22:01:02 2004  Ben Pfaff  <blp@gnu.org>
805
806         Get rid of compaction_necessary, compaction_nval, compaction_case.
807         Redo VFM interface.  Replace disk_sink and memory_sink by
808         storage_sink, disk_source and memory_source by storage_source.
809
810         * vfm.h: (struct case_sink) Add `dict', `idx_to_fv', `value_cnt'
811         members.
812
813         * vfm.c: 
814         (struct write_case_data) Remove `begin_func', `end_func',
815         `func_aux' members.  Add `aux', `trns_case', `sink_case',
816         `cases_written', `cases_analyzed' members.
817         (global var compaction_necessary) Make static.
818         (global var compaction_nval) Removed.
819         (global var compaction_case) Removed.
820         (static var case_count) Removed.
821         (struct procedure_aux_data) Removed.
822         (struct split_aux_data) Removed.
823         (procedure) Remove begin_func, end_func parameters.  Rewrite.
824         (static var not_canceled) Removed.
825         (process_active_file) Removed.
826         (process_active_file_write_case) Removed.
827         (process_active_file_output_case) Removed.
828         (prepare_for_writing) Moved into open_active_file().
829         (arrange_compaction) Ditto.
830         (setup_lag) Ditto.
831         (open_active_file) Rewrote.
832         (write_case) New function.
833         [DEBUGGING] (index_to_varname) Removed.
834         (execute_transformations) New function.
835         (exclude_this_case) Renamed filter_case(), changed interface.
836         (clear_case) Added struct ccase * parameter to interface.
837         (close_active_file) Added struct write_case_data * parameter,
838         rewrote.
839         (disk_sink_create) Removed.
840         (disk_sink_destroy) Removed.
841         (disk_sink_make_source) Removed.
842         (disk_sink_write) Removed.
843         (disk_source_count) Removed.
844         (disk_source_destroy) Removed.
845         (disk_source_read) Removed.
846         (global var disk_sink_class) Removed.
847         (global var disk_source_class) Removed.
848         (global var memory_sink_class) Removed.
849         (global var memory_source_class) Removed.
850         (memory_sink_create) Removed.
851         (memory_sink_destroy) Removed.
852         (memory_sink_make_source) Removed.
853         (memory_sink_write) Removed.
854         (memory_source_count) Removed.
855         (memory_source_destroy) Removed.
856         (memory_source_get_cases) Removed.
857         (memory_source_read) Removed.
858         (memory_source_set_cases) Removed.
859         (struct disk_stream_info) Removed.
860         (struct memory_sink_info) Removed.
861         (struct memory_source_info) Removed.
862         (write_active_file_to_disk) Removed.
863         (destroy_storage_stream_info) New function.
864         (global var null_sink_class) New var.
865         (global var storage_sink_class) New var.
866         (global var storage_source_class) New var.
867         (open_storage_file) New function.
868         (storage_sink_destroy) New function.
869         (storage_sink_make_source) New function.
870         (storage_sink_open) New function.
871         (storage_sink_write) New function.
872         (storage_source_count) New function.
873         (storage_source_destroy) New function.
874         (storage_source_get_cases) New function.
875         (storage_source_on_disk) New function.
876         (storage_source_read) New function.
877         (storage_source_set_cases) New function.
878         (storage_source_to_disk) New function.
879         (storage_to_disk) New function.
880         (struct storage_stream_info) New structure.
881         (write_storage_file) New function.
882         (procedure_write_case) Removed.
883         (create_case_source) Add `struct dictionary *' parameter, all
884         references updated.
885         (create_case_sink) Ditto.
886         (free_case_sink) New function.
887         (struct split_aux_data) New structure.
888         (procedure_with_splits) New function implementing what procedure()
889         used to.
890         (SPLIT_FILE_proc_func) Removed.
891         (procedure_with_splits_callback) New function.
892         (equal_splits) New function.
893         
894         * aggregate.c: Pass around a struct instead of using statics.
895         (static var outfile) Remove.
896         (enum type) Give it tag `missing_treatment'.
897         (static var missing) Remove.
898         (static var sort) Remove.
899         (static var agr_first) Remove.
900         (static var agr_next) Remove.
901         (static var case_count) Remove.
902         (static var prev_case) Remove.
903         (static var buf64_1xx) Remove.
904         (static var buf_1xx) Remove.
905         (struct agr_proc) New structure incorporating the above.
906         (cmd_aggregate) Use new struct.  Clean up error handling using
907         agr_destroy().  Completely rewrite actual implementation of
908         aggregation.
909         (create_sysfile) Add struct agr_proc * parameter, modify
910         accordingly.
911         (parse_aggregate_functions) Ditto.
912         (free_aggregate_functions) Ditto.  Rename agr_destroy().
913         (aggregate_single_case) Add struct agr_proc * parameter, modify
914         accordingly.
915         (accumulate_aggregate_info) Ditto.
916         (dump_aggregate_info) Ditto.
917         (initialize_aggregate_info) Ditto.
918         (agr_00x_trns_proc) Removed.
919         (agr_00x_end_func) Removed.
920         (agr_10x_trns_proc) Removed.
921         (agr_10x_trns_free) Removed.
922         (agr_10x_end_func) Removed.
923         (agr_11x_read) Removed.
924         (agr_11x_finish) Removed.
925         [DEBUGGING] (debug_print) Removed.
926         (write_case_to_sfm) Add struct agr_proc * parameter, modify
927         accordingly.
928         (agr_to_active_file) New function.
929         (presorted_agr_to_sysfile) New function.
930         (sort_agr_to_sysfile) New function.
931
932         * autorecode.c: (cmd_autorecode) Use procedure_with_splits().
933
934         * crosstabs.q: (internal_cmd_crosstabs) Ditto.
935
936         * descript.q: (cmd_descriptives) Ditto.
937
938         * dfm.c: (cmd_begin_data) Check for storage_source_class.  Adapt
939         to new procedure() interface.
940
941         * command.c: (cmd_execute) Adapt to new procedure() interface.
942
943         * dictionary.c: (dict_compact_values) Also delete scratch
944         variables.
945         (dict_get_compacted_value_cnt) New function.
946         (dict_get_compacted_idx_to_fv) New function.
947
948         * flip.c: (cmd_flip) Warn about and cancel TEMPORARY.
949         (cmd_flip) Adapt to new procedure() interface.
950         (flip_sink_write) Use sink->idx_to_fv.
951
952         * frequencies.q: (internal_cmd_frequencies) Use
953         procedure_with_splits().
954
955         * get.c: (cmd_save_internal) Adapt to new procedure() interface.
956         (static var mtf_sink) New static var.
957         (static var mtf_case) New static var.
958         (cmd_match_files) Warn about and cancel TEMPORARY.  Redo the way
959         we actually implement the matching.
960         (mtf_delete_file_in_place) Use mtf_case.
961         (mtf_processing) Use mtf_case and mtf_sink.
962         (cmd_export) Adapt to new procedure() interface.
963
964         * levene.c: (levene) Use procedure_with_splits().
965
966         * list.q: (cmd_list) Use procedure_with_splits().
967
968         * matrix-data.c: (read_matrices_without_rowtype) Adapt to new
969         procedure() interface.
970         (read_matrices_with_rowtype) Ditto.
971
972         * modify-vars.c; (cmd_modify_vars) Warn about and cancel
973         TEMPORARY.  Adapt to new procedure() interface.
974
975         * rename-vars.c: Warn about and cancel TEMPORARY.
976
977         * sort.c: (cmd_sort_cases) Warn about TEMPORARY.
978         (sort_cases) Use dict_get_compacted_value_cnt() instead of
979         compaction_nval.  Adapt to new procedure() interface.  Use
980         storage_source_to_disk().
981         (do_internal_sort) Don't try to dump the cases to memory.
982         (compare_case_lists) Pass null idx_to_fv.
983         (struct initial_run_state) Add `idx_to_fv' member.  Remove
984         `case_size' member.
985         (write_initial_runs) Don't initialize irs->case_size.  Adapt to
986         new procedure() interface.  Reset irs->idx_to_fv after calling
987         procedure().
988         (sort_sink_write) Set irs->idx_to_fv.  Use case_size from struct
989         sort_cases_pgm.  Pass irs, not struct sort_cases_pgm to
990         push_heap().
991         (destroy_initial_run_state) Don't dereference irs after freeing
992         it.
993         (allocate_cases) Don't calculate case_size locally.
994         (compare_record) Add idx_to_fv parameter.
995         (compare_record_run) Change parameter from struct sort_cases_pgm *
996         to struct initial_run_state *.  Pass irs->idx_to_fv to
997         compare_record().
998         (compare_record_run) Third parameter now a struct
999         initial_run_state *.
1000         (output_record) No need for out_case anymore.  Pass irs, not
1001         struct sort_cases_pgm to pop_heap().  Use case_size from struct
1002         sort_cases_pgm.
1003         (merge) Use case_size from struct sort_cases_pgm.
1004         (merge_once) Use case_size from struct sort_cases_pgm.
1005         Pass null pointer to compare_record() as idx_to_fv.
1006         (global var sort_sink_class) Make static.
1007
1008         * t-test.q: (cmd_t_test) Use procedure_with_splits().
1009
1010         * temporary.c: Remove debugging crap.
1011
1012 Sat Mar 13 14:19:52 WST 2004 John Darrington <john@darrington.wattle.id.au>
1013
1014         * t-test.q, levene.c: Fixed up the handling of MISSING values
1015         int the T-TEST
1016
1017 Fri Mar 12 16:23:35 WST 2004 John Darrington <john@darrington.wattle.id.au>
1018
1019         * t-test.q, levene.c: Added support for T-TEST /GROUP where only 
1020         one value is given.
1021
1022 Wed Mar 10 23:25:13 2004  Ben Pfaff  <blp@gnu.org>
1023
1024         Change explicit variable name checks into use of
1025         dict_class_from_id().
1026
1027         * dictionary.c: (dict_create_var)  Change explicit variable name
1028         check into use of dict_class_from_id().
1029
1030         * get.c: (trim_dictionary) Ditto.
1031
1032         * sel-if.c: (cmd_filter) Ditto.
1033
1034         * sysfile-info.c: (cmd_display) Ditto.
1035
1036         * vars-prs.c: (parse_DATA_LIST_vars) Ditto.
1037
1038         * vfm.c: (arrange_compaction) Ditto.
1039
1040         * weight.c: (cmd_weight) Ditto.
1041
1042 Wed Mar 10 21:16:34 2004  Ben Pfaff  <blp@gnu.org>
1043
1044         * temporary.c: (cmd_temporary) When TEMPORARY was the first
1045         transformation following the input program, if any, for some
1046         reason we special-cased f_trns.  That's just wrong.  It should
1047         always be set to n_trns.
1048
1049 Tue Mar  9 23:44:40 2004  Ben Pfaff  <blp@gnu.org>
1050
1051         * format.c: (parse_format_specifier_name) Fix brown-bag bug
1052         introduced in last check-in.
1053
1054 Tue Mar  9 23:10:41 2004  Ben Pfaff  <blp@gnu.org>
1055
1056         * format.c: (global array translate_fmt[]) Removed.
1057         (translate_fmt) New function as replacement.
1058         (parse_format_specifier_name) Rewrite.
1059
1060         * pfm-read.c: (convert_format) Use translate_fmt() instead of
1061         translate_fmt[].
1062
1063         * sfm-read.c: (parse_format_spec) Ditto.
1064
1065         * postscript.c: (text) Fix handling of fonts with missing
1066         ligatures.
1067
1068         * sort.c: (struct external_sort) Add temp_name member.
1069         (destroy_external_sort) Free temp_dir, temp_name members.
1070         (init_external_sort) Allocate temp_name.
1071         (get_temp_file_name) Change prototype.
1072         (open_temp_file) Deal with change to get_temp_file_name().
1073         (close_temp_file) Ditto.
1074         (remove_temp_file) Ditto.
1075         (write_temp_file) Ditto.
1076         (read_temp_file) Ditto.
1077         (sort_sink_destroy) Removed.
1078         (sort_sink_class) Change destroy member to null.
1079
1080 Tue Mar  9 22:36:34 2004  Ben Pfaff  <blp@gnu.org>
1081
1082         Eliminate temp_case.
1083
1084         * aggregate.c: (cmd_aggregate) No need to save/restore temp_case
1085         anymore.  Use agr_11x_finish().
1086         (aggregate_single_case) Make first param const.
1087         (accumulate_aggregate_info) Ditto.
1088         (agr_00x_end_func) Use compaction_case, not temp_case.
1089         (agr_11x_func) Break into agr_11x_read(), agr_11x_finish().
1090
1091         * data-list.c: (struct data_list_pgm) Add `case_size' member.
1092         (cmd_data_list) Initialize case_size.
1093         (read_from_data_list_fixed) Add struct ccase * param, use instead
1094         of temp_case.
1095         (read_from_data_list_free) Ditto.
1096         (read_from_data_list_list) Ditto.
1097         (read_one_case) Rename data_list_trns_proc(), all references
1098         updated.  Add argument in calling above functions.  Use c
1099         argument instead of temp_case.
1100         (destroy_dls) Rename data_list_trns_free(), all references
1101         updated.
1102
1103         * expr-evl.c: (expr_evaluate) Make second parameter const.
1104
1105         * file-type.c: (struct file_type_pgm) Add `case_size' member.
1106         (cmd_end_file_type) Initialize `case_size'.
1107         (file_type_source_read) Add struct ccase * parameter.  Use instead
1108         of temp_case.
1109
1110         * flip.c: Rewritten.
1111
1112         * get.c: (struct get_pgm) New structure to keep track of
1113         case_size.
1114         (cmd_get) Initialize case_size.
1115         (cmd_import) Ditto.
1116         (get_source) Deal with struct get_pgm.
1117         (get_source_read) Add struct ccase * parameter, use instead of
1118         temp_case.
1119         (import_source_read) Ditto.
1120
1121         * get.c: Use a null pointer instead of temp_case to represent the
1122         "current case" in a struct mtf_file's input member.
1123         (mtf_processing_finish) Pass null to mtf_processing(), not
1124         temp_case.
1125         (mtf_read_nonactive_records) Don't set iter->input to temp_case.
1126         (mtf_compare_BY_values) Add extra arg, use instead of null input
1127         members.
1128         (mtf_processing) Use c parameter instead of temp_case.  Pass
1129         compaction_case to process_active_file_output_case().
1130         
1131         * glob.c: (global variable temp_case) Removed.
1132
1133         * inpt-pgm.c: (struct input_program_pgm) Add `case_size' member.
1134         (cmd_input_program) Initialize case_size.  Set
1135         vfm_source->value_cnt.
1136         (init_case) Add struct ccase * parameter, use instead of
1137         temp_case.
1138         (clear_case) Ditto.
1139         (input_program_source_read) Ditto.
1140
1141         * matrix-data.c: (matrix_data_read_without_rowtype) Ditto.
1142         (dump_cell_content) Ditto.
1143         (nr_output_data) Ditto.
1144         (read_matrices_without_rowtype) Ditto.
1145         (matrix_data_read_with_rowtype) Ditto.
1146         (wr_read_splits) Ditto.
1147         (wr_output_data) Ditto.
1148
1149         * sort.h: (struct sort_cases_pgm) New member `case_size'.
1150         
1151         * sort.c: (sort_cases) Initialize scp->case_size.
1152         (struct external_sort) Remove `case_size' member.
1153         (write_initial_runs) Only call vfm_sink->class_destroy if
1154         non-null.
1155         (struct sort_source_aux) New structure.
1156         (sort_source_read_helper) New function.
1157         (sort_source_read) Use sort_source_read_helper().
1158         (read_sort_output) Change interface to be more reasonable.
1159         (read_internal_sort_output) Ditto.
1160         (read_external_sort_output) Ditto.
1161
1162         * vars-prs.c: (dict_class_to_name) Pass return value through
1163         gettext.
1164
1165         * vfm.c: (struct procedure_aux_data) Add `trns_case' member.
1166         (procedure) Initialize trns_case.
1167         (procedure) Pass trns_case to vfm_source->class->read().
1168         Free trns_case.
1169         (process_active_file) Start using struct procedure_aux_data.
1170         (process_active_file_write_case) Pass trns_case to
1171         transformations, lag_case(), clear_case().
1172         (process_active_file_output_case) Add struct ccase * parameter.
1173         (create_trns_case) New function.
1174         (make_temp_case) Removed.
1175         (vector_initialization) Removed.
1176         (close_active_file) Only call make_source if non-null, otherwise
1177         set vfm_source to null pointer.  Don't free temp_case.
1178         (disk_source_read) Add struct ccase * parameter, use instead of
1179         temp_case.
1180         (memory_source_read) Ditto.
1181         (lag_case) Add const struct ccase * member.
1182         (procedure_write_case) Use trns_case instead of temp_case.
1183         (clear_case) Add struct ccase * member, use instead of temp_case.
1184         (exclude_this_case) Ditto.
1185         (create_case_source) Add struct dictionary * parameter, use to
1186         initialize source->value_cnt.
1187
1188         * vfm.h: (struct case_source) Add `value_cnt' member.
1189         (struct case_source_class) Add struct ccase * parameter to `read'
1190         member function pointer.
1191         (struct case_sink_class) Make struct ccase * parameter const in
1192         `write' member function pointer.
1193         
1194 Wed Mar  3 20:44:37 2004  Ben Pfaff  <blp@gnu.org>
1195
1196         Fix a lot of "possibly uninitialized variable" warnings.  Some of
1197         them are even real bugs.  A few of them make me wonder how the
1198         code ever worked.
1199
1200         * aggregate.c: (parse_aggregate_functions) Initialize `function.
1201
1202         * ascii.c: (output_lines) Add default case to switch.
1203
1204         * crosstabs.q: Remove static variable `expected' and all
1205         references to it.
1206         (display_crosstabulation) Always calculate expected value.
1207         (calc_chisq) Ditto.
1208         (output_pivot_table) Initialize `cmp'.
1209         (display_crosstabulation) New variable `last_row', which is
1210         initialized.
1211
1212         * data-in.c: (parse_numeric) Always initialize sign.  How did this
1213         work at all?!
1214
1215         * data-list.c: (repeating_data_trns_proc) Always initialize code.
1216         Always set info.ofs.  (How did this work?!)
1217
1218         * expr-opt.c: (optimize_tree) Always initialize `m'.
1219         (evaluate_tree) Always initialize `c'.  (How did this work?)
1220
1221         * frequencies.q: (frq_custom_variables) Always initialize min,
1222         max.
1223         (frq_custom_grouped) Always initialize `dl'.
1224
1225         * groff-font.c: (groff_read_font) Always initialize char_set.
1226
1227         * matrix-data.c: (nr_output_data) Initialize `split'.
1228         (wr_read_splits) Remove shadowing split_cnt declaration.
1229         (wr_output_data) Initialize `split'.
1230
1231         * output.c: (tokener) Skip add character on syntax error.
1232
1233         * pool.c: (pool_strndup) Always set `copy'.  (How did this work?!)
1234
1235         * postscript.c: (read_ps_encodings) Use line.string instead of
1236         uninitialized `bp'.
1237         (write_text) Add default case to switch.
1238         (text) Always initialize multiple variables.  Fix bug with
1239         ligatures.
1240
1241         * print.c: (fixed_parse_fortran) Initialize head.
1242         (alloc_line) Add default case to switch.
1243
1244         * recode.c: (parse_dest_spec) Handle case where nothing matches.
1245         (recode_trns_proc) Move variable declaration inward.  Add default
1246         case to switch.
1247
1248         * sfm-read.c: (read_header) Initialize skip_amt.
1249
1250         * sysfile-info.c: (display_variables) Always initialize pc.
1251
1252         * vars-prs.c: Initialized `included'.
1253
1254 Wed Mar  3 09:30:09 2004  Ben Pfaff  <blp@gnu.org>
1255
1256         * main.c: (main) sigaction()'s sa_flags member was uninitialized.
1257         Just use signal() instead.
1258
1259 Wed Mar  3 09:26:30 2004  Ben Pfaff  <blp@gnu.org>
1260
1261         Get rid of vfm_sink_info and vfm_source_info.
1262         
1263         * aggregate.c: (agr_00x_end_func) Don't increment
1264         sfm_sink_info.ncases.
1265
1266         * sort.c: (do_internal_sort) Get case count from
1267         vfm_source->class->count().
1268         (struct external_sort) Add `case_size' member.
1269         (do_external_sort) Initialize case_size.
1270         (struct initial_run_state) Add `case_size' member.
1271         (write_initial_runs) Initialize case_size.
1272         (sort_sink_write) Use case_size.
1273         (read_external_sort_output) Use case_size.  Get case_cnt from
1274         initial_runs.
1275
1276         * vfm.c: (struct write_case_data) Add underscores to existing arg
1277         names, all references updated.  Renamed `aux' as `func_aux', all
1278         references updated.  Added new `aux' member.
1279         (global var vfm_source_info) Removed.
1280         (global var vfm_sink_info) Removed.
1281         (struct procedure_aux_data) New.
1282         (struct split_aux_data) New.
1283         (procedure) Use `aux' fields for procedure_aux_data,
1284         split_aux_data.
1285         (process_active_file_write_case) Pass case_count + 1 to
1286         transformation procedures, exclude_this_case().
1287         (process_active_file_output_case) Don't increment
1288         vfm_sink_info.ncases.
1289         (prepare_for_writing) Don't initialize vfm_sink_info.  Don't try
1290         to send data to disk early.
1291         (make_temp_case) Don't use vfm_sink_info.case_size.
1292         (close_active_file) Don't initialize vfm_source_info.
1293         (struct disk_stream_info) New, to allow for case_cnt and case_size fields.
1294         (disk_sink_create) Initialize and/or update disk_stream_info.
1295         (disk_sink_write) Ditto.
1296         (disk_sink_destroy) Ditto.
1297         (disk_sink_make_source) Ditto.
1298         (disk_source_read) Ditto.
1299         (disk_source_destroy) Ditto.
1300         (global var disk_source_class) Add disk_source_count().
1301         (disk_source_count) New function.
1302         (struct memory_sink_info) Add `case_cnt', `case_size' members.
1303         (struct memory_source_info) Ditto.
1304         (memory_sink_create) Deal with case_cnt, case_size.
1305         (memory_sink_write) Ditto.
1306         (memory_sink_make_source) Ditto.
1307         (memory_source_read) Ditto.
1308         (memory_source_count) New function.
1309         (memory_source_class) Add memory_source_count().
1310         (procedure_write_case) Don't use vfm_sink_info.ncases.  Do use
1311         proc_aux->cases_written, and pass it to transformation procedures
1312         and exclude_this_case ().
1313         (exclude_this_case) Add case_num parameter.  Pass it to
1314         expr_evaluate().
1315         (SPLIT_FILE_procfunc) Use split_aux->prev_case instead of static
1316         variable.
1317
1318         * vfm.h: (struct case_source_class) Add `count' member.
1319
1320         * vfmP.h: (struct stream_info) Removed.
1321         (global variable vfm_source_info) Removed.
1322         (global variable vfm_sink_info) Removed.
1323         
1324 Tue Mar  2 23:38:17 2004  Ben Pfaff  <blp@gnu.org>
1325
1326         * var.h: (typedef trns_proc_func) New typedef.
1327         (trns_free_func) New typedef.
1328         (struct trns_header) Change `proc' to type trns_proc_func, `free'
1329         to type trns_free_func.  This only changes the actual type of
1330         trns_proc_func, adding a `case_num' parameter.  Updated all
1331         implementations to use the typedefs instead.
1332
1333         * compute.c: (compute_num) Pass case_num to expr_evaluate().
1334         (compute_num_vec) Ditto.
1335         (compute_str) Ditto.
1336         (compute_str_vec) Ditto.
1337
1338         * do-if.c: (do_if_trns_proc) Ditto.
1339
1340         * expr-evl.c: (expr_evaluate) Add new case_num parameter, use for
1341         OP_CASENUM.
1342
1343         * inpt-pgm.c: (input_program_source_read) Maintain case count,
1344         pass to transformation functions.
1345         (reread_trns_proc) Pass case_num arg to expr_evaluate().
1346
1347         * loop.c: (loop_1_trns_proc) Ditto.
1348         (loop_2_trns_proc) Ditto.
1349         (loop_3_trns_proc) Ditto.
1350
1351         * print.c: (print_space_trns_proc) Ditto.
1352
1353         * sel-if.c: (select_if_proc) Ditto.
1354
1355 Tue Mar  2 11:36:52 2004  Ben Pfaff  <blp@gnu.org>
1356
1357         * frequencies.q: (cleanup_freq_tab) Avoid memory leak by
1358         destroying hash table.
1359
1360         * glob.c: (read_active_file) Variable not referenced, removed.
1361         (cancel_input_pgm) Ditto.
1362
1363         * levene.c: Add #include <stdlib.h> needed to call free().
1364
1365         * aggregate.c: (parse_aggregate_functions) Make `function'
1366         variable const.
1367
1368 Tue Mar  2 11:30:56 2004  Ben Pfaff  <blp@gnu.org>
1369
1370         Start working to eliminate VFM dependence on static variables.
1371
1372         * command.c: (cmd_parse) Use case_source_is_class().
1373
1374         * data-list.c: Rewrite to eliminate use of static variables.
1375
1376         * dfm.c: (cmd_begin_data) Use case_source_is_class().
1377
1378         * file-handle.q: (fh_handle_name) Make parameter const.
1379
1380         * file-type.c: Rewrite to eliminate use of static variables.
1381
1382         * flip.c: Rewrite to eliminate use of static variables.
1383
1384         * format.c: (get_format_var_width) New function.
1385
1386         * get.c: Eliminate use of static variables.
1387
1388         * inpt-pgm.c: Eliminate use of static variables.
1389
1390         * matrix-data.c: Eliminate use of static variables.
1391
1392         * set.q: (set_max_workspace) New variable.
1393         (cmd_set) Use SET WORKSPACE to modify set_max_workspace.
1394
1395         * var.h: (struct case_list) Move here from vfmP.h.
1396
1397         * vars-atr.c: (discard_variables) Handle new vfm_source type.
1398
1399         * vfm.c: (vfm_source) Change type from struct case_stream to
1400         struct case_source.
1401         (vfm_sink) Change type from struct case_stream to struct
1402         case_sink.
1403         (static var paging) Rename workspace_overflow, all references
1404         updated.
1405         (procedure) Use new class structures.
1406         (process_active_file) Ditto.
1407         (process_active_file_write_case) Ditto.
1408         (prepare_for_writing) Use set_max_workspace.  Use new class
1409         structures.
1410         (close_active_file) Use new class structures.  Free old sink.
1411         (global var disk_source_file) Removed.
1412         (global var disk_sink_file) Removed.
1413         (disk_stream_init) Removed.
1414         (disk_stream_read) Removed.
1415         (disk_stream_write) Removed.
1416         (disk_stream_mode) Removed.
1417         (disk_stream_destroy_source) Removed.
1418         (disk_stream_destroy_sink) Removed.
1419         (global var vfm_disk_stream) Removed.
1420         (disk_sink_create) New function.
1421         (disk_sink_write) New function.
1422         (disk_sink_destroy) New function.
1423         (disk_sink_make_source) New function.
1424         (disk_sink_class) New static var.
1425         (disk_source_read) New function.
1426         (disk_source_destroy) New function.
1427         (global var vfm_source_class) New var.
1428         (global var memory_source_cases) Removed.
1429         (global var memory_sink_cases) Removed.
1430         (global var memory_sink_max_cases) Removed.
1431         (struct memory_sink_info) New struct.
1432         (memory_stream_init) Removed.
1433         (memory_stream_read) Removed.
1434         (memory_stream_write) Removed.
1435         (memory_stream_mode) Removed.
1436         (memory_stream_destroy_source) Removed.
1437         (memory_stream_destroy_sink) Removed.
1438         (global var vfm_memory_stream) Removed.
1439         (page_to_disk) Renamed write_active_file_to_disk().
1440         (memory_sink_create) New function.
1441         (memory_sink_write) New function.
1442         (memory_sink_destroy) New function.
1443         (memory_sink_make_source) New function.
1444         (memory_sink_class) New static var.
1445         (memory_source_read) New function.
1446         (memory_source_destroy) New function.
1447         (memory_source_get_cases) New function.
1448         (memory_source_set_cases) New function.
1449         (global var vfm_source_class) New var.
1450         (procedure_write_case) Use new class structures.
1451         (create_case_source) New function.
1452         (case_source_is_complex) New function.
1453         (case_source_is_class) New function.
1454         (create_case_sink) New function.
1455
1456         * vfm.h: (global variable reinit_sysmis) Not used, removed.
1457         (global variable reinit_blanks) Not used, removed.
1458         (global variable init_zero) Not used, removed.
1459         (global variable init_blanks) Not used, removed.
1460         (struct case_source) New struct.
1461         (struct case_source_class) New struct.
1462         (struct case_sink) New struct.
1463         (struct case_sink_class) New struct.
1464         (struct case_stream) Removed.
1465
1466         * vfmP.h: (struct case_list) Moved to var.h.
1467
1468 Tue Mar  2 11:28:30 2004  Ben Pfaff  <blp@gnu.org>
1469
1470         * algorithm.c: (count_equal) New function.
1471         (count_if) New function.
1472         (unique) Add assertions.
1473         (partition) Add assertions.
1474         (is_partitioned) New function.
1475         (copy_if) Add assertions.
1476         (remove_equal) Add assertions.
1477         (lexicographical_compare) Rename lexicographical_compare_3way.
1478         (sort) Add assertions.  Rephrase some code.
1479         (is_sorted) New function.
1480
1481 Sun Feb 29 23:24:57 2004  Ben Pfaff  <blp@gnu.org>
1482
1483         Rewrite SORT CASES.
1484
1485         * sort.c: Completely rewrite.
1486
1487         * sort.h: Expose interface via struct sort_cases_pgm, not via
1488         global variables.
1489
1490         * aggregate.c: (sort) New static var.
1491         (cmd_aggregate) Use sort.
1492         (create_sysfile) Ditto.
1493         (aggregate_single_case) Ditto.
1494         (dump_aggregate_info) Ditto.
1495         (agr_00x_end_func) Ditto.
1496         (debug_print) Ditto.
1497
1498         * var.h: (enum SRT_ASCEND) Removed.
1499         (enum SRT_DESCEND) Removed.
1500         (struct sort_cases_proc) Removed.
1501         (struct variable) Remove p.srt member.
1502
1503 Sun Feb 29 23:22:45 2004  Ben Pfaff  <blp@gnu.org>
1504
1505         Get rid of the old, crappy heap structure and replace it by a new,
1506         shiny, C++ STL-like heap structure.
1507         
1508         * Makefile.am: (pspp_SOURCES) Remove heap.c, heap.h.
1509
1510         * algorithm.c: (push_heap) New function.
1511         (heapify) Ditto.
1512         (pop_heap) Ditto.
1513         (make_heap) Ditto.
1514         (sort_heap) Ditto.
1515         (is_heap) Ditto.
1516         
1517         * heap.c: Removed.
1518
1519         * heap.h: Removed.
1520
1521 Sun Feb 29 23:21:53 2004  Ben Pfaff  <blp@gnu.org>
1522
1523         Increase warning level.
1524         
1525         * Makefile.am: (AM_CFLAGS) Remove -Wnouninitialized.
1526
1527 Sat Feb 21 17:38:58 WST 2004 John Darrington <john@darrington.wattle.id.au>
1528
1529         * main.c: Added a signal handler for SIGSEGV requesting a bug report.
1530          
1531 Fri Feb 20 23:22:14 2004  Ben Pfaff  <blp@gnu.org>
1532
1533         * dictionary.c: (dict_create_var) Fix root cause of bug worked
1534         around by previous change log entry.
1535         
1536         * compute.c: (lvalue_finalize) Remove workaround from previous
1537         change log entry.
1538
1539 Fri Feb 20 14:37:41 WAST 2004 John Darrington <john@darrington.wattle.id.au>
1540
1541         * compute.c: Fixed a bug where the Format was not getting set for 
1542           computed variables (thus causing a crash when SAVEing).
1543
1544         * Added a test to stop this bug ever coming back
1545
1546 Wed Feb 18 22:21:35 2004  Ben Pfaff  <blp@gnu.org>
1547
1548         Got rid of approx.h.  In general, replaced all references to
1549         approx_eq() by ==, approx_lt() by <, etc.  Other types of changes
1550         noted below.
1551
1552         * Makefile.am: (pspp_SOURCES) Removed approx.h.
1553
1554         * data-out.c: (try_F) Replaced test for approx_eq(number, 0.0) by
1555         test for mag < EPSILON.
1556
1557         * misc.h: Add definition of EPSILON.
1558
1559 Wed Feb 18 21:32:44 2004  Ben Pfaff  <blp@gnu.org>
1560
1561         * vfm.c: (procedure) Add check to prevent recursive call.
1562
1563 Wed Feb 18 21:48:54 WST 2004 John Darrington <john@darrington.wattle.id.au>
1564
1565         * Moved the declarations relating to values to their own header file
1566           (val.h)
1567
1568         * Added levene.c and levene.h
1569
1570         * vars-atr.c: Changed the signature of compare_values to 
1571         take const * arguments.
1572                 
1573         * t-test.q: Changed the structure of struct t_test_proc 
1574        variables now contain their own group statistics information.
1575        Eventually, t_test_proc might get renamed, because it'd be 
1576        applicable to other commands too.
1577
1578 Mon Feb 16 23:15:51 2004  Ben Pfaff  <blp@gnu.org>
1579
1580         * data-out.c: Clean up.  Changed interface of convert_*() to take
1581         either a `double' or a `const char *' instead of a `const union
1582         value *'.  Update all implementations of those interfaces.
1583         (data_out) Use switch statements instead of a table.
1584         (convert_AHEX) Rewrite.
1585
1586         * format.h: Update comment.
1587
1588 Mon Feb 16 22:14:36 2004  Ben Pfaff  <blp@gnu.org>
1589
1590         * q2c.c: (dump_header) Add an Emacs header line to output files
1591         that makes generated .c files read-only by default, to make it
1592         difficult to accidentally change generated files.
1593
1594 Mon Feb 16 22:12:07 2004  Ben Pfaff  <blp@gnu.org>
1595
1596         * frequencies.q: (compare_freq_numeric_a) Compare by frequency,
1597         not bogus a->v.c <=> b->v.c pointer compare.
1598         (compare_freq_alpha_a) Ditto.
1599         (compare_freq_numeric_d) Ditto.
1600         (compare_freq_alpha_d) Ditto.
1601         
1602 Mon Feb 16 22:00:53 2004  Ben Pfaff  <blp@gnu.org>
1603
1604         Changed data_out() to store string data directly into a `union
1605         value''s s member, not indirectly into c.
1606
1607         * crosstabs.q: (output_pivot_table) Use format_short() instead of
1608         data_out().
1609         (table_value_missing) Ditto.
1610         (float_M_suffix) Ditto.
1611         (format_short) New function.
1612
1613         * data-in.h: (data_in_finite_line) Remove inline definition.
1614
1615         * data-list.c: (destroy_dls_var_spec) New function.
1616         (destroy_dls) Rewrite in terms of destroy_dls_var_spec().
1617         (data_list_source_destroy_source) Avoid cast.
1618         (struct repeating_data_trns) New field `id_value'.  Update
1619         comments.
1620         (cmd_repeating_data) Initialize id_value.  Use new
1621         repeating_data_trns_free() for freeing REPEATING DATA
1622         transformations.
1623         (rpd_parse_record) Rewrite support for record ID to be less bogus.
1624         (repeating_data_trns_free) New function.
1625
1626         * data-out.c: (data_out) Change return type to `void' by replacing
1627         error returns by writing a message into the output buffer.
1628         (convert_A) Read from v->s instead of v->c.
1629         (convert_AHEX) Ditto.
1630
1631         * expr-evl.c: Update comment.
1632         (expr_evaluate) Add assertion in OP_STRING case.
1633
1634         * format.h: (macro MAX_FORMATTED_LEN) New macro.
1635
1636         * list.q: (list_cases) Update for new data_out() semantics.
1637
1638         * print.c: (print_trns_proc) Ditto.
1639
1640         * tab.c: (tab_value) Ditto.
1641         (tab_float) Avoid stupid cast.
1642
1643         * var.h: Update comments.
1644         (macro MAX_STRING) New macro.
1645         (macro MAX_ELEMS_PER_VALUE) New macro.
1646
1647         * vars-atr.c: (compare_values) New function.
1648
1649         * vfm.c: (dump_splits) Update for new data_out() semantics.
1650
1651 Mon Feb 16 21:45:47 2004  Ben Pfaff  <blp@gnu.org>
1652
1653         * crosstabs.q: (struct table_entry) Rename v[] to values[].  All
1654         references updated.
1655         (struct crosstab) Rename v[] to vars[].  All references updated.
1656         (hash_table_entry) Replace the hash algorithm and fix a bug at the
1657         same time, which caused the hash value to depend only on a single
1658         value, not all of the variables' values.
1659         
1660 Mon Feb 16 12:49:53 2004  Ben Pfaff  <blp@gnu.org>
1661
1662         Clean up struct dictionary's value_cnt usage.
1663
1664         * dictionary.c: Add a function comment to each function.
1665         (struct dictionary) Rename value_cnt to next_value_idx, which more
1666         accurately reflects its meaning.  All references updated.
1667         (dict_rename_vars) Add assertion.
1668         (dict_get_value_cnt) Rename dict_get_next_value_idx().  All
1669         references updated.
1670         (dict_get_case_size) New function.
1671
1672         * aggregate.c: (create_sysfile) Use dict_get_case_size().
1673
1674         * get.c: (mtf_read_nonactive_records) Ditto.
1675
1676         * sort.c: (allocate_cases) Ditto.
1677         (write_initial_runs) Ditto.
1678         (merge) Ditto.
1679         (merge_once) Ditto.
1680
1681         * vfm.c: (prepare_for_writing) Ditto.
1682         (setup_lag) Ditto.
1683         (lag_case) Ditto.
1684
1685 Mon Feb 16 00:17:55 2004  Ben Pfaff  <blp@gnu.org>
1686
1687         Make vfm.c slightly less grotesque.
1688
1689         * vfm.c: (filter_var) Removed.
1690         (filter_index) Removed.
1691         (FILTERED macro) Removed.
1692         (exclude_this_case) New function.
1693         (process_active_file_write_case) Use exclude_this_case() instead
1694         of FILTERED and inline tests.
1695         (procedure_write_case) Ditto.
1696         (setup_filter) Removed.
1697         (open_active_file) Don't call setup_filter().
1698         (close_active_file) Call dict_get_filter() instead of checking
1699         filter_var.
1700
1701 Mon Feb 16 00:01:53 2004  Ben Pfaff  <blp@gnu.org>
1702
1703         * var.h: (struct variable) Update comments.
1704
1705 Sun Feb 15 23:14:59 2004  Ben Pfaff  <blp@gnu.org>
1706
1707         New functions dict_create_var_assert(), dict_lookup_var_assert().
1708         Converted several dict_*_var()/assert pairs into a single
1709         dict_*_var_assert().
1710
1711         * dictionary.c: (dict_create_var_assert) New function.
1712         (dict_lookup_var_assert) New function.
1713
1714 Sun Feb 15 23:06:08 2004  Ben Pfaff  <blp@gnu.org>
1715
1716         Got rid of "struct long_vec", envector(), devector(), etc.  Added
1717         two members `init', `reinit' to struct variable as a substitute.
1718         
1719         * Makefile.am: (pspp_SOURCES) Removed cases.c, cases.h.
1720         
1721         * cases.c: Removed.
1722
1723         * cases.h: Removed.
1724
1725         * aggregate.c: (parse_aggregate_functions) destvar doesn't need
1726         init.
1727
1728         * autorecode.c: (cmd_autorecode) destvars don't need init.
1729
1730         * compute.c: (lvalue_finalize) Set reinit.
1731
1732         * data-list.c: (fixed_parse_compatible) Don't need init usually.
1733         (dump_fmt_list) Ditto.
1734         (parse_free) Ditto.
1735
1736         * descript.q: (run_z_pass) Don't need init for z-scores.
1737
1738         * dictionary.c: (dict_create_var) Initialize `init', `reinit'
1739         members.
1740         (dict_clone_var) Copy `reinit' member, initialize `init' member.
1741
1742         * glob.c: (init_glob) Remove vec_init() calls.
1743
1744         * inpt-pgm.c: (cmd_end_input_program) Use `reinit', not `left'.
1745         
1746         * loop.c: (internal_cmd_loop) Don't need to call envector().
1747
1748         * numeric.c: (cmd_numeric) Ditto.
1749         (cmd_string) Ditto.
1750         (cmd_leave) Ditto.  Set `init', `reinit' members.
1751
1752         * recode.c: (cmd_recode) Don't need to call envector().
1753
1754         * repeat.c: (internal_cmd_do_repeat) Ditto.
1755
1756         * var.h: (struct variable) Remove `left'.  Add `init', `reinit'.
1757         (force_create_variable) Removed prototype.
1758         (force_dup_variable) Ditto.
1759
1760         * vector.c: (cmd_vector) Don't need to call envector().
1761
1762         * vfm.c: (reinit_sysmis) Removed.
1763         (reinit_blanks) Removed.
1764         (init_zero) Removed.
1765         (init_blanks) Removed.
1766         (process_active_file_write_case) No need to deal with vectors.
1767         Call clear_temp_case().
1768         (vector_initialization) Rewrite to use `init', `reinit'.
1769         (close_active_file) No need to call vec_clear().
1770         (procedure_write_case) Call clear_temp_case().
1771         (clear_temp_case) New function.
1772
1773 Sun Feb 15 20:50:36 2004  Ben Pfaff  <blp@gnu.org>
1774
1775         * pfm-write.c: (bufwrite) Get rid of nasty cast that also invoked
1776         undefined behavior.
1777
1778 Thu Feb 12 23:35:15 2004  Ben Pfaff  <blp@gnu.org>
1779
1780         Add auxiliary argument to procedure() interface.  Associated small
1781         clean-ups of vfm interface.
1782         
1783         * Updated every caller of procedure() and process_active_file() to
1784         reflect modified interface.  Simple, ordinary changes not listed
1785         otherwise below.
1786
1787         * Updated every function that implements struct case_stream's
1788         `read' function to take a write_case_func and a write_case_data.
1789         Also updated every caller of write_case() to instead call them
1790         through these arguments.  In some cases this meant that the extra
1791         args had to be threaded through a couple of extra levels.  This
1792         wasn't difficult or interesting so the details won't be given.
1793
1794         * data-list.c: (struct repeating_data_trns) Add members
1795         `write_case', `wc_data' as kluge.
1796         (read_one_set_of_repetitions) Rename repeating_data_trns_proc and
1797         make non-static.
1798         (repeating_data_set_write_case) New function.
1799
1800         * data-list.h: New file to declare repeating_data_trns_proc() and
1801         repeating_data_set_write_case().
1802
1803         * inpt-pgm.c: (input_program_source_read) Call
1804         repeating_data_set_write_case() for all the REPEATING DATA
1805         transformations, so that they know where to send their cases.
1806         It's a big kluge.  Also kluge in END CASE.
1807         (end_case_trns_proc) Never called anymore, but we still need it,
1808         so just assert(0).
1809
1810         * sort.c: (read_sort_output) Update to match struct case_stream
1811         `read' member.
1812
1813         * vfm.c: (struct write_case_data) New structure.
1814         (proc_func) Removed.
1815         (virt_proc_func) Removed.
1816         (begin_func) Removed.
1817         (virt_begin_func) Removed.
1818         (end_func) Removed.
1819         (write_case) Removed.
1820         (procedure) Added an auxiliary parameter to each function pointer
1821         argument's prototype.  Added an auxiliary data parameter.
1822         Rewrote.
1823         (process_active_file) Ditto.
1824         (process_active_file_write_case) Pass aux data along.
1825         (close_active_file) Ditto.
1826         (procedure_write_case) Ditto.
1827         (SPLIT_FILE_procfunc) Ditto.
1828
1829         * vfm.h: (typedef write_case_data) New.
1830         (typedef write_case_func) New.
1831         (struct case_stream) Add parameters to `read' member prototype.
1832         
1833 Thu Feb 12 19:24:53 WST 2004 John Darrington <john@darrington.wattle.id.au>
1834
1835         * t-test.q:  Added calculations for independent samples. (But no Levene
1836         test yet!)
1837
1838         * Makefile.am: Moved q_sources_c into own variable 
1839
1840 Wed Feb 11 23:56:51 2004  Ben Pfaff  <blp@gnu.org>
1841
1842         Miscellaneous cleanups.
1843         
1844         * Change unused to UNUSED in many source files to reflect modified
1845         pref.h.  Change use of __WIN32__, __MSDOS, __DJGPP__,
1846         __CYGWIN32__, __unix__, and unix not to assume that they're
1847         defined to a nonzero value.  Change use of __attribute__ to use
1848         NO_RETURN or PRINTF_FORMAT instead.
1849         
1850         * alloc.h: Move definitions for local_alloc(), local_free() here
1851         from ../pref.h.orig and simplify.
1852
1853         * expr-evl.c: Instead of working differently based on PAGED_STACK,
1854         use a pool allocator unconditionally.
1855         (CHECK_STRING_SPACE) Removed.
1856         (ALLOC_STRING_SPACE) Removed.
1857         (expr_evaluate) Use e->pool instead of CHECK_STRING_SPACE and
1858         ALLOC_STRING_SPACE.
1859
1860         * expr-opt.c: (dump_expression) Allocate string pool.
1861
1862         * expr-prs.c: (expr_free) Free string pool.
1863
1864         * pool.c: (pool_destroy) This pool must be removed from its
1865         parent's list of gizmos, not from its own.  Use free_all_gizmos().
1866         (pool_clear) New function.
1867         (free_all_gizmos) New function.
1868         (pool_alloc) Use space in empty block after this one if any.
1869         (pool_release) Only empty out blocks, don't actually free() them.
1870
1871         * print.c: Get rid of PAGED_STACK special case by always
1872         dynamically allocating line buffers.
1873         (struct print_trns) Always include the `line' member.
1874         (internal_cmd_print) Always initialize the `line' member.
1875         (alloc_line) Always allocate memory for `line'.
1876         (print_trns_proc) Always initialize buf from `line' member.
1877         (print_trns_free) Always free `line' memory.
1878
1879         * sort.c: (allocate_file_handles) Special-case MS-DOS for mkdir()
1880         call.
1881         
1882 Wed Feb 11 20:33:18 2004  Ben Pfaff  <blp@gnu.org>
1883
1884         * flip.c: Fixed crash from FLIP when a numeric variable is
1885           specified on NEWNAMES and a large value is used, and a couple of
1886           other minor bugs besides.
1887           (struct varname) Make name a 9-character fixed-size array
1888           instead of a 1-character variable size array.
1889           (make_new_var) Allow digits in variable names.
1890           (flip_stream_write) Limit numeric values to 8 characters and
1891           format system missing and very large and small values more
1892           appropriately.
1893
1894 Thu Feb  5 13:19:06 WAST 2004 John Darrington <john@darrington.wattle.id.au>
1895
1896         * command.c: Fixed test on command return status for the correct 
1897           value,  which had been causing a crash under certain invalid input.
1898
1899 Wed Feb  4 15:34:11 WST 2004 John Darrington <john@darrington.wattle.id.au>
1900
1901         * t-test.q: Added calculations for the one sample variant of the T-TEST
1902
1903 Tue Feb  3 20:09:54 2004  Ben Pfaff  <blp@gnu.org>
1904
1905         * tab.c: (render_strip) Fix bug that sometimes caused joined text
1906           in joined cells to be rendered outside box boundaries.
1907
1908 Tue Feb  3 18:56:45 WST 2004 John Darrington <john@darrington.wattle.id.au>
1909
1910         * random.c (rng_create): Fixed seeding so that it gets reseeded after
1911         SET seed=xx has been called.
1912
1913 Mon Jan 19 14:08:09 2004  Ben Pfaff  <blp@gnu.org> 
1914
1915         * random.c (rng_get_double): Fix always-returning-zero bug in my
1916         preferred way, and at the same time make sure rounding doesn't
1917         bite us.
1918
1919 Thu Jan  1 23:16:41 2004  Ben Pfaff  <blp@gnu.org>
1920
1921         * html.c: (change_attributes) Dead code, removed.
1922         (escape_string) Eliminate code to call change_attributes() that
1923         never actually called it.
1924         (output_tab_table) Get rid of dependence on tab_hit
1925         and struct tab_joined_cell's hit member, which are abominations.
1926
1927         * tab.c: (tab_output_text) Don't call
1928         d->class->text_set_font_by_name if it's a null pointer.
1929         (macro UNROLL_LOOP) Eliminate.
1930         (macro UNROLL_3_LOOPS) Eliminate.
1931         (tabi_render) Rewrite not to use the above macros.
1932
1933 Thu Jan  1 23:09:07 2004  Ben Pfaff  <blp@gnu.org>
1934
1935         Start working on a new output driver system, one that doesn't suck
1936         so much, by adding a "device-independent" output driver.  The idea
1937         is to write out only a single output stream, then use separate
1938         processes to translate them into whatever formats we want.  This
1939         is similar to how "groff" works with its various output drivers
1940         (grops, grotty, grodvi, ...).
1941         
1942         * Makefile.am: (pspp_SOURCES) Add devind.c, devind.h.
1943
1944         * list.q: (write_all_headers) Stub out devind class.
1945         (clean_up) Ditto.
1946         (determine_layout) Ditto.
1947         (list_cases) Ditto.
1948
1949         * output.c: (outp_init) Add devind class.
1950
1951         * devind.c: New file.
1952
1953         * devind.h: New file.
1954
1955 Thu Jan  1 23:08:14 2004  Ben Pfaff  <blp@gnu.org>
1956
1957         * frequencies.q: (hash_value_alpha) Fixed up the previous change
1958         to use the proper string length.
1959
1960 Wed Dec 31 16:27:33 WAST 2003 John Darrington <john@darrington.wattle.id.au>
1961
1962         * Fixed bug where FREQ would crash on alpha values
1963
1964 Tue Dec 30 22:42:57 2003  Ben Pfaff  <blp@gnu.org>
1965
1966         * Removed bletcherous alloca() workarounds for AIX from top of
1967         many files.  AIX can use the alternative alloca() implementation
1968         instead.
1969
1970 Tue Dec 30 22:35:16 2003  Ben Pfaff  <blp@gnu.org>
1971
1972         * ascii.c: (ascii_option) Fix implementation of headers option.
1973
1974 Tue Dec 30 22:32:53 2003  Ben Pfaff  <blp@gnu.org>
1975
1976         * ascii.c: Add a "squeeze" option to the ASCII driver to squeeze
1977         multiple blank lines into one.
1978         (struct ascii_driver_ext) Add squeeze_blank_lines option.
1979         (ascii_preopen_driver) Initialize squeeze_blank_lines.
1980         (static var option_tab) Add squeeze entry.
1981         (ascii_option) Set squeeze_blank_lines.
1982         (output_lines) Implement squeezing blank lines.
1983
1984 Wed Dec 31 07:19:46 WST 2003 John Darrington <john@darrington.wattle.id.au>
1985
1986         * Removed redundant code from output.h
1987
1988 Sat Dec 27 22:17:52 2003  Ben Pfaff  <blp@gnu.org>
1989
1990         Dictionary classes: each variable is "ordinary", "system", or
1991         "scratch".
1992
1993         * var.h: (enum dict_class) New enum.
1994
1995         * vars-prs.c: (dict_class_from_id) New function.
1996         (dict_class_to_name) New function.
1997
1998 Sat Dec 27 22:16:06 2003  Ben Pfaff  <blp@gnu.org>
1999
2000         * var.h: (struct freq_tab_set) Removed (not used).
2001
2002 Sat Dec 27 22:15:21 2003  Ben Pfaff  <blp@gnu.org>
2003
2004         * value-labels.c: (val_labs_destroy) vls needs to be freed too.
2005
2006 Sat Dec 27 22:10:49 2003  Ben Pfaff  <blp@gnu.org>
2007
2008         * stats.c: (hypercube) Rename pow4().  All references updated.
2009
2010 Sat Dec 27 22:05:49 2003  Ben Pfaff  <blp@gnu.org>
2011
2012         * rename-vars.c: (cmd_rename_variables) Rewritten.
2013         (compare_name) Removed.
2014
2015 Sat Dec 27 22:03:51 2003  Ben Pfaff  <blp@gnu.org>
2016
2017         var_set feature, and code taking advantage of it.
2018         
2019         * crosstabs.q: (static var var_dict) Removed.
2020         (static var variables) New variable.
2021         (static var variables_cnt) New variable.
2022         (cmd_crosstabs) Free variables instead of var_dict.
2023         (internal_cmd_crosstabs) Initialize and use variables,
2024         variables_cnt instead of var_dict.
2025         (free_var_dict) Removed.
2026         (crs_custom_tables) Use var_set instead of a copied dictionary.
2027         (crs_custom_variables) Set up variables, variables_cnt instead of
2028         var_dict.
2029         [DEBUGGING] (debug_print) Ditto.
2030
2031         * means.q: (mns_custom_tables) Use var_set instead of a copied
2032         dictionary.
2033
2034         * vars-prs.c: (parse_vs_variable) New function.
2035         (parse_dict_variable) Rewritten.
2036         (parse_variable) Rewritten.
2037         (parse_variables) Renamed parse_var_set_vars(), rewritten.
2038         (parse_variables) New function in terms of parse_var_set_vars().
2039         Now requires its first argument to be non-null.  All references
2040         that passed a null pointer updated to pass default_dict instead.
2041         (macro id_dict) Removed.
2042         (parse_DATA_LIST_vars) Add assertions.
2043         (parse_mixed_vars) Ditto.
2044         (struct var_set) New structure.
2045         (var_set_get_cnt) New function.
2046         (var_set_get_var) New function.
2047         (var_set_lookup_var) New function.
2048         (var_set_destroy) New function.
2049         (dict_var_set_get_cnt) New function.
2050         (dict_var_set_get_var) New function.
2051         (dict_var_set_lookup_var) New function.
2052         (dict_var_set_destroy) New function.
2053         (var_set_create_from_dict) New function.
2054         (struct array_var_set) New structure.
2055         (array_var_set_get_cnt) New function.
2056         (array_var_set_get_var) New function.
2057         (array_var_set_lookup_var) New function.
2058         (array_var_set_destroy) New function.
2059         (var_set_create_from_array) New function.
2060
2061         * q2c.c: (dump_parser) Use parse_variables(default_dict, ...)
2062         instead of parse_variables(NULL, ...) in output code.
2063
2064 Sat Dec 27 21:38:53 2003  Ben Pfaff  <blp@gnu.org>
2065
2066         Change inp_init from a 2-bit vector to an ordinary array.
2067         Initialize it all in cmd_end_input_program() instead of in
2068         create_variable().
2069
2070         * inpt-pgm.c: (enum value_init_type) New enum.
2071         (global var inp_init) Change to `enum value_init_type *', make
2072         static.
2073         (inp_init_size) Removed.
2074         (inp_nval) Change to `size_t', make static.
2075         (cmd_input_program) Don't initialize inp_init or inp_init_size.
2076         (cmd_end_input_program) Initialize inp_init, inp_nval.
2077         (init_case) Rewrite.
2078         (clear_case) Rewrite.
2079
2080         * inpt-pgm.h: Removed.
2081
2082 Sat Dec 27 21:36:38 2003  Ben Pfaff  <blp@gnu.org>
2083
2084         * hash.c: (hsh_hash_bytes) Use Fowler-Noll-Vo hash instead of
2085         Colin Plumb hash.  It is simpler and should better resist
2086         collisions.
2087         (hsh_hash_string) Ditto.
2088
2089 Sat Dec 27 21:34:57 2003  Ben Pfaff  <blp@gnu.org>
2090
2091         * get.c: (export_write_case_func) Remove debug printing code.
2092
2093 Sat Dec 27 21:11:09 2003  Ben Pfaff  <blp@gnu.org>
2094
2095         * get.c: (cmd_save_internal) Rename parameter.  Use &t->h instead
2096         of cast.
2097         (save_write_case_func) Use &trns->h instead of cast.
2098         (cmd_export) Use &t->h instead of cast.
2099
2100 Sat Dec 27 20:57:42 2003  Ben Pfaff  <blp@gnu.org>
2101
2102         Moved vectors into the dictionary.
2103
2104         * var.h: (struct vector) Moved here from vector.h.  `index' member
2105         renamed `idx', `v' renamed `var', `nv' renamed `cnt'.  All
2106         references updated.
2107         
2108         * vector.h: Removed.
2109
2110         * vector.c: (global var vec) Removed.
2111         (global var nvec) Removed.
2112         (cmd_vector) Rewritten.
2113         (find_vector) Removed.
2114
2115         * dictionary.c: (dict_create_vector) New function.
2116         (dict_get_vector) New function, replaces reading global vec[]
2117         array.
2118         (dict_get_vector_cnt) New function, replaces reading global nvec
2119         variable.
2120         (dict_lookup_vector) New function, replaces find_vector().
2121         (dict_clear_vectors) New function.
2122
2123 Sat Dec 27 20:54:01 2003  Ben Pfaff  <blp@gnu.org>
2124
2125         Start to move away from `struct variable' p `union' member to void
2126         * aux member.
2127
2128         * var.h: (struct variable) Add `aux' member.
2129
2130 Sat Dec 27 20:36:25 2003  Ben Pfaff  <blp@gnu.org>
2131
2132         Get rid of struct variable `foo' member.
2133
2134         * frequencies.q: (internal_cmd_frequencies) Use p.frq.used instead
2135         of foo.
2136         (frq_custom_variables) Ditto.
2137         (frq_custom_grouped) Ditto.
2138
2139         * get.c: (struct save_trns) Change `var' member from `int *' to
2140         `struct variable **'.
2141         (cmd_save_internal) Use aux instead of foo.
2142         (save_trns_proc) Use revised `var' member.
2143         (static var mtf_seq_no) Renamed mtf_seq_num.
2144         (static var mtf_seq_nums) New static var.
2145         (cmd_match_files) Initialize mtf_seq_nums.
2146         (mtf_free) Free mtf_seq_nums.
2147         (mtf_processing) Use mtf_seq_nums instead of foo.
2148         (mtf_merge_dictionary) No need to initialize mv->foo.
2149         (cmd_export) Use aux instead of foo.  Use revised `var' member.
2150         (mns_custom_tables) Don't use foo to check for duplicates, that's
2151         what PV_NO_DUPLICATE is for.
2152
2153         * var.h: (struct variable) Remove `foo' member.
2154         (struct frequencies_proc) New member.
2155         
2156 Sat Dec 27 19:46:13 2003  Ben Pfaff  <blp@gnu.org>
2157
2158         Clean up COMPUTE and IF.
2159
2160         * compute.c: More or less rewrite the darn thing.
2161         (struct compute_trns) Rename and reorder and add and delete
2162         members.
2163         (cmd_compute) Rewrite.
2164         (compute_num) Make conditional on test expression.  Now used for
2165         both COMPUTE and IF.
2166         (compute_num_vec) Ditto.
2167         (compute_str) Ditto.
2168         (compute_str_vec) Ditto.
2169         (cmd_if) Rewrite.
2170         (if_num) Removed.
2171         (if_num_vec) Removed.
2172         (if_str) Removed.
2173         (if_str_vec) Removed.
2174         (parse_target_expression) Renamed parse_rvalue_expression(),
2175         rewritten.
2176         (new_trns) Renamed compute_trns_create(), rewritten.
2177         (delete_trns) Removed.
2178         (free_trns) Renamed compute_trns_free(), rewritten.
2179         (struct lvalue) New structure.
2180         (parse_var_or_vec) Renamed lvalue_parse(), rewritten.
2181         (lvalue_get_type) New function.
2182         (lvalue_is_vector) New function.
2183         (lvalue_finalize) New function.
2184         (lvalue_destroy) New function.
2185         
2186 Sat Dec 27 19:44:14 2003  Ben Pfaff  <blp@gnu.org>
2187
2188         * command.def: Disallow MODIFY VARS in input mode, so that
2189         variables can't get dropped and confuse cmd_end_input_program()'s
2190         attempt to fill inp_init[].
2191         
2192         * modify-vars.c: (static var forward_positional_ordering) New
2193         variable.
2194         (struct var_modification) Entirely changed.
2195         (rearrange_dict) Interface changed, rewritten.
2196         (cmd_modify_vars) Deal with modified struct var_modification, much
2197         rewritten.
2198         (struct var_renaming) New structure.
2199         (compare_var_renaming_by_new_name) New function.
2200         (validate_var_modification) New function.
2201
2202         * var.h: (struct modify_vars_proc) Removed.
2203         (struct variable) Removed member p.mfv.
2204
2205 Sat Dec 27 19:40:26 2003  Ben Pfaff  <blp@gnu.org>
2206
2207         Make EVALUATE a valid command whether we're debugging or not, so
2208         that `make check' can succeed regardless of whether debugging is
2209         turned on.
2210         
2211         * command.def: [GLOBAL_DEBUGGING] Drop the #if.
2212
2213         * compute.c: [GLOBAL_DEBUGGING] (cmd_evaluate) Drop the #if.
2214
2215 Sat Dec 27 19:34:40 2003  Ben Pfaff  <blp@gnu.org>
2216
2217         * apply-dict.c: (cmd_apply_dictionary) Replace a ghastly switch
2218         statement by a simple if test.
2219
2220         * dfm.c: (dfm_get_record) Add assertion.
2221
2222 Sat Dec 27 17:51:26 2003  Ben Pfaff  <blp@gnu.org>
2223
2224         For each file x.c, move #include "x.h" to the very top of the
2225         include list, to catch x.h failing to include the proper headers.
2226
2227 Sat Dec 27 17:50:19 2003  Ben Pfaff  <blp@gnu.org>
2228
2229         * algorithm.c: (find) New function.
2230         (remove_equal) New function.
2231         (set_difference) New function.
2232         (adjacent_find_equal) New function.
2233         [TEST_UNIQUE] Removed test case.
2234         (copy_if) Find end test.
2235
2236 Sat Dec 27 17:42:45 2003  Ben Pfaff  <blp@gnu.org>
2237
2238         * dictionary.c: (dict_get_case_weight) New convenience function.
2239
2240         * aggregate.c: (accumulate_aggregate_info) Use
2241         dict_get_case_weight().
2242
2243         * frequencies.q: (calc_general) Ditto.
2244         (calc_integer) Ditto.
2245         (calc) Ditto.
2246
2247         * t-test.q: (groups_calc) Ditto.
2248         (z_calc) Ditto.
2249
2250 Sat Dec 27 17:29:45 2003  Ben Pfaff  <blp@gnu.org>
2251
2252         * glob.c: (global var default_dict) Change from `struct
2253         dictionary' to `struct dictionary *'.  All references changed.
2254         (init_glob) Initialize default_dict with dict_create().
2255
2256 Sat Dec 27 17:06:06 2003  Ben Pfaff  <blp@gnu.org>
2257
2258         struct dictionary now made opaque.  All related functions:
2259
2260         * get.c: (rename_variables) Removed.
2261         (dict_delete_run) Removed.
2262         
2263         * temporary.c: (copy_variable) Removed.
2264         (new_dictionary) Removed.
2265         (save_dictionary) Removed.
2266         (restore_dictionary) Removed.
2267         (free_dictionary) Removed.
2268
2269         * vars-atr.c: (clear_default_dict) Removed.
2270         (find_variable) Removed.
2271         (find_dict_variable) Removed.
2272         (create_variable) Removed.
2273         (delete_variable) Removed.
2274         (common_init_stuff) Removed.
2275         (init_variable) Removed.  Updating of inp_init moved into
2276         cmd_end_input_program().
2277         (replace_variable) Removed.
2278         (rename_variable) Removed.
2279         (clear_variable) Removed.
2280         (dup_variable) Removed.
2281
2282         * vars-prs.c: (is_varname) Removed.
2283         (is_dict_varname) Removed.
2284         (fill_all_vars) Removed.
2285
2286         * vector.c: (find_vector) Removed.
2287
2288         * weight.c: (stop_weighting) Removed.
2289
2290         * dictionary.c: New file.
2291         (dict_create) New, replaces new_dictionary().
2292         (dict_clone) New, replaces save_dictionary() and
2293         restore_dictionary().
2294         (dict_clear) New, replaces clear_default_dict().
2295         (dict_destroy) New, replaces free_dictionary().
2296         (dict_get_var_cnt) New function, replaces references to
2297         dict->nvar.
2298         (dict_get_var) New function, replaces references to dict->var[i].
2299         (dict_get_vars) New function, replaces fill_all_vars().
2300         (dict_create_var) New, replaces create_variable().  Interface
2301         drops `type' parameter, using a zero `width' to designate numeric.
2302         (dict_clone_var) New, replaces dup_variable().
2303         (dict_rename_var) New, replaces rename_variable().
2304         (dict_lookup_var) New, replaces find_variable(),
2305         find_dict_variable(), is_varname().
2306         (dict_contains_var) New function.
2307         (compare_variable_dblptrs) New function.
2308         (dict_delete_var) New function, replaces clear_variable().
2309         (dict_delete_vars) New function, replaces dict_delete_run().
2310         (dict_reorder_vars) New function.
2311         (dict_rename_vars) New function, replaces rename_variables().
2312         (dict_get_weight) New function, replaces reading dict->weight_var.
2313         (dict_set_weight) New function, replaces writing dict->weight_var
2314         or calling stop_weight(dict).
2315         (dict_get_filter) New function, replaces reading dict->filter_var.
2316         (dict_set_filter) New function, replaces writing dict->filter_var.
2317         (dict_get_case_limit) New function, replaces reading dict->N.
2318         (dict_set_case_limit) New function, replaces writing dict->N.
2319         (dict_get_value_cnt) New function, replaces reading dict->nval.
2320         (dict_compact_values) New function, replaces a loop that was
2321         replicated in several places.
2322         (dict_get_split_vars) New function, replaces reading dict->splits.
2323         (dict_get_split_cnt) New function, replaces reading
2324         dict->n_splits.
2325         (dict_set_split_vars) New function, replaces writing dict->splits.
2326         (dict_get_label) New function, replaces reading dict->label.
2327         (dict_set_label) New function, replaces writing dict->label.
2328         (dict_get_documents) New function, replaces reading
2329         dict->documents.
2330         (dict_set_documents) New function, replaces writing
2331         dict->documents.
2332         
2333         All references to above functions updated.
2334         
2335         * aggregate.c: (cmd_aggregate) Copy file label and documents from
2336         old dictionary to new by hand, because dict_create() can't do it
2337         itself.  Use dict_set_documents(), dict_set_split_vars().
2338
2339         * temporary.c: (cancel_temporary) Also set temp_dict to NULL after
2340         calling dict_destroy().
2341
2342         * data-list.c: (dls_var_spec) Remove `type' member, replace by
2343         `width'.
2344         (fixed_parse_compatible) Some slightly nontrivial changes for
2345         dict_create_var().
2346         (dump_fmt_list) Ditto.
2347         (parse_free) Ditto.
2348
2349         * file-type.c: (create_col_var) Ditto.
2350
2351         * get.c: (cmd_get) Use dict_compact_values() instead of a loop.
2352         (trim_dictionary) Use dict_delete_vars(), dict_reorder_vars().
2353         (rename_variables) Use dict_rename_vars().
2354         (mtf_merge_dictionary) Use dict_get_documents(),
2355         dict_set_documents(), dict_compact_values().
2356
2357         * pfm-read.c: (read_variables) Deal with changes to weighting.
2358
2359         * q2c.c: (dump_parser) Use dict_lookup_var() instead of
2360         is_varname() in output code.
2361
2362         * sfm-read.c: (read_header) Use dict_create(), dict_set_label(),
2363         other dictionary functions.
2364
2365         * title.c: (add_document_line) Use dict_get_documents(),
2366         dict_set_documents().
2367
2368         * vars-atr.c: (discard_variables) Use dict_clear(default_dict),
2369         reset default_handle by hand.  dict_clear() will clear vectors so
2370         there's no need for that by hand.
2371
2372         * vfm.c: (close_active_file) Move call to finish_compaction()
2373         earlier, so that we can do the compaction as a single step using
2374         dict_compact_values().  Use dict_clear_vectors().
2375         (finish_compaction) Use dict_delete_var(), dict_compact_values().
2376                 
2377         Some functions don't have replacements:
2378
2379         * vars-atr.c: (force_create_variable) Removed.  All references
2380         updated to dict_create_var() followed by an assertion.
2381         (force_dup_variable) Removed.  All references updated to
2382         dict_clone_var() followed by an assertion.
2383         
2384         * weight.c: (update_weighting) Removed.  No longer necessary, so
2385         all references removed.
2386
2387 Sat Dec 27 16:43:01 2003  Ben Pfaff  <blp@gnu.org>
2388
2389         Clean up AGGREGATE.
2390         
2391         * aggregate.c: Eliminate separation of weighted and unweighted
2392         case.  It made the code too obscure and I doubt it was actually
2393         faster.  Instead, all code uses the "weighted" code, because
2394         that's a generalization of the "unweighted" code.
2395         (FWEIGHT) Removed.
2396         (FOPTIONS) Ditto.
2397         (parse_aggregate_functions) No need to set FWEIGHT.
2398         (accumulate_aggregate_info) Get rid of FWEIGHT cases.
2399         (dump_aggregate_info) Ditto.
2400         (initialize_aggregate_info) No need for special plain_function
2401         that gets rid of FWEIGHT option.
2402
2403         * aggregate.c: Get rid of approximations.
2404         (accumulate_aggregate_info) Don't use approx_gt(), approx_lt(),
2405         approx_in_range().
2406         (aggregate_single_case) Don't use approx_ne().
2407
2408 Sat Dec 27 16:19:36 2003  Ben Pfaff  <blp@gnu.org>
2409
2410         * ascii.c (ascii_line_width): Dead code, removed.
2411
2412         * postscript.c (ps_line_width): Ditto.
2413
2414         * q2c.c (xrealloc): Ditto.
2415
2416         * count.c (internal_cmd_count): Ditto.
2417
2418         * means.q (validate_dependent_endpoint): Ditto.
2419
2420         * set.q: (cmd_gset) Ditto.
2421
2422         * weight.c: [0] (weight_trns_proc) Ditto.
2423
2424 Sat Dec 27 16:18:16 2003  Ben Pfaff  <blp@gnu.org>
2425
2426         Make the code -Wmissing-prototypes clean.
2427
2428         * Makefile.am (version.c): Add #include "version.h".
2429         
2430         * ascii.c: (ascii_open_global) Make static.
2431         (ascii_close_page) Ditto.
2432         (ascii_font_sizes) Ditto.
2433         (ascii_postopen_driver) Ditto.
2434         (ascii_close_driver) Ditto.
2435         (ascii_option) Ditto.
2436         (ascii_open_page) Ditto.
2437         (ascii_line_horz) Ditto.
2438         (ascii_line_vert) Ditto.
2439         (ascii_line_intersection) Ditto.
2440         (ascii_box) Ditto.
2441         (ascii_polyline_begin) Ditto.
2442         (ascii_polyline_point) Ditto.
2443         (ascii_polyline_end) Ditto.
2444         (ascii_text_set_font_by_name) Ditto.
2445         (ascii_text_set_font_by_position) Ditto.
2446         (ascii_text_set_font_by_family) Ditto.
2447         (ascii_text_get_font_name) Ditto.
2448         (ascii_text_get_font_family) Ditto.
2449         (ascii_text_set_size) Ditto.
2450         (ascii_text_get_size) Ditto.
2451         (ascii_text_metrics) Ditto.
2452         (ascii_text_draw) Ditto.
2453         (ascii_close_page) Ditto.
2454
2455         * cmdline.h: New header for parse_command_line().  Used where
2456         needed.
2457
2458         * command.c: Move prototypes for cmd_*() functions to command.h.
2459
2460         * command.h: Prototypes for cmd_*() functions moved here from
2461         command.c.
2462
2463         * crosstabs.q: (gamma_int) Ditto.
2464
2465         * file-handle.h: Add fh_init_files() prototype.
2466         
2467         * getline.c: (welcome) Ditto.
2468
2469         * glob.h: New header for init_glob().  Used where appropriate.
2470
2471         * hash.c: (comparison_helper) Ditto.
2472
2473         * html.c: (html_open_global) Ditto.
2474         (html_close_global) Ditto.
2475         (html_preopen_driver) Ditto.
2476         (html_postopen_driver) Ditto.
2477         (html_close_driver) Ditto.
2478         (html_option) Ditto.
2479         (html_open_page) Ditto.
2480         (html_close_page) Ditto.
2481         (html_submit) Ditto.
2482
2483         * inpt-pgm.c: (input_program_source_read) Ditto.
2484
2485         * output.c: (find_defn_value) Ditto.
2486         (destroy_list) Ditto.
2487
2488         * pfm-read.c: (read_int) Ditto.
2489
2490         * postscript.c: (ps_open_global) Ditto.
2491         (ps_close_global) Ditto.
2492         (ps_font_sizes) Ditto.
2493         (ps_preopen_driver) Ditto.
2494         (ps_postopen_driver) Ditto.
2495         (ps_close_driver) Ditto.
2496         (ps_option) Ditto.
2497         (ps_open_page) Ditto.
2498         (ps_close_page) Ditto.
2499         (ps_line_horz) Ditto.
2500         (ps_line_vert) Ditto.
2501         (ps_line_intersection) Ditto.
2502         (ps_box) Ditto.
2503         (ps_polyline_begin) Ditto.
2504         (ps_polyline_point) Ditto.
2505         (ps_polyline_end) Ditto.
2506         (ps_text_set_font_by_name) Ditto.
2507         (ps_text_set_font_by_position) Ditto.
2508         (ps_text_set_font_family) Ditto.
2509         (ps_text_get_font_name) Ditto.
2510         (ps_text_get_font_family) Ditto.
2511         (ps_text_set_size) Ditto.
2512         (ps_text_get_size) Ditto.
2513         (ps_text_metrics) Ditto.
2514         (ps_text_draw) Ditto.
2515
2516         * q2c.c: (finish_up) Ditto.
2517         (xmalloc) Ditto.
2518         (xstrdup) Ditto.
2519         (get_buffer) Ditto.
2520         (st_lower) Ditto.
2521         (st_upper) Ditto.
2522         (skip_ws) Ditto.
2523         (get_line) Ditto.
2524         (add_symbol) Ditto.
2525         (find_symbol) Ditto.
2526         (lex_get) Ditto.
2527         (force_id) Ditto.
2528         (force_string) Ditto.
2529         (match_id) Ditto.
2530         (match_token) Ditto.
2531         (skip_token) Ditto.
2532         (parse) Ditto.
2533         (parse_setting) Ditto.
2534         (parse_specifier) Ditto.
2535         (parse_specifiers) Ditto.
2536         (parse_subcommand) Ditto.
2537         (dump_specifier_vars) Ditto.
2538         (is_keyword) Ditto.
2539         (make_identifier) Ditto.
2540         (dump_declarations) Ditto.
2541         (dump_specifier_init) Ditto.
2542         (dump_vars_init) Ditto.
2543         (make_match) Ditto.
2544         (dump_specifier_parse) Ditto.
2545         (dump_subcommand) Ditto.
2546         (dump_parser) Ditto.
2547         (dump_header) Ditto.
2548         (dump_free) Ditto.
2549         (recognize_directive) Ditto.
2550
2551         * recode.c: (string_to_long) Ditto.
2552
2553         * repeat.c: (find_DO_REPEAT_substitution) Ditto.
2554
2555         * repeat.h: New header for perform_DO_REPEAT_substitutions, used
2556         where appropriate.
2557
2558         * sort.c: (sort_stream_read) Ditto.
2559         (sort_stream_mode) Ditto.
2560         
2561 Fri Dec 19 23:35:04 2003  Ben Pfaff  <blp@gnu.org>
2562
2563         * algorithm.c (binary_search): Fix comparison.
2564
2565 Fri Dec 19 23:27:45 2003  Ben Pfaff  <blp@gnu.org>
2566
2567         * algorithm.c: (binary_search) Fix assertion.
2568
2569 Fri Dec 19 21:31:48 2003  Ben Pfaff  <blp@gnu.org>
2570
2571         * sysfile-info.c: (compare_vectors_by_name) Rewrite.
2572
2573 Fri Dec 19 21:30:24 2003  Ben Pfaff  <blp@gnu.org>
2574
2575         * sort.c: (compare_case_lists) Rewrite.
2576
2577 Fri Dec 19 16:44:22 2003  Ben Pfaff  <blp@gnu.org>
2578
2579         * quicksort.c: Removed (not used).
2580
2581         * quicksort.h: Removed (not used).
2582
2583         * sort.c: Removed blp_quicksort() prototype.
2584
2585 Fri Dec 19 16:42:13 2003  Ben Pfaff  <blp@gnu.org>
2586
2587         * postscript.c: (int_2_compare) Rewrite.
2588         (compare_line) Rewrite.
2589
2590 Fri Dec 19 16:38:35 2003  Ben Pfaff  <blp@gnu.org>
2591
2592         * matrix-data.c (compare_factors) Use lexicographical_compare()
2593         algorithm.
2594         (compare_doubles) New function.
2595         
2596         * algorithm.c: (lexicographical_compare) New algorithm.
2597
2598 Fri Dec 19 16:23:45 2003  Ben Pfaff  <blp@gnu.org>
2599
2600         * matrix-data.c (compare_variables_by_mxd_vartype): Rewrite.
2601
2602 Fri Dec 19 15:54:45 2003  Ben Pfaff  <blp@gnu.org>
2603
2604         * expr-prs.c: (cmp_func) Removed.
2605         (parse_function) Use binary_search() algorithm.
2606         (compare_functions) New function.
2607         (init_func_tab) Use sort() algorithm.
2608
2609         * algorithm.c: (binary_search) New algorithm.
2610
2611 Fri Dec 19 15:50:45 2003  Ben Pfaff  <blp@gnu.org>
2612
2613         * descript.q: (display) Use sort() algorithm instead of qsort().
2614         (compare_func) Removed.
2615         (descriptives_compare_variables) New function.
2616
2617 Fri Dec 19 15:08:38 2003  Ben Pfaff  <blp@gnu.org>
2618
2619         Get rid of AVL trees.  Hashes are more appropriate for everything
2620         PSPP does.
2621
2622         * Makefile.am: (pspp_SOURCES) Remove avl.c, avl.h.
2623         
2624         * avl.c: Removed.
2625
2626         * avl.h: Removed.
2627
2628 Fri Dec 19 14:33:31 2003  Ben Pfaff  <blp@gnu.org>
2629
2630         Much code can be clarified by using C++ STL-like algorithms.  Not
2631         all uses of these algorithms are listed below, only the ones where
2632         the change to an algorithm was the only change of interest.
2633         
2634         * Makefile.am: (pspp_SOURCES) Add algorithm.c, algorithm.h.
2635         
2636         * algorithm.c: New file.
2637
2638         * algorithm.h: New file.
2639
2640         * modify-vars.c: (static var forward) Removed.
2641         (static var positional) Removed.
2642         (compare_variables) Removed.
2643         (struct ordering) New.
2644         (cmd_modify_vars) Use sort() algorithm.
2645         (compare_variables_given_ordering) New function.
2646         (rearrange_dict) Use sort() algorithm.
2647
2648         * sysfile-info.c: (cmd_display) Use sort() algorithm.
2649         (cmp_var_by_name) Removed.
2650
2651 Fri Dec 19 14:26:17 2003  Ben Pfaff  <blp@gnu.org>
2652
2653         Make file handles use a hash table.
2654         
2655         * file-handle.q: (files) Change to hash table, make static.
2656         (cmd_file_handle) Use hash table functions.
2657         (fh_get_handle_by_filename) Ditto.
2658         (fh_get_handle_by_name) Ditto.
2659         (hash_file_handle) New function.
2660         (cmp_file_handle) Rewrite.
2661         (fh_init_files) Use hash table functions.
2662
2663 Fri Dec 19 14:24:38 2003  Ben Pfaff  <blp@gnu.org>
2664
2665         Clean up FREQUENCIES.
2666         
2667         * Makefile.am: (pspp_SOURCES) Remove frequencies.g.
2668
2669         * frequencies.q: Remove a lot of old #if'd out code at the end.
2670         (internal_cmd_frequencies) Use calc() instead of calc_no_weight()
2671         or calc_weight().  Initialize percentile_values.
2672         (calc) New function based on calc_weight() from frequencies.g.
2673         (precalc) Use hash functions.
2674         (static var comparison_func) Removed.
2675         (static var comparison_param) Removed.
2676         (comparison_helper) Removed.
2677         (get_freq_comparator) New function.
2678         (not_missing) New function.
2679         (add_freq) Removed.
2680         (postprocess_freq_tab) Use hash table functions, algorithms,
2681         get_freq_comparator().  Rewrite.
2682         (cleanup_freq_tab) Rephrase.
2683         (add_percentile) Clean up spacing.
2684         (hash_value_numeric) New function.
2685         (hash_value_alpha) New function.
2686         (compare_value_numeric_a) Rewrite.
2687         (compare_value_alpha_a) Rewrite.
2688         (compare_value_numeric_d) Rewrite.
2689         (compare_value_alpha_d) Rewrite.
2690         (compare_freq_numeric_a) Rewrite.
2691         (compare_freq_alpha_a) Rewrite.
2692         (compare_freq_numeric_d) Rewrite.
2693         (compare_freq_alpha_d) Rewrite.
2694         (calc_stats) Clean up mode, percentiles, max.
2695         (dump_statistics) Clean up spacing.
2696         
2697         * frequencies.g: Removed.
2698
2699         * var.h: (struct freq_tab) Change `data' to hash table.
2700
2701 Fri Dec 19 14:15:46 2003  Ben Pfaff  <blp@gnu.org>
2702
2703         * file-handle.h: Remove declaration of global variable `files',
2704         which wasn't used anywhere.
2705
2706         * postscript.c: (add_encoding) Remove superfluous cast.
2707         (line) Ditto.
2708
2709         * sfm-read.c: [linux] (bswap_int32) Drop ntohl() non-portable
2710         version.
2711
2712         * temporary.c: [0] (display_tree) Removed.
2713
2714 Fri Dec 19 14:13:04 2003  Ben Pfaff  <blp@gnu.org>
2715
2716         Implement a new random number generator based on the alleged RC4
2717         algorithm.
2718
2719         * expr-evl.c: (expr_evaluate) Use rng_get_double_normal() instead
2720         of rand_normal().
2721
2722         * random.c: [!HAVE_GOOD_RANDOM] (real_rand) Removed.
2723         [!HAVE_GOOD_RANDOM] (real_srand) Removed.
2724         (macro k) Removed.
2725         (static var V[]) Removed.
2726         (static var Y) Removed.
2727         (static var X2) Removed.
2728         (setup_randomize) Removed.
2729         (shuffle) Removed.
2730         (rand_uniform) Removed.
2731         (rand_normal) Removed.
2732         (struct rng) New structure.
2733         (rng_create) New function.
2734         (rng_destroy) New function.
2735         (swap_byte) New static function.
2736         (rng_seed) New function.
2737         (rng_get_bytes) New function.
2738         (rng_get_int) New function.
2739         (rng_get_unsigned) New function.
2740         (rng_get_double) New function.
2741         (rng_get_double_normal) New function.
2742         (pspp_rng) New function.
2743
2744         * random.h: Sync up to random.c.
2745
2746         * sample.c: (struct sample_trns) Make `frac' unsigned and a
2747         fraction of UINT_MAX, not 65536.
2748         (cmd_sample) Use rng_get_unsigned(), rng_get_double(), UINT_MAX
2749         fraction.
2750
2751         * vfm.c: (open_active_file) No need to call setup_randomize() any
2752         longer.
2753
2754 Fri Dec 19 12:05:56 2003  Ben Pfaff  <blp@gnu.org>
2755
2756         Change dictionary name indexes to use hash tables instead of AVL
2757         trees.
2758
2759         * crosstabs.q: (free_var_dict) Use hash tables.
2760         (crs_custom_tables) Ditto.
2761         (calc_general) Ditto.
2762         (compare_table_entry) Rewrite.
2763         (enum_var_values) Reorder parameters.  All references updated.
2764         Rewrite.
2765
2766         * get.c: (rename_variable) Use hash tables.
2767         (mtf_merge_dictionary) Ditto.
2768
2769         * glob.c: (init_glob) Use hash tables.
2770         (cmp_variable) Removed.
2771
2772         * means.q: (mns_custom_tables) Use hash tables.
2773
2774         * modify-vars.c: (rearrange_dict) Use hash tables.
2775
2776         * rename-vars.c: (cmd_rename_variables) Use hash tables.
2777
2778         * sfm-read.c: (read_header) Use hash tables.
2779         (read_variables) Ditto.
2780
2781         * temporary.c: (new_dictionary) Use hash tables.
2782         (save_dictionary) Ditto.
2783         (restore_dictionary) Ditto.
2784
2785         * var.h: (struct dictionary) Change AVL tree `var_by_name' into
2786         hash table `name_tab'.
2787
2788         * vars-atr.c: [DEBUGGING] (dump_one_var_node) Removed.
2789         [DEBUGGING] (dump_var_tree) Removed.
2790         (find_variable) Use hash tables.
2791         (find_dict_variable) Ditto.
2792         (common_init_stuff) Ditto.
2793         (rename_variable) Ditto.
2794         (clear_variable) Ditto.  Also, remove debug code.
2795         (dup_variable) Use hash tables.
2796
2797         * vars-prs.c: (fill_all_vars) Use hash tables.
2798         (is_dict_varname) Ditto.
2799         (parse_dict_variable) Ditto.
2800         
2801 Fri Dec 19 11:46:23 2003  Ben Pfaff  <blp@gnu.org>
2802
2803         Change value labels to use hash tables instead of AVL trees, and
2804         change value labels into an ADT.
2805
2806         * Makefile.am: (pspp_SOURCES) Add value-labels.c, value-labels.h.
2807         
2808         * value-labels.c: New file.
2809
2810         * value-labels.h: New file.
2811
2812         * apply-dict.c: (cmd_apply_dictionary) Use value label ADT.
2813         Get rid of a stupid use of goto.
2814
2815         * autorecode.c: (compare_alpha_value) Rewrite.
2816         (hash_alpha_value) Ditto.
2817         (compare_numeric_value) Rewrite.
2818         (hash_numeric_value) Ditto.
2819
2820         * frequencies.q: (dump_full) Use value label ADT.
2821
2822         * pfm-read.c: (read_value_label) Use value label ADT.
2823
2824         * pfm-write.c: (write_value_labels) Use value label ADT.
2825
2826         * sfm-read.c: (read_variables) Use value label ADT.
2827         (read_value_labels) Rewrite.
2828
2829         * sfm-write.c: (write_value_labels) Rewrite.
2830
2831         * sysfile-info.c: (cmd_sysfile_info) Use value label ADT.
2832         (display_variables) Ditto.
2833         (describe_variable) Ditto.
2834
2835         * t-test.q: (print_t_groups) Use value label ADT.
2836
2837         * temporary.c: (copy_variable) Use value label ADT.
2838         (free_dictionary) Ditto.
2839
2840         * val-labs.c: (verify_val_labs) Use value label ADT.
2841         (get_label) Ditto.
2842         (debug_print) Ditto.
2843         (val_lab_cmp) Removed.
2844         (inc_ref_count) Removed.
2845         (copy_value_labels) Removed.
2846
2847         * var.h: (struct value_label) Removed.
2848         (struct variable) Change AVL tree `val_lab' into hash table
2849         `val_labs'.
2850
2851         * vars-atr.c: (init_variable) Use value label ADT.
2852         (clear_variable) Ditto.
2853         (free_value_label) Removed.
2854         (free_val_lab) Removed.
2855         (get_val_lab) Removed.
2856         (compare_variables) New function.
2857         (hash_variable) New function.
2858
2859         * vfm.c: (dump_splits) Use value label ADT.
2860
2861 Fri Dec 19 11:18:11 2003  Ben Pfaff  <blp@gnu.org>
2862
2863         Add to the hash table interface.
2864
2865         * hash.c: (hsh_hash_bytes) Add assertion.
2866         (hsh_hash_string) Ditto.
2867         (hsh_clear) Ditto.
2868         (hsh_rehash) Ditto.
2869         (hsh_probe) Ditto.
2870         (hsh_create) Ditto.  Also make minimum `size'.
2871         (hsh_destroy) Rephrase.
2872         (sort_nulls_last) Removed.
2873         (not_null) New function.
2874         (hsh_data) Ditto.
2875         (comparison_helper) Ditto.
2876         (hsh_sort) Rewritten.
2877         (hsh_data_copy) New function.
2878         (hsh_sort_copy) Ditto.
2879         (hsh_insert) Ditto.
2880         (hsh_replace) Ditto.
2881         (hsh_hash_double) Ditto.
2882         (hsh_delete) Fix stupid bug.
2883         
2884 Thu Dec 18 12:27:03 WAST 2003 John Darrington <john@darrington.wattle.id.au>
2885         * added a calculation of the mode to FREQUENCIES
2886
2887 Wed Dec 17 12:53:01 WAST 2003 John Darrington <john@darrington.wattle.id.au>
2888
2889         * moved (un)defs of DEBUGGING to config.h
2890
2891 Mon Dec 15 21:35:59 2003  Ben Pfaff  <blp@gnu.org>
2892
2893         * groff-font.c: (add_kern) Fix indentation.
2894         (add_kern) Use & instead of % to take power-of-2 modulus.
2895         (font_get_kern_adjust) Likewise.
2896
2897 Fri Dec 12 23:54:37 2003  Ben Pfaff  <blp@gnu.org>
2898
2899         * autorecode.c: (recode) Replace stupid use of memcpy() by
2900         memberwise copy.
2901         (hash_alpha_value) Use hsh_hash_bytes().  Get rid of nasty casts.
2902         (hash_numeric_value) Ditto.
2903         (autorecode_proc_func) pool_strdup() was wrong here because the
2904         source string was not null-terminated.  Use new pool_strndup()
2905         instead.
2906
2907         * crosstabs.q: (enum_var_values) Remove superfluous and bizarre
2908         use of hsh_iterator_init().
2909
2910         * data-in.c: (parse_N) Initialize i->v->f.
2911
2912         * flip.c: (cmd_flip) Use memmove(), not memcpy(), to copy
2913         overlapping arrays.
2914
2915         * groff-font.c: Use power-of-2 hash table sizes, not prime.
2916         (groff_read_font) Don't call hsh_next_prime().  Don't call
2917         fclose(NULL).
2918         (static var hash) Remove `size_p', `max_used' members.
2919         (font_char_name_to_index) Don't call hsh_next_prime().  Use
2920         hsh_hash_string() instead of hashpjw(), & instead of %.
2921         (default_font) Don't call hsh_next_prime().
2922
2923         * pool.c: (pool_strndup) New function.
2924         (pool_strdup) Reimplement in terms of pool_strndup.
2925
2926         * postscript.c: (hash_font_entry) Use hsh_hash_string().  Get rid
2927         of nasty casts.
2928         (hash_ps_encoding) Use hsh_hash_string().
2929         (hash_ps_combo) Use hsh_hash_string(), hsh_hash_int().
2930         (hash_filename2font) Use hsh_hash_string().
2931
2932         * som.c: Add #include <stdlib.h>.
2933
2934         * tab.c: (tab_destroy) Don't set t->container after freeing `t'
2935         (by destroying its pool).
2936         
2937 Fri Dec 12 23:18:59 2003  Ben Pfaff  <blp@gnu.org>
2938
2939         Miscellaneous hash table code cleanup:
2940         
2941         * hash.h: (struct hsh_table) Moved into hash.c.
2942         (hsh_count) Ditto, and transformed into function.
2943         (hsh_compare_func) New typedef, used for defining otherwise-long
2944         function types here and in hash.c
2945         (hsh_hash_func) Ditto.
2946         (hsh_free_func) Ditto.
2947         
2948         * hash.c: (struct hsh_table) Renamed `n' to `used', `m' to `size',
2949         `table' to `entries'.  Removed `mp'.  All references updated.
2950         (hsh_clear) Don't shrink entries array; if the hash was this big
2951         once, it probably will be again.
2952         (hsh_rehash) Made static.
2953         (force_hsh_insert) Renamed hsh_force_insert.
2954         (force_hsh_find) Renamed hsh_force_find.
2955
2956         Made hash table sizes powers of 2, because that's fine with any
2957         reasonable hash function and because taking a power-of-2 modulus
2958         is faster than any other:
2959         
2960         (hsh_prime_tab) Removed;
2961         (hsh_next_prime) Ditto.
2962         (next_power_of_2) New function.
2963         (hsh_create) Use next_power_of_2.
2964         (hsh_rehash) Use & instead of %.
2965
2966         Cleaned up hsh_sort:
2967         
2968         (internal_comparison_fn) Removed.
2969         (sort_nulls_last) New function.
2970         (hsh_sort) Removed second parameter, switched to using the new
2971         quicksort() function from quicksort.h to avoid using nasty need
2972         for static variables with qsort().  All references updated.
2973
2974         Changed the hash functions offered, because there are better hash
2975         functions than the ones we had, and cleaned up the names to boot:
2976         
2977         * hash.c: (hashpjw_d) Removed.
2978         (hashpjw) Ditto.
2979         (hsh_hash_bytes) New function.
2980         (hsh_hash_string) New function.
2981         (hsh_hash_int) New function.
2982
2983         Improved the hash table iteration interface:
2984         
2985         * hash.h: (hsh_iterator_init) Removed.
2986         (struct hsh_iterator) Removed `init' member, change `next' to
2987         size_t.
2988
2989         * hash.c: (hsh_foreach) Removed.  All references updated to use
2990         hsh_first/hsh_next instead.
2991         (hsh_first) New function.  Notably, unlike hsh_foreach() it does
2992         not treat a null pointer as an empty hash table.
2993         (hsh_next) New function.
2994
2995         Made deletion possible, though slow:
2996
2997         * hash.c: (locate_matching_entry) New function.
2998         (hsh_find) Use locate_matching_entry().
2999         (hsh_delete) New function also using locate_matching_entry().
3000         (hsh_force_delete) New function.
3001
3002 Fri Dec 12 23:16:10 2003  Ben Pfaff  <blp@gnu.org>
3003
3004         * quicksort.c: New file implementing a sort routine with a
3005         interface better than qsort() because it passes a user-provided
3006         parameter to the sort routine.
3007
3008         * Makefile.am: Add quicksort.c, quicksort.h.
3009
3010 Fri Dec 12 13:31:58 2003  Ben Pfaff  <blp@gnu.org>
3011
3012         * All source files: Get rid of nasty special cases for Checker,
3013         which is pretty obsolete now.
3014
3015 Thu Dec 11 21:38:24 WST 2003 John Darrington <john@darrington.wattle.id.au>
3016
3017         * Fixed a bug apparent when using the FREQUENCIES command with the
3018         html driver.  The html driver was incorrectly trying to display 
3019         empty cells.
3020
3021 Sun Jan  2 21:40:13 2000  Ben Pfaff  <blp@gnu.org>
3022
3023         * Makefile.am: Reorganized.  Put locale dir in version.c instead
3024         of passing it to each compile command.  Only put local gmp libs in
3025         LD_ADD if not installed on system.  Remove `boast' target.
3026
3027         * All source files: struct and union typedefs eliminated.
3028         `sizeof type' replaced by `sizeof object' where practical.  Moved
3029         `unused' qualifiers from start to end of declarations for gcc
3030         2.7.2 compatibility.  Change `while (1)' to `for (;;)'.  Made
3031         assertions on pointers strictly compliant.  Removed _ prefixes on
3032         some function parameter names.
3033
3034         * alloc.c: New source file, containing these external linkage
3035         functions removed from common.c: xmalloc, xcalloc, xrealloc,
3036         xstrdup.
3037
3038         * arena.c: Removed.
3039         
3040         * arena.h: Removed.
3041
3042         * ascii.c: Migrated from arenas to pools.
3043         (struct ascii_driver_ext) ops[], box[], fonts[] changed from
3044         c_string to len_string.  All references changed.
3045         (ascii_option) Signature changed to comply to new output.c
3046         interface.
3047         (count_fancy_chars) Removed.
3048         (delineate) Removed support for rich text.
3049         (ascii_text_metrics) Ditto.
3050         (text_draw) Ditto.
3051         (output_shorts) Change `box', `off', `on' from c_string to
3052         len_string.  Change `remaining' from int to size_t.
3053         (ascii_close_page) Make page numbering less haphazard.
3054
3055         * autorecode.c: Migrate from arenas to pools.
3056
3057         * avl.c: Migrate from arenas to pools.  Synch from libavl 1.4.0.
3058
3059         * bitvector.h: New file containing these macros from misc.h:
3060         SET_BIT, CLEAR_BIT, SET_BIT_TO, TEST_BIT, BIT_INDEX.
3061
3062         * command.c: (struct command) cmd1, cmd2, cmd3 members changed to
3063         word[3].  ncmd removed.
3064         (var empty_string) Removed.
3065         (var cmd_table) Declaration updated.
3066         (var cmdtab) Removed.
3067         (cmp_command) Removed.
3068         (split_words) Rewritten to use strtok_r().
3069         (init_cmd_parser) Renamed cmd_init().  Rewritten.
3070         (find_command) Removed.
3071         (FILE_TYPE_okay) Rewritten.
3072         (cmd_parse) Rewritten.  Semantics of the return value of command
3073         handlers has changed: they must now return one of the new CMD_*
3074         enumerals, rather than a magic value.  This meant that all
3075         commands had to be modified, and they were.
3076         (figure_out_command) New function.
3077
3078         * command.def: Add CORRELATIONS, PEARSON CORRELATIONS.  Add
3079         #defines for INIT, INPU, etc.
3080
3081         * command.h: New CMD_* enum series.
3082         (cur_proc) Make const char *, not char *.
3083         (cmd_init) Prototype.
3084         (cmd_parse) Ditto.
3085
3086         * common.c: Removed.
3087
3088         * common.h: Removed.
3089
3090         * correlations.q: New file.
3091
3092         * crosstabs.q: Migrate from arenas to pools.  Migrate to new-style
3093         q2c.
3094         (custom_tables) Renamed crs_custom_tables().
3095         (custom_variables) Renamed crs_custom_variables().
3096         (calc_integer) Add in some `const' qualifiers.
3097         (table_value_missing) Change from a_string to len_string.
3098         (float_M_suffix) Change from a_string to len_string.
3099
3100         * data-in.c: Rewritten.  All references to
3101         parse_string_as_format() changed to data_in().
3102
3103         * data-in.h: New file.
3104
3105         * data-list.c: Change DLS_* from #define's to enums.  Move from
3106         rpd_msg() to tmsg().
3107         (RPD_ERR) New #define.
3108         (do_reading) Change dfm_push_cust() to dfm_push(), pop_cust() to
3109         dfm_pop().
3110         (read_from_data_list_fixed) Change from old
3111         parse_string_as_format() to new data_in().
3112         (read_from_data_list_free) Ditto.
3113         (read_from_data_list_list) Ditto.
3114         (cmd_repeating_data) Modify approach to checking for end of
3115         command.
3116         (rpd_msg) Removed.
3117         (rpd_parse_record) Change from old parse_string_as_format() to new
3118         data_in().  Change from old convert_format_to_string() to new
3119         data_out().
3120         (read_one_set_of_repetitions) Change dfm_push_cust() to
3121         dfm_push(), pop_cust() to dfm_pop().
3122
3123         * data-out.c: Rewritten.  All references to
3124         convert_format_to_string() changed to data_out().
3125
3126         * descript.q: Migrate to new q2c.
3127         (cmd_descriptives) Removed.
3128         (internal_cmd_descriptives) Renamed cmd_descriptives ().
3129         (custom_variables) Renamed dsc_custom_variables().
3130
3131         * dfm.c: (struct dfm_fhuser_ext) `ln' removed.  All references
3132         removed.
3133         (open_file_r) Initialize h->where.line_number.  Migrate to new
3134         struct string.
3135         (open_file_w) Initialize h->where.line_number.
3136         (read_record) Change from ext->ln to h->where.line_number.
3137         Migrate to struct string.
3138         (dfm_put_record) Rephrased.
3139         (dfm_push_cust) Renamed dfm_push(), rewritten.
3140         (dfm_pop) New function.
3141
3142         * error.c: All references updated.
3143         (glob var error_count) Renamed err_err_count.
3144         (glob var warning_count) Renamed err_warning_count.
3145         (glob var error_already_flagged) Renamed err_already_flagged.
3146         (glob var verbosity) Renamed err_verbosity.
3147         (glob var cust_fn) Removed.
3148         (glob var cust_ln) Removed.
3149         (static var file_loc) New.
3150         (static var nfile_loc) New.
3151         (static var mfile_loc) New.
3152         (tmsg) New function.
3153         (push_cust) Removed.
3154         (pop_cust) Removed.
3155         (msg) Rewritten.
3156         (static var terminating) Removed.
3157         (failure) Renamed err_failure().
3158         (hcf) Renamed err_hcf().
3159         (err_push_file_locator) New function.
3160         (err_pop_file_locator) New function.
3161         (err_location) New function.
3162         (check_error_count) Renamed err_check_count().
3163         (vmsg) Renamed err_vmsg().  Interface changed.
3164         (verbose_msg) Removed.
3165         (err_cond_fail) New function.
3166         (error_break) Renamed err_break().
3167
3168         * error.h: All references updated.
3169         (enum MSG_CLASS_COUNT) Renamed ERR_CLASS_COUNT.
3170         (enum ERR_CLASS_MASK, ERR_VERBOSITY_SHIFT, ERR_VERBOSITY_MASK)
3171         New.
3172         (struct file_locator) New.
3173         (struct error) New.
3174         (macro verbose_msg) Removed.
3175         (macro cond_fail) Removed.
3176
3177         * expr-opt.c: (evaluate_tree) sizeof(char) == 1.
3178
3179         * expr-prs.c: Reorganized.  All references updated.
3180         (exprtypename) Renamed expr_type_name().
3181         (typename) Renamed type_name().
3182         (free_expression) Renamed expr_free().
3183         (parse_expression) Renamed expr_parse().  Uses new type_check()
3184         function.
3185         (init_functab) Renamed init_func_tab().
3186         (type_check) New function.
3187         (parse_or) Rewritten to use new allocate_nonterminal() and
3188         append_nonterminal_arg() functions.
3189         (parse_and) Ditto.
3190         (parse_not) Ditto.
3191         (parse_rel) Ditto.  Also simplified logic.
3192         (parse_add) Ditto.
3193         (parse_mul) Ditto.
3194         (parse_neg) Ditto.
3195         (parse_exp) Ditto.
3196         (SYSMIS_func) Ditto.
3197         (VALUE_func) Rephrased.
3198         (CONCAT_func) Fix memory leak by replacing free by free_node on
3199         lossage.
3200         (generic_str_func) Ditto.
3201         (parse_function) Ditto.  Also rephrasings.  Uses bsearch() to find
3202         function.
3203         (allocate_nonterminal) New function.
3204         (append_nonterminal_arg) New function.
3205         (static func_tab[]) Now at file level.
3206         (cmp_func) Moved.
3207         (init_func_tab) Moved.  Now just uses qsort() to sort func_tab[].
3208
3209         * expr.h: (enum series OP_*) Moved to exprP.h.
3210         (OP_* defines) Ditto.
3211         (struct op_desc) Ditto.
3212         (global ops[]) Ditto.
3213         (struct num_con_node) Ditto.
3214         (struct str_con_node) Ditto.
3215         (struct var_node) Ditto.
3216         (struct lag_node) Ditto.
3217         (struct casenum_node) Ditto.
3218         (struct nonterm_node) Ditto.
3219         (union any_node) Members renamed.
3220         (struct sys_node) Removed.
3221         (struct val_node) Removed.
3222         (operator typedef) Removed.
3223         (typedef exprtype) Removed.
3224         (enum series EX_*) Moved to exprP.h.
3225         (struct expression) Ditto.  Also renamed a lot of the members.
3226         (PXP_* defines) Changed to enums.
3227         (free_node prototype) Moved to exprP.h.
3228
3229         * file-handle.h: (struct file_handle) New member `where'.
3230
3231         * file-handle.q: Migrated to new q2c format.
3232         (prepend_current_directory) Removed (dead code).
3233         (cmd_file_handle) Incorporated all of internal_cmd_file_handle().
3234         (fh_get_handle_by_filename) Removed dead code.
3235         Set new `where' member.
3236
3237         * file-type.c: (file_type_source_read) References to
3238         parse_string_as_format() changed to data_in().
3239         dfm_push_cust()/pop_cust() changed to dfm_push()/dfm_pop().
3240
3241         * filename.c: All references updated.
3242         (init_filename) Renamed fn_init().
3243         (expand_line) Removed.
3244         (macro EXPAND_LINE) Removed.
3245         (interp_vars) Renamed fn_interp_vars().  Now uses st_*() instead
3246         of custom functions.
3247         (gnu_getcwd) Renamed fn_get_cwd(), rewritten.
3248         (tilde_expand) Renamed fn_tilde_expand(), uses ds_*().
3249         (normalize_filename) Renamed fn_normalize().
3250         (search_path) Renamed fn_search_path(), rewritten.
3251         (prepend_dir) Renamed fn_prepend_dir().
3252         (blp_getenv) Renamed fn_getenv().
3253         (blp_dirname) Renamed fn_dirname().
3254         (fn_basename) New function, not used.
3255         (absolute_filename_p) Renamed fn_absolute_p().
3256         (is_special_filename) Renamed fn_special_p().
3257         (file_exists) Renamed fn_exists_p().
3258         (readlink_malloc) Renamed fn_readlink().
3259         (getenv_default) Renamed fn_getenv_default().
3260         (open_file) Renamed fn_open().
3261         (close_file) Renamed fn_close().
3262         (open_file_ext) Renamed fn_open_ext().
3263         (close_file_ext) Renamed fn_close_ext().
3264
3265         * font.h: Migrate from arenas to pools.
3266
3267         * format.c: (parse_format_specifier_name) Deal with ds_* strings.
3268
3269         * frequencies.g: Migrate from arenas to pools.
3270
3271         * frequencies.q: Migrate to new q2c version.  Migrate from arenas
3272         to pools.
3273
3274         * getline.c: All references updated.
3275         (global getl_buf) Changed from char * to struct string.
3276         (static getl_include_path) Ditto.
3277         (global getl_buf_len) Removed.
3278         (global getl_buf_size) Removed.
3279         (getl_include_path) Deal with new getl_buf, getl_include_path.
3280         (getl_uninitialize) New function.
3281         (getl_get_current_directory) Rewritten.
3282         (getl_clear_include_path) Rewritten.
3283         (getl_add_include_dir) Rewritten.
3284         (getl_add_file) Assertion fixed.
3285         (getl_add_virtual_file) Change initial value of `remaining_loops'
3286         from 2 to 1.
3287         (welcome) Rewritten.
3288         (handle_line_buffer) Make static.  Change logic to make
3289         getl_add_virtual_file() change sensible.  Use ds_*() strings.
3290         (getl_read_line) Use ds_*() strings.  Implement SET ECHO.
3291         (getl_close_file) Moved.
3292         (getl_location) New function.
3293
3294         * getline.h: All references updated.
3295         (macro curln) Removed.
3296         (macro curfn) Removed.
3297         (macro am_interactive) Renamed getl_am_interactive.
3298         (macro am_reading_script) Renamed getl_reading_script.
3299
3300         * glob.c: (global fmt_parse_ignore_error) Removed.
3301         (init_glob) Use locale_dir not LOCALEDIR.  Use feholdexcept() on
3302         systems that support it (C99).  Turn off SET ECHO by default.  No
3303         necessary julcal initialization anymore.
3304
3305         * groff-font.c: Migrate from arenas to pools.
3306         (groff_read_font) Use err_push_file_locator().
3307         (groff_read_DESC) Ditto.
3308         (font_msg) Use tmsg().
3309
3310         * hash.c: (hsh_sort) Fix debug code.
3311         [GLOBAL_DEBUGGING] Include stdio.h.
3312
3313         * hash.h: (macro force_hsh_insert) Rephrase.
3314
3315         * heap.c: Rewritten.
3316         
3317         * heap.h: Rewritten.
3318
3319         * html.c: (html_option) Change from outp_value to struct string.
3320         (postopen) Change from curfn to getl_location().
3321         (escape_string) Remove rich-text code.  Signature changed.
3322         (output_tab_table) Switch from a_string to struct len_string.
3323         Remove rich text support.
3324
3325         * lexer.c: All references updated.  Largely rewritten.  Major
3326         changes listed below.  Removed tagged quote support.  Adapted to
3327         struct string tokstr.
3328         (global tokstr) Changed to struct string.
3329         (global tokstr_size) Removed.
3330         (global tokstr_len) Removed.
3331         (global tokid) New.
3332         (global tokint) Removed.
3333         (global toklongstr) Removed.
3334         (C* defines) Removed.
3335         (static tbl[]) Removed.
3336         (static id[]) Removed.
3337         (static une[]) Removed.
3338         (discard_line) Renamed lex_discard_line().
3339         (get_entire_line) Renamed lex_entire_line().
3340         (get_rest_of_line) Renamed lex_rest_of_line().
3341         (get_dotted_rest_of_line) Merged into lex_rest_of_line().
3342         (make_hexit) Removed.
3343         (syntax_error) Renamed lex_error().  Return value removed.
3344         (get_token_representation) Renamed lex_token_representation().
3345         (putback) Renamed lex_put_back().
3346         (putfwd) Renamed lex_put_forward().
3347         (convert_negative_to_dash) Renamed lex_negative_to_dash().
3348         (set_prog) Renamed lex_set_prog().
3349         (init_lex) Renamed lex_init().
3350         (reset_eof) Renamed lex_reset_eof().
3351         (lookahead) Renamed lex_look_ahead().
3352         (check_id) Rewritten.
3353         (yylex) Renamed lex_get(), rewritten.
3354         (lex_end_of_command) New function.  Many commands were rephrased
3355         using this.
3356         (lex_integer_p) New function.  Replaces compare of tokint against
3357         NOT_LONG.
3358         (lex_integer) New function.  Replaces tokint.
3359         (match_tok) Renamed lex_match().
3360         (match_id) Renamed lex_match_id().
3361         (match_int) Renamed lex_match_int().
3362         (force_match_id) Renamed lex_force_match_id(), added return value.
3363         (force_match) Renamed lex_force_match(), added return value.
3364         (force_string) Renamed lex_force_string(), added return value.
3365         (force_int) Renamed lex_force_int(), added return value.
3366         (lex_id_match_len) New function.
3367         (id_match) Renamed lex_id_match(), rewritten.
3368         (get_line) Renamed lex_get_line().
3369         (preprocess_line) Renamed lex_preprocess_line().
3370         (tokname) Renamed lex_token_name().
3371         (bin_value_func) Removed.
3372         (oct_value_func) Removed.
3373         (hex_value_func) Removed.
3374         (unexpected_eof) New function.
3375         (convert_numeric_string_to_char_string) New function.
3376         (parse_string) Rewritten, signature changed.
3377         (add_tokstr_char) Removed.
3378         (add_tokstr_unsigned) Removed.
3379         (add_tokstr_string) Removed.
3380         (parse_tagged_quote) Removed.
3381         (skip_comment) Renamed lex_skip_comment().
3382
3383         * lexer.h: All references updated.
3384         (macro is_id1) Renamed CHAR_IS_ID1.
3385         (macro is_idn) Renamed CHAR_IS_IDN.
3386         (token names ID, NUM, STRING, STOP, ... WITH, EXP) Renamed with
3387         prefix T_: T_ID, T_NUM, T_STRING, T_STOP, ... T_WITH, T_EXP.
3388         (macro get_token) Removed.
3389         (macro id_match) Removed.
3390         (macro force_match_id) Removed.
3391         (macro force_match) Removed.
3392         (macro force_string) Removed.
3393         (macro force_int) Removed.
3394         (macro force_num) Removed.
3395         (macro force_id) Removed.
3396
3397         * lexerP.h: Removed.
3398
3399         * list.q: Migrated to new q2c format.
3400         (write_line) Deal with struct len_string.
3401         (write_varname) Ditto.
3402         (write_fallback_headers) Ditto.
3403
3404         * magic.c: New file, incorporating the following global variables
3405         previously in other files: endian, second_lowest_value.  And both
3406         of those are conditional on #define's.
3407
3408         * magic.h: New file, incorporating the following global variable
3409         declarations: endian, second_lowest_value, and the following macro
3410         declarations: NOT_DOUBLE, NOT_LONG, NOT_INT.
3411
3412         * main.c: Added declarations of pgmname, finished, curdate,
3413         start_interactive.
3414         (main) Call new parse_script() function.
3415         (parse_script) New function.
3416         (execute_command) New function.
3417         (dump_token) Removed.
3418         (handle_error) New function.
3419
3420         * matrix.c: New file.
3421
3422         * matrix.h: New file.
3423
3424         * matrix-data.c: Migrated from arenas to pools.
3425         (mget_token) Change from parse_string_as_format() to data_in().
3426
3427         * means.q: Migrate to new q2c.
3428         (custom_tables) Renamed mns_custom_tables().
3429         (custom_crossbreak) Renamed mns_custom_crossbreak().
3430         (custom_variables) Renamed mns_custom_variables().
3431
3432         * mis-val.c: (static var width) Changed from `int' to `size_t'.
3433         (parse_varnames) Prototype.
3434         (parse_numeric) Rephrasings.
3435         (parse_alpha) Adapt to new struct string tokstr.
3436
3437         * misc.c: (intlog10) Rewritten.
3438         (spacing) Removed.
3439         (ansi_rand) Renamed real_rand(), moved into random.c.
3440         (ansi_srand) Renamed real_srand(), moved into random.c.
3441         (setup_randomize) Moved to random.c.
3442         (rand_uniform) Ditto.
3443         (rand_normal) Ditto.
3444         (rand_simple) Ditto.
3445         (get_config_line) Removed.
3446         (reverse) Removed (dead code).
3447
3448         * misc.h: (macro SET_BIT) Moved to bitvector.h.
3449         (macro CLEAR_BIT) Ditto.
3450         (macro TEST_BIT) Ditto.
3451         (macro SET_BIT_TO) Ditto.
3452         (macro BIT_INDEX) Ditto.
3453
3454         * output.c: (outp_read_devices) Move to err_push_file_locator()
3455         from push_cust().  Use struct string.
3456         (expand_op_tokstr) Removed.
3457         (static var op_tokstr) Changed to struct string.
3458         (static var op_tokstr_size) Removed.
3459         (tokener) Rephrasings.  Use struct string.
3460         (parse_options) Use struct string.
3461         (destroy_driver) Fix assertion.
3462         (outp_get_paper_size) Move to err_push_file_locator().
3463         [0] Removed dead code.
3464         (outp_string_width) Move to len_string.
3465
3466         * output.h: Comment fixes.
3467         (TAG_* enum series) Removed.
3468         (struct outp_value) Removed.
3469         (enum OUTP_T_FANCY) Removed.
3470         (struct outp_text) `s' changed from a_string to len_string.
3471         (struct outp_class) `option' change arg 3 from outp_value to
3472         struct string.
3473
3474         * pfm-read.c: (corrupt_msg) Rewritten.
3475
3476         * pfm-write.c: (bufwrite) Fix assertion.
3477
3478         * pool.c: New file, reference version.
3479
3480         * pool.h: New file, reference version.
3481
3482         * postscript.c: (ps_font_sizes) Fix assertion.
3483         (ps_option) Change arg 3 from outp_value to struct string.
3484         Adapt to struct string.
3485         (macro output_line) Removed.
3486         (macro add_string) Removed.
3487         (output_encodings) Adapted to struct string.  Moved to
3488         err_push_file_locator().
3489         (find_encoding_file) Fix assertion.
3490         (read_ps_encodings) Move to err_push_file_locator().
3491         (postopen) Use getl_location() instead of curfn.
3492         (out_text_plain) Move to len_string.
3493         (text) Ditto.  Remove rich text support.
3494
3495         * print.c: (cmd_print) Remove now-unneeded resource cleanup code.
3496         (cmd_print_eject) Ditto.
3497         (cmd_write) Ditto.
3498         (internal_cmd_print) Now cleans up after itself.  Uses
3499         fh_parse_file_handle() now.
3500         (cmd_print_space) Use PXP_NUMERIC to type-check.
3501
3502         * q2c.c: Overhauled.  Removed _("") i18n support.  All references
3503         updated.  All output functions updated to handle structures rather
3504         than local or static variables.  Adapt to new PSPP lex_*()
3505         functions.
3506         (macro _) Removed.
3507         (macro N_) Removed.
3508         (macro MAX_N_SBC) Removed.
3509         (global bare) Removed.
3510         (enum STRING) Renamed T_STRING.
3511         (enum ID) Renamed T_ID.
3512         (get_buffer) Buffer size increased.
3513         (strlower) Renamed st_lower(), rephrased.
3514         (strupper) Renamed st_upper(), rephrased.
3515         (skip_ws) New function.
3516         (get_line) Don't special-case any types of lines (like those
3517         beginning with ! or $, for instance).
3518         (get_token) Renamed lex_get().  Rephrased.
3519         (static var `prefix') New.
3520         (parse) New function.
3521         (parse_setting) Minor rephrasing.
3522         (dump_specifier_vars) Ditto.
3523         (make_identifier) Put null terminator on identifier, duh.
3524         (dump_vars) Renamed dump_declarations().  Never indent.  Never
3525         static.  Output changed entirely.
3526         (dump_specifier_init) Rephrase.
3527         (dump_vars_init) No index variable needed.  Other modifications.
3528         (dump_parser) Don't parse command name.  Do dump functions instead
3529         of just code fragments.
3530         (dump_free) Dump function instead of code fragment.
3531         (recognize_directive) New function.
3532         (main) Use recognize_directive().  Don't rely on magic $ line
3533         beginning: instead, parse comments.  Update list of headers.
3534
3535         * random.c: New file, containing the following functions:
3536         real_rand(), real_srand(), setup_randomize, shuffle, rand_uniform,
3537         rand_normal, rand_simple.
3538
3539         * random.h: New file.
3540
3541         * recode.c: (cmd_recode) Merge internal_cmd_recode() into this
3542         function.  `max_src_width', `max_dst_width' changed to size_t.
3543         (internal_cmd_recode) Removed.
3544         (parse_dest_spec) Merge similar cases.
3545         (parse_src_spec) Add assertion.
3546
3547         * repeat.c: (recognize_keyword) New function.
3548         (internal_cmd_do_repeat) Parse and handle PRINT keyword on END
3549         REPEAT.  Improve recognition of END REPEAT (use
3550         recognize_keyword()).  Move from curfn to getl_location().  Use
3551         struct string.
3552                 
3553         (perform_DO_REPEAT_substitutions) Adapt to struct string.
3554
3555         * set.q: Adapt to new q2c.
3556         (cmd_set) Range-check some values better.
3557         (custom_blanks) Renamed stc_custom_blanks().
3558         (custom_length) Renamed stc_custom_length().
3559         (custom_results) Renamed stc_custom_results().
3560         (custom_seed) Renamed stc_custom_seed().
3561         (custom_width) Renamed stc_custom_width().
3562         (custom_format) Renamed stc_custom_format().
3563         (custom_journal) Renamed stc_custom_journal().
3564         (custom_color) Renamed stc_custom_color().
3565         (custom_listing) Renamed stc_custom_listing().
3566         (custom_disk) Renamed stc_custom_disk().
3567         (custom_log) Renamed stc_custom_log().
3568         (custom_rcolor) Renamed stc_custom_rcolor().
3569         (custom_viewlength) Renamed stc_custom_viewlength().
3570         (custom_workdev) Renamed stc_custom_workdev().
3571
3572         * settings.h: Not necessary to include format.h any longer.
3573
3574         * sfm-read.h: (macro bswap_int32) Moved here from sfmP.h.
3575         (corrupt_msg) Rewritten.
3576
3577         * sort.c: Adapt to rewritten heap ADT.
3578
3579         * str.c: (aa_strcpy) Removed.
3580         (ab_strcpy) Removed.
3581         (ac_strcpy) Removed.
3582         (ba_strcpy) Removed.
3583         (bb_strcpy) Removed.
3584         (ca_strcpy) Removed.
3585         (aa_strdup) Removed.
3586         (aa_strdupcpy) Removed.
3587         (ba_strdup) Removed.
3588         (sa_strdup) Removed.
3589         (memrev) Renamed mm_reverse().
3590         (memrmem) Renamed mm_find_reverse().
3591         (cmp_str) Renamed st_compare_pad().
3592         (strmaxcpy) Removed.
3593         (strbarepadcpy) Renamed st_bare_pad_copy(), signature changed.
3594         (strbarepadlencpy) Renamed st_bare_pad_len_copy(), signature
3595         changed.
3596         (strpadcpy) Renamed st_pad_copy(), signature changed.
3597         (blpstrset) Removed.
3598         (ds_create) New function.
3599         (ds_init) New function.
3600         (ds_replace) New function.
3601         (ds_destroy) New function.
3602         (ds_clear) New function.
3603         (ds_extend) New function.
3604         (ds_shrink) New function.
3605         (ds_truncate) New function.
3606         (ds_length) New function.
3607         (ds_size) New function.
3608         (ds_value) New function.
3609         (ds_end) New function.
3610         (ds_concat) New function.
3611         (ds_concat_buffer) New function.
3612         (ds_printf) New function.
3613         (ds_putchar) New function.
3614         (ds_getline) New function.
3615         (ds_get_config_line) New function derived from the old
3616         misc.c:get_config_line().
3617         (ls_create) New function.
3618         (ls_create_buffer) New function.
3619         (ls_init) New function.
3620         (ls_shallow_copy) New function.
3621         (ls_destroy) New function.
3622         (ls_null) New function.
3623         (ls_null_p) New function.
3624         (ls_empty_p) New function.
3625         (ls_length) New function.
3626         (ls_value) New function.
3627         (ls_end) New function.
3628
3629         * str.h: Reformatted.
3630         (struct a_string) Removed.
3631         (struct b_string) Removed.
3632         (struct c_string) Removed.
3633         (struct len_string) New.
3634         (struct string) New.
3635         (macro as_streq) Removed.
3636         (macro bs_streq) Removed.
3637         (macro cs_streq) Removed.
3638         (macro sa_streq) Removed.
3639         (macro sb_streq) Removed.
3640         [__GNUC__] (inline function ds_putchar) New function.
3641         [__GNUC__] (inline function ds_length) New function.
3642         [__GNUC__] (inline function ds_value) New function.
3643         [__GNUC__] (inline function ds_end) New function.
3644
3645         * sysfile-info.c: (cmd_sysfile_info) Rephrased.
3646         (display_vectors) Fix missing i18n.
3647
3648         * t-test.q: Migrate to new q2c.
3649
3650         * tab.c: Migrate from arenas to pools.
3651         (tab_create) Use struct len_string.
3652         (tab_realloc) Ditto.
3653         (text_format) Ditto.
3654         (tab_joint_text) Ditto.
3655         (tab_natural_width) Remove rich text support.
3656         (tab_natural_height) Ditto.
3657         (tab_output_text) Handle TAT_FIX.
3658         (tab_raw) Change arg from a_string to len_string.
3659         (tabi_driver) Fix assertion.  Use struct len_string.
3660         (render_strip) Use struct len_string.  Remove rich text support.
3661         Add `const' qualifiers.
3662
3663         * tab.h: (enum TAB_RICH) Remove.
3664         (enums TAB_COL_NONE, TAB_COL_DONE) New.  Where appropriate,
3665         SOM_COL_* updated to read TAB_COL_*.
3666         (struct tab_table) Change arena to pool.  Change a_string to
3667         len_string.
3668
3669         * temporary.c: (restore_dictionary) Rewrite Checker code.
3670
3671         * var.h: (macros MAX_SHORT_STRING, MIN_LONG_STRING, SYSMIS,
3672         LOWEST, HIGHEST) Moved here from common.h.
3673         (typedef any_trns) Removed.  All references changed to `struct
3674         trns_header'.
3675
3676         * vars-atr.c: (force_create_variable) Fix assertion.
3677         (force_dup_variable) Fix assertion.
3678         
3679 Thu Jun  3 18:40:42 1999  Ben Pfaff  <blp@gnu.org>
3680
3681         Using alphanumeric variables in functions under AGGREGATE
3682         segfaulted.  Fixed.  Thanks to Dr. Dirk Melcher
3683         <BZN-mdksh@t-online.de> for reporting this bug.
3684         
3685         * aggregate.c: (parse_aggregate_functions) When setting the
3686         FSTRING bit, also allocate memory for the `string' member of
3687         agr_next.
3688         (free_aggregate_functions) Free iter->string.  Don't use the
3689         non-function bits when indexing the array of functions.
3690         [DEBUGGING] (debug_print) Don't use the non-function bits when
3691         indexing the array of functions.        
3692
3693 Sun May 30 00:00:54 1999  Ben Pfaff  <blp@gnu.org>
3694
3695         Under certain circumstances, the final case would be omitted from
3696         the results of an AGGREGATE operation.  Fixed.  Thanks to Dr. Dirk
3697         Melcher <BZN-mdksh@t-online.de> for reporting this bug.
3698         
3699         * aggregate.c (agr_00x_end_func): Increment number of cases in
3700         sink before writing case.  For streams that keep track of how many
3701         cases there are based on this value, this means that the last case
3702         will be read in on the next stream read.
3703
3704 Sat May 29 22:03:31 1999  Ben Pfaff  <blp@gnu.org>
3705
3706         Undefined behavior was invoked by referencing a freed pointer.
3707         
3708         * vfm.c (memory_stream_write): Free pointer *after* checking for
3709         non-null status.
3710
3711 Sat May 29 22:02:22 1999  Ben Pfaff  <blp@gnu.org>
3712
3713         A wrong record size was displayed when paging the active file to
3714         disk.
3715         
3716         * vfm.c: (memory_stream_write) Fix off-by-one error.
3717
3718 Sat May 29 21:50:26 1999  Ben Pfaff  <blp@gnu.org>
3719
3720         Not having enough temporary space for sorting caused a core dump.
3721         Fixed.
3722         
3723         * sort.c: (allocate_cases) Initialize i.
3724
3725 Sat May 29 21:40:54 1999  Ben Pfaff  <blp@gnu.org>
3726
3727         Syntax errors in function descriptions on AGGREGATE caused core
3728         dumps.  Fixed.
3729         
3730         * aggregate.c (cmd_aggregate): Don't free agr_dict after calling
3731         free_aggregate_functions(), since that function already frees
3732         agr_dict.
3733         
3734 Sat May 29 21:06:10 1999  Ben Pfaff  <blp@gnu.org>
3735
3736         A null pointer was dereferenced, causing a core dump, when
3737         PERCENTILES was specified on FREQUENCIES.  This fixes the problem,
3738         but PSPP still doesn't calculate percentiles.  Thanks to Regnor
3739         Jernsletten <rjernsle@eunet.no> for reporting this problem.
3740         
3741         * arena.c: (arena_malloc) If the arena hasn't been initialized
3742         already, initialize it.
3743
3744 Sat May 29 20:47:29 1999  Ben Pfaff  <blp@gnu.org>
3745
3746         * Makefile.cygwin: New file supplied by Hankin <hankin@dunno.com>
3747         for compilation with Cygnus Windows B20.  Not used by other
3748         systems.
3749
3750 Sat May 29 20:36:04 1999  Ben Pfaff  <blp@gnu.org>
3751
3752         SORT always sorted in ascending order.  Fixed.  Thanks to Dr. Dirk
3753         Melcher <BZN-mdksh@t-online.de> for reporting this bug.
3754
3755         * sort.c: (compare_case_lists) Reverse sense of comparison if
3756         sorting in descending order.
3757         (compare_record) Ditto.
3758
3759 Tue Mar  9 13:18:54 1999  Ben Pfaff  <blp@gnu.org>
3760
3761         SPLIT FILE with a string variable caused a core dump.  Fixed.
3762
3763         * vfm.c: If the variable is a string then make a temporary value
3764         struct pointing to it.  The underlying problem is a lot bigger
3765         than this (see TODO) but this is a stopgap for the simple case at
3766         least.
3767         
3768 Tue Mar  9 13:15:53 1999  Ben Pfaff  <blp@gnu.org>
3769
3770         Nested INCLUDEs didn't work.  Fixed.
3771
3772         * getline.c: (getl_include) Set first_line to NULL in allocated
3773         structure.
3774
3775 Tue Mar  9 13:13:46 1999  Ben Pfaff  <blp@gnu.org>
3776
3777         The MATCH FILES procedure set the values of variables not present
3778         to 0.  It should have been SYSMIS.  This is now fixed.
3779
3780         * get.c: (mtf_delete_file_in_place) Replace 0.0 by SYSMIS.
3781
3782 Tue Mar  9 12:52:23 1999  Ben Pfaff  <blp@gnu.org>
3783
3784         The REMARK command was too aggressive about skipping lines.  It
3785         didn't like being the last command in a file.
3786
3787         * command.c: (cmd_remark) Call get_entire_line() instead of
3788         get_line().
3789
3790 Tue Mar  9 12:48:05 1999  Ben Pfaff  <blp@gnu.org>
3791
3792         Comment parsing wasn't consistent with the rest of the code in its
3793         idea of where one command ends and another starts.  This meant
3794         that sometimes commands would be mysteriously ignored.  Thanks to
3795         Dr. Dirk Melcher <BZN-mdksh@t-online.de> for reporting this bug.
3796          
3797         * command.c: (parse_cmd) Hand off comment parsing to new function
3798         skip_comment() in lexer.c.
3799         * lexer.c: (skip_comment) New function.
3800
3801 Wed Jan 20 20:22:07 1999  Ben Pfaff  <blp@gnu.org>
3802
3803         The TABLE subcommand on MATCH FILES worked only erratically at
3804         best.  This fixes it.  Thanks to Dr. Dirk Melcher
3805         <BZN-mdksh@t-online.de> for reporting this bug.
3806
3807         * get.c: (mtf_compare_BY_values) When comparing string values, a
3808         difference of 1 is still a difference :-)
3809         (mtf_processing) Inverted TABLE reading logic fixed.  Also don't
3810         advance TABLE files automatically when matched.  Comment fixes.
3811
3812 Tue Jan 19 22:32:31 1999  Ben Pfaff  <blp@gnu.org>
3813
3814         VARIABLE LABELS rejected a slash before the first variable
3815         specification, contradicting the documentation.  Thanks to Walter
3816         M. Gray <graywm@northernc.on.ca> for reporting this bug.
3817
3818         * var-labs.c: (cmd_variable_labels) Ignore a leading slash in
3819         command specification.
3820
3821 Tue Jan 19 22:29:54 1999  Ben Pfaff  <blp@gnu.org>
3822
3823         Because of an incorrect optimization in memory allocation,
3824         CROSSTABS sometimes segfaulted when asked to output multiple
3825         tables.  Thanks to Walter M. Gray <graywm@northernc.on.ca> for
3826         reporting this bug.
3827
3828         * crosstabs.q: (postcalc) New variables maxcols, maxcells, which
3829         are passed to output_pivot_table() for its use.
3830         (output_pivot_table) Instead of assuming the number of columns is
3831         constant, keep track with maxcols.  In general mode, use maxcells
3832         to determine whether more matrix cells need to be allocated.    
3833
3834 Tue Jan 19 22:27:46 1999  Ben Pfaff  <blp@gnu.org>
3835
3836         CROSSTABS didn't display value labels for column and row
3837         variables.  Thanks to Walter M. Gray <graywm@northernc.on.ca> for
3838         reporting this bug.
3839
3840         * crosstabs.q: (table_value_missing) If the specified value has a
3841         value label for this variable, then show it instead of the raw
3842         value.
3843         (display_dimensions) Delegate display of value_labels to
3844         table_value_missing.
3845
3846 Mon Jan 18 20:04:06 1999  Ben Pfaff  <blp@gnu.org>
3847
3848         WRITE didn't write line ends.  Fixed.  Thanks to Dr. Dirk Melcher
3849         <BZN-mdksh@t-online.de> for reporting this bug.
3850
3851         * print.c: (print_trns_proc) Write (CR/)LF if PRINT is used _or_
3852         if the file isn't declared as binary.
3853
3854 Mon Jan 18 19:56:45 1999  Ben Pfaff  <blp@gnu.org>
3855
3856         MATCH FILES corrupted memory and dumped core on some syntax
3857         errors.  Fixed.
3858
3859         * get.c: (cmd_match_files) Set file->handle to NULL before
3860         jumping to lossage.
3861         (mtf_free_file) Don't free a null dictionary.   
3862
3863 Mon Jan 18 19:27:57 1999  Ben Pfaff  <blp@gnu.org>
3864
3865         MATCH FILES should set numeric values not available to the
3866         system-missing value, not to 0.  Thanks to Dr. Dirk Melcher
3867         <BZN-mdksh@t-online.de> for reporting this bug.
3868
3869         * get.c: (mtf_processing) Set unused records to system-missing,
3870         not 0.
3871
3872 Mon Jan 18 15:06:46 1999  Ben Pfaff  <blp@gnu.org>
3873
3874         KEEP didn't work properly on the SAVE procedure.  Fixed.  Thanks
3875         to Ralf Geschke <ralf@kuerbis.org> for reporting this bug.
3876
3877         * temporary.c: (save_dictionary) Initialize var_by_name AVL tree
3878         in newly created dictionary, and add each copied variable to the
3879         tree.
3880  
3881 Mon Jan 18 15:04:48 1999  Ben Pfaff  <blp@gnu.org>
3882
3883         Memory leak fix.
3884         
3885         * get.c: (trim_dictionary) Free variable list for KEEP after
3886         finishing with it.
3887
3888 Mon Jan 18 12:57:36 1999  Ben Pfaff  <blp@gnu.org>
3889
3890         Some systems didn't like the way open_file was coded.  Thanks to
3891         Hankin <hankin@rogue.consultco.com> for pointing this out.
3892
3893         * filename.c: (open_file) Don't try to store stdin, stdout,
3894         stderr as part of an array, because that doesn't always work.
3895
3896 Mon Jan 18 12:53:27 1999  Ben Pfaff  <blp@gnu.org>
3897
3898         The SAVE procedure didn't save long string variables properly.
3899         Fixed by this patch.  Thanks to Hankin
3900         <hankin@rogue.consultco.com> for this patch.
3901         
3902         * sfm-write.c: (write_variable) Fix off-by-one error in writing
3903         out variable pad records.
3904
3905 Tue Jan  5 14:29:27 1999  Ben Pfaff  <blp@gnu.org>
3906
3907         Previously, if PRINT SPACE were given a negative argument, it
3908         would report an error, then spin in an (almost) infinite loop.
3909         This fixes that behavior.
3910
3911         * print.c: (print_space_trns_proc) After reporting a negative
3912         argument, set number of lines to print to 1.
3913
3914 Tue Jan  5 13:59:55 1999  Ben Pfaff  <blp@gnu.org>
3915
3916         SPSS 8.0 outputs some new record types in its system files, and it
3917         allows longer value labels.  Accept these system files.
3918
3919         * sfm-read.c: (sfm_read_dictionary) Ignore record type 7 subtype
3920         11 emitted by SPSS 8.0.
3921         
3922 Tue Jan  5 13:55:50 1999  Ben Pfaff  <blp@gnu.org>
3923
3924         The LIST procedure was too conservative in allocating space for
3925         buffers, which caused a bug that only showed up with very long
3926         output variables.  Thanks to Hankin <hankin@dunno.com> for this
3927         bug report.
3928
3929         * list.q: (determine_layout) Allocate 1022 bytes instead of 256.
3930
3931 Tue Jan  5 13:34:34 1999  Ben Pfaff  <blp@gnu.org>
3932
3933         Typo meant string format specifiers weren't checked properly.  I
3934         think that Hankin <hankin@dunno.com> sent me this report, but I'm
3935         willing to be corrected on this point.
3936  
3937         * format.c: (check_string_specifier) Fix obvious typo.  
3938
3939 Tue Jan  5 12:50:42 1999  Ben Pfaff  <blp@gnu.org>
3940
3941         Using $CASENUM in an expression didn't work.  Here's a fix.
3942         Thanks to Dirk Melcher <BZN-mdksh@t-online.de> for reporting this
3943         bug.
3944          
3945         * expr-evl.c: (evaluate_expression) Add OP_CASENUM case.
3946
3947         * expr-opt.c: (dump_node) OP_CASENUM is acceptable.
3948
3949 Tue Jan  5 12:47:48 1999  Ben Pfaff  <blp@gnu.org>
3950
3951         The changes in 0.2.1 to fix DATA LIST FREE parsing broke some
3952         other behavior, *sigh*.  This patch hopefully fixes that.  This
3953         time I've actually tested it.
3954
3955         Thanks to Hankin <hankin@dunno.com> for reporting this bug.
3956
3957         * data-list.c: (read_from_data_list_free,
3958         read_from_data_list_list) Call parse_string_as_format() directly
3959         without mucking around with the field width.
3960
3961 Tue Jan  5 12:31:19 1999  Ben Pfaff  <blp@gnu.org>
3962
3963         Occasionally, you may encounter a script that wants to be
3964         interpreted in interactive mode.  Make -i emulate this behavior to
3965         allow such scripts to be executed with PSPP.
3966
3967         Thanks to Hankin <hankin@dunno.com> for reporting this behavior.
3968
3969         * cmdline.c: (pre_syntax_message[]) Update -i description.
3970
3971         * lexer.c: (preprocess_line) When getl_interactive is 2 (i.e.,
3972         when -i is given on the command line) don't treat unindented lines
3973         as starting a new command.
3974
3975 Tue Jan  5 12:30:10 1999  Ben Pfaff  <blp@gnu.org>
3976
3977         In conjunction with egcs 1.1.1, Checker emits some bogus warnings,
3978         mostly caused by local initialized aggregates.  After egcs is
3979         fixed upstream these can be removed, but for now they're not a big
3980         deal.
3981         
3982         * ascii.c: (ascii_postopen_driver) Checker chokes on local
3983         initialized arrays.  Avoid this.
3984
3985         * sfm-write.c: (sfm_write_dictionary) Don't use a local
3986         initialized struct.
3987
3988 Tue Jan  5 12:07:24 1999  Ben Pfaff  <blp@gnu.org>
3989
3990         egcs 1.1.1 has some new warnings relative to gcc 2.8.1, which the
3991         following changes avoid.  Currently I compile sources with egcs
3992         1.1.1 and gcc 2.7.2.3 before sending them out.
3993
3994         * apply-dict.c: (apply_dict) Use new avl_traverser_init() macro.
3995         
3996         * ascii.c: (option_tab[]) Initialize all struct members.
3997
3998         * avl.h: (avl_traverser_init) New macro.
3999         
4000         * command.c: (DEFCMD, UNIMPL macros, cmd_table[]) Initialize all
4001         struct members.
4002
4003         * crosstabs.q: (enum_var_values) Use new hsh_iterator_init()
4004         macro.
4005
4006         * hash.c: Comment fix.
4007
4008         * hash.h: (hsh_iterator_init) New macro.
4009
4010         * html.c: (option_tab[]) Initialize all struct members.
4011
4012         * pfm-write.c: (write_value_labels) Use new avl_traverser_init()
4013         macro.
4014
4015         * postscript.c: (option_tab[]) Initialize all struct members.
4016         (output_encodings, preclose, dump_lines) Use new
4017         hsh_iterator_init() macro.
4018
4019         * sfm-write.c: (write_value_labels) Use new avl_traverser_init()
4020         macro.
4021
4022         * sysfile-info.c: (describe_variable) Use new avl_traverser_init()
4023         macro.
4024
4025 Thu Nov 19 12:32:45 1998  Ben Pfaff  <blp@gnu.org>
4026
4027         * data-in.c: Examined each of the parsing functions to make sure
4028         that they wouldn't dump core if they were passed a string of the
4029         wrong length, since now the DATA LIST FREE/LIST routines don't
4030         check for field width before passing it to the data parser.
4031         (parse_RBHEX, parse_AHEX) Reject odd length input.
4032         (parse_string_as_format) Reject input that's too short or too
4033         long.
4034
4035         * data-list.c: Before, the DATA LIST FREE/LIST routines would pad
4036         a field to its entire declared output width then pass it to the
4037         data-in parsing routines.  This contradicted the documented
4038         behavior.  This is fixed in these changes.  Thanks to Mark H. Wood
4039         <mwood@IUPUI.Edu>.  In addition, this fixes a few more details of
4040         free-format parsing that differed from SPSS.
4041         (cut_field) Commas and spaces are treated identically.  Returns
4042         the proper column instead of a fixed 1 value.
4043         (parse_field) Removed.
4044         (read_from_data_list_free, read_from_data_list_list) Call
4045         parse_string_as_format directly instead of parse_field.
4046
4047         * heap.c: (heap_delete) Stylistic fixes.
4048
4049 Sun Aug  9 11:12:13 1998  Ben Pfaff  <blp@gnu.org>
4050
4051         * loop.c: (loop_2_trns_proc) Formatting fix.
4052
4053         * sel-if.c: (cmd_filter) Set FILTER_before_TEMPORARY.
4054
4055         * var.h: (glob var FILTER_before_TEMPORARY) New global var.
4056
4057         * vfm.c: (macro FILTERED) New.
4058         (static var filter_var) New.
4059         (process_active_file_write_case) Use FILTERED.
4060         (setup_filter) Set filter_var.
4061         (close_active_file) Delete the filter if not
4062         FILTER_before_TEMPORARY.
4063         (procedure_write_case) Use FILTERED.
4064
4065 Sat Aug  8 00:20:14 1998  Ben Pfaff  <blp@gnu.org>
4066
4067         * crosstabs.q: Changed /PIVOT={ON,OFF} to /FORMAT={PIVOT,NOPIVOT}.
4068
4069         * data-in.c: (parse_day_count) Message fix.
4070         (parse_month) Style fix.
4071
4072         * data-list.c: (struct data_list_pgm) New member eof.
4073         (cmd_data_list) Init eof to 0.
4074         (do_reading) Implement the /END subcommand and read-past-eof
4075         checking.
4076
4077         * do-if.c: Include stdio.h when debugging.
4078         (cmd_else_if) Make sure the command is .-terminated.
4079
4080         * glob.c: (init_glob) Capitalize the command prompt.
4081
4082         * inpt-pgm.c: (end_case_trns_proc) Debugging message.
4083         (end_file_trns_proc) Debugging message.
4084
4085         * loop.c: (internal_cmd_loop) Make it work when there's no loop
4086         index!
4087         (loop_2_trns_proc) Enable MXLOOPS (why was this disabled?)
4088
4089         * main.c: (dump_token) Make kwtab[] const.
4090
4091         * set.q: Spelling, comment fixes.
4092
4093         * sysfile-info.c: (cmd_display) DISPLAY VECTORS not DISPLAY
4094         VECTOR.
4095
4096         * vars-prs.c: (fill_all_vars) Style fix.
4097
4098         * vfm.c: (index_to_varname) Return const.
4099
4100 Tue Aug  4 23:49:23 1998  Ben Pfaff  <blp@gnu.org>
4101
4102         * Changes in many source files for partial -ansi -pedantic and
4103         no-debugging compliance: Remove trailing common in enum
4104         declarations; add `unused' attributes; insert some appropriate
4105         casts.
4106
4107         * cmdline.c: (parse_command_line) Add new --testing-mode flag.
4108
4109         * command.c: (shell) Make static.
4110         (run_command) Make static.
4111
4112         * data-list.c: (dump_fixed_table) Remove use of local_strdup().
4113
4114         * dfm.c: (cmd_begin_data) I18n fix.
4115
4116         * error.c: (verbose_msg) Define if __STRICT_ANSI__.
4117
4118         * error.h: (macro verbose_msg) Define if __STRICT_ANSI__.
4119
4120         * expr-opt.c: (evaluate_tree) Don't initialize local arrays if
4121         __STRICT_ANSI__.
4122
4123         * file-handle.q: Don't prepend the source file directory name to
4124         the data file name.  (Ongoing issue.)
4125         (prepend_current_directory) Comment out.
4126         (internal_cmd_file_handle) Don't call prepend_current_directory().
4127         (fh_get_handle_by_filename) Ditto.
4128
4129         * filename.c: Append zero byte to readlink() return value.
4130
4131         * getline.c: (getl_read_line) I18n fix.
4132
4133         * lexer.h: Don't use gcc features if __STRICT_ANSI__.
4134
4135         * misc.h: Don't use gcc features if __STRICT_ANSI__.
4136
4137         * pfm-write.c: (bufwrite) Don't try to increment a void * pointer
4138         directly.
4139
4140         * postscript.c: (output_encodings) Don't use local_strdup().
4141         (postopen) Ditto.
4142
4143         * print.c: Don't use gcc features if __STRICT_ANSI__.
4144
4145         * q2c.c: (dump_vars) Don't put a , at the end of the last enum.
4146
4147         * recode.c: (parse_src_spec) Fully brace nested if's.
4148
4149         * set.q: (global var set_testing_mode) New var.
4150
4151 Wed Jul 29 22:01:44 1998  Ben Pfaff  <blp@gnu.org>
4152
4153         * ascii.c: Add some more `unused' attributes that only come into
4154         play when NDEBUG is defined.
4155         (ascii_close_page) Set s_len when reallocating s.
4156         
4157         * crosstabs.q: (delete_missing) New function.
4158         (output_pivot_table) Call delete_missing() if /MISSING=REPORT.
4159         (make_summary_table) Create summary table reallocable.
4160
4161         * postscript.c: Add more `unused' attributes as above.
4162
4163         * tab.c: (tab_create) [GLOBAL_DEBUGGING] Set reallocable member.
4164         (tab_realloc) [GLOBAL_DEBUGGING] Assert that table is reallocable.
4165          
4166         * tab.h: (struct tab_table) [GLOBAL_DEBUGGING] New `reallocable'
4167         member.
4168
4169         * var.h: (macro force_dup_variable) [!GLOBAL_DEBUGGING] Remove
4170         gratuitous space between parameter definition.
4171
4172         * vars-atr.c: Changed some assert(0)'s to abort()'s to prevent
4173         complaints about running off the end of functions with NDEBUG
4174         enabled.
4175
4176 Sun Jul  5 00:17:25 1998  Ben Pfaff  <blp@gnu.org>
4177
4178         * Several source files: Removed some PORTME notes when reflection
4179         revealed that ANSI forbids that sort of breakage.  Also, added
4180         lots of `unused' qualifiers here and there.
4181
4182         * aggregate.c: (accumulate_aggregate_info) Remove local var
4183         weighting that turned out not to be used.
4184
4185         * avl.c: Update to version 1.1.0.  Add unused specifier.
4186         (avl_destroy) Initialize ab to 0.  Comment fixes.  Cast return
4187         value to void *.
4188         (avl_probe) Replace some instances of 1 with +1 where appropriate.
4189         (avl_find) Cast return value to void *.
4190         (avl_delete) q doesn't need to be initialized at the beginning of
4191         the function.  Replace some instances of 1 with +1.
4192         (force_avl_delete) Renamed avl_force_delete, all references changed.
4193         (compare_ints) `param' marked unused.
4194         (print_int) `param' marked unused.
4195         (recurse_tree) Replace some instances of 1 with +1.
4196
4197         * avl.h: Update to version 1.1.0.  Only declares avl function
4198         types if not already declared.
4199         (AVL_MAX_HEIGHT) Only define if not already defined.
4200         (struct avl_node) New unused member char pad[2].
4201         [GLOBAL_DEBUGGING] Change conditionalization to NDEBUG instead.
4202         (force_avl_insert) Renamed avl_force_insert.
4203         (force_avl_delete) Renamed avl_force_delete.
4204
4205         * crosstabs.q: (struct table_entry) Put `freq' into a union with
4206         new member `data'.
4207         (struct crosstab) Add new member `ofs'.
4208         (glob var int_tab) Removed.
4209         (custom_tables) In integer mode, assign v[i] properly through the
4210         indirect var_dict.
4211         (custom_variables) Now p.crs.max == max + 1.
4212         [DEBUGGING] (debug_print) p.crs.min and p.crs.max are now ints.
4213         (precalc) Implement integer mode.
4214         (calc_integer) Implement integer mode.
4215         (compare_table_entry) Remove unused local variable `comparing'.
4216         (make_summary_table) Implement integer mode.
4217         (macro ns_rows) Implemented as static variable now.
4218         (several variables) Made static, from global.
4219         (output_pivot_table) Use table_value_missing() for column heads.
4220         Remove several unused local variables.  Implement integer mode
4221         table summing.  Count up ns_rows.
4222         (crosstabs_dim) Make columns wider when /MISSING=REPORT requested.
4223         (find_pivot_extent) Moved into find_pivot_extent_general; now just
4224         calls that function or find_pivot_extent_integer.
4225         (find_pivot_extent_integer) New function.
4226         (enum_var_values) Implemented for integer mode.
4227         (table_value_missing) New function.
4228         (display_dimensions) Call table_value_missing() for heads.
4229         (float_M_suffix) New function.
4230         (display_crosstabulation) Call table_value_missing() for row
4231         heads.  Handle missing values in /MISSING=REPORT mode.
4232         (calc_fisher) Remove unused var N.
4233         (calc_r) Remove unused var fact.
4234
4235         * data-list.c: (dump_fixed_table) Fix table dimensioning.
4236         (read_one_set_of_repetitions) Remove unused vars var_spec, column.
4237
4238         * data-out.c: (insert_commas) Remove unused var cp.
4239         (convert_CCx) Remove unused vars save_set_decimal,
4240         save_set_grouping.
4241
4242         * descript.q: (dump_z_table) Fix table dimensioning.
4243         (pre_calc) Remove unused var j.
4244         (display) Remove unused vars title, s.  Fix table dimensioning.
4245
4246         * expr-evl.c: Comment fixes.
4247
4248         * frequencies.q: (full_dim) New function.
4249         (dump_full) Fix table dimensioning.
4250         (condensed_dim) New function.
4251         (dump_condensed) Fix table dimensioning.
4252
4253         * get.c: (cmd_match_files) Remove unused var n_val.  Remove unused
4254         label winnage.
4255
4256         * html.c: (html_close_drive) Remove unused var i.
4257         (postopen) Remove unused vars title, curfn_len, cp.
4258         (preclose) Remove unused vars this, x.
4259
4260         * lexer.c: Comment fixes.
4261
4262         * matrix-data.c: (cmd_matrix_data) Remove unused var index.
4263
4264         * means.q: (custom_tables) Remove unused var m_dim.
4265
4266         * mis-val.c: Format fix.
4267
4268         * modify-vars.c: (cmd_modify_vars) Remove unused var new_dict.
4269
4270         * output.c: (outp_get_paper_size) Remove unused var cp.
4271
4272         * pfm-read.c: (read_float) Remove unused var save, unused label
4273         underflow.
4274         (read_variables) Remove unused vars cp, j.
4275         (read_value_label) Remove unused var j.
4276
4277         * pfm-write.c: (bufwrite) Remove unused var i.
4278
4279         * postscript.c: (ps_postopen_drive) Remove unused vars dev_info,
4280         fn.
4281         (output_encodings) Remove unused vars char_cp, n_output.
4282         (read_ps_encodings) Remove unused var ep.
4283         (postopen) Remove unused var title.
4284         (preclose) Remove unused var fp.
4285         (ps_open_page) Remove unused vars true, false, orientation,
4286         mirror_horz, mirror_vert, width, length.
4287         (ps_text_metrics) Remove unused var x.
4288
4289         * q2c.c: (find_symbol) Remove unused var y.
4290         (parse_setting) Remove unused parameter sbc, all references
4291         changed.
4292         (dump_parser) Remove unused var cp.
4293         (dump_free) Remove unused var i.
4294
4295         * set.q: (static vars args, n) Removed.
4296         (internal_cmd_gset) Removed.
4297
4298         * sfm-read.c: (sfm_read_dictionary) Removed unused var i.
4299         (read_machine_flt64_info) Removed unused var file_endian.
4300         (read_documents) Removed unused var i.
4301         (read_compressed_data) Removed unused parameter dict, all
4302         references changed.
4303
4304         * sfm-write.c: (bufwrite) Removed unused var i.
4305         (sfm_write_case) Removed unused var i.
4306
4307         * sort.c: (merge_once) Remove unused var t.
4308         (write_separate) #if 0 out as dead code.
4309
4310         * split-file.c: (cmd_split_file) Remove unused var i.
4311
4312         * sysfile-info.c: (sysfile_info_dim) New function.
4313         (cmd_sysfile_info) Fix table dimensioning.
4314         (variables_dim) New function.
4315         (display_variables) Fix table dimensioning.
4316         (describe_variable) Remove unused var prev_r.
4317
4318         * t-test.q: (z_postcalc) Removed.
4319         (pairs_calc) Remove unused var bad_weight.
4320         (postcalc) Remove unused vars dfn, dfd.
4321
4322         * tab.c: (tab_create) Set t->dim to NULL.
4323         (tab_dim) Make sure t->dim is NULL first.
4324         (tab_natural_width) Remove parameter `clamp'.
4325         (tab_value) Remove duplicate assertion for table.
4326         (tab_raw) New function.
4327         (nowrap_dim) New function.
4328         (wrap_dim) New function.
4329         (tab_output_text) Fix table dimensioning.
4330
4331         * tab.h: (tab_raw) New macro.
4332
4333         * val-labs.c: (get_label) Remove unused var type.
4334         (copy_value_labels) Remove unused var trav.
4335
4336         * var.h: (struct crosstab_proc) Completely changed.
4337
4338         * vars-prs.c: (parse_dict_variable) Remove unused var v.
4339
4340         * vfm.c: (open_active_file) Remove unused vars i, lp.
4341
4342         * weight.c: (weight_trns_proc) #if 0 out as dead code.
4343         
4344 Tue Jun  2 23:37:21 1998  Ben Pfaff  <blp@gnu.org>
4345
4346         * Makefile.am: Add apply-dict.c, flip.c.
4347
4348         * apply-dict.c: New file.
4349         
4350         * command.c: (struct command) Make cmd[] larger for CLEAR
4351         TRANSFORMATIONS command name.
4352         (parse_cmd) Make sure we're in a valid state before using it as an
4353         index.  Discard variables and reset state on invalid transitions.
4354         (cmd_clear_transformations) New function.
4355
4356         * command.def: Add APPLY DICTIONARY, CLEAR TRANSFORMATIONS, FLIP.
4357         Add unimplemented PRESERVE, RESTORE.
4358
4359         * file-handle.h: Include stddef.h.
4360
4361         * flip.c: New file.
4362         
4363         * pfm-read.c: (parse_value) Pad value label values with spaces,
4364         not nulls.
4365
4366         * sfm-read.c: (struct sfm_fhuser_ext) Add reference count.
4367         (sfm_close) Decrement reference count, make sure it's zero.
4368         (sfm_maybe_close) New function.
4369         (sfm_read_dictionary) Handle reference counts.
4370
4371         * vars-atr.c: (clear_default_dict) New function.
4372         (discard_variables) Use clear_default_dict().
4373
4374 Sun May 31 00:58:05 1998  Ben Pfaff  <blp@gnu.org>
4375
4376         * Makefile.am: Add pfm-write.c.
4377         (LDADD) Add the libgmp2 libraries.
4378
4379         * command.def: Define EXPORT.
4380
4381         * get.c: (cmd_export) New function.
4382         (export_write_case_func) New function.
4383
4384         * pfm-read.c: (static spss2ascii[]) Make it const.
4385
4386         * pfm-write.c: New file.
4387
4388         * sfm-write.c: Formatting, comment fixes.
4389
4390         * var.h: Comment fix.
4391
4392 Fri May 29 21:44:12 1998  Ben Pfaff  <blp@gnu.org>
4393
4394         * Makefile.am: Add pfm.h, pfm-read.c.
4395
4396         * command.def: IMPORT is now implemented.
4397
4398         * format.c: (glob var translate_fmt[]) New var.
4399
4400         * get.c: (enum GTSV_NONE) Renamed GTSV_OPT_NONE.
4401         (cmd_import) New function.
4402         (import_source_read) New function.
4403         (glob var import_source) New var.
4404
4405         * pfm-read.c: New file.
4406
4407         * pfm.h: New file.
4408         
4409         * sfm-read.c: (parse_format_spec) Local variable translate_fmt[]
4410         moved in format.c.
4411         (dump_dictionary) Disabled printing a couple of items.
4412
4413 Mon May 25 12:42:37 1998  Ben Pfaff  <blp@gnu.org>
4414
4415         * crosstabs.q: (postcalc) Call make_summary_table().
4416         (make_summary_table) New function.
4417         (insert_summary) New function.
4418         (display_dimensions) Remove some unnecessary arguments, all
4419         references changed.
4420         (output_pivot_table) Fix lots of problems with the risk table
4421         setup.
4422         (submit) Don't display an empty table.
4423         (display_risk) Fix order of arguments to calc_risk().
4424
4425         * glob.c: Always include assert.h and stdlib.h.
4426
4427         * output.h: (enum OUTP_T_JUST_FULL) Removed, all references
4428         removed.
4429
4430         * tab.c: (tab_create) Cosmetic changes.
4431
4432         * tab.h: (enum TAB_JUSTIFY) Removed, all references removed.
4433
4434 Sun May 24 22:39:23 1998  Ben Pfaff  <blp@gnu.org>
4435
4436         * tab.def: Removed.
4437
4438         * crosstabs.q: (output_pivot_table) Headers drawing and submission
4439         code simplified, moved into new function submit().
4440         (submit) New function.
4441         (crosstabs_dim) New function.
4442         (display_directional) Substitute variable names for %s where
4443         appropriate.
4444         (somers_d_v[], somers_d_ase[], somers_d_t[]) New static vars.
4445         (calc_symmetric) Initialize parameters only if non-NULL.
4446         Calculate Somers' d.
4447         (calc_directional) Calculate Somers' d (or copy it, really).
4448         Calculate eta.
4449
4450         * output.c: (outp_string_width) New function.
4451
4452         * postscript.c: (postopen) Calculate font widths based on the
4453         width of the zero '0' character, not the width of the space
4454         character.  Set paper-width and paper-length based on points, not
4455         device units.
4456         (ps_open_page) Fix page setup string for landscape mode.
4457
4458         * som.h: (struct som_dimension) Removed.
4459         (struct som_table_class) height, width members take int * not
4460         som_dimesion * now.
4461
4462         * tab.c: Many functions now have added parameter validation.
4463         (tab_height, tab_width) These functions were removed and merged
4464         into a single function tab_resize(), and all references changed.
4465         (tab_dim) Rewritten since the interface changed; reduced from
4466         hundreds of lines to two.  All callers were changed.  Currently
4467         most of them just use tab_natural_dimensions as their callback and
4468         await detailed translation of functionality.
4469         (tab_natural_width) New function.
4470         (tab_natural_height) New function.
4471         (tab_natural_dimensions) New function.  This is a callback
4472         function, not something that you'd want to call directly.
4473         (tab_nat_dim) Removed.
4474         (tabi_table) Allocates t->w and t->h.
4475         (tabi_driver) Inlined sum_columns()'s functionality.  Calls the
4476         dimensions callback.
4477         (evaluate_dimensions) Removed.
4478         (sum_columns) Removed.
4479
4480         * tab.h: (enum TAL_1THIN) Removed.
4481         (enum series t_*) Removed.
4482         (struct tab_table) Members trh, trv changed to unsigned char *
4483         from int *.  Member dim changed to a function pointer from a
4484         unsigned char *.  Member max_stack_height removed.  New members
4485         hr_tot, vr_tot.
4486         (macros tab_l, tab_r, tab_t, tab_b) New.
4487
4488 Sat May 23 23:22:13 1998  Ben Pfaff  <blp@gnu.org>
4489
4490         * ascii.c: (delineate) Assign last_space_nchars before skipping
4491         spaces, to fix right justification.
4492
4493         * crosstabs.q: (static vars risk, direct) New vars.
4494         (static var pearson_r) Removed.
4495         (glob var chisq_fisher) Made static.
4496         (static vars row_tot[], col_tot[]) Don't include grand total
4497         anymore.
4498         (static var grand_total) Renamed W, all references changed.
4499         (output_pivot_table) Only make `table' if num_cells != 0.  Make
4500         risk and directional tables.  Deal with grand total no longer part
4501         of col_tot[].  Free rows and cols after we're done with them.
4502         (display_risk) New function.
4503         (display_directional) New function.
4504         (clac_r) Rewritten so that it stores all its results into its
4505         arguments, so it can be used for Spearman's correlation too.
4506         (calc_symmetric) Added a t[] argument, all references changed.
4507         Calculates ASEs for tau-b, tau-c, gamma.  Calculates Spearman's r,
4508         Pearson's r, Cohen's kappa.
4509         (calc_risk) New function.
4510         (calc_directional) New function.
4511
4512         * som.c: (som_submit) Improved debugging code.
4513
4514         * stats.c: (hypercube) New function.
4515         (cube) New function.
4516         (sqr) New function.
4517         (normal_sig) Went back to old implementation, which actually
4518         worked.
4519
4520         * stats.h: (macros square, cube, hypercube) Removed.  The
4521         equivalent functions in stats.c are inlined here; all references
4522         to square changed to sqr.
4523
4524 Fri May 22 00:03:41 1998  Ben Pfaff  <blp@gnu.org>
4525
4526         * crosstabs.q: (N_SYMMETRIC) New define.
4527         (postcalc) Disable debug printing.
4528         (static vars chisq_fisher, pearson_r) New.
4529         (output_pivot_table) Add support for symmetric measures.  Add
4530         chi-square output of exact sigs.
4531         (display_chisq) Rewritten.
4532         (display_symmetric) New function.
4533         (gamma_int) New function.
4534         (Pr) New function.
4535         (swap) New function.
4536         (calc_fisher) New function.
4537         (calc_chisq) Check boundary conditions better. Calculate Yates,
4538         Fisher, Mantel-Haenszel tests.
4539         (calc_r) New function.
4540         (calc_symmetric) New function.
4541
4542         * stats.c: (normal_sig) Rewritten with new algorithm.  Renamed
4543         from calc_normal.
4544         (chisq_sig) Better boundary conditions.  Renamed from
4545         calc_significance.
4546
4547         * tab.h: (struct tab_table) New member cf.
4548
4549         * tab.c: (tab_create) Set cf.
4550         (tab_width) New function.
4551         (tab_realloc) Handle cf.
4552         (tab_vline) Handle cf.
4553         (tab_hline) Handle cf.
4554         (tab_box) Handle cf.
4555         (tab_value) Handle cf.
4556         (tab_float) Handle cf.
4557         (tab_text) Handle cf.
4558         (tab_joint_text) Handle cf.
4559         (tab_offset) Handle cf.
4560         (tab_next_row) Handle cf.
4561         (evaluate_dimensions) Handle cf.
4562         (render_strip) Handle cf.
4563
4564 Wed May 20 00:03:59 1998  Ben Pfaff  <blp@gnu.org>
4565
4566         * crosstabs.q: (postcalc) New vars row_tot, col_tot, pass them to
4567         output_pivot_table().
4568         (output_pivot_table) Moved lots of local variables outside and
4569         made them static.  Add beginnings of chi-square statistic
4570         support.  Now column and row totals aren't in the main matrix.
4571         Always zero out any leftover rows & columns after we're done with
4572         the table entries.  Move all output stuff into
4573         display_dimensions(), display_crosstabs(), display_chisq().
4574         (display_dimensions) New function.
4575         (display_crosstabulation) New function.
4576         (display_chisq) New function.
4577         (calc_chisq) Implemented Pearson and likelihood-ratio chisquares.
4578
4579         * frequencies.q: (dump_full, dump_condensed) Remove tab_null()
4580         references, simplify logic.
4581
4582         * postscript.c: Remove scale, translate-x, translate-y,
4583         mirror-horz, mirror-vert, rotate-180 options.
4584         (struct ps_driver_ext) Remove scale, translate_x, translate_y.
4585         All references deleted.
4586         (macro YT) New macro.
4587         (array option_tab[]) Removed options.
4588         (ps_option) Removed options.
4589         (ps_open_page) Write page setup explicitly to output file, without
4590         using now-deleted BP function.
4591         (macro dump_line) Use YT().
4592         (macro dump_thick_line) Use YT().
4593         (draw_headers) Use YT().
4594         (switch_font) Reorder arguments to SF function.
4595         (write_text) Use YT().
4596
4597         * sfm-read.c: (sfm_read_case) Don't attempt to read variables that
4598         have get.fv == -1.
4599
4600         * sysfile-info.c: (describe_variables) Don't use tab_nulls().
4601
4602         * tab.c: (tab_create) Initialize t->ct to zeros.  Remove
4603         null-debugging code.
4604         (tab_realloc) Remove null-debugging code.  Initialize new regions
4605         of t->ct to zeros.
4606         (tab_vline) Support offsets.
4607         (tab_hline) Support offsets.
4608         (tab_box) Support offsets.
4609         (tab_null) Removed.
4610         (tab_nulls) Removed.
4611         (tab_row) Removed.
4612         (tab_col) Removed.
4613         (evaluate_dimensions) Remove null-debugging code.  Understand
4614         TAB_EMPTY attribute.  Assert that text.s.s is always non-NULL if
4615         TAB_EMPTY not present.
4616
4617         * tab.h: New cell attribute TAB_EMPTY.
4618         (macros tab_nr, tab_nc, tab_row, tab_col) New.
4619
4620         * vars-atr.c: (init_variable) Set get.fv to -1 so that GET doesn't
4621         try to read them from system files.
4622
4623         * vfm.c: (dump_splits) Don't call tab_null().   
4624
4625 Sat May 16 19:36:55 1998  Ben Pfaff  <blp@gnu.org>
4626
4627         * crosstabs.q: (struct crosstab) Added `missing' member.
4628         (custom_tables) Init missing.
4629         (calc_general) Handle missing values.
4630         (calc_chisq) New function.
4631         (output_pivot_table) Start work on chi-square output.  Update for
4632         new tab offset support functions.  Shorten statistic names.
4633
4634         * Several files: add in more `const's to placate gcc's warnings.
4635
4636         * tab.h: (struct tab_table) Add col_ofs, row_ofs members.  Comment
4637         fixes.
4638
4639         * tab.c: (tab_height, tab_realloc, tab_vline, tab_hline, tab_box,
4640         tab_null, tab_nulls, tab_value, tab_float, tab_text,
4641         tab_joint_text) Add col_ofs and row_ofs support.
4642         (tab_offset) New function.
4643         (tab_next_row) New function.
4644         (tab_row) New function.
4645         (tab_col) New function.
4646         (tabi_table) Add col_ofs and row_ofs support.
4647
4648         * vars-atr.c: (is_system_missing) New function.
4649
4650 Tue May 12 16:14:30 1998  Ben Pfaff  <blp@gnu.org>
4651
4652         * crosstabs.q: Expanded subcommand names RESID --> RESIDUAL, etc.
4653         (static var no_cells) Removed.
4654         (static var num_cells) New.
4655         (static var expected) New.
4656         (static var cells[]) New.
4657         (internal_cmd_crosstabs) Deal with new variables.
4658         (postcalc) Removed most of the meat and put it in new function
4659         output_pivot_table().
4660         (output_pivot_table) Calculates and outputs an entire pivot table.
4661
4662         * postscript.c: (postopen) Fix problems with free()ing addresses
4663         not obtained from malloc().
4664
4665         * som.c: (som_submit) Add assertion.
4666
4667         * sysfile-info.c: (describe_variable) Use new tab_nulls()
4668         function.
4669
4670         * tab.c: (static var tab_names[]) New.
4671         (tab_realloc) -1 for nc or nr indicates no change.
4672         (tab_nulls) New function.
4673         (tab_dim) Use tab_names[].
4674         (tabi_cumulate) Don't include bottom or right headers.  Furrfu.
4675         (evaluate_dimensions) Don't terminate on uninited cells, just put
4676         an X in them and emit a notice.  Use tab_names[].
4677
4678         * tab.h: Move bits into tab.def.
4679
4680         * tab.def: New.  Don't try to declare tab_table_class because then
4681         som.h has to be included.       
4682         
4683 Thu May  7 22:55:04 1998  Ben Pfaff  <blp@gnu.org>
4684
4685         * command.def: New file, contains all the command definitions
4686         previously included bodily in command.c.
4687
4688         * format.def: New file, contains all of the format definitions
4689         previously split across format.h, format.c, and sfm-write.c.
4690
4691         * lexer.h: Renamed from tokens.h in order to match corresponding
4692         .c file name.
4693
4694         * lexerP.h: Moved some rarely used functions exported by lexer.c
4695         into here.
4696
4697         * Makefile.am: Commemorate renamed files.
4698         (EXTRA_DIST) Add command.def, format.def.
4699
4700         * command.c: [0] (walk_cmdtable_func) Removed.
4701
4702         * crosstabs.q: (postcalc) Made it work and print out matrices
4703         proving it.
4704         (enum_column_values) Renamed enum_var_values, generalized for any
4705         variable.
4706
4707         * format.h: (struct fmt_desc) New member `spss'.
4708
4709         * q2c.c: (main) Generated code includes lexer.h instead of
4710         tokens.h.
4711
4712         * sfm-write.c: (write_format_spec) Use new spss member of fmt_spec
4713         instead of an independent translation table.
4714
4715 Tue May  5 13:19:03 1998  Ben Pfaff  <blp@gnu.org>
4716
4717         * Lots of source files: Added const to declarations.
4718
4719         * aggregate.c: (parse_aggregate_function) Rename inner i to j.
4720         
4721         * arena.c: (arena_clear) Set prev pointer to null when done.
4722
4723         * ascii.c: (ascii_option) Rename index as indx.
4724
4725         * avl.c: This is now a separate library called libavl.
4726         (xmalloc) Make static.
4727         (avl_probe) Step A7 can use the cache instead of an explicit
4728         compare.
4729         (avl_delete) Don't maintain a q pointer because it's always
4730         available in the pointer stack.  Comment fix.
4731
4732         * avl.h: This is now a separate library called libavl.
4733
4734         * command.c: (cmd_table[]) Remove spurious trailing "".
4735
4736         * common.h: Only include random() fix if this system needs it.
4737
4738         * crosstabs.q: Include alloca headers.
4739         (n_sorted_tab) New global var.
4740         (postcalc) Mostly rewritten.
4741         (find_pivot_extent) Rewritten.
4742         (enum_column_values) Rewritten.
4743
4744         * data-out.c: (convert_F) Rename inner n as n_spaces.
4745
4746         * error.c: (dump_message) Don't have an outer var i.
4747
4748         * file-handle.q: (static var f) Removed.  All references removed.
4749         (internal_cmd_file_handle) Uses a local variable instead of f.
4750
4751         * get.c: (trim_dictionary) Change scope of i, i1, i2.
4752         (cmd_match_files) Don't strcpy tokstr into sbc (why was this ever
4753         done?)
4754
4755         * getline.h: Declare getl_history as extern.  Reported by
4756         palme@uni-wuppertal.de (Hubert Palme).
4757
4758         * postscript.c: (postopen) Some large mods for constness.
4759
4760         * recode.c: Remove spurious copyrights since PSPP is owned by FSF
4761         anyway.
4762
4763 Fri Apr 24 12:52:47 1998  Ben Pfaff  <blp@gnu.org>
4764
4765         * Makefile.am: Rename BUILT_SOURCES to q_sources, all references
4766         changed.  Add avl.c, avl.h to pspp_SOURCES.  Remove avllib from
4767         LDADD.
4768
4769         * avl.c, avl.h: New files.  These form a clean-room
4770         reimplementation of avllib.  Iterative algorithms are used in
4771         place of recursive ones, so there is no resemblance in the code.
4772
4773         * Lots of headers: Don't include other headers by default.
4774
4775         * Lots of source files: Explicitly include all needed headers.
4776
4777         * arena.c: (arena_clear) New function.
4778
4779         * crosstabs.q: (ROW_VAR, COL_VAR) New enums.
4780         (static var ar) Removed.
4781         (staitc vars ar_tc, ar_col) New.
4782         (cmd_crosstabs) Destroy the arenas.
4783         (internal_cmd_crosstabs) Create the arenas.
4784         (precalc) Don't need a free function for the hash.
4785         (calc_general) Make sure to zero out the trailer on the key data
4786         before inserting.
4787         (print_table_entries) Updated.
4788         (postcalc) Worked on actually implementing.
4789         (find_pivot_extent) New function.
4790         (compare_value) New function.
4791         (enum_column_values) New function.
4792
4793         * data-in.c: (parse_month) Make local array `static const'.
4794         
4795         * data-out.c: (convert_date) Make local array `static const'.
4796         (convert_WKDAY) Same.
4797         (convert_MONTH) Same.
4798
4799         * frequencies.q: (postprocess_freq_tab) avl_walk_inorder() has
4800         been renamed to avl_walk().
4801         
4802         * hash.c: Rewritten more efficiently.
4803
4804         * hash.h: Add attribute const to hsh_next_prime declaration.
4805
4806         * lexer.c: (id_match) Make arguments const.
4807
4808         * postscript.c: (ps_postopen_driver) Make default fonts the
4809         Helvetica family.
4810
4811         * q2c.c: (main) Generated code needs stdlib.h.
4812
4813         * sfm-write.c: (write_value_labels) An avl_traverser needs to be
4814         initialized to 0 now, not to NULL.  All other references to
4815         avl_traverser were updated in the same way.
4816
4817         * tokens.h: Macro version of id_match updated to use const
4818         properly.
4819
4820         * val-labs.c: (inc_ref_count) New function.
4821         (copy_value_labels) Simply through use of new avl_copy() function.
4822
4823 Wed Apr 15 13:01:58 1998  Ben Pfaff  <blp@gnu.org>
4824
4825         * crosstabs.q: Probably doesn't compile.  New PIVOT subcommand.
4826         (postcalc) Worked on this.
4827
4828         * postscript.c: (OPO_DOUBLE_LINE) New enum.
4829         (struct ps_driver_ext) New line_width_thick member.
4830         (ps_preopen_drive) Init line_width_thick.
4831         (option_tab[]) Add line-* options.
4832         (ps_option) Parse line-* options.
4833         (postopen) Add line_width_thick support.  Strip leading spaces on
4834         prologue output lines.
4835         (ps_open_page) Include line_width_thick in output.
4836         (macro dump_thick_line) New.
4837         (dump_fancy_line) Support thick lines as well as double lines.
4838
4839 Tue Apr 14 00:50:08 1998  Ben Pfaff  <blp@gnu.org>
4840
4841         * Makefile.am: Add crosstabs.c to BUILT_SOURCES.  Add crosstabs.q
4842         to pspp_SOURCES.  Add crosstabs.q to EXTRA_DIST.
4843
4844         * Many source files: Rename `options' to `pv_opts' as appropriate.
4845
4846         * command.c: (static var cmd_table[]) Add CROSSTABS command.
4847
4848         * common.c: (xcalloc) New function.
4849
4850         * crosstabs.q: New file.  Not finished yet, though.
4851                 
4852         * data-list.c: Comment fix.
4853
4854         * error.c: Remove some old Checker cruft.
4855
4856         * frequencies.q: (dump_full) Cumulate valid percent instead of
4857         regular percent.
4858
4859         * getline.c: Comment fix.
4860
4861         * hash.c: Comment fixes.
4862
4863         * hash.h: (struct hsh_table) Make hash functions return unsigned
4864         instead of int to avoid problems with taking the modulo of
4865         negative return values.  All references changed.
4866
4867         * misc.c: (intlog10) Make its table static const instead of auto.
4868
4869         * sfm-read.c: (read_header) Make `prefix' static const instead of
4870         auto.
4871
4872         * var.h: (union value) Add member `hash'.
4873         (struct variable) Rename prv_index as `foo'--all references
4874         changed.  Reorder.
4875         (typedef pv_opts) Removed.  All references changed.
4876
4877         * vars-prs.c: (parse_variables) Message fixes.
4878         
4879 Mon Mar  9 15:35:08 1998  Ben Pfaff  <blp@gnu.org>
4880
4881         * get.c: (cmd_match_files) Don't reverse the order of FILEs as
4882         they are being inserted.  Don't check for BY variables of
4883         different types.  Discard variables if the active file isn't
4884         included in the merge.
4885         (mtf_processing) Essentially rewritten.
4886         (mtf_merge_dictionary) Check for master/slave variables of
4887         different types/widths.
4888
4889         * vfm.c: (static var not_canceled) New var.
4890         (process_active_file) Don't call vfm_source->read() if
4891         there's no vfm-source.  Initialize not_canceled.
4892         (process_active_file_write_case) Honor and update not_canceled.
4893         (prepare_for_writing) Rollback changes from yesterday, they were
4894         wrong.
4895         (close_active_file) Don't destroy vfm_source unless it exists.
4896         
4897 Mon Mar  9 00:56:16 1998  Ben Pfaff  <blp@gnu.org>
4898
4899         * Lots of source files: Added { } around nested if/else constructs
4900         to avoid new gcc 2.8 warnings.
4901
4902         * data-in.c: (parse_Z) Declare `int' type explicitly.
4903         (convert_Z) Ditto.
4904
4905         * get.c: (struct mtf_file) Add prev, next_min, by, input members.
4906         (cmd_match_files) Initialize mtf_by_values.  Manage by, input,
4907         prev members.  Put TABLEs at the end of the chain and FILEs at the
4908         beginning.  Don't allow the active file in STATE_INIT.  Use proper
4909         `seen' value for the active file.  Fill out the by members and
4910         make sure they're of consistent type.  Do the actual merge
4911         operation.
4912         (mtf_processing_finish) New function.
4913         (var_type_description) New function.
4914         (mtf_free_file) New function.
4915         (mtf_free) Rewritten.
4916         (mtf_delete_file_in_place) New function.
4917         (mtf_read_nonactive_records) New function.
4918         (mtf_compare_BY_values) New function.
4919         (static var mtf_seq_no) New var.
4920         (mtf_processing) New function.
4921         (mtf_merge_dictionary) Assign nval members for the system file
4922         dictionary.  Assign fv values for its variables.  Point each slave
4923         variable to the corresponding master variable.
4924
4925         * hash.c: Include str.h.
4926
4927         * mis-val.c: (copy_missing_values) src arg is const.
4928
4929         * misc.c: (spacing) Make `max' var explicitly int.
4930
4931         * sfm-read.c: (dump_dictionary) Message reformatting.
4932         (sfm_read_case) Add assertion.
4933
4934         * sort.c: Esthetic fixes.
4935
4936         * var.h: (struct match_files_proc) New struct.
4937         (struct variable) Add private data match_files_proc.
4938
4939         * vars-atr.c: (delete_variable) Implement.  Add argument for the
4940         dictionary that owning the variable.
4941         (dup_variable) Add assertion.
4942
4943         * vfm.c: Comment fixes, hopefully the comments are correct now.
4944         (process_active_file) New function.
4945         (process_active_file_write_case) New function.
4946         (process_active_file_output_case) New function.
4947         (prepare_for_writing) Use temp_dict->nval for vfm_info, not
4948         default_dict.nval.
4949         (write_case) Renamed procedure_write_case().  Now write_case is a
4950         pointer to a function.  Style fixes.
4951         
4952 1998-03-05  Ben Pfaff  <blp@gnu.org>
4953
4954         * Makefile.am: (q2c) Link with libmisc.
4955         (version.c) Define default_config_path, include_path,
4956         groff_font_path.
4957
4958         * ascii.c: (ascii_postopen_driver) When the default newline string
4959         is requested, open file in text mode.  Suggested by
4960         palme@uni-wuppertal.de (Hubert Palme).
4961         (static vars line_buf, line_p) Change from char * to unsigned char
4962         *.
4963         (ascii_close_page) char * to unsigned char *.
4964
4965         * cmdline.c: (parse_command_line) Implement -r option by
4966         prepending ~/.pspp/rc to the list of files to process.
4967
4968         * command.c: (cmd_remark) Reset getl_prompt to the standard prompt
4969         before pulling in a final line.
4970         (null_func, null_int_func) Removed (dead code).
4971
4972         * descript.q: (display) Calculate width of variable name column
4973         properly.  Calculate number of valid cases properly.  Reported by
4974         palme@uni-wuppertal.de (Hubert Palme).
4975
4976         * filename.c: (init_filename) Use default_config_path instead of
4977         now obsolete CONFIG_PATH.
4978
4979         * getline.c: (getl_initialize) Use include_path instead of now
4980         obsolete INCLUDE_PATH.
4981         (getl_add_file) New argument `where'.  All references changed.
4982
4983         * groff.c: (find_font_file) Use groff_font_path instead of now
4984         obsolete GROFF_FONT_PATH.
4985         
4986         * postscript.c: (find_ps_file) Use groff_font_path instead of now
4987         obsolete GROFF_FONT_PATH.  Copy through temporary variable to
4988         avoid problems with constness.
4989
4990         * str.h: (macro cs_streq) New macro.
4991
4992         * version.h: (glob var default_config_path, include_path,
4993         groff_font_path) New vars.
4994         
4995 1998-02-23  Ben Pfaff  <blp@gnu.org>
4996
4997         * Many source files: Change verbose_msg() priority levels and
4998         messages.
4999
5000         * aggregate.c: Include debug-print.h.
5001
5002         * cmdline.c: (parse_command_line) Add --safer/-s and --command/-c
5003         options.
5004         (static var pre_syntax_message) Document --safer/-s and
5005         --command/-c.
5006
5007         * command.c: (cmd_erase, cmd_host) Disable if set_safer is set.
5008
5009         * dfm.c: (open_inline_file) [__CHECKER__] Zero out ext->file,
5010         because it's not used but it's still copied.
5011         (open_file_r) Remove gratuitous debug message.
5012
5013         * filename.c: (safety_violation) New function.
5014         (open_file) Remove gratuitous debug messages.  Don't allow pipe
5015         files if set_safer is set.
5016
5017         * get.c: Turn off debugging.
5018
5019         * getline.c: (getl_add_virtual_file) New function.
5020         (getl_read_line) Add verbose_msg() call for opening new syntax
5021         file.
5022         (getl_perform_delayed_reset) Add a return value describing whether
5023         any action was taken.  Call reset_eof().
5024
5025         * getline.h: Comment fix.
5026
5027         * groff-font.c: (groff_read_font) Use `goto next_iteration' in
5028         place of incorrect `continue'.  Use strtok_r() instead of
5029         strtok().  Always check strtok_r() return value.
5030         (groff_read_DESC) Use strtok_r() instead of strtok().
5031
5032         * lexer.c: (reset_eof) New function.
5033
5034         * main.c: (parse) Get a token after performing a delayed reset
5035         action; allow empty syntax files.
5036
5037         * postscript.c: (output_encodings) Use strtok_r() instead of
5038         strtok().
5039
5040         * q2c.c: (dump_parser) Use strtok_r() instead of strtok().
5041
5042         * set.q: Comment fixes.
5043         (glob var set_safer) New var.
5044         (internal_cmd_set) Support SAFER.
5045
5046         * str.h: [!HAVE_STRTOK_R] Declare strtok_r() prototype.
5047
5048         * temporary.c: (free_dictionary) Set d->splits to NULL after
5049         freeing.
5050
5051         * vars-atr.c: (clear_variable) Decrement dict->n_splits if
5052         variable deleted, not if it *isn't* deleted.
5053
5054 1998-02-16  Ben Pfaff  <blp@gnu.org>
5055
5056         * command.c: (array cmd_table[]) Add MATCH FILES.
5057
5058         * common.c: Comment fixes.
5059
5060         * data-list.c, dfm.c, error.c, filename.c, list.q, matrix-data.c,
5061         modify-vars.c, postscript.c, sfm-read.c, sfm-write.c, tab.c:
5062         Include alloca.h.  Problem reported by palme@uni-wuppertal.de
5063         (Hubert Palme).
5064
5065         * expr-opt.c: Include str.h.  Problem reported by
5066         palme@uni-wuppertal.de (Hubert Palme).
5067
5068         * get.c: (cmd_get) [DEBUGGING] Update v->p.get to v->get.
5069         (static var mtf_by) Change from char ** to variable **.
5070         (static var mtf_master) New var.
5071         (mtf_merge_dictionary) New function.
5072         (cmd_match_files) Init mtf_master.  Parse mtf_by according to new
5073         var type.  Reorder tests properly.  Initialize file->dict.  Detect
5074         TABLE= without BY=.  Read file dictionaries and merge them.  Give
5075         subcommand name with IN, LAST, FIRST error messages.  Create IN,
5076         LAST, FIRST variables.  Comment fixes.
5077         (mtf_free) Don't free default_dict.  Free mtf_master.
5078
5079         * getline.c: Define getl_mode.  Change getl_buf_size to size_t
5080         from int.
5081         (handle_line_buffer) Cast int to size_t in comparison to avoid
5082         warning.
5083
5084         * getline.h: Declare getl_mode extern.
5085
5086         * groff-font.c: (groff_read_font) Type-fix calls to getline.
5087         (groff_read_DESC) Make line_size a size_t.
5088         (match_tok) Parenthesize name to avoid macro expansion.
5089
5090         * mis-val.c: (copy_missing_values) New function.
5091
5092         * postscript.c: (postopen) Make buf_size a size_t.
5093
5094         * sfm-read.c: (dump_dictionary) Make global from static.  Print
5095         variable info in parts for easier debugging with Checker.
5096
5097         * temporary.c: (copy_variable) Use copy_value_labels().
5098         (new_dictionary) New arg: whether to copy file label, documents.
5099
5100         * val-labs.c: (copy_value_labels) New function.
5101
5102         * var.h: (enums MISSING_*) Add MISSING_COUNT.
5103
5104         * vars-atr.c: [GLOBAL_DEBUGGING] (force_dup_variable) New
5105         function.
5106         (dup_variable) Set prv_index, get.fv, get.nv.
5107
5108 Fri Feb 13 15:38:36 1998  Ben Pfaff  <blp@gnu.org>
5109
5110         * Makefile.am: (pspp_SOURCE) Add htmlP.h.
5111
5112         * Many source files: For ANSI-compliance, add empty statement
5113         after label.  Reported by palme@uni-wuppertal.de (Hubert Palme)
5114         and Micah Altman <maltman@www-vdc.fas.harvard.edu>.
5115
5116         * data-in.c: (parse_numeric) Some header files break on
5117         -DBL_MIN_10_EXP because they get a --; add () for safety.
5118         Reported by palme@uni-wuppertal.de (Hubert Palme).
5119
5120         * dfm.c: Idea by Dr Eberhard W Lisse <el@linux.lisse.na>.
5121         (struct dfm_fhuser_ext) Change `file' from FILE * to file_ext.
5122         (dfm_close) Use close_file_ext.
5123         (open_inline_file) Set file.file to NULL, not file.
5124         (open_file_r, open_file_w) Initialize file.file; fill in file_ext
5125         struct and use open_file_ext().
5126         (read_record) Use file.file.
5127
5128         * file-handle.q: (prepend_current_directory) Pass through special
5129         filenames.
5130
5131         * filename.c: Only include unistd.h if HAVE_UNISTD_H.
5132         (normalize_filename) Pass through special filenames.
5133         (open_file, close_file) Accept pipe| and |pipe syntaxes as
5134         equivalent.
5135         (dirname) Rename blp_dirname() because of name conflict on some
5136         OS.  All references changed.  Reported by palme@uni-wuppertal.de
5137         (Hubert Palme).
5138         (is_special_filename) New function.
5139
5140         * get.c: (GTSV_OPT*) Add GTSV_OPT_MATCH_FILES.
5141         (trim_dictionary) Conditionalize some of the options on whether
5142         GTSV_OPT_MATCH_FILES is in *options.
5143         (rename_variables) Don't allow variables to be renamed as scratch
5144         variables.
5145         (MTF_*) New enum series.
5146         (struct mtf_file) New struct.
5147         (static vars mtf_head, mtf_tail, mtf_by, mtf_n_by, mtf_free) New
5148         vars.
5149         (cmd_match_files, mtf_free) New functions.
5150
5151         * lexer.c: (match_int) Needed parentheses around name to escape
5152         macro expansion.  Reported by Micah Altman
5153         <maltman@www-vdc.fas.harvard.edu>.
5154
5155         * print.c: Needed to include alloca.h.  Reported by Micah Altman
5156         <maltman@www-vdc.fas.harvard.edu>.
5157
5158         * recode.c: (convert_to_double) Parenthesize -DBL_MIN_10_EXP to
5159         -(DBL_MIN_10_EXP).  Reported by palme@uni-wuppertal.de (Hubert
5160         Palme).
5161         
5162         * str.h: Include stdarg.h.  Reported by palme@uni-wuppertal.de
5163         (Hubert Palme) and Micah Altman <maltman@www-vdc.fas.harvard.edu>.
5164
5165 Thu Feb  5 00:18:21 1998  Ben Pfaff  <blp@gnu.org>
5166
5167         * html.c: (struct html_driver_ext) Move into htmlP.h.
5168         (html_preopen_driver) Initialize cp_x, cp_y.
5169         (html_submit) Implement as call to output_tab_table().
5170         (change_attributes) New function.
5171         (escape_string) New function.
5172         (output_tab_table) New function.
5173
5174         * list.q: (write_all_headers) Add code for writing headers for the
5175         html driver.
5176         (clean_up) Write out the html close-table tag.
5177         (determine_layout) Ignore html driver.
5178         (list_cases) Write html data.
5179
5180         * som.c: (som_submit) Move more of the code into output_table().
5181
5182         * tab.c: (static var hit) Make a global var and rename tab_hit.
5183         (static var tab_table_class) Make a global var.
5184
5185         * htmlP.h: New file.
5186
5187 Tue Feb  3 16:12:18 1998  Ben Pfaff  <blp@gnu.org>
5188
5189         * dump-sysfile.c: Removed.
5190
5191         * html.c: (preclose) Change comment in emitted code.
5192
5193         * matrix-data.c: Debugging off by default.  Comment fixes.
5194         (static var container) New var.
5195         (cmd_matrix_data) Create and destroy container.  Initialize
5196         is_per_factor[] to 0s.  Move code into new function
5197         string_to_content_type().  Require split values to be present in
5198         the data when ROWTYPE_ is explicit.  Call specific function, not
5199         general read_matrices().
5200         (string_to_content_type) New function.
5201         (context) Exclude all whitespace, not just spaces.
5202         (mget_token) A dot is a number.  Add assertion.
5203         (static var data) Renamed nr_data.
5204         (static var factor_values) Renamed nr_factor_values.
5205         (read_matrices) Renamed read_matrices_without_rowtype().  Handle
5206         only specific case.  Close data_file before exit.
5207         (fill_matrix) New function.
5208         (read_data_lines) Renamed nr_read_data_lines().  Remove debug
5209         printing.  Style fixes.  Message fixes.  Move code into
5210         fill_matrix().
5211         (read_matrices_without_rowtype) Rename
5212         matrix_data_read_without_rowtype().  Fix off-by-one error on
5213         loops.  Allocate nr_data[] memory from arena.
5214         (read_matrices_with_rowtype) Removed.
5215         (read_splits) Renamed nr_read_splits().  Style fixes.
5216         (read_factors) Renamed nr_read_factors().
5217         (dump_cell_content) Comment fixes.  Arguments changed.  Change
5218         debug printing.  All references changed.
5219         (output_data) Renamed nr_output_data().
5220         (static var wr_content) New var.
5221         (struct factor_data) New struct.
5222         (static var wr_data) New var.
5223         (static var wr_current) New var.
5224         (matrix_data_source_destroy_source) Removed.
5225         (read_matrices_with_rowtype) New function.
5226         (matrix_data_read_with_rowtype) New function.
5227         (wr_read_splits) New function.
5228         (compare_factors) New function.
5229         (wr_output_data) New function.
5230         (wr_read_rowtype) New function.
5231         (wr_read_factors) New function.
5232         (wr_read_indeps) New function.
5233         (glob var matrix_data_source) Make destroy_source member NULL as
5234         well.
5235
5236 Fri Jan 23 00:09:08 1998  Ben Pfaff  <blp@gnu.org>
5237
5238         * lexer.c: (syntax_error) Give better error message when at end of
5239         file.
5240
5241         * matrix-data.c: (var content_names[]) Fix PROX spelling.  Change
5242         N_SCALAR to output as plain N.
5243         (mdump_token) Change output format.
5244         (context) Fix message output interaction with spaces in input.
5245         (another_token) New function.
5246         (force_eol) Improved error message.
5247         (static var max_cell_index) New var.
5248         (read_matrices) Init `cells'.  factor_values is now per-cell.
5249         Init max_cell_index.
5250         (read_data_lines) Replace `compare' local with new `compare' arg.
5251         Debugging messages changed.  Only read factors if per_factor.
5252         Propagate error return from read_factors(), force_eol().
5253         Copy N_SCALAR values across the N vector.
5254         (read_matrices_without_rowtype) Don't init `cells'.  Don't need to
5255         check parentheses manually since we now have is_per_factor[].
5256         Call read_data_lines() with new args.  Check for end of data after
5257         looping, using another_token().
5258         (read_factors) Arguments changed.  Use max_cell_index to determine
5259         whether to read or compare factors.  Message fixes.
5260         (dump_cell_content) New function.
5261         (output_data) Completely rewritten because content types were
5262         supported to be nested inside factor values, not vice versa.
5263         
5264 Thu Jan 22 00:26:38 1998  Ben Pfaff  <blp@gnu.org>
5265
5266         * lexer.c: (syntax_error) Support formatted varargs messages.
5267
5268         * matrix-data.c: Turn debugging on by default.
5269         (static content_type[]) New array.
5270         (static content_names[]) New array.
5271         (static rowtype_, varname_) New vars.
5272         (static is_per_factor[]) New array.
5273         (static split_values) Moved declaration.
5274         (static n_continuous, first_continuous) New var.
5275         (cmd_matrix_data) Don't init split_values.  Assign ROWTYPE_ to
5276         rowtype_.  Simplify SPLIT code.  Init is_per_factor[].  Assign
5277         VARNAME_ to varname_.  Initialize first_continuous, n_continuous.
5278         Check for continuous variables.
5279         [DEBUGGING] (debug_print) Remove content_names[].
5280         (mdump_token) New macro.
5281         (mget_token_dump) New function.
5282         (mdump_token) New function.
5283         (context) New function.
5284         (mget_token) Fix messages.
5285         (static var data, split_values, factor_values) New vars.
5286         (read_matrices) Manage split_values, factor_values.
5287         (read_data_lines) New function.
5288         (read_matrices_without_rowtype) Implemented.
5289         (read_splits) Message fixes.  Uses `just_read'.
5290         (read_factors) New function.
5291         (output_data) New function.
5292         (matrix_data_source_destroy_source) Close the file handle.
5293         (glob var matrix_source) Change name from "DATA LIST" to "MATRIX
5294         DATA".
5295
5296         * str.c: (strpadcmp) Removed.
5297
5298         * vfm.c: (dump_splits) Initialize i; fix test for end of splits.
5299
5300 Sun Jan 18 00:30:59 1998  Ben Pfaff  <blp@gnu.org>
5301
5302         * Lots of source files: Add cast to unsigned character to calls to
5303         tolower() and toupper().
5304
5305         * aggregate.c: Set default_dict.splits to NULL.
5306
5307         * command.c: (static variable tab[]) Add MATRIX DATA.
5308
5309         * data-in.c: Add debugging defines.  Formatting fixes.
5310
5311         * expr-opt.c: Formatting fixes.
5312
5313         * lexer.c: (syntax_error) Message fixes.
5314
5315         * matrix-data.c: New enum series.
5316         (static vars fmt, section, diag, explicit_rowtype, signle_split,
5317         split_values, n_factors, factors, cells, pop_n, contents,
5318         n_contents) New vars.
5319         (cmd_matrix_data) Finished implementation.
5320         (compare_variables_by_mxd_vartype) New function.
5321         [DEBUGGING] (debug_print) New function.
5322         (static vars mtoken, mtokstr, mtoklen, mtokval) New vars.
5323         (read_matrices) New function.
5324         (read_matrices_without_rowtype) New function.
5325         (read_matrices_with_rowtype) New function.
5326         (read_splits) New function.
5327         (mget_token) New function.
5328         (force_eol) New function.
5329         [0] (test_tokenizer) New function.
5330         (matrix_data_source_destroy_source) New function.
5331         (glob var matrix_data_source) New var.
5332
5333         * misc.h: Include ieeefp.h if present.
5334
5335         * split-file.h: (cmd_split_file) Changes corresponding to struct
5336         dictionary changes.
5337
5338         * str.h: Fix memmem prototype.
5339
5340         * temporary.c: (save_dictionary, restore_dictionary,
5341         free_dictionary) Changes corresponding to struct dictionary
5342         changes.
5343
5344         * var.h: (MXD_* enums) New enum series.
5345         (struct matrix_data_proc) New struct.
5346         (struct split) Removed.
5347         (struct dictionary) Changed `splits' member from `split *' to
5348         `variable **'.
5349         (macro force_create_variable) New macro.  Replaced lots of
5350         create_variable()/assert() calls with calls to this macro.
5351
5352         * vars-atr.c: (discard_variables) Changed assertion.
5353         [GLOBAL_DEBUGGING] (force_create_variable) New function
5354         called by the macro of the same name.
5355         (clear_variable) Changes to delete splits from the dictionary
5356         corresponding to struct dictionary changes.
5357
5358         * vars-prs.c: (parse_variables) [GLOBAL_DEBUGGING] Check for
5359         corrupted variable `index' values in the dictionary passed in
5360         every time this function is called.
5361
5362         * vfm.c: (dump_splits, SPLIT_FILE_procfunc) Changes corresponding
5363         to struct dictionary changes.
5364
5365 Tue Jan 13 23:45:02 1998  Ben Pfaff  <blp@gnu.org>
5366
5367         * Makefile.am: (pspp_SOURCES) Add matrix-data.c.
5368
5369         * command.c: New includes.
5370         (static array cmd_table[]) Add ERASE, HOST, NEW FILE.
5371         (cmd_erase) New function.
5372         [unix] (shell) New function.
5373         (run_command) New function.
5374         (cmd_host) New function.
5375         (cmd_new_file) New function.
5376
5377         * expr-prs.c: (parse_primary) Message fix.
5378
5379         * inpt-pgm.c: Formatting fix.
5380         (cmd_reread) Implement the FILE subcommand.
5381
5382         * matrix-data.c: New file.
5383
5384         * q2c.c: (dump_header) Change output commenting style.
5385
5386         * weight.c: Comment fix.
5387
5388 Tue Jan 13 00:53:39 1998  Ben Pfaff  <blp@gnu.org>
5389
5390         * aggregate.c: (buf64_10x) Renamed buf64_1xx, all references
5391         changed.
5392         (buf_10x) Renamed buf_1xx, all references changed.
5393         (cmd_aggregate) Implemented cases 010, 011, 110, and 111 (all
5394         cases now implemented).
5395         (create_sysfile) New function.
5396         (agr_11x_func) New function.
5397
5398         * data-in.c: (parse_numeric) Work properly if there's an
5399         explicitly coded decimal point in the data and decimal places are
5400         specified on DATA LIST.  Bug reported by Dr Eberhard W Lisse
5401         <el@linux.lisse.na>.
5402
5403         * get.c: (cmd_get, cmd_save_internal) Allow extraneous slash
5404         before file specification on GET, SAVE, XSAVE.  Bug reported by Dr
5405         Eberhard W Lisse <el@linux.lisse.na>.
5406
5407         * q2c.c: [!HAVE_STRERROR] Include misc/strerror.c, not
5408         strerror.c.  Bug reported by Alexandre Oliva
5409         <oliva@dcc.unicamp.br>.
5410
5411         * sort.c: Include sort.h.  Comment fixes.  A few esthetic fixes.
5412         (static var separate_case_tab) New var.
5413         (cmd_sort_cases) Cancel temporary transformations here.  Free
5414         v_sort before return.
5415         (sort_cases) Run an EXECUTE procedure if SEPARATE is nonzero and
5416         we're reading from a sort stream.  Don't cancel temporary
5417         transformations.  Offload internal sorting to do_internal_sort().
5418         (do_internal_sort) New function.  Handles internal sorting even
5419         when SEPARATE is nonzero.  Doesn't free v_sort.
5420         (do_external_sort) Take new arg SEPARATE.  Only destroy `x' if
5421         it's non-NULL.
5422         (write_initial_runs) Take new arg SEPARATE.  Only destroy the old
5423         sink if SEPARATE is zero.
5424         (read_output_cases) Renamed read_sort_output(), all references
5425         changed.  Now uses separate_case_tab when it exists.
5426         (write_separate) New function.
5427
5428         * vfm.c: (page_to_disk) Destroy memory_source_cases, not
5429         memory_sink_cases.  Don't redundantly call
5430         vfm_source->destroy_source().
5431         (memory_stream_mode) After switching over, set memory_sink_cases
5432         to NULL.
5433
5434 Sat Jan 10 23:35:51 1998  Ben Pfaff  <blp@gnu.org>
5435
5436         * aggregate.c: (struct agr_var) Expand dbl[] array from 2 to 3
5437         elements.
5438         (static var prev_case) New, moved out of aggregate_single_case()
5439         local scope.
5440         (static var buf64_10x, buf_10x) New.
5441         (cmd_aggregate) Initialize prev_case.  Comment fixes.  Implement
5442         the 000, 001, 100, and 101 cases.  Free prev_case.
5443         (parse_aggregate_functions) Disallow scratch variables.
5444         (free_aggregate_functions) Only free agr_dict if non-null.  Use
5445         iter->function to determine numeric/string type, not
5446         iter->src->type.
5447         (aggregate_single_case) Don't manage prev_case.  Initialize
5448         aggregate info after dumping it.
5449         (accumulate_aggregate_info) Fix sum, weighted sum, mean, weighted
5450         mean, stddev, weighted stddev definitions.
5451         (dump_aggregate_info) Implemented.
5452         (initialize_aggregate_info) Renamed from
5453         initialize_aggregate_functions().  Initializes dbl[2].
5454         (agr_00x_trns_proc, agr_00x_end_func, write_case_to_sfm,
5455         agr_10x_trns_proc, agr_10x_trns_free, agr_10x_end_func) New.
5456
5457         * cases.c: (alloc_val) Removed.
5458
5459         * get.c: (cmd_save_internal) Initialize new `dict' member.
5460
5461         * sfm-write.c: (sfm_write_dictionary, write_header,
5462         write_variable, write_value_labels, write_documents) Reorganize,
5463         simplify for new parameter structure.
5464         (write_variable) Only one variable * argument now.
5465
5466         * sfm.h: (struct sfm_write_info) Removed `pri', `sec', and
5467         replaced by new `dict' member.
5468
5469         * temporary.c: (new_dictionary) Initialize n_documents.
5470
5471         * vars-atr.c: (dup_variable) Allocate `value's from dict into
5472         v->fv manually.
5473         (init_variable, replace_variable) Eliminate usage of alloc_val().
5474
5475         * vars-prs.c: (parse_DATA_LIST_vars) Accept PV_NO_SCRATCH option.
5476
5477         * vfm.c: (arrange_compaction) Allow `temporary' value of 2 to
5478         signal that AGGREGATE is to be used for forming final cases.
5479         (close_active_file) Call end_func before stopping lagging.  Cancel
5480         temporary after finishing compaction.
5481         (write_case) Comment fixes.  Cleaned up.
5482         (compact_case) Let AGGREGATE handle compaction when `temporary' is
5483         2.
5484
5485 Sat Jan 10 02:10:47 1998  Ben Pfaff  <blp@gnu.org>
5486
5487         * Makefile.am: (BUILT_SOURCES) Add means.c.
5488         (pspp_SOURCES) Add means.c.
5489         (EXTRA_DIST) Add means.q.
5490
5491         * command.c: (array cmd_table[]) Add MEANS.
5492
5493         * common.h: Esthetic fixes.  Comment fixes.  Test for
5494         MAX_SHORT_STRING greater than 8.
5495         (macros LOWEST, HIGHEST) New.
5496
5497         * data-in.c, data-list.c, recode.c: Comment fixes.
5498
5499         * means.q: New file, base version.
5500
5501         * mis-val.c: (parse_num_or_range, parse_numeric) Replace -DBL_MAX
5502         with LOWEST, DBL_MAX with HIGHEST.
5503
5504         * q2c.c: (dump_vars) Add an enum to array types giving the number
5505         of values for the enum.
5506
5507         * sfm-read.c: (sfm_read_dictionary, read_machine_flt64_info)
5508         Replace second_lowest_value with second_lowest_flt64.
5509
5510         * sfm-write.c: (write_variable, write_rec_7_34) Replace
5511         second_lowest_value with second_lowest_flt64.
5512
5513         * t-test.q: Comment fix.
5514
5515         * temporary.c: (restore_dictionary) Esthetic fix.
5516
5517         * tokens.h: (force_match_id, force_match, force_string, force_int,
5518         force_num, force_id) Replace msg() with syntax_error().
5519
5520         * var.h: (struct means_proc) New.
5521         (struct variable) Add mns member to `p' union.
5522
5523         * vars-prs.c: (parse_variable, parse_dict_variable,
5524         parse_variables, parse_DATA_LIST_vars) Replace msg() with
5525         syntax_error().
5526
5527 Thu Jan  8 22:28:41 1998  Ben Pfaff  <blp@gnu.org>
5528
5529         * Makefile.am: (pspp_SOURCES) Add tab.h.
5530
5531         * Most source files: Added a cast to unsigned char in usages of
5532         the ctype is*() functions.  Replaced `end of command expected'
5533         calls to msg() with calls to syntax_error().
5534
5535         * frequencies.q: (dump_condensed) Fix tab_dim() column reference.
5536
5537         * lexer.c: (hex_val) Removed (was dead code).
5538         (idmatch) Parenthesize function name to avoid macro expansion.
5539
5540         * postscript.c: Comment fixes.
5541         (ps_preopen_driver) Change default font size to 10pt.
5542
5543         * sfm-read.c: (read_variables) Byteswap sv.print, sv.write as
5544         int32s.
5545         (parse_format_spec) Change system-file format spec argument type
5546         to int32.  Parse the format spec with bitwise operators.
5547
5548         * sfmP.h: (struct sysfile_format) Removed.
5549         (struct sysfile_variable) Changed print, write members from
5550         sysfile_format to int32.
5551
5552         * tokens.h: Esthetic fixes.
5553         [__GNUC__] (macro id_match) New macro to hopefully speed up
5554         identifier matching.
5555         (macros match_id, match_tok, match_int) Implemented in
5556         compiler-independent manner; no longer GNU C only.
5557
5558         * vfm.h: Include time.h.
5559
5560 Mon Jan  5 11:06:15 1998  Ben Pfaff  <blp@gnu.org>
5561
5562         * data-list.c: (dump_fixed_table) Change tab_dim().
5563
5564         * dump-sysfile.c: (open_sysfile) Fix mmap() call.
5565
5566         * error.c: Include command.h.
5567
5568         * frequencies.g: Formatting fixes.
5569
5570         * frequencies.q: Add tab_dim() calls.  Make the total cell a
5571         joined cell.
5572
5573         * glob.c: Include command.h.
5574
5575         * sfm-read.c: (struct sfm_fhuser_ext) New members sysmis, highest,
5576         lowest.
5577         (sfm_read_dictionary) Initialize sysmis, highest, lowest.
5578         (sfm_read_machine_flt64_info) Update sysmis, highest, lowest.
5579         (read_variables) Byteswap sv.type; byteswap sv.print, sv.write as
5580         the other elements (is this right?).
5581         (read_variables) Use lowest, highest members.
5582         (parse_format_spec) New arg `vv' for more stringent checking.
5583         (dump_dictionary) Byteswaps nonexplicit data.
5584         (sfm_read_case) Byteswap numeric data.
5585
5586         * som.c: Initialize table_num to 1.
5587         (render_segments) Remember to increment y_index after each table
5588         segment.
5589
5590         * sysfile-info.c: (cmd_sysfile_info) Change tab_dim().  Don't call
5591         avl_count() on a NULL tree.  No title for the second table.
5592         (cmd_display) Handle DISPLAY VECTORS by calling display_vectors().
5593         Handle AS_SCRATCH as AS_NAMES.  Warn if no variables.  Re-enable;
5594         fix call to display_variables().
5595         (display_variables) Default to 4 columns, not 3.  Set up headers.
5596         Column title is Variable, not Name.  Fix index column.
5597         Add joint text.  Add tab_dim().  Handle value labels properly.
5598         Handle DISPLAY LABELS properly.  Draw boxes correctly.
5599         (describe_variable) Value labels don't need titles.  Don't clear
5600         nonexistent index column.
5601         (compare_vectors_by_name) New function.
5602         (display_vectors) New function.
5603
5604         * tab.c: (tab_height) Add assertion.
5605         (tab_null) Add debug code.
5606         (evaluate_dimensions) Add debug code.
5607
5608         * var.h: (struct variable) get_proc data is sometimes used
5609         simultaneously with other per-procedure info, therefore it was
5610         removed from the union.  All references changed.        
5611
5612 Sun Jan  4 18:13:33 1998  Ben Pfaff  <blp@gnu.org>
5613
5614         * ascii.c: (ascii_close_page) Put title on second line of headers
5615         if there is no subtitle.
5616
5617         * command.c: (glob var cur_proc) Move definition here, from
5618         common.c.
5619         (cmd_remark) Emit blank line before remarks.
5620
5621         * command.h: (glob var cur_proc) Move declaration here, from
5622         common.h.
5623
5624         * data-list.c: (dump_fixed_table) Fix messages.
5625         (dump_free_table) Call tab_nat_dim().
5626
5627         * descript.q: (dump_z_table) Modify tab_dim() call.
5628
5629         * frequencies.q: (dump_condensed, dump_statistics) Add tab_dim()
5630         call.
5631         (dump_statistics) Don't output header.
5632
5633         * groff-font.c: Minor format fix.
5634
5635         * html.c: Comment fix.
5636
5637         * list.q: (write_varname) Indent after advancing page.
5638
5639         * output.h: Minor reordering.
5640
5641         * postscript.c: Comment fixes.  Many places, '\n' was replaced by
5642         a reference to eol[].
5643         (struct ps_driver_ext) New member eol[].
5644         (ps_preopen_driver) Initialize eol[].
5645         (ps_postopen_driver) Fix sense of text for text_opt, line_opt
5646         defaults.  Handle headers.  Fix test for minimum page length.
5647         (static var option_tab[]) Add `line-ends'.
5648         (ps_option) Handle line-ends to change eol[].
5649         (postopen) Scale prop_em_width and fixed_width properly.  Set the
5650         prologue title to outp_title if applicable.  Replace the prologue
5651         line ends with eol[].  Call draw_headers() if headers are enabled.
5652         (text_width) New function.
5653         (out_text_plain) New function.
5654         (draw_headers) New function.
5655
5656         * print.c: (dump_table) Call tab_nat_dim().
5657
5658         * som.c: (som_blank_line) Only advance a line if not at the top of
5659         a page.
5660         (som_submit) Move several informational table calls here.
5661         Increment subtable_num if SOMF_NO_TITLE not set.
5662         (output_table) Advance a line if SOMF_NO_SPACING not set.
5663         (render_columns, render_segments, render_simple) Handle spacing
5664         between tables.  Handle table titles.  Remove debug output.
5665
5666         * som.h: (SOMF_*) New enum series.
5667         (struct som_table_class) New member `flags'.
5668
5669         * sysfile-info.c: (cmd_sysfile_info) Calls tab_nat_dim().  No
5670         headers or spacing.
5671         (display_variables) Calls tab_nat_dim().
5672         (describe_variable) Remove restriction on number of value labels.
5673         Make value labels separated by thin lines.
5674
5675         * tab.c: (tab_create) Default `flags' to none.
5676         (tab_float) New arg `w'.  All references changed.
5677         (tab_nat_dim) New function.
5678         (tab_output_text) No title or spacing.
5679         (tab_flags) New function.
5680         (tabi_flags) New function.
5681         (tabi_title) New function.
5682         (strip_height) Removed.
5683         (tabi_render) Skip title when necessary.
5684         (static var tab_tab_class) Add tabi_flags, tabi_title.
5685         (evaluate_dimensions) Disable display of column, row size.
5686         (sum_columns) Add title height to top header.
5687         (render_strip) Moved within file.
5688
5689         * tab.h: (struct tab_table) New member `flags'.
5690
5691         * vfm.c: (dump_splits) Calls tab_nat_dim().  No title.
5692
5693 Sat Jan  3 16:55:44 1998  Ben Pfaff  <blp@gnu.org>
5694
5695         * Most source files: Add `const' attribute in all appropriate
5696         places.
5697         
5698         * sysfile-info.c: (cmd_sysfile_info) Add tab_dim() call, add a
5699         column to the variables table for use by describe_variable().
5700         (cmd_display) Disable for the present.
5701         (display_documents) Don't wrap documents.
5702         (display_variables) Table has four columns now.
5703         (describe_variable) Table has four columns now.  Don't use a
5704         subtable, use joined cells instead.
5705
5706         * tab.c: (tab_create) Don't set `join'.
5707         (tab_realloc) ct array is not made up of a_string's.
5708         Reallocate trh, hrh, h arrays, initialize trh array.  Initialize
5709         cell contents on GLOBAL_DEBUGGING, not DEBUGGING.
5710         (text_format) New function.
5711         (tab_title) Rewritten, uses text_format().
5712         (tab_text) Rewritten, uses text_format().
5713         (tab_joint_text) New function.
5714         (tab_join) Removed.
5715         (static var hit) New variable.
5716         (render_strip) New args r1, r2.  Implement joined cells that fit
5717         on a single page.
5718         (tabi_render) Increment hit.  Pass new args to render_strip().
5719         (evaluate_dimensions) [GLOBAL_DEBUGGING] Check for uninitialized
5720         cells.  For t_naw and t_nah, ignore joined cells and null cells in
5721         calculations.
5722         
5723         * tab.h: (struct tab_join_rect) Removed.
5724         (struct tab_table) Removed `join'.
5725         (TAB_JOIN_MAIN) Removed.
5726         (struct tab_joined_cell) New struct.
5727         (TAT_NOWRAP) New enum.
5728
5729 Fri Jan  2 01:39:58 1998  Ben Pfaff  <blp@gnu.org>
5730
5731         * ascii.c: (ascii_postopen) Replace ASCII_* macros with their
5732         expansions.
5733         (ascii_postopen_driver) Fix initialization of *_spacing so that
5734         the TAL_0 bit doesn't count.
5735
5736         * data-list.c: (dump_fixed_table) Use natural width for Format
5737         column.
5738
5739         * glob.c: (rerange) Removed.
5740         (get_date) Formatting fixes.  Internationalization fix.
5741
5742         * html.c: (html_postopen_driver) Replace HTML_DEFAULT_OUTPUT_FILE
5743         with "pspp.html".
5744
5745         * postscript.c: (ps_postopen_driver) Replace
5746         PS_DEFAULT_OUTPUT_FILE with "pspp.ps".
5747
5748         * som.c: (som_submit) Don't eject page before every table.
5749         (output_table) Fix order of arguments on call to area().
5750         (render_columns) Fix calculation of max_len.
5751         
5752         * tab.c: (tabi_cumulate) Minor change to increase elegance.
5753         (render_strip) New function.
5754         (strip_height) New function.
5755         (tabi_render) Rewrite as calls to render_strip().
5756
5757         * tab.h: (TAT_* enums) Removed TAT_RICH, all references removed.
5758         Renumbered TAT_PRINTF, TAT_TITLE, TAT_FIX to correspond better
5759         with the TAB_* and OUTP_T_* constants.
5760         
5761 Thu Jan  1 11:53:52 1998  Ben Pfaff  <blp@gnu.org>
5762
5763         * Makefile.am: Formatting fixes.
5764
5765         * ascii.c: (ascii_postopen_driver) Initialize *_line_spacing[],
5766         *_line_width[].
5767
5768         * data-list.c: (dump_fixed_table) Add tab_dim() call.
5769
5770         * descript.q: (dump_z_table, display) Add tab_dim() calls.
5771
5772         * dump-sysfile.c: (glob var length) Make type off_t.
5773         (usage) Fix arguments.
5774         (main) Return 0.
5775
5776         * output.h: (OUTP_T_*) Change constants' value to match tab.h.
5777         Now right-justification is the default so many references had to
5778         change.
5779         (struct outp_class) Removed line_width, all references changed.
5780         (OUTP_DEV_*) Add OUTP_DEV_DISABLED.
5781         (struct outp_driver) Add elements horiz_line_width,
5782         vert_line_width, horiz_line_spacing, vert_line_spacing.  Remove
5783         som element.
5784
5785         * postscript.c: (outp_encodings) Formatting fixes.  Fix garbage
5786         collection.
5787         (postopen) Initialize all the informational members of
5788         outp_driver.
5789
5790         * som.c: (som_blank_line) New function, renamed from blank_line(),
5791         all references changed.
5792         (som_submit) Disables drivers whose pages can't be opened.
5793         (render_columns, render_simple, render_segments) Add debug output.
5794         (render_columns) Fix loop range.
5795         (render_simple) Don't try to render the headers, they're taken
5796         care of automatically.  Advance cp_y past the table when done.
5797         (render_segments) Fix loop ranges.
5798
5799         * tab.c: Initialize new members of tab_table.
5800         (tab_vline) Handle trv[]; don't set style for spacing-only lines.
5801         (tab_hline) Handle trh[]; don't set style for spacing-only lines.
5802         (tab_box) Handle trh[], trv[]; don't set style for spacing-only
5803         lines.
5804         (set_expr) Removed.
5805         (tab_dim) New function.
5806         (tab_col_width) Removed.
5807         (tab_row_height) Removed.
5808         (tab_output_text) Call tab_dim().
5809         (tabi_driver) Call evaluate_dimensions(), sum_columns().
5810         (tabi_area) Implemented.
5811         (tabi_cumulate) Implemented.
5812         (tabi_render) Partially implemented, but broken.
5813         (var tab_table_class) Made static.
5814         (evaluate_dimensions) New function.
5815         (sum_columns) New function.
5816
5817         * tab.h: (enum t_*) Now start at t_end.  New: t_ptw, t_nr, t_nc,
5818         t_nah, t_naw, t_neg, t_xch, t_dup, t_lbl, t_jnz, t_sac, t_sar,
5819         t_scr, t_srr, t_sentinel.  Removed: t_nat.
5820         (struct tab_table) New: wl, wr, ht, hb, trh, hrh, trv, wrv, dim,
5821         max_stack_height, w, h.  Removed: ce, re.
5822         (macro blank_line) Removed.
5823         (glob var zero_length) Removed.
5824
5825 Fri Dec 26 15:44:31 1997  Ben Pfaff  <blp@gnu.org>
5826
5827         * Most source files: include some of the new include files broken
5828         out of var.h.
5829         
5830         * Makefile.am: (pspp_SOURCES) Add all the new source files to the
5831         list.
5832
5833         * aggregate.c: (glob var outfile) Make static.
5834
5835         * command.c: (glob var pgm_state) Move here.
5836
5837         * common.c: (glob vars endian, second_lowest_value, pgmname,
5838         finished, curdate, cur_proc, start_interactive, history_file) Move
5839         here.
5840
5841         * descript.q: (structs dsc_z_score, descriptives_trns) Move here.
5842
5843         * file-handle.q: (glob vars files, inline_file) Move here.
5844
5845         * glob.c: Lost lots of glob vars, detailed in individual file
5846         entries.
5847         (init_glob) set_printer, set_screen were obsolete, deleted.
5848         set_cprompt has fewer spaces because pspp has fewer letters than
5849         fiasco.
5850
5851         * inpt-pgm.c: (glob vars inp_init, inp_init_size) Move here.
5852         (inp_nval) Made static.
5853
5854         * lexer.c: (glob vars token, tokval, tokstr, tokstr_size,
5855         tokstr_len, toklongstr, tokint) Move here.
5856
5857         * misc.c: Lost several vars and functions.
5858
5859         * set.q: (all the set_* variables) Move here.
5860
5861         * str.c: (strmaxcpy, strbarepadcpy, strbarepadlencpy, strpadcpy,
5862         blpstrset, strpadcmp, memrev, memrmem, cmp_str) Move here from
5863         misc.c.
5864
5865         * tab.c: (set_expr, tab_col_width, tab_row_height) New functions.
5866
5867         * tab.h: (enum series t_*) New enums.
5868         (struct tab_table) Use arena struct tag.  New members ce, re.
5869
5870         * tokens.h: Comment fixes.
5871
5872         * var.h: Move lots of enums and variables and functions and
5873         structures to other files.  Use and declare a lot more union and
5874         struct tags.  Comment fixes.  
5875
5876         * vector.c: (glob vars vec, nvec) Move here.
5877
5878         * vfm.c: (glob vars reinit_sysmis, reinit_blanks, init_zero,
5879         init_blanks, last_vfm_invocation) Move here.
5880
5881         * cases.h: New file.
5882         (struct long_vec) Move here.
5883         (vec_init, vec_clear, vec_insert, vec_delete, devector, envector)
5884         Move here.
5885
5886         * command.h: New file.
5887         (STATE_* enums) Move here.
5888         (glob var pgm_state) Move here.
5889
5890         * format.c: New file.
5891         (glob var formats) Move here.
5892         (parse_format_specifier_name, fmt_to_string,
5893         check_input_specifier, check_output_specifier,
5894         check_string_specifier, convert_fmt_ItoO, parse_format_specifier)
5895         Move here.
5896
5897         * format.h: New file.  Move functions now in format.c here.
5898         (FMT_* enums) Move here.
5899         (struct fmt_desc) Move here.
5900         (FCAT_* enums) Move here.
5901         (struct fmt_spec) Move here.
5902         (glob vars formats, fmt_parse_ignore_error) Move here.
5903
5904         * inpt-pgm.h: New file.
5905         (INP_* enums) Move here, make #defines into enums.
5906         (glob vars inp_init, inp_init_size) Move here.
5907
5908         * sort.h: New file.
5909         (glob vars v_sort, nv_sort) Move here.
5910         (sort_cases, read_sort_output) Move here.
5911
5912         * vector.h: New file.
5913         (struct vector) Move here, add struct tag.
5914         (glob vars vec, nvec) Move here.
5915         (find_vector) Move here.
5916
5917         * New file.
5918         (glob vars last_vfm_invocation, temp_case, reinit_sysmis,
5919         reinit_blanks, init_zero, init_blanks) Move here.
5920         (struct case_stream) Move here.
5921         (glob vars vfm_source, vfm_sink, vfm_memory_stream,
5922         vfm_disk_stream, sort_stream, data_list_source,
5923         input_program_source, file_type_source, get_source, n_lag) Move
5924         here.
5925         (procedure, write_case, lagged_case, compact_case, page_to_disk)
5926         Move here.
5927                 
5928 Wed Dec 24 22:40:42 1997  Ben Pfaff  <blp@gnu.org>
5929
5930         * Makefile.am: (pspp_SOURCES) Added html.c, som.c, som.h.
5931         (LDADD) Add libdcdflib.
5932
5933         * ascii.c: Comment and formatting fixes.  Almost every external
5934         function had an assert added, checking driver_open and page_open.
5935         (ascii_init_driver) Broken into ascii_preopen_driver,
5936         ascii_postopen_driver, ascii_close_driver.  Manages driver_open.
5937         (ascii_open_page) Sets page_open.
5938         (ascii_close_page) Clears page_open.
5939
5940         * html.c: Comment and formatting fixes.  Almost every external
5941         function had an assert added, checking driver_open and page_open.
5942         (html_init_driver) Broken into html_preopen_driver,
5943         html_postopen_driver, html_close_driver.  Manages driver_open.
5944         (html_open_page) Sets page_open.
5945         (html_close_page) Clears page_open.
5946         (html_submit) Disabled.
5947
5948         * lexer.c: (parse_string) Remove debugging printf.
5949
5950         * list.q: (determine_layout) Open a page if one is not yet open.
5951
5952         * output.c: Comment fixes.
5953         (add_class) Set the class member of the new list element.
5954         (parse_options) Don't handle device type.
5955         (colon_tokenize) New function.
5956         (configure_driver) New four-field format with a field for device
5957         type.  Now initialize driver_open, page_open, next, and prev
5958         fields.  Use new colon_tokenize() function.  Don't do a memory
5959         copy to replace a driver, it doesn't work; instead delete the old
5960         driver and insert a new one.
5961         (destroy_driver) Don't call som_destroy_driver().  Close the page
5962         if it's open.  Find the class in the list of classes and decrement
5963         that reference count.  Remove the driver from the global driver
5964         list.
5965         (outp_iterate_enabled_drivers) Renamed outp_drivers().  All
5966         references changed.  Rewritten.  Don't return a driver that's not
5967         enabled.
5968         (outp_eject_page) All references to som_internal_eject_page()
5969         changed to use this.  Sets cp_x to 0 as well as cp_y.
5970
5971         * output.h: (OUTP_I_* enums) Removed.
5972         (struct som_submission_form) Removed.
5973         (struct outp_class) init_driver broken into preopen_driver,
5974         postopen_driver, and close_driver.  submit changed to take a
5975         som_table argument.
5976
5977         * postscript.c: Comment and formatting fixes.  Almost every
5978         external function had an assert added, checking driver_open and
5979         page_open.
5980         (ps_init_driver) Broken into ps_preopen_driver,
5981         ps_postopen_driver, ps_close_driver.  Manages driver_open.
5982         (ps_open_page) Sets page_open.
5983         (ps_close_page) Clears page_open.
5984
5985         * som.c: New file, base implementation.
5986         
5987         * som.h: (struct som_table) Add struct tag.
5988         (enum SOM_COL_ACROSS) Removed.
5989         (SOM_ROWS, SOM_COLUMNS) New enums.
5990         (struct som_table_class) Add member `cumulate'.  Remove `segment';
5991         change `render' arguments.
5992         (struct som_point, struct som_rect) Removed.
5993         (som_submit_table) Fixed typo, should have been som_submit.
5994
5995         * sysfile-info: (describe_variable) Don't try to insert a
5996         subtable; just destroy it for now.
5997
5998         * t-test.q: Include dcdflib/cdflib.h instead of cdflib.h.  Fix
5999         references to value labels.
6000
6001         * tab.c: (tab_destroy) New function.
6002         (tab_columns) Change argument.
6003         [0] (tab_submit) Remove dead code.
6004         (tab_title) Allocate string from the table's arena.
6005         (tab_output_text) Only free the buffer if we allocated it.
6006         (tab_submit) New function.
6007         (static vars t, d) New static vars.
6008         (tabi_table, tabi_driver, tabi_count, tabi_area, tabi_columns,
6009         tabi_headers, tabi_cumulate, tabi_render) New functions.
6010         (glob var tab_table_class) New global var.
6011
6012         * tab.h: (struct tab_join_rect) Don't use a som_rect; directly
6013         encapsulate the rectangle.  All references changed.
6014         
6015 Sun Dec 21 16:18:58 1997  Ben Pfaff  <blp@gnu.org>
6016
6017         * All header files updated to use struct tags in addition to
6018         typedefs for all structures.  Don't use word `struct' in struct
6019         tags.
6020         
6021         * Makefile.am: (pspp_SOURCES) Remove html.c.
6022         (INCLUDES) Replace the lib/* includes with a single lib/ include;
6023         all references updated.
6024
6025         * command.c: (parse_cmd) Remove call to som_check_workspace.
6026         (output_line) Update to new som.
6027
6028         * data-in.c: (parse_numeric) A single dot is not an error; it is
6029         the system-missing value.
6030
6031         * data-list.c: (dump_fixed_table, dump_free_table) Update to new
6032         som.
6033
6034         * data-out.c: Added `const' as appropriate to many prototypes.
6035         (convert_E, convert_F, convert_CCx) Take double argument instead
6036         of value * argument.
6037         (convert_format_to_string) Call changed functions appropriately.
6038         Instead of modifying the caller's value for FCAT_SHIFT_DECIMAL,
6039         make a local copy of the value.
6040
6041         * descript.q: Remove custom_variables() prototype now provided by
6042         q2c.  
6043         (custom_variables) Don't increment sbc_variables, the caller does
6044         this.
6045         (dump_z_table, display) Update to new som.
6046
6047         * error.c: (vmsg) Add const to prototype.  Remove code to handle
6048         `too many errors' condition.
6049         (check_error_count) New function.
6050         (msg) Add const to prototype.
6051
6052         * filename.c: (open_file) Rewrite for elegance.
6053
6054         * frequencies.q: Remove custom_*() prototypes now provided by q2c.
6055         (dump_full, dump_condensed, dump_statistics) Update for new som.
6056
6057         * list.q: Don't include somP.h.  Change all references to
6058         som_driver_ext to refer to the new members of som_driver.  Change
6059         som_internal_eject_page() references to outp_eject_page().
6060
6061         * main.c: (parse) Rewrite for elegance.  Add call to
6062         check_error_count().
6063
6064         * output.c: (add_class, outp_list_classes, outp_configure_driver)
6065         Rewrite or revise for new outp_driver_class_list structure.
6066         (outp_iterate_enabled_drivers) Fix comparison between disabled
6067         devices and current device type.
6068         (outp_eject_page) New function.
6069
6070         * output.h: Comment fixes.
6071         (struct outp_driver) New members driver_open, page_open, cp_x,
6072         cp_y, font_height, prop_em_width, fixed_width.  Deleted members
6073         ref_count, next.
6074         (struct outp_driver_class_list) New struct.
6075         (outp_class_list) Changed to type outp_driver_class_list; all
6076         references updated.
6077
6078         * print.c: (dump_table, print_trns_proc) Updated for new som.
6079
6080         * q2c.c: (dump_vars) Simplify array subcommand code.  Declare
6081         prototypes for custom subcommands.
6082         (dump_subcommand) Always include the `else'.
6083         (dump_parser) Fix comments in output code.
6084
6085         * set.q: Reordered functions.
6086
6087         * som-frnt.c, som-high.c, som-low.c, somP.h: Removed.
6088         
6089         * som.h: Rewritten from scratch.
6090
6091         * str.h: Remove dead code.
6092
6093         * tab.c, tab.h: New files, base implementation.
6094
6095         * sysfile-info.c: (cmd_sysfile_info, describe_variable) Update to
6096         new som.
6097
6098         * t-test.q: New code from John Williams
6099         <johnr.williams@stonebow.otago.ac.nz>.  Include math.h, cdflib.h.
6100         Many many new static vars and defines.
6101         (precalc, postcalc, g_postcalc, z_postcalc, t_pairs, t_groups,
6102         groups_calc, pairs_calc, z_dev_calc, z_calc) New functions.
6103         (struct value_list) New struct.
6104         (variance, covariance, pooled_variance, oneway, pearson_r, f_sig,
6105         t_crt, t_sig, print_t_groups) New functions.
6106         (cmd_t_test) Implemented.
6107
6108         * temporary.c: (cancel_temporary) Only free the temp_dict if it's
6109         non-NULL.
6110
6111         * vfm.c: (dump_splits) Update to new som.
6112
6113 Thu Dec  4 23:02:22 1997  Ben Pfaff  <blp@gnu.org>
6114
6115         * Makefile.am: (fiasco_SOURCES) Add html.c.
6116
6117         * aggregate.c: Base source.
6118
6119         * ascii.c: (postopen, preclose) Reformat.
6120
6121         * data-out.c, expr-evl.c: Comment fixes.
6122         
6123         * filename.c: (open_file) When opening a file for writing, use
6124         line buffering instead of full buffering for better interactive
6125         performance.  Suggested by Valerio Aimale
6126         <valerio@svpop.com.dist.unige.it>.  Also, recognize special file
6127         names `stdin', `stdout', `stderr'.
6128
6129         * groff-font.c: Comment fixes.
6130
6131         * html.c: New file; base version.
6132
6133         * list.q: (write_all_headers, clean_up, determine_layout,
6134         list_cases) Ignore `special' devices for now.  Needs to be fixed
6135         later.
6136
6137         * output.c: (outp_init) Add html driver to list; reverse list
6138         order.
6139
6140         * output.h: (struct outp_class_struct) New members `special',
6141         `submit'; comment fixes.  All references changed.
6142
6143         * postscript.c: (ps_init_driver) Make defaults for text_opt,
6144         line_opt depend on whether the OUTP_DEV_SCREEN bit is set on the
6145         device.
6146         (postopen) Comment fix.
6147         (preclose) Comment fixes, formatting fixes.  Change x->file.file
6148         references to more proper f->file.
6149
6150         * som-high.c: (som_submit_table) Special classes use their own
6151         renderers.
6152
6153         * som.h: Comment fixes.
6154
6155         * temporary.c: (new_dictionary) Don't try to xstrdup() a NULL
6156         string.
6157         
6158 Tue Dec  2 14:36:07 1997  Ben Pfaff  <blp@gnu.org>
6159
6160         * Makefile.am: (fiasco_SOURCES) Add aggregate.c back in.
6161
6162         * aggregate.c: Still working on this.
6163
6164         * command.c: (cmd_table[]) Add AGGREGATE back in.
6165         (split_words) Make '-' a legal word separator as well as ' '.
6166
6167         * main.c: Comment fixes.
6168
6169         * q2c.c: (dump_parser) Don't require the procedure's full name to
6170         be present, in the generated source.
6171
6172         * t-test.q: Change name to `t-test' from `t test'.  Let PAIRS be
6173         multiply specified and let it be default; let MISSING, CRITERIA,
6174         FORMAT be multiply specified.
6175         (cmd_t_test) Parse command name.  [DEBUGGING] Call debug_print().
6176         (custom_groups) Fix defaults.
6177         (custom_pairs) Check whether this is a PAIRS subcommand before
6178         attempting to parse.  Better garbage collection.  Proper storage
6179         allocation.
6180         [DEBUGGING] (debug_print) New function.
6181
6182         * temporary.c: Comment fixes.
6183         (copy_variable) Don't copy variable name and index.
6184         (save_dictionary) Copy variable name and index by hand.
6185
6186         * vars-atr.c: Comment fixes.
6187         (create_variable) New dictionary argument.  All references
6188         changed.
6189         (common_init_stuff) New dictionary argument.  All references
6190         changed.
6191         (init_variable) New dictionary argument.  All references changed.
6192         (dup_variable) New function.
6193
6194         * vars-prs.c: (parse_variables) If there are any errors, we always
6195         return 0.  Previously, it was possible for some types of errors to
6196         be ignored.
6197         
6198 Sat Nov 22 01:20:59 1997  Ben Pfaff  <blp@gnu.org>
6199
6200         * Makefile.am: (fiasco_SOURCES) For 0.1.5 release, remove
6201         aggregate.c.
6202
6203         * command.c: (cmd_table[]) Comment out AGGREGATE; add T TEST.
6204
6205         * list.q, t-test.q: Remove ALL option from VARLIST declaration in
6206         grammar rules.
6207
6208         * q2c.c: Comment fixes.
6209         (SBC_* enums) Remove SBC_VARLIST_ALL; all references removed.
6210         
6211         * t-test.q: (cmd_list) Rename cmd_t_test.
6212
6213         * temporary.c: (new_dictionary) Don't declare as static.
6214         
6215 Fri Nov 21 00:03:06 1997  Ben Pfaff  <blp@gnu.org>
6216
6217         * aggregate.c: Changes, still not finished.
6218
6219         * file-handle.q, frequencies.q, list.q, set.q: Comment fixes.
6220
6221         * q2c.c: Comment fixes.  Now its output is internationalized.
6222         (get_token) Fix parsing of escapes within literal strings.
6223         (main) Fix bad #line directives in output.
6224
6225         * t-test.q: Base implementation.
6226
6227         * temporary.c: (new_dictionary) New function.
6228         (restore_dictionary) [__CHECKER__] Change fill character to *
6229         (from @).
6230         
6231 Sun Nov 16 01:29:57 1997  Ben Pfaff  <blp@gnu.org>
6232
6233         * Makefile.am: (BUILT_SOURCES, fiasco_SOURCES) Add t-test.c
6234
6235         * aggregate.c: Changes, still not finished.
6236
6237         * descript.q, list.q: Comment fixes.
6238
6239         * q2c.c: Almost completely rewritten.
6240
6241         * t-test.q: New file, not complete.
6242
6243 Fri Nov 14 00:14:48 1997  Ben Pfaff  <blp@gnu.org>
6244
6245         * aggregate.c: Changes, still not finished.
6246
6247         * sort.c: (sort_cases) Call cancel_temporary() instead of doing it
6248         by hand.
6249
6250         * temporary.c: (cancel_temporary) New function.
6251
6252         * vars-atr.c: (discard_variables) Call cancel_temporary() instead
6253         of doing it by hand.
6254
6255         * vfm.c: (close_active_file) After restoring a TEMPORARY
6256         dictionary, set temp_dict to NULL.  Cancel TEMPORARY through
6257         cancel_temporary().
6258         (SPLIT_FILE_procfunc) Comment fix.
6259
6260 Tue Oct 28 16:08:45 1997  Ben Pfaff  <blp@gnu.org>
6261
6262         * Makefile.am: (fiasco_SOURCES) Add aggregate.c.
6263
6264         * aggregate.c: New file, not finished yet.
6265
6266         * command.c: (cmd_table) Add AGGREGATE.
6267
6268         * common.h: (pgm_state) Move declaration to var.h.
6269
6270         * lexer.c: (bin_value_func, oct_value_func, hex_value_func) i18n
6271         fixes.
6272         (parse_string) Message fix.
6273
6274         * recode.c: Comment fix.
6275
6276         * sfm-read.c: (read_variables) Code esthetic fixes.
6277         (write_header) Default date is `Jan', not `JAN'.
6278
6279         * sfmP.h: (bswap_int32) [!__linux__] Fix off-by-one errors.
6280
6281         * sort.c: (cmd_sort_cases) Farm the work out to new function
6282         parse_sort_variables().
6283         (parse_sort_variables) New function.
6284         (sort_cases) New function.  Cancels temporary transformations,
6285         which sorting didn't do previously.
6286         (cmd_sort_cases) Better garbage collection on error.  Uses
6287         do_external_sort().
6288         (write_initial_runs, merge_once) Improved code esthetics.
6289         (sort_stream_read) Reduced to one call to read_output_cases().
6290         (read_output_cases) New function.
6291
6292         * var-labs.c: (cmd_variable_labels) Re-enabled truncation of
6293         variable labels to 120 characters.
6294
6295         * var.h: Comment fixes.
6296         (glob var pgm_state) From common.h.
6297
6298         * vars-atr.c: (discard_variables) Set pgm_state to STATE_INIT.
6299
6300         * vars-prs.c: (parse_DATA_LIST_vars) Support PV_SINGLE in
6301         options.  Set *names to NULL on error.
6302
6303         * vfm.c: (memory_stream_init) Assert compaction_nval != 0.
6304
6305 Thu Oct  9 09:59:49 1997  Ben Pfaff  <blp@gnu.org>
6306
6307         * sfm-write.c, vfm.c: [HAVE_UNISTD] #include <unistd.h>, needed by
6308         SunOS4.  From Alexandre Oliva <oliva@dcc.unicamp.br>.
6309
6310 Wed Oct  8 18:55:24 1997  Ben Pfaff  <blp@gnu.org>
6311
6312         * vfm.c: (page_to_disk) Added missing local variables.
6313
6314 Tue Oct  7 20:23:17 1997  Ben Pfaff  <blp@gnu.org>
6315
6316         * get.c: Comment fix.
6317
6318         * sort.c: (cmd_sort_cases) Attempt to perform internal sort if the
6319         source is anything other than a disk stream, not just if it's in a
6320         memory stream.  Call page_to_disk() before external sort.
6321         (allocate_cases) Message fix.
6322
6323         * vfm.c: (prepare_for_writing) Warn user when paging workspace to
6324         disk.
6325         (page_to_disk) New function.
6326
6327 Sun Oct  5 15:56:14 1997  Ben Pfaff  <blp@gnu.org>
6328
6329         * Makefile.am: (INCLUDES) Include .. instead of $(top_srcdir).
6330
6331         * common.h: (macro strerror) Remove.  From Alexandre Oliva
6332         <oliva@dcc.unicamp.br>.
6333
6334         * get.c: (dict_delete_run) The number of variables to delete is
6335         not necessarily the number of variables that need to be shifted
6336         up.
6337         (trim_dictionary) Don't set *options to 0.  Fix bug that caused
6338         too many variables to be deleted.
6339
6340         * postscript.c: Comment fix.
6341
6342         * q2c.c: Include strerror.c.  From Alexandre Oliva
6343         <oliva@dcc.unicamp.br>.
6344
6345         * set.q: #undef ON and OFF.  From Alexandre Oliva
6346         <oliva@dcc.unicamp.br>.
6347
6348         * sfm-read.c: (sfm_read_dictionary) Don't set the file class too
6349         early, otherwise errors cause a bad free().
6350
6351         * str.h: (macro nvsprintf) s/FORMATS/FORMAT/ typo.  From Alexandre
6352         Oliva <oliva@dcc.unicamp.br>.
6353
6354         * temporary.c: (save_dictionary) Don't allocate memory if
6355         n_documents is 0.
6356
6357         * vfm.c: (memory_stream_write) Message fix.
6358
6359 Sat Oct  4 16:20:43 1997  Ben Pfaff  <blp@gnu.org>
6360
6361         * command.c: (static var cmd_table[]) Define REPEATING DATA
6362         command.
6363
6364         * common.h: Added support for broken systems that are missing
6365         EXIT_SUCCESS, EXIT_FAILURE, RAND_MAX, and/or strerror().
6366
6367         * Many source files: Replace syntax error messages via msg() with
6368         call to syntax_error().
6369
6370         * data-list.c: (dump_fixed_table) Add support for dumping table
6371         for REPEATING DATA as well as DATA LIST FIXED.
6372         (cmd_repeating_data) Allows and requires `/' between subcommands.
6373         Does proper thing with allowing rpd.starts_end to stay 0.  Allows
6374         CONTINUED specifications to be omitted.  Forces CONTINUED to be
6375         specified if ID is.  Calculates starts_end, cont_end from logical
6376         record length as reported by fhp.  Calls dump_fixed_table() if
6377         requested.  Fixed length of record copied by memcpy.
6378         (parse_num_or_var) Sets `num' to 0, not NOT_INT, for variables.
6379         Message fix.
6380         (realize_value) Returns sensible value for out-of-range variable
6381         values.
6382         (rpd_parse_record) New argument `ofs'.  Fixed confusion between
6383         length of occurrences and length of line.  Added warning for
6384         fields that exceed the line length.  Fixed infinite loop.
6385         (read_one_set_of_repetitions) Numerous minor changes for more
6386         complete SPSS compliance.  Message fixes.
6387
6388         * dfm.c: (dfm_close) If the file being closed is the inline file,
6389         read all the remaining data before closing it.
6390         (dfm_get_record) Don't close the file on lossage, as either it
6391         has been closed already or it doesn't belong to us.
6392
6393         * error.c: (puts_stdout) New function.
6394         (vmsg) Use puts_stdout instead of puts.
6395
6396         * file-handle.q: (fh_record_width) New function.
6397
6398         * inpt-pgm.c: (init_case) Fixed buffer overrun when inp_nval % 4
6399         == 0.
6400         (clear_case) Ditto.
6401         (input_program_source_read) Made an old kluge an approved method.
6402
6403         * lexer.c: (syntax_error) New function.
6404
6405         * misc.c: [BROKEN_RAND] (ansi_rand, ansi_srand; static var next)
6406         New.
6407
6408         * output.c: (oupt_get_paper_size) Message fix.
6409
6410         * q2c.c: Numerous fixes to formatting of generated code made to
6411         conform to GNU coding standards.  Uses syntax_error() in generated
6412         code.  Other miscellaneous generated message fixes.  Added support
6413         for broken systems that are missing EXIT_SUCCESS, EXIT_FAILURE,
6414         RAND_MAX, and/or strerror().
6415
6416 Sat Oct  4 02:09:56 1997  Ben Pfaff  <blp@gnu.org>
6417
6418         * data-in.c: Comment fixes.
6419
6420         * data-list.c: (struct repeating_data_trns) New member `id_spec'.
6421         (find_variable_input_spec) New function.
6422         (cmd_repeating_data) Initializes id_spec.
6423         (rpd_parse_record) Implemented.
6424         (read_one_set_of_repetitions) Returns -3 by default in order to
6425         kluge out some potential bugs.
6426
6427         * data-out.c: Comment fixes.
6428
6429         * file-type.c: (internal_cmd_record_type) Message fix.
6430
6431         * inpt-pgm.c: (input_program_source_read) Special temporary kluge
6432         for handling -3 return value.
6433
6434 Sat Sep 20 23:58:15 1997  Ben Pfaff  <blp@gnu.org>
6435
6436         * data-list.c: Comment fixes.
6437         (struct dls_var_spec) Reordered members.
6438         (read_from_data_list_fixed) Restructured.
6439         (struct repeating_data_trns) Reordered members.  Renamed `starts'
6440         as `starts_beg', `ends' as `starts_end'.
6441         (cmd_repeating_data) Calculates length of repeated data if
6442         necessary and possible.
6443         (parse_num_or_var) Don't allow string variables.
6444         (realize_value) New function.
6445         (rpd_msg) New function.
6446         (rpd_parse_record) New function.  Currently stubbed out.
6447         (read_one_set_of_repetitions) Implemented.
6448
6449         * inpt-pgm.c: (input_program_source_read) Comment fix.
6450
6451 Thu Sep 18 21:34:57 1997  Ben Pfaff  <blp@gnu.org>
6452
6453         * command.c: (cmd_end_repeat_p) Removed.
6454         (init_cmd_parser) Doesn't set cmd_end_repeat_p.
6455         (parse_cmd_name) Removed.
6456
6457         * data-list.c: Comment fixes.
6458         (data_list_pgm) Removed `eof' member.
6459         (static var first) New var.
6460         (cmd_data_list) Sets `first'.  Ensures that DATA LIST uses the
6461         FILE TYPE file inside FILE TYPE structures.
6462         (append_var_spec) Appends to *first, not dls.spec.
6463         (parse_fixed) Message fixes.
6464         (struct rpd_num_or_var) New.
6465         (struct repeating_data_trns) New.
6466         (static var rpd) New.
6467         (cmd_repeating_data) New function.
6468         (parse_num_or_var) New function.
6469         (parse_repeating_data) New function.
6470         (read_one_set_of_repetitions) New function.
6471
6472         * file-type.c: (cmd_file_type) Message fixes.  Always
6473         default_handle to FILE TYPE file handle.
6474         (internal_cmd_record_type) Message fixes.
6475
6476 Wed Aug 20 14:22:03 1997  Ben Pfaff  <blp@gnu.org>
6477
6478         * repeat.c: Comment fix.  Disable debugging.
6479
6480         * temporary.c: (restore_dictionary) Sets splits to NULL and
6481         n_splits to 0 before destroying the variables because now doing
6482         this tries to remove split variables.
6483
6484         * vars-atr.c: (discard_variables) Asserts that n_splits is 0 after
6485         destroying the dictionary.
6486         (clear_variable) Removes a variable from splits after destroying
6487         it.
6488
6489 Mon Aug 18 18:06:55 1997  Ben Pfaff  <blp@gnu.org>
6490
6491         * cmdline.c: (set_compat) Removed.
6492         (pick_compat) Removed.
6493         (parse_command_line) Removed -c option.
6494         (pre_syntax_message) Removed -c option.
6495         (usage) Remove compatibility code.
6496
6497         * common.h: (macros VER_PC, VER_WND, VER_X) Removed.
6498         (glob var compat) Removed.
6499
6500         * compute.c: (type_check) Fixed messages about type mismatches.
6501
6502         * data-list.c: (cmd_data_list) Removed compatibility code.
6503         (fixed_parse_compatible) Calls convert_negative_to_dash().
6504         Fixed bug where it only set the variable in fx.spec if it created
6505         the variable itself.
6506         (dump_fmt_list) Spelling fix.
6507         (cut_field) Removed compatibility code.
6508
6509         * dfm.c: (cmd_begin_data) Don't require a command terminator on
6510         BEGIN DATA command.
6511
6512         * expr-evl.c: (evaluate_expression) Implement LAG.
6513
6514         * expr-prs.c: (parse_add) Calls convert_negative_to_dash().
6515         (parse_neg) Calls convert_negative_to_dash().
6516         (LAG_func) Increases n_lag to the lag requested.  Fixed assignment
6517         bug.
6518
6519         * expr.h: (struct expression_struct) Removed member max_lag.
6520
6521         * file-type.c: (parse_col_spec) Calls convert_negative_to_dash().
6522         (internal_cmd_record_type) Removed special handling to produce
6523         negative numbers from dash tokens.
6524
6525         * getline.c: (static var DO_REPEAT_level) New var.
6526         (getl_add_DO_REPEAT_file) Increments DO_REPEAT_level.
6527         (handle_line_buffer) Copies the line into getl_buf; doesn't call
6528         copy_with_DO_REPEAT_substitutions().
6529         (getl_read_line) Maintains value of getl_mode.  Calls
6530         perform_DO_REPEAT_substitutions() whenever DO_REPEAT_level is
6531         positive.
6532         (getl_close_file) Decrements DO_REPEAT_level when appropriate.
6533
6534         * getline.h: (getl_mode) New glob var.
6535
6536         * glob.c: Comment fixes.
6537         (init_glob) Restructured.  Sets set_seed.
6538         (init_compat_dependent) Removed.  All references removed.
6539         (get_date) Format changed from MM/DD/YY to DD MMM YYYY.
6540         (__htonl, __htons) Removed.  (What were these for?)
6541
6542         * lexer.c: (static var tbl) Dash set to class CNUM.
6543         (make_hexit) New function from data-out.c.
6544         (get_token_representation) Rewritten.
6545         (convert_negative_to_dash) New function.
6546         (lex_init_compat_dependent) Removed.
6547         (yylex) A dash is parsed as part of a number if it is followed by
6548         a digit.  The ASCII representation of a number is copied to
6549         tokstr.  String parsing farmed out to parse_string().  Comment
6550         fixes.
6551         (bin_value_func, oct_value_func, hex_value_func, parse_string) New
6552         functions.
6553         (preprocess_line) Line processing depends on interactive/batch
6554         mode, not on compatibility mode.  Removed PC+ compatibility code.
6555
6556         * loop.c: (loop_3_trns_proc) Comment fix.
6557
6558         * main.c: Remove dead code.
6559         (main) Remove call to init_compat_dependent().
6560
6561         * misc.c: (convert_fmt_ItoO) Make E format conversion more
6562         conformant.
6563
6564         * print.c: (parse_string_argument) Calls
6565         convert_negative_to_dash().
6566         (fixed_parse_compatible) Calls convert_negative_to_dash().
6567
6568         * repeat.c: (RPT_* defines) Removed.
6569         (struct rpt_numeric) Removed.
6570         (struct repeat_entry) New member type, changed `replacement' from
6571         char * to char **.
6572         (clean_up) Deallocation adapted to new repeat_entry.
6573         (internal_cmd_do_repeat) `type' defaults to 0.  Remove lookahead()
6574         usage.  Creates vars for `type' of 1.
6575         (parse_ids) Sets type of 1.  Adapted to new repeat_entry.
6576         (store_numeric) Rewritten, new interface.
6577         (parse_numbers) Rewritten.
6578         (parse_strings) Rewritten.
6579         (find_DO_REPEAT_substitution) New function.
6580         (perform_DO_REPEAT_substitutions) New function.
6581         (copy_with_DO_REPEAT_substitutions) Removed.
6582         (debug_print) Rewritten.
6583
6584         * set.q: Comment fix.
6585         (custom_results) Removed compatibility code.
6586         (internal_cmd_set) Removed SET EMULATION subcommand.  Removed
6587         compatibility code.
6588
6589         * sysfile-info.c: (cmd_display) Removed compatibility code.
6590
6591         * tokens.h: Comment fixes.
6592         (token types enum) Removed `toktype' typedef name for this int
6593         type.  Removed SUBST.  Restructured.
6594
6595         * vars-atr.c: (discard_variables) Sets n_lag to 0.
6596
6597         * vars-prs.c: Comment fix.
6598
6599         * vfm.c: Comment fixes.
6600         (glob var n_lag) New var.
6601         (static vars lag_count, lag_head, lag_queue) New vars.
6602         (procedure) Removed argument nlag.
6603         (setup_lag) New function.
6604         (close_active_file) Discards lagging state.
6605         (lag_case) New function.
6606         (lagged_case) New function.
6607         (write_case) Lags a case if lagging.
6608
6609         * weight.c: (cmd_weight) Removed compatibility code.
6610         
6611 Sun Aug 17 22:34:40 1997  Ben Pfaff  <blp@gnu.org>
6612
6613         * getline.h: (struct getl_script) New members loop_index, macros.
6614
6615         * getline.c: (getl_add_file) Sets first_line field to NULL.
6616         (getl_add_DO_REPEAT_file) New function.
6617         (handle_line_buffer) When the current line's length is negative,
6618         set the filename and line number.  Increment line number after
6619         reading line.  Pass the line to
6620         copy_with_DO_REPEAT_substitutions() for processing.
6621         (getl_close_file) Free DO REPEAT lines before freeing the
6622         filename, and just set the filename to NULL when doing this,
6623         because otherwise the filename gets freed twice.
6624
6625         * glob.c: (glob var queuing) Removed.  All references removed.
6626
6627         * lexer.c: Comment fixes.
6628         (get_token_representation) New function.
6629
6630         * repeat.c: Comment fixes.
6631         (struct repeat_entry) Replaced type and v union members with a
6632         simple string.
6633         (append_record) New function.
6634         (internal_cmd_do_repeat) Started reforming it for the new
6635         repeat_entry struct.  Properly records filename changes in the
6636         getl_line_buf.  Fixed improper use of = for ==.  Fixed sense of
6637         strncasecmp() result usage.  Uses append_record() to simplify.
6638         Properly discards END REPEAT line.  Calls getl_add_DO_REPEAT_file
6639         to add in the file.
6640
6641         (copy_with_DO_REPEAT_substitutions) Started coding.
6642
6643         [DEBUGGING] (debug_print_lines) New function.
6644
6645         * set.q: (custom_results, internal_cmd_set) s/VER_PCP40/VER_PC/;
6646
6647         * tokens.h: (macro is_id1, is_idn) New macros.
6648
6649 Sat Aug 16 10:57:41 1997  Ben Pfaff  <blp@gnu.org>
6650
6651         * cmdline.c: (static var pre_syntax_message) Changed `win'
6652         compatibility mode to `wnd'.
6653
6654         * data-list.c: (fixed_parse_spss) Renamed
6655         fixed_parse_compatible().
6656
6657         * glob.c: (init_glob) Excise unused code for
6658         program_invocation_short_name.
6659
6660         * lexer.c: (preprocess_line) Leading indentors are ignored in Wnd
6661         as well as in X.
6662
6663         * print.c: (fixed_parse_spss) Renamed fixed_parse_compatible().
6664
6665         * set.q: `win' compatibility renamed `wnd'.
6666
6667 Thu Aug 14 22:11:12 1997  Ben Pfaff  <blp@gnu.org>
6668
6669         * filename.c: [__WIN32__] Change the included Windows header files
6670         (again).
6671         (absolute_filename_p) [__MSDOS__] A filename with a colon as the
6672         second character is absolute.
6673         (dirname) Fix logic error.  Don't printf() the results.
6674         (prepend_dir) Don't printf() the results.
6675
6676         * getline.c: (handle_line_buffer) New function.
6677         (getl_read_line) Reads line with handle_line_buffer() when
6678         appropriate.
6679         (getl_close_file) Discard line buffer data.
6680
6681         * getline.h: Comment fixes.
6682         (struct getl_line_list) New struct.
6683         (getl_script_struct) Added line buffer members.  These are hooks
6684         for use by DO REPEAT to allow it to insert virtual source code
6685         into the program.
6686
6687         * glob.c: (init_glob) [__DJGPP__ || (__WIN32__ && __BORLANDC__)]
6688         Override Borland C++ stupidity that claims Windows has a console
6689         window size of 0x3.
6690
6691         * repeat.c: This is in the process of being restructured from
6692         using a token-buffering approach to the DO REPEAT facility to
6693         using the more flexible approach of a line-buffering approach in
6694         conjunction with the getline module.  Comment fixes.
6695         (struct tok_struct) Removed.
6696         (static vars queue_index, queue_head, queue) Removed.
6697         (static vars line_buf_head, line_buf_tail) New vars.
6698         (internal_cmd_do_repeat) Instead of queuing tokens, queue lines.
6699         Not complete.
6700         (pull_queue, destroy_queue) Removed.
6701         [DEBUGGING] (debug_print_tokens) Removed.
6702
6703 Tue Aug  5 13:57:58 1997  Ben Pfaff  <blp@gnu.org>
6704
6705         * file-handle.q: (prepend_current_directory) New function.
6706         (internal_cmd_file_handle, fh_get_handle_by_filename) Prepends
6707         current directory before normalizing filename.
6708
6709         * filename.c: (gnu_getcwd) New function.
6710         (absolute_filename_p) New function.
6711         (search_path) New argument, PREPEND.  All references changed to
6712         pass NULL except those explicitly mentioned.  Uses
6713         absolute_filename_p().  Prepends PREPEND before trying the
6714         filename.
6715         (dirname, prepend_dir) New functions.
6716
6717         * getline.c: (getl_get_current_directory) New function.
6718         (getl_include) Passes getl_get_current_directory() as PREPEND arg
6719         to search_path().
6720                 
6721 Sun Aug  3 11:42:36 1997  Ben Pfaff  <blp@gnu.org>
6722
6723         * In several source files, the term `script' was replaced with
6724         `syntax file' inside error messages.  Usage of the term `script'
6725         in the sense of a syntax file is now deprecated.
6726
6727         * cmdline.c: (static vars pre_syntax_message, post_syntax_message)
6728         Updated messages.
6729
6730         * dump-sysfile.c: (usage) Update message.
6731
6732         * getline.c: (getl_read_line) Ignore lines beginning with `#!'.
6733
6734         * getline.h: (glob var getl_include_path) Declare extern.
6735
6736         * list.q: Define EXTERN as extern before #including somP.h.
6737
6738         * var.h: Remove declaration of `disptype' variable.
6739
6740         * vfm.c: (close_active_file) After switching the data sink to a
6741         data source, set vfm_sink to NULL, because it doesn't exist any
6742         more.
6743
6744 Thu Jul 17 21:41:44 1997  Ben Pfaff  <blp@gnu.org>
6745
6746         * glob.c: [__BORLANDC__] Include math.h.  Define _matherr() and
6747         _matherrl() to ignore all math errors.
6748
6749         * sfm-read.c: (read_value_labels) When reading the labels from
6750         disk, read the little parts separately instead of as a struct;
6751         this avoids alignment problems.
6752
6753         * sfm-write.c: (struct sfm_fhuser_ext) New member `elem_type'.
6754         (sfm_write_dictionary) Sets elem_type and frees it on lossage.
6755         (write_header) Allocates and initializes elem_type.
6756         (sfm_write_case) Uses elem_type to determine how to handle each
6757         flt64 element.
6758         (sfm_close) Frees elem_type.
6759
6760         * sfmP.h: Comment fix.
6761         [__BORLANDC__] Uses #pragma -a to adjust structure member
6762         alignment.
6763         
6764 Thu Jul 17 01:55:12 1997  Ben Pfaff  <blp@gnu.org>
6765
6766         * Makefile.am: (fiasco_SOURCES) Remove display.c.
6767
6768         * common.c: Fix typo.
6769
6770         * dfm.c: (read_record) Remove strncasecmp() emulation and fix the
6771         sense of the condition.
6772
6773         * expr-evl.c: (macro ALLOC_STRING_SPACE) [!PAGED_STACK] Add
6774         line-continuation backslash.
6775
6776         * filename.c: [__WIN32__] Include <windef.h> before <winbase.h>.
6777
6778         * frequencies.q: (custom_grouped, add_percentile) Don't use a
6779         non-constant expression as an argument to sizeof.
6780
6781         * glob.c: [__WIN32__ && __BORLANDC__] When including <conio.h>,
6782         undefine gettext macro because that's a conio function.
6783
6784         * hash.h: (hsh_prime_tab declaration) Remove.
6785
6786         * list.q: (write_fallback_headers) Move `leader' allocation out of
6787         main loop.  Change to local_alloc() allocation.
6788
6789         * output.h: Formatting fixes.  Put __attribute__ in right place on
6790         function prototypes.
6791
6792         * sfm-read.c: (read_machine_flt64_info, read_variables) Change
6793         incorrect `SECOND_LOWEST_VALUE' references to proper
6794         `second_lowest_value'.
6795
6796         * som-frnt.c: (EXTERN macro) Define as `extern' instead of null
6797         value.  This way 2 out of 3 of the som files define the vars
6798         extern, the correct way, that actually works under BC++.
6799         (som_set_float) Don't use nonconstant initializers for a struct.
6800
6801         * som-high.c: Add the standard alloca() header.
6802         (replicate_table) Add prototype.
6803
6804         Merged DISPLAY routine.
6805         * sysfile-info.c: (AS_*) New enum series.
6806         (cmd_sysfile_info) Gutted.  Calls describe_variable() to do the
6807         dirty work.
6808         (cmd_display, display_macros, display_documents,
6809         display_variables) Stolen from defunct display.c.
6810         (describe_variable) New function.
6811
6812         * temporary.c: [0] (display_tree) New debug function.
6813         (copy_variable) Performs shallow copy of value labels instead of
6814         deep copy; i.e., just copys the AVL tree and increments the
6815         reference counts.
6816
6817         * val-labs.c: Comment fixes.
6818         (do_value_labels) Optionally skip leading forward slash.
6819         (get_label) Creates only a single value label instead of many
6820         copies of one, and sets the reference count.
6821
6822         * display.c: Removed.
6823
6824         * dump-sysfile.c: New file, not yet complete.
6825
6826 Fri Jul 11 23:02:18 1997  Ben Pfaff  <blp@gnu.org>
6827
6828         For lots of source files I added more verbose_msg's.  These aren't
6829         listed below as they have tested as being benign.  In some cases
6830         these replaced debug_printf() calls.
6831
6832         * output.c: (outp_read_devices) Message fix.
6833
6834         * postscript.c: (output_encodings) Message fix.  Reports errors on
6835         fclose().
6836         (postopen) Message fix.
6837         
6838 Fri Jul 11 14:09:40 1997  Ben Pfaff  <blp@gnu.org>
6839
6840         * dfm.c: (dfm_close) Don't call fclose() for a NULL FILE.
6841
6842         * filename.c: (close_file_ext) Set f->file to NULL *after* closing
6843         it.
6844
6845         * main.c: Remove <malloc.h> #include.
6846
6847         * mis-val.c: (parse_numeric) Set .f member for each missing[]
6848         instead of trying to just set the missing[] itself, which is a
6849         gcc-specific idiom.
6850
6851         * sfm-read.c: (read_variables) Same.
6852
6853         * str.h: Add memmem() prototype.
6854
6855         * val-labs.c, var-labs.c: Replace <malloc.h> with <stdlib.h>.
6856
6857 Thu Jul 10 22:13:53 1997  Ben Pfaff  <blp@gnu.org>
6858
6859         * Makefile.am: (q2c) Don't include any libraries in the link.
6860
6861         * dfm.c: (force_line_buffer_extension) New macro.
6862         (count_tabs) New function.
6863         (tabs_To_spaces) New function.
6864         (read_record) Calls tabs_to_spaces() on the line being processed.
6865
6866         * q2c.c: Disabled i18n for this proglet so that libintl.a doesn't
6867         have to be compiled twice (once for CC, once for LOCAL_CC).
6868  
6869 Sun Jul  6 19:14:33 1997  Ben Pfaff  <blp@gnu.org>
6870
6871         * Makefile.am: (INCLUDES) Add intl directory; fix directories.
6872         (LDADD) Add @INTLLIBS@.
6873         (q2c) Add LIBS, @INTLLIBS@ to link step.
6874
6875         * inpt-pgm.c: Turn off debugging.
6876
6877         * postscript.c: (postopen) Format fix.  local_free() blocks
6878         returned by local_alloc(); don't free() them.
6879
6880 Sat Jul  5 23:44:51 1997  Ben Pfaff  <blp@gnu.org>
6881
6882         * data-in.c: (parse_string_as_format) Comment fix.  Fix check for
6883         string length.
6884
6885         * data-list.c: (read_from_data_list_fixed) Pass proper value for
6886         LEN arg, not simply the full string length.
6887
6888         * sort.c: (allocate_file_handles) Check SPSS compatible temp file
6889         directories before generic temp file directories.
6890
6891         * vfm.c: Disable debugging.
6892
6893 Fri Jul  4 13:26:41 1997  Ben Pfaff  <blp@gnu.org>
6894
6895         * get.c: Comment fix.
6896         (cmd_save_internal) Always passes GTSV_OPT_SAVE option.
6897
6898 Wed Jun 25 22:52:28 1997  Ben Pfaff  <blp@gnu.org>
6899
6900         * expr-prs.c: (debug_print_postfix) Conditionally included on
6901         GLOBAL_DEBUGGING.  Removed out_header() reference.
6902
6903         * exprP.h: Removed #undef GLOBAL_DEBUGGING.
6904
6905 Sun Jun 22 22:00:28 1997  Ben Pfaff  <blp@gnu.org>
6906
6907         * ascii.c: Removed obsolete ascii_close_page() prototype.
6908
6909         * command.c: (output_line) Comment fix.
6910
6911         * data-in.c: Formatting fix.
6912         (parse_string_as_format) Now the `fc' argument is used only for
6913         the purpose of error messages; it is not an index into the string
6914         passed.  All references changed.
6915
6916         * data-list.c: Comment fix.
6917         (cut_field) Comment fix.  Now returns the column number of the
6918         position of the field cut out on success.
6919         (parse_field) Added `column' argument.  Puts the column numbers in
6920         the error message.
6921         (read_from_data_list_free, read_from_data_list_list) Record the
6922         column number returned by cut_field(), pass it to parse_field().
6923
6924         * dfm.c: Comment fix.
6925
6926         * do-ifP.h: Comment fix.
6927
6928         * expr-prs.c: (SYSMIS_func) Implemented string-type arguments for
6929         the SYSMIS function.
6930
6931         * expr.h, exprP.h: Comment fix.
6932
6933         * glob.c: (init_glob) Only calls setlocale() and family if
6934         ENABLE_NLS set.
6935
6936         * hash.h: Comment fix.
6937
6938         * include.c: Comment fix.
6939
6940         * output.c: Comment fix.
6941
6942         * postscript.c: (ps_line_intersection) Simplified assertion.
6943
6944         * repeat.c: Comment fix.
6945
6946         * vars-atr.c: Comment fix.
6947
6948         * vars-prs.c: Comment fix.
6949
6950         * vfm.c: (vector_initialization) [DEBUGGING] Fixed undefined
6951         behavior with usage of postincrement.
6952         (memory_stream_read) Discards cases as it goes. 
6953
6954 Sun Jun 15 16:45:17 1997  Ben Pfaff  <blp@gnu.org>
6955
6956         * Makefile.am: Cleans q2c, not just distcleans it.  Distcleans
6957         foo.
6958
6959         * Most source files: Includes debug-print.h, related comment
6960         fixes.
6961
6962         * cases.c: (alloc_val) Removed complex allocation code.  Merely
6963         increments default_dict.nval and returns the former value.
6964         (envector, devector) Removed references to lv member of struct
6965         variable.
6966
6967         * common.h: (macro VME) Replaced complex definition with simple
6968         one.
6969
6970         * data-list.c: (cmd_data_list) Sets vfm_source instead of
6971         read_active_file and cancel_input_pgm.
6972         (read_from_data_list, cancel_data_list) Removed.
6973         (data_list_source_read, data_list_source_destroy_source) New
6974         functions.
6975         (glob var data_list_source) New var.
6976
6977         * dfm.c: (open_file_r, open_file_w) Simplified debug output.
6978         (cmd_begin_data) Improved criteria for an input program accessing
6979         the inline file.  Still not perfect.
6980
6981         * do-if.c: (do_if_trns_proc) Simplified debug output.
6982
6983         * expr-prs.c: Comment fixes.
6984         [DEBUGGING] (debug_print_postfix) Simplified debug output.
6985
6986         * file-handle.q: (fh_close_handle) Simplified debug output.
6987
6988         * file-type.c: Comment fixes.
6989         (cmd_file_type) Sets vfm_source instead of read_active_file and
6990         cancel_input_pgm.
6991         (cmd_end_file_type) On failure, discards variables in place of
6992         just canceling the input program.
6993         (read_from_file_type) Renamed file_type_source_read.
6994         (cancel_file_type) Renamed file_type_source_destroy_source.
6995         (glob var file_type_source) New var.
6996
6997         * get.c: (GTSV_* enum series) New enums GTSV_OPT_SAVE, GTSV_NONE.
6998         (cmd_get) Initializes options to GTSV_NONE before passing to
6999         trim_dictionary().  Removed `lv' reference.  Sets vfm_source
7000         instead of read_active_file and cancel_input_pgm.
7001         (cmd_save_internal) Initializes options before passing to
7002         trim_dictionary().  Local var `nval' removed.
7003         (dict_delete_run) Comment fixes.
7004         (trim_dictionary) Comment fixes.  Disallows scratch variables if
7005         GTSV_OPT_SAVE set in options.
7006         (read_from_get) Renamed get_source_read.
7007         (cancel_get) Renamed get_source_destroy_source.
7008         (glob var get_source) New var.
7009
7010         * inpt-pgm.c: (cmd_input_program) Sets vfm_source instead of
7011         read_active_file and cancel_input_pgm.
7012         (read_from_input_program) Renamed input_program_source_read.
7013         Simplified debug output.
7014         (cancel_input_program) Renamed
7015         input_program_source_destroy_source.
7016         (glob var input_program_source) New var.
7017
7018         * loop.c: (loop_1_trns_proc) Simplified debug output.
7019
7020         * main.c: (dump_token) Made eof output more explicit.
7021
7022         * sfm-read.c: (read_variables, dump_dictionary) Removed `lv'
7023         references.
7024
7025         * sort.c: (cmd_sort_cases) Disallows scratch variables.  Removed
7026         code for always-memory or always-disk cases.  malloc's case-list
7027         based on vfm_source_info.ncases.  Explicit support for
7028         memory_stream via memory_source_cases.
7029         (do_external_sort) Sets vfm_source instead of read_active_file and
7030         cancel_input_pgm.
7031         (allocate_file_handles) The temporary directory permissions are
7032         set to 0700 instead of 0777.
7033         (allocate_cases) Formatting fixes.  Simplified debug output.
7034         (output_record) Compacts the case if necessary before writing it
7035         out.
7036         (close_handle, open_handle_w) Simplified debug output.
7037         (write_initial_runs) Destroys vfm_sink, then sets it to
7038         sort_stream.  Writes records to memory based on
7039         vfm_sink_info.case_size.
7040         (write_to_sort_cases) Renamed sort_stream_write().
7041         (merge) Simplified error handling.  Simplified debug output.
7042         Formatting fixes.
7043         (read_from_external_sort) Renamed sort_stream_read().
7044         Reads records based on vfm_source_info.case_size.
7045         (sort_stream_write) Writes records to memory based on
7046         vfm_sink_info.case_size.
7047         (sort_stream_mode) New function.
7048         (glob var sort_stream) New variable.
7049
7050         * temporary.c: (cmd_temporary) Simplified debug output.
7051         (copy_variable) Removed references to `lv'.
7052
7053         * title.c: (get_title) Simplified debug output.
7054
7055         * var.h: Comment fixes.
7056         (struct get_proc) Removed member `lv'.
7057         (struct variable) Removed member `lv'.  Comment fixes.
7058         (glob vars read_active_file, write_active_file, cancel_input_pgm)
7059         Removed.
7060         (struct case_stream) New.
7061
7062         * vars-atr.c: (discard_variables) Changed cancel_input_pgm,
7063         read_active_file references to use vfm_source.
7064         (init_variable, replace_variable) Removed references to `lv'.
7065
7066         * vfm.c: Comment fixes.
7067         (glob var vfm_source, vfm_sink, vfm_source_info, vfm_sink_info)
7068         New variables.
7069         (static var queue, qh, qt, n_lag) Removed.  All references
7070         removed.
7071         (glob var compaction_necessary, compaction_nval, compaction_case,
7072         paging) New variables.
7073         (record_case) Removed.
7074         (procedure) Comment fixes.  Calls vfm_source->read() instead of
7075         read_active_file().
7076         (lag) Removed.
7077         (prepare_for_writing, arrange_compaction, make_temp_case,
7078         vector_initialization, setup_filter) New function.
7079         (open_active_file) Most of the code moved into the abovementioned
7080         new functions.  Now sets temp_dict to &default_dict if there is no
7081         temporary dictionary, for convenience.  New debug output.
7082         (close_active_file) Deals with changing the sink to the source.
7083         Calls finish_compaction().  Frees compaction_case.  Mostly
7084         rewritten.
7085         (glob vars disk_source_file, disk_sink_file) New vars.
7086         (destroy_active_file, read_from_memory) Removed.
7087         (disk_stream_init, disk_stream_read, disk_stream_write,
7088         disk_stream_mode, disk_stream_destroy_source,
7089         disk_stream_destroy_sink) New functions.
7090         (glob var vfm_disk_stream) New var.
7091         (glob vars memory_source_cases, memory_sink_cases,
7092         memory_sink_iter, memory_sink_max_cases) New vars.
7093         (memory_stream_init, memory_stream_read, memory_stream_write,
7094         memory_stream_mode, memory_stream_destroy_source,
7095         memory_stream_destroy_sink) New functions.
7096         (glob var vfm_memory_stream) New var.
7097         (write_case) Local var `i' renamed `cur_trns'; local var `retval'
7098         named `more_cases'.  Simplified debug output.  Otherwise mostly
7099         rewritten.
7100         (record_case) Moved into the stream drivers.  Removed.
7101         (transform) Removed (was dead code).
7102         (SPLIT_FILE_procfunc) s/vfm_replacement/vfm_sink_info/.  In the
7103         common case that the splits don't change, we don't need to copy
7104         the case into prev_case again--pointless.
7105         (compact_case) New function.
7106         (finish_compaction) New function.
7107
7108         * vfmP.h: Comment fixes.
7109         (DEV_* enum series) Removed. 
7110         (struct storage) Renamed `stream_info'.  Removed variant record.
7111         Removed `device' member.
7112
7113         * debug-print.h: New file.
7114         
7115 Sun Jun  8 01:12:38 1997  Ben Pfaff  <blp@gnu.org>
7116
7117         * autorecode.c: Turned off debugging.
7118
7119         * data-list.c: (destroy_dls) Closes the associated file handle.
7120
7121         * descript.q: (custom_variables) Added PV_NO_SCRATCH to
7122         parse_variables() options.
7123
7124         * dfm.c: (open_file_r) Removed gratuituous argument to msg() call.
7125
7126         * display.c: (display_variables) Really fixed null cell bug.
7127
7128         * file-handle.q: (fh_close_handle) Changed debugging message.
7129
7130         * frequencies.q: (custom_variables) Added PV_NO_SCRATCH to
7131         parse_variables() options.
7132
7133         * list.q: Added PV_NO_SCRATCH in q2c varlist options.
7134         (cmd_list) Fails if no variables specified.
7135         (determine_layout) Writes blank lines manually.
7136
7137         * loop.c: (loop_1_trns_proc) Made debugging code only print
7138         messages if debugging.
7139
7140         * q2c.c: (dump_subcommand) Appends sbc->message to SBC_VARLIST
7141         parse_variables() arguments.
7142         (main) Parses optional parenthesized options to varlist
7143         subcommands into sbc->message.
7144
7145         * sfm-read.c: Format fix.
7146
7147         * var.h: (FV_*) New enum series.
7148         (PV_*) New enum PV_NO_SCRATCH.
7149
7150         * vars-prs.c: (find_var) Removed.
7151         (fill_all_vars) Takes FV_* enum instead of boolean third
7152         argument.  Rewritten to deal with scratch as well as system
7153         variables.
7154         (parse_variables) Error message on scratch variable if
7155         PV_NO_SCRATCH set.
7156
7157         * vfm.c: (static var virt_begin_func) New var.
7158         (procedure) Sets up virt_begin_func.
7159         (SPLIT_FILE_procfunc) For the first case, calls virt_begin_func()
7160         after dump_splits().  For succeeding groups changes, calls
7161         virt_begin_func() instead of begin_func().      
7162
7163 Fri Jun  6 22:42:23 1997  Ben Pfaff  <blp@gnu.org>
7164
7165         * count.c, data-out.c, file-handle.q, list.q, loop.c: Turned off
7166         debugging.
7167
7168         * dfm.c: Added some debugging messages, disabled by default.
7169         (open_file_r) Fixed error message.
7170         (read_record) On eof on inline_file, instead of calling
7171         fh_close_handle(), simply jump to eof label like a normal file.
7172         Message fixes.
7173
7174         * display.c: Thin lines between rows for certain kinds of
7175         listing.  Fixed `null cell' bug.
7176
7177         * error.c: (failure) Flush stdout, stderr before failing.
7178
7179         * file-handle.q: (fh_close_handle) Added debugging message.
7180
7181         * frequencies.q: (dump_full) Bottom line extends across entire
7182         table width.  Changed title formatting.
7183         (dump_condensed) Changed title formatting.
7184         (dump_statistics) Fixed title formatting.
7185
7186         * glob.c: (init_glob) Moved initialization of cur_proc out of #if.
7187         Sets default value of set_format.
7188
7189         * list.q: (cmd_list) Calls blank_line() before determine_layout().
7190         Passes write_all_headers() to procedure() as pre-group func.
7191         (write_all_headers) New function.
7192         (determine_layout) Removed calls to write_header().
7193         Calls blank_line() before and after write_fallback_headers().
7194
7195         * recode.c: (recode_trns_free) Only attempts to free head->map if
7196         non-NULL.
7197
7198         * sfm-read.c: (read_variables) Allows `#' at beginning of system
7199         file variable names but gives a warning.  Sets `left' based on
7200         first character being/not being `#'.  On lossage frees dict->var.
7201
7202         * som-high.c: (som_draw_title) Simplified title formatting.
7203
7204         * vfm.c: (dump_splits) Fixed and changed splits formatting.
7205
7206 Thu Jun  5 22:51:15 1997  Ben Pfaff  <blp@gnu.org>
7207
7208         * autorecode.c: (cmd_autorecode) Sets h_trans to NULL at
7209         beginning.  Frees v_src, v_dest on successful exit.  Frees
7210         h_trans[*], h_trans on lossage.
7211         (recode) Frees h_trans[*], h_trans.
7212
7213         * dfm.c: (dfm_close) Formatting change.
7214         (open_inline_file) Now passed a dfm_fhuser_ext to initialize; no
7215         longer allocates its own in inline_file.
7216         (open_file_r) Passes the local dfm_fhuser_ext to
7217         open_inline_file().
7218         (open_file_w) Message fix. 
7219         (read_record) Buffer reallocation strategy changed.  Frees
7220         ext->line even in inline_file to prevent leaks.
7221         (dfm_put_record) Fixed bug where `ext' was cached before the file
7222         was opened and thus it would be NULL when the file really was
7223         open.
7224         (cmd_begin_data) Sets up inline_file basics itself, then calls
7225         open_inline_file() for the dfm_fhuser_ext.  Formatting fix.
7226
7227         * list.q: (write_line) Formatting fix.
7228         (clean_up) Minor strategy change.  Sets proportional font after
7229         finishing cleanup.
7230         (determine_layout) Sets fixed font before writing regular headers,
7231         or after writing fallback headers.
7232
7233         * modify-vars.c: (cmd_modify_vars) Frees variable lists for DROP
7234         and KEEP vars after using them.
7235
7236         * postscript.c: (ps_init_driver) Frees x->family.
7237         (postopen) When loading fonts, free the temporary font name buffer
7238         after using it.
7239         (ps_text_set_font_by_position) Free temporary font name buffer
7240         after using it.
7241         (text) Fixed code that calculated `lig' so that `lig' always gets
7242         initialized.  Formatting fix.
7243
7244         * som-low.c: (get_cell_size, som_get_table_size) `prop_height' ->
7245         `font_height'.
7246         [GLOBAL_DEBUGGIGN] (check_table) Use arena_alloc() to allocate
7247         cells, not xmalloc(), so that the cells will get destroyed
7248         automatically.
7249
7250         * sysfile-info.c: (cmd_sysfile_info) Frees the dictionary after
7251         using it.
7252
7253 Tue Jun  3 23:33:22 1997  Ben Pfaff  <blp@gnu.org>
7254
7255         * ascii.c: (ascii_text_draw) Always sets metrics for strings that
7256         are drawn.
7257
7258         * dfm.c: Comment fix.
7259
7260         * list.q: Comment fixes.  Include somP.h.  Removed static vars
7261         table, n_columns, n_rows, part.  New struct list_ext.  New static
7262         var line_buf.
7263         (n_lines_remaining, n_chars_width, write_line) New functions.
7264         (cmd_list, list_cases) Rewritten.
7265         (begin_row, end_row, flush_table) Removed.
7266         (write_header, clean_up, write_varname, write_fallback_headers,
7267         determine_layout) New functions.
7268
7269         * output.c: (outp_iterate_enabled_drivers) Minor reformat.
7270
7271         * output.h: Comment fix.
7272
7273         * postscript.c: Comment fix.
7274         (struct ps_driver_ext) Removed prop_size, fixed_size members;
7275         added font_size.  All references changed.
7276         (ps_init_driver) Initializes font_size.  Simplified space checking
7277         code.
7278         (static var option_tab[]) Removed prop-size, fixed-size; added
7279         font-size.
7280         (ps_option) Handles font_size.
7281
7282         * som-high.c: Moved prototypes into somP.h.
7283         (som_init_driver) New function.
7284         (som_submit_table) Moved some code into new function
7285         som_init_driver().
7286         (build_target) Moved some code into new function
7287         som_internal_eject_page().
7288         (som_eject_page) Uses som_internal_eject_page().
7289         (som_internal_eject_page) New function.
7290
7291         * som-low.c: Moved prototypes into somP.h.
7292
7293         * som.h: Formatting fixes.
7294
7295         * somP.h: (struct som_driver_ext) Removed em_width;
7296         added prop_em_width, fixed_width.
7297
7298 Mon Jun  2 14:25:25 1997  Ben Pfaff  <blp@gnu.org>
7299
7300         * Makefile.am: Added `localedir' definition.  Added
7301         -DLOCALEDIR="..." to DEFS.  Added -I. to INCLUDES.
7302
7303         * ascii.c: (macro draw_line) Fixed capitalization.
7304
7305         * ascii.c, autorecode.c, cases.c, cmdline.c, command.c, common.c,
7306         compute.c, count.c, data-in.c, data-list.c, data-out.c,
7307         descript.q, dfm.c, display.c, do-if.c, error.c, expr-evl.c,
7308         expr-opt.c, expr-prs.c, file-handle.q, file-type.c, filename.c,
7309         formats.c, frequencies.q, get.c, getline.c, glob.c, groff-font.c,
7310         hash.c, heap.c, include.c, inpt-pgm.c, lexer.c, list.q, loop.c,
7311         main.c, mis-val.c, misc.c, modify-vars.c, numeric.c, output.c,
7312         postscript.c, print.c, q2c.c, recode.c, rename-vars.c, repeat.c,
7313         sample.c, sel-if.c, sfm-read.c, sfm-write.c, sfmP.h, som-frnt.c,
7314         som-high.c, som-low.c, sort.c, split-file.c, sysfile-info.c,
7315         temporary.c, title.c, tokens.h, val-labs.c, var-labs.c,
7316         vars-atr.c, vars-prs.c, vector.c, vfm.c, weight.c: Marked strings
7317         for internationlization.
7318
7319         * glob.c: [HAVE_LOCALE_H] Includes locale.h.
7320
7321 Sun Jun  1 23:31:18 1997  Ben Pfaff  <blp@gnu.org>
7322
7323         * do-if.c, sort.c, val-labs.c: Comment fixes.
7324
7325         * glob.c: (init_glob) Uncommented, updated i18n support.
7326         
7327         * arena.c, ascii.c, data-in.c, descript.q, error.c, expr-evl.c,
7328         expr-opt.c, expr-prs.c, filename.c, frequencies.q, groff-font.c,
7329         output.c, postscript.c, sfm-read.c, som-high.c, vars-prs.c: Made
7330         the declarations of macros taking arguments a lot nicer.
7331
7332 Sun Jun  1 17:22:04 1997  Ben Pfaff  <blp@gnu.org>
7333
7334         * error.h: Removed CE, CW aliases for SE, SW.
7335
7336         * q2c.c: Removed explicit streq() definition since it's duplicated
7337         in str.h.
7338         
7339         * approx.h, error.h, font.h, hash.h, misc.h, output.h, somP.h,
7340         stats.h, str.h, tokens.h: Made the declarations of macros taking
7341         arguments a lot nicer-looking of <pinard@iro.umontreal.ca>.
7342         Comment fixes.
7343
7344 Sun Jun  1 12:02:06 1997  Ben Pfaff  <blp@gnu.org>
7345
7346         * cmdline.c: Comment fixes.
7347         (pick_compat) Changed return type to int.  Now, instead of setting
7348         glob var `compat' to the emulation, returns the emulation.  All
7349         references changed.
7350         (parse_command_line) Added terminating null to end of
7351         `long_options' array definition.
7352         (pre_syntax_message) Fixes.
7353         (usage) Shows the default emulation in the syntax message by
7354         calling pick_compat().
7355
7356         * getline.c: (getl_add_include_dir) Separates paths with
7357         PATH_DELIMITER, not DIR_SEPARATOR.
7358
7359         * glob.c: (init_glob) Fixed references to DEFAULT_VER_PCP40,
7360         DEFAULT_VER_WIN61, DEFAULT_VER_X40.
7361
7362         * output.c: (outp_configure_macro) Make earlier definitions for a
7363         particular key override later ones for the same key.
7364         
7365 Fri May 30 19:40:49 1997  Ben Pfaff  <blp@gnu.org>
7366
7367         * ascii.c: Comment fixes.
7368
7369         * output.c: (outp_get_paper_size)
7370         s/STAT_OUTPUT_INIT_FILE/STAT_OUTPUT_PAPERSIZE_FILE/.
7371         
7372 Sun May 25 22:34:07 1997  Ben Pfaff  <blp@gnu.org>
7373
7374         * ascii.c, postscript.c, sfm-read.c, sfm-write.c, sort.c: Include
7375         <errno.h>.  GNU libc 2 enforces this!
7376
7377         * command.c: (parse_cmd) Fixed problem with `else' clause being
7378         paired with wrong `if'.  Comment fix.
7379
7380 Fri May  9 16:53:52 1997  Ben Pfaff  <blp@gnu.org>
7381
7382         * getline.c: [!HAVE_LIBREADLINE] (read_console) Changed
7383         blp_getline() to getline().
7384
7385         * output.c: (outp_eval_dimension) Changed the fix from last time;
7386         there was no variable `a'.
7387
7388         * q2c.c: (get_line) Fixed boundary condition overrun bug.
7389
7390 Mon May  5 21:58:22 1997  Ben Pfaff  <blp@gnu.org>
7391
7392         * output.c: (outp_evaluate_dimension) Fixed handling of negative
7393         numbers having fractional parts.  Added case of a fraction without
7394         a whole-number part.
7395
7396 Fri May  2 22:08:05 1997  Ben Pfaff  <blp@gnu.org>
7397
7398         * ascii.c: (ascii_text_get_font_position) Removed.
7399
7400         * expr.h, exprP.h: Disabled debugging.
7401
7402         * groff-font.c, postscript.c: Changed `groff' to `Groff' in
7403         several places.
7404
7405         * output.h: (struct outp_class_struct) Removed
7406         text_get_font_position method.  All references deleted.
7407
7408         * postscript.c: Big change here.  Fontmaps were completely
7409         eliminated because of a change in philosophy.  Comment fixes.
7410         (struct ps_fontmap, ps2dit_map, font_family, dit2family_map)
7411         Removed.
7412         (struct ps_driver_ext) `position', `fontmap', `prop_name',
7413         `fixed_name' members removed.  New members `prop_family',
7414         `fixed_family'.  `family' member changed to type char *.
7415         (static var ps_fontmaps) Removed.
7416         () Removed.
7417         (ps_init_driver) Removed obsolete references, updated.
7418         Initializes `translate_x', `translate_y', `scale'.  Doesn't read
7419         fontmap, of course.  Refers to font names through internal_name
7420         rather than subversive means.  Frees proper items.
7421         (static var option_tab[]) Removed `fontmap-file' option; renamed
7422         `fixed-font', `prop-font'.
7423         (ps_option) Corresponds to option_tab[].
7424         (read_fontmap, release_fontmap, ps_to_dit, compare_ps2dit,
7425         hash_ps2dit, compare_dit2family, hash_dit2family, compare_family,
7426         hash_family) Removed.
7427         (postopen) Generates font names from family names.  Gets
7428         PostScript font name properly.  New prologue file comment `!!!'
7429         style.
7430         (ps_open_page) Adds translate_x, translate_y to BP prologue
7431         function; gives SF argument floating-point format.
7432         (ps_text_set_font_by_name) Doesn't try to map PostScript->Groff
7433         font name.  Doesn't change font family.
7434         (ps_text_set_font_by_position) Generates Groff font name from font
7435         family name instead of through table lookup.
7436         (ps_text_set_font_by_family) Renamed `ps_text_set_font_family',
7437         all references changed.  Reduced to simple string assignment.
7438         (ps_get_font_name) Removed.
7439         (ps_get_font_family) Reduced to string return.
7440         (text) Doesn't save `position' since it no longer exists.  Ugly
7441         kluge to save font family--fix soon?
7442         (load_font) Removed PostScript name argument.
7443         
7444 Thu May  1 14:58:59 1997  Ben Pfaff  <blp@gnu.org>
7445
7446         * postscript.c: Comment fix.
7447         (ps_open_page) Puts scale factor in PostScript output.
7448         
7449 Sat Apr 26 11:49:32 1997  Ben Pfaff  <blp@gnu.org>
7450
7451         * Makefile.am: Distcleans q2c.
7452
7453 Wed Apr 23 21:33:48 1997  Ben Pfaff  <blp@gnu.org>
7454
7455         * ascii.c: (delineate) Sets text size even if width is zero.
7456
7457         * command.c: Comment fix.
7458         (static var cmd_table[]) Re-enabled EVALUATE command.
7459         (parse_cmd) Lotsa comment fixes.  Fixed infinite loop in parsing
7460         of comments in script files.  Now more liberal on criteria for
7461         performing a state transition--if *anything* happened correctly,
7462         not just if *everything* happened correctly.
7463
7464         * data-out.c: (convert_F) Comment fix.  Why in the fsck does
7465         Checker segfault on formatting large numbers and why in the fsck
7466         hadn't I noticed this before?
7467
7468         * expr.h, exprP.h: No longer turn off GLOBAL_DEBUGGING.
7469
7470         * list.q: (cmd_list) Commented out the actual output routine
7471         because of various problems.  Probably will abandon the idea of
7472         using the general `crushed tables' for the LIST procedure.
7473
7474         * temporary.c: (restore_dictionary) Sets var_by_name to NULL after
7475         clearing it.  Allocates a new var_by_name dictionary before trying
7476         to add members to it.
7477
7478         * vars-atr.c: [DEBUGGING] (dump_one_var_node) Removed argument
7479         `sib'.  Changed type of `node' argument.
7480         [DEBUGGING] (dump_var_tree) Replaced avlwalk() with
7481         avl_walk_inorder().
7482         (clear_variable) Only dumps the var tree if var_by_name non-NULL.
7483         [DEBUGGING] Only deletes the variable from var_by_name if that var
7484         non-NULL.
7485
7486 Fri Apr 18 16:48:41 1997  Ben Pfaff  <blp@gnu.org>
7487
7488         * Makefile.am: Added include files to SOURCES.  Added
7489         frequencies.q to EXTRA_DIST.  Removed include/ from INCLUDES.  Now
7490         includes rules for q2c.  Added `boast' target.
7491
7492 Fri Apr 18 15:42:22 1997  Ben Pfaff  <blp@gnu.org>
7493
7494         * Makefile.am: Maintainer-clean Makefile.in.
7495         
7496         * Makefile.am: Fixed redundant EXTRA_DIST line.
7497
7498         * ascii.c: Comment fixes.
7499         (ascii_line_vert) Fixed overly aggressive range check.
7500
7501         * display.c: Removed dead code.
7502
7503         * list.q: Turn debugging on.
7504         (flush_table) New debug code.
7505
7506         * sfm-read.c: (read_value_labels) malloc's the structure before
7507         trying to assign to its members.
7508
7509         * sfm-write.c: Comment fix.
7510
7511         * som-high.c: (som_submit_table) Sets som.t and som.d on each call
7512         to output_table().
7513         (output_table) No arguments anymore--gets them through `som'
7514         global.  New debug code.  In crushed tables, now sets `htv' as
7515         well as `hv' to avoid bad confusion later.
7516         (dump_crush_page) New debug code.
7517
7518         * som-low.c: (som_dump_crush_page) New debug code.
7519
7520 Thu Mar 27 01:11:29 1997  Ben Pfaff  <blp@gnu.org>
7521
7522         All source files: Broke long lines into multiple lines.
7523         
7524         * ascii.c: (ascii_close_page) Uses host_system var in place of
7525         HOST_SYSTEM constant.
7526
7527         * cmdline.c: (var syntax_message[]) Broke into
7528         pre_syntax_message[] and post_syntax_message[].
7529         (usage) Outputs both parts, separated by driver list.
7530
7531         * error.h: Fixed broken formatting.
7532
7533         * expr-opt.c: (str_search, str_rsearch) New functions.
7534
7535         * misc.c: (blp_getdelim) Removed.  All references changed to
7536         `getdelim'.
7537         (str_search, str_rsearch) Removed.
7538         (memrmem) New function.
7539
7540         * misc.h: (blp_getline) Removed.  All reference changed to
7541         `getline'.
7542
7543         * stat.h: New file.
7544
7545         * filename.c: Includes "stat.h", not <sys/stat.h>.
7546         (blp_getenv) Uses host_system var instead of HOST_SYSTEM constant.
7547
7548         * output.c: (outp_list_classes) Changed output formatting.
7549
7550         * sfm-write.c: (write_header) Uses host_system var instead of
7551         HOST_SYSTEM constant.
7552         (write_rec_7_34) Extracts version numbers from the version string.
7553         Untested.
7554
7555         * sort.c: Includes "stat.h", not <sys/stat.h>.
7556
7557         * str.c: (strcasecmp) Removed.
7558
7559         * title.c: (cmd_document) Uses host_system var instead of
7560         HOST_SYSTEM constant.
7561
7562         * version.c: Generated on-the-fly by the Makefile instead of being
7563         static.
7564
7565         * str.h: Comment fixes.  Doesn't substitute for missing memmove or
7566         memcpy.
7567         [!HAVE_STRNCASECMP] Declares strncasecmp().
7568
7569         * version.h: Removed stray character.  Comment fixes.
7570         (vars host_system, build_system) New vars.
7571
7572 Mon Mar 24 21:47:31 1997  Ben Pfaff  <blp@gnu.org>
7573
7574         * Most source files: Changed formatting of copyright notice; fixed
7575         FSF address; reformatted to better conform to GNU standards;
7576         comment fixes.  Added markups to prevent GNU indent from messing
7577         up my beautiful formatting :-).
7578         
7579         * q2c.c: (get_line) Ignores lines that begin with `/* *INDENT' so
7580         that GNU indent markups can be passed through without problems.
7581
7582 Wed Feb 19 21:30:31 1997  Ben Pfaff  <blp@gnu.org>
7583
7584         * get.c: Turned off debugging.
7585
7586         * glob.c: (init_glob) Turned on save-file compression by default.
7587
7588         * sfm-write.c: (sfm_write_case) Fixed bug which resulted in less
7589         compression than was possible in save files.
7590
7591 Sun Feb 16 20:57:20 1997  Ben Pfaff  <blp@gnu.org>
7592
7593         * data-out.c: (convert_F) Comment fixes.  Debug message fixes.
7594
7595         * frequencies.q: Removed Fiasco extensions.  Updated calculation
7596         algorithms.  Polished output format. 
7597         (struct frq_info_struct) Removed members `max_degree', `min_n',
7598         all references removed.
7599         (macro frq_extensions) Removed.
7600         (static vars min_n, max_degree) Removed, all references removed.
7601         (internal_cmd_frequencies) Doesn't handle extensions.  Doesn't
7602         calculate `min_n', `max_degree'.
7603         (postcalc) Passes new arg to dump_statistics().
7604         (dump_full) Honor NOLABEL option.  Buggy?  Adds variable name
7605         title.
7606         (dump_condensed) Adds variable name title.
7607         (sum_freqs) Removed.
7608         (calc_stats) Updated calculation algorithm.
7609         (dump_statistics) Removed warning for too-few observations.
7610         Changed table formatting.  Adds variable name title if passed new
7611         arg is nonzero.
7612
7613         * output.h: Comment fix.
7614
7615         * recode.c, sample.c, sort.c: Disabled debug code.
7616
7617         * som-frnt.c: (som_set_value, som_set_float, som_set_text)
7618         Improved debug code.
7619
7620         * var.h: (enum series frq_*) Removed Fiasco extensions.
7621
7622 Sat Feb 15 21:26:53 1997  Ben Pfaff  <blp@gnu.org>
7623
7624         * command.c: Added PROCESS IF to command table.
7625
7626         * Lots & lots of places, removed checks for NULLs preceding calls
7627         to free_expression(), which itself checks.
7628
7629         * descript.q: Removed Fiasco extensions.  Removed optimizations
7630         for non-weighted active files.  Implemented some options.
7631         Finished polishing output format.  Comment fixes.  Merged
7632         `descript.g'.
7633         (static vars n_glob_miss_list, n_glob_valid, n_glob_missing,
7634         max_degree, min_n) Removed.
7635         (macro dsc_extensions) Removed.
7636         (struct dsc_info_struct) Removed `min_n' member, all references
7637         fixed.
7638         (internal_cmd_descriptives) Removed calculation of min_n,
7639         max_degree.  Only deals with one `calc' routine instead of two
7640         flavors.
7641         (precalc) Eliminated redundancy.  Updated for changes to
7642         descriptives_proc structure.
7643         (calc) Moved here from `descript.g'.  Rewritten to calculate
7644         statistics via `moments about the mean' rather than by summing,
7645         summing squares, summing cubes, and so on.
7646         (postcalc) Rewritten for new-style statistical calculation.
7647         (display) Removed support for displaying variables across rows.
7648         No longer crushes the descriptives table.  Removed ancient code.
7649         Added display of N, by variable and listwise.
7650
7651         * descript.g: Removed; merged into `descript.q'.
7652
7653         * expr-evl.c: (evaluate_expression) Now returns a double.  For
7654         numeric results, it returns the result as well as storing it in
7655         the passed `value' structure if non-NULL.  For string results it
7656         just returns 0.0 and it must be passed non-NULL.  Many references
7657         to this function were optimized by use of this change, especially
7658         but not exclusively in `compute.c'.
7659
7660         * frequencies.g: Comment fix.
7661
7662         * glob.c: (glob var process_if_expr) New global var.
7663
7664         * postscript.c: (static var option_tab[]) Corrected entry for
7665         `fixed_size'.
7666         (postopen) Sets x->size to x->prop_size.
7667         (ps_text_set_font_by_name) Sets font size as well as typeface for
7668         PROP and FIXED fonts.
7669         
7670         * sel-if.c: (cmd_process_if) New function.
7671
7672         * sfm-write.c: (struct sfm_fhuser_ext) New member `n_cases'.
7673         (sfm_write_dictionary) Sets `n_cases' to 0.
7674         (sfm_write_case) Increments `n_cases'.
7675         (sfm_close) Attempts to seek the system file back to the header
7676         and write the number of cases in its proper slot.
7677
7678         * som-frnt.c: (som_insert_table) Masks off expansion options since
7679         only SOPT_X_NORM seems to work sensibly.
7680
7681         * som-low.c: (get_cell_size) Fixed bug when a table cell was sized
7682         with a `fixed' value of 2.
7683
7684         * sort.c: (cmd_sort_cases) Cancels PROCESS IF.
7685
7686         * sysfile-info.c: (cmd_sysfile_info) Doesn't display more than 10
7687         value labels; uses SOPT_NONE instead of SOPT_X_BOTH.
7688
7689         * var.h: (enum series dsc_*) Removed Fiasco extensions.
7690         (struct descriptives_proc) Removed `miss_noweight'; new members
7691         `X_bar', `M2', `M3', `M4', `min', `max'.
7692
7693         * vars-atr.c: (discard_variables) Cancels PROCESS IF.
7694
7695         * vfm.c: (close_active_file) Cancels PROCESS IF.
7696         (write_case) Doesn't process cases unselected by PROCESS IF.
7697
7698 Fri Feb 14 23:32:58 1997  Ben Pfaff  <blp@gnu.org>
7699
7700         * glob.c: (glob var err) Removed.
7701
7702         * sysfile-info.c: (cmd_sysfile_info) When adjusting table size,
7703         doesn't have to take into account number of value labels since
7704         they're in a subtable anyway.  Also, doesn't display more than 10
7705         value labels since we can't yet break pages in subtables.
7706
7707 Tue Feb  4 15:15:50 1997  Ben Pfaff  <blp@gnu.org>
7708
7709         * som-frnt.c: (som_change_table_size) Simple change for elegance
7710         that shouldn't change behavior.
7711         (som_set_value) Comment fix.
7712
7713         * som-high.c: (som_submit_table) Message fix.
7714
7715 Wed Jan 22 21:54:00 1997  Ben Pfaff  <blp@gnu.org>
7716
7717         * command.c: Added SYSFILE INFO to command table.
7718
7719         * file-handle.q: (fh_handle_filename) New function.
7720
7721         * get.c: (save_trns_proc) Fixed a bug in padding of output data
7722         with spaces.
7723
7724         * main.c: (parse) New return value for command functions, -3.
7725
7726         * misc.h: Comment fix.
7727
7728         * output.h: Comment fixes.
7729         (macro COMPONENTS) Removed.
7730
7731         * postscript.c: (write_text) Modified literal_chars[] so that `('
7732         and ')' are not written to the output in strings as literals.
7733
7734         * sfm-read.c: (sfm_read_dictionary) New argument.
7735         (read_header) New argument.  Sets the information structure's
7736         values from the header information.  
7737         (read_variables) [__CHECKER__] Redefines isalnum()--some sort of
7738         bizarre Checker problem, I guess.
7739         (read_variables) Proper cleanup on lossage.
7740
7741         * sfm.h: (struct sfm_read_info) New struct for use by
7742         sfm_read_dictionary().
7743
7744         * som-frnt.c: (som_create_table) New argument CREATE_FLAGS,
7745         currently used just for tables that can be dynamically resized and
7746         thus have to be allocated with arena_malloc() instead of
7747         arena_alloc().  All references changed.
7748         (som_change_table_size) New function.
7749         (som_insert_table) Bugfix: now inserts `cell', not `c'!
7750
7751         * som-high.c: [GLOBAL_DEBUGGING] (check_table) Moved to som-low.c.
7752         (som_submit_table) [GLOBAL_DEBUGGING] Doesn't call check_table()
7753         any more.
7754
7755         * som-low.c: (draw_cell) Calls draw_table_cell() for SCON_TABLE
7756         cells.
7757         (draw_intersection) Now takes an argument specifying the table in
7758         question.  All references changed.
7759         (draw_table_cell) New function.
7760         (som_get_table_size) [GLOBAL_DEBUGGING] Calls check_table().
7761         (som_get_table_size) Many nice new explanatory comments.
7762         [GLOBAL_DEBUGGING] (check_table) Moved here from som-high.c.
7763
7764         * som.h: New enum series SOM_CREATE_* for use as create flags with
7765         som_create_table().
7766
7767         * str.h: Moved a comment here from TODO.
7768
7769         * sysfile-info.c: New file.  Reference implementation.
7770
7771 Sun Jan 19 14:22:11 1997  Ben Pfaff  <blp@gnu.org>
7772
7773         * command.c: Added RENAME VARIABLES to table of commands.
7774
7775         * data-in.c: (dls_error) Sets `cust_field'.
7776         (parse_N) Message fix.
7777         (parse_day_count) New function.
7778         (to_roman) Never outputs VX as a `short form' of V.
7779         (parse_month) Fixed parsing of Roman numerals.
7780         (parse_trailer) Message fix.
7781         (parse_DATE, parse_ADATE, parse_EDATE, parse_SDATE, parse_JDATE,
7782         parse_QYR, parse_MOYR, parse_WKYR, parse_DTIME) Issue a message if
7783         the date is invalid.
7784         (parse_SDATE) Fixed swapped day, year.
7785         (parse_JDATE) Fixed bug for dates in 1582.
7786         (parse_DTIME) Allows days not between 1 and 31.
7787         (parse_numeric) Makes local copy of f.type for easier usage.
7788         FMT_DOLLAR fixed.
7789
7790         * data-out.c: (convert_F) When outputting as scientific, properly
7791         sets f.type as fp->type.
7792         (insert_commas) Fixed operator precedence problem with setting of
7793         nitems.  Changed strcpy to memcpy (no null terminator). 
7794         (convert_date) Fixed FMT_JDATE: added 1900 to year.
7795         (convert_CCx) Essentially rewritten, but now it works.
7796
7797         * display.c: (cmd_display) Added DISPLAY FILE LABEL (undocumented
7798         feature of Fiasco).
7799         (display_documents) Implemented.
7800
7801         * error.c: (glob var cust_field) New var.
7802         (vmsg) Displays cust_field as part of message classes DE and DW.
7803
7804         * formats.c: (debug_print) Fixed to compile under updated
7805         dictionary format.
7806
7807         * get.c: (cmd_get, cmd_save_internal) Close file handle on
7808         failure.
7809
7810         * misc.c: (parse_format_specifier) Formatting fix.
7811
7812         * modify-vars.c: (struct var_modification) Renamed `n_reorder' as
7813         `n_rename' for clarity.
7814         (cmd_modify_vars) Initializes `forward' and `positional' at
7815         appropriate times.  Frees lists of vars to rename on failure.
7816         Comment fix.  Frees memory on success.  
7817         (rearrange_dict) Simplified `for' loop condition.
7818
7819         * rename-vars.c: New file (reference implementation).
7820         
7821         * set.q: (internal_cmd_set) Fixed `emu' test condition.
7822
7823         * sfm-read.c: (read_header) File label is created only if file
7824         label in file is not blank.
7825         (read_variables) Initializes `dict' local variable.
7826         (read_documents) Proper behavior on lossage.
7827
7828         * sfm-write.c: (write_header) Doesn't blank out the file label
7829         (why was this here to begin with?!)
7830
7831         * temporary.c: (save_dictionary) File label is copied only if
7832         non-NULL.  Doesn't try to xstrdup() dictionary documents.
7833         Adapted so as to not irritate Checker.
7834         (free_dictionary) Only destroys var_by_name if non-NULL.
7835
7836         * title.c: (cmd_file_label) Doesn't skip FILE, LABEL tokens.
7837         (cmd_document) Doesn't skip DOCUMENT token.  Adds some header
7838         lines to the document, indents the document.  Also, it works now.
7839         (add_document_line) New function.
7840
7841         * var.h: (struct dictionary) Reordering.
7842
7843         * vars-prs.c: (parse_variables) On lossage, only local_free()'s
7844         bits if it was allocated to begin with.
7845
7846 Thu Jan 16 13:08:57 1997  Ben Pfaff  <blp@gnu.org>
7847
7848         * command.c: Added MODIFY VARS to list of commands.
7849
7850         * configure.in: Updated custom macros for autoconf 2.12.  Removed
7851         mmap reference; fixed termcap library reference.
7852
7853         * display.c: (display_variables) Fixed a few bugs although it's
7854         still not well written.
7855
7856         * error.c: [!__CHECKER__] (chkr_disp_call_chain) New function.
7857         (induce_segfault) Calls chkr_disp_call_chain() instead of
7858         inducing an actual SIGSEGV.
7859
7860         * expr-opt.c: (evaluate_tree) Swapped order of arguments to
7861         str_search() and str_rsearch().  Fixed tests for matches on
7862         OP_INDEX and OP_RINDEX.
7863
7864         * filename.c: (good_getcwd) Removed as the new libc for Checker
7865         doesn't contain this bug, apparently.
7866
7867         * misc.c: (str_search, str_rsearch) Changed order of arguments for
7868         consistency with GNU memmem.
7869         (blp_getdelim) Changed `len' from `int' to `size_t'.
7870
7871         * modify-vars.c: Reference implementation.
7872
7873         * som-frnt.c: (zero_length) New global var.
7874         (som_create_table) Message fix.
7875
7876         * som.h: Added gcc attributions to som_set_text(),
7877         som_output_text() prototypes.  blank_line() refers to
7878         zero_length[] instead of a literal null string to suppress gcc
7879         warnings.
7880
7881         * sort.c: (do_external_sort) Fixed fencepost error on lossage.
7882         (allocate_cases) Decrements x_max so the last element of x[] can
7883         be used by the algorithm.
7884
7885         * var.h: Changed minor details of `variable' declaration.  
7886         (struct modify_vars_proc) New struct.
7887         (struct variable) Added field p.mfv.
7888
7889         * vars-atr.c: Comment fix.
7890
7891         * vars-prs.c: (fill_all_vars) More optimal implementation.
7892
7893         * vfm.c: (dump_splits) Sets the last byte of temp_buf to a null
7894         character, which it shouldn't have to do but printf() seems to
7895         read the null byte even though I supply a maximum length...
7896
7897 Fri Jan 10 20:22:08 1997  Ben Pfaff  <blp@gnu.org>
7898
7899         * command.c: Removed command alias X for QUIT.
7900         (parse_cmd) Fixed comment parsing.
7901
7902         * dfm.c: (struct dfm_fhuser_ext) Fields `len', `size' are now of
7903         type size_t.
7904         (read_record) Fixed references to len, size.
7905         (dfm_get_record) Restructured.
7906
7907         * file-handle.h: (struct file_handle) Field `lrecl' now of type
7908         size_t.
7909
7910         * file-handle.q: (internal_cmd_file_handle) Checks for nonpositive
7911         record length.
7912
7913         * modify-vars.c: New file.  Not complete.
7914         
7915         * set.q: (set_ccx) Fixed operator precedence problem regarding ^
7916         and ==.
7917
7918         * sfm-read.c: (bswap_flt64, read_header, write_variable) Fixed
7919         problems caused by int/size_t differences.
7920
7921         * sort.c: (output_record, merge_once) Cast `size_t's to `int's in
7922         appropriate spots.
7923
7924         * str.c: (strcasecmp) Fixed bug that cropped up when the strings
7925         being compared were of equal length.
7926
7927 Thu Jan  2 19:08:23 1997  Ben Pfaff  <blp@gnu.org>
7928
7929         * command.c: Added DOCUMENT, DROP DOCUMENTS, FILE LABEL.
7930
7931         * lexer.c: (get_dotted_rest_of_line) New function.
7932
7933         * sel-if.c: (cmd_filter) Cannot choose string or scratch variables
7934         as filters.
7935
7936         * sfm-read.c: (sfm_read_dictionary) Calls read_documents() to read
7937         type 6 records.  Frees the dictionary properly.
7938         (read_header) Initializes the dictionary instead of letting
7939         read_variables() do it.  Sets the dictionary file label from the
7940         system file.
7941         (read_documents) New function.
7942
7943         * sfm-write.c: (sfm_write_dictionary) Calls write_documents() to
7944         write type 6 record if appropriate.
7945         (write_header) Writes file label from dictionary.
7946         (write_documents) New function.
7947
7948         * temporary.c: (save_dictionary, restore_dictionary,
7949         free_dictionary) Properly handle new fields in dictionary struct.
7950
7951         * title.c: (get_title) Returns after failure().
7952         (cmd_file_label, cmd_document, cmd_drop_documents) New functions
7953         for new commands FILE LABEL, DOCUMENT, DROP DOCUMENTS.  Untested.
7954
7955         * var.h: (struct dictionary) New fields `label', `n_documents',
7956         `documents'.
7957
7958 Wed Jan  1 22:08:10 1997  Ben Pfaff  <blp@gnu.org>
7959
7960         * command.c: Added FILTER to list of commands.
7961
7962         * frequencies.g: [WEIGHTING] Removed test for weighting!=-1 since
7963         it's always true.
7964
7965         * get.c: (cmd_save_internal) Removed weighting code since it's now
7966         handled by sfm-write.c.  Properly commented out debug code.
7967
7968         * glob.c: (glob var weighting) Removed.
7969
7970         * sel-if.c: Comment fixes.
7971         (cmd_filter) New function.
7972
7973         * sfm-read.c: (struct sfm_fhuser_ext) New field `weight_index'.
7974         (sfm_read_dictionary) Sets weighting variable direct in the
7975         created dictionary now.  (Apparently we previously didn't support
7976         weighting on GET?)
7977         (read_header) Sets weight_index field in sfm_fhuser_ext from
7978         header read from disk.
7979
7980         * sfm-write.c: (sfm_write_dictionary) Comment fix.
7981         (write_header) Now sets the weighting in the header from the
7982         passed primary dictionary instead of from the sfm_write_info.
7983
7984         * sfm.h: (struct sfm_write_info) Removed field `weight'.
7985
7986         * som-high.c: (dump_crush_table) Fixed a couple of assertions that
7987         broke on boundary conditions.
7988
7989         * var.h: (struct dictionary) New fields `weight_var',
7990         `weight_index', and `filter_var'.
7991         (glob var weighting) Removed.  This is now part of struct
7992         dictionary.  All references changed; the less mechanical changes
7993         are described above.
7994
7995         * vars-atr.c: (find_dict_variable) New function.
7996
7997         * vfm.c: (static var filter_index) New variable.
7998         (open_active_file) Initializes filter_index from default_dict.
7999         (write_case) Calls proc_func() only if the filter variable is
8000         nonzero; this implements FILTER behavior.
8001
8002         * weight.c: (static var weight_varname) Removed.
8003         (cmd_weight) Modified default_dict instead of glob vars.
8004         (update_weighting) Changed the signature to modify a dictionary
8005         instead of glob vars.  Now returns the weighting variable.
8006         (get_weighting_variable) Removed; its function is absorbed by
8007         update_weighting().
8008         (stop_weighting) Operates on a dictionary now.
8009
8010 Wed Jan  1 17:00:59 1997  Ben Pfaff  <blp@gnu.org>
8011
8012         * sort.c: Removed debugging info from messages.
8013         (do_external_sort) Cleans up after itself by deleting the
8014         temporary directory on failure.  (On success it is deleted by the
8015         input program.)
8016         (allocate_cases) Removed debug code.  Added clean up code.
8017         (output_record) Removed debug code.
8018         (merge) Added code to close all the input files that are currently
8019         open.  This is a likely location for bugs, because I'm not sure
8020         about boundary conditions.  Removed an unnecesary heap_delete().
8021         (merge_once) Removed input file "optimization" that in fact
8022         screwed up the rest of the code.  Message and comment fixes.
8023
8024 Sun Dec 29 21:36:48 1996  Ben Pfaff  <blp@gnu.org>
8025
8026         * error.c: [__CHECKER__] (induce_segfault) Flushes output streams.
8027
8028         * heap.c: (heap_delete) New argument.
8029
8030         * sort.c: Finished implementation of external sort.
8031
8032         * vfm.c: (read_from_disk) Returns after a disk error.
8033
8034 Sun Dec 22 23:10:39 1996  Ben Pfaff  <blp@gnu.org>
8035
8036         * sort.c: (static var state) Removed.
8037         (static vars max_handles, tmp_basename, tmp_extname,
8038         huffman_queue) New variables.
8039         (do_external_sort) Moved most code to new functions.
8040         Creates huffman_queue.
8041         (allocate_file_handles, allocate_cases) New functions.
8042         (static vars run_no, run_length, file_index, case_count) New
8043         variables. 
8044         (output_record) Returns success.  Now really writes to the output
8045         file.
8046         (begin_run, end_run) New functions.
8047         (write_initial_runs) Returns success.  Initializes run_no to -1.
8048         Calls begin_run(), end_run() at appropriate times.  Outputs debug
8049         messages.
8050         (write_to_sort_cases) Calls begin_run(), end_run() at appropriate
8051         times.
8052         (merge) New function.
8053
8054         * heap.c, heap.h: New files.  Hopefully in near-final form.
8055
8056 Sat Dec 21 21:51:04 1996  Ben Pfaff  <blp@gnu.org>
8057
8058         * glob.c: Added write_active_file to global vars.
8059
8060         * sort.c: Several new miscellaneous static variables.
8061         (cmd_sort_cases) Big comment fix.
8062         (perform_case_2) Renamed `do_external_sort' and completely
8063         rewritten.
8064         (case_2_proc_func) Removed.
8065         (output_record, write_initial_runs, write_to_sort_cases,
8066         compare_record) New functions.
8067
8068         * vfm.c: [DEBUGGING] (index_to_varname) Excised bit rot.
8069
8070 Tue Dec 17 18:57:59 1996  Ben Pfaff  <blp@gnu.org>
8071
8072         * sort.c: (perform_case_2) Changed the method for allocation of
8073         lots of memory--now allocates one case at a time in hopes that
8074         more cases can be allocated with heavily fragmented memory.
8075
8076         * var.h: (write_active_file) New global var.
8077
8078         * vfm.c: (procedure, close_active_file, write_case,
8079         SPLIT_FILE_procfunc) Now allow beginfunc, procfunc, and endfunc
8080         arguments to procedure() to be NULL.  All references to
8081         procedure() that made use of dummy functions were changed to NULL
8082         functions.
8083         (open_active_file) If write_active_file is non-NULL, the output
8084         device becomes DEV_PGM (a new enum).
8085         (close_active_file) Sets write_active_file to NULL.
8086         (read_from_memory) Comment fix.
8087         (record_case) Calls write_active_file() when the output device is
8088         DEV_PGM.
8089
8090 Sun Dec 15 15:32:16 1996  Ben Pfaff  <blp@gnu.org>
8091
8092         * sort.c: New file.
8093
8094         * autorecode.c: (cmd_autorecode) Fixed parsing of options.
8095         Fixed checking for duplicate varnames.
8096         (recode) xmalloc()'s the transformation instead of arena_alloc()'ing
8097         it.
8098         (autorecode_trns_free) Destroys hash tables for each recoding
8099         specification.
8100         (autorecode_proc_func) Compares NULL to *vpp instead of vpp.
8101
8102         * command.c: Added SORT CASES to cmd_table.
8103         (null_func, null_int_func) Prototyped.
8104
8105         * descript.g: (calc_weight, calc_noweight) Computes own case
8106         number now.
8107         
8108         * frequencies.q: (dump_statistics) Fixed problem with
8109         too-few-cases warning message.
8110
8111         * get.c: (cmd_save_internal) Handles weighting properly.
8112
8113         * hash.c: (hsh_dump) Output format changed.
8114         (force_hsh_insert) Actually works now, prototype changed.
8115
8116         * list.q: (static var case_num) New variable.
8117         (cmd_list) Initializes case_num.
8118         (list_cases) Increments case_num.
8119
8120         * var.h: Added definitions for SORT CASES.  Comment fixes.
8121
8122         * vfm.c: Some definitions moved to new file vfmP.h.  Comment
8123         fixes.  `active' renamed vfm_active, `rep' renamed
8124         vfm_replacement, all references changed.
8125         (procedure) The procfunc no longer receives a case number.  All
8126         references changed.
8127         (write_case) Subtle reordering.
8128         (SPLIT_FILE_procfunc) Counts cases differently.  Slightly less
8129         redundant.
8130
8131         * weight.c: (get_weighting_variable) New function.
8132
8133         * vfmP.h: New file with definitions from vfm.c.
8134
8135 Sat Dec 14 10:35:30 1996  Ben Pfaff  <blp@gnu.org>
8136
8137         * command.c: (FILE_TYPE_okay) Commented out some tests because
8138         they're clumsy and not yet needed.
8139
8140         * var.h: Most *_trns structures moved to their respective source
8141         files.  Some were moved into a new file, do-ifP.h.  Comment fixes.
8142         (union any_trns) Changed to a typedef for trns_header.
8143         (struct input_program_pgm) Removed.
8144
8145         * vars-prs.c: (parse_variables) Only local_free()'s bits if it
8146         was allocated in the first place.
8147
8148 Fri Dec 13 21:30:53 1996  Ben Pfaff  <blp@gnu.org>
8149
8150         * autorecode.c: New file.
8151         
8152         * command.c: Added AUTORECODE to command table; re-enabled SET.
8153
8154         * data-out.c: (convert_F) Handles infinities and NaNs properly.
8155
8156         * error.c: (vmsg) Comment fixes.
8157
8158         * hash.c: Comment fix.
8159         (hashpjw_d) New function.
8160         (hashpjw) Reimplemented as call to more general function
8161         hashpjw_d().
8162         (internal_comparison_fn) Initializes pointers properly.
8163         (hsh_sort) [GLOBAL_DEBUGGING] New debugging code.
8164         (force_hsh_insert, force_hsh_find) New debugging wrapper
8165         functions.
8166
8167         * main.c: (main) Message fix.
8168
8169         * output.c: (outp_read_devices) Message fix.
8170
8171         * set.q: Comment fixes.
8172         (custom_results) Implemented Wnd/X form of subcommand.
8173         (set_routing) New function.
8174         (internal_cmd_set) Implemented ERRORS, MESSAGES.
8175
8176         * settings.h: (SET_ROUTE_*) New enum series.
8177         (set_results) Renamed set_results_file, all references changed.
8178         (set_messages) Removed.
8179         (glob vars set_errors, set_messages, set_results) New vars.
8180
8181         * title.c: (get_title) Remembers to xstrdup() the result of
8182         get_rest_of_line().
8183
8184         * var.h: (arc_item, arc_spec, autorecode_trns) New structures for
8185         use by AUTORECODE.
8186         (union any_trns) New element `arc'.
8187
8188 Fri Dec  6 23:53:47 1996  Ben Pfaff  <blp@gnu.org>
8189
8190         * command.c: (output_line) Removed references to set_screen.
8191
8192         * error.c: (static var terminating) New var.
8193         (hcf) Sets terminating to 1.
8194         (vmsg) If terminating is nonzero, does not attempt to call hcf().
8195         This prevents an infinite loop if an error occurs within hcf().
8196
8197         * expr-evl.c: (evaluate_expression) [__CHECKER__] Replaced case
8198         statement circumlocution with `case 42000' trick.
8199         (evaluate_expression) New support for OP_STR_MIS.
8200
8201         * expr-opt.c: (evaluate_expression) [__CHECKER__] Replaced case
8202         statement circumlocution with `case 42000' trick.
8203         (dump_node) Handles OP_STR_MIS.
8204
8205         * expr-prs.c: (MISSING_func, SYSMIS_func) Rewrote to handle string
8206         variables exceptions.
8207         (parse_function) Message fix.
8208         (ops[]) Added OP_STR_MIS.
8209
8210         * expr.h: Added OP_STR_MIS to OP_* enum.  Comment fixes.
8211
8212         * exprP.h: [__CHECKER__] Removed case statement circumlocution.
8213
8214         * glob.c: Removed set_scrnfile glob var.
8215         (init_glob) set_errorbreak set to 0 by default.
8216
8217         * groff-font.c: Changed included files.
8218         (groff_read_font) Initializes font_arena local var correctly.
8219         (default_font) New function.
8220
8221         * output.c: Comment fixes.
8222         (glob var disabled_devices) New variable.
8223         [GLOBAL_DEBUGGING] (static var iterating_driver_list) New
8224         variable.
8225         [GLOBAL_DEBUGGING] (reentrancy) New function.
8226         [GLOBAL_DEBUGGING] (outp_read_devices, outp_done, find_driver,
8227         outp_iterate_enabled_drivers) Calls to reentrancy().
8228         (destroy_list) New function.
8229         (outp_done) Moved code to destroy_list().
8230         (parse_options) Parses `listing', `screen', `printer' options
8231         internally.
8232         (configure_driver) Sets new `device' member of driver.
8233         (outp_iterate_enabled_drivers, outp_enable_device) New functions.
8234
8235         * output.h: Comment fixes.  New enum series OUTP_DEV_*.
8236         (struct outp_driver_struct) New member `device'.
8237
8238         * postscript.c: (find_encoding_file) Doesn't display its own error
8239         messages.
8240         (default_encoding) New function.
8241         (switch_font) Calls default_encoding() if no encoding can be
8242         found.
8243         (text) Makes up a character metric if none exists for the desired
8244         character.
8245         (load_font) Properly copies a fallback filename.  Calls
8246         default_font() for a font if none at all are known.
8247
8248         * set.q: Comment fixes.  Removed OUTPUT subcommand.
8249         (custom_listing) Calls outp_enable_device() to enable/disable
8250         listing device.
8251         (turn_screen_on) Removed.
8252         (internal_cmd_set) Calls outp_enable_device() to enable/disable
8253         screen, printer devices.
8254
8255         * settings.h: Comment fixes.
8256         (glob vars set_output, set_printer, set_screen, set_scrnfile)
8257         Removed.
8258
8259         * som-high.c: (som_submit_table, som_eject_page) Use
8260         outp_iterate_enabled_drivers() instead of iterating
8261         outp_driver_list directly.
8262
8263 Wed Dec  4 21:34:17 1996  Ben Pfaff  <blp@gnu.org>
8264
8265         * data-in.c: (parse_EDATE, parse_SDATE) New functions.
8266         (parse_string_as_format) Handles new formats.
8267         (parse_numeric) Now handles DOT and PCT formats.
8268
8269         * data-out.c: (convert_E, convert_F, insert_commas) Handle DOT
8270         format now.
8271         (convert_date) Handle EDATE and SDATE formats.
8272         (convert_CCx) Now if there's not room for the currency characters,
8273         converts it as F format if it's positive instead of giving up
8274         quickly.  Also fixed save-and-restore bug with decimal point
8275         characters.  
8276         (convert_format_to_string) Handles new formats.
8277
8278         * misc.c: (formats[]) Added new formats.
8279         (convert_fmt_ItoO) Supports new formats.
8280
8281         * sfm-read.c: (parse_format_spec) Supports new formats.  Better
8282         data checking.  New argument, all references changed.
8283
8284         * sfm-write.c: (write_format_spec) Supports new formats.
8285
8286         * var.h: New formats FMT_DOT, FMT_PCT, FMT_EDATE, FMT_SDATE.
8287         Comment fixes.
8288
8289 Sun Dec  1 17:19:00 1996  Ben Pfaff  <blp@gnu.org>
8290
8291         * cmdline.c: Comment fixes.
8292         (parse_command_line) Changed return type to void.
8293
8294         * data-in.c: (parse_string_as_format) Added FMT_CCA...FMT_CCE to
8295         switch.
8296         (parse_numeric) Handles international numbers (comma as decimal
8297         point).  Some reformatting.
8298
8299         * data-list.c: (parse_free) Default output format is now
8300         set_format instead of hard-coded F8.2.
8301         (read_from_data_list_list) Emits error message on undefined data
8302         only if set_undefined is nonzero.
8303
8304         * data-out.c: (convert_E) Changes decimal point from period to
8305         comma if appropriate.  Restructured.  Better comments.
8306         (convert_F) Changes decimal point from period to comma if
8307         appropriate.
8308         (insert_commas) Major bug with handling of negative values fixed.
8309         Also, inserts periods instead of commas if appropriate.
8310         (convert_CCx) New function.
8311         (convert_format_to_string) Added FMT_CCA...FMT_CCE to switch.
8312         (num_to_string) Changed `.' to set_decimal.
8313
8314         * dfm.c: Comment fixes.
8315         (dfm_close) Frees ext->line even in inline_file.
8316         (open_inline_file) New function.
8317         (open_file_r) When opening the inline file: now properly
8318         recognizes `BEGIN DATA.' line, and calls open_inline_file() to
8319         finish up.
8320         (read_record) Calls fh_close_handle() instead of dfm_close() to
8321         close the inline file.  Makes a copy of the line getl_buf to avoid
8322         interlock problems.
8323         (dfm_get_record) Restructured.  Now checks the return value of
8324         open_file_r().
8325         (cmd_begin_data) Moved open code into open_inline_file().  Relaxed
8326         checking for use of inline file.  No longer tries to close inline
8327         file.
8328
8329         * error.c: (glob var error_already_flagged) New var.
8330         (vmsg) Message change.  Now checks max number of errors/warnings,
8331         acts on it.
8332
8333         * file-handle.q: (fh_handle_name) Now allows closing of
8334         inline_file.
8335         (fh_init_files) Reformatted.
8336
8337         * get.c: (trim_dictionary) Checks SCOMP option instead of COMP.
8338
8339         * getline.c: (getl_include) Fixed bug that popped up when called
8340         when file queue was empty.
8341         (read_console) Resets error_count, warning_count,
8342         error_already_flagged to zero.
8343
8344         * glob.c: Many changes to update list of variables.
8345         (init_compat_dependent) Now this function is called whenever
8346         `compat' changes.  It now sets set_seed only if it hasn't
8347         previously been referenced.  It now calls
8348         lex_init_compat_dependent().
8349
8350         * include.c: (cmd_include_at) Frees temporary buffer instead of
8351         line buffer.  
8352         (cmd_include) Doesn't make copy of include file name.
8353
8354         * lexer.c: Comment fixes.
8355         (init_lex) Moved some code into new function
8356         lex_init_compat_dependent().
8357         (lex_init_compat_dependent) New function.
8358         (hex_val) Simplified.
8359         (preprocess_line) Uses set_endcmd instead of hardcoding `.'.
8360
8361         * main.c: Comment fixes.
8362         (main) Reformatted.
8363
8364         * misc.c: (formats[]) Added FMT_CCA...FMT_CCE.
8365         (check_input_specifier) Disallows FMT_CCA...FMT_CCE.
8366         (convert_fmt_ItoO) Detects FMT_CCA...FMT_CCE.
8367         (setup_randomize) Sets set_seed_used.
8368
8369         * set.q: Comment fixes.
8370         (custom_results) Conditionalizes on `compat'.
8371         (custom_log) Calls custom_journal().
8372         (set_ccx) New function.
8373         (cmd_set) Calls init_compat_dependent() when `compat' changes.
8374         Calls set_ccx() to handle CCA...CCE.  Sets set_grouping
8375         when set_decimal changes.  Range-checks values for MITERATE,
8376         MNEST.  Message fixes.
8377
8378         * settings.h: Comment fixes.
8379         (struct set_cust_currency) New struct.
8380         (set_cc[], set_grouping, set_seed_used) New global vars.
8381
8382         * var.h: (FMT_CCA...FMT_CCE) New output formats.
8383         (FCAT_OUTPUT_ONLY) New FCAT_* constant.
8384
8385 Thu Nov 28 23:14:07 1996  Ben Pfaff  <blp@gnu.org>
8386
8387         * glob.c: Revised variables to correspond to settings.h.
8388         (init_glob) Initializes variables from settings.h properly.
8389
8390         * set.q: Began long-overdue major revision to correspond to new
8391         philosophy.  Most code changed. 
8392
8393         * settings.h: Mostly changed; reorganized, reordered, large new
8394         comment.
8395
8396 Thu Nov 28 19:46:10 1996  Ben Pfaff  <blp@gnu.org>
8397
8398         * get.c: (cmd_save_internal) No longer forces compression off.
8399
8400         * sfm-read.c: (read_compressed_data) If eof is reached when
8401         reading a new instruction octet, only signal error if we're in the
8402         middle of a case.
8403
8404         * sfm-write.c: (COMPRESSION_BIAS) New #define.
8405         (struct sfm_fhuser_ext) New member `end'.
8406         (write_header) Refers to COMPRESSION_BIAS instead of magic 100.0.
8407         (ensure_buf_space) New function.
8408         (sfm_write_case) Reimplemented in order to support compression.
8409         (sfm_close) Writes out the remaining contents of the compression
8410         buffer if any.
8411
8412 Wed Nov 27 23:18:35 1996  Ben Pfaff  <blp@gnu.org>
8413
8414         * command.c: Defined SAVE and XSAVE commands in command table.
8415
8416         * common.h: second_lowest_value is of type flt64, not double.
8417
8418         * file-handle.h: Comment fix.
8419
8420         * get.c: Comment fixes.
8421         (static var `trns') New.
8422         (save_write_case_func, save_trns_proc, save_trns_free, null_func,
8423         cmd_save_internal, cmd_save, cmd_xsave) New functions.
8424         (dict_delete_run) Clears the variables and frees them now.
8425         (trim_dictionary) Sets default for compression.
8426         On KEEP subcommand, frees deleted variables as well as clearing
8427         them.  Finally got the sense of the test for deleting all
8428         variables correct.
8429         [DEBUGGING] (dump_dict_variables) Message fix.
8430
8431         * glob.c: (init_glob) set_compression set to 1 by default.
8432
8433         * list.q: Properly #includes config.h.
8434
8435         * misc.h: New macro REM_RND_UP.
8436
8437         * settings.h: Comment fix.
8438
8439         * sfm-read.c: (structs sysfile_header, sysfile_format,
8440         sysfile_variable; inline function bswap_int32) Moved to new file
8441         sfmP.h.
8442         (corrupt_msg) [__CHECKER__] No longer induces segfault.
8443         (sfm_read_dictionary) Fixed bug caused by failing to initialize
8444         var_by_index.
8445         (read_machine_flt64_info) Fixed some problems caused by confusion
8446         between flt64 and double types.
8447         (read_header) Message fix.
8448         (read_variables) Fixed set of cases in which we byte-swap sv.print
8449         and sv.write.  Fixed confusion of flt64 and double.
8450
8451         * sfm.h: (struct sfm_write_info) New.
8452
8453         * som-high.c: (som_draw_title) Properly frees `s'.
8454
8455         * temporary.c: (save_dictionary) Comment fix.
8456
8457         * var.h: Comment fixes.  New FMT_* enum, FMT_NUMBER_OF_FORMATS.
8458         (struct trns_header) Formatting fix.
8459         (struct save_trns) New.
8460
8461         * vars-atr.c: (discard_variables) Comment fix.
8462
8463         * sfm-write.c: New file, baseline release.
8464
8465         * sfmP.h: New file, baseline release.
8466
8467 Sun Nov 24 14:53:53 1996  Ben Pfaff  <blp@gnu.org>
8468
8469         * cmdline.c: (parse_command_line) `--version' output updated.
8470         (glob var syntax_message[]) Added my e-mail address.
8471
8472         * file-handle.q, lexer.c, vfm.c: Changed many instances of
8473         `illegal' to `invalid'.
8474
8475         * sfm-read.c: (struct sfm_fhuser_ext) New fields used as
8476         uncompression buffer.
8477         (sfm_close) Frees decompression buffer.
8478         (sfm_read_dictionary) Initializes decompression buffer.
8479         (buffer_input, read_compressed_data) New functions.
8480         (sfm_read_case) Restructured; now calls read_compressed_data() to
8481         handle compressed system file data.
8482
8483         * var.h: Comment fix.
8484
8485 Mon Nov 11 15:34:09 1996  Ben Pfaff  <blp@gnu.org>
8486
8487         * dfm.c: (dfm_close) Does not set h->{ext,class} because the
8488         caller handles it.
8489          
8490         * get.c: New comments.  New static var `get_file'.
8491         (cmd_get) Now fully implemented.  Calls discard_variables();
8492         initializes fv and lv for all variables; new debug code; sets
8493         up the dictionary; sets up the input program.
8494         (read_from_get, cancel_get) New functions.
8495
8496         * sfm-read.c: Comment fixes.
8497         (sfm_close) New static function.
8498         (sfm_read_dictionary) Properly sets up the class of the
8499         file_handle.  No longer cares what size the data is in records of
8500         type 7.  Also, on failure, properly cleans up the file_handle and
8501         free()s some stuff.
8502         (read_variables) No longer thinks it knows `nval' of the
8503         dictionary.  Now sets p.get.fv, etc., instead of speculatively
8504         setting fv itself.
8505         (read_value_labels) Fixed off-by-one error in indexing of
8506         var_by_index[].
8507         (sfm_read_case) New function.
8508         (sfm_r_class) New static var.
8509
8510         * var.h: (get_proc) New struct.
8511         (struct variable) New member p.get.
8512
8513 Thu Nov  7 20:52:28 1996  Ben Pfaff  <blp@gnu.org>
8514
8515         * get.c: Removed GTSV_OPT_MAP because of a misinterpretation of
8516         the manual's meaning.
8517         (rename_variables) New function.
8518         (trim_variables) Doesn't try to parse MAP any more.  Removed debug
8519         code.  Now properly reorders the dictionary on the KEEP keyword.
8520
8521         * sfm-read.c: (read_value_labels) Fixed some bugs regarding
8522         garbage collection.
8523
8524         * vars-atr.c: (clear_variable) New argument `dictionary *'.
8525         (rename_variable) New function.
8526         (free_val_lab) Reformatted.
8527
8528 Thu Nov  7 17:29:16 1996  Ben Pfaff  <blp@gnu.org>
8529
8530         * var.h: Reindented entire file.  Comment fixes.
8531         (glob vars var, var_by_name, nvar, N, nval, n_splits, splits)
8532         Removed.
8533         (glob var default_dict) New.
8534         (struct indirect_dictionary) Removed.
8535
8536         * Many other source files were changed to add `default_dict.'
8537         before all references to the dictionary of the active file.
8538         
8539         * vars-atr.c: (make_indirect_dictionary) Removed.
8540
8541         * glob.c: Reindented all variable declarations.  Updated for
8542         changed var.h.  Comment fixes.
8543
8544         * temporary.c: (restore_dictionary, save_dictionary) Simplified
8545         because now we can mainly copy dictionary structs.
8546
8547         * vars-prs.c: (is_dict_varname, parse_dict_variable,
8548         parse_variables) Takes dictionary instead of indirect_dictionary
8549         first argument.
8550         (parse_variables) Instead of calling make_indirect_dictionary,
8551         just sets DICT to &default_dict if DICT is NULL.  Of course, lots
8552         of `*dict.' references had to be changed to `dict->'.  Removed
8553         debug code.
8554
8555 Thu Nov  7 15:48:52 1996  Ben Pfaff  <blp@gnu.org>
8556
8557         * get.c: Added GTSV_OPT_* series of enums.
8558         (trim_dictionary, dict_delete_run) New functions.
8559         [DEBUGGING] (dump_dict_variables) New function.
8560         (cmd_get) Calls trim_dictionary() to get dictionary fully set-up.
8561         [DEBUGGING] Calls dump_dict_variables() to display results.
8562
8563         * glob.c: (cmp_variable) Now a public function declared in var.h.
8564
8565         * sfm-read.c: Turned off debug code.  Comment fixes.
8566         (read_machine_int32_info, read_machine_flt64_info) New functions
8567         to parse type 7 records.
8568         (sfm_read_dictionary) Properly byteswaps several fields now.
8569         Calls read_machine_*_info() to parse type 7 subtypes 3 and 4
8570         records.  [DEBUGGING] Dumps dictionary.
8571         (read_variables) Sets `index' field of variables created properly.
8572         Constructs avl tree of variables in dictionary.  [DEBUGGING] No
8573         longer dumps dictionary.
8574         (read_value_labels) Properly byteswaps fields.  [DEBUGGING] New
8575         debug code.
8576         [DEBUGGING] (dump_dictionary) No longer stubbed out.
8577
8578         * temporary.c: (restore_dictionary) Destroys `var_by_name' glob
8579         var before destroying any variables just to save a little time.
8580
8581         * var.h: (struct variable) Reordered in order to make name[] the
8582         first member; this makes pointers to `variable' pointers to the
8583         variable name, simplifying avl trees, etc.
8584         (struct indirect_dictionary) New struct.
8585
8586         * vars-atr.c: (find_variable) Rewritten for efficiency.
8587         (make_indirect_dictionary, is_dict_varname, parse_dict_variable)
8588         New functions.
8589         (is_varname) Rewritten for efficiency.
8590         (parse_variables) New argument, which is a `dictionary *'.  All
8591         references changed.  This function now reads variable names from
8592         the dictionary passed, or from the default dictionary if NULL.
8593
8594 Tue Nov  5 18:34:59 1996  Ben Pfaff  <blp@gnu.org>
8595
8596         * misc.h: Added new macro DIV_RND_UP to perform integer division,
8597         rounding up.  Changed many references to ROUND_UP to use this
8598         instead.
8599
8600         * sfm-read.c: Includes avl.h.
8601         (corrupt_msg) Induces a segfault under Checker.
8602         (macro assertive_bufread) New.  Many references to bufread() now
8603         use this instead.
8604         (sfm_read_dictionary) Split up into several functions.  Added code
8605         to read dictionary records following the the type 2 records.  Not
8606         quite complete.  New variable `var_by_index'.
8607         (read_header, read_variables) New functions extracted from
8608         sfm_read_dictionary().
8609         (read_value_labels) New function.
8610         (bufread) Checks ferror() if fread() doesn't return the expected
8611         value; if ferror() is zero it's just EOF.
8612         (dump_dictionary) Stubbed out.
8613
8614         * BTW: The source code now exceeds 50000 lines!
8615         
8616 Mon Nov  4 22:03:28 1996  Ben Pfaff  <blp@gnu.org>
8617
8618         * command.c: Added GET to cmd_table[].
8619
8620         * list.q: Removed reference to alloca headers.
8621         (cmd_list) Gave prototype.
8622
8623         * sfm-read.c: Added DEBUGGING comments.
8624         (sfm_read_dictionary) Checks bias correctly.  Sets
8625         dict->var_by_name to NULL.  Calculates long_string_count
8626         correctly.  realloc's dict->var[] array to minimum size.
8627         [DEBUGGING] Calls dump_dictionary.
8628         [DEBUGGING] (dump_dictionary) New function.
8629
8630         * temporary.c: (save_dictionary) Sets var_by_name to NULL.
8631         (restore_dictionary) If the dictionary contains a non-NULL
8632         var_by_name, uses that instead of generating one.
8633         (free_dictionary) Destroys var_by_name.
8634
8635         * var.h: (struct dictionary) Added field `var_by_name'.
8636
8637         * get.c: New file, not complete.
8638
8639 Sun Nov  3 12:24:36 1996  Ben Pfaff  <blp@gnu.org>
8640
8641         * mis-val.c: New enums MV_NOR_*.  New struct num_or_range.
8642         (parse_num_or_range) New function.
8643         (parse_numeric) Reimplemented in order to support LOW THRU <n> and
8644         <n> THRU HIGH missing values.
8645
8646         * output.h: [__GNUC__>1 && __OPTIMIZE__] (width, height) Made
8647         __attribute__((const)).
8648
8649         * q2c.c: (get_token) Merged isdigit || isalpha into isalnum.
8650
8651         * sfm-read.c: Finished reference implementation.
8652
8653         * sfm.h: Includes var.h.
8654
8655         * var.h: Comment fixes.
8656         (struct `variable') Reordered some fields.
8657
8658         * vars-atr.c: (is_num_user_missing) Added support for MISSING_*
8659         constants added previously.
8660
8661 Wed Oct 30 17:13:08 1996  Ben Pfaff  <blp@gnu.org>
8662
8663         * common.h: Comment fixes.  Added declaration of
8664         `second_lowest_value' as variable or macro.  Made `compat_type',
8665         `pgm_state_type' into anonymous enums.
8666
8667         * display.c: Comment fix.
8668
8669         * glob.c: [ENDIAN==UNKNOWN] Added definition for `endian' global
8670         var.
8671         [!defined SECOND_LOWEST_VALUE] Added definition for
8672         `second_lowest_value' global var.
8673         (compat, pgm_state global vars) Changed types to `int'.
8674         (init_glob) Initializes `second_lowest_value'.
8675
8676         * sfm-read.c: Continued work, not complete.
8677
8678         * var.h: Added new MISSING_* constants to handle LOWEST and
8679         HIGHEST.
8680
8681 Sat Oct 26 23:06:06 1996  Ben Pfaff  <blp@gnu.org>
8682
8683         * sfm-read.c: New file, not complete.
8684
8685         * cases.c: (vec_insert) Changed vector expansion algorithm.
8686         (vec_delete) Fixed bug that screwed up deletion sometimes, it was
8687         mucking up the RECODE transformation in particular.
8688         (envector) Harmless change in notation.
8689
8690         dfm is now fairly well tested again.  
8691         * dfm.c: (dfm_get_record) Only returns ext->ptr if ext is
8692         non-NULL--duh.
8693         (cmd_begin_data) if(ext->line) replaced by if(ext && ext->line).
8694
8695         * recode.c: Comment fix.
8696
8697         * sfm.h: Interface should be fairly final now, or at least for a
8698         day or so...
8699
8700         * vfm.c: [DEBUGGING] (index_to_varname) New function.
8701         (open_active_file) [DEBUGGING] Translates ccase indices into
8702         variable names now to make it easier to understand what's really
8703         going on.
8704
8705 Sat Oct 26 20:46:31 1996  Ben Pfaff  <blp@gnu.org>
8706
8707         * data-in.c: Comment fix.
8708
8709         * data-list.c: Includes dfm.h.
8710         (do_reading) Uses new function dfm_push_cust().
8711
8712         * data-out.c: (convert_time, convert_WKDAY, convert_MONTH) Added
8713         `return 1;' at end.
8714
8715         * file-handle.h: Completely changed.  Some parts split off into
8716         new file dfm.h.  Implemented in file-handle.q.
8717         (enum FH_*) Removed.
8718         (struct fh_ext_class) New struct.
8719         (struct file_handle) Retained only these fields: name, norm_fn,
8720         fn, recform, lrecl, mode.  New fields class, ext.
8721         (get_handle_by_name, get_handle_by_filename, parse_file_handle,
8722         close_handle, handle_name) Added `fh_' prefix to name, all
8723         references changed.
8724
8725         * dfm.h: New file, implemented in dfm.c.
8726         (get_record, put_record, fwd_record, bkwd_record, set_record,
8727         get_cur_col) Functions moved from file-handle.h, now prefixed with
8728         `dfm_'.
8729         (dfm_push_cust) New function.
8730
8731         * sfm.h: New file.  Incomplete.
8732
8733         * dfm.c: All functions adjusted/rewritten for new dfm/fhp
8734         interface.  Functions reordered, comments changed.  Not well
8735         tested, probably full of bugs.
8736         (struct dfm_fhuser_ext) New struct.
8737         (dfm_close) New function.
8738         (open_file_r) Pickier about finding `BEGIN DATA.' line.
8739         (open_file_w) User messages changed.
8740         (get_record) Comment fixed.
8741         (read_record) Increments ext->ln even for inline_file.  Calls
8742         dfm_close() for inline_file when `END DATA.' encountered.
8743         (dfm_get_record) Experimental restructuring.
8744         (dfm_push_cust) New function.
8745         (cmd_begin_data) Detects whether the inline file was fully read by
8746         checking whether it is still open; detects whether it was read at
8747         all by checking whether the line number is greater than zero.
8748
8749         * file-handle.q: All functions adjust/rewritten for new dfm/fhp
8750         interface.  Functions reordered, comments changed.  Not well
8751         tested, probably full of bugs.
8752         (init_file_handle) Removed initializers for obsolete fields, added
8753         new fields.
8754         (fh_close_handle) Much simpler, now mainly calls the class
8755         function.
8756         (fh_init_files) Renamed inline file internal filename.
8757
8758         * file-type.c: Includes dfm.h.
8759         (read_from_file_type) Doesn't use dfm internal state anymore.
8760
8761         * inpt-pgm.c, print.c: Include dfm.h.
8762
8763         * recode.c: (internal_cmd_recode) Casts strlen() return value to
8764         int in comparison with other int.
8765
8766         * som-high.c: (build_target) Fixed operator precedence problem in
8767         if statement (& versus ==).
8768
8769 Sat Oct 26 10:39:25 1996  Ben Pfaff  <blp@gnu.org>
8770
8771         * dfm.c: (read_record) Can now read fixed-length records; not
8772         tested.
8773         (put_record) Can now write fixed-length records; not tested.
8774
8775         * file-handle.h: FH_* defines changed to enums.  New enum series
8776         FH_RF_*, FH_MD_*.
8777         (struct file_handle) New members recform, lrecl, mode.
8778
8779         * file-handle.q: Parser changed.
8780         (internal_cmd_file_handle) Added support for new /RECFORM, /MODE,
8781         /LRECL subcommands.  These are compatible with Windows.
8782         (init_file_handle) Initializes recform, mode fields.
8783
8784         * q2c.c: (get_line) When outputting `!' comment lines, now
8785         increments the output file line number so that `#line' directives
8786         are correct.
8787         (make_identifier) New function that converts an arbitrary string
8788         into a valid C identifier.
8789         (dump_vars) Calls make_identifier() in two places in order to
8790         suppress some errors for bad identifiers.
8791         (make_match) Allows TRUE as synonym for YES and FALSE as synonym
8792         for NO.  Allows numbers to be prefixed by underscores to make them
8793         acceptable C identifiers but still to be parsed as numbers by the
8794         Fiasco lexer.
8795
8796 Thu Oct 24 20:13:42 1996  Ben Pfaff  <blp@gnu.org>
8797
8798         * command.c: Re-enabled RECODE, SAMPLE, SELECT IF.
8799         
8800         * dfm.c: Comment fixes. (get_record) Gives error if file handle
8801         was opened for writing.
8802         (open_file_w) New function.
8803         (read_record) Uses strncasecmp if available.  Improved error
8804         messages, comments.
8805         (put_record) New function.
8806
8807         * file-handle.h: Moved function comments into dfm.c and
8808         file-handle.q.  Comment fixes.  Removed declarations of
8809         tilde_expand() and normalize_filename().
8810         (struct file_handle) Changed `open' from boolean to enumerated
8811         field to allow for three states--closed, open for reading, open
8812         for writing--all references changed.
8813
8814         * file-handle.q: Includes filename.h.
8815
8816         * print.c: (CMD_* enums) Renamed PRT_* and moved into var.h; all
8817         references changed.
8818         (alloc_line) Makes allowance for line terminator characters in
8819         calculations.
8820         (print_trns_proc) Now handles OUTFILE, WRITE differences.
8821         (print_space_trns_proc) Handles OUTFILE differences.
8822
8823         * recode.c, sample.c: Comment fixes.
8824
8825         * var.h: (struct print_trns) Changed boolean field `eject' to
8826         bitmapped field `options'; all references changed.  New enums
8827         PRT_* for use with this field.
8828
8829         * exception.h, test-exception.c: Removed.
8830
8831 Thu Oct 24 17:47:14 1996  Ben Pfaff  <blp@gnu.org>
8832
8833         * ascii.c: (delineate) Turned off debug output.
8834
8835         * common.c: [Checker and Linux] (__assert_fail, __eprintf) Moved
8836         to error.c.
8837
8838         * data-in.c: (parse_string_as_format) Sets the entire string value
8839         to spaces, not just the short string part of it.  Is this correct
8840         now? 
8841
8842         * data-out.c: (convert_date) Fixed DATETIME format problems with
8843         decimal places, removed debug code.
8844
8845         * dfm.c: (open_file_r) Fixed bug where an error would occur in the
8846         middle of parsing BEGIN DATA that would cause the lexer to read
8847         from a wild pointer `prog'; now calls new function
8848         preprocess_line() in lexer.c.
8849
8850         * error.c: [__CHECKER__] (hcf) Calls induce_segfault() on improper
8851         termination.
8852         [Checker and Linux] (__assert_fail, _eprintf) Moved from common.c.
8853         Now call induce_segfault() to induce the segfault.
8854         (induce_segfault) New function.
8855
8856         * expr-opt.c: Comment fix.
8857         (parse_sysvar) New function.
8858         (parse_primary) Added system variable support--calls
8859         parse_sysvar().
8860         (global var ops) Added OP_CASENUM operator.
8861
8862         * expr.h: Comment fixes.
8863         (OP_* enum) added OP_CASENUM operator.
8864         (struct casenum_node) New struct.
8865         (union any_union_union) New member `cas' of type `casenum_node'.
8866
8867         * glob.c: (global var last_vfm_invocation) New var.
8868         (init_glob) Initializes last_vfm_invocation.
8869
8870         * lexer.c: (lookahead) Fixed reversed condition on if statement.
8871
8872         * getline.c: (get_line) Split into get_line() and preprocess_line().
8873         (preprocess_line) New function.
8874
8875         * var.h: Declares last_vfm_invocation.
8876
8877         * vfm.c: (procedure) Sets last_vfm_invocation.
8878
8879 Wed Oct 23 21:53:43 1996  Ben Pfaff  <blp@gnu.org>
8880
8881         * command.c: (parse_cmd) Fixed bad assertion related to
8882         lookahead().
8883
8884         * data-in.c: (parse_month) Implemented to parse months according
8885         to full interpretation of standard.
8886         (to_roman) New function.
8887         (parse_wk_delimiter) Bug fix (forgot to skip `WK' in string).
8888         (parse_weekday) Bug fix (forgot to skip all the day name).
8889
8890         * data-list.c: (read_from_data_list_fixed) Fixed bug that screwed
8891         up parsing of multirecord data items.  Also fixed user message.
8892
8893         * data-out.c: Comment fix.
8894         (year2, year4, convert_date, convert_time, convert_WKDAY,
8895         convert_MONTH) New functions to support time & date output.
8896         (convert_format_to_string) Calls new time & date output routines.
8897
8898         * expr-prs.c: (nary_num_func) Found a bug, but didn't fix it yet.
8899
8900         * lexer.c: (lookahead) Noted a previously unnoticed caveat in
8901         comment.
8902
8903         * main.c: [DEBUGGING] (dump_token) Updated to handle getline.h.
8904
8905         * misc.c: (global var formats) Fixed declarations of DATETIME,
8906         TIME, DTIME.
8907
8908         * postscript.c: (text) Fixed a pair of bugs in the reallocation of
8909         the output_char buffer.
8910
8911         * vars-prs.c: (parse_DATA_LIST_vars) Fixed a failure to free
8912         memory bug.  Fixed user messages.
8913
8914 Tue Oct 22 17:27:04 1996  Ben Pfaff  <blp@gnu.org>
8915
8916         * Removed #pragma argsused from lots of places.
8917         
8918         * data-in.c: Implemented zoned decimal and time-date formats.
8919         Untested.  This is a huge chunk of code--maybe 1000 lines and 50
8920         new functions.
8921
8922         * data-out.c: Implemented zoned decimal format.
8923
8924         * expr.h: Moved yrmoda() declaration here from exprP.h.
8925
8926         * misc.c: (global var formats) Minor fixes--added
8927         FCAT_SHIFT_DECIMAL to formats N and Z.
8928         (convert_fmt_ItoO) Added support for format Z.
8929
8930         * som-frnt.c: (som_set_value) Fixed bug regarding string values.
8931
8932 Mon Oct 21 20:39:59 1996  Ben Pfaff  <blp@gnu.org>
8933
8934         * command.c: (parse_cmd) [GLOBAL_DEBUGGING] Inserted call to
8935         som_check_workspace() that is activated between commands.
8936
8937         * data-list.c: (dump_fixed_table, dump_free_table) Finished these
8938         for good, I hope.
8939
8940         * list.q: (begin_row) Changed title expansion style from
8941         SOPT_X_VERT to SOPT_X_SHSP.
8942
8943         * som-frnt.c: Now includes `somP.h'.
8944         (som_push_workspace, som_pop_workspace) New functions that, taken
8945         together, form a solution to the recursive table building problem
8946         mentioned yesterday.  Surrounded every table output routine
8947         throughout the program with calls to these functions.
8948         [GLOBAL_DEBUGGING] (som_check_workspace) New function.
8949         (som_create_table) Checks that there's an active workspace.
8950         (som_destroy_all_tables, som_crush) Removed.
8951
8952         * som-high.c: (global var som_preserve_tables) Removed, all
8953         references deleted.
8954         (som_submit_table) Checks that there's an active workspace.
8955         (dump_columnated_table) Doesn't columnate tables that would have
8956         just one row per column.
8957         (dump_crush_page, som_dump_crush_page) Removed debugging code.
8958         (som_dump_crush_page) Moved row number labels from left side of
8959         tables to right side.
8960         (som_get_table_size) Added support for SOPT_X_SHSP.
8961
8962         * som.h: New cell expansion type SOPT_X_SHSP.
8963
8964         * somP.h: (global vars arena_stack, n_arena_stack, m_arena_stack)
8965         New vars.
8966         (global var curtab_arena) Moved from som-frnt.c.
8967
8968 Sun Oct 20 13:45:28 1996  Ben Pfaff  <blp@gnu.org>
8969
8970         * ascii.c: [GLOBAL_DEBUGGING] (SUPPRESS_WARNINGS) New debug option
8971         that causes bad location warnings to be suppressed.
8972         (delineate) Saves current font when calling draw_text(); fixed
8973         handling of NULLs when backing up.  Also fixed line-wrapping bug.
8974
8975         * command.c: Re-enabled `LEAVE', `NUMERIC', `PRINT', `PRINT EJECT',
8976         `PRINT FORMATS', `PRINT SPACE', `STRING', `TITLE', `WRITE'.
8977
8978         * common.c: Added code to cause assertion failure to dump core
8979         when run under Checker.
8980
8981         * data-list.c: (dump_fixed_table) Fixed some inconsistencies, but
8982         there are still bugs.
8983
8984         * glob.c: (__eprintf) Removed.
8985
8986         * list.q: Inserted som_preserve_tables kluge that prevents tables
8987         from being thrown away due to recursive table building through
8988         som_output_line being called from a transformation during the LIST
8989         procedure invocation.  This is a general problem that must be
8990         solved in a better way since it applies to all procedures in
8991         general.
8992         (begin_row) Changed title options to SOM_X_VERT from SOM_X_BOTH.
8993         (flush_table) Removed SOM_TOPT_PRESERVE from submission options.
8994
8995         * numeric.c: Fixed several errors in the form of msg() calls.
8996
8997         * print.c: Updated for use of som.
8998         (dump_table) Reimplemented.
8999         (print_trns_proc) Calls som_eject_page() instead of eject_page().
9000         Calls som_output_text() instead of outs_line().
9001
9002         * som-frnt.c: (som_destroy_all_tables) Sets som_preserve_tables to
9003         0.
9004         (som_output_text) Function moved from som-low.c.  Interface
9005         changed.
9006
9007         * som-high.c: (som_preserve_tables) New global public variable
9008         declared in som.h.
9009         (som_submit_table) Destroys the tables only if som_preserve_tables
9010         is 0.
9011         (paginate_horizontally) Bugfix: sets som.mpw even if there's only
9012         one subrow per row.  Now labels subrows if there's more than one
9013         subrow per row.
9014         (dump_crush_table) Added wishlist comment.
9015         (som_eject_page) New public function declared in som.h.
9016
9017         * som-low.c: (som_dump_crush_page) Draws row labels if there's
9018         more than one subrow per row.
9019         (som_output_text) Moved to som-frnt.c.
9020
9021         * som.h: (SOM_TOPT_PRESERVE) Removed.
9022
9023         * title.c: (get_title) Changed interface.
9024         (cmd_title) Changed `title' to `outp_title'.
9025         (cmd_subtitle) Changed `subtitle' to `outp_subtitle'.
9026
9027 Sun Oct 20 09:04:15 1996  Ben Pfaff  <blp@gnu.org>
9028
9029         * list.q: (flush_table) Conforms to new partial options in
9030         som_submission_form.
9031
9032         * som-high.c: (paginate_horizontally) Changed form of subrow
9033         number labels.
9034         (build_target) Omits spacing before table if
9035         SOM_TOPT_PARTIAL_OMIT_TOP is selected.
9036         (dump_crush_page) Changed interface.  Only trims bottom rule if
9037         SOM_TOPT_PARTIAL_OMIT_BTM is not selected.
9038         (dump_crush_table) Handles partial tables.
9039         (output_row_label) New function.
9040         (som_dump_crush_page) Emits subrow number labels.  Draws vertical
9041         rule on the right edge of narrow subrows.
9042
9043         * som.h: Changed SOM_SUB_PARTIAL_* series of submission type
9044         constants to a series of SOM_TOPT_PARTIAL_* submission options.
9045         All references updated.
9046
9047 Fri Oct 18 19:46:49 1996  Ben Pfaff  <blp@gnu.org>
9048
9049         * misc.c: Comment fix.
9050
9051         * som-high.c: (examine_table) Treats crushed tables separates for
9052         purpose of determining header size.
9053         (paginate_horizontally) Allots space for line numbers in crushed
9054         tables with lots of subrows per row.  Calculates the `maximum page
9055         width', the width of the widest horizontal page.
9056         (build_target) Removed trim argument; all references changed.
9057         Stricter assertions.  (dump_crush_page) New function.
9058         (dump_crush_table) Reimplemented.
9059
9060         * som-low.c: (som_dump_page) Uses new RULE_ROW &c. constants.
9061         (som_dump_crush_page) Reimplemented, interface changed.
9062
9063         * somP.h: Many many new helper macros for use with crushed tables.
9064         (global var som) Removed `tv', `cum_y' members; all references
9065         removed.  New members `mpw', `digit_space'.
9066
9067 Sun Sep 29 19:37:03 1996  Ben Pfaff  <blp@gnu.org>
9068
9069         * arena.c: (arena_alloc) [!DISCRETE_BLOCKS] Removed `size'
9070         variable, changed to constant 1024.
9071         (arena_ca_strdup) Changed `sizeof(a_string)' to
9072         `sizeof(c_string)'.
9073         (arena_ca_strdup) [!DISCRETE_BLOCKS] Changed bad cast from
9074         `(c_string *)' to `(char *)'; this fixed some offset problems.
9075
9076         * filename.c: (readlink_malloc) Changed initial allocation from
9077         100 bytes to 128.
9078         (good_getcwd) Changed from xmalloc() to local_alloc(); removed
9079         comment.
9080
9081         * postscript.c: (read_fontmap) Fixed leak by changing &owner to
9082         &fm->owner in several places.
9083
9084         * som-high.c: (output_table) Changed interface to rest of world.
9085         (examine_crush_table) Removed.  Crushed tables are re-broken now,
9086         in preparation for rewrite.
9087
9088         * som.h: Comment fix.
9089
9090 Sat Sep 28 21:28:07 1996  Ben Pfaff  <blp@gnu.org>
9091
9092         * ascii.c: (ascii_init_driver) Disposes of x->file.filename and x
9093         itself in the cleanup stage.
9094
9095         * descript.q: (display) At least temporarily, changed the table
9096         format to a crushed table.
9097
9098         * list.q: (begin_row) At least temporarily, added horizontal lines
9099         between cases.
9100
9101         * som-high.c: (examine_crush_table) Sets som.hh to the width of
9102         the horizontal "headers," that is, to the width of the far left
9103         and far right rules.
9104         (justify_pagination) Sets som.th to the width of the widest row
9105         in the crushed table.  Fixed inner loop off-by-one error.
9106
9107         * som-low.c: (som_dump_crush_page) Added code to draw horizontal
9108         rules.
9109
9110         * somP.h: Comment fix.
9111
9112 Fri Sep 27 20:08:39 1996  Ben Pfaff  <blp@gnu.org>
9113
9114         * filename.c: (open_file_ext) Now, doesn't set f->file to NULL
9115         before closing it; also, opens the constructed filename `s'
9116         instead of f->filename.
9117
9118         * postscript.c: Moved initialization of x->loaded, x->prop,
9119         x->fixed, x->current, also the add_encoding() calls, into
9120         postopen().
9121         (preclose) Destroys x->combos; sets x->loaded, x->combos to NULL;
9122         sets x->last_font to NULL; sets x->next_combo to zero.
9123
9124         * som-high.c: (crushed_row_height) Moved definition farther up.
9125         (som_submit_table) Doesn't calculate line width, font size until
9126         after calling open_page(), to accomodate changes to PostScript
9127         driver.
9128         (vert_headers) Removed; equivalent functionality moved to
9129         examine_table(), examine_crush_table().
9130         (justify_pagination) Replaced with different algorithm.
9131         (dump_crush_table) Bugfix that caused tables to fail to be clipped
9132         at the bottom of the page.
9133
9134 Thu Sep 26 22:20:26 1996  Ben Pfaff  <blp@gnu.org>
9135
9136         * command.c: Added cmd_list back into cmd_table.
9137
9138         * freq.c, frequencies.q, repeat.c, list.q, vars-atr.c, vfm.c:
9139         Comment fix: `#define DEBUGGING' --> `#define DEBUGGING 1'.
9140
9141         * list.q: (flush_table) Updated to new som_submission_form format.
9142
9143         * som-frnt.c: Comment fix.
9144
9145         * som-high.c: Changed `#endif' to `#undef EXTERN'.
9146         (output_table) Calls som_get_table_size() directly; handles
9147         crushed tables.
9148         (examine_crush_table) New function; calls vert_headers().
9149         (examine_table) Moved some code into new function, vert_headers().
9150         (justify_pagination) New function.
9151         (dump_plain_table) Removed `static' from `cy'.
9152         (dump_crush_table) New function.
9153
9154         * som-low.c: (som_dump_crush_page) New function.
9155
9156         * som.h: Comment fixes.
9157         (enum SOM_TOPT_CRUSH) New.
9158         (SOM_SUB_PARTIAL_BEG, SOM_SUB_PARTIAL_MID, SOM_SUB_PARTIAL_END)
9159         Temporarily set to zero to make do with LIST procedure.
9160
9161         * somP.h: Re-ordering.
9162
9163 Wed Sep 25 19:36:11 1996  Ben Pfaff  <blp@gnu.org>
9164
9165         * som.c: Split into som-frnt.c, som-high.c, som-low.c.
9166
9167         * somP.h: New file for use by som-high.c, som-low.c.
9168
9169         * q2c.c: Added definition for VME.
9170         (get_line) Now dumps `!' comment lines to the output file
9171         verbatim.
9172
9173         * crosstabs.q, descript.q, file-handle.q, frequencies.q, list.q,
9174         set.q: Changed format of `!' comment lines.
9175
9176 Tue Sep 24 18:39:09 1996  Ben Pfaff  <blp@gnu.org>
9177
9178         * All source files: Added copyright notice.
9179
9180         * common.c: (xmalloc, xrealloc, xstrdup) Cast size_t's to unsigned
9181         longs in msg() calls.
9182
9183         * con32s.c: (xmalloc, xrealloc) Updated from common.c.
9184
9185         * q2c.c: (xmalloc, xrealloc, xstrdup) Updated from common.c.
9186
9187 Sat Sep 21 23:16:31 1996  Ben Pfaff  <blp@gnu.org>
9188
9189         * output.c: (outp_read_devices) Changed criteria for
9190         distinguishing different types of lines.
9191
9192 Fri Sep 20 22:52:28 1996  Ben Pfaff  <blp@gnu.org>
9193
9194         * cmdline.c: Changed syntax message.
9195
9196         * filename.c: (good_getcwd) Bug fix (?).
9197         (normalize_filename) [__BORLANDC__] Uses _fullpath() library
9198         function.
9199         (search_path) Appends DIR_SEPARATOR to directory name only if it
9200         does not already end with one.
9201
9202         * glob.c: Checks STAT_PAGER envvar before PAGER.
9203
9204         * output.c: Checks environment variables instead of just local
9205         macros.
9206
9207 Tue Sep 10 21:39:00 1996  Ben Pfaff  <blp@gnu.org>
9208
9209         * arena.c: (arena_destroy) Swatted a subtle bug that cropped up
9210         when the pointer passed to the function was within the arena
9211         itself, so that it couldn't properly be set to NULL _after the
9212         arena was freed_.
9213
9214         * command.c: Re-enabled DISPLAY.
9215
9216         * display.c: Rewritten to handle tables.  Untested.
9217
9218         * filename.c: (search_path) Fixed memory leak.
9219
9220         * frequencies.q: (cmd_frequencies) Frees v_variables.
9221         (postcalc) Calls cleanup_freq_tab() after displaying statistics.
9222         (cleanup_freq_tab) New function to garbage collect.
9223         (dump_full) Elegantized.
9224
9225         * main.c: New comment.
9226
9227         * output.h: New tag for tagged quotes: TAG_NEWLINE.
9228
9229         * postscript.c: Comment fix.
9230         (release_fontmap, free_font_entry) New functions.
9231         (ps_init_driver) Sets free_font_entry() as the freefunc for
9232         hashtable `loaded'.  Calls release_fontmap() when destroying a
9233         driver; also frees the output filename; also frees the
9234         ps_driver_ext block.
9235         (free_ps_encoding) Frees the filename as well as the encoding
9236         block.
9237         (output_encodings) Frees the line buffer and pops the msg-filename
9238         stack.
9239         (read_fontmap) Frees the fontmap filename and the line buffer.
9240         (postopen, preclose) Misc. garbage collection fixes.
9241         (ps_open_page) Destroys the `combos' hash table; sets `last_font'
9242         to NULL; this fixes some output problems.
9243         (text) Handles TAG_NEWLINE.  Untested.
9244
9245         * som.c: (cell_byte_size) Merged SCON_VALUE and SCON_TEXT cases.
9246         (som_set_string) Removed.  All references changed to
9247         `som_set_text'.
9248         (som_set_text) Rewritten.  New interface.  More general.
9249
9250         * som.h: Minor format changes.
9251         (struct som_value_cell) Removed; all references changed to
9252         `som_text_cell'.
9253         (enums SOT_*) Changed.
9254
9255 Mon Sep  9 21:43:13 1996  Ben Pfaff  <blp@gnu.org>
9256
9257         * command.c: Re-enabled SPLIT FILE.
9258
9259         * postscript.c: Comment fix.
9260
9261         * som.h: Added `SOT_NONE'.
9262
9263         * split-file.h: (cmd_split_file) Removed superfluous parenthesis.
9264
9265         * vfm.c: (dump_splits) Reimplemented.
9266
9267 Sat Sep  7 22:35:12 1996  Ben Pfaff  <blp@gnu.org>
9268
9269         * Compiled the project under gcc 2.7.2, which gave some new
9270         warnings.  This led to many additions of casts from unsigned to
9271         int sprinkled throughout the code.
9272         
9273         * arena.c: Many uses of `unsigned' changed to `size_t'.
9274
9275         * command.c: Added END FILE, END REPEAT to command table.
9276         (var cmd_end_repeat) Renamed cmd_end_repeat_p.
9277         (find_command, FILE_TYPE_okay) Not commented out anymore.
9278         (parse_cmd) Calls FILE_TYPE_okay again.
9279         (output_line) Added calls to som_output_text() to put the line
9280         in the output files.
9281
9282         * common.c: (macro VME) Format changes.
9283         (xstrdup) Asserts that its argument is not NULL.
9284         
9285         * data-list.c: Implemented dump_fixed_table().
9286         
9287         * inpt-pgm.c: Formatting changes.  Comment changes.
9288         (end_case_proc) Renamed end_case_trns_proc.
9289         (cmd_end_file, end_file_trns_proc) New functions.
9290
9291         * misc.c: Many uses of `int' and `unsigned' changed to `size_t'.
9292
9293         * misc.h: (local_strdup) New macro corresponding to strdup() but
9294         allocating its data through local_alloc() if possible--that is, if
9295         GNU C is in use.
9296
9297         * postscript.c: Comment changes.
9298         (quote_ps_name, quote_ps_string, output_encodings) New functions.
9299         (output_line, add_string) New macros supporting
9300         output_encodings().
9301         (postopen) Fixed contents of ${fixed-font} and ${prop-font}
9302         substitution vars.  Calls output_encodings() when a line
9303         consisting of `!encodings' is encountered.
9304         (preclose) Some code moved into quote_ps_string().
9305         (dump_line) Changed into macro supporting dump_fancy_line().
9306         (switch_font) Now outputs DSC "%%IncludeResource: font (...)"
9307         command when appropriate.
9308         (write_text) Fixed `literal_char' array (I think it's fixed, at
9309         least.)
9310         (text) Fixed bug when width was zero.  Now exits immediately on
9311         zero height_left.  Now, when executing `goto restart;', checks
9312         that cp<end, so that we don't read beyond end-of-string.  Also,
9313         outputs the correct code to the output file by outputting the code
9314         from the metric instead of the internal metric index.
9315
9316         * repeat.c: (cmd_end_repeat) New function.
9317
9318         * som.c: (var som) `headers' renamed `options' and semantics
9319         changed.  All references changed.
9320         (draw_title) `if(px!=-1 || px!=-1)' --> `if(px!=-1 || py!=-1)'.
9321         (build_target) Only inserts spacing if SOM_TOPT_SPACING not
9322         selected.
9323         (som_text_table) Removed.
9324         (som_output_text) New function.
9325
9326         * som.h: (struct som_submission_form) Removed `header', `reuse',
9327         replaced with bitmapped field `options'.
9328         (SOM_TOPT_*) New enum set for som_submission_form.options.
9329         (SOT_*) New enum set for som_output_text().
9330
9331         * temporary.c: (copy_variable) When copying the var label, only
9332         calls xstrdup() if it's non-NULL.
9333
9334         * var.h: (enum type `vartype') Removed; all references changed to
9335         `int'.
9336
9337         * vars-atr.c: (init_variable) Changed local var `nbytes' from
9338         `int' to `size_t'.
9339
9340 Thu Sep  5 22:05:56 1996  Ben Pfaff  <blp@gnu.org>
9341
9342         * font.h: Comment changes.
9343
9344         * groff-font.c: (groff_read_font) Initializes `name' field to
9345         NULL.  Handles `encoding' field.
9346
9347         * hash.c: (hsh_dump) [GLOBAL_DEBUGGING] Output formatting changes.
9348
9349         * postscript.c: (struct font_entry) Removed `position' field.
9350         (struct ps_font_combo) New struct.
9351         (struct ps_driver_ext) Removed field `next_position'.  New fields
9352         `combos', `next_combo'.  `last_font' field changed from
9353         `font_entry *' to `ps_font_combo *'.
9354         (ps_init_driver) Reformatted; handles new fields.  When
9355         OPO_AUTO_ENCODE is set, adds the two default fonts' encodings to
9356         the encoding list.
9357         (get_encoding, find_encoding_file) New functions.
9358         (add_encoding) Some code moved out into find_encoding_file().
9359         (postopen) Changed value for ${title}.
9360         (preclose) Sets `loaded' field to NULL after destroying the hash
9361         table.
9362         (ps_open_page) Added comment.  Inits the `combos' and `next_combo'
9363         fields.
9364         (ps_text_set_font_by_position) Figures out the current family if
9365         not known.
9366         (compare_ps_combo, hash_ps_combo, free_ps_combo) New functions.
9367         (switch_font) Implemented.
9368         (write_text) Calls switch_font() more often.  Format changes.
9369         #undefs its macros after they're no longer useful.
9370         (text) Changed `continue' at one point to a jump to the top of the
9371         loop because we don't want `separate' reset to 0 at that point.
9372         (load_font) No longer sets `position' in the font_entry created.
9373
9374 Wed Sep  4 21:45:35 1996  Ben Pfaff  <blp@gnu.org>
9375
9376         * font.h: (struct font_desc) New member `encoding', which is not
9377         properly handled yet.
9378
9379         * glob.c: (init_glob) Some new i18n code, which is probably
9380         screwed up.
9381
9382         * output.c: (outp_read_devices, outp_get_paper_size) Changed
9383         `size' local from `int' to `size_t'.
9384
9385         * postscript.c: New driver configuration parameter `auto-encode'.
9386         New enums OPO_AUTO_ENCODE, ODA_COUNT.
9387         (struct font_entry) New member `position'.
9388         (struct ps_driver_ext) Reordered.  New hash table member
9389         `encodings'; new members `next_position', `next_encoding',
9390         `last_font'.  Members `current', `prop', `fixed' changed from type
9391         `font_desc *' to `font_entry *'; all references changed.
9392         (struct ps_encoding) New struct.
9393         (read_ps_encodings, compare_ps_encoding, hash_ps_encoding,
9394         free_ps_encoding, add_encoding) New functions.
9395         (ps_init_driver) Added OPO_AUTO_ENCODE to default
9396         x->output_options.  Initializes new members of ps_driver_ext.
9397         Changed default value for prologue_fn, encoding_fn.  Calls
9398         read_ps_encodings after loading default fonts.
9399         (option_tab[], ps_option) Handle new configuration parameter.
9400         (switch_font) New function.
9401         (struct output_char) `font' member changed from `font_desc *' to
9402         `font_entry *'.  New member `separate'.
9403         (read_fontmap) Changed `size' from `int' to `size_t'.
9404         (output_line, put_number) New macros for write_text().
9405         (write_text) Optimizes text output by consolidating multiple
9406         calls to PostScript `show' operator.
9407         (text) Keeps track of when text arguments can't be consolidated by
9408         write_text(), and marks those spots in the output stream.
9409         (load_font) Sets `position' of the allocated font_entry to -1, cuz
9410         the font hasn't been switched to by switch_font(), which is where
9411         the position is important--the PostScript is what cares about the
9412         position.
9413
9414 Sat Aug 31 23:52:38 1996  Ben Pfaff  <blp@gnu.org>
9415
9416         * hash.c: (hsh_destroy) Ignores NULL argument.  Doesn't try to
9417         call a NULL free_func.
9418         (hsh_rehash) Elegantized.
9419         (hsh_probe) Fix bug that manifested when the table was expanded
9420         and thus had to change location in memory.  Good thing
9421         too--otherwise could have been much more subtle.
9422         (hsh_find) [GLOBAL_DEBUGGING] Not stubbed out anymore.
9423         (hsh_foreach) New function for hash table iteration.
9424
9425         * hash.h: (struct hsh_iterator) New.
9426
9427         * lexer.c: (parse_tagged_quote) Font and family name strings in
9428         tags are now null-terminated.
9429
9430         * output.c: (outp_evaluate_dimension) Fixed over-aggressive unit
9431         parsing.
9432         (internal_get_paper_size, outp_get_paper_size) Fixed; now work as
9433         documented.  (Never before tested?)
9434
9435         * output.h: Comment changes.
9436
9437         * postscript.c: New driver options `optimize-text-size',
9438         `optimize-line-size', `max-fonts-simult'.  New enum set for
9439         specing cached line types.  Comment fixes.
9440         (struct line_form) New struct.
9441         (struct ps_driver_struct) New members `text_opt', `line_opt',
9442         `max_fonts', `lines'.
9443         (ps_init_driver) Initializes new members of ps_driver_struct.
9444         (user option type enum set) New member `nonneg_int_arg'.
9445         (static var option_tab[]) Supports new options.
9446         (ps_option) Handles new options.
9447         (find_ps_file) Made static.  No longer calls hsh_dump().
9448         (ps_get_var) Made static.
9449         (preclose) Dumps out proper DSC trailer.
9450         (ps_open_page) Elegantized.
9451         (ps_close_page) Calls dump_lines() if appropriate.
9452         (ps_line_horz, ps_line_vert, ps_line_intersection) Reduced to
9453         wrappers around line().
9454         (int_2_compare, compare_line, dump_line, dump_fancy_line,
9455         dump_lines, hash_line, free_line, line) New functions for support
9456         of line caching.
9457         (write_text, text) Made static.
9458         (text) Added to font support, not finished.
9459
9460 Thu Aug 29 21:36:41 1996  Ben Pfaff  <blp@gnu.org>
9461
9462         * font.h: (struct font_desc) New members ascent, descent.
9463
9464         * groff-font.c: (groff_read_font) Calculates font ascent and
9465         descent from the ascent and descent of the `d' and `p' characters,
9466         respectively, as per a suggestion on comp.fonts.
9467
9468         * postscript.c: (ps_open_page, ps_close_page, ps_line_horz,
9469         ps_line_vert, ps_line_intersection) Rewritten to deal with changed
9470         prologue.
9471         (write_text) Handles text right-justification and centering (not
9472         full justification).  Still very inefficient.  (One output line
9473         per character?!)
9474         (struct output_char) Added fields for font and font size.
9475         (text) Many bugfixes.
9476
9477 Sat Aug 24 23:26:00 1996  Ben Pfaff  <blp@gnu.org>
9478
9479         * cmdline.c: (usage) Calls outp_list_classes().
9480
9481         * font.h: Comment fix.
9482
9483         * groff-font.c: New exported global var `space_index'.
9484         (groff_init) New function to initialize `space_index'.
9485         (hash_kern) Casts result to unsigned.
9486         (font_name_to_index) Renamed font_char_name_to_index.  All
9487         references changed.  Also, now returns the value of `space_index'
9488         when passed an ASCII space character as an argument.  Fixed
9489         handling of nulls.
9490         (font_get_kern_adjust) Changed i from `int' to `unsigned'.
9491         Handles passed NULL pointers properly.
9492
9493         * lexer.c: (parse_tagged_quote) Comment fix.  Better range
9494         checking.
9495
9496         * output.c: (outp_list_drivers) Removed.  Removed all references.
9497         
9498         * output.h: Comment fixes.
9499
9500         * postscript.c: (ps_open_global) Calls groff_init().
9501         (output_char) New structure.
9502         (write_text) New function.
9503         (text) No longer stubbed out!  Now the output is correct--with a
9504         few exceptions, one of them being that the page has to be held
9505         upside down into a mirror.
9506
9507 Sun Aug 11 21:31:22 1996  Ben Pfaff  <blp@gnu.org>
9508
9509         * font.h: Comment fix.
9510         
9511         * font.c: (name_to_index) Renamed font_name_to_index, made extern.
9512         All callers changed.
9513         (number_to_index) Renamed font_number_to_index, made extern.  All
9514         callers changed.
9515         (font_get_kern_adjust, font_get_char_metrics) New functions.
9516
9517         * output.h: New constant OUTP_T_INTERNAL_DRAW.
9518
9519         * postscript.c: Changed default line width back to 1/2 point.
9520         (ps_line_horz, ps_line_vert, ps_line_intersection) Now lines are
9521         in the center of the space allotted for them, not just a fixed
9522         offset from the edge of the space; this fixes some bugs.
9523         (ps_line_intersection) Now supports all command line styles.
9524         (ps_text_get_size) Bug fix in computation of em width.
9525         (text) New function, the meat behind ps_text_metrics and
9526         ps_text_draw.  Not complete.
9527         (ps_text_metrics, ps_text_draw) Removed the stub taken from
9528         ascii.c; call text().
9529
9530 Sat Aug 10 23:28:17 1996  Ben Pfaff  <blp@gnu.org>
9531
9532         * arena.c: (arena_free) Assert that the argument is non-NULL.
9533         
9534         * groff-font.c: (add_kern) Calls arena_free() for old_kern if and
9535         only if old_kern is non-NULL.
9536
9537         * postscript.c: (ps_init_driver) Changed default line width to 1
9538         point.
9539         (postopen) New prologue variables.
9540         (ps_line_horz, ps_line_vert, ps_line_intersection) Implements some
9541         more of the common line styles properly, but not all.
9542         (ps_text_metrics) Fixed problem with this stubbed out version that
9543         kept it from taking font sizes into account.
9544
9545 Thu Aug  8 22:31:11 1996  Ben Pfaff  <blp@gnu.org>
9546
9547         * arena.c: (arena_malloc) Bug fix.
9548         (arena_dump) [GLOBAL_DEBUGGING] New function.
9549
9550         * ascii.c: Comment fix.
9551         (count_fancy_chars, delineate) Now static functions.
9552         
9553         * filename.c: (interp_vars) Bug fixes.
9554
9555         * font.h: Comment fixes.
9556
9557         * glob.c: (init_glob) Sets set_viewwidth, set_viewlength at
9558         beginning in case we have an error message to display before
9559         initializing the display.
9560
9561         * groff-font.c: Comment fix.  Changed rehash threshold from 2/3
9562         full to 1/2 full.
9563         (groff_read_font) Bug fixes.
9564         (name_to_index) Increments hash.used.  Sets `name' field of hash
9565         entry properly.
9566         (add_kern) Sets kern_max_used after rehashing.  Other bug fixes.
9567
9568         * hash.c: Return type changed.
9569
9570         * postscript.c: Continued development.  Now marks lines on the
9571         paper, but very buggy.
9572
9573 Sat Aug  3 20:50:35 1996  Ben Pfaff  <blp@gnu.org>
9574
9575         * Changed comments in many source files from `/* xxx /* yyy */' to
9576         `/* xxx */ /* yyy */' for cleanliness.
9577
9578         * arena.c: (arena_sd_strdup) New function.
9579         
9580         * ascii.c: (struct ascii_driver_ext) New member `file'.
9581         (ascii_init_driver) Fills out member `file' for initing; uses
9582         close_file_ext for closing drivers.
9583         (ascii_option) Changed %.*s back to %s because the a_string's are
9584         always null-terminated.
9585         (postopen, preclose) New functions.
9586         (ascii_open_page) Uses new style of open_file_ext.
9587         (ascii_option, commit_line_buf, output_lines) Use ext->file.file
9588         instead of this->output.
9589         (__assert_fail) Removed.
9590
9591         * cmdline.c: Changed syntax_message[].
9592
9593         * error.c: #include's <readline/history.h> only if the history
9594         library is available, not if just the readline library is
9595         available.
9596
9597         * filename.c: (expand_line) Removed alloca() support.
9598         (interp_vars) No longer tilde-expands argument.  Limit on output
9599         length removed.
9600         (tilde_expand) Now treats argument as path rather than filename.
9601         [!unix] Now is a no-op function.
9602         (search_path) Better verbose message formatting.
9603         (open_file, close_file) Comment fixes.
9604         (close_file) [!unix] Doesn't bother with pipes.
9605         (open_file_ext) Completely rewritten, interface revamped.
9606         (close_file_ext) New function.
9607
9608         * font.h: Comment changes.
9609
9610         * frequencies.q: Removed AIX alloca support since it doesn't use
9611         alloca.
9612
9613         * hash.c: Comment changes & additions.
9614         (hsh_create) Initializes entire table instead of first M entries.
9615         (hsh_probe) Stupid bug fixed.  Now it works.
9616         (hsh_dump) [GLOBAL_DEBUGGING] New function.
9617
9618         * main.c: (parse) Detects EOF properly in token-eating loop.
9619         Should the STOP token have its value changed to 0?
9620
9621         * misc.c: (blp_getdelim) [HAVE_GETDELIM] Now it's a macro.
9622         (blp_getline) Now it's a macro.
9623
9624         * output.h: (struct outp_driver) Removed members output, filename.
9625         
9626         * output.c: (outp_init) [!NO_POSTSCRIPT] Installs PostScript
9627         drivers in driver table.
9628         (outp_read_devices) Frees buf.  Warns if there are no active
9629         output drivers.
9630         (outp_configure_clear) Sets outp_configure_vec to NULL after
9631         deleting its elements.
9632         (configure_driver, destroy_driver) Removed references to output,
9633         filename members of outp_driver.
9634         (outp_evaluate_dimension, internal_get_paper_size,
9635         outp_get_paper_size) New functions.
9636
9637         * postscript.c: Continued development.  Now links but doesn't make
9638         any marks on the page.  Lotsa bugs I suppose.
9639
9640         * str.c: (strcasecmp) [!HAVE_STRCASECMP] New function.
9641
9642         * str.h: Comment changes.
9643
9644 Sat Jul 27 22:32:38 1996  Ben Pfaff  <blp@gnu.org>
9645
9646         * Removed dependencies on non-nested comments in several files.
9647         Also removed references to (unix || __unix__) in #if's since
9648         prefh.orig makes those two equivalent.
9649         
9650         * ascii.c: (ascii_open_global) Creates ascii_arena.
9651         (ascii_close_global) Destroys ascii_arena.
9652         (ascii_init_driver) Doesn't create ascii_arena.
9653         (ascii_copy_driver) Removed.
9654         (ascii_option) Possible bugfix regarding %s vs. %.*s with a_string's.
9655         (outp_class ascii_class) Removed ascii_copy_driver reference.
9656
9657         * frequencies.q: Now can display all statistics except median.
9658         Still not finished.
9659
9660         * output.c: Handles outp_class.ref_count so output class
9661         destructors are called properly.
9662         (add_class) Sets ref_count to 0.
9663         (configure_driver) Initializes class if ref_count++ is 0.
9664         (destroy_driver) Destructs class if --ref_count is 0.  Frees the
9665         class output file name.
9666         
9667         * output.h: (struct outp_class) Removed copy_driver, inited.
9668         Added ref_count.
9669
9670         * postscript.c: Completely replaced but not finished.
9671         
9672 Tue Jul 23 21:48:36 1996  Ben Pfaff  <blp@gnu.org>
9673
9674         * approx.h: #includes <float.h>.
9675
9676         * arena.h, arena.c: Many functions changed to take an arena **
9677         instead of an arena *, for consistency.  All callers changed.
9678         (arena_alloc) Now creates a new arena if passed *A that is NULL.
9679         (arena_destroy) Sets *A to NULL.
9680         
9681         * ascii.c: (delineate) Implements OUTP_T_VERT correctly.  Removed
9682         assertion that `width' be positive.
9683
9684         * command.c: Removed #if's from cmd_table.
9685         (walk_cmdtable_func) [0] New function (debug code).
9686         (init_cmd_parser) [0] Dumps out cmd_table (debug code).
9687         (parse_cmd) Doesn't return failure for unimplemented commands.
9688
9689         * common.h: (SYSMIS) Changed from DBL_MAX to -DBL_MAX.
9690         (SYSCODE) New constant macro.
9691
9692         * descript.q: Checks for positive n_variables before performing
9693         analysis.
9694
9695         * file-handle.q: (get_handle_by_filename) Bug fix: passes &f to
9696         avl_find instead of &fp as arg 2.
9697
9698         * frequencies.g, frequencies.q: Continued updating; now compiles &
9699         works again, but not complete.
9700
9701         * main.c: Changes to user messages.
9702
9703         * misc.c: (reverse) [0] New function.
9704
9705         * settings.h: Comment removed.  #includes "common.h".
9706
9707         * som.c: (som_set_null) New function.
9708         (som_set_value, som_set_string, som_set_text) More detailing
9709         assertions.
9710         (som_set_float) Implemented function.
9711         (dump_columnated_table) Bug fix regarding page breaks.
9712         (draw_cell) Bug fix regarding text that spilled out of a cell.
9713         (draw_intersection, draw_horz_rule, draw_vert_rule) No longer draw
9714         null lines.
9715         (get_cell_size) Support SCON_EMPTY cells.
9716         (get_table_size) When calculating rules' widths and heights, mask
9717         out SLIN_SPACING bit.  Added SOPT_X_HLTL support.
9718         
9719         * som.h: (som_any_cell) New option SOPT_X_HTLT.  Removed
9720         SOPT_X_SHADE.
9721         (struct som_submission_form) New member `header'; all users
9722         changed.
9723
9724         * val-labs.c: (get_label) User messages changed.
9725
9726         * var.h: Changed FREQUENCIES structures.
9727
9728         * vars-atr.c: (is_num_user_missing, is_str_user_missing) Made
9729         inline.
9730         
9731 Fri Jul 19 19:11:13 1996  Ben Pfaff  <blp@gnu.org>
9732
9733         * approx.h: Definition of EPSILON now depends on system's
9734         DBL_EPSILON.  Removed GNU C specific code.
9735         (cmpapx) Renamed approx_compare.
9736
9737         * frequencies.g, frequencies.q: Continued updating; still doesn't
9738         compile.
9739
9740         * groff-font.c: (name_to_index) Fix bug that kept it from
9741         compiling.
9742
9743         * hash.c, hash.h: Completed work.
9744
9745         * var.h: Changes to freq_tab, frequencies_proc.
9746         
9747 Wed Jul 17 21:23:36 1996  Ben Pfaff  <blp@gnu.org>
9748
9749         New hashing code.
9750         * hash.c, hash.h: New files.  Not completed.
9751         * Makefile.am: Added hash.c to source file list.
9752         * font.h: (struct font_desc) New member kern_size_p.
9753         * groff-font.c: Uses hash.h.
9754         (hashpjw) Moved to hash.c.
9755         (next_prime_power) Rewrote, renamed hsh_next_prime, moved to
9756         hash.c.
9757         (static var hash) New member size_p.
9758         * var.h: Includes hash.h.
9759         (struct freq_tab) Changed AVL_TREE to hash_tab.
9760
9761         * vars-prs.c: Comment, formatting fixes.
9762
9763         * frequencies.g, frequencies.q: Continued updating.  Not yet
9764         working.
9765
9766         * formats.c: Bug fix.
9767
9768 Tue Jul 16 22:10:04 1996  Ben Pfaff  <blp@gnu.org>
9769
9770         Increasing parallelism between DESCRIPTIVES and FREQUENCIES.
9771         * descript.g: Comment fixes.
9772         * descript.q: Comment fixes.  Moved some declarations into var.h.
9773         Made dsc_info a static table.  Updated FIXMEs.
9774         (internal_cmd_descriptives) Beautified.
9775         
9776         * frequencies.q: Started updating into working order.
9777         * frequencies.g: New file analogous to descript.g.
9778         * var.h: Comment fixes.  Added structures for FREQUENCIES.
9779         
9780         * som.c: Removed vestiges of crushing and partial table support.
9781
9782 Sun Jul 14 15:45:31 1996  Ben Pfaff  <blp@gnu.org>
9783
9784         * Many more changes to som.c especially, but these will not be
9785         documented as I have resolved to remove them.  This patchlevel is
9786         being released solely so that I can fall back to it if I decide
9787         that removing the changes is not a good idea.
9788
9789 Sat Jul 13 09:58:44 1996  Ben Pfaff  <blp@gnu.org>
9790
9791         * som.c: (global var som) New member `cum_y'.
9792         (build_target) Properly handles titles for partial tables.
9793         (dump_partial_beg, dump_partial_mid, dump_partial_end)
9794         Merged into single new function dump_partial().  Fixed problem
9795         with titles on partial tables.
9796         (dump_table) Calls dump_partial() for all parts of partial tables.
9797         (dump_page) Criteria for drawing title changed.
9798         
9799 Fri Jul 12 22:03:36 1996  Ben Pfaff  <blp@gnu.org>
9800
9801         * command.c: (cmd_table) Added LIST, WEIGHT.
9802
9803         * command.c: (cmd_remark) No longer frees `s' since it's not
9804         dynamically allocated.
9805         
9806         * data-out.c: (convert_f) Now correctly handles the case where
9807         abs(v->f)<1 but v->f rounds to a value of 1.00 given the specified
9808         number of decimals.
9809         (som_destroy_all_tables) Removed argument.  All callers changed.
9810         (som_vline, som_hline) Argument validity checking corrected.
9811         (som_set_value) Implemented half-heartedly.
9812         (replicate_table) Copies tables piece-by-piece when using Checker.
9813
9814         * som.h: New line style SLIN_1THIN, currently equivalent to
9815         SLIN_0.  New enum set SOM_SUB_*.
9816         (struct som_submission_form) Removed `seq_no'.  Added `type'.
9817         
9818         * list.q: Newly working file; uses partial tables.
9819         
9820         * som.c: (som_reduce_table) Renamed som_set_table_height().
9821         (som_crush) Removed argument `group'.
9822         (global var som) Removed `nt', `seq_no'.  Added `type'.
9823         (som_submit_table) Arguments changed.
9824         (output_table) Removed partial table code.
9825         (build_target) New arg; partial table support added.  All callers
9826         changed.
9827         (dump_plain_table) Removed partial table code.
9828         (dump_partial_beg, dump_partial_mid, dump_partial_end) New functions.
9829         (dump_table) Supports partial tables.
9830         (dump_page) New argument to allow not drawing top and/or bottom
9831         headers.  All callers changed.  Supports partial tables.
9832
9833 Sat Jul  6 22:22:25 1996  Ben Pfaff  <blp@gnu.org>
9834
9835         * data-out.c: Changed `#include <approx.h>' to `#include
9836         "approx.h".
9837         (convert_F) Comment fix.  Now won't print `-.000', etc.
9838
9839         * descript.q: Now Z-scores work, although there appears to
9840         be a bug (which might actually be in data-out.c:convert_F()).
9841         (descriptives_trns_proc, descriptives_trns_free) New functions.
9842         (run_z_pass) Implemented.
9843         
9844         * var.h: Comment fixes.
9845         (dsc_z_score, descriptives_trns) New structs.
9846         (descriptives_trns) Added to any_trns as `dsc'.
9847
9848         * error.c, error.h: New error class, IS (Installation Script
9849         error), used in those instances where the error is in the
9850         installation, but there is a script file or installation file that
9851         can be usefully referred to.
9852         
9853         * output.c: Change many IE classes to IS classes.
9854
9855         * cases.c, command.c, common.c, crosstabs.q, expr-evl.c,
9856         frequencies.q, list.q, vars-prs.c, vfm.c: Removed reference to
9857         HAVE_MALLOC_H because Borland C++ alloca() is broken, so why
9858         include the corresponding header?
9859         
9860         * glob.c: (init_glob) Don't malloc term_buffer under Checker.
9861         Don't bail out if termcap can't be read.
9862
9863         * som.c: (som_destroy_table) Removed.
9864         (som_reduce_table, som_destroy_all_tables) New functions.
9865         (som_crush) New function, not implemented.
9866         
9867         * som.h: New table option STAB_CRUSH.  Comment fix.  New struct
9868         som_submission_form.  Function prototypes revised.
9869
9870         Outputting huge tables (1000s of rows) a few rows at a time
9871         is supported, though untested.  May even break everything.
9872         Actually, the code doesn't even compile right now.
9873         * som.c: (struct som) New fields htv, nt, seq_no.
9874         (som_submit_table) Multiple arguments changed to a single
9875         pointer to struct submission_form.  Only increments subtable_num
9876         if seq_no is zero.  Only destroys table if it's not going to
9877         be reused.
9878         (replicate_table) New function.
9879         (output_table) Comment fix.
9880         (examine_table) Changed inline code to code calling
9881         replicate_table().  Calculates htv.  Supports partial tables.
9882         (draw_title) Removed comment.
9883         (build_target) Only allows for title on first part of partial
9884         tables.
9885         (dump_plain_table) Only resets table chunk number on first part
9886         of partial tables; FIXME: doesn't work quite right.  Supports
9887         partial tables.
9888         (dump_page) Titles only on first part of partial tables.
9889
9890 Fri Jul  5 20:16:19 1996  Ben Pfaff  <blp@gnu.org>
9891
9892         * Thanks to an unreliable IDE hard drive, I have spent the last
9893         day reconstructing my Debian GNU/Linux installation and redoing
9894         the previous day's changes--somehow I managed to save every file
9895         except for output.c and output.h.  So the following changes could
9896         really be considered independent of the output.c, output.h changes
9897         from Jul 4.
9898
9899         * output.h, output.c: Moved the outp_configure_vec global var,
9900         outp_names struct, and enum set OUTP_S_* from output.h to output.c.
9901         outp_configure_vec is now static.
9902         
9903 Thu Jul  4 20:20:24 1996  Ben Pfaff  <blp@gnu.org>
9904
9905         * The entire philosophy behind configuration of the output drivers
9906         changed.  Now there is a termcap-type configuration where drivers
9907         to be read are determined beforehand, rather than parsing the
9908         entire output init file and storing it in memory & deciding what
9909         to actually use later.  Faster & more memory-efficient at the same
9910         time, cool.
9911         
9912         * output.c: Comment fix.  Removed outp_init_drivers global var.
9913         Removed all references to synonyms.  New structure outp_defn.  New
9914         global vars outp_macros, outp_configure_vec.
9915         (search_name, delete_name, add_name, check_configure_vec,
9916         expand_name, find_defn_value) New static functions.
9917         (outp_configure_clear, outp_configure_add, outp_configure_macro,
9918         outp_read_devices) New extern functions.
9919         (outp_init) Much functionality moved into outp_read_devices.
9920         (outp_read_devices) Format of output init file changed; name of
9921         file is `devices' rather than `output' to avoid Makefile
9922         conflicts.
9923         (outp_clear) Renamed outp_done.
9924         (outp_list_classes) Bug fix, cleaned up.
9925         (outp_list_drivers) Not implemented anymore.
9926         (outp_configure_driver) Now a static function; simplified; now
9927         interpolates macros; supports new structure.
9928         (outp_enable_driver, match_synonym) Removed; all references
9929         removed.
9930         (find_driver) First argument removed.
9931         
9932         * output.h: Global var outp_init_drivers removed; new structure
9933         outp_names; new enum set OUTP_S_*; new global var
9934         outp_configure_vec; function prototypes for output.c exports
9935         updated.
9936         
9937         * main.c: (main) Calls outp_read_devices() after parsing the
9938         command line.
9939         
9940         * cmdline.c: (parse_command_line) New option -v --verbose;
9941         --version changed to -V.  --device option changed syntax to just
9942         take a single device name.  Accepts key=value declaration of
9943         output init file macros.  Syntax message updated.
9944
9945         * filename.c: (expand_line) New function.
9946         (interp_environ_vars) Renamed interp_vars; no longer uses
9947         fixed-size buffer.
9948         (blp_getenv) Allows $ARCH and $VER pseudo-environment-vars to be
9949         overridden by real environment vars.
9950         (search_path) Uses verbose_msg() instead of #ifdef'd printf().
9951         * filename.h: interp_environ_vars() renamed interp_vars().
9952         
9953         * error.c, error.h: Added extern variable `verbosity', message
9954         class MM.
9955         
9956         * error.c: (vmsg) Support message class MM.
9957         (verbose_msg) New function.
9958
9959         * descript.q: (generate_z_varname) Bug fix in generation of
9960         Z-score varnames.
9961         (dump_z_table) Bug fix in column headers.
9962         
9963         * ascii.c: (ascii_init_driver) Changed minimum number of lines per
9964         page from 29 to 15.  Don't set a default for ops[OPS_INIT,
9965         OPS_DONE].  Writes the uninit string when the driver is closed.
9966         (ascii_open_page) Write the init string before the first page.
9967         (output_shorts) Form of main loop changed from `while' to `for'.
9968         Bug fix with overstrikes: the character is printed *after* the
9969         backspace.  Eliminated a lot of `& 0xff' modifiers.
9970         (advance_to_left_margin) New function.
9971         (return_carriage, output_lines) Handle left margin.
9972
9973 Thu Jul  4 00:35:59 1996  Ben Pfaff  <blp@gnu.org>
9974
9975         * ascii.c: New option `carriage-return-style'.
9976
9977         * ascii.c: (count_fancy_chars) New function.
9978         (delineate, text_metrics) Use new function; bug fixes regarding
9979         rich text strings.
9980         (text_draw) Bug fix with rich text.
9981         (output_string, output_shorts) Reordered.
9982         (output_shorts) Now handles boxchars and some overstrike font
9983         changes.
9984         (output_char, return_carriage) New functions.
9985         (output_lines) Now handles overstriking and font changes properly;
9986         some code moved to output_shorts.
9987
9988 Tue Jul  2 22:13:23 1996  Ben Pfaff  <blp@gnu.org>
9989
9990         [GLOBAL_DEBUGGING]
9991         * ascii.c: New member `debug' in ascii_driver_ext.
9992         (ascii_init_driver, delineate) Uses new member.
9993
9994         Now you can set a vertical height on writing text.
9995         * ascii.c: (delineate) Keeps track of vertical position.
9996         (text_draw) No longer considers fully justified text an internal
9997         error.
9998         
9999         * output.h: New flag OUTP_T_VERT; other OUTP_T_ values changed.
10000
10001         Tables' titles are drawn; they can have variable height.
10002         * som.c: `som' struct has new member, title_height.
10003         (draw_title) New argument.  Moved within file.  All caller
10004         changed.
10005         (build_target) New argument, amount of space needed for first row.
10006         Calculates height of title, takes that into account.  All callers
10007         changed.
10008         (dump_plain_table, dump_columnated_table) Took calculation of y1,
10009         y2 out of loop.
10010         (dump_columnated_table) [GLOBAL_DEBUGGING] Debugging code
10011         improved.
10012         (dump_columnated_table) Organized for readability.
10013         (dump_page) Makes use of som.title_height.
10014
10015         * som.c: Many comment bug fixes.
10016
10017         * descript.q: (try_name, generate_z_name) Bug fix regarding
10018         generation of Z-score variable names.
10019         * var.h: Removed num from descriptives_proc; all referents removed.
10020
10021 Mon Jul  1 22:13:39 1996  Ben Pfaff  <blp@gnu.org>
10022
10023         * ascii.c: (ascii_line_horz, ascii_line_vert,
10024         ascii_line_intersection) Added debugging code.
10025
10026         Added a descriptive line above each table to describe it.
10027         * command.c: (parse_cmd) Calls som_new_series.
10028         
10029         * som.c: New static vars table_num, subtable_num.  New `som'
10030         member `title'.
10031         (dump_page) New arguments.
10032         (som_submit_table) Handle new variables.
10033         
10034         * som.c, som.h: (som_submit_table) New arguments.  All callers
10035         changed.
10036         (som_new_series) New function.
10037         (build_target) Makes room for extra line.
10038         (draw_title) New function.
10039         (dump_page) Calls draw_title.  Bug fix: doesn't always set
10040         som.ext->cp to 0.
10041         
10042         Columnation of tables support.
10043         * som.h: Deleted fr, lr, ri from som_table.  Reorganized.
10044         
10045         * som.c: Deleted references to fr, lr, ri.
10046         (som_columnate) Bux fix: sets group member of table.
10047         (som_add_options) Function removed.
10048         (dump_table) Split into three functions; extensively reworked.
10049         
10050         * descript.q: (dump_z_table) Better output table formatting; added
10051         title support to correspond to som.h changes.
10052         (display) Title support.
10053
10054         * output.h: Added OUTP_T_NONE.
10055         
10056 Mon Jul  1 13:00:00 1996  Ben Pfaff  <blp@gnu.org>
10057
10058         * descript.q: Improved handling of Z scores; still not perfect.
10059         
10060         * output.h, ascii.c: Added hook for getting em width of current
10061         font.
10062         
10063         * som.c: Uses new em-width hook.  Added debugging code to
10064         several functions.
10065         (som_columnate) New argument.
10066         (som_add_options) Removed.
10067
10068 Jun 29 17:40:47 1996  Ben Pfaff  <blp@gnu.org>
10069
10070         * som.h, som.c, output.c, output.h, ascii.c: Updated to work with
10071         rules as a property of the table instead of as a property of the
10072         cells.
10073         
10074         * ascii.c: Added `header' to table of options.
10075         
10076         * descript.q: Added even shorter statistic names; modified to work
10077         with new som interface.
10078         
10079         * misc.c (blp_getdelim): Bug fix.
10080         
10081         * version.c: includes 'conf.h'.
10082         
10083 ----------------------------------------------------------------------
10084 Local Variables:
10085 mode: change-log
10086 version-control: never
10087 End: