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