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