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