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