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