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