38401f8d68fec202bff9ba44238289cc60957cbe
[pspp-builds.git] / src / ChangeLog
1 Sat May 14 08:22:26 WST 2005 John Darrington <john@darrington.wattle.id.au>
2
3         * dfm-read.c: Fixed polarity of test in dfm-close-reader.  Closes 
4         Bug #13082
5
6 Tue May 10 20:08:18 2005  Ben Pfaff  <blp@gnu.org>
7
8         * data-in.c: (data_in) Add assertion to check input specifier.
9
10         * data-out.c: (data_out) Add assertion to check output specifier.
11
12 Tue May 10 19:56:35 2005  Ben Pfaff  <blp@gnu.org>
13
14         Fix PR 13054.
15
16         * format.c: (check_input_specifier) Improve error message.
17         (check_input_specifier) Check F, COMMA, and DOLLAR formats for
18         valid decimal places.
19         (check_output_specifier) Ditto (but different criteria).
20         (convert_fmt_ItoO) Assert valid input and output specifiers.
21         Also, if input specifier has *any* decimal places, make the output
22         specifier 1 place wider.
23
24 Mon May  9 07:14:29 WST 2005 John Darrington <john@darrington.wattle.id.au>
25
26         * sysfile-info.c: Fixed bug [# 13024 ]
27
28 Sun May  8 13:52:12 2005  Ben Pfaff  <blp@gnu.org>
29
30         "Fix" PR 13021 by disabling FILE TYPE.  Eventually, we should
31         actually implement it.
32
33         * command.c: (FILE_TYPE_okay) Always return 1.
34
35         * command.def: Change FILE TYPE, END FILE TYPE into UNIMPL.
36
37         * file-type.c: Add prototypes to get rid of warnings.
38
39 Sun May  8 08:08:07 WST 2005 John Darrington <john@darrington.wattle.id.au>
40
41         * barchart.c box-whisker.c cartesian.c piechart.c plot-hist.c: Fixed 
42         more ISO/IEC 9899:1990 conformance issues.
43
44 Wed May  4 23:54:02 2005  Ben Pfaff  <blp@gnu.org>
45
46         Fix PR 12948.  See also new test in
47         tests/bugs/match-file-scratch.sh.
48         
49         * get.c: (mtf_merge_dictionary) Don't compact dictionary because
50         that deletes scratch variables that someone else might be using,
51         and because we can't reassign our sources' value indexes.
52         Instead, simply don't copy scratch variables into the master
53         dictionary.
54
55         * dictionary.c: (dict_compact_values) Delete variables from the
56         dictionary passed in, not from default_dict (!).
57
58 Tue May  3 22:25:17 2005  Ben Pfaff  <blp@gnu.org>
59
60         Improve hash.c comments, error-checking.
61         
62         * hash.c: (struct hsh_table) [NDEBUG] Add hash_ordered member.
63         (hsh_create) size == 0 should *not* return NULL!  Set
64         hash_ordered.
65         (hsh_clear) Set hash_ordered.
66         (locate_matching_entry) Check hash_ordered.
67         (hsh_rehash) Rename rehash().  Add assertion.  Set hash_ordered.
68         (hsh_data) Set hash_ordered.  Add const-ness to return value and
69         update all callers.
70         (hsh_sort) Ditto.       
71
72 Wed May  4 08:50:11 WST 2005 John Darrington <john@darrington.wattle.id.au>
73
74         * casefile.c: Removed unnecessary #include <valgrind/valgrind.h>
75
76 Tue May  3 19:14:48 WST 2005 John Darrington <john@darrington.wattle.id.au>
77
78         * copyleft.c: Updated copyright date.
79
80         * Makefile.am: Removed erroneous explicit "-lplot"
81
82         * examine.q oneway.q: Made these files conform to ISO/IEC 9899:1990
83
84 Tue May  3 16:20:31 WST 2005 John Darrington <john@darrington.wattle.id.au>
85
86         * command.c command.def: Added description string for unimplemented commands.
87
88         * oneway.q: Sorted the hash tables before shipping out the results. Closes 
89         bug [#12931].
90
91 Mon May  2 23:45:01 2005  Ben Pfaff  <blp@gnu.org>
92
93         Code improvements.
94         
95         * data-list.c:  (parse_fixed) Use lex_end_of_command().
96         (parse_free) Ditto.
97         (cmd_repeating_data) Set cont_end.num in right situations.
98         (parse_repeating_data) Remove redundant test.
99
100 Mon May  2 23:37:19 2005  Ben Pfaff  <blp@gnu.org>
101
102         Partial fix for PR 12859.
103         
104         * data-list.c: (cmd_data_list) Add transformation properly in
105         vfm_source == NULL case.
106
107 Mon May  2 23:27:28 2005  Ben Pfaff  <blp@gnu.org>
108
109         * lexer.c: (lex_error) Improve error messages.
110
111 Mon May  2 22:28:17 2005  Ben Pfaff  <blp@gnu.org>
112
113         * get.c: (cmd_match_files) Check token type before trying to match
114         tokid.  Fixes PR 12923.
115
116 Mon May  2 22:16:51 2005  Ben Pfaff  <blp@gnu.org>
117
118         * flip.c: [HAVE_SYS_TYPES_H] Include <sys/types.h>.  Fixes PR
119         12789.
120
121 Mon May  2 22:02:52 2005  Ben Pfaff  <blp@gnu.org>
122
123         * expressions/generate.pl: (get_token) Make use of /g
124         backward-compatible with Perl 5.6.1.
125
126 Sun May  1 23:00:19 2005  Ben Pfaff  <blp@gnu.org>
127
128         * var-display.c: (cmd_variable_alignment) Fix memory leak.
129         (cmd_variable_level) Ditto.
130
131 Sun May  1 22:49:04 2005  Ben Pfaff  <blp@gnu.org>
132
133         Hash table had buggy deletion function.  The fix required changing
134         other functions to do probing in the required order.
135
136         * hash.c: (locate_matching_entry) Rewrite and change interface.
137         (hsh_rehash) Rewrite to use locate_matching_entry().
138         (hsh_probe) Ditto.
139         (hsh_find) Ditto.
140         (hsh_delete) Ditto.  Also, fix stupid bugs.
141
142 Sun May  1 22:24:58 2005  Ben Pfaff  <blp@gnu.org>
143
144         * dictionary.c: (dict_clone) Properly copy vectors.
145
146 Sun May  1 22:07:58 2005  Ben Pfaff  <blp@gnu.org>
147
148         New implementation of long variable names.  Each variable has a
149         "normal" name, which may be up to 64 bytes long and which is used
150         for all normal operations.  Variables may have a "short" name,
151         which is limited to 8 bytes and used only for system and portable
152         file input and output.
153         
154         Make tokid case-preserving.  Update most uses of tokid to treat it
155         case-insensitively.
156
157         Update many commands to deal with long variable names.
158
159         * autorecode.c: (cmd_autorecode) Use strcasecmp() instead of strcmp().
160
161         * command.c: (cmd_parse) Ditto.
162         (match_strings) Use toupper() before comparing characters.
163         (conflicting_3char_prefixes) Use mm_case_compare() instead of
164         memcmp().
165         (cmd_match_words) Ditto.
166
167         * compute.c: (lvalue_parse) Use st_trim_copy() instead of
168         strncpy().
169
170         * count.c: (struct cnt_var_info) Change n[] to fit long var name.
171         Use st_trim_copy() instead of strcpy().
172
173         * data-in.c: (parse_enum) Use mm_case_compare() instead of
174         memcmp().
175
176         * data-list.c: (struct dls_var_spec) Change name[] to fit long var
177         name.
178         (parse_free) Use st_trim_copy() instead of strcpy().
179
180         * descript.c: (struct dsc_var) Change z_name[] to fit long var
181         name.
182         (try_name) Use strcasecmp() instead of strcmp().
183         (generate_z_varname) Use st_trim_copy() instead of strcpy().
184         (descriptives_compare_dsc_vars) Use strcasecmp() instead of
185         strcmp().
186
187         * dictionary.c: (struct dictionary) Removed `long_name_tab'
188         member.
189         (compare_long_names) Removed.
190         (hash_long_name) Removed.
191         (dict_create) Don't initialize `long_name_tab' member.
192         (dict_clone) Copy short names into new dictionary. 
193         (dict_clear) Don't clear `long_name_tab' member.
194         (dict_get_varname_block) Removed.
195         (dict_add_longvar_entry) Removed.
196         (free_nte) Removed.
197         (dict_destroy) Don't destroy `long_name_tab' member.
198         (dict_create_var_from_short) Removed.
199         (dict_create_var_x) Removed.
200         (dict_create_var) Get rid of longname handling.
201         Clear short name.
202         (dict_clone_var) Get rid of longname parameter and longname
203         handling.
204         (dict_lookup_var) Get rid of longname handling.
205         (dict_reorder_var) New function.
206         (dict_rename_var) Clear short name.
207         (dict_rename_vars) Get rid of longname handling.  Clear short
208         names.
209         (dict_create_vector) Support long vector names.
210         (dict_lookup_vector) Use strcasecmp() instead of strcmp().
211         (quasi_base27) Removed.
212         (make_short_name) Removed.
213         (compare_strings) New function.
214         (hash_string) New function.
215         (dict_assign_short_names) New function.
216
217         * file-handle.q: (get_handle_with_name) Use strcasecmp() instead
218         of strcmp().
219         (get_handle_for_filename) Support long handle names.
220
221         * file-type.c: (struct col_spec) Make `name' fit long var names.
222         (cmd_file_type) Use strcasecmp() instead of strcmp().
223
224         * flip.c: (make_new_var) Rewrite.
225         (flip_sink_write) Use st_trim_copy() instead of strncpy().
226
227         * format.c: (parse_format_specifier_name) Use mm_case_compare()
228         instead of memcmp().
229
230         * get.c: (cmd_save_internal) Rephrase.
231         (rename_variables) Drop test for identical variable name.
232         (struct mtf_proc) Change `first', `last' to fit long var name.
233
234         * hash.c: (hsh_hash_case_string) New function for case-insensitive
235         string hashing.
236
237         * lexer.c: (restore_token) Use st_trim_copy() instead of
238         strncpy().
239         (lex_get) Don't uppercase string when copying into tokid.
240         (lex_put_back_id) Use st_trim_copy() instead of
241         strncpy().
242
243         * list.q: (determine_layout) Consider length of variable names in
244         choosing vertical layout.
245
246         * matrix-data.c: (cmd_matrix_data) Use strcasecmp() instead of
247         strcmp().
248         (string_to_content_type) Ditto.
249
250         * modify-vars.c: (compare_variables_given_ordering) Ditto.
251         (struct var_renaming) Change `new_name' to fit long var name.
252         (compare_var_renaming_by_new_name) Use strcasecmp() instead of
253         strcmp().
254
255         * pfm-read.c: (read_variables) Disallow system variables in system
256         files.
257         (write_variables) Call dict_assign_short_names() and use
258         short_name[] members.
259
260         * repeat.c: (internal_cmd_do_repeat) Use strcasecmp() instead of
261         strcmp().
262
263         * sfm-read.c: (sfm_open_reader) Rewrite code for long variable
264         map.  Reorder variables into same order as long variable map.
265         (read_variables) Set short name.
266
267         * sfm-write.c: (sfm_open_writer) Call dict_assign_short_names().
268         (write_variable) Use st_bare_pad_copy().
269         (write_longvar_table) Rewrite.
270
271         * str.c: (mm_case_compare) New function.
272
273         * sysfile-info.c: (compare_vectors_by_name) Use strcasecmp()
274         instead of strcmp().
275
276         * t-test.q: (tts_custom_groups) Remove redundant test.
277         (tts_custom_pairs) Ditto.
278
279         * var.h: (struct variable) Change `name' to fit long var names.
280         Remove `longname'.  Add `short_name' member.  Reorder some
281         variables.
282         (struct name_table_entry) Removed.
283         (struct vector) Change `name' to fit long vector names.
284
285         * vars-atr.c: (var_is_valid_name) Allow long var names.
286         (compare_var_names) Use strcasecmp() instead of strcmp().
287         (compare_var_ptr_names) Ditto.
288         (hash_var_name) Use hsh_hash_case_string().
289         (hash_var_ptr_name) Ditto.
290         (var_set_short_name) New function.
291         (var_clear_short_name) New function.
292         (var_set_short_name_suffix) New function.
293
294         * vars-prs.c: (parse_DATA_LIST_vars) Support long names.
295         Use strcasecmp() instead of strcmp().
296         (struct array_var_set) Removed `longname_tab'.
297         (array_var_set_lookup_var_idx) Drop longname_tab support.
298         (array_var_set_destroy) Don't destroy `longname_tab'.
299         (var_set_create_from_array) Don't create `longname_tab'.
300
301         * vector.c: (cmd_vector) Use strcasecmp() instead of strcmp().
302         Support long names.
303
304         * expressions/parse.c: (word_matches) Use mm_case_compare()
305         instead of memcmp().
306         (compare_strings) New function.
307         (lookup_function) Use compare_strings() instead of strcmp().
308         
309 Sun May  1 22:07:43 2005  Ben Pfaff  <blp@gnu.org>
310
311         * algorithm.c: (move_element) New function.
312
313 Sun May  1 22:05:35 2005  Ben Pfaff  <blp@gnu.org>
314
315         * aggregate.c: (parse_aggregate_functions) Always initialize
316         destvar.
317
318 Sun May  1 22:03:47 2005  Ben Pfaff  <blp@gnu.org>
319
320         * aggregate.c: (cmd_aggregate) Use dict_clone_var_assert().
321
322         * dictionary.c: (dict_clone) Ditto.
323         (dict_clone_var_assert) New function.
324
325         * get.c: (mtf_merge_dictionary) Use dict_clone_var_assert().
326
327 Sun May  1 15:05:54 WST 2005 John Darrington <john@darrington.wattle.id.au>
328
329         * error.c: Added a string for the compiler version to the
330         request_bug_report_and_abort function.
331
332         * groff_font.c, font.c: Removed manpage(1) style references from 
333         comments, because RMS frowns upon them.
334
335 Thu Apr 28 18:52:06 2005  Ben Pfaff  <blp@gnu.org>
336
337         * expressions/parse.c: Improve previous fix for PR 12858 (LAG).
338
339 Fri Apr 29 09:28:00 WST 2005 John Darrington <john@darrington.wattle.id.au>
340
341         * expressions/parse.c: Added handler for OP_LAG_Vn and OP_LAG_Vs.  
342         Fixed bug [#12858] .
343
344 Wed Apr 27 12:42:34 WST 2005 John Darrington <john@darrington.wattle.id.au>
345
346         * loop.c recode.c repeat.c: Fixed a couple of instances of SHORT_NAME_LEN 
347         which should be LONG_NAME_LEN
348
349 Wed Apr 27 07:43:50 WST 2005 John Darrington <john@darrington.wattle.id.au>
350
351         * command.def echo.c:  Added the ECHO command.
352
353 Mon Apr 25 22:55:59 2005  Ben Pfaff  <blp@gnu.org>
354
355         Finish fixing MATCH FILES (PR 11677).
356
357         * get.c: (trim_dictionary) Rewrite in terms of drop_variables(),
358         keep_variables(), rename_variables().
359         (drop_variables) New function.
360         (keep_variables) New function.
361         (struct mtf_file) Rename `in' to `in_name'.  Add `in_var'.
362         (cmd_match_files) Deal with in_var.  Use drop_variables(),
363         keep_variables().  When IN is specified, require BY.  Set master
364         variables after master dictionary is complete.  Add IN variables
365         after master dictionary is complete.
366         (mtf_free_file) Free `in_name'.
367         (mtf_delete_file_in_place) Set in_var value to 0.
368         (mtf_read_nonactive_records)  Rephrase.
369         (mtf_processing) Support IN.  Rephrase.  Fix bugs.
370         (mtf_merge_dictionary) Don't set master variables; we do that
371         later now.
372         (get_master) Don't insist that there's a master variable.
373         
374 Mon Apr 25 22:55:22 2005  Ben Pfaff  <blp@gnu.org>
375
376         Kluge to make some variable renaming sort of work.
377         Needs real fix.
378
379         * dictionary.c: (dict_rename_var) Call dict_add_longvar_entry().
380
381 Mon Apr 25 22:52:28 2005  Ben Pfaff  <blp@gnu.org>
382
383         Add functions for comparing sets of variables between cases.
384         Use the functions.
385
386         * case.c: (case_compare) New function.
387         (case_compare_2dict) New function.
388         
389         * aggregate.c: (struct agr_proc) Remove `prev_break' member.  Add
390         `break_case'.
391         (cmd_aggregate) Nullify break_case.  Don't call
392         initialize_aggregate_info().
393         (agr_destroy) Destroy break_case.
394         (aggregate_single_case) Rewrite.  Use case_compare().
395         (dump_aggregate_info) Copy from break_case into output.
396         (initialize_aggregate_info) Copy break_case from input.
397
398         * get.c: (mtf_compare_BY_values) Use case_compare_2dict().
399
400         * vfm.c: (equal_splits) Use case_compare().
401
402 Sat Apr 23 17:01:04 WST 2005 John Darrington <john@darrington.wattle.id.au>
403
404         * dictionary.c vars-prs.c sfm-write.c: Fixed some memory leaks
405
406 Sun Apr 17 23:08:15 2005  Ben Pfaff  <blp@gnu.org>
407
408         Start work on fixing MATCH FILES.
409
410         * get.c: (enum operation) Remove OP_MATCH.
411         (trim_dictionary) Change return value to bool.  Don't support
412         OP_MATCH.
413         (struct mtf_file) Remove `first', `last' members.
414         (struct mtf_proc) Add `first', `last' members.  Change mtf_case
415         from `struct ccase *' to `struct ccase'.  Remove `by' member.
416         (cmd_match_files) Essentially rewrite.
417         (mtf_free) Don't free `by' member.  Destroy `mtf_case' member.
418         (mtf_read_nonactive_records) mtf_ parameter is not unused.
419         (mtf_processing) Ditto.  Also rephrase some code.
420         (mtf_merge_dictionary) Rewrite for easy comprehension.  
421
422 Sun Apr 17 23:06:00 2005  Ben Pfaff  <blp@gnu.org>
423
424         * matrix-data.c: (wr_output_data) [DEBUGGING] Fix compilation
425         error.
426
427         * q2c.c: (dump_token) [DEBUGGING] Fix compilation error.
428         
429 Thu Apr 14 2005 John Darrington
430
431         * var-display.c: New file.
432
433         * format.h var.h sfm-read.c sfm-write.c dictionary.c :  Added 
434           display_width, measure and alignment parameters to variables.
435
436         * aggregate.c command.def compute.c count.c data-list.c descript.c
437           dictionary.c dictionary.h expr-prs.c file-type.c flip.c get.c 
438           lexer.c lexer.h loop.c modify-vars.c pfm-read.c recode.c repeat.c 
439           sfm-read.c sfm-write.c sfm-write.h sfmP.h val-labs.c val.h var.h 
440           vars-prs.c vector.c :  
441               - Replaced literal constants representing maximum variable name 
442                 length with macro definitions. 
443               - Added support for long variable names.
444               - Changed lexer such that it no longer makes tokens upper
445                 case, but relies upon case insensitive behaviour of commands.
446
447 Mon Apr  4 22:27:34 2005  Ben Pfaff  <blp@gnu.org>
448
449         * aggregate.c: (parse_aggregate_functions) If dict_create_var()
450         fails, don't dereference the resulting null pointer (PR 12427).
451         Also, fix double free error.
452
453 Sat Mar 19 23:06:02 2005  Ben Pfaff  <blp@gnu.org>
454
455         * aggregate.c: (parse_aggregate_functions) Fix N_NO_VARS format.
456         (accumulate_aggregate_info) Set int1 to 1 for SUM.
457         (dump_aggregate_info) Only make SUM non-missing if there was at
458         least one variate.
459
460 Sat Mar 19 14:48:19 2005  Ben Pfaff  <blp@gnu.org>
461
462         * aggregate.c: (dump_aggregate_info) Properly test whether the
463         destination variable is numeric, when making the result
464         system-missing for columnwise missing values.
465
466 Mon Mar 14 21:52:34 2005  Ben Pfaff  <blp@gnu.org>
467
468         * misc.h: Remove GCC specializations.
469
470 Mon Mar 14 21:07:23 2005  Ben Pfaff  <blp@gnu.org>
471
472         Make sort stable (PR 12313).
473         
474         * sort.c: Don't need to include some headers anymore.
475         (static var min_buffers) New variable.
476         (static var max_buffers) New variable.
477         (static var allow_internal_sort) New variable.
478         (cmd_sort_cases) Add test mode.
479         (sort_execute) Rephrase.
480         (do_internal_sort) Don't try internal sorting if
481         allow_internal_sort is set.
482         (struct external_sort) Renamed `initial_runs' to `runs' and
483         updated all references.
484         (macro MIN_BUFFER_TOTAL_SIZE_RECS) Removed.
485         (macro MIN_BUFFER_SIZE_BYTES) Removed.
486         (macro MIN_BUFFER_SIZE_RECS) Removed.
487         (compare_initial_runs) Removed.
488         (struct record_run) Add member `idx'.
489         (write_initial_runs) Pass increasing values to process_case() as
490         index.
491         (process_case) Add `idx' parameter and use it to initialize new
492         `idx' member.
493         (allocate_cases) Limit allocated buffers to max_buffers.
494         (compare_record_run) Use new `idx' member for last resort
495         comparison, for stability.
496         (end_run) Call casefile_sleep() on irs->casefile, to prevent
497         running out of file descriptors.
498         (struct merge_state) Removed.
499         (merge) Don't need to allocate cases.  Always use MAX_MERGE_ORDER
500         unless we have fewer runs left.  Always merge consecutive runs,
501         for stability.  Return the final run.
502         (mod) Removed.
503         (choose_merge) New function.
504         (merge_once) Rewritten.
505
506 Mon Mar 14 21:05:42 2005  Ben Pfaff  <blp@gnu.org>
507
508         * cmdline.c: (static var testing_mode) Move into
509         parse_command_line().
510         
511 Mon Mar 14 21:05:13 2005  Ben Pfaff  <blp@gnu.org>
512
513         * algorithm.c: (remove_range) New function.
514         (remove_element) New function.
515
516         * dictionary.c: (dict_delete_var) Use remove_element().
517
518         * flip.c: (cmd_flip) Ditto.
519
520 Sun Mar 13 22:52:05 2005  Ben Pfaff  <blp@gnu.org>
521
522         * file-handle.q: (struct file_handle) `open_mode' should not be
523         const.
524         
525 Sun Mar 13 22:40:54 2005  Ben Pfaff  <blp@gnu.org>
526
527         First phase of making SORT CASES stable (PR 12313).
528
529         * sort.c: (struct indexed_case) New structure.
530         (do_internal_sort) Rewrite to make internal sorting stable.
531         (compare_case_dblptrs) Removed.
532         (compare_indexed_cases) New function.
533
534 Sun Mar 13 22:38:40 2005  Ben Pfaff  <blp@gnu.org>
535
536         Clean-ups.
537
538         * casefile.c: (casereader_read_xfer_assert) New function.
539
540         * dictionary.c: (dict_compact_case) New function.
541
542         * flip.c: (struct flip_pgm) New member idx_to_fv.
543         (cmd_flip) Initialize idx_to_fv member.
544         (destroy_flip_pgm) Free idx_to_fv member.
545         (flip_sink_write) Use struct flip_pgm member instead of case_sink
546         member.
547         (flip_sink_write) Ditto.
548
549         * vfm.c: (write_case) Use dict_compact_case() instead of
550         compact_case().
551         (compact_case) Removed.
552         (storage_source_create) Removed `dict' parameter.  All references
553         updated.
554
555         * vfm.h: (struct case_source) Removed `value_cnt' member.  All
556         references removed.
557         (struct case_sink) Removed `dict', `idx_to_fv' members.  All
558         references removed.
559
560 Sun Mar 13 22:35:55 2005  Ben Pfaff  <blp@gnu.org>
561
562         More AGGREGATE fixes.
563
564         * aggregate.c: (accumulate_aggregate_info) Implement NMISS and
565         NUMISS for strings.  Fix FOUT, POUT, FGT, FLT, FIN, FOUT for
566         strings.
567         (initialize_aggregate_info) Fix initialization for MIN, MAX for
568         strings.
569
570 Sat Mar 12 23:26:21 2005  Ben Pfaff  <blp@gnu.org>
571
572         Start work on testing and debugging AGGREGATE.
573
574         * aggregate.c: (cmd_aggregate) Use discrete bool variables instead
575         of a bit-map.  Require proper subcommand ordering.  Make OUTFILE
576         subcommand mandatory.
577         (parse_aggregate_functions) Check that PIN, POUT, FIN, FOUT
578         functions' arguments are in the correct order and swap them if
579         not.
580         (accumulate_aggregate_info) Make SUM include weights.  Add various
581         string functions.
582         (dump_aggregate_info) Add various string functions.
583         (initialize_aggregate_info) Initialize int1 for MIN, MAX.
584
585         * sort.c: (sort_parse_criteria) Add parameter for returning
586         whether any directions were specified.  All callers updated.
587
588 Sun Mar 13 14:54:27 WST 2005 John Darrington <john@darrington.wattle.id.au>
589
590         * t-test.q: Fixed erroneous logic in compare_group_binary.
591
592 Sat Mar 12 13:29:21 2005  Ben Pfaff  <blp@gnu.org>
593
594         * split-file.c: (cmd_split_file) Ignore LAYERED and SEPARATE
595         keywords (PR 11628).
596
597 Sat Mar 12 13:17:12 2005  Ben Pfaff  <blp@gnu.org>
598
599         * vfm.c: (procedure_with_splits) Fix PR 11492: end_func() must be
600         called *before* close_active_file().
601
602 Sat Mar 12 12:20:57 2005  Ben Pfaff  <blp@gnu.org>
603
604         * file-handle.q: (struct file_handle) Change open_mode from
605         character pointer to 3-char array, for safety.  Updated all
606         references.
607
608 Sat Mar 12 12:15:49 2005  Ben Pfaff  <blp@gnu.org>
609
610         Thanks to Ben Kujala <bkujala@oregonchildcare.org> for reporting
611         these bugs.
612         
613         * pfm-read.c: (read_header) Improve error message for many cases
614         in which the input is not actually a portable file.
615
616         * file-handle.q: (fh_open) When we give an error message, actually
617         return NULL.
618
619 Fri Mar 11 11:50:30 2005  Ben Pfaff  <blp@gnu.org>
620
621         * format.c: (check_common_specifier) New function for checks
622         common to check_input_specifier() and check_output_specifier().
623         (check_input_specifier) Use check_common_specifier().
624         (check_output_specifier) Use check_common_specifier().
625         (check_string_specifier) Removed.
626         (check_specifier_type) New function.
627         (check_specifier_width) New function.
628         (get_format_var_width) Fix bug.
629
630         * formats.c: (internal_cmd_formats) Only accept numeric variables.
631
632         * lexer.c: (check_id) Rename lex_id_to_token(), make public,
633         update all references.  Make case-insensitive.
634
635         * pfm-read.c: Essentially rewrite the whole file.  Now much
636         cleaner.
637
638         * print.c: (check_string_width) New function.
639         (fixed_parse_compatible) Use check_string_width(),
640         check_specifier_type().
641         (dump_fmt_list) Ditto.
642
643         * str.c: (st_trim_copy) New function.
644         (st_uppercase) New function.
645
646         * vars-atr.c: (var_is_valid_name) New function.
647         
648         * expressions/parse.c: (type_coercion_core) Use
649         check_specifier_type().
650         
651 Fri Mar 11 11:31:24 2005  Ben Pfaff  <blp@gnu.org>
652
653         * expressions/evaluate.c: (cmd_debug_evaluate) Fix memory leaks.
654
655         * expressions/parse.c: (no_match) Ditto.
656
657 Wed Mar  9 09:54:27 2005  Ben Pfaff  <blp@gnu.org>
658
659         * Makefile.am: (pspp_LDADD) Add libgsl-extras.a.
660
661         * expressions/helpers.c: (struct func_params) Removed.
662         (generalized_idf) Removed.
663         (cdf_beta) Removed.
664         (idf_beta) Removed.
665         (idf_fdist) Use gslextras_cdf_beta_Pinv() instead of idf_beta().
666
667         * expressions/operations.def: Implement IDF.BETA, CDF.BINOM,
668         CDF.GEOM, CDF.HYPER, CDF.NEGBIN, CDF.POISSON using gsl-extras.
669         Implement SIG.F, which I had overlooked previously.
670
671 Tue Mar  8 12:47:53 WST 2005 John Darrington <john@darrington.wattle.id.au>
672
673         * command.c command.def glob.[ch] cmdline.c: Made DEBUG cmds
674         available only in testing mode.
675
676 Sun Mar  6 23:25:40 2005  Ben Pfaff  <blp@gnu.org>
677
678         * data-in.c: Use `bool' throughout, where relevant.
679
680 Sun Mar  6 19:52:22 2005  Ben Pfaff  <blp@gnu.org>
681
682         DATA LIST with free-field formats should not have implied decimal
683         places (PR 12035).  Also clean up data-in.c a bit.
684
685         * data-in.h: (enum) Add DI_IMPLIED_DECIMALS.
686
687         * data-in.c: (apply_implied_decimals) New function.
688         (parse_numeric) Don't adjust exponent if DI_IMPLIED_DECIMALS not
689         set.  Also, get rid of gotos.
690         (parse_Z) Use apply_implied_decimals() if the field doesn't
691         contain a decimal point.
692         (parse_N) Use apply_implied_decimals().
693         (parse_IB) Ditto.
694         (parse_PIB) Ditto.
695         (parse_P) Ditto.
696         (parse_PK) Ditto.
697         (to_roman) Removed.
698         (parse_enum) New function.
699         (macro CHAR_IS_ROMAN) Removed.
700         (macro ROMAN_VALUE) Removed.
701         (parse_month) Use parse_enum().
702         (parse_weekday) Use parse_enum().
703         (parse_DATETIME) Use long for weekday.
704
705         * data-list.c: (read_from_data_list_fixed) Use
706         DI_IMPLIED_DECIMALS.
707
708 Sun Mar  6 17:07:20 2005  Ben Pfaff  <blp@gnu.org>
709
710         When the lexer sees something like `-5' in the input, it has to
711         decide whether it's a negative numeric constant token or a '-'
712         token followed by a positive numeric constant token.  It always
713         decides on the former, and then the parser can call
714         lex_negative_to_dash() if it wants the latter.  However, this
715         doesn't work for the case of `-0', because negative zero is
716         (portably) indistinguishable from positive zero.  So now we divide
717         T_NUM into two tokens, T_POS_NUM and T_NEG_NUM, to make the
718         distinction clear.  This requires a little bit of extra effort,
719         because there were several references to T_NUM in the code base.
720         
721         * lexer.c: (lex_get) Use T_NEG_NUM and T_POS_NUM to distinguish
722         positive and negative numeric constants.
723         (lex_double_p) Renamed lex_is_number().  Changed return type to
724         bool.  Updated all relevant references to T_NUM to instead use
725         this function.
726         (lex_double) Renamed lex_number().  All references updated.
727         (lex_integer_p) Renamed lex_is_integer().  Changed return type to
728         bool.  All references updated.
729         (lex_token_representation) Understand T_NEG_NUM and T_POS_NUM.
730         (lex_negative_to_dash) Ditto.
731         (dump_token) Ditto.
732         
733         * lexer.h: (enum) Add T_POS_NUM, T_NEG_NUM.  Remove T_NUM.
734
735 Sun Mar  6 22:09:20 2005  Ben Pfaff  <blp@gnu.org>
736
737         * expressions/operations.def: (NUMBER) Use DI_IMPLIED_DECIMALS.
738
739 Sun Mar  6 19:33:24 2005  Ben Pfaff  <blp@gnu.org>
740
741         * expressions/operations.def: (VEC_ELEM_NUM) Treat user-missing
742         values as system-missing.
743
744         * expressions/parse.c: (parse_vector_element) Fix order of
745         arguments in call to expr_allocate_binary().
746
747 Sun Mar  6 17:51:05 2005  Ben Pfaff  <blp@gnu.org>
748
749         * expressions/optimize.c: (optimize_tree) Fix optimization bug for
750         x**2.
751
752         * expressions/parse.c: (type_coercion_core) Set *node to NULL on
753         failure, as indicated by function comment.
754         (parse_binary_operators) Always return NULL on type_coercion()
755         failure.  Should have been doing this anyway, but bug in
756         type_coercion_core() filtered through.
757         (parse_add) Fix typo in user message.
758         (parse_primary) Understand T_NEG_NUM and T_POS_NUM.
759
760 Sun Mar  6 10:47:13 2005  Ben Pfaff  <blp@gnu.org>
761
762         * expressions/operations.def: Add VALUE function.
763
764         * expressions/parse.c: (parse_function) Need an unary composite
765         node for variables in A TO B, not a variable node.  Use
766         allocate_unary_variable().
767         (parse_primary) Use allocate_unary_variable().
768         (allocate_unary_variable) New function.
769
770 Thu Mar  3 23:53:32 2005  Ben Pfaff  <blp@gnu.org>
771
772         * expressions/PSPP_expressions.pm: Renamed it back to generate.pl
773         but fixed the real problem that was preventing the build from a
774         separate directory.  I liked it my way better ;-)
775         
776 Thu Mar  3 23:17:51 2005  Ben Pfaff  <blp@gnu.org>
777
778         * expressions/parse.c: (expr_parse) Fix parameter type.  Thanks to
779         John Darrington <john@darrington.wattle.id.au> for reporting this
780         bug.
781
782 Thu Mar  3 22:10:25 WST 2005 John Darrington <john@darrington.wattle.id.au>
783
784         * expressions/Makefile.am expressions/evaluate.h.pl
785           expressions/evaluate.inc.pl expressions/operations.h.pl
786           expressions/optimize.inc.pl expressions/parse.inc.p:
787
788           Renamed generate.pl to PSPP_expressions.pm and adjusted *.pl
789           to suit. 
790
791           Fixed everything so that it can be built from an arbitrary
792           directory.
793         
794 Thu Mar  3 22:08:35 WST 2005 John Darrington <john@darrington.wattle.id.au>
795
796         * Makefile.am : Fixed up CLEANFILES target.
797
798 Mon Feb 28 23:49:56 2005  Ben Pfaff  <blp@gnu.org>
799
800         * str.h: Changed `struct len_string' to `struct fixed_string', a
801         more accurate name.  Updated all references.
802
803 Mon Feb 28 23:35:30 2005  Ben Pfaff  <blp@gnu.org>
804
805         Redo calendar support.  Should now be bug-for-bug compatible.
806         
807         * calendar.c: New file.
808
809         * calendar.h: New file.
810
811         * data-in.c: Use new calendar functions.
812         (parse_sign) Change sense of return value.
813         (calendar_error) New function.
814         (ymd_to_ofs) New function.
815         (ymd_to_date) New function.
816         (parse_DATE) Use new function.
817         (parse_ADATE) Ditto.
818         (parse_EDATE) Ditto.
819         (parse_SDATE) Ditto.
820         (parse_JDATE) Ditto.
821         (parse_QYR) Ditto.
822         (parse_MOYR) Ditto.
823         (parse_WKYR) Ditto.
824         (parse_TIME) Ditto.
825         (parse_DTIME) Ditto.
826         (parse_DATETIME) Ditto.
827
828         * data-out.c: (convert_date) Use new calendar functions.
829
830         * error.c: (err_vmsg) Changed interface to be more sensible.
831         Updated all callers.
832         (dump_message) Don't double new-lines (why did we do this
833         anyway?).
834
835 Mon Feb 28 23:30:25 2005  Ben Pfaff  <blp@gnu.org>
836
837         * sfmP.h: (macro flt64) Moved here from pref.h.orig.
838         (macro FLT64_MAX) Moved here from pref.h.orig.
839
840 Mon Feb 28 23:28:01 2005  Ben Pfaff  <blp@gnu.org>
841
842         * set.q: Support SET EPOCH.
843         (static var set_epoch) New var.
844         (aux_stc_custom_epoch) New function.
845         (stc_custom_epoch) New function.
846         (get_epoch) New function.
847         (stc_custom_pager) [USE_INTERNAL_PAGER] Fix bug.
848
849         * format.c: Make it possible just to check whether a specifier is
850         valid without emitting an error message.
851         (parse_format_specifier_name) Change interface, update all
852         callers.
853         (check_input_specifier) Ditto.
854         (check_output_specifier) Ditto.
855         (parse_format_specifier) Ditto.
856
857 Mon Feb 28 23:24:08 2005  Ben Pfaff  <blp@gnu.org>
858
859         * command.def: Add DEBUG POOL.
860
861         * pool.c: (pool_destroy) Fix bug in deleting this pool from its
862         parent.
863         (pool_clear) Properly account for size of pool gizmo.
864         (pool_realloc) Ditto.
865         (pool_clone) New function.
866
867         * pool.h: Mark our allocation functions MALLOC_LIKE.
868
869 Mon Feb 28 23:21:26 2005  Ben Pfaff  <blp@gnu.org>
870
871         * Makefile.am: Move many definitions into new top-level
872         Make.build.  Add expressions to SUBDIRS.  Add calendar.c,
873         calendar.h.  Remove expr-evl.c, expr-opt.c expr-prs.c, expr.h,
874         exprP.h, expr.def.
875
876         * case.c: (case_resize) New function.
877         (case_swap) New function.
878
879         * casefile.c: Include mkfile.h.
880
881 Fri Feb 25 21:11:35 WST 2005 John Darrington <john@darrington.wattle.id.au>
882
883         * sfm-read.c: Fixed a buglet which caused a crash when trying
884         to read a non-existent file.
885
886 Sun Feb 13 16:11:13 2005  Ben Pfaff  <blp@gnu.org>
887
888         Fix PR 11955.
889
890         * aggregate.c: (parse_aggregate_functions) Code cleanup.
891         Important part: get rid of spurious copying of function->format to
892         destvar->print and destvar->write.
893
894 Fri Feb 11 00:08:36 2005  Ben Pfaff  <blp@gnu.org>
895
896         Fix PR 11916, which was confusing a variable's `index' member
897         with the variable's position in a var_set.  Although these are
898         usually the same, they are not for array `var_set's.
899         
900         Took advantage of this bug as an opportunity to clean up and
901         rewrite parse_var_set_vars().
902
903         * vars-prs.c: (parse_vs_variable_idx) New function.
904         (parse_vs_variable) Reimplement in terms of
905         parse_vs_variable_idx().
906         (parse_var_idx_class) New function.
907         (add_variable) New function.
908         (add_variables) New function.
909         (parse_var_set_vars) Rewritten.
910         (struct var_set) Change `lookup_var' member that returns a
911         variable into `lookup_var_idx' member that returns an int.
912         Updated the var set implementations in obvious corresponding ways.
913         Used compare_var_ptr_names(), hash_var_ptr_name() just added.
914         
915 Fri Feb 11 00:06:03 2005  Ben Pfaff  <blp@gnu.org>
916
917         Use our global variable compare & hash functions and give them
918         better names.  Add similar functions for dealing with double
919         pointers to variables.
920         
921         * vars-atr.c: (compare_variables) Renamed compare_var_names().
922         (hash_variable) Renamed hash_var_name().
923         (compare_var_ptr_names) New function.
924         (hash_var_ptr_name) New function.
925         
926         * t-test.q: (cmd_t_test) Use global compare_var_names(),
927         hash_var_name().
928         (compare_var_name) Removed.
929         (hash_var_name) Removed.
930
931 Fri Feb 11 00:04:39 2005  Ben Pfaff  <blp@gnu.org>
932
933         Fix dictionary bug.
934         
935         * dictionary.c: (compare_variable_dblptrs) Rename
936         compare_var_ptrs() and fix it to properly dereference the double
937         pointers.
938
939 Mon Feb  7 09:58:15 WST 2005 John Darrington <john@darrington.wattle.id.au>
940
941         crosstabs.q examine.q oneway.q q2c.c:  Added a q2c feature to 
942         declare subcommands as mandatory.  Closed bug #11843
943
944 Sat Feb  5 20:35:10 WST 2005 John Darrington <john@darrington.wattle.id.au>
945         
946         * getline.c command.[ch] command.def:  Added (very rudimentary)
947         support for line  completion when in interactive mode.  Partially 
948         addresses bug #11693
949         
950 Mon Jan 31 09:52:51 WST 2005 John Darrington <john@darrington.wattle.id.au>
951
952         * examine.q factor_stats.c oneway.q output.c pfm-read.c: Fixed some
953         problems revealed by valgrind.
954
955
956 Wed Jan 26 11:44:11 WST 2005 John Darrington <john@darrington.wattle.id.au>
957
958         * set.q: Affixed a fix to the previous fix such that we'll be OK now
959         whether or not PAGER is set.
960
961 Wed Jan 26 09:25:54 WST 2005 John Darrington <john@darrington.wattle.id.au>
962
963         * set.q: Copied the string produced by getenv("PAGER") thus avoiding
964         "invalid free" errors.  Hopefully fixes bug #11722
965
966         * compute.c expr-prs.c: Check that lvalues are populated before 
967         attempting to destroy them.  Closes bug #11676
968
969 Tue Jan 25 21:01:43 WST 2005 John Darrington <john@darrington.wattle.id.au>
970
971         * aggregate.c: Initialised the complete agr_proc structure.
972         Closes bug #11675
973
974
975 Sun Jan 23 23:02:21 2005  Ben Pfaff  <blp@gnu.org>
976
977         * print.c: (print_trns_free) Close the dfm writer if there is one,
978         fixing a memory leak.
979
980 Mon Jan 24 12:24:36 WST 2005 John Darrington <john@darrington.wattle.id.au>
981
982         * glob.c oneway.q q2c.c t-test.q vfm.c: Still *more* memory leaks 
983         fixed.
984
985
986 Fri Jan 21 19:54:14 WST 2005 John Darrington <john@darrington.wattle.id.au>
987
988         * linked-list.[ch] Added
989
990         * examine.q file-handle.[hq] font.h glob.c groff-font.c postscript.c 
991           set.q:    Yet more memory leaks
992
993 Tue Jan 18 23:12:40 WST 2005 John Darrington <john@darrington.wattle.id.au>
994
995         * t-test.q examine.q : More memory leaks fixed.
996
997 Tue Jan 18 19:26:59 WST 2005 John Darrington <john@darrington.wattle.id.au>
998
999         * examine.q  factor_stats.[ch] get.c pfm-read.c: Plugged numerous
1000         memory leaks.
1001
1002 Mon Jan 10 14:43:45 WST 2005 John Darrington <john@darrington.wattle.id.au>
1003
1004         * ascii.c cartesian.c casefile.c chart.h devind.c 
1005           examine.q frequencies.q
1006           html.c output.h piechart.c plot-chart.c plot-hist.c
1007
1008           Integrated the chart rendering into the output stream
1009           (currently only works for html).
1010           
1011           Removed gratuitous use of ifndef NO_CHARTS, and replaced with
1012           dummy-chart.c for compiling without charts.
1013
1014         * mkfile.[ch] Created.  
1015
1016         * som.[ch] tab.[ch]: Changed name of som_table to som_entity
1017         Added type element so we can tell if it's a chart or a table.
1018
1019         * chart.h examine.q piechart.c plot-chart.c plot-hist.c: changed the 
1020         API of charts to be more like that of tables.
1021
1022 Thu Jan 13 21:00:02 WST 2005 John Darrington <john@darrington.wattle.id.au>
1023
1024         * casefile.c main.c: Moved the SIGINT handler from casefile.c to
1025         main.c. Removed the handler for SIGQUIT.
1026
1027 Mon Jan 10 14:43:45 WST 2005 John Darrington <john@darrington.wattle.id.au>
1028
1029         * casefile.c: Added a signal handler to delete temp files on 
1030         SIGINT and SIGQUIT
1031
1032         * permissions.c Inhibited the PERMISSIONS command when SAFER is on.
1033
1034         * command.def Added a lot more unimplemented commands.
1035
1036         * copyleft.[ch] cmdline.c Moved legal information to copyleft.c
1037
1038 Sat Jan  8 23:58:34 2005  Ben Pfaff  <blp@gnu.org>
1039
1040         * sort.c: (compare_initial_runs) Needed additional level of
1041         dereferencing.
1042         (merge_once) Fix plenty of stupid mistakes.
1043
1044 Sat Jan  8 23:55:27 2005  Ben Pfaff  <blp@gnu.org>
1045
1046         * casefile.c: (casefile_sleep) Need to flush_buffer() after
1047         calling casefile_to_disk() or we will lose the last block in the
1048         file if the casefile started out as disk-based.
1049         (casefile_get_reader) Initialize reader->destructive to 0.
1050         (cmd_debug_casefile) Add new test pattern.
1051         (test_casefile) Define new test pattern to make sure
1052         casefile_sleep() works properly.
1053
1054 Fri Jan  7 08:00:05 WST 2005 John Darrington <john@darrington.wattle.id.au>
1055
1056         * Makefile.am chart.[ch]  histogram.[ch] piechart.c (Modified);
1057           plot-hist.c plot-chart.c (Added) Reorganised these files in an
1058           attempt to seperate the creation and processing of charts from their
1059           actuall renedering.
1060
1061         * examine.q frequencies.q generated charts conditional upon the NO_CHARTS
1062           macro.
1063
1064 Thu Jan  6 18:48:58 WST 2005 John Darrington <john@darrington.wattle.id.au>
1065
1066         * main.c Added a signal handler for SIGFPE
1067
1068         * sort.c Somewhat more robust fix to the previous entry.
1069
1070 Wed Jan  5 21:23:31 2005  Ben Pfaff  <blp@gnu.org>
1071
1072         * sort.c: (merge) Fix assertion for proper Huffman merge pattern:
1073         0 == 1 modulo 1.  See Knuth 5.4.9 (vol. 3, 2nd ed.,
1074         pp. 361).  Thanks to John Darrington <john@cellform.com.au> for
1075         reporting the bug.
1076
1077 Wed Jan  5 22:42:26 WST 2005 John Darrington <john@darrington.wattle.id.au>
1078
1079         * case.h Fixed bug # 11307
1080         
1081 Wed Jan  5 08:30:48 WST 2005 John Darrington <john@darrington.wattle.id.au>
1082
1083         * val-labs.c Fixed bug which caused a crash if VALUE LABELS had
1084         a trailing slash.
1085
1086 Mon Jan  3 17:44:37 2005  Ben Pfaff  <blp@gnu.org>
1087
1088         * pfm-read.c: (read_variables) Remove direct manipulation of
1089         v->aux, which is no longer needed.  Fixes PR 11483.
1090
1091 Sat Jan  1 19:01:16 WST 2005 John Darrington <john@darrington.wattle.id.au>
1092
1093         * data-list.c Fixed a bug in parsing delimiters.
1094
1095         * group.c vars-atr.c Fixed buglet in hash/compare functions for alpha
1096         values.
1097
1098         * percentiles.c Properly handled calculation of Tukey hinges where
1099         the number of data is small.
1100
1101         * oneway.q Used the generic value_to_string function for independent
1102         variable instead of trying to do it ourselves.
1103
1104         * box-whisker.c Fixed a buglet which caused a crash if the number of
1105         data was zero
1106
1107
1108 Fri Dec 31 16:47:45 WST 2004 John Darrington <john@darrington.wattle.id.au>
1109
1110         * examine.q box-whisker.c chart.h Implemented boxplots in EXAMINE
1111
1112         * percentiles.c Fixed some bugs when calculating percentiles when
1113         there's a small number of cases.
1114
1115 Wed Dec 29 08:18:08 WST 2004 John Darrington <john@darrington.wattle.id.au>
1116
1117         * percentiles.[ch] Added. Calculates percentiles and Tukey hinges
1118
1119         * examine.q factor_stats.[ch]  Added calculation of percentiles
1120
1121 Fri Dec 24 15:09:11 WST 2004 John Darrington <john@darrington.wattle.id.au>
1122
1123         * t-test.q Fixed bug #11227 Made t-test work when the independent
1124         variable is alpha
1125
1126 Sat Dec 11 11:43:45 WST 2004 John Darrington <john@darrington.wattle.id.au>
1127
1128         * factor_stats.c Fixed calculation of trimmed mean under various
1129         special conditions.
1130
1131 Sat Dec  4 17:14:45 WST 2004 John Darrington <john@darrington.wattle.id.au>
1132
1133         * histogram.c chart.[ch] factor_stats.c frequencies.q
1134
1135         Added code to calculate sensible histogram ranges and limits.
1136
1137 Thu Dec  2 13:37:43 WST 2004 John Darrington <john@darrington.wattle.id.au>
1138
1139         * chart.h Updated to reflect many API changes.
1140
1141         * cartesian.c chart.c Moved the definitions of chart_write_{xy}scale from 
1142         cartesian.c and into chart.c
1143
1144         * factorstats.[ch] Added the histogram calculations
1145
1146         * casefile.c Removed an unused variable.
1147
1148         * frequencies.q examine.q histogram.c  Reworked the API for 
1149         histograms.
1150
1151         * piechart.c  Revised the API for piecharts.
1152
1153         * var.h  Moved the definitions of freq_tab and freq out of var.h
1154         and into frequencies.q where they belong.
1155         
1156 Tue Nov 30 21:10:20 2004  Ben Pfaff  <blp@gnu.org>
1157
1158         * flip.c: (flip_file) Check for off_t separately from fseeko(),
1159         using AC_TYPE_OFF_T.
1160
1161 Tue Nov 30 08:47:41 2004  Ben Pfaff  <blp@gnu.org>
1162
1163         * flip.c: (flip_file) If fseeko() is not available, use long int
1164         for off_t.  Thanks to "Marshall DeBerry" <mdb@radix.net> for
1165         reporting the problem.
1166
1167 Mon Nov 29 12:20:59 WST 2004 John Darrington <john@darrington.wattle.id.au>
1168
1169         * examine.q factor_stats.[ch] Changed stderr to se_mean to avoid
1170         conflict with stdio.
1171
1172 Sun Nov 21 10:32:41 WST 2004 John Darrington <john@darrington.wattle.id.au>
1173
1174         * var-labs.c (var_to_string) Now returns null if the variable is null
1175
1176         * value-labels.c (value_to_string) Made it return null if either the 
1177         value or the variable is null.
1178
1179         * hash.c (hsh_clear) Fixed a buglet.
1180
1181         * examine.q  factor_stats.[ch] Largely  rewrote, because I'd started 
1182         with  the wrong model.
1183
1184         * casefile.[ch] Added a function to return the casereader.case_idx 
1185         member
1186
1187         * examine.q  Implemented the extreme values results.
1188
1189 John Darrington <john@darrington.wattle.id.au>
1190
1191         * settings.h set.c glob.[ch] frequencies.q q2c.c error.c lexer.[ch] 
1192           output.[ch] getline.c 
1193
1194           Plugged some memory leaks
1195
1196 Mon Nov 15 23:47:40 2004  Ben Pfaff  <blp@gnu.org>
1197
1198         Adopt GSL random number generators, paving the way for providing
1199         the complete suite of random number generators on expressions.
1200         
1201         * Makefile.am: Remove random.c, random.h.
1202
1203         * random.c: Removed.
1204
1205         * random.h: Removed.
1206
1207         * algorithm.c: (algo_default_random) Use GSL functions.
1208
1209         * casefile.c: (test_casefile) Use GSL RNG functions.
1210
1211         * expr-evl.c: (expr_evaluate) Use GSL RNG functions for OP_NORMAL,
1212         OP_UNIFORM.
1213
1214         * sample.c: (cmd_sample) Use GSL RNG functions.
1215         (sample_trns_proc) Ditto.
1216
1217         * set.q: (static var set_seed) Removed.
1218         (static var seed_flag) Removed.
1219         (static var rng) New variable.
1220         (aux_stc_custom_seed) No seed value anymore, don't print anything.
1221         (stc_custom_seed) Use new seed functions.
1222         (seed_is_set) Removed.
1223         (get_rng) New function that composes the entire external
1224         interface.
1225         (set_rng) New function.
1226         (random_seed) New function.
1227
1228 Mon Nov 15 22:08:25 2004  Ben Pfaff  <blp@gnu.org>
1229
1230         * expr-evl.c: (expr_evaluate) Fix XDATE.JDAY formula.  Thanks to
1231         John Darrington <john@darrington.wattle.id.au> for reporting this
1232         bug.
1233
1234 Tue Nov 16 13:19:18 WST 2004 John Darrington <john@darrington.wattle.id.au>
1235
1236         * permissions.c command.def Added the PERMISSIONS command
1237
1238 Mon Nov 15 01:33:32 2004  Ben Pfaff  <blp@gnu.org>
1239
1240         * q2c.c: (dump_header) Don't try to emit #includes at very top of
1241         output file because that will precede #include <config.h>, which
1242         is bad.
1243         (main) Add needed headers to /* (header) */ code.
1244
1245 Mon Nov 15 01:21:36 2004  Ben Pfaff  <blp@gnu.org>
1246
1247         Instead of making system or portable file readers responsible for
1248         dropping and reordering variables, make them read full cases and
1249         let the caller take care of any changes.
1250
1251         * get.c: New "case map" structure to handle this.  Use for GET,
1252         IMPORT, MATCH FILES.  Essentially rewrite the whole file.
1253
1254         * pfm-read.c: (pfm_read_case) Read into provided case.  Signature
1255         changed appropriately.
1256
1257         * sfm-read.c: (sfm_read_case) Ditto.
1258
1259 Mon Nov 15 00:47:45 2004  Ben Pfaff  <blp@gnu.org>
1260
1261         Decided that case_serialize() and case_unserialize() were too
1262         abstract.  Also we need a couple more functions to avoid excessive
1263         copying for data in/out fast paths.
1264
1265         * case.c: (case_serial_size) Removed.
1266         (case_serialize) Rename case_to_values() and make its argument
1267         explicitly an array of union values.
1268         (case_unserialize) Rename case_from_values() and make its argument
1269         explicitly an array of union values.
1270         (case_data_all) New function.
1271         (case_data_all_rw) New function.
1272
1273         * casefile.c: (struct casefile) Change buffer from array of
1274         unsigned char to array of union value for better accuracy.
1275         Redefine buffer_used and buffer_size in terms of values, not
1276         bytes.  Remove case_size because it is now redundant with
1277         value_cnt.  Fix up all references to these members.
1278
1279 Mon Nov 15 00:45:46 2004  Ben Pfaff  <blp@gnu.org>
1280
1281         * barchart.c: (struct subcat) Make `label' member const to silence
1282         GCC warning with -Wwrite-strings.
1283
1284         * cartesian.c: (struct dataset) Ditto.
1285
1286         * case.c: Don't re-define NDEBUG if already defined.
1287         Add lots of comments.
1288
1289         * str.c: Fix includes.
1290
1291         * crosstabs.q: Fix includes.
1292
1293         * examine.q: Fix includes.  Fix GCC warning about unused
1294         variables.
1295         
1296         * frequencies.q: (stat macro) Removed and replaced where used by
1297         its expansion.
1298
1299         * list.q: Fix includes.
1300
1301         * oneway.q: Fix includes.
1302
1303         * piechart.c: Fix includes.  Only define M_PI if not already
1304         defined.
1305
1306         * sfm-read.c: (bswap) New function.
1307         (bswap_int32) Write in terms of bswap.
1308         (bswap_flt64) Ditto.
1309
1310         * str.c: (ds_data) Add external definition here, needed because
1311         str.h has only an `extern inline' version.
1312
1313         * value-labels.c: Fix includes.
1314
1315 Mon Nov 15 00:40:55 2004  Ben Pfaff  <blp@gnu.org>
1316
1317         Instead of providing a system or portable file writer with a raw
1318         case in the format needed for output, provide it with a regular
1319         case.  The writer takes care of any needed translation.
1320
1321         * aggregate.c: Adopt new scheme for AGGREGATE.
1322         (struct agr_proc) sfm_agr_case member removed.
1323         (write_case_to_sfm) Removed because the new interface is easier to
1324         use.
1325
1326         * get.c: Adopt new scheme for SAVE, XSAVE, EXPORT.
1327
1328         * pfm-write.c: Implement new scheme.
1329
1330         * sfm-write.c: Ditto.
1331
1332 Mon Nov 15 00:32:24 2004  Ben Pfaff  <blp@gnu.org>
1333
1334         Instead of treating `struct file_handle' as a class to subclass
1335         into data files, system files, and portable files, instead use it
1336         as a helper that coordinates access.  Now it is opaque, too.
1337
1338         This means that most references to a struct file_handle are now
1339         changed into references to one of struct dfm_reader, struct
1340         dfm_writer, struct sfm_reader, struct sfm_writer, struct
1341         pfm_reader, or struct pfm_writer, according to what's being read
1342         or written.
1343
1344         Most related changes are only worth summarizing briefly.
1345
1346         * dictionary.c: (dict_clear) Destroy aux data in deleted
1347         variables.
1348         (dict_clear_aux) New function.
1349         (dict_create_var) Initialize aux, aux_dtor.
1350         (dict_delete_var) Destroy aux data in deleted variable.
1351
1352         * file-handle.h: (struct fh_ext_class) Removed.
1353         (struct file_handle) Removed.
1354         (fh_init_files) Removed.
1355
1356         * file-handle.q: Changed references to a handle's `private' member
1357         to direct references.
1358         (struct private_file_handle) Renamed file_handle.
1359         Add next, open_cnt, type, open_mode, aux members.
1360         (struct file_handle_list) Removed.
1361         (extern var inline_file) Removed.
1362         (static var file_handles) Changed from file_handle_list * to
1363         file_handle *.
1364         (create_file_handle) Initialize new members.
1365         (fh_close_handle) Removed.
1366         (mode_name) New function.
1367         (fh_open) New function.
1368         (fh_close) New function.
1369         (fh_parse_file_handle) Renamed fh_parse().
1370
1371         * glob.c: (init_glob) Remove fh_init_files() call.
1372         
1373         * aggregate.c: use sfm_writer.
1374         (create_sysfile) Removed because the new interface is simpler.
1375         
1376         * apply-dict.c: Use sfm_reader.
1377
1378         * data-list.c: Use dfm_reader.
1379
1380         * file-type.c: Use dfm_reader.
1381
1382         * get.c: Use sfm_reader, sfm_writer, pfm_reader, pfm_writer.
1383
1384         * inpt-pgm.c: Use dfm_reader.
1385
1386         * print.c: Use dfm_writer.
1387
1388         * sysfile-info: Use sfm_reader.
1389
1390         * dfm-read.c: Adopt new file handle infrastructure.
1391
1392         * dfm-write.c: Ditto.
1393
1394         * pfm-read.c: Ditto.
1395         
1396         * pfm-write.c: Ditto.
1397
1398         * sfm-read.c: Ditto.
1399
1400         * sfm-write.c: Ditto.
1401         
1402 Mon Nov 15 00:31:44 2004  Ben Pfaff  <blp@gnu.org>
1403
1404         Break dictionary functions into separate header file.
1405
1406         * dictionary.h: New file.
1407
1408         * var.h: Moved dict_*() functions to dictionary.h.
1409
1410 Mon Nov 15 00:30:33 2004  Ben Pfaff  <blp@gnu.org>
1411
1412         Get rid of procedure-specific union in struct variable, using
1413         instead a void * pointer and a destructor function.
1414
1415         Most related changes are only worth brief summaries.
1416
1417         * crosstabs.q: Fix includes.  Use new struct var_range in lieu of
1418         old p.crs member in struct variable.
1419         
1420         * frequencies.q: Fix includes.  Use new struct var_freqs in lieu
1421         of old p.frq member in struct variable.
1422
1423         * histogram.c: (draw_histogram) Takes new freq_tab arg because
1424         it's no longer possible to grab this from var->p.frq.
1425
1426         * piechart.c: (draw_piechart) Ditto.
1427
1428         * group.c: (group_proc_get) New function.
1429
1430         * levene.c: Use group_proc_get() in lieu of old p.grp_data member
1431         in struct variable.
1432
1433         * oneway.q: Ditto.
1434
1435         * t-test.q: Ditto.
1436
1437         * main.c: (execute_command) Clear aux data in default_dict after
1438         each command.  (It's debatable whether this should be done.)
1439
1440         * matrix-data.c: Use new struct mxd_var in lieu of old p.mxd
1441         member in struct variable.
1442
1443         * means.q: Get rid of integer mode, which is not included in
1444         recent SPSS and was the only code that wanted per-variable private
1445         data.
1446
1447         * var.h: (struct crosstab_proc) Removed.
1448         (struct frequencies_proc) Removed.
1449         (struct list_proc) Removed.
1450         (struct get_proc) Removed.
1451         (struct means_proc) Removed.
1452         (struct matrix_data_proc) Removed.
1453         (struct match_files_proc) Removed.
1454         (lots of enums) Removed.
1455         (struct variable) Removed members `p', `get'.  Add member
1456         `aux_dtor'.
1457
1458         * vars-atr.c: (var_attach_aux) New function.
1459         (var_detach_aux) New function.
1460         (var_clear_aux) New function.
1461         (var_dtor_free) New function.
1462         (discard_variables) Use NULL instead of inline_file.
1463
1464 Fri Nov 12 10:07:11 WST 2004 John Darrington <john@darrington.wattle.id.au>
1465
1466         * value-labs.c  Fixed the implmentation of value_to_string, so 
1467         that it properly handles alpha values.
1468
1469         * oneway.q  Changed instances where labels were being probed manually, 
1470         to use the canonical {var,value}_to_string functions
1471
1472 Thu Nov 11 21:01:31 WST 2004 John Darrington <john@darrington.wattle.id.au>
1473
1474         * examine.q cartesian.c chart.[ch]   Added normal and detrended normal
1475         plots.  Changed the API of the cartesian plot to be a much lower level
1476         thing.
1477
1478 Sun Nov  7 17:25:04 WST 2004 John Darrington <john@darrington.wattle.id.au>
1479
1480         * examine.q Added some of the parametric calculations
1481
1482         * factor_stats.[ch]  Created
1483         
1484 Sat Nov  6 21:24:31 WST 2004 John Darrington <john@darrington.wattle.id.au>
1485
1486         * examine.q  Changed the definition of factors to be a composite, and
1487         dealt with the consequences.
1488
1489 Sat Nov  6 20:40:38 WST 2004 John Darrington <john@darrington.wattle.id.au>
1490
1491         * examine.q Fixed problem where examine wasn't dealing properly with 
1492         splits
1493
1494 Sat Nov  6 14:49:47 WST 2004 John Darrington <john@darrington.wattle.id.au>
1495
1496         * oneway.q Fixed problem where oneway wasn't dealing properly with 
1497         splits
1498
1499 Thu Nov  4 11:09:01 WST 2004 John Darrington <john@darrington.wattle.id.au>
1500
1501         * q2c.c examine.q  Fixed a bug (feature?) whereby arrays in the
1502         command which had settings didn't get the appropriate code
1503         generated.
1504
1505         * val.h value-labels.[ch] var-labs.c Added v*to_string functions
1506         to convert variables/values to strings.
1507
1508         * examine.q  Added framework for the EXAMINE command.
1509
1510 Mon Nov  1 12:46:17 WST 2004 John Darrington <john@darrington.wattle.id.au>
1511
1512         * q2c.c frequencies.q set.q t-test.q  Fixed the q2c parsing of DBL 
1513         subcommand types.  Changed frequencies.q to use it rather then the 
1514         custom parser.  Dealt with the consequences.  Added a test for NTILES
1515         subcommand of frequencies.
1516
1517 Sat Oct 30 09:16:29 WST 2004 John Darrington <john@darrington.wattle.id.au>
1518
1519         * oneway.q   Fixed up the behaviour when given missing values
1520
1521         * levene.c oneway.q Fixed a buglet with the levene statistic and
1522         incorporated the levene test into the oneway command.
1523
1524         * group.h  t-test.q  Moved the CMP_EQ and CMP_LE symbols out of 
1525         global scope, since they're only relevant to T-TEST
1526
1527 Fri Oct 29 17:39:03 WST 2004 John Darrington <john@darrington.wattle.id.au>
1528
1529         * group.c group.h group_proc.h levene.c oneway.q t-test.q
1530
1531         Made the t-test more consistent
1532         with the way it handles groups.  That is, it now uses a hash instead
1533         of an array of 2.  Also, made the levene.c file independent of the 
1534         implementation of the t-test.  So now levene should be fine for both
1535         t-test and anova.
1536
1537         * Added an oneway.q file for one way anova
1538
1539 Wed Jun  2 22:08:02 2004  Ben Pfaff  <blp@gnu.org>
1540
1541         * descript.c: (cmd_descriptives) Remove harmless but bogus test in
1542         STATISTICS parsing.
1543
1544 Mon May 31 20:45:24 2004  Ben Pfaff  <blp@gnu.org>
1545
1546         Fix memory leaks.
1547
1548         * data-list.c: (cmd_data_list) Free dls->delims on lossage.
1549         (data_list_trns_free) Free dls->delims.
1550
1551         * t-test.q: (tts_custom_pairs) Free vars.
1552         (ssbox_one_sample_init) Fix tab_vline() argument.
1553         (ssbox_independent_samples_init) Ditto.
1554         (trbox_paired_init) Ditto.
1555         (trbox_one_sample_init) Ditto.
1556
1557 Mon May 31 17:19:27 2004  Ben Pfaff  <blp@gnu.org>
1558
1559         Generalize casefiles to the extent that we can use them for
1560         sorting and other kinds of data transformations.  Change cases to
1561         be copy-on-write to improve memory efficiency in common cases.
1562         Every access to a member of a `struct ccase' was changed to be a
1563         call to a case_*() function, especially case_data(), case_num(),
1564         case_str(), or case_data_rw().  Many instances of a local variable
1565         named "case_num" were changed to "case_idx" as a consequence.
1566         Many `struct ccase *' were changed to actual `struct ccase'
1567         because of copying semantics of cases.  In several places there
1568         was a choice between updating debug code to work with the new ADTs
1569         or just deleting it because it was useless; I chose to delete it.
1570  
1571         * Makefile.am: (pspp_SOURCES) Add case.c, case.h.
1572
1573         * case.c: New file.
1574
1575         * case.h: New file.
1576
1577         * aggregate.c: (struct agr_proc) Change type of `sort' to
1578         sort_criteria *.  Add `break_vars', `break_var_cnt' members.
1579         Rename `vars' to `agr_vars', all references updated.  Change
1580         `agr_case' to type `struct ccase'.
1581         (cmd_aggregate) Deal with new members.  Use case_create(),
1582         sort_active_file_in_place(), sort_active_file_to_casefile().
1583         (agr_destroy) Deal with new members.
1584         (aggregate_single_case) Ditto.
1585         (dump_aggregate_info) Ditto.
1586         (initialize_aggregate_info) Ditto.
1587         (agr_to_active_file) Ditto.
1588         (presorted_agr_to_sysfile) Ditto.
1589         (sort_agr_to_sysfile) Removed.
1590
1591         * alloc.c: (out_of_memory) Make non-static.
1592
1593         * alloc.h: Prototype out_of_memory().
1594
1595         * casefile.c: Switched from a linked list in-memory representation
1596         to a two-level array-style representation.  The linked list was
1597         appropriate when we could stick a header onto cases, but that's no
1598         longer the case.  Also, the two-level array will allow for random
1599         in-memory access in case that's ever wanted.  Also added the
1600         concept of a `destructive casereader', one that destroys cases in
1601         the underlying casefile as they are read out.
1602         (macro CASES_PER_BLOCK) New macro.
1603         (struct casefile) New members `value_cnt', `case_list_size',
1604         `case_acct_size', `being_destroyed', `cases'.  Removed `head',
1605         `tail'.
1606         (struct casereader) Removed `cur'.  Added `destructive', `c'.
1607         (global var casefiles) Made static.
1608         (static var case_bytes) New var.
1609         (casefile_create) Takes a value count, not a case size in bytes,
1610         to conform to the case interface.  All callers updated.  Deal with
1611         new and removed members.
1612         (casefile_destroy) Deal with new and removed members.
1613         (casefile_sleep) New function.
1614         (casefile_get_case_size) Removed.
1615         (casefile_get_value_cnt) New function.
1616         (casefile_append) Rewritten to deal with new and removed members.
1617         (casefile_append_xfer) New function.
1618         (write_case_to_disk) Use case_serialize().
1619         (call_posix_fadvise) Removed because posix_fadvise64 segfaults.
1620         Couldn't figure out why.
1621         (casefile_to_disk) Don't call call_posix_fadvise.  Rewritten to
1622         deal with new and removed members.
1623         (merge) Removed.
1624         (merge_sort) Removed.
1625         (casefile_sort) Removed.
1626         (casefile_get_reader) Deal with new and removed members.
1627         (casefile_get_destructive_reader) New function.
1628         (reader_open_file) Make code more readable.  Create case for
1629         reader.
1630         (casereader_get_casefile) New function.
1631         (casereader_read) Deal with new and removed members.  Now returns
1632         a copy of the case, so that the caller is responsible for
1633         destroying the returned case.
1634         (casereader_read_xfer) New function.
1635         (casereader_destroy) Destroy reader's case.
1636         (test_casefile) Second arg is now a value count, all callers
1637         updated.  Now tests destructive readers too.
1638         (get_random_case) Deal with new case ADT.
1639         (write_random_case) Ditto.
1640         (read_and_verify_random_case) Ditto.
1641
1642         * crosstabs.q: Remove debug code.
1643
1644         * descript.q: (calc_descriptives) Deal with new case, casefile
1645         ADTs.
1646
1647         * dfm.c: (cmd_begin_data) There's no storage_source_class anymore.
1648
1649         * do-if.c: Remove unneeded header inclusion.
1650
1651         * expr-prs.c: Remove debug code.
1652
1653         * exprP.h: Remove debug code.
1654
1655         * flip.c: (flip_file) Use fseeko() if available.
1656
1657         * formats.c: Remove debug code.
1658
1659         * get.c: Remove debug code.
1660         (struct mtf_file) Change `input' from `union value *' to `struct
1661         ccase', all references updated.
1662
1663         * levene.c: (levene) Deal with new case, casefile ADTs.
1664
1665         * list.q: Remove debug code.
1666
1667         * loop.c: Remove debug code.
1668         
1669         * matrix-data.c: Remove debug code.
1670
1671         * means.q: Remove debug code.
1672
1673         * mis-val.c: Remove debug code.
1674
1675         * pfm-read.c: Remove debug code.
1676         (pfm_read_code) Change second arg from `union value *' to `struct
1677         ccase *', all references updated.
1678
1679         * recode.c: (string_to_long) Make first arg const.
1680         (convert_to_double) Ditto.
1681
1682         * repeat.c: Remove debug code.
1683
1684         * sample.c: Remove debug code.
1685
1686         * sfm-read.c: Remove debug code.
1687         (sfm_read_case) Change second arg from `union value *' to `struct
1688         ccase *'.
1689
1690         * sort.c: Redone in terms of casefiles.
1691         (enum sort_direction) Moved here from sort.h.
1692         (struct sort_criterion) New structure.
1693         (struct sort_criteria) New structure.
1694         (cmd_sort_cases) Rewritten.
1695         (prepare_to_sort_active_file) New function.
1696         (sort_active_file_in_place) New function.
1697         (sort_active_file_to_casefile) New function.
1698         (parse_sort) Renamed sort_parse_criteria(), rewritten & interface
1699         changed, all callers updated.
1700         (destroy_sort_cases_pgm) Renamed sort_destroy_criteria(),
1701         rewritten & interface changed, all callers updated.
1702         (sort_cases) Renamed sort_execute(), rewritten & interface
1703         changed, all callers updated.
1704         (struct internal_sort) Removed.
1705         (do_internal_sort) Rewritten, interface changed.
1706         (destroy_internal_sort) Removed.
1707         (compare_case_dblptrs) Use sort_criteria instead of sort_case_pgm.
1708         (struct initial_run) Removed; an initial run is now just a
1709         casefile.
1710         (compare_initial_runs) Rewritten.
1711         (struct external_sort) Changed almost completely.
1712         (do_external_sort) Rewritten, interface changed.
1713         (destroy_external_sort) Rewritten.
1714         [HAVE_MKDTEMP] (make_temp_dir) Removed.
1715         [!HAVE_MKDTEMP] (do_mkdir) Removed.
1716         [!HAVE_MKDTEMP] (make_temp_dir) Removed.
1717         (init_external_sort) Removed.
1718         (simulate_error) Removed.
1719         (rmdir_temp_dir) Removed.
1720         (get_temp_file_name) Removed.
1721         (open_temp_file) Removed.
1722         (close_temp_file) Removed.
1723         (remove_temp_file) Removed.
1724         (write_temp_file) Removed.
1725         (read_temp_file) Removed.
1726         (struct record_run) Change `record' from `struct case_lit *' to
1727         `struct ccase'.
1728         (struct initial_run_state) Remove `idx_to_fv', `free_list',
1729         `file_idx', `output_file'.  Add `run', casefile'.  Change
1730         `last_output' from `struct case_list *' to `struct ccase'.
1731         (write_initial_runs) Change interface, rewrite.
1732         (sort_sink_write) Renamed process_case(), changed interfaced,
1733         rewrote.
1734         (destroy_initial_run_state) Rewritten.
1735         (allocate_cases) Rewritten.
1736         (compare_record) Interface changed, rewritten.
1737         (start_run) Rewritten.
1738         (end_run) Rewritten.
1739         (output_record) Rewritten.
1740         (grab_case) Removed.
1741         (release_case) Removed.
1742         (struct merge_case) Change `cases' from double pointer to single
1743         pointer.
1744         (merge) Deal with new case and casefile ADTs.
1745         (struct run) Removed.
1746         (merge_once) Rewritten, interface changed.
1747         (fill_run_buffer) Removed.
1748         (sort_sink_make_source) Removed.
1749         (sort_sink_class) Removed.
1750         (struct sort_source_aux) Removed.
1751         (sort_source_read_helper) Removed.
1752         (sort_source_read) Removed.
1753         (read_sort_output) Removed.
1754         (read_internal_sort_output) Removed.
1755         (read_external_sort_output) Removed.
1756         (sort_source_destroy) Removed.
1757         (sort_source_class) Removed.
1758
1759         * sort.h: (struct sort_cases_pgm) Removed.
1760         (enum sort_direction) Moved to sort.c.
1761
1762         * t-test.q: (calculate) Deal with new case, casefile ADTs.
1763
1764         * tab.c: Remove debug code.
1765
1766         * var-labs.c: Remove debug code.
1767
1768         * var.h: (struct ccase) Removed.
1769         (struct case_list) Removed.
1770
1771         * vars-atr.c: (discard_variables) Use free_case_source().
1772
1773         * vars-prs.c: (parse_vs_variable) Make arg const.
1774         (parse_dict_variable) Ditto.
1775         (parse_variables) Make struct dictionary * arg const.
1776         (parse_var_set_vars) Make struct var_set * arg const.
1777         (struct var_set) Add const to some of the function pointers' args.
1778         (var_set_get_cnt) Make arg const.
1779         (var_set_get_var) Make first arg const.
1780         (var_set_lookup_var) Make first arg const.
1781         (dict_var_set_get_cnt) Make arg const.
1782         (dict_var_set_get_var) Make first arg const.
1783         (dict_var_set_lookup_var) Make first arg const.
1784         (var_set_create_from_dict) Make arg const.  Add cast to aux
1785         assignment.
1786         (struct array_var_set) Add const to var member.
1787         (array_var_set_get_cnt) Make arg const.
1788         (array_var_set_get_var) Make first arg const.
1789         (array_var_set_lookup_var) Make first arg const.
1790         (var_set_create_from_array) Make first arg const.  Insert cast.
1791
1792         * vfm.c: (struct write_case_data) Change trns_case, sink_case
1793         members from `struct ccase *' to `struct ccase'.
1794         (static var lag_queue) Change from double to single pointer.
1795         (procedure) Optimize trivial case.
1796         (internal_procedure) Deal with changed case, case_source ADTs.
1797         (create_trns_case) Changed interface, rewrote.
1798         (open_active_interface) Initialize modified lag queue.
1799         (write_case) Deal with changed case ADT.
1800         (lag_case) Deal with modified lag queue.
1801         (close_active_file) Destroy modified lag queue.
1802         Deal with changed case_source, case_sink ADTs.
1803         (destroy_storage_stream_info) Make null arg into no-op.
1804         (storage_sink_make_source) Set aux in created source.
1805         (storage_source_read) Deal with changed case, casefile ADTs.
1806         (storage_source_create) New function.
1807         (lagged_case) Rewrite.
1808         (free_case_source) New function.
1809         (free_case_sink) Rewrite.
1810         (struct split_aux_data) Changed prev_case from `struct ccase *' to
1811         `struct ccase'.
1812         (procedure_with_splits) Deal with changed prev_case.
1813         (procedure_with_splits_callback) Ditto.
1814         (multipass_split_aux_data) Changed prev_case from `struct ccase *' to
1815         `struct ccase'.
1816         (multipass_procedure_with_splits) Deal with changed prev_case.
1817         (multipass_split_callback) Ditto.
1818         
1819         
1820 Mon May 31 17:19:06 2004  Ben Pfaff  <blp@gnu.org>
1821
1822         The workspace idea didn't work out.
1823
1824         * Makefile.am: (pspp_SOURCES) Remove workspace.c, workspace.h.
1825         
1826         * workspace.c: Removed.
1827
1828         * workspace.h: Removed.
1829
1830 Sun May 30 18:35:19 2004  Ben Pfaff  <blp@gnu.org>
1831
1832         Fully implement arbitrary delimiters on DATA LIST, extending the
1833         half implementation that was already there.
1834
1835         * data-list.c: (struct data_list_pgm) Remove `delim', add
1836         `delims', `delim_cnt'.
1837         (cmd_data_list) Initialize new members.  Parse delimiters and
1838         clean up code a bit.
1839         (cut_field) Extract fields with arbitrary delimiters.  Also, fix
1840         handling of leading commas.
1841         (read_from_data_list_fixed) Expand tabs.  Adapt to new DFM
1842         interfaces.
1843         (read_from_data_list_free) Adapt to new DFM interfaces.
1844         (read_from_data_list_list) Ditto.
1845         (repeating_data_trns_proc) Ditto.
1846
1847         * dfm.c: Split up reader and writer into separate code, because
1848         they do different things.  Use struct string instead of explicit
1849         allocation code, for clarity.
1850         (enum dfm_reader_flags) New enum.
1851         (struct dfm_fhuser_ext) Removed.
1852         (struct dfm_reader_ext) New.
1853         (get_reader) New function, used by just about all the reader
1854         functions.
1855         (dfm_close) Removed.
1856         (close_reader) New function.
1857         (dfm_open_for_reading) Rewrite initialization of dfm_fhuser_ext.
1858         (dfm_open_for_writing) Ditto.
1859         (macro force_line_buffer_expansion) Removed.
1860         (count_tabs) Removed.
1861         (tabs_to_spaces) Removed.
1862         (read_record) Deal with new dfm_reader_ext.  Use struct string
1863         functions.  Don't convert tabs to spaces.
1864         (dfm_eof) New function.
1865         (dfm_get_record) Changed interface, rewrote.
1866         (dfm_expand_tabs) New function.
1867         (dfm_fwd_record) Renamed dfm_forward_record(), updated to new
1868         dfm_reader_ext, rewritten.
1869         (dfm_bkwd_record) Renamed dfm_reread_record(), updated to new
1870         dfm_reader_ext, rewritten.
1871         (dfm_set_record) Removed in favor of dfm_forward_columns().
1872         (dfm_forward_columns) New function.
1873         (dfm_get_cur_col) Renamed dfm_column_start, updated to new
1874         dfm_reader_ext, rewritten.
1875         (static var dfm_r_class) Use close_reader for the destructor.
1876         (struct dfm_writer_ext) New.
1877         (dfm_put_record) Updated to new dfm_writer_ext, rewritten.  Uses
1878         bounce buffer now instead of local allocation.
1879         (close_writer) New function.
1880         (static var dfm_writer_ext) Use close_writer for destructor.
1881         (cmd_begin_data) Adapt to new dfm_reader_ext.
1882
1883         * file-handle.q: Add support for per-file tab width.
1884         (struct private_file_handle) Add tab_width member.
1885         (q2c specifications) Add tabwidth subcommand.
1886         (cmd_file_handle) Put parsed tab width into private_file_handle.
1887         (create_file_handle) Set default tab width.
1888         (handle_get_tab_width) New function.
1889
1890         * file-type.c: (file_type_source_read) Adapt to new DFM interface.
1891
1892         * inpt-pgm.c: (reread_trns_proc) Ditto.
1893
1894         * matrix-data.c: (context) Ditto.
1895         (another_token) Ditto.
1896         (mget_token) Ditto.
1897         (force_eol) Ditto.
1898
1899 Sun May 30 18:33:59 2004  Ben Pfaff  <blp@gnu.org>
1900
1901         * casefile.c: (casefile_destroy) Fix memory leak by freeing
1902         cf->filename.
1903         (casereader_destroy) Don't close file descriptor -1.
1904
1905         * recode.c: (cmd_recode) Fix memory leak.
1906
1907         * set.q: (q2c specifications) Fix typo in user message.
1908
1909         * str.c: (st_bare_pad_len_copy) Change memcpy to memmove to avoid
1910         undefined behavior for overlapping arguments.
1911
1912 Sun May 30 18:31:48 2004  Ben Pfaff  <blp@gnu.org>
1913
1914         * casefile.c: valgrind doesn't implement posix_fadvise() yet, so
1915         don't call it when we're running under valgrind.
1916         (call_posix_fadvise) New function.
1917         (casefile_to_disk) Use call_posix_fadvise().
1918         (reader_open_file) Ditto.
1919         
1920 Sun May 30 18:20:12 2004  Ben Pfaff  <blp@gnu.org>
1921
1922         Update our string ADTs, struct string and struct len_string.  Get
1923         rid of pool support, which was largely unused.  Rename lots of
1924         functions to have more obvious or consistent names.
1925         
1926         * ascii.c: Get rid of ascii_pool.  It was only used for string
1927         allocations.
1928         (ascii_open_global) Don't create ascii_pool.
1929         (ascii_close_driver) Don't destroy ascii_pool.
1930         (ascii_postopen_driver) Don't use pool.
1931         (ascii_close_driver) Destroy strings manually.
1932
1933         * str.c: (ds_create) Remove pool argument, all references updated.
1934         (ds_init) Ditto.
1935         (ds_replace) Remove pool support, make more efficient when we
1936         don't need to reallocate.
1937         (ds_destroy) Remove pool support.
1938         (ds_rpad) New function.
1939         (ds_size) Renamed ds_capacity(), all references updated.
1940         (ds_value) Renamed ds_c_str(), all references updated.
1941         (ds_concat) Renamed ds_puts(), all references updated.
1942         (ds_concat_buffer) Renamed ds_concat(), all references updated.
1943         (ds_putchar) Renamed ds_putc(), all references updated.
1944         (ds_getline) Renamed ds_gets(), all references updated.
1945         (ls_create) Remove pool argument, all references updated.
1946         (ls_create_buffer) Ditto.
1947         (ls_destroy) Removed pool support.
1948         (ls_value) Renamed ls_c_str(), all references updated.
1949
1950         * str.h: (ls_length) [__GNUC__] Add inline version.
1951         (ls_c_str) [__GNUC__] Add inline version.
1952         (ls_end) [__GNUC__] Add inline version.
1953         (struct string) Remove pool member.  Rename `size' to `capacity',
1954         all references updated.
1955
1956         * tab.c: (text_format) Instead of using pool argument to
1957         ls_create_buffer(), call pool_register() on allocated data.
1958
1959 Mon Apr 26 22:40:07 2004  Ben Pfaff  <blp@gnu.org>
1960
1961         We're abusing the current ASCII driver by telling it to allocate a
1962         9999-line, 9999-character page in the tests.  This causes some
1963         systems to curl up and die because it allocates 20 MB of
1964         contiguous RAM.  This change alleviates at least part of the
1965         problem.  It is mostly a stop-gap until the new output system is
1966         ready.
1967         
1968         * ascii.c: (struct line) New structure.
1969         (struct ascii_driver_ext) Remove `page', `page_size', `line_len',
1970         `line_len_size', `n_output' members.  Add `lines', `lines_cap'.
1971         (ascii_preopen_driver) Initialize new members, not old ones.
1972         (ascii_close_driver) Destroy new members, not old ones.
1973         (ascii_open_page) Allocate new members, not old ones.
1974         (expand_line) Allocate room in line.
1975         (draw_line) Use new members.
1976         (ascii_line_horz) Ditto.
1977         (ascii_line_vert) Ditto.
1978         (ascii_line_intersection) Ditto.
1979         (text_draw) Ditto.
1980         (output_lines) Ditto.
1981         (ascii_close_page) Ditto.
1982
1983 Sun Apr 25 23:40:15 2004  Ben Pfaff  <blp@gnu.org>
1984
1985         * matrix.c: Dead code.  Removed.
1986
1987         * matrix.h: Dead code.  Removed.
1988
1989 Fri Apr 16 23:59:51 2004  Ben Pfaff  <blp@gnu.org>
1990
1991         Contrary to what I'd always understood, there is an efficient
1992         algorithm for deletion from a hash table populated via linear
1993         probing.  This change implements it.
1994         
1995         * hash.c: (hsh_rehash) Probe in increasing order.
1996         (hsh_probe) Ditto.
1997         (locate_matching_entry) Ditto.
1998         (hsh_delete) Use Knuth's Algorithm 6.4R for deletion.
1999
2000 Tue Apr 13 19:24:15 2004  Ben Pfaff  <blp@gnu.org>
2001
2002         * moments.c (calc_moments): Adjust calculation of kurtosis to
2003         avoid subtracting huge numbers from huge numbers, on Michael
2004         Kiefte's advice.
2005
2006 Sun Apr 11 14:22:12 2004  Ben Pfaff  <blp@gnu.org>
2007
2008         Rework moments routines for improved numerical stability based on
2009         Michael Kiefte's advice.  Any bugs or remaining numerical problems
2010         are still mine though.
2011
2012         There is now a struct moments1 for use with one-pass moments.  It
2013         uses a provisional means algorithm as an attempt to improve
2014         accuracy of higher moments.  The older struct moments now only
2015         handles two-pass moments.
2016         
2017         * aggregate.c: Use moments1 instead moments.
2018
2019         * descript.c: Revert previous change, which is no longer needed
2020         due to the moments revision.
2021
2022         * moments.c: (calc_moments) New function for calculating variance,
2023         skewness, kurtosis.
2024         (moments_pass_one) Only accumulate weights bigger than zero.
2025         (moments_calculate) Allow calculating the mean on pass one, others
2026         require pass two.  Implement in terms of calc_moments().
2027         (struct moments1) New structure.
2028         (init_moments1) New function.
2029         (moments1_clear) Ditto.
2030         (moments1_create) Ditto.
2031         (moments1_add) Ditto.
2032         (moments1_calculate) Ditto.
2033         (moments1_destroy) Ditto.
2034         (cmd_debug_moments) Deal with `struct moments' or `struct
2035         moments1' as requested by user.
2036
2037 Sun Apr 11 14:21:55 2004  Ben Pfaff  <blp@gnu.org>
2038
2039         * Makefile.am (pspp_SOURCES): Remove debug.c.
2040
2041         * debug.c: Removed.  It was empty anyway.
2042
2043 Fri Apr  9 20:04:49 2004  Ben Pfaff  <blp@gnu.org>
2044
2045         * descript.c (calc_descriptives): Fix assert failure when only
2046         MOMENT_MEAN is needed.
2047
2048 2004-04-09  Michael Kiefte  <mkiefte@dal.ca>
2049
2050         * descript.c: 
2051
2052         fixed problem with parsing in match_statistic() causing
2053         "DESCRIPTIVE STAT=MEAN." to barf.
2054
2055         "MEAN" is now default if "SORT" given without specification.
2056
2057         Fixed infinite loop with "DESCRIPT GIBBERISH=ALL."  Parsing is
2058         generally less forgiving of syntax errors: better to have it do
2059         nothing and type it in again then to not know what it actually did
2060         instead.  
2061
2062         z-score transformation now checks score for user-missing values
2063         and checks std_dev for SYSMIS.
2064
2065 2004-04-06  Michael Kiefte  <mkiefte@dal.ca>
2066
2067         * aggregate.c, crosstabs.q, descript.c, dictionary.c, frequencies.q, levene.c, t-test.q, var.h: 
2068         Changed dict_get_case_weight() to accept an additional int * flag
2069         to complain about system-missing, user-missing, zero, or negative
2070         weights and updated existing functions to pass int * to
2071         dict_get_case_weight().
2072
2073 2004-04-05  jmd  <jmd@gnu.org>
2074
2075         * main.c: Fixed configuration problems with gsl
2076
2077         * t-test.q: Fixed some problems encountered when compiling under Cygwin
2078
2079 2004-04-03  blp  <blp@gnu.org>
2080
2081         * lexer.c, ChangeLog:
2082         Fix infinite loop on comment at end of file, add test.
2083
2084 2004-04-03  jmd  <jmd@gnu.org>
2085
2086         * 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:
2087         Fixed the calculation of percentiles and added --syntax and --algorithm options
2088
2089 Sat Apr  3 11:43:37 2004  Ben Pfaff  <blp@gnu.org>
2090
2091         * lexer.c: (lex_skip_comment) Handle end-of-file correctly (I
2092         hope).
2093
2094 Sat Apr  3 15:00:18 WST 2004 John Darrington <john@darrington.wattle.id.au>
2095
2096         * frequencies.q:  Fixed the calculation of percentiles
2097
2098         * Makefile.am:  Added the --ansi flag and dealt with the
2099         consequences.  Added some entries to PSPP_sources so that
2100         make distcheck would pass
2101
2102         * cmdline.c:   Added the --syntax and --algorithm options
2103
2104         * q2c.c:  Added an implicit /ALGORITHM subcommand to everything.
2105
2106 Fri Apr  2 11:25:22 WAST 2004 John Darrington <john@darrington.wattle.id.au>
2107
2108         * t-test.q, levene.c, levene.h  Converted t-test (incl levene) to 
2109         use the new multipass_split_... mechanism.
2110
2111 Wed Mar 31 22:36:22 2004  Ben Pfaff  <blp@gnu.org>
2112
2113         * frequencies.q: (calc_stats) Use moments data structure and
2114         calc_seskew(), calc_sekurt() functions.
2115
2116         * set.q main.c settings.h Added support for --syntax and --algorithm 
2117         options
2118
2119 Tue Mar 30 22:04:19 2004  Ben Pfaff  <blp@gnu.org>
2120
2121         * vfm.c: Had to get last call to multipass_split_output() inside
2122         open_active_file()/close_active_file() pairing, so introduce new
2123         function.
2124         (internal_procedure) Move procedure() code here, except for calls
2125         to open_active_file() and close_active_file().
2126         (procedure) Wrap open_active_file() and close_active_file() around
2127         internal_procedure().
2128         (multipass_procedure_with_splits) Wrap open_active_file() and
2129         close_active_file() around internal_procedure().
2130
2131 Tue Mar 30 22:01:57 2004  Ben Pfaff  <blp@gnu.org>
2132
2133         * descript.c: (cmd_descriptives) Free `vars' to avoid memory leak.
2134
2135 Mon Mar 29 16:26:40 2004  Ben Pfaff  <blp@gnu.org>
2136
2137         * debug.c: Removed.  Moved cmd_debug_evaluate() into expr-evl.c.
2138
2139         * expr-evl.c: (cmd_debug_evaluate) Moved here from debug.c.
2140
2141 Mon Mar 29 16:03:08 2004  Ben Pfaff  <blp@gnu.org>
2142
2143         * algorithm.c: By default turn off some of the more expensive
2144         assertions.
2145         (expensive_assert) New macro which expands to assert if
2146         EXTRA_CHECKS is defined, to nothing otherwise.
2147         (unique) Use expensive_assert().
2148         (binary_search) Ditto.
2149         (push_heap) Ditto.
2150         (pop_heap) Ditto.
2151         (make_heap) Ditto.
2152         (sort_heap) Ditto.
2153
2154         * command.c: (conflicting_3char_prefixes) Words that are the same
2155         don't cause conflicts when they are abbreviated to the first three
2156         letters.
2157
2158         * expr-evl.c: (CONCAT_func) Fix memory leak by incrementing struct
2159         nonterm_node's n earlier.
2160         (generic_str_func) Ditto.
2161         
2162 Mon Mar 29 15:32:17 2004  Ben Pfaff  <blp@gnu.org>
2163
2164         Add support for multipass procedures.  Rewrite DESCRIPTIVES to
2165         test multipass support, take advantage of new moments
2166         calculation, and to not be such crappy code.  Get rid of q2c
2167         processing for DESCRIPTIVES.
2168
2169         * vfm.c: (struct multipass_split_aux_data) New structure.
2170         (multipass_procedure_with_splits) New function.
2171         (multipass_split_callback) New function.
2172         (multipass_split_output) New function.
2173         * descript.q: Removed.
2174
2175         * descript.c: New file.
2176
2177         * var.h: Removed descriptives enums.
2178         (struct descriptives_proc) Removed.
2179         (struct variable) Removed p.dsc.
2180
2181         * Makefile.am: (q_sources_c) Remove descript.c.
2182         (q_sources_q) Removed descript.q.
2183         
2184 Mon Mar 29 15:31:55 2004  Ben Pfaff  <blp@gnu.org>
2185
2186         New manager for keeping track of used workspace.
2187         
2188         * workspace.c: New file.
2189
2190         * workspace.h: New file.
2191
2192         * Makefile.am: (pspp_SOURCES) Add workspace.c, workspace.h.
2193
2194         * sort.c: (do_internal_sort) Use workspace_malloc().
2195         (destroy_internal_sort) Use workspace_free().
2196
2197 Mon Mar 29 15:31:08 2004  Ben Pfaff  <blp@gnu.org>
2198
2199         New `struct casefile' for managing sets of cases.
2200
2201         * casefile.c: New file.
2202
2203         * casefile.h: New file.
2204
2205         * command.def: Add DEBUG CASEFILE command.
2206
2207         * Makefile.am: (pspp_SOURCES) Add casefile.c, casefile.h.
2208
2209         * sort.c: (sort_cases) Move logic for sending storage file to disk
2210         into do_external_sort().
2211         (struct internal_sort) Use an array of ccase pointers instead of a
2212         case_list.
2213         (do_internal_sort) Rewrite to handle casefiles.
2214         (compare_case_list) Removed.
2215         (compare_cases) New function.
2216         (compare_case_dblptrs) New function.
2217         (read_internal_sort_output) Deal with new struct internal_sort.
2218
2219         * vfm.c: (static var workspace_overflow) Removed.
2220         (struct storage_stream_info) Removed all the members.  Added
2221         struct casefile * member.
2222         (storage_sink_open) Use casefile.
2223         (open_storage_file) Removed.
2224         (write_storage_file) Removed.
2225         (storage_to_disk) Removed.
2226         (destroy_storage_stream_info) Use casefile.
2227         (storage_sink_write) Use casefile.
2228         (storage_sink_make_source) Use casefile.
2229         (storage_source_count) Use casefile.
2230         (storage_source_read) Use casefile.
2231         (storage_source_on_disk) Removed.
2232         (storage_source_get_cases) Removed.
2233         (storage_source_set_cases) Removed.
2234         (storage_source_get_casefile) New function.
2235         
2236 Mon Mar 29 15:30:09 2004  Ben Pfaff  <blp@gnu.org>
2237
2238         New `struct moments' for calculating moments.
2239
2240         * stats.c: Removed.
2241
2242         * stats.h: Removed.
2243
2244         * moments.c: New file.
2245
2246         * moments.h: New file.
2247
2248         * command.def: Add DEBUG MOMENTS command.
2249
2250         * Makefile.am: (pspp_SOURCES) Add moments.c, moments.h.  Remove
2251         stats.c, stats.h.
2252
2253         * aggregate.c: Modify AGGREGATE to use the new moments
2254         calculation, even if not in such a great way.
2255         (struct agr_var) Add `moments' member.
2256         (parse_aggregate_functions) Set `moments' member to null.
2257         (agr_destroy) Destroy `moments' member.
2258         (accumulate_aggregate_info) Use `moments' for standard deviation.
2259         (dump_aggregate_info) Ditto.
2260         (initialize_aggregate_info) Create or clear `moments'.
2261
2262         * misc.h: Add pow2(), pow3(), pow4() functions in place of sqr(),
2263         cube(), pow4() that were in stats.h.  All references updated.
2264
2265         * crosstabs.q: stats.h had chi-square significance functions.  Use
2266         GSL instead.
2267         (display_chisq) Use gsl_cdf_chisq_Q() instead of chisq_sig().
2268
2269         * expr-evl.c: (expr_evaluate) Use moments_of_values() for
2270         OP_CFVAR, OP_MEAN, OP_SD, OP_VARIANCE.
2271                 
2272 Fri Mar 26 14:21:23 2004  Ben Pfaff  <blp@gnu.org>
2273
2274         * dictionary.c: (dict_compact_values) Compacted values need to
2275         start off from 0.
2276
2277 Fri Mar 26 00:54:57 2004  Ben Pfaff  <blp@gnu.org>
2278
2279         * var-labs.c: (cmd_variable_labels) For compatibility, don't allow
2280         `/' at start.  Check return value of parse_variables() for error
2281         return.
2282
2283 Fri Mar 26 00:19:27 2004  Ben Pfaff  <blp@gnu.org>
2284
2285         Revamp expressions: make the code a little nicer, and fix bugs
2286         found in testing.
2287         
2288         * expr-evl.c: (expr_evaluate) Make expression argument const.
2289         Support OP_ADD, OP_SUB, OP_MUL, OP_DIV instead of OP_PLUS, OP_MUL.
2290         OP_POW is missing for arg 2 <= 0.  OP_LOG is natural log, not
2291         base-10 log.  Fix OP_ANY, OP_ANY_STRING, OP_RANGE, OP_RANGE_STRING
2292         off-by-ones.  Add OP_MAX_STRING, OP_MIN_STRING.  Fix OP_TIME_HMS,
2293         OP_DATE_WKYR boundary conditions.  Add OP_CTIME_DAYS,
2294         OP_CTIME_HOURS, OP_CTIME_MINUTES, OP_CTIME_DAYS, OP_CTIME_SECONDS.
2295         Support OP_INDEX_2, OP_INDEX_3, OP_RINDEX_2, OP_RINDEX_3 instead
2296         of OP_INDEX, OP_INDEX_OPT, OP_RINDEX, OP_RINDEX_OPT.  Merge
2297         OP_LPAD_OPT into OP_LPAD, OP_RPAD_OPT into OP_RPAD, OP_LTRIM_OPT
2298         into OP_LTRIM, OP_RTRIM_OPT into OP_RTRIM, OP_NUMBER_OPT into
2299         OP_NUMBER.  Fix OP_RTRIM fragility.  Support OP_SUBSTR_2,
2300         OP_SUBSTR_3 instead of OP_SUBSTR, OP_SUBSTR_OPT.  Remove OP_INV.
2301         Simplify OP_SYSMIS.  Remove OP_STR_MIS.
2302
2303         * expr-opt.c: (optimize_expression) Rewrite.
2304         (macro n0) Removed.
2305         (macro n1) Removed.
2306         (macro n2) Removed.
2307         (macro s0) Removed.
2308         (macro s0l) Removed.
2309         (macro s1) Removed.
2310         (macro s1l) Removed.
2311         (macro s2) Removed.
2312         (macro s2l) Removed.
2313         (macro s) Removed.
2314         (macro sl) Removed.
2315         (eq_num_con) New function.
2316         (optimize_tree) New function.
2317         (macro rnc) Removed.
2318         (macro frnc) Removed.
2319         (str_search) Add const to string params.
2320         (str_rsearch) Ditto.
2321         (evaluate_tree_no_missing) Renamed from evaluate_tree.  Add num[],
2322         str[], str_len[] locals to substitute for most of removed macros.
2323         Support OP_ADD, OP_SUB, OP_MUL, OP_DIV instead of OP_PLUS, OP_MUL.
2324         Removed support for missing values because we're never called with
2325         missing values.  Use set_number() or set_number_errno() instead of
2326         rnc or frnc.  Removed any stuff that caused trouble in testing.
2327         We can re-add it later if it really slows anything.  Fix some
2328         random problems.
2329         (evaluate_tree_with_missing) Not yet supported.  To be added later
2330         if it's important.
2331         (repl_num_con) Removed.
2332         (collapse_node) New function.
2333         (force_repl_num_con) Removed.
2334         (set_number) New function.
2335         (set_number_errno) New function.
2336         (repl_str_con) Removed.
2337         (set_string) New function.
2338         (yrmoda) Tighten boundary conditions.  Adopt 2030 cut-off for
2339         2-digit years.
2340         (dump_node) No special case for OP_AND, OP_OR.
2341
2342         * expr-prs.c: (expr_prs) Honor EXPR_NO_OPTIMIZE bit.  Rewrite.
2343         (expr_get_type) New function.
2344         (type_check) Rewrite.
2345         (type_coercion) New function.
2346         (struct operator) New structure.
2347         (match_operator New function.
2348         (parse_binary_operators) New function.
2349         (parse_inverting_unary_operator) New function.
2350         (parse_or) Rewritten.
2351         (parse_and) Rewritten.
2352         (parse_not) Rewritten.
2353         (parse_rel) Rewritten.
2354         (parse_add) Rewritten.
2355         (parse_mul) Rewritten.
2356         (parse_neg) Rewritten.
2357         (parse_exp) Rewritten.
2358         (parse_sysvar) Add $TRUE, $FALSE system variables.
2359         Get $LENGTH, $WIDTH from get_viewlength(), get_viewwidth().
2360         (parse_primary) Use allocate_var_node(), allocate_num_con(),
2361         allocate_str_con().
2362         (struct function) Remove desc, change `func' prototype.
2363         (unary_func) Remove special cases.
2364         (MISSING_func) Reduce to unary_func() that just returns a boolean.
2365         (SYSMIS_func) Handle SYSMIS((x)) like SYSMIS(x).
2366         (VALUE_func) Use allocate_var_node().
2367         (nary_num_func) Allow MIN and MAX for strings.
2368         Use allocate_var_node().  Properly clean up.
2369         Fix return type.
2370         (generic_str_func) Use local table instead of removed `desc'
2371         member.  Mostly rewrite.
2372         (get_num_args) Revise error message.
2373         (parse_function) Return EXPR_ERROR, not 0 on error.
2374         (macro op) Removed.
2375         (macro varies) Removed.
2376         (ops[]) Use expr.def.
2377         (free_node) Do nothing if node is null.
2378         (allocate_num_con) New function.
2379         (allocate_str_con) New function.
2380         (allocate_var_node) New function.
2381         (allocate_binary_nonterminal) New function.
2382         (append_nonterminal_arg) Removed.
2383         (static var func_tab[]) Revised.
2384         (expr_debug_print_postfix) Make parameter const.
2385         Use printf() instead of debug_printf().
2386
2387         * expr.def: New file.
2388         
2389         * expr.h: Change PXP_* to EXPR_*, all references updated.  Also
2390         use named enum instead of unnamed, all references updated.  Add
2391         EXPR_ANY, EXPR_NO_OPTIMIZE.
2392
2393         * exprP.h: Remove EX_*.  Add DEFINE_OPERATOR.  Use expr.def
2394         instead of defining OP_* directly.
2395         (macro IS_TERMINAL) New macro.
2396         (macro IS_NONTERMINAL) New macro.
2397         (enum OP_NO_FLAGS) New.
2398         
2399 Fri Mar 26 00:18:01 2004  Ben Pfaff  <blp@gnu.org>
2400
2401         * error.c: (err_assert_fail) msg variable needs to be non-const.
2402
2403 Fri Mar 26 00:17:24 2004  Ben Pfaff  <blp@gnu.org>
2404
2405         * debug.c: (cmd_debug_evaluate) Rewrite.
2406
2407 Fri Mar 26 00:15:13 2004  Ben Pfaff  <blp@gnu.org>
2408
2409         Fix some CROSSTABS bit rot stupidity.
2410
2411         * crosstabs.q: Reorder the CELLS subcommands for compatibility.
2412         (internal_cmd_crosstabs) Initializes cells[] correctly.
2413         (float_M_suffix) Rename format_cell_entry(), change prototype,
2414         rewrite.
2415         (display_crosstabulation) Fix cell formatting.
2416
2417 Fri Mar 26 00:14:09 2004  Ben Pfaff  <blp@gnu.org>
2418
2419         Make lex_rest_of_line(), lex_entire_end() not discard lines.  Have
2420         to call lex_discard_line() to do that.
2421
2422         * command.c: (run_command) Call lex_discard_line() after
2423         lex_rest_of_line().
2424
2425         * lexer.c: (lex_entire_end) Change behavior.
2426         (lex_rest_of_line) Change behavior.  Return const char *.
2427         (lex_discard_line) Don't clear getl_buf, don't emit message.
2428
2429         * main.c: (handle_error) Emit message here.
2430
2431         * repeat.c: (internal_cmd_do_repeat) Use lex_discard_line()
2432         instead of lex_entire_line().
2433
2434         * str.c: (mm_find_reverse) Make length params size_t.  Rewrite.
2435
2436         * title.c: (get_title) Call lex_discard_line() after
2437         lex_rest_of_line().
2438         (cmd_file_label) Ditto.
2439         (cmd_document) Deal with const char * return value.
2440
2441 Fri Mar 26 00:10:16 2004  Ben Pfaff  <blp@gnu.org>
2442
2443         Removed REMARK command.
2444
2445         * command.c: (extract_prefix) Removed.
2446         (output_line) Removed.
2447         (cmd_remark) Removed.
2448
2449         * command.def: Remove REMARK.
2450
2451 Fri Mar 26 00:08:38 2004  Ben Pfaff  <blp@gnu.org>
2452
2453         Added abort() after lots of assert(0) invocations to avoid some
2454         compiler warnings.  We really need a NOT_REACHED macro.
2455
2456 Tue Mar 23 08:00:42 WAST 2004 John Darrington <john@darrington.wattle.id.au>
2457
2458         * sort.c: Added missing call to temp_file_close.  Changed error 
2459         messages to warnings.
2460
2461         * set.q: Improved setting of set_view{length,width} to be more tolerant
2462         of buggy OSes.
2463
2464 Sun Mar 21 10:11:14 WST 2004 John Darrington <john@darrington.wattle.id.au>
2465
2466         * val-labs.c: Fixed a bug where PSPP would crash, if VALUE LABELS was
2467         used with incorrect syntax.
2468
2469         * error.c, error.h et al:  Overridden definition of assert for a
2470         custom one.
2471
2472         * test-q.c: Fixed a buglet where it would crash if no /VARIABLES
2473         subcommand was given when it ought to have been.
2474
2475 Sat Mar 20 22:19:08 2004  Ben Pfaff  <blp@gnu.org>
2476
2477         * tab.c: (tab_vline) Fix assertions to respect row_ofs and
2478         col_ofs.
2479         (tab_hline) Ditto.
2480         (tab_box) Ditto.
2481         (tab_joint_text) Ditto.
2482
2483 Sat Mar 20 17:57:23 2004  Ben Pfaff  <blp@gnu.org>
2484
2485         * levene.c: Add #include.
2486
2487         * set.q: (set_viewport) Add `int' argument to make its prototype
2488         correct for signal().
2489
2490 Sat Mar 20 15:35:17 2004  Ben Pfaff  <blp@gnu.org>
2491
2492         * expr-evl.c: (expr_evaluate) Assert that `c' is nonzero before
2493         using it.
2494
2495 Sat Mar 20 15:18:16 2004  Ben Pfaff  <blp@gnu.org>
2496
2497         Changed DFM from open-at-first-access to explicit-open.  Before,
2498         calling dfm_get_record() or dfm_put_record() would automatically
2499         open the file.  Now, you have to call dfm_open_for_reading() or
2500         dfm_open_for_writing() explicitly.  This makes it possible to
2501         check permissions, file existence, etc. earlier.
2502
2503         Also made struct file_handle more opaque, and clean up in general.
2504
2505         * data-list.c: (cmd_data_list) Open handle for reading.
2506
2507         * dfm.c: (struct dfm_fhuser_ext) Add `where', `saw_begin_data'
2508         members.
2509         (open_file_r) Renamed dfm_open_for_reading(), rewrote.
2510         (open_file_w) Renamed dfm_open_for_writing(), rewrote.
2511         (open_inline_file) Removed.
2512         (read_record) For inline_file, if we haven't seen BEGIN DATA, read
2513         it.  Deal with line_number in extension record instead of file
2514         handle.
2515         (dfm_get_record) Rewrote.
2516         (dfm_put_record) Rewrote.
2517         (dfm_push) Assert file is open and one of ours.  Deal with
2518         line_number in extension record instead of file handle.
2519         (dfm_pop) Assert file is open and one of ours.  Deal with
2520         line_number in extension record instead of file handle.
2521         (cmd_begin_data) Use dfm_open_for_reading().  Mark that we saw
2522         BEGIN DATA.     
2523
2524         * file-handle.h: (enum constants RH_RF_*) Removed.
2525         (enum constants FH_MD_*) Removed.
2526         (struct file_handle) Removed `name', `norm_fn', `fn', `where',
2527         `recform', `lrecl', `mode' members.  Public references to
2528         `recform' changed to use handle_get_mode(), references to `lrecl'
2529         changed to use handle_get_record_width().  Added `private' member.
2530         (enum file_handle_mode) New.
2531
2532         * file-handle.q: (struct private_file_handle) New structure.
2533         (struct file_handle_list) New structure.
2534         (static var files) New.
2535         (static var file_handles) Removed.
2536         (init_file_handle) Removed.
2537         (create_file_handle) Removed.
2538         (get_handle_with_name) New function.
2539         (get_handle_for_filename) New function.
2540         (cmd_file_handle) Rewritten.
2541         (hash_file_handle) Removed.
2542         (cmp_file_handle) Removed.
2543         (fh_init_files) Rewritten.
2544         (fh_parse_file_handle) Rewritten.  Allows identifiers as
2545         filenames.
2546         (fh_get_handle_by_name) Renamed handle_get_name(), all references
2547         updated.  Rewritten.
2548         (fh_get_handle_by_filename) Renamed handle_get_filename(), all
2549         references updated.  Rewritten.
2550         (fh_record_width) Renamed handle_get_record_width(), all
2551         references updated.  Rewritten.
2552         (handle_get_mode) New function.
2553
2554         * file-type.c: (cmd_file_type) Open handle for reading.
2555
2556         * filename.c: [unix] (struct file_identity) New structure.
2557         [unix] (fn_get_identity) New function.
2558         [unix] (fn_free_identity) New function.
2559         [unix] (fn_compare_file_identities) New function.
2560         [!unix] (struct file_identity) New structure.
2561         [!unix] (fn_get_identity) New function.
2562         [!unix] (fn_free_identity) New function.
2563         [!unix] (fn_compare_file_identities) New function.
2564
2565         * lexer.c: (static var put) Renamed put_token, all references
2566         updated.
2567         (static var put_tokstr) New.
2568         (static var put_tokval) New.
2569         (lex_init) Initialize put_tokstr().
2570         (restore_token) New function.
2571         (save_token) New function.
2572         (lex_get) Use restore_token().
2573         (lex_put_back) Use save_token().
2574         (lex_put_back_id) New function.
2575         (lex_put_forward) Removed.
2576         (lex_preprocess_line) Set put_token instead of using
2577         lex_put_forward().
2578         (lex_negative_to_dash) Use save_token(), set put_token directly.
2579         (dump_token) Use stderr instead of stdout.
2580
2581         * main.c: (main) Remove call to cmd_init().
2582         
2583         * matrix-data.c: (cmd_matrix_data) Open file for reading.
2584
2585         * pfm-read.c: Use handle_get_filename() instead of trying to use
2586         h->fn directly, all over.
2587
2588         * pfm-write.c: Ditto.
2589
2590         * print.c: (internal_cmd_print) Open handle for writing.
2591         (dump_table) Use handle_get_filename().
2592         (print_trns_proc) Use handle_get_mode().
2593         (cmd_print_space) Use fh_parse_file_handle().
2594         Open handle for writing.
2595         [0] (debug_print) Removed.
2596
2597         * sfm-read.c: Use handle_get_filename() instead of trying to use
2598         h->fn directly, all over.
2599
2600         * sfm-write.c: Ditto.
2601
2602 Sat Mar 20 14:35:48 2004  Ben Pfaff  <blp@gnu.org>
2603
2604         Fix memory leaks.
2605         
2606         * autorecode.c: (arc_free) Free arc->src_values.
2607
2608         * error.c: (msg) Free buf.
2609
2610         * val-labs.c: (do_value_labels) Always free vars.
2611
2612         * vfm.c: (close_active_file) If sink has no make_source then call
2613         its destroy function.
2614
2615 Sat Mar 20 14:00:24 2004  Ben Pfaff  <blp@gnu.org>
2616
2617         Fixed cmd_parse() so that it always skips past a full command
2618         name.  A few special commands for which this would be bad get
2619         special treatment.  This lets us drop code for skipping past the
2620         end of a command name in most cmd_*() functions.  It's not worth
2621         listing all the commands affected.
2622
2623         * command.c: (struct command) Remove `cmd' member, replace by
2624         `name' member, all references updated.  Remove `word', `next',
2625         `skip_entire_name' members.
2626         (macro DEFCMD) Deal with revised `struct command'.
2627         (macro UNIMPL) Ditto.
2628         (macro SPCCMD) New macro for commands whose last word shouldn't be
2629         skipped.
2630         (static array cmd_table[]) Make const, rename `commands', remove
2631         sentinel element.
2632         (macro COMMAND_CNT) New macro.
2633         (split_words) Removed.
2634         (cmd_init) Removed.
2635         (FILE_TYPE_okay) Make parameter const.
2636         (cmd_parse) Improve error messages.
2637         (match_strings) New function.
2638         (next_word) New function.
2639         (enum command_match) New enum.
2640         (conflicting_3char_prefixes) New function.
2641         (conflicting_3char_prefix_command) New function.
2642         (cmd_match_words) New function.
2643         (count_matching_commands) New function.
2644         (get_command_name) New function.
2645         (free_words) New function.
2646         (unknown_command_error) New function.
2647         (figure_out_command) Renamed parse_command_name(), rewritten.
2648
2649         * command.def: Removed @ command.  Marked BEGIN DATA, DOCUMENT,
2650         FILE LABEL, REMARK, SUBTITLE, TITLE as special.  Renamed EVALUATE
2651         to DEBUG EVALUATE.  Added N alias for N OF CASES, SORT alias for
2652         SORT CASES.
2653
2654         * command.h: (macro SPCCMD) New.
2655
2656         * include.c: (cmd_include_at) Removed.
2657         (cmd_include) Allow identifier to be used as filename.
2658
2659         * inpt-pgm.c: (cmd_reread) Use fh_parse_file_handle().
2660
2661         * t-test.q: (cmd_t_test) Command name is now parsed for us.
2662         
2663
2664 Sat Mar 20 13:56:00 2004  Ben Pfaff  <blp@gnu.org>
2665
2666         Start work on better test framework.
2667         
2668         * Makefile.am: (pspp_sources) Add debug.c.
2669         
2670         * debug.c: New file.
2671
2672         * compute.c: (cmd_evaluate) Moved to debug.c, renamed
2673         cmd_debug_evaluate().
2674
2675         * expr-prs.c: (expr_parse) Remove PXP_DUMP support.
2676
2677         * expr.h: (enum constant PXP_DUMP) Removed.
2678
2679 Sat Mar 20 00:05:42 WST 2004 John Darrington <john@darrington.wattle.id.au>
2680
2681         * set.q:  Implemented the SHOW command, and synced it to the existing 
2682         SET cmd.
2683
2684         Added a handler for SIGWINCH so that viewlength and viewwidth follow
2685         changes as the window size is changed.
2686
2687         Added fallback to set viewlength and viewwidth from LINES and COLUMS
2688         environment variables if other methods are not available.
2689
2690         glob.c: Removed a lot of global variables from glob.c and encapsulated 
2691         them in set.q
2692
2693         random.c: Tidied up the way the random seed is set.
2694
2695         str.c: Added a ds_vprintf function.
2696
2697         error.c: Extended dump_message so that messages are always broken at
2698         '\n' characters.
2699         
2700 Thu Mar 18 11:07:14 2004  Ben Pfaff  <blp@gnu.org>
2701
2702         * pfm-write.c: (bufwrite) Write out the correct element for string
2703         variables.  From Andreas Streichardt <streichardt@globalpark.de>.
2704
2705 Mon Mar 15 20:48:03 2004  Ben Pfaff  <blp@gnu.org>
2706
2707         Get rid of static and global (!) vars in matrix-data.c.
2708
2709         * matrix-data.c: (static var nr_data) Removed.
2710         (static var nr_factor_values) Removed.
2711         (static var max_cell_index) Removed.
2712         (static var split_values) Removed.
2713         (struct nr_aux_data) New structure.
2714         (read_matrices_without_rowtype) Use a local struct nr_aux_data in
2715         place of static vars, pass to create_case_source() and procedure()
2716         as aux data.
2717         (nr_read_data_lines) Use struct nr_aux_data * parameter instead of
2718         struct matrix_data_pgm *.
2719         (nr_read_splits) Ditto.
2720         (nr_read_factors) Ditto.
2721         (nr_output_data) Ditto.
2722         (static var wr_content) Removed.
2723         (global var wr_data) Removed.
2724         (global var wr_current) Removed.
2725         (struct wr_aux_data) New structure.
2726         (read_matrices_with_rowtype) Use a local struct wr_aux_data in
2727         place of static vars, pass to create_case_source() and procedure()
2728         as aux data.
2729         (matrix_data_read_with_rowtype) Use struct wr_aux_data * parameter
2730         instead of matrix_data_pgm *.
2731         (wr_read_splits) Ditto.
2732         (wr_output_data) Ditto.
2733         (wr_read_rowtype) Ditto.
2734         (wr_read_factors) Ditto.
2735         (wr_read_indeps) Ditto.
2736         
2737 Mon Mar 15 20:07:29 2004  Ben Pfaff  <blp@gnu.org>
2738
2739         Get rid of static vars in autorecode.c.
2740
2741         * autorecode.c: (struct autorecode_trns) Rename `arc' to `specs',
2742         `n_arc' to `spec_cnt'.  All references updated.
2743         (static var v_src) Removed.
2744         (static var v_dest) Removed.
2745         (static var h_trns) Removed.
2746         (static var nv_src) Removed.
2747         (static var descend) Removed.
2748         (static var print) Removed.
2749         (enum direction) New enum.
2750         (struct autorecode_pgm) New structure.
2751         (cmd_autorecode) Use struct autorecode_pgm instead of static vars.
2752         Move n_dest local var into struct autorecode_pgm for ease of
2753         clean-up.  Use arc_free().
2754         (arc_free) New function.
2755         (recode) Modify to take struct autorecode_pgm * parameter instead
2756         of using statics.  Let the caller clean up.
2757         (autorecode_proc_func) Use struct autorecode_pgm * auxiliary data
2758         instead of statics.  Rearrange code a little.
2759
2760 Mon Mar 15 00:25:02 2004  Ben Pfaff  <blp@gnu.org>
2761
2762         Get rid of static, global vars in recode.c.  Remove debug code.
2763
2764         * recode.c: (static var head) Removed.
2765         (global var v) Removed.
2766         (global var nv) Removed.
2767         (cmd_recode) New local variables head, v, nv.  Initialize and free
2768         v.  Don't call debug_print().
2769         [DEBUGGING] (dump_dest) Removed.
2770         [DEBUGGING] (debug_print) Removed.
2771
2772 Mon Mar 15 00:14:49 2004  Ben Pfaff  <blp@gnu.org>
2773
2774         Get rid of static vars in expr-opt.c.
2775
2776         * expr-opt.c: (static var e) Removed.
2777         (static var nop) Removed.
2778         (static var mop) Removed.
2779         (static var ndbl) Removed.
2780         (static var mdbl) Removed.
2781         (static var nstr) Removed.
2782         (static var mstr) Removed.
2783         (static var nvars) Removed.
2784         (static var mvars) Removed.
2785         (struct expr_dump_state) New structure.
2786         (dump_expression) Use new struct expr_dump_state instead of static
2787         vars and pass to functions we call.
2788         (dump_node) Use struct expr_dump_state * parameter.
2789         (emit) Ditto.
2790         (emit_num_con) Ditto.
2791         (emit_str_con) Ditto.
2792         (emit_var) Ditto.
2793         
2794 Mon Mar 15 00:03:51 2004  Ben Pfaff  <blp@gnu.org>
2795
2796         Get rid of static var in COUNT.
2797
2798         * count.c: (static var head) Move into cmd_count().
2799         (cmd_count) [DEBUGGING] Don't call debug_print.
2800         [DEBUGGING] (debug_print) Removed.
2801
2802 Sun Mar 14 23:56:09 2004  Ben Pfaff  <blp@gnu.org>
2803
2804         Get rid of static vars in VALUE LABELS, ADD VALUE LABELS.
2805
2806         * val-labs.c: (static var v) Removed.
2807         (static var nv) Removed.
2808         [DEBUGGING] (debug_print) Removed.
2809         (verify_val_labs) Add struct variable **, int parameters.
2810         (get_label) Ditto.  Improve error messages, streamline.
2811         (erase_labels) New function for erasing value labels, taking over
2812         part of verify_val_labs()'s function.
2813         (init) Removed.
2814         (done) Removed.
2815         (cmd_value_labels) No need to call init() or done() anymore.
2816         (cmd_add_value_labels) Ditto.
2817         (do_value_labels) Add vars, var_cnt local variables.  Clean up
2818         after them internally.  Call erase_labels() if we should.  Don't
2819         call debug_print().
2820
2821 Sun Mar 14 23:33:53 2004  Ben Pfaff  <blp@gnu.org>
2822
2823         Get rid of static vars in MATCH FILES.
2824         
2825         * get.c: (static var mtf_head) Removed.
2826         (static var mtf_tail) Removed.
2827         (static var mtf_by) Removed.
2828         (static var mtf_n_by) Removed.
2829         (static var mtf_master) Removed.
2830         (static var mtf_seq_num) Removed.
2831         (static var mtf_seq_nums) Removed.
2832         (static var mtf_sink) Removed.
2833         (static var mtf_case) Removed.
2834         (struct mtf_proc) New structure.
2835         (cmd_match_files) Use struct mtf_proc instead of static vars.
2836         (mtf_processing_finish) Ditto.
2837         (mtf_free) Ditto.
2838         (mtf_delete_file_in_place) Ditto.
2839         (mtf_read_nonactive_records) Ditto.
2840         (mtf_compare_BY_values) Ditto.
2841         (mtf_processing) Ditto.
2842         (mtf_merge_dictionary) Ditto.
2843
2844 Sun Mar 14 22:48:12 2004  Ben Pfaff  <blp@gnu.org>
2845
2846         * command.def: Add CASESTOVARS, VARSTOCASES unimplemented commands.
2847
2848         * dictionary.c: (dict_rename_var) Add assertion.
2849         (dict_contains_var) Check by index instead of name.
2850
2851 Sun Mar 14 22:01:02 2004  Ben Pfaff  <blp@gnu.org>
2852
2853         Get rid of compaction_necessary, compaction_nval, compaction_case.
2854         Redo VFM interface.  Replace disk_sink and memory_sink by
2855         storage_sink, disk_source and memory_source by storage_source.
2856
2857         * vfm.h: (struct case_sink) Add `dict', `idx_to_fv', `value_cnt'
2858         members.
2859
2860         * vfm.c: 
2861         (struct write_case_data) Remove `begin_func', `end_func',
2862         `func_aux' members.  Add `aux', `trns_case', `sink_case',
2863         `cases_written', `cases_analyzed' members.
2864         (global var compaction_necessary) Make static.
2865         (global var compaction_nval) Removed.
2866         (global var compaction_case) Removed.
2867         (static var case_count) Removed.
2868         (struct procedure_aux_data) Removed.
2869         (struct split_aux_data) Removed.
2870         (procedure) Remove begin_func, end_func parameters.  Rewrite.
2871         (static var not_canceled) Removed.
2872         (process_active_file) Removed.
2873         (process_active_file_write_case) Removed.
2874         (process_active_file_output_case) Removed.
2875         (prepare_for_writing) Moved into open_active_file().
2876         (arrange_compaction) Ditto.
2877         (setup_lag) Ditto.
2878         (open_active_file) Rewrote.
2879         (write_case) New function.
2880         [DEBUGGING] (index_to_varname) Removed.
2881         (execute_transformations) New function.
2882         (exclude_this_case) Renamed filter_case(), changed interface.
2883         (clear_case) Added struct ccase * parameter to interface.
2884         (close_active_file) Added struct write_case_data * parameter,
2885         rewrote.
2886         (disk_sink_create) Removed.
2887         (disk_sink_destroy) Removed.
2888         (disk_sink_make_source) Removed.
2889         (disk_sink_write) Removed.
2890         (disk_source_count) Removed.
2891         (disk_source_destroy) Removed.
2892         (disk_source_read) Removed.
2893         (global var disk_sink_class) Removed.
2894         (global var disk_source_class) Removed.
2895         (global var memory_sink_class) Removed.
2896         (global var memory_source_class) Removed.
2897         (memory_sink_create) Removed.
2898         (memory_sink_destroy) Removed.
2899         (memory_sink_make_source) Removed.
2900         (memory_sink_write) Removed.
2901         (memory_source_count) Removed.
2902         (memory_source_destroy) Removed.
2903         (memory_source_get_cases) Removed.
2904         (memory_source_read) Removed.
2905         (memory_source_set_cases) Removed.
2906         (struct disk_stream_info) Removed.
2907         (struct memory_sink_info) Removed.
2908         (struct memory_source_info) Removed.
2909         (write_active_file_to_disk) Removed.
2910         (destroy_storage_stream_info) New function.
2911         (global var null_sink_class) New var.
2912         (global var storage_sink_class) New var.
2913         (global var storage_source_class) New var.
2914         (open_storage_file) New function.
2915         (storage_sink_destroy) New function.
2916         (storage_sink_make_source) New function.
2917         (storage_sink_open) New function.
2918         (storage_sink_write) New function.
2919         (storage_source_count) New function.
2920         (storage_source_destroy) New function.
2921         (storage_source_get_cases) New function.
2922         (storage_source_on_disk) New function.
2923         (storage_source_read) New function.
2924         (storage_source_set_cases) New function.
2925         (storage_source_to_disk) New function.
2926         (storage_to_disk) New function.
2927         (struct storage_stream_info) New structure.
2928         (write_storage_file) New function.
2929         (procedure_write_case) Removed.
2930         (create_case_source) Add `struct dictionary *' parameter, all
2931         references updated.
2932         (create_case_sink) Ditto.
2933         (free_case_sink) New function.
2934         (struct split_aux_data) New structure.
2935         (procedure_with_splits) New function implementing what procedure()
2936         used to.
2937         (SPLIT_FILE_proc_func) Removed.
2938         (procedure_with_splits_callback) New function.
2939         (equal_splits) New function.
2940         
2941         * aggregate.c: Pass around a struct instead of using statics.
2942         (static var outfile) Remove.
2943         (enum type) Give it tag `missing_treatment'.
2944         (static var missing) Remove.
2945         (static var sort) Remove.
2946         (static var agr_first) Remove.
2947         (static var agr_next) Remove.
2948         (static var case_count) Remove.
2949         (static var prev_case) Remove.
2950         (static var buf64_1xx) Remove.
2951         (static var buf_1xx) Remove.
2952         (struct agr_proc) New structure incorporating the above.
2953         (cmd_aggregate) Use new struct.  Clean up error handling using
2954         agr_destroy().  Completely rewrite actual implementation of
2955         aggregation.
2956         (create_sysfile) Add struct agr_proc * parameter, modify
2957         accordingly.
2958         (parse_aggregate_functions) Ditto.
2959         (free_aggregate_functions) Ditto.  Rename agr_destroy().
2960         (aggregate_single_case) Add struct agr_proc * parameter, modify
2961         accordingly.
2962         (accumulate_aggregate_info) Ditto.
2963         (dump_aggregate_info) Ditto.
2964         (initialize_aggregate_info) Ditto.
2965         (agr_00x_trns_proc) Removed.
2966         (agr_00x_end_func) Removed.
2967         (agr_10x_trns_proc) Removed.
2968         (agr_10x_trns_free) Removed.
2969         (agr_10x_end_func) Removed.
2970         (agr_11x_read) Removed.
2971         (agr_11x_finish) Removed.
2972         [DEBUGGING] (debug_print) Removed.
2973         (write_case_to_sfm) Add struct agr_proc * parameter, modify
2974         accordingly.
2975         (agr_to_active_file) New function.
2976         (presorted_agr_to_sysfile) New function.
2977         (sort_agr_to_sysfile) New function.
2978
2979         * autorecode.c: (cmd_autorecode) Use procedure_with_splits().
2980
2981         * crosstabs.q: (internal_cmd_crosstabs) Ditto.
2982
2983         * descript.q: (cmd_descriptives) Ditto.
2984
2985         * dfm.c: (cmd_begin_data) Check for storage_source_class.  Adapt
2986         to new procedure() interface.
2987
2988         * command.c: (cmd_execute) Adapt to new procedure() interface.
2989
2990         * dictionary.c: (dict_compact_values) Also delete scratch
2991         variables.
2992         (dict_get_compacted_value_cnt) New function.
2993         (dict_get_compacted_idx_to_fv) New function.
2994
2995         * flip.c: (cmd_flip) Warn about and cancel TEMPORARY.
2996         (cmd_flip) Adapt to new procedure() interface.
2997         (flip_sink_write) Use sink->idx_to_fv.
2998
2999         * frequencies.q: (internal_cmd_frequencies) Use
3000         procedure_with_splits().
3001
3002         * get.c: (cmd_save_internal) Adapt to new procedure() interface.
3003         (static var mtf_sink) New static var.
3004         (static var mtf_case) New static var.
3005         (cmd_match_files) Warn about and cancel TEMPORARY.  Redo the way
3006         we actually implement the matching.
3007         (mtf_delete_file_in_place) Use mtf_case.
3008         (mtf_processing) Use mtf_case and mtf_sink.
3009         (cmd_export) Adapt to new procedure() interface.
3010
3011         * levene.c: (levene) Use procedure_with_splits().
3012
3013         * list.q: (cmd_list) Use procedure_with_splits().
3014
3015         * matrix-data.c: (read_matrices_without_rowtype) Adapt to new
3016         procedure() interface.
3017         (read_matrices_with_rowtype) Ditto.
3018
3019         * modify-vars.c; (cmd_modify_vars) Warn about and cancel
3020         TEMPORARY.  Adapt to new procedure() interface.
3021
3022         * rename-vars.c: Warn about and cancel TEMPORARY.
3023
3024         * sort.c: (cmd_sort_cases) Warn about TEMPORARY.
3025         (sort_cases) Use dict_get_compacted_value_cnt() instead of
3026         compaction_nval.  Adapt to new procedure() interface.  Use
3027         storage_source_to_disk().
3028         (do_internal_sort) Don't try to dump the cases to memory.
3029         (compare_case_lists) Pass null idx_to_fv.
3030         (struct initial_run_state) Add `idx_to_fv' member.  Remove
3031         `case_size' member.
3032         (write_initial_runs) Don't initialize irs->case_size.  Adapt to
3033         new procedure() interface.  Reset irs->idx_to_fv after calling
3034         procedure().
3035         (sort_sink_write) Set irs->idx_to_fv.  Use case_size from struct
3036         sort_cases_pgm.  Pass irs, not struct sort_cases_pgm to
3037         push_heap().
3038         (destroy_initial_run_state) Don't dereference irs after freeing
3039         it.
3040         (allocate_cases) Don't calculate case_size locally.
3041         (compare_record) Add idx_to_fv parameter.
3042         (compare_record_run) Change parameter from struct sort_cases_pgm *
3043         to struct initial_run_state *.  Pass irs->idx_to_fv to
3044         compare_record().
3045         (compare_record_run) Third parameter now a struct
3046         initial_run_state *.
3047         (output_record) No need for out_case anymore.  Pass irs, not
3048         struct sort_cases_pgm to pop_heap().  Use case_size from struct
3049         sort_cases_pgm.
3050         (merge) Use case_size from struct sort_cases_pgm.
3051         (merge_once) Use case_size from struct sort_cases_pgm.
3052         Pass null pointer to compare_record() as idx_to_fv.
3053         (global var sort_sink_class) Make static.
3054
3055         * t-test.q: (cmd_t_test) Use procedure_with_splits().
3056
3057         * temporary.c: Remove debugging crap.
3058
3059 Sat Mar 13 14:19:52 WST 2004 John Darrington <john@darrington.wattle.id.au>
3060
3061         * t-test.q, levene.c: Fixed up the handling of MISSING values
3062         int the T-TEST
3063
3064 Fri Mar 12 16:23:35 WST 2004 John Darrington <john@darrington.wattle.id.au>
3065
3066         * t-test.q, levene.c: Added support for T-TEST /GROUP where only 
3067         one value is given.
3068
3069 Wed Mar 10 23:25:13 2004  Ben Pfaff  <blp@gnu.org>
3070
3071         Change explicit variable name checks into use of
3072         dict_class_from_id().
3073
3074         * dictionary.c: (dict_create_var)  Change explicit variable name
3075         check into use of dict_class_from_id().
3076
3077         * get.c: (trim_dictionary) Ditto.
3078
3079         * sel-if.c: (cmd_filter) Ditto.
3080
3081         * sysfile-info.c: (cmd_display) Ditto.
3082
3083         * vars-prs.c: (parse_DATA_LIST_vars) Ditto.
3084
3085         * vfm.c: (arrange_compaction) Ditto.
3086
3087         * weight.c: (cmd_weight) Ditto.
3088
3089 Wed Mar 10 21:16:34 2004  Ben Pfaff  <blp@gnu.org>
3090
3091         * temporary.c: (cmd_temporary) When TEMPORARY was the first
3092         transformation following the input program, if any, for some
3093         reason we special-cased f_trns.  That's just wrong.  It should
3094         always be set to n_trns.
3095
3096 Tue Mar  9 23:44:40 2004  Ben Pfaff  <blp@gnu.org>
3097
3098         * format.c: (parse_format_specifier_name) Fix brown-bag bug
3099         introduced in last check-in.
3100
3101 Tue Mar  9 23:10:41 2004  Ben Pfaff  <blp@gnu.org>
3102
3103         * format.c: (global array translate_fmt[]) Removed.
3104         (translate_fmt) New function as replacement.
3105         (parse_format_specifier_name) Rewrite.
3106
3107         * pfm-read.c: (convert_format) Use translate_fmt() instead of
3108         translate_fmt[].
3109
3110         * sfm-read.c: (parse_format_spec) Ditto.
3111
3112         * postscript.c: (text) Fix handling of fonts with missing
3113         ligatures.
3114
3115         * sort.c: (struct external_sort) Add temp_name member.
3116         (destroy_external_sort) Free temp_dir, temp_name members.
3117         (init_external_sort) Allocate temp_name.
3118         (get_temp_file_name) Change prototype.
3119         (open_temp_file) Deal with change to get_temp_file_name().
3120         (close_temp_file) Ditto.
3121         (remove_temp_file) Ditto.
3122         (write_temp_file) Ditto.
3123         (read_temp_file) Ditto.
3124         (sort_sink_destroy) Removed.
3125         (sort_sink_class) Change destroy member to null.
3126
3127 Tue Mar  9 22:36:34 2004  Ben Pfaff  <blp@gnu.org>
3128
3129         Eliminate temp_case.
3130
3131         * aggregate.c: (cmd_aggregate) No need to save/restore temp_case
3132         anymore.  Use agr_11x_finish().
3133         (aggregate_single_case) Make first param const.
3134         (accumulate_aggregate_info) Ditto.
3135         (agr_00x_end_func) Use compaction_case, not temp_case.
3136         (agr_11x_func) Break into agr_11x_read(), agr_11x_finish().
3137
3138         * data-list.c: (struct data_list_pgm) Add `case_size' member.
3139         (cmd_data_list) Initialize case_size.
3140         (read_from_data_list_fixed) Add struct ccase * param, use instead
3141         of temp_case.
3142         (read_from_data_list_free) Ditto.
3143         (read_from_data_list_list) Ditto.
3144         (read_one_case) Rename data_list_trns_proc(), all references
3145         updated.  Add argument in calling above functions.  Use c
3146         argument instead of temp_case.
3147         (destroy_dls) Rename data_list_trns_free(), all references
3148         updated.
3149
3150         * expr-evl.c: (expr_evaluate) Make second parameter const.
3151
3152         * file-type.c: (struct file_type_pgm) Add `case_size' member.
3153         (cmd_end_file_type) Initialize `case_size'.
3154         (file_type_source_read) Add struct ccase * parameter.  Use instead
3155         of temp_case.
3156
3157         * flip.c: Rewritten.
3158
3159         * get.c: (struct get_pgm) New structure to keep track of
3160         case_size.
3161         (cmd_get) Initialize case_size.
3162         (cmd_import) Ditto.
3163         (get_source) Deal with struct get_pgm.
3164         (get_source_read) Add struct ccase * parameter, use instead of
3165         temp_case.
3166         (import_source_read) Ditto.
3167
3168         * get.c: Use a null pointer instead of temp_case to represent the
3169         "current case" in a struct mtf_file's input member.
3170         (mtf_processing_finish) Pass null to mtf_processing(), not
3171         temp_case.
3172         (mtf_read_nonactive_records) Don't set iter->input to temp_case.
3173         (mtf_compare_BY_values) Add extra arg, use instead of null input
3174         members.
3175         (mtf_processing) Use c parameter instead of temp_case.  Pass
3176         compaction_case to process_active_file_output_case().
3177         
3178         * glob.c: (global variable temp_case) Removed.
3179
3180         * inpt-pgm.c: (struct input_program_pgm) Add `case_size' member.
3181         (cmd_input_program) Initialize case_size.  Set
3182         vfm_source->value_cnt.
3183         (init_case) Add struct ccase * parameter, use instead of
3184         temp_case.
3185         (clear_case) Ditto.
3186         (input_program_source_read) Ditto.
3187
3188         * matrix-data.c: (matrix_data_read_without_rowtype) Ditto.
3189         (dump_cell_content) Ditto.
3190         (nr_output_data) Ditto.
3191         (read_matrices_without_rowtype) Ditto.
3192         (matrix_data_read_with_rowtype) Ditto.
3193         (wr_read_splits) Ditto.
3194         (wr_output_data) Ditto.
3195
3196         * sort.h: (struct sort_cases_pgm) New member `case_size'.
3197         
3198         * sort.c: (sort_cases) Initialize scp->case_size.
3199         (struct external_sort) Remove `case_size' member.
3200         (write_initial_runs) Only call vfm_sink->class_destroy if
3201         non-null.
3202         (struct sort_source_aux) New structure.
3203         (sort_source_read_helper) New function.
3204         (sort_source_read) Use sort_source_read_helper().
3205         (read_sort_output) Change interface to be more reasonable.
3206         (read_internal_sort_output) Ditto.
3207         (read_external_sort_output) Ditto.
3208
3209         * vars-prs.c: (dict_class_to_name) Pass return value through
3210         gettext.
3211
3212         * vfm.c: (struct procedure_aux_data) Add `trns_case' member.
3213         (procedure) Initialize trns_case.
3214         (procedure) Pass trns_case to vfm_source->class->read().
3215         Free trns_case.
3216         (process_active_file) Start using struct procedure_aux_data.
3217         (process_active_file_write_case) Pass trns_case to
3218         transformations, lag_case(), clear_case().
3219         (process_active_file_output_case) Add struct ccase * parameter.
3220         (create_trns_case) New function.
3221         (make_temp_case) Removed.
3222         (vector_initialization) Removed.
3223         (close_active_file) Only call make_source if non-null, otherwise
3224         set vfm_source to null pointer.  Don't free temp_case.
3225         (disk_source_read) Add struct ccase * parameter, use instead of
3226         temp_case.
3227         (memory_source_read) Ditto.
3228         (lag_case) Add const struct ccase * member.
3229         (procedure_write_case) Use trns_case instead of temp_case.
3230         (clear_case) Add struct ccase * member, use instead of temp_case.
3231         (exclude_this_case) Ditto.
3232         (create_case_source) Add struct dictionary * parameter, use to
3233         initialize source->value_cnt.
3234
3235         * vfm.h: (struct case_source) Add `value_cnt' member.
3236         (struct case_source_class) Add struct ccase * parameter to `read'
3237         member function pointer.
3238         (struct case_sink_class) Make struct ccase * parameter const in
3239         `write' member function pointer.
3240         
3241 Wed Mar  3 20:44:37 2004  Ben Pfaff  <blp@gnu.org>
3242
3243         Fix a lot of "possibly uninitialized variable" warnings.  Some of
3244         them are even real bugs.  A few of them make me wonder how the
3245         code ever worked.
3246
3247         * aggregate.c: (parse_aggregate_functions) Initialize `function.
3248
3249         * ascii.c: (output_lines) Add default case to switch.
3250
3251         * crosstabs.q: Remove static variable `expected' and all
3252         references to it.
3253         (display_crosstabulation) Always calculate expected value.
3254         (calc_chisq) Ditto.
3255         (output_pivot_table) Initialize `cmp'.
3256         (display_crosstabulation) New variable `last_row', which is
3257         initialized.
3258
3259         * data-in.c: (parse_numeric) Always initialize sign.  How did this
3260         work at all?!
3261
3262         * data-list.c: (repeating_data_trns_proc) Always initialize code.
3263         Always set info.ofs.  (How did this work?!)
3264
3265         * expr-opt.c: (optimize_tree) Always initialize `m'.
3266         (evaluate_tree) Always initialize `c'.  (How did this work?)
3267
3268         * frequencies.q: (frq_custom_variables) Always initialize min,
3269         max.
3270         (frq_custom_grouped) Always initialize `dl'.
3271
3272         * groff-font.c: (groff_read_font) Always initialize char_set.
3273
3274         * matrix-data.c: (nr_output_data) Initialize `split'.
3275         (wr_read_splits) Remove shadowing split_cnt declaration.
3276         (wr_output_data) Initialize `split'.
3277
3278         * output.c: (tokener) Skip add character on syntax error.
3279
3280         * pool.c: (pool_strndup) Always set `copy'.  (How did this work?!)
3281
3282         * postscript.c: (read_ps_encodings) Use line.string instead of
3283         uninitialized `bp'.
3284         (write_text) Add default case to switch.
3285         (text) Always initialize multiple variables.  Fix bug with
3286         ligatures.
3287
3288         * print.c: (fixed_parse_fortran) Initialize head.
3289         (alloc_line) Add default case to switch.
3290
3291         * recode.c: (parse_dest_spec) Handle case where nothing matches.
3292         (recode_trns_proc) Move variable declaration inward.  Add default
3293         case to switch.
3294
3295         * sfm-read.c: (read_header) Initialize skip_amt.
3296
3297         * sysfile-info.c: (display_variables) Always initialize pc.
3298
3299         * vars-prs.c: Initialized `included'.
3300
3301 Wed Mar  3 09:30:09 2004  Ben Pfaff  <blp@gnu.org>
3302
3303         * main.c: (main) sigaction()'s sa_flags member was uninitialized.
3304         Just use signal() instead.
3305
3306 Wed Mar  3 09:26:30 2004  Ben Pfaff  <blp@gnu.org>
3307
3308         Get rid of vfm_sink_info and vfm_source_info.
3309         
3310         * aggregate.c: (agr_00x_end_func) Don't increment
3311         sfm_sink_info.ncases.
3312
3313         * sort.c: (do_internal_sort) Get case count from
3314         vfm_source->class->count().
3315         (struct external_sort) Add `case_size' member.
3316         (do_external_sort) Initialize case_size.
3317         (struct initial_run_state) Add `case_size' member.
3318         (write_initial_runs) Initialize case_size.
3319         (sort_sink_write) Use case_size.
3320         (read_external_sort_output) Use case_size.  Get case_cnt from
3321         initial_runs.
3322
3323         * vfm.c: (struct write_case_data) Add underscores to existing arg
3324         names, all references updated.  Renamed `aux' as `func_aux', all
3325         references updated.  Added new `aux' member.
3326         (global var vfm_source_info) Removed.
3327         (global var vfm_sink_info) Removed.
3328         (struct procedure_aux_data) New.
3329         (struct split_aux_data) New.
3330         (procedure) Use `aux' fields for procedure_aux_data,
3331         split_aux_data.
3332         (process_active_file_write_case) Pass case_count + 1 to
3333         transformation procedures, exclude_this_case().
3334         (process_active_file_output_case) Don't increment
3335         vfm_sink_info.ncases.
3336         (prepare_for_writing) Don't initialize vfm_sink_info.  Don't try
3337         to send data to disk early.
3338         (make_temp_case) Don't use vfm_sink_info.case_size.
3339         (close_active_file) Don't initialize vfm_source_info.
3340         (struct disk_stream_info) New, to allow for case_cnt and case_size fields.
3341         (disk_sink_create) Initialize and/or update disk_stream_info.
3342         (disk_sink_write) Ditto.
3343         (disk_sink_destroy) Ditto.
3344         (disk_sink_make_source) Ditto.
3345         (disk_source_read) Ditto.
3346         (disk_source_destroy) Ditto.
3347         (global var disk_source_class) Add disk_source_count().
3348         (disk_source_count) New function.
3349         (struct memory_sink_info) Add `case_cnt', `case_size' members.
3350         (struct memory_source_info) Ditto.
3351         (memory_sink_create) Deal with case_cnt, case_size.
3352         (memory_sink_write) Ditto.
3353         (memory_sink_make_source) Ditto.
3354         (memory_source_read) Ditto.
3355         (memory_source_count) New function.
3356         (memory_source_class) Add memory_source_count().
3357         (procedure_write_case) Don't use vfm_sink_info.ncases.  Do use
3358         proc_aux->cases_written, and pass it to transformation procedures
3359         and exclude_this_case ().
3360         (exclude_this_case) Add case_num parameter.  Pass it to
3361         expr_evaluate().
3362         (SPLIT_FILE_procfunc) Use split_aux->prev_case instead of static
3363         variable.
3364
3365         * vfm.h: (struct case_source_class) Add `count' member.
3366
3367         * vfmP.h: (struct stream_info) Removed.
3368         (global variable vfm_source_info) Removed.
3369         (global variable vfm_sink_info) Removed.
3370         
3371 Tue Mar  2 23:38:17 2004  Ben Pfaff  <blp@gnu.org>
3372
3373         * var.h: (typedef trns_proc_func) New typedef.
3374         (trns_free_func) New typedef.
3375         (struct trns_header) Change `proc' to type trns_proc_func, `free'
3376         to type trns_free_func.  This only changes the actual type of
3377         trns_proc_func, adding a `case_num' parameter.  Updated all
3378         implementations to use the typedefs instead.
3379
3380         * compute.c: (compute_num) Pass case_num to expr_evaluate().
3381         (compute_num_vec) Ditto.
3382         (compute_str) Ditto.
3383         (compute_str_vec) Ditto.
3384
3385         * do-if.c: (do_if_trns_proc) Ditto.
3386
3387         * expr-evl.c: (expr_evaluate) Add new case_num parameter, use for
3388         OP_CASENUM.
3389
3390         * inpt-pgm.c: (input_program_source_read) Maintain case count,
3391         pass to transformation functions.
3392         (reread_trns_proc) Pass case_num arg to expr_evaluate().
3393
3394         * loop.c: (loop_1_trns_proc) Ditto.
3395         (loop_2_trns_proc) Ditto.
3396         (loop_3_trns_proc) Ditto.
3397
3398         * print.c: (print_space_trns_proc) Ditto.
3399
3400         * sel-if.c: (select_if_proc) Ditto.
3401
3402 Tue Mar  2 11:36:52 2004  Ben Pfaff  <blp@gnu.org>
3403
3404         * frequencies.q: (cleanup_freq_tab) Avoid memory leak by
3405         destroying hash table.
3406
3407         * glob.c: (read_active_file) Variable not referenced, removed.
3408         (cancel_input_pgm) Ditto.
3409
3410         * levene.c: Add #include <stdlib.h> needed to call free().
3411
3412         * aggregate.c: (parse_aggregate_functions) Make `function'
3413         variable const.
3414
3415 Tue Mar  2 11:30:56 2004  Ben Pfaff  <blp@gnu.org>
3416
3417         Start working to eliminate VFM dependence on static variables.
3418
3419         * command.c: (cmd_parse) Use case_source_is_class().
3420
3421         * data-list.c: Rewrite to eliminate use of static variables.
3422
3423         * dfm.c: (cmd_begin_data) Use case_source_is_class().
3424
3425         * file-handle.q: (fh_handle_name) Make parameter const.
3426
3427         * file-type.c: Rewrite to eliminate use of static variables.
3428
3429         * flip.c: Rewrite to eliminate use of static variables.
3430
3431         * format.c: (get_format_var_width) New function.
3432
3433         * get.c: Eliminate use of static variables.
3434
3435         * inpt-pgm.c: Eliminate use of static variables.
3436
3437         * matrix-data.c: Eliminate use of static variables.
3438
3439         * set.q: (set_max_workspace) New variable.
3440         (cmd_set) Use SET WORKSPACE to modify set_max_workspace.
3441
3442         * var.h: (struct case_list) Move here from vfmP.h.
3443
3444         * vars-atr.c: (discard_variables) Handle new vfm_source type.
3445
3446         * vfm.c: (vfm_source) Change type from struct case_stream to
3447         struct case_source.
3448         (vfm_sink) Change type from struct case_stream to struct
3449         case_sink.
3450         (static var paging) Rename workspace_overflow, all references
3451         updated.
3452         (procedure) Use new class structures.
3453         (process_active_file) Ditto.
3454         (process_active_file_write_case) Ditto.
3455         (prepare_for_writing) Use set_max_workspace.  Use new class
3456         structures.
3457         (close_active_file) Use new class structures.  Free old sink.
3458         (global var disk_source_file) Removed.
3459         (global var disk_sink_file) Removed.
3460         (disk_stream_init) Removed.
3461         (disk_stream_read) Removed.
3462         (disk_stream_write) Removed.
3463         (disk_stream_mode) Removed.
3464         (disk_stream_destroy_source) Removed.
3465         (disk_stream_destroy_sink) Removed.
3466         (global var vfm_disk_stream) Removed.
3467         (disk_sink_create) New function.
3468         (disk_sink_write) New function.
3469         (disk_sink_destroy) New function.
3470         (disk_sink_make_source) New function.
3471         (disk_sink_class) New static var.
3472         (disk_source_read) New function.
3473         (disk_source_destroy) New function.
3474         (global var vfm_source_class) New var.
3475         (global var memory_source_cases) Removed.
3476         (global var memory_sink_cases) Removed.
3477         (global var memory_sink_max_cases) Removed.
3478         (struct memory_sink_info) New struct.
3479         (memory_stream_init) Removed.
3480         (memory_stream_read) Removed.
3481         (memory_stream_write) Removed.
3482         (memory_stream_mode) Removed.
3483         (memory_stream_destroy_source) Removed.
3484         (memory_stream_destroy_sink) Removed.
3485         (global var vfm_memory_stream) Removed.
3486         (page_to_disk) Renamed write_active_file_to_disk().
3487         (memory_sink_create) New function.
3488         (memory_sink_write) New function.
3489         (memory_sink_destroy) New function.
3490         (memory_sink_make_source) New function.
3491         (memory_sink_class) New static var.
3492         (memory_source_read) New function.
3493         (memory_source_destroy) New function.
3494         (memory_source_get_cases) New function.
3495         (memory_source_set_cases) New function.
3496         (global var vfm_source_class) New var.
3497         (procedure_write_case) Use new class structures.
3498         (create_case_source) New function.
3499         (case_source_is_complex) New function.
3500         (case_source_is_class) New function.
3501         (create_case_sink) New function.
3502
3503         * vfm.h: (global variable reinit_sysmis) Not used, removed.
3504         (global variable reinit_blanks) Not used, removed.
3505         (global variable init_zero) Not used, removed.
3506         (global variable init_blanks) Not used, removed.
3507         (struct case_source) New struct.
3508         (struct case_source_class) New struct.
3509         (struct case_sink) New struct.
3510         (struct case_sink_class) New struct.
3511         (struct case_stream) Removed.
3512
3513         * vfmP.h: (struct case_list) Moved to var.h.
3514
3515 Tue Mar  2 11:28:30 2004  Ben Pfaff  <blp@gnu.org>
3516
3517         * algorithm.c: (count_equal) New function.
3518         (count_if) New function.
3519         (unique) Add assertions.
3520         (partition) Add assertions.
3521         (is_partitioned) New function.
3522         (copy_if) Add assertions.
3523         (remove_equal) Add assertions.
3524         (lexicographical_compare) Rename lexicographical_compare_3way.
3525         (sort) Add assertions.  Rephrase some code.
3526         (is_sorted) New function.
3527
3528 Sun Feb 29 23:24:57 2004  Ben Pfaff  <blp@gnu.org>
3529
3530         Rewrite SORT CASES.
3531
3532         * sort.c: Completely rewrite.
3533
3534         * sort.h: Expose interface via struct sort_cases_pgm, not via
3535         global variables.
3536
3537         * aggregate.c: (sort) New static var.
3538         (cmd_aggregate) Use sort.
3539         (create_sysfile) Ditto.
3540         (aggregate_single_case) Ditto.
3541         (dump_aggregate_info) Ditto.
3542         (agr_00x_end_func) Ditto.
3543         (debug_print) Ditto.
3544
3545         * var.h: (enum SRT_ASCEND) Removed.
3546         (enum SRT_DESCEND) Removed.
3547         (struct sort_cases_proc) Removed.
3548         (struct variable) Remove p.srt member.
3549
3550 Sun Feb 29 23:22:45 2004  Ben Pfaff  <blp@gnu.org>
3551
3552         Get rid of the old, crappy heap structure and replace it by a new,
3553         shiny, C++ STL-like heap structure.
3554         
3555         * Makefile.am: (pspp_SOURCES) Remove heap.c, heap.h.
3556
3557         * algorithm.c: (push_heap) New function.
3558         (heapify) Ditto.
3559         (pop_heap) Ditto.
3560         (make_heap) Ditto.
3561         (sort_heap) Ditto.
3562         (is_heap) Ditto.
3563         
3564         * heap.c: Removed.
3565
3566         * heap.h: Removed.
3567
3568 Sun Feb 29 23:21:53 2004  Ben Pfaff  <blp@gnu.org>
3569
3570         Increase warning level.
3571         
3572         * Makefile.am: (AM_CFLAGS) Remove -Wnouninitialized.
3573
3574 Sat Feb 21 17:38:58 WST 2004 John Darrington <john@darrington.wattle.id.au>
3575
3576         * main.c: Added a signal handler for SIGSEGV requesting a bug report.
3577          
3578 Fri Feb 20 23:22:14 2004  Ben Pfaff  <blp@gnu.org>
3579
3580         * dictionary.c: (dict_create_var) Fix root cause of bug worked
3581         around by previous change log entry.
3582         
3583         * compute.c: (lvalue_finalize) Remove workaround from previous
3584         change log entry.
3585
3586 Fri Feb 20 14:37:41 WAST 2004 John Darrington <john@darrington.wattle.id.au>
3587
3588         * compute.c: Fixed a bug where the Format was not getting set for 
3589           computed variables (thus causing a crash when SAVEing).
3590
3591         * Added a test to stop this bug ever coming back
3592
3593 Wed Feb 18 22:21:35 2004  Ben Pfaff  <blp@gnu.org>
3594
3595         Got rid of approx.h.  In general, replaced all references to
3596         approx_eq() by ==, approx_lt() by <, etc.  Other types of changes
3597         noted below.
3598
3599         * Makefile.am: (pspp_SOURCES) Removed approx.h.
3600
3601         * data-out.c: (try_F) Replaced test for approx_eq(number, 0.0) by
3602         test for mag < EPSILON.
3603
3604         * misc.h: Add definition of EPSILON.
3605
3606 Wed Feb 18 21:32:44 2004  Ben Pfaff  <blp@gnu.org>
3607
3608         * vfm.c: (procedure) Add check to prevent recursive call.
3609
3610 Wed Feb 18 21:48:54 WST 2004 John Darrington <john@darrington.wattle.id.au>
3611
3612         * Moved the declarations relating to values to their own header file
3613           (val.h)
3614
3615         * Added levene.c and levene.h
3616
3617         * vars-atr.c: Changed the signature of compare_values to 
3618         take const * arguments.
3619                 
3620         * t-test.q: Changed the structure of struct t_test_proc 
3621        variables now contain their own group statistics information.
3622        Eventually, t_test_proc might get renamed, because it'd be 
3623        applicable to other commands too.
3624
3625 Mon Feb 16 23:15:51 2004  Ben Pfaff  <blp@gnu.org>
3626
3627         * data-out.c: Clean up.  Changed interface of convert_*() to take
3628         either a `double' or a `const char *' instead of a `const union
3629         value *'.  Update all implementations of those interfaces.
3630         (data_out) Use switch statements instead of a table.
3631         (convert_AHEX) Rewrite.
3632
3633         * format.h: Update comment.
3634
3635 Mon Feb 16 22:14:36 2004  Ben Pfaff  <blp@gnu.org>
3636
3637         * q2c.c: (dump_header) Add an Emacs header line to output files
3638         that makes generated .c files read-only by default, to make it
3639         difficult to accidentally change generated files.
3640
3641 Mon Feb 16 22:12:07 2004  Ben Pfaff  <blp@gnu.org>
3642
3643         * frequencies.q: (compare_freq_numeric_a) Compare by frequency,
3644         not bogus a->v.c <=> b->v.c pointer compare.
3645         (compare_freq_alpha_a) Ditto.
3646         (compare_freq_numeric_d) Ditto.
3647         (compare_freq_alpha_d) Ditto.
3648         
3649 Mon Feb 16 22:00:53 2004  Ben Pfaff  <blp@gnu.org>
3650
3651         Changed data_out() to store string data directly into a `union
3652         value''s s member, not indirectly into c.
3653
3654         * crosstabs.q: (output_pivot_table) Use format_short() instead of
3655         data_out().
3656         (table_value_missing) Ditto.
3657         (float_M_suffix) Ditto.
3658         (format_short) New function.
3659
3660         * data-in.h: (data_in_finite_line) Remove inline definition.
3661
3662         * data-list.c: (destroy_dls_var_spec) New function.
3663         (destroy_dls) Rewrite in terms of destroy_dls_var_spec().
3664         (data_list_source_destroy_source) Avoid cast.
3665         (struct repeating_data_trns) New field `id_value'.  Update
3666         comments.
3667         (cmd_repeating_data) Initialize id_value.  Use new
3668         repeating_data_trns_free() for freeing REPEATING DATA
3669         transformations.
3670         (rpd_parse_record) Rewrite support for record ID to be less bogus.
3671         (repeating_data_trns_free) New function.
3672
3673         * data-out.c: (data_out) Change return type to `void' by replacing
3674         error returns by writing a message into the output buffer.
3675         (convert_A) Read from v->s instead of v->c.
3676         (convert_AHEX) Ditto.
3677
3678         * expr-evl.c: Update comment.
3679         (expr_evaluate) Add assertion in OP_STRING case.
3680
3681         * format.h: (macro MAX_FORMATTED_LEN) New macro.
3682
3683         * list.q: (list_cases) Update for new data_out() semantics.
3684
3685         * print.c: (print_trns_proc) Ditto.
3686
3687         * tab.c: (tab_value) Ditto.
3688         (tab_float) Avoid stupid cast.
3689
3690         * var.h: Update comments.
3691         (macro MAX_STRING) New macro.
3692         (macro MAX_ELEMS_PER_VALUE) New macro.
3693
3694         * vars-atr.c: (compare_values) New function.
3695
3696         * vfm.c: (dump_splits) Update for new data_out() semantics.
3697
3698 Mon Feb 16 21:45:47 2004  Ben Pfaff  <blp@gnu.org>
3699
3700         * crosstabs.q: (struct table_entry) Rename v[] to values[].  All
3701         references updated.
3702         (struct crosstab) Rename v[] to vars[].  All references updated.
3703         (hash_table_entry) Replace the hash algorithm and fix a bug at the
3704         same time, which caused the hash value to depend only on a single
3705         value, not all of the variables' values.
3706         
3707 Mon Feb 16 12:49:53 2004  Ben Pfaff  <blp@gnu.org>
3708
3709         Clean up struct dictionary's value_cnt usage.
3710
3711         * dictionary.c: Add a function comment to each function.
3712         (struct dictionary) Rename value_cnt to next_value_idx, which more
3713         accurately reflects its meaning.  All references updated.
3714         (dict_rename_vars) Add assertion.
3715         (dict_get_value_cnt) Rename dict_get_next_value_idx().  All
3716         references updated.
3717         (dict_get_case_size) New function.
3718
3719         * aggregate.c: (create_sysfile) Use dict_get_case_size().
3720
3721         * get.c: (mtf_read_nonactive_records) Ditto.
3722
3723         * sort.c: (allocate_cases) Ditto.
3724         (write_initial_runs) Ditto.
3725         (merge) Ditto.
3726         (merge_once) Ditto.
3727
3728         * vfm.c: (prepare_for_writing) Ditto.
3729         (setup_lag) Ditto.
3730         (lag_case) Ditto.
3731
3732 Mon Feb 16 00:17:55 2004  Ben Pfaff  <blp@gnu.org>
3733
3734         Make vfm.c slightly less grotesque.
3735
3736         * vfm.c: (filter_var) Removed.
3737         (filter_index) Removed.
3738         (FILTERED macro) Removed.
3739         (exclude_this_case) New function.
3740         (process_active_file_write_case) Use exclude_this_case() instead
3741         of FILTERED and inline tests.
3742         (procedure_write_case) Ditto.
3743         (setup_filter) Removed.
3744         (open_active_file) Don't call setup_filter().
3745         (close_active_file) Call dict_get_filter() instead of checking
3746         filter_var.
3747
3748 Mon Feb 16 00:01:53 2004  Ben Pfaff  <blp@gnu.org>
3749
3750         * var.h: (struct variable) Update comments.
3751
3752 Sun Feb 15 23:14:59 2004  Ben Pfaff  <blp@gnu.org>
3753
3754         New functions dict_create_var_assert(), dict_lookup_var_assert().
3755         Converted several dict_*_var()/assert pairs into a single
3756         dict_*_var_assert().
3757
3758         * dictionary.c: (dict_create_var_assert) New function.
3759         (dict_lookup_var_assert) New function.
3760
3761 Sun Feb 15 23:06:08 2004  Ben Pfaff  <blp@gnu.org>
3762
3763         Got rid of "struct long_vec", envector(), devector(), etc.  Added
3764         two members `init', `reinit' to struct variable as a substitute.
3765         
3766         * Makefile.am: (pspp_SOURCES) Removed cases.c, cases.h.
3767         
3768         * cases.c: Removed.
3769
3770         * cases.h: Removed.
3771
3772         * aggregate.c: (parse_aggregate_functions) destvar doesn't need
3773         init.
3774
3775         * autorecode.c: (cmd_autorecode) destvars don't need init.
3776
3777         * compute.c: (lvalue_finalize) Set reinit.
3778
3779         * data-list.c: (fixed_parse_compatible) Don't need init usually.
3780         (dump_fmt_list) Ditto.
3781         (parse_free) Ditto.
3782
3783         * descript.q: (run_z_pass) Don't need init for z-scores.
3784
3785         * dictionary.c: (dict_create_var) Initialize `init', `reinit'
3786         members.
3787         (dict_clone_var) Copy `reinit' member, initialize `init' member.
3788
3789         * glob.c: (init_glob) Remove vec_init() calls.
3790
3791         * inpt-pgm.c: (cmd_end_input_program) Use `reinit', not `left'.
3792         
3793         * loop.c: (internal_cmd_loop) Don't need to call envector().
3794
3795         * numeric.c: (cmd_numeric) Ditto.
3796         (cmd_string) Ditto.
3797         (cmd_leave) Ditto.  Set `init', `reinit' members.
3798
3799         * recode.c: (cmd_recode) Don't need to call envector().
3800
3801         * repeat.c: (internal_cmd_do_repeat) Ditto.
3802
3803         * var.h: (struct variable) Remove `left'.  Add `init', `reinit'.
3804         (force_create_variable) Removed prototype.
3805         (force_dup_variable) Ditto.
3806
3807         * vector.c: (cmd_vector) Don't need to call envector().
3808
3809         * vfm.c: (reinit_sysmis) Removed.
3810         (reinit_blanks) Removed.
3811         (init_zero) Removed.
3812         (init_blanks) Removed.
3813         (process_active_file_write_case) No need to deal with vectors.
3814         Call clear_temp_case().
3815         (vector_initialization) Rewrite to use `init', `reinit'.
3816         (close_active_file) No need to call vec_clear().
3817         (procedure_write_case) Call clear_temp_case().
3818         (clear_temp_case) New function.
3819
3820 Sun Feb 15 20:50:36 2004  Ben Pfaff  <blp@gnu.org>
3821
3822         * pfm-write.c: (bufwrite) Get rid of nasty cast that also invoked
3823         undefined behavior.
3824
3825 Thu Feb 12 23:35:15 2004  Ben Pfaff  <blp@gnu.org>
3826
3827         Add auxiliary argument to procedure() interface.  Associated small
3828         clean-ups of vfm interface.
3829         
3830         * Updated every caller of procedure() and process_active_file() to
3831         reflect modified interface.  Simple, ordinary changes not listed
3832         otherwise below.
3833
3834         * Updated every function that implements struct case_stream's
3835         `read' function to take a write_case_func and a write_case_data.
3836         Also updated every caller of write_case() to instead call them
3837         through these arguments.  In some cases this meant that the extra
3838         args had to be threaded through a couple of extra levels.  This
3839         wasn't difficult or interesting so the details won't be given.
3840
3841         * data-list.c: (struct repeating_data_trns) Add members
3842         `write_case', `wc_data' as kluge.
3843         (read_one_set_of_repetitions) Rename repeating_data_trns_proc and
3844         make non-static.
3845         (repeating_data_set_write_case) New function.
3846
3847         * data-list.h: New file to declare repeating_data_trns_proc() and
3848         repeating_data_set_write_case().
3849
3850         * inpt-pgm.c: (input_program_source_read) Call
3851         repeating_data_set_write_case() for all the REPEATING DATA
3852         transformations, so that they know where to send their cases.
3853         It's a big kluge.  Also kluge in END CASE.
3854         (end_case_trns_proc) Never called anymore, but we still need it,
3855         so just assert(0).
3856
3857         * sort.c: (read_sort_output) Update to match struct case_stream
3858         `read' member.
3859
3860         * vfm.c: (struct write_case_data) New structure.
3861         (proc_func) Removed.
3862         (virt_proc_func) Removed.
3863         (begin_func) Removed.
3864         (virt_begin_func) Removed.
3865         (end_func) Removed.
3866         (write_case) Removed.
3867         (procedure) Added an auxiliary parameter to each function pointer
3868         argument's prototype.  Added an auxiliary data parameter.
3869         Rewrote.
3870         (process_active_file) Ditto.
3871         (process_active_file_write_case) Pass aux data along.
3872         (close_active_file) Ditto.
3873         (procedure_write_case) Ditto.
3874         (SPLIT_FILE_procfunc) Ditto.
3875
3876         * vfm.h: (typedef write_case_data) New.
3877         (typedef write_case_func) New.
3878         (struct case_stream) Add parameters to `read' member prototype.
3879         
3880 Thu Feb 12 19:24:53 WST 2004 John Darrington <john@darrington.wattle.id.au>
3881
3882         * t-test.q:  Added calculations for independent samples. (But no Levene
3883         test yet!)
3884
3885         * Makefile.am: Moved q_sources_c into own variable 
3886
3887 Wed Feb 11 23:56:51 2004  Ben Pfaff  <blp@gnu.org>
3888
3889         Miscellaneous cleanups.
3890         
3891         * Change unused to UNUSED in many source files to reflect modified
3892         pref.h.  Change use of __WIN32__, __MSDOS, __DJGPP__,
3893         __CYGWIN32__, __unix__, and unix not to assume that they're
3894         defined to a nonzero value.  Change use of __attribute__ to use
3895         NO_RETURN or PRINTF_FORMAT instead.
3896         
3897         * alloc.h: Move definitions for local_alloc(), local_free() here
3898         from ../pref.h.orig and simplify.
3899
3900         * expr-evl.c: Instead of working differently based on PAGED_STACK,
3901         use a pool allocator unconditionally.
3902         (CHECK_STRING_SPACE) Removed.
3903         (ALLOC_STRING_SPACE) Removed.
3904         (expr_evaluate) Use e->pool instead of CHECK_STRING_SPACE and
3905         ALLOC_STRING_SPACE.
3906
3907         * expr-opt.c: (dump_expression) Allocate string pool.
3908
3909         * expr-prs.c: (expr_free) Free string pool.
3910
3911         * pool.c: (pool_destroy) This pool must be removed from its
3912         parent's list of gizmos, not from its own.  Use free_all_gizmos().
3913         (pool_clear) New function.
3914         (free_all_gizmos) New function.
3915         (pool_alloc) Use space in empty block after this one if any.
3916         (pool_release) Only empty out blocks, don't actually free() them.
3917
3918         * print.c: Get rid of PAGED_STACK special case by always
3919         dynamically allocating line buffers.
3920         (struct print_trns) Always include the `line' member.
3921         (internal_cmd_print) Always initialize the `line' member.
3922         (alloc_line) Always allocate memory for `line'.
3923         (print_trns_proc) Always initialize buf from `line' member.
3924         (print_trns_free) Always free `line' memory.
3925
3926         * sort.c: (allocate_file_handles) Special-case MS-DOS for mkdir()
3927         call.
3928         
3929 Wed Feb 11 20:33:18 2004  Ben Pfaff  <blp@gnu.org>
3930
3931         * flip.c: Fixed crash from FLIP when a numeric variable is
3932           specified on NEWNAMES and a large value is used, and a couple of
3933           other minor bugs besides.
3934           (struct varname) Make name a 9-character fixed-size array
3935           instead of a 1-character variable size array.
3936           (make_new_var) Allow digits in variable names.
3937           (flip_stream_write) Limit numeric values to 8 characters and
3938           format system missing and very large and small values more
3939           appropriately.
3940
3941 Thu Feb  5 13:19:06 WAST 2004 John Darrington <john@darrington.wattle.id.au>
3942
3943         * command.c: Fixed test on command return status for the correct 
3944           value,  which had been causing a crash under certain invalid input.
3945
3946 Wed Feb  4 15:34:11 WST 2004 John Darrington <john@darrington.wattle.id.au>
3947
3948         * t-test.q: Added calculations for the one sample variant of the T-TEST
3949
3950 Tue Feb  3 20:09:54 2004  Ben Pfaff  <blp@gnu.org>
3951
3952         * tab.c: (render_strip) Fix bug that sometimes caused joined text
3953           in joined cells to be rendered outside box boundaries.
3954
3955 Tue Feb  3 18:56:45 WST 2004 John Darrington <john@darrington.wattle.id.au>
3956
3957         * random.c (rng_create): Fixed seeding so that it gets reseeded after
3958         SET seed=xx has been called.
3959
3960 Mon Jan 19 14:08:09 2004  Ben Pfaff  <blp@gnu.org> 
3961
3962         * random.c (rng_get_double): Fix always-returning-zero bug in my
3963         preferred way, and at the same time make sure rounding doesn't
3964         bite us.
3965
3966 Thu Jan  1 23:16:41 2004  Ben Pfaff  <blp@gnu.org>
3967
3968         * html.c: (change_attributes) Dead code, removed.
3969         (escape_string) Eliminate code to call change_attributes() that
3970         never actually called it.
3971         (output_tab_table) Get rid of dependence on tab_hit
3972         and struct tab_joined_cell's hit member, which are abominations.
3973
3974         * tab.c: (tab_output_text) Don't call
3975         d->class->text_set_font_by_name if it's a null pointer.
3976         (macro UNROLL_LOOP) Eliminate.
3977         (macro UNROLL_3_LOOPS) Eliminate.
3978         (tabi_render) Rewrite not to use the above macros.
3979
3980 Thu Jan  1 23:09:07 2004  Ben Pfaff  <blp@gnu.org>
3981
3982         Start working on a new output driver system, one that doesn't suck
3983         so much, by adding a "device-independent" output driver.  The idea
3984         is to write out only a single output stream, then use separate
3985         processes to translate them into whatever formats we want.  This
3986         is similar to how "groff" works with its various output drivers
3987         (grops, grotty, grodvi, ...).
3988         
3989         * Makefile.am: (pspp_SOURCES) Add devind.c, devind.h.
3990
3991         * list.q: (write_all_headers) Stub out devind class.
3992         (clean_up) Ditto.
3993         (determine_layout) Ditto.
3994         (list_cases) Ditto.
3995
3996         * output.c: (outp_init) Add devind class.
3997
3998         * devind.c: New file.
3999
4000         * devind.h: New file.
4001
4002 Thu Jan  1 23:08:14 2004  Ben Pfaff  <blp@gnu.org>
4003
4004         * frequencies.q: (hash_value_alpha) Fixed up the previous change
4005         to use the proper string length.
4006
4007 Wed Dec 31 16:27:33 WAST 2003 John Darrington <john@darrington.wattle.id.au>
4008
4009         * Fixed bug where FREQ would crash on alpha values
4010
4011 Tue Dec 30 22:42:57 2003  Ben Pfaff  <blp@gnu.org>
4012
4013         * Removed bletcherous alloca() workarounds for AIX from top of
4014         many files.  AIX can use the alternative alloca() implementation
4015         instead.
4016
4017 Tue Dec 30 22:35:16 2003  Ben Pfaff  <blp@gnu.org>
4018
4019         * ascii.c: (ascii_option) Fix implementation of headers option.
4020
4021 Tue Dec 30 22:32:53 2003  Ben Pfaff  <blp@gnu.org>
4022
4023         * ascii.c: Add a "squeeze" option to the ASCII driver to squeeze
4024         multiple blank lines into one.
4025         (struct ascii_driver_ext) Add squeeze_blank_lines option.
4026         (ascii_preopen_driver) Initialize squeeze_blank_lines.
4027         (static var option_tab) Add squeeze entry.
4028         (ascii_option) Set squeeze_blank_lines.
4029         (output_lines) Implement squeezing blank lines.
4030
4031 Wed Dec 31 07:19:46 WST 2003 John Darrington <john@darrington.wattle.id.au>
4032
4033         * Removed redundant code from output.h
4034
4035 Sat Dec 27 22:17:52 2003  Ben Pfaff  <blp@gnu.org>
4036
4037         Dictionary classes: each variable is "ordinary", "system", or
4038         "scratch".
4039
4040         * var.h: (enum dict_class) New enum.
4041
4042         * vars-prs.c: (dict_class_from_id) New function.
4043         (dict_class_to_name) New function.
4044
4045 Sat Dec 27 22:16:06 2003  Ben Pfaff  <blp@gnu.org>
4046
4047         * var.h: (struct freq_tab_set) Removed (not used).
4048
4049 Sat Dec 27 22:15:21 2003  Ben Pfaff  <blp@gnu.org>
4050
4051         * value-labels.c: (val_labs_destroy) vls needs to be freed too.
4052
4053 Sat Dec 27 22:10:49 2003  Ben Pfaff  <blp@gnu.org>
4054
4055         * stats.c: (hypercube) Rename pow4().  All references updated.
4056
4057 Sat Dec 27 22:05:49 2003  Ben Pfaff  <blp@gnu.org>
4058
4059         * rename-vars.c: (cmd_rename_variables) Rewritten.
4060         (compare_name) Removed.
4061
4062 Sat Dec 27 22:03:51 2003  Ben Pfaff  <blp@gnu.org>
4063
4064         var_set feature, and code taking advantage of it.
4065         
4066         * crosstabs.q: (static var var_dict) Removed.
4067         (static var variables) New variable.
4068         (static var variables_cnt) New variable.
4069         (cmd_crosstabs) Free variables instead of var_dict.
4070         (internal_cmd_crosstabs) Initialize and use variables,
4071         variables_cnt instead of var_dict.
4072         (free_var_dict) Removed.
4073         (crs_custom_tables) Use var_set instead of a copied dictionary.
4074         (crs_custom_variables) Set up variables, variables_cnt instead of
4075         var_dict.
4076         [DEBUGGING] (debug_print) Ditto.
4077
4078         * means.q: (mns_custom_tables) Use var_set instead of a copied
4079         dictionary.
4080
4081         * vars-prs.c: (parse_vs_variable) New function.
4082         (parse_dict_variable) Rewritten.
4083         (parse_variable) Rewritten.
4084         (parse_variables) Renamed parse_var_set_vars(), rewritten.
4085         (parse_variables) New function in terms of parse_var_set_vars().
4086         Now requires its first argument to be non-null.  All references
4087         that passed a null pointer updated to pass default_dict instead.
4088         (macro id_dict) Removed.
4089         (parse_DATA_LIST_vars) Add assertions.
4090         (parse_mixed_vars) Ditto.
4091         (struct var_set) New structure.
4092         (var_set_get_cnt) New function.
4093         (var_set_get_var) New function.
4094         (var_set_lookup_var) New function.
4095         (var_set_destroy) New function.
4096         (dict_var_set_get_cnt) New function.
4097         (dict_var_set_get_var) New function.
4098         (dict_var_set_lookup_var) New function.
4099         (dict_var_set_destroy) New function.
4100         (var_set_create_from_dict) New function.
4101         (struct array_var_set) New structure.
4102         (array_var_set_get_cnt) New function.
4103         (array_var_set_get_var) New function.
4104         (array_var_set_lookup_var) New function.
4105         (array_var_set_destroy) New function.
4106         (var_set_create_from_array) New function.
4107
4108         * q2c.c: (dump_parser) Use parse_variables(default_dict, ...)
4109         instead of parse_variables(NULL, ...) in output code.
4110
4111 Sat Dec 27 21:38:53 2003  Ben Pfaff  <blp@gnu.org>
4112
4113         Change inp_init from a 2-bit vector to an ordinary array.
4114         Initialize it all in cmd_end_input_program() instead of in
4115         create_variable().
4116
4117         * inpt-pgm.c: (enum value_init_type) New enum.
4118         (global var inp_init) Change to `enum value_init_type *', make
4119         static.
4120         (inp_init_size) Removed.
4121         (inp_nval) Change to `size_t', make static.
4122         (cmd_input_program) Don't initialize inp_init or inp_init_size.
4123         (cmd_end_input_program) Initialize inp_init, inp_nval.
4124         (init_case) Rewrite.
4125         (clear_case) Rewrite.
4126
4127         * inpt-pgm.h: Removed.
4128
4129 Sat Dec 27 21:36:38 2003  Ben Pfaff  <blp@gnu.org>
4130
4131         * hash.c: (hsh_hash_bytes) Use Fowler-Noll-Vo hash instead of
4132         Colin Plumb hash.  It is simpler and should better resist
4133         collisions.
4134         (hsh_hash_string) Ditto.
4135
4136 Sat Dec 27 21:34:57 2003  Ben Pfaff  <blp@gnu.org>
4137
4138         * get.c: (export_write_case_func) Remove debug printing code.
4139
4140 Sat Dec 27 21:11:09 2003  Ben Pfaff  <blp@gnu.org>
4141
4142         * get.c: (cmd_save_internal) Rename parameter.  Use &t->h instead
4143         of cast.
4144         (save_write_case_func) Use &trns->h instead of cast.
4145         (cmd_export) Use &t->h instead of cast.
4146
4147 Sat Dec 27 20:57:42 2003  Ben Pfaff  <blp@gnu.org>
4148
4149         Moved vectors into the dictionary.
4150
4151         * var.h: (struct vector) Moved here from vector.h.  `index' member
4152         renamed `idx', `v' renamed `var', `nv' renamed `cnt'.  All
4153         references updated.
4154         
4155         * vector.h: Removed.
4156
4157         * vector.c: (global var vec) Removed.
4158         (global var nvec) Removed.
4159         (cmd_vector) Rewritten.
4160         (find_vector) Removed.
4161
4162         * dictionary.c: (dict_create_vector) New function.
4163         (dict_get_vector) New function, replaces reading global vec[]
4164         array.
4165         (dict_get_vector_cnt) New function, replaces reading global nvec
4166         variable.
4167         (dict_lookup_vector) New function, replaces find_vector().
4168         (dict_clear_vectors) New function.
4169
4170 Sat Dec 27 20:54:01 2003  Ben Pfaff  <blp@gnu.org>
4171
4172         Start to move away from `struct variable' p `union' member to void
4173         * aux member.
4174
4175         * var.h: (struct variable) Add `aux' member.
4176
4177 Sat Dec 27 20:36:25 2003  Ben Pfaff  <blp@gnu.org>
4178
4179         Get rid of struct variable `foo' member.
4180
4181         * frequencies.q: (internal_cmd_frequencies) Use p.frq.used instead
4182         of foo.
4183         (frq_custom_variables) Ditto.
4184         (frq_custom_grouped) Ditto.
4185
4186         * get.c: (struct save_trns) Change `var' member from `int *' to
4187         `struct variable **'.
4188         (cmd_save_internal) Use aux instead of foo.
4189         (save_trns_proc) Use revised `var' member.
4190         (static var mtf_seq_no) Renamed mtf_seq_num.
4191         (static var mtf_seq_nums) New static var.
4192         (cmd_match_files) Initialize mtf_seq_nums.
4193         (mtf_free) Free mtf_seq_nums.
4194         (mtf_processing) Use mtf_seq_nums instead of foo.
4195         (mtf_merge_dictionary) No need to initialize mv->foo.
4196         (cmd_export) Use aux instead of foo.  Use revised `var' member.
4197         (mns_custom_tables) Don't use foo to check for duplicates, that's
4198         what PV_NO_DUPLICATE is for.
4199
4200         * var.h: (struct variable) Remove `foo' member.
4201         (struct frequencies_proc) New member.
4202         
4203 Sat Dec 27 19:46:13 2003  Ben Pfaff  <blp@gnu.org>
4204
4205         Clean up COMPUTE and IF.
4206
4207         * compute.c: More or less rewrite the darn thing.
4208         (struct compute_trns) Rename and reorder and add and delete
4209         members.
4210         (cmd_compute) Rewrite.
4211         (compute_num) Make conditional on test expression.  Now used for
4212         both COMPUTE and IF.
4213         (compute_num_vec) Ditto.
4214         (compute_str) Ditto.
4215         (compute_str_vec) Ditto.
4216         (cmd_if) Rewrite.
4217         (if_num) Removed.
4218         (if_num_vec) Removed.
4219         (if_str) Removed.
4220         (if_str_vec) Removed.
4221         (parse_target_expression) Renamed parse_rvalue_expression(),
4222         rewritten.
4223         (new_trns) Renamed compute_trns_create(), rewritten.
4224         (delete_trns) Removed.
4225         (free_trns) Renamed compute_trns_free(), rewritten.
4226         (struct lvalue) New structure.
4227         (parse_var_or_vec) Renamed lvalue_parse(), rewritten.
4228         (lvalue_get_type) New function.
4229         (lvalue_is_vector) New function.
4230         (lvalue_finalize) New function.
4231         (lvalue_destroy) New function.
4232         
4233 Sat Dec 27 19:44:14 2003  Ben Pfaff  <blp@gnu.org>
4234
4235         * command.def: Disallow MODIFY VARS in input mode, so that
4236         variables can't get dropped and confuse cmd_end_input_program()'s
4237         attempt to fill inp_init[].
4238         
4239         * modify-vars.c: (static var forward_positional_ordering) New
4240         variable.
4241         (struct var_modification) Entirely changed.
4242         (rearrange_dict) Interface changed, rewritten.
4243         (cmd_modify_vars) Deal with modified struct var_modification, much
4244         rewritten.
4245         (struct var_renaming) New structure.
4246         (compare_var_renaming_by_new_name) New function.
4247         (validate_var_modification) New function.
4248
4249         * var.h: (struct modify_vars_proc) Removed.
4250         (struct variable) Removed member p.mfv.
4251
4252 Sat Dec 27 19:40:26 2003  Ben Pfaff  <blp@gnu.org>
4253
4254         Make EVALUATE a valid command whether we're debugging or not, so
4255         that `make check' can succeed regardless of whether debugging is
4256         turned on.
4257         
4258         * command.def: [GLOBAL_DEBUGGING] Drop the #if.
4259
4260         * compute.c: [GLOBAL_DEBUGGING] (cmd_evaluate) Drop the #if.
4261
4262 Sat Dec 27 19:34:40 2003  Ben Pfaff  <blp@gnu.org>
4263
4264         * apply-dict.c: (cmd_apply_dictionary) Replace a ghastly switch
4265         statement by a simple if test.
4266
4267         * dfm.c: (dfm_get_record) Add assertion.
4268
4269 Sat Dec 27 17:51:26 2003  Ben Pfaff  <blp@gnu.org>
4270
4271         For each file x.c, move #include "x.h" to the very top of the
4272         include list, to catch x.h failing to include the proper headers.
4273
4274 Sat Dec 27 17:50:19 2003  Ben Pfaff  <blp@gnu.org>
4275
4276         * algorithm.c: (find) New function.
4277         (remove_equal) New function.
4278         (set_difference) New function.
4279         (adjacent_find_equal) New function.
4280         [TEST_UNIQUE] Removed test case.
4281         (copy_if) Find end test.
4282
4283 Sat Dec 27 17:42:45 2003  Ben Pfaff  <blp@gnu.org>
4284
4285         * dictionary.c: (dict_get_case_weight) New convenience function.
4286
4287         * aggregate.c: (accumulate_aggregate_info) Use
4288         dict_get_case_weight().
4289
4290         * frequencies.q: (calc_general) Ditto.
4291         (calc_integer) Ditto.
4292         (calc) Ditto.
4293
4294         * t-test.q: (groups_calc) Ditto.
4295         (z_calc) Ditto.
4296
4297 Sat Dec 27 17:29:45 2003  Ben Pfaff  <blp@gnu.org>
4298
4299         * glob.c: (global var default_dict) Change from `struct
4300         dictionary' to `struct dictionary *'.  All references changed.
4301         (init_glob) Initialize default_dict with dict_create().
4302
4303 Sat Dec 27 17:06:06 2003  Ben Pfaff  <blp@gnu.org>
4304
4305         struct dictionary now made opaque.  All related functions:
4306
4307         * get.c: (rename_variables) Removed.
4308         (dict_delete_run) Removed.
4309         
4310         * temporary.c: (copy_variable) Removed.
4311         (new_dictionary) Removed.
4312         (save_dictionary) Removed.
4313         (restore_dictionary) Removed.
4314         (free_dictionary) Removed.
4315
4316         * vars-atr.c: (clear_default_dict) Removed.
4317         (find_variable) Removed.
4318         (find_dict_variable) Removed.
4319         (create_variable) Removed.
4320         (delete_variable) Removed.
4321         (common_init_stuff) Removed.
4322         (init_variable) Removed.  Updating of inp_init moved into
4323         cmd_end_input_program().
4324         (replace_variable) Removed.
4325         (rename_variable) Removed.
4326         (clear_variable) Removed.
4327         (dup_variable) Removed.
4328
4329         * vars-prs.c: (is_varname) Removed.
4330         (is_dict_varname) Removed.
4331         (fill_all_vars) Removed.
4332
4333         * vector.c: (find_vector) Removed.
4334
4335         * weight.c: (stop_weighting) Removed.
4336
4337         * dictionary.c: New file.
4338         (dict_create) New, replaces new_dictionary().
4339         (dict_clone) New, replaces save_dictionary() and
4340         restore_dictionary().
4341         (dict_clear) New, replaces clear_default_dict().
4342         (dict_destroy) New, replaces free_dictionary().
4343         (dict_get_var_cnt) New function, replaces references to
4344         dict->nvar.
4345         (dict_get_var) New function, replaces references to dict->var[i].
4346         (dict_get_vars) New function, replaces fill_all_vars().
4347         (dict_create_var) New, replaces create_variable().  Interface
4348         drops `type' parameter, using a zero `width' to designate numeric.
4349         (dict_clone_var) New, replaces dup_variable().
4350         (dict_rename_var) New, replaces rename_variable().
4351         (dict_lookup_var) New, replaces find_variable(),
4352         find_dict_variable(), is_varname().
4353         (dict_contains_var) New function.
4354         (compare_variable_dblptrs) New function.
4355         (dict_delete_var) New function, replaces clear_variable().
4356         (dict_delete_vars) New function, replaces dict_delete_run().
4357         (dict_reorder_vars) New function.
4358         (dict_rename_vars) New function, replaces rename_variables().
4359         (dict_get_weight) New function, replaces reading dict->weight_var.
4360         (dict_set_weight) New function, replaces writing dict->weight_var
4361         or calling stop_weight(dict).
4362         (dict_get_filter) New function, replaces reading dict->filter_var.
4363         (dict_set_filter) New function, replaces writing dict->filter_var.
4364         (dict_get_case_limit) New function, replaces reading dict->N.
4365         (dict_set_case_limit) New function, replaces writing dict->N.
4366         (dict_get_value_cnt) New function, replaces reading dict->nval.
4367         (dict_compact_values) New function, replaces a loop that was
4368         replicated in several places.
4369         (dict_get_split_vars) New function, replaces reading dict->splits.
4370         (dict_get_split_cnt) New function, replaces reading
4371         dict->n_splits.
4372         (dict_set_split_vars) New function, replaces writing dict->splits.
4373         (dict_get_label) New function, replaces reading dict->label.
4374         (dict_set_label) New function, replaces writing dict->label.
4375         (dict_get_documents) New function, replaces reading
4376         dict->documents.
4377         (dict_set_documents) New function, replaces writing
4378         dict->documents.
4379         
4380         All references to above functions updated.
4381         
4382         * aggregate.c: (cmd_aggregate) Copy file label and documents from
4383         old dictionary to new by hand, because dict_create() can't do it
4384         itself.  Use dict_set_documents(), dict_set_split_vars().
4385
4386         * temporary.c: (cancel_temporary) Also set temp_dict to NULL after
4387         calling dict_destroy().
4388
4389         * data-list.c: (dls_var_spec) Remove `type' member, replace by
4390         `width'.
4391         (fixed_parse_compatible) Some slightly nontrivial changes for
4392         dict_create_var().
4393         (dump_fmt_list) Ditto.
4394         (parse_free) Ditto.
4395
4396         * file-type.c: (create_col_var) Ditto.
4397
4398         * get.c: (cmd_get) Use dict_compact_values() instead of a loop.
4399         (trim_dictionary) Use dict_delete_vars(), dict_reorder_vars().
4400         (rename_variables) Use dict_rename_vars().
4401         (mtf_merge_dictionary) Use dict_get_documents(),
4402         dict_set_documents(), dict_compact_values().
4403
4404         * pfm-read.c: (read_variables) Deal with changes to weighting.
4405
4406         * q2c.c: (dump_parser) Use dict_lookup_var() instead of
4407         is_varname() in output code.
4408
4409         * sfm-read.c: (read_header) Use dict_create(), dict_set_label(),
4410         other dictionary functions.
4411
4412         * title.c: (add_document_line) Use dict_get_documents(),
4413         dict_set_documents().
4414
4415         * vars-atr.c: (discard_variables) Use dict_clear(default_dict),
4416         reset default_handle by hand.  dict_clear() will clear vectors so
4417         there's no need for that by hand.
4418
4419         * vfm.c: (close_active_file) Move call to finish_compaction()
4420         earlier, so that we can do the compaction as a single step using
4421         dict_compact_values().  Use dict_clear_vectors().
4422         (finish_compaction) Use dict_delete_var(), dict_compact_values().
4423                 
4424         Some functions don't have replacements:
4425
4426         * vars-atr.c: (force_create_variable) Removed.  All references
4427         updated to dict_create_var() followed by an assertion.
4428         (force_dup_variable) Removed.  All references updated to
4429         dict_clone_var() followed by an assertion.
4430         
4431         * weight.c: (update_weighting) Removed.  No longer necessary, so
4432         all references removed.
4433
4434 Sat Dec 27 16:43:01 2003  Ben Pfaff  <blp@gnu.org>
4435
4436         Clean up AGGREGATE.
4437         
4438         * aggregate.c: Eliminate separation of weighted and unweighted
4439         case.  It made the code too obscure and I doubt it was actually
4440         faster.  Instead, all code uses the "weighted" code, because
4441         that's a generalization of the "unweighted" code.
4442         (FWEIGHT) Removed.
4443         (FOPTIONS) Ditto.
4444         (parse_aggregate_functions) No need to set FWEIGHT.
4445         (accumulate_aggregate_info) Get rid of FWEIGHT cases.
4446         (dump_aggregate_info) Ditto.
4447         (initialize_aggregate_info) No need for special plain_function
4448         that gets rid of FWEIGHT option.
4449
4450         * aggregate.c: Get rid of approximations.
4451         (accumulate_aggregate_info) Don't use approx_gt(), approx_lt(),
4452         approx_in_range().
4453         (aggregate_single_case) Don't use approx_ne().
4454
4455 Sat Dec 27 16:19:36 2003  Ben Pfaff  <blp@gnu.org>
4456
4457         * ascii.c (ascii_line_width): Dead code, removed.
4458
4459         * postscript.c (ps_line_width): Ditto.
4460
4461         * q2c.c (xrealloc): Ditto.
4462
4463         * count.c (internal_cmd_count): Ditto.
4464
4465         * means.q (validate_dependent_endpoint): Ditto.
4466
4467         * set.q: (cmd_gset) Ditto.
4468
4469         * weight.c: [0] (weight_trns_proc) Ditto.
4470
4471 Sat Dec 27 16:18:16 2003  Ben Pfaff  <blp@gnu.org>
4472
4473         Make the code -Wmissing-prototypes clean.
4474
4475         * Makefile.am (version.c): Add #include "version.h".
4476         
4477         * ascii.c: (ascii_open_global) Make static.
4478         (ascii_close_page) Ditto.
4479         (ascii_font_sizes) Ditto.
4480         (ascii_postopen_driver) Ditto.
4481         (ascii_close_driver) Ditto.
4482         (ascii_option) Ditto.
4483         (ascii_open_page) Ditto.
4484         (ascii_line_horz) Ditto.
4485         (ascii_line_vert) Ditto.
4486         (ascii_line_intersection) Ditto.
4487         (ascii_box) Ditto.
4488         (ascii_polyline_begin) Ditto.
4489         (ascii_polyline_point) Ditto.
4490         (ascii_polyline_end) Ditto.
4491         (ascii_text_set_font_by_name) Ditto.
4492         (ascii_text_set_font_by_position) Ditto.
4493         (ascii_text_set_font_by_family) Ditto.
4494         (ascii_text_get_font_name) Ditto.
4495         (ascii_text_get_font_family) Ditto.
4496         (ascii_text_set_size) Ditto.
4497         (ascii_text_get_size) Ditto.
4498         (ascii_text_metrics) Ditto.
4499         (ascii_text_draw) Ditto.
4500         (ascii_close_page) Ditto.
4501
4502         * cmdline.h: New header for parse_command_line().  Used where
4503         needed.
4504
4505         * command.c: Move prototypes for cmd_*() functions to command.h.
4506
4507         * command.h: Prototypes for cmd_*() functions moved here from
4508         command.c.
4509
4510         * crosstabs.q: (gamma_int) Ditto.
4511
4512         * file-handle.h: Add fh_init_files() prototype.
4513         
4514         * getline.c: (welcome) Ditto.
4515
4516         * glob.h: New header for init_glob().  Used where appropriate.
4517
4518         * hash.c: (comparison_helper) Ditto.
4519
4520         * html.c: (html_open_global) Ditto.
4521         (html_close_global) Ditto.
4522         (html_preopen_driver) Ditto.
4523         (html_postopen_driver) Ditto.
4524         (html_close_driver) Ditto.
4525         (html_option) Ditto.
4526         (html_open_page) Ditto.
4527         (html_close_page) Ditto.
4528         (html_submit) Ditto.
4529
4530         * inpt-pgm.c: (input_program_source_read) Ditto.
4531
4532         * output.c: (find_defn_value) Ditto.
4533         (destroy_list) Ditto.
4534
4535         * pfm-read.c: (read_int) Ditto.
4536
4537         * postscript.c: (ps_open_global) Ditto.
4538         (ps_close_global) Ditto.
4539         (ps_font_sizes) Ditto.
4540         (ps_preopen_driver) Ditto.
4541         (ps_postopen_driver) Ditto.
4542         (ps_close_driver) Ditto.
4543         (ps_option) Ditto.
4544         (ps_open_page) Ditto.
4545         (ps_close_page) Ditto.
4546         (ps_line_horz) Ditto.
4547         (ps_line_vert) Ditto.
4548         (ps_line_intersection) Ditto.
4549         (ps_box) Ditto.
4550         (ps_polyline_begin) Ditto.
4551         (ps_polyline_point) Ditto.
4552         (ps_polyline_end) Ditto.
4553         (ps_text_set_font_by_name) Ditto.
4554         (ps_text_set_font_by_position) Ditto.
4555         (ps_text_set_font_family) Ditto.
4556         (ps_text_get_font_name) Ditto.
4557         (ps_text_get_font_family) Ditto.
4558         (ps_text_set_size) Ditto.
4559         (ps_text_get_size) Ditto.
4560         (ps_text_metrics) Ditto.
4561         (ps_text_draw) Ditto.
4562
4563         * q2c.c: (finish_up) Ditto.
4564         (xmalloc) Ditto.
4565         (xstrdup) Ditto.
4566         (get_buffer) Ditto.
4567         (st_lower) Ditto.
4568         (st_upper) Ditto.
4569         (skip_ws) Ditto.
4570         (get_line) Ditto.
4571         (add_symbol) Ditto.
4572         (find_symbol) Ditto.
4573         (lex_get) Ditto.
4574         (force_id) Ditto.
4575         (force_string) Ditto.
4576         (match_id) Ditto.
4577         (match_token) Ditto.
4578         (skip_token) Ditto.
4579         (parse) Ditto.
4580         (parse_setting) Ditto.
4581         (parse_specifier) Ditto.
4582         (parse_specifiers) Ditto.
4583         (parse_subcommand) Ditto.
4584         (dump_specifier_vars) Ditto.
4585         (is_keyword) Ditto.
4586         (make_identifier) Ditto.
4587         (dump_declarations) Ditto.
4588         (dump_specifier_init) Ditto.
4589         (dump_vars_init) Ditto.
4590         (make_match) Ditto.
4591         (dump_specifier_parse) Ditto.
4592         (dump_subcommand) Ditto.
4593         (dump_parser) Ditto.
4594         (dump_header) Ditto.
4595         (dump_free) Ditto.
4596         (recognize_directive) Ditto.
4597
4598         * recode.c: (string_to_long) Ditto.
4599
4600         * repeat.c: (find_DO_REPEAT_substitution) Ditto.
4601
4602         * repeat.h: New header for perform_DO_REPEAT_substitutions, used
4603         where appropriate.
4604
4605         * sort.c: (sort_stream_read) Ditto.
4606         (sort_stream_mode) Ditto.
4607         
4608 Fri Dec 19 23:35:04 2003  Ben Pfaff  <blp@gnu.org>
4609
4610         * algorithm.c (binary_search): Fix comparison.
4611
4612 Fri Dec 19 23:27:45 2003  Ben Pfaff  <blp@gnu.org>
4613
4614         * algorithm.c: (binary_search) Fix assertion.
4615
4616 Fri Dec 19 21:31:48 2003  Ben Pfaff  <blp@gnu.org>
4617
4618         * sysfile-info.c: (compare_vectors_by_name) Rewrite.
4619
4620 Fri Dec 19 21:30:24 2003  Ben Pfaff  <blp@gnu.org>
4621
4622         * sort.c: (compare_case_lists) Rewrite.
4623
4624 Fri Dec 19 16:44:22 2003  Ben Pfaff  <blp@gnu.org>
4625
4626         * quicksort.c: Removed (not used).
4627
4628         * quicksort.h: Removed (not used).
4629
4630         * sort.c: Removed blp_quicksort() prototype.
4631
4632 Fri Dec 19 16:42:13 2003  Ben Pfaff  <blp@gnu.org>
4633
4634         * postscript.c: (int_2_compare) Rewrite.
4635         (compare_line) Rewrite.
4636
4637 Fri Dec 19 16:38:35 2003  Ben Pfaff  <blp@gnu.org>
4638
4639         * matrix-data.c (compare_factors) Use lexicographical_compare()
4640         algorithm.
4641         (compare_doubles) New function.
4642         
4643         * algorithm.c: (lexicographical_compare) New algorithm.
4644
4645 Fri Dec 19 16:23:45 2003  Ben Pfaff  <blp@gnu.org>
4646
4647         * matrix-data.c (compare_variables_by_mxd_vartype): Rewrite.
4648
4649 Fri Dec 19 15:54:45 2003  Ben Pfaff  <blp@gnu.org>
4650
4651         * expr-prs.c: (cmp_func) Removed.
4652         (parse_function) Use binary_search() algorithm.
4653         (compare_functions) New function.
4654         (init_func_tab) Use sort() algorithm.
4655
4656         * algorithm.c: (binary_search) New algorithm.
4657
4658 Fri Dec 19 15:50:45 2003  Ben Pfaff  <blp@gnu.org>
4659
4660         * descript.q: (display) Use sort() algorithm instead of qsort().
4661         (compare_func) Removed.
4662         (descriptives_compare_variables) New function.
4663
4664 Fri Dec 19 15:08:38 2003  Ben Pfaff  <blp@gnu.org>
4665
4666         Get rid of AVL trees.  Hashes are more appropriate for everything
4667         PSPP does.
4668
4669         * Makefile.am: (pspp_SOURCES) Remove avl.c, avl.h.
4670         
4671         * avl.c: Removed.
4672
4673         * avl.h: Removed.
4674
4675 Fri Dec 19 14:33:31 2003  Ben Pfaff  <blp@gnu.org>
4676
4677         Much code can be clarified by using C++ STL-like algorithms.  Not
4678         all uses of these algorithms are listed below, only the ones where
4679         the change to an algorithm was the only change of interest.
4680         
4681         * Makefile.am: (pspp_SOURCES) Add algorithm.c, algorithm.h.
4682         
4683         * algorithm.c: New file.
4684
4685         * algorithm.h: New file.
4686
4687         * modify-vars.c: (static var forward) Removed.
4688         (static var positional) Removed.
4689         (compare_variables) Removed.
4690         (struct ordering) New.
4691         (cmd_modify_vars) Use sort() algorithm.
4692         (compare_variables_given_ordering) New function.
4693         (rearrange_dict) Use sort() algorithm.
4694
4695         * sysfile-info.c: (cmd_display) Use sort() algorithm.
4696         (cmp_var_by_name) Removed.
4697
4698 Fri Dec 19 14:26:17 2003  Ben Pfaff  <blp@gnu.org>
4699
4700         Make file handles use a hash table.
4701         
4702         * file-handle.q: (files) Change to hash table, make static.
4703         (cmd_file_handle) Use hash table functions.
4704         (fh_get_handle_by_filename) Ditto.
4705         (fh_get_handle_by_name) Ditto.
4706         (hash_file_handle) New function.
4707         (cmp_file_handle) Rewrite.
4708         (fh_init_files) Use hash table functions.
4709
4710 Fri Dec 19 14:24:38 2003  Ben Pfaff  <blp@gnu.org>
4711
4712         Clean up FREQUENCIES.
4713         
4714         * Makefile.am: (pspp_SOURCES) Remove frequencies.g.
4715
4716         * frequencies.q: Remove a lot of old #if'd out code at the end.
4717         (internal_cmd_frequencies) Use calc() instead of calc_no_weight()
4718         or calc_weight().  Initialize percentile_values.
4719         (calc) New function based on calc_weight() from frequencies.g.
4720         (precalc) Use hash functions.
4721         (static var comparison_func) Removed.
4722         (static var comparison_param) Removed.
4723         (comparison_helper) Removed.
4724         (get_freq_comparator) New function.
4725         (not_missing) New function.
4726         (add_freq) Removed.
4727         (postprocess_freq_tab) Use hash table functions, algorithms,
4728         get_freq_comparator().  Rewrite.
4729         (cleanup_freq_tab) Rephrase.
4730         (add_percentile) Clean up spacing.
4731         (hash_value_numeric) New function.
4732         (hash_value_alpha) New function.
4733         (compare_value_numeric_a) Rewrite.
4734         (compare_value_alpha_a) Rewrite.
4735         (compare_value_numeric_d) Rewrite.
4736         (compare_value_alpha_d) Rewrite.
4737         (compare_freq_numeric_a) Rewrite.
4738         (compare_freq_alpha_a) Rewrite.
4739         (compare_freq_numeric_d) Rewrite.
4740         (compare_freq_alpha_d) Rewrite.
4741         (calc_stats) Clean up mode, percentiles, max.
4742         (dump_statistics) Clean up spacing.
4743         
4744         * frequencies.g: Removed.
4745
4746         * var.h: (struct freq_tab) Change `data' to hash table.
4747
4748 Fri Dec 19 14:15:46 2003  Ben Pfaff  <blp@gnu.org>
4749
4750         * file-handle.h: Remove declaration of global variable `files',
4751         which wasn't used anywhere.
4752
4753         * postscript.c: (add_encoding) Remove superfluous cast.
4754         (line) Ditto.
4755
4756         * sfm-read.c: [linux] (bswap_int32) Drop ntohl() non-portable
4757         version.
4758
4759         * temporary.c: [0] (display_tree) Removed.
4760
4761 Fri Dec 19 14:13:04 2003  Ben Pfaff  <blp@gnu.org>
4762
4763         Implement a new random number generator based on the alleged RC4
4764         algorithm.
4765
4766         * expr-evl.c: (expr_evaluate) Use rng_get_double_normal() instead
4767         of rand_normal().
4768
4769         * random.c: [!HAVE_GOOD_RANDOM] (real_rand) Removed.
4770         [!HAVE_GOOD_RANDOM] (real_srand) Removed.
4771         (macro k) Removed.
4772         (static var V[]) Removed.
4773         (static var Y) Removed.
4774         (static var X2) Removed.
4775         (setup_randomize) Removed.
4776         (shuffle) Removed.
4777         (rand_uniform) Removed.
4778         (rand_normal) Removed.
4779         (struct rng) New structure.
4780         (rng_create) New function.
4781         (rng_destroy) New function.
4782         (swap_byte) New static function.
4783         (rng_seed) New function.
4784         (rng_get_bytes) New function.
4785         (rng_get_int) New function.
4786         (rng_get_unsigned) New function.
4787         (rng_get_double) New function.
4788         (rng_get_double_normal) New function.
4789         (pspp_rng) New function.
4790
4791         * random.h: Sync up to random.c.
4792
4793         * sample.c: (struct sample_trns) Make `frac' unsigned and a
4794         fraction of UINT_MAX, not 65536.
4795         (cmd_sample) Use rng_get_unsigned(), rng_get_double(), UINT_MAX
4796         fraction.
4797
4798         * vfm.c: (open_active_file) No need to call setup_randomize() any
4799         longer.
4800
4801 Fri Dec 19 12:05:56 2003  Ben Pfaff  <blp@gnu.org>
4802
4803         Change dictionary name indexes to use hash tables instead of AVL
4804         trees.
4805
4806         * crosstabs.q: (free_var_dict) Use hash tables.
4807         (crs_custom_tables) Ditto.
4808         (calc_general) Ditto.
4809         (compare_table_entry) Rewrite.
4810         (enum_var_values) Reorder parameters.  All references updated.
4811         Rewrite.
4812
4813         * get.c: (rename_variable) Use hash tables.
4814         (mtf_merge_dictionary) Ditto.
4815
4816         * glob.c: (init_glob) Use hash tables.
4817         (cmp_variable) Removed.
4818
4819         * means.q: (mns_custom_tables) Use hash tables.
4820
4821         * modify-vars.c: (rearrange_dict) Use hash tables.
4822
4823         * rename-vars.c: (cmd_rename_variables) Use hash tables.
4824
4825         * sfm-read.c: (read_header) Use hash tables.
4826         (read_variables) Ditto.
4827
4828         * temporary.c: (new_dictionary) Use hash tables.
4829         (save_dictionary) Ditto.
4830         (restore_dictionary) Ditto.
4831
4832         * var.h: (struct dictionary) Change AVL tree `var_by_name' into
4833         hash table `name_tab'.
4834
4835         * vars-atr.c: [DEBUGGING] (dump_one_var_node) Removed.
4836         [DEBUGGING] (dump_var_tree) Removed.
4837         (find_variable) Use hash tables.
4838         (find_dict_variable) Ditto.
4839         (common_init_stuff) Ditto.
4840         (rename_variable) Ditto.
4841         (clear_variable) Ditto.  Also, remove debug code.
4842         (dup_variable) Use hash tables.
4843
4844         * vars-prs.c: (fill_all_vars) Use hash tables.
4845         (is_dict_varname) Ditto.
4846         (parse_dict_variable) Ditto.
4847         
4848 Fri Dec 19 11:46:23 2003  Ben Pfaff  <blp@gnu.org>
4849
4850         Change value labels to use hash tables instead of AVL trees, and
4851         change value labels into an ADT.
4852
4853         * Makefile.am: (pspp_SOURCES) Add value-labels.c, value-labels.h.
4854         
4855         * value-labels.c: New file.
4856
4857         * value-labels.h: New file.
4858
4859         * apply-dict.c: (cmd_apply_dictionary) Use value label ADT.
4860         Get rid of a stupid use of goto.
4861
4862         * autorecode.c: (compare_alpha_value) Rewrite.
4863         (hash_alpha_value) Ditto.
4864         (compare_numeric_value) Rewrite.
4865         (hash_numeric_value) Ditto.
4866
4867         * frequencies.q: (dump_full) Use value label ADT.
4868
4869         * pfm-read.c: (read_value_label) Use value label ADT.
4870
4871         * pfm-write.c: (write_value_labels) Use value label ADT.
4872
4873         * sfm-read.c: (read_variables) Use value label ADT.
4874         (read_value_labels) Rewrite.
4875
4876         * sfm-write.c: (write_value_labels) Rewrite.
4877
4878         * sysfile-info.c: (cmd_sysfile_info) Use value label ADT.
4879         (display_variables) Ditto.
4880         (describe_variable) Ditto.
4881
4882         * t-test.q: (print_t_groups) Use value label ADT.
4883
4884         * temporary.c: (copy_variable) Use value label ADT.
4885         (free_dictionary) Ditto.
4886
4887         * val-labs.c: (verify_val_labs) Use value label ADT.
4888         (get_label) Ditto.
4889         (debug_print) Ditto.
4890         (val_lab_cmp) Removed.
4891         (inc_ref_count) Removed.
4892         (copy_value_labels) Removed.
4893
4894         * var.h: (struct value_label) Removed.
4895         (struct variable) Change AVL tree `val_lab' into hash table
4896         `val_labs'.
4897
4898         * vars-atr.c: (init_variable) Use value label ADT.
4899         (clear_variable) Ditto.
4900         (free_value_label) Removed.
4901         (free_val_lab) Removed.
4902         (get_val_lab) Removed.
4903         (compare_variables) New function.
4904         (hash_variable) New function.
4905
4906         * vfm.c: (dump_splits) Use value label ADT.
4907
4908 Fri Dec 19 11:18:11 2003  Ben Pfaff  <blp@gnu.org>
4909
4910         Add to the hash table interface.
4911
4912         * hash.c: (hsh_hash_bytes) Add assertion.
4913         (hsh_hash_string) Ditto.
4914         (hsh_clear) Ditto.
4915         (hsh_rehash) Ditto.
4916         (hsh_probe) Ditto.
4917         (hsh_create) Ditto.  Also make minimum `size'.
4918         (hsh_destroy) Rephrase.
4919         (sort_nulls_last) Removed.
4920         (not_null) New function.
4921         (hsh_data) Ditto.
4922         (comparison_helper) Ditto.
4923         (hsh_sort) Rewritten.
4924         (hsh_data_copy) New function.
4925         (hsh_sort_copy) Ditto.
4926         (hsh_insert) Ditto.
4927         (hsh_replace) Ditto.
4928         (hsh_hash_double) Ditto.
4929         (hsh_delete) Fix stupid bug.
4930         
4931 Thu Dec 18 12:27:03 WAST 2003 John Darrington <john@darrington.wattle.id.au>
4932         * added a calculation of the mode to FREQUENCIES
4933
4934 Wed Dec 17 12:53:01 WAST 2003 John Darrington <john@darrington.wattle.id.au>
4935
4936         * moved (un)defs of DEBUGGING to config.h
4937
4938 Mon Dec 15 21:35:59 2003  Ben Pfaff  <blp@gnu.org>
4939
4940         * groff-font.c: (add_kern) Fix indentation.
4941         (add_kern) Use & instead of % to take power-of-2 modulus.
4942         (font_get_kern_adjust) Likewise.
4943
4944 Fri Dec 12 23:54:37 2003  Ben Pfaff  <blp@gnu.org>
4945
4946         * autorecode.c: (recode) Replace stupid use of memcpy() by
4947         memberwise copy.
4948         (hash_alpha_value) Use hsh_hash_bytes().  Get rid of nasty casts.
4949         (hash_numeric_value) Ditto.
4950         (autorecode_proc_func) pool_strdup() was wrong here because the
4951         source string was not null-terminated.  Use new pool_strndup()
4952         instead.
4953
4954         * crosstabs.q: (enum_var_values) Remove superfluous and bizarre
4955         use of hsh_iterator_init().
4956
4957         * data-in.c: (parse_N) Initialize i->v->f.
4958
4959         * flip.c: (cmd_flip) Use memmove(), not memcpy(), to copy
4960         overlapping arrays.
4961
4962         * groff-font.c: Use power-of-2 hash table sizes, not prime.
4963         (groff_read_font) Don't call hsh_next_prime().  Don't call
4964         fclose(NULL).
4965         (static var hash) Remove `size_p', `max_used' members.
4966         (font_char_name_to_index) Don't call hsh_next_prime().  Use
4967         hsh_hash_string() instead of hashpjw(), & instead of %.
4968         (default_font) Don't call hsh_next_prime().
4969
4970         * pool.c: (pool_strndup) New function.
4971         (pool_strdup) Reimplement in terms of pool_strndup.
4972
4973         * postscript.c: (hash_font_entry) Use hsh_hash_string().  Get rid
4974         of nasty casts.
4975         (hash_ps_encoding) Use hsh_hash_string().
4976         (hash_ps_combo) Use hsh_hash_string(), hsh_hash_int().
4977         (hash_filename2font) Use hsh_hash_string().
4978
4979         * som.c: Add #include <stdlib.h>.
4980
4981         * tab.c: (tab_destroy) Don't set t->container after freeing `t'
4982         (by destroying its pool).
4983         
4984 Fri Dec 12 23:18:59 2003  Ben Pfaff  <blp@gnu.org>
4985
4986         Miscellaneous hash table code cleanup:
4987         
4988         * hash.h: (struct hsh_table) Moved into hash.c.
4989         (hsh_count) Ditto, and transformed into function.
4990         (hsh_compare_func) New typedef, used for defining otherwise-long
4991         function types here and in hash.c
4992         (hsh_hash_func) Ditto.
4993         (hsh_free_func) Ditto.
4994         
4995         * hash.c: (struct hsh_table) Renamed `n' to `used', `m' to `size',
4996         `table' to `entries'.  Removed `mp'.  All references updated.
4997         (hsh_clear) Don't shrink entries array; if the hash was this big
4998         once, it probably will be again.
4999         (hsh_rehash) Made static.
5000         (force_hsh_insert) Renamed hsh_force_insert.
5001         (force_hsh_find) Renamed hsh_force_find.
5002
5003         Made hash table sizes powers of 2, because that's fine with any
5004         reasonable hash function and because taking a power-of-2 modulus
5005         is faster than any other:
5006         
5007         (hsh_prime_tab) Removed;
5008         (hsh_next_prime) Ditto.
5009         (next_power_of_2) New function.
5010         (hsh_create) Use next_power_of_2.
5011         (hsh_rehash) Use & instead of %.
5012
5013         Cleaned up hsh_sort:
5014         
5015         (internal_comparison_fn) Removed.
5016         (sort_nulls_last) New function.
5017         (hsh_sort) Removed second parameter, switched to using the new
5018         quicksort() function from quicksort.h to avoid using nasty need
5019         for static variables with qsort().  All references updated.
5020
5021         Changed the hash functions offered, because there are better hash
5022         functions than the ones we had, and cleaned up the names to boot:
5023         
5024         * hash.c: (hashpjw_d) Removed.
5025         (hashpjw) Ditto.
5026         (hsh_hash_bytes) New function.
5027         (hsh_hash_string) New function.
5028         (hsh_hash_int) New function.
5029
5030         Improved the hash table iteration interface:
5031         
5032         * hash.h: (hsh_iterator_init) Removed.
5033         (struct hsh_iterator) Removed `init' member, change `next' to
5034         size_t.
5035
5036         * hash.c: (hsh_foreach) Removed.  All references updated to use
5037         hsh_first/hsh_next instead.
5038         (hsh_first) New function.  Notably, unlike hsh_foreach() it does
5039         not treat a null pointer as an empty hash table.
5040         (hsh_next) New function.
5041
5042         Made deletion possible, though slow:
5043
5044         * hash.c: (locate_matching_entry) New function.
5045         (hsh_find) Use locate_matching_entry().
5046         (hsh_delete) New function also using locate_matching_entry().
5047         (hsh_force_delete) New function.
5048
5049 Fri Dec 12 23:16:10 2003  Ben Pfaff  <blp@gnu.org>
5050
5051         * quicksort.c: New file implementing a sort routine with a
5052         interface better than qsort() because it passes a user-provided
5053         parameter to the sort routine.
5054
5055         * Makefile.am: Add quicksort.c, quicksort.h.
5056
5057 Fri Dec 12 13:31:58 2003  Ben Pfaff  <blp@gnu.org>
5058
5059         * All source files: Get rid of nasty special cases for Checker,
5060         which is pretty obsolete now.
5061
5062 Thu Dec 11 21:38:24 WST 2003 John Darrington <john@darrington.wattle.id.au>
5063
5064         * Fixed a bug apparent when using the FREQUENCIES command with the
5065         html driver.  The html driver was incorrectly trying to display 
5066         empty cells.
5067
5068 Sun Jan  2 21:40:13 2000  Ben Pfaff  <blp@gnu.org>
5069
5070         * Makefile.am: Reorganized.  Put locale dir in version.c instead
5071         of passing it to each compile command.  Only put local gmp libs in
5072         LD_ADD if not installed on system.  Remove `boast' target.
5073
5074         * All source files: struct and union typedefs eliminated.
5075         `sizeof type' replaced by `sizeof object' where practical.  Moved
5076         `unused' qualifiers from start to end of declarations for gcc
5077         2.7.2 compatibility.  Change `while (1)' to `for (;;)'.  Made
5078         assertions on pointers strictly compliant.  Removed _ prefixes on
5079         some function parameter names.
5080
5081         * alloc.c: New source file, containing these external linkage
5082         functions removed from common.c: xmalloc, xcalloc, xrealloc,
5083         xstrdup.
5084
5085         * arena.c: Removed.
5086         
5087         * arena.h: Removed.
5088
5089         * ascii.c: Migrated from arenas to pools.
5090         (struct ascii_driver_ext) ops[], box[], fonts[] changed from
5091         c_string to len_string.  All references changed.
5092         (ascii_option) Signature changed to comply to new output.c
5093         interface.
5094         (count_fancy_chars) Removed.
5095         (delineate) Removed support for rich text.
5096         (ascii_text_metrics) Ditto.
5097         (text_draw) Ditto.
5098         (output_shorts) Change `box', `off', `on' from c_string to
5099         len_string.  Change `remaining' from int to size_t.
5100         (ascii_close_page) Make page numbering less haphazard.
5101
5102         * autorecode.c: Migrate from arenas to pools.
5103
5104         * avl.c: Migrate from arenas to pools.  Synch from libavl 1.4.0.
5105
5106         * bitvector.h: New file containing these macros from misc.h:
5107         SET_BIT, CLEAR_BIT, SET_BIT_TO, TEST_BIT, BIT_INDEX.
5108
5109         * command.c: (struct command) cmd1, cmd2, cmd3 members changed to
5110         word[3].  ncmd removed.
5111         (var empty_string) Removed.
5112         (var cmd_table) Declaration updated.
5113         (var cmdtab) Removed.
5114         (cmp_command) Removed.
5115         (split_words) Rewritten to use strtok_r().
5116         (init_cmd_parser) Renamed cmd_init().  Rewritten.
5117         (find_command) Removed.
5118         (FILE_TYPE_okay) Rewritten.
5119         (cmd_parse) Rewritten.  Semantics of the return value of command
5120         handlers has changed: they must now return one of the new CMD_*
5121         enumerals, rather than a magic value.  This meant that all
5122         commands had to be modified, and they were.
5123         (figure_out_command) New function.
5124
5125         * command.def: Add CORRELATIONS, PEARSON CORRELATIONS.  Add
5126         #defines for INIT, INPU, etc.
5127
5128         * command.h: New CMD_* enum series.
5129         (cur_proc) Make const char *, not char *.
5130         (cmd_init) Prototype.
5131         (cmd_parse) Ditto.
5132
5133         * common.c: Removed.
5134
5135         * common.h: Removed.
5136
5137         * correlations.q: New file.
5138
5139         * crosstabs.q: Migrate from arenas to pools.  Migrate to new-style
5140         q2c.
5141         (custom_tables) Renamed crs_custom_tables().
5142         (custom_variables) Renamed crs_custom_variables().
5143         (calc_integer) Add in some `const' qualifiers.
5144         (table_value_missing) Change from a_string to len_string.
5145         (float_M_suffix) Change from a_string to len_string.
5146
5147         * data-in.c: Rewritten.  All references to
5148         parse_string_as_format() changed to data_in().
5149
5150         * data-in.h: New file.
5151
5152         * data-list.c: Change DLS_* from #define's to enums.  Move from
5153         rpd_msg() to tmsg().
5154         (RPD_ERR) New #define.
5155         (do_reading) Change dfm_push_cust() to dfm_push(), pop_cust() to
5156         dfm_pop().
5157         (read_from_data_list_fixed) Change from old
5158         parse_string_as_format() to new data_in().
5159         (read_from_data_list_free) Ditto.
5160         (read_from_data_list_list) Ditto.
5161         (cmd_repeating_data) Modify approach to checking for end of
5162         command.
5163         (rpd_msg) Removed.
5164         (rpd_parse_record) Change from old parse_string_as_format() to new
5165         data_in().  Change from old convert_format_to_string() to new
5166         data_out().
5167         (read_one_set_of_repetitions) Change dfm_push_cust() to
5168         dfm_push(), pop_cust() to dfm_pop().
5169
5170         * data-out.c: Rewritten.  All references to
5171         convert_format_to_string() changed to data_out().
5172
5173         * descript.q: Migrate to new q2c.
5174         (cmd_descriptives) Removed.
5175         (internal_cmd_descriptives) Renamed cmd_descriptives ().
5176         (custom_variables) Renamed dsc_custom_variables().
5177
5178         * dfm.c: (struct dfm_fhuser_ext) `ln' removed.  All references
5179         removed.
5180         (open_file_r) Initialize h->where.line_number.  Migrate to new
5181         struct string.
5182         (open_file_w) Initialize h->where.line_number.
5183         (read_record) Change from ext->ln to h->where.line_number.
5184         Migrate to struct string.
5185         (dfm_put_record) Rephrased.
5186         (dfm_push_cust) Renamed dfm_push(), rewritten.
5187         (dfm_pop) New function.
5188
5189         * error.c: All references updated.
5190         (glob var error_count) Renamed err_err_count.
5191         (glob var warning_count) Renamed err_warning_count.
5192         (glob var error_already_flagged) Renamed err_already_flagged.
5193         (glob var verbosity) Renamed err_verbosity.
5194         (glob var cust_fn) Removed.
5195         (glob var cust_ln) Removed.
5196         (static var file_loc) New.
5197         (static var nfile_loc) New.
5198         (static var mfile_loc) New.
5199         (tmsg) New function.
5200         (push_cust) Removed.
5201         (pop_cust) Removed.
5202         (msg) Rewritten.
5203         (static var terminating) Removed.
5204         (failure) Renamed err_failure().
5205         (hcf) Renamed err_hcf().
5206         (err_push_file_locator) New function.
5207         (err_pop_file_locator) New function.
5208         (err_location) New function.
5209         (check_error_count) Renamed err_check_count().
5210         (vmsg) Renamed err_vmsg().  Interface changed.
5211         (verbose_msg) Removed.
5212         (err_cond_fail) New function.
5213         (error_break) Renamed err_break().
5214
5215         * error.h: All references updated.
5216         (enum MSG_CLASS_COUNT) Renamed ERR_CLASS_COUNT.
5217         (enum ERR_CLASS_MASK, ERR_VERBOSITY_SHIFT, ERR_VERBOSITY_MASK)
5218         New.
5219         (struct file_locator) New.
5220         (struct error) New.
5221         (macro verbose_msg) Removed.
5222         (macro cond_fail) Removed.
5223
5224         * expr-opt.c: (evaluate_tree) sizeof(char) == 1.
5225
5226         * expr-prs.c: Reorganized.  All references updated.
5227         (exprtypename) Renamed expr_type_name().
5228         (typename) Renamed type_name().
5229         (free_expression) Renamed expr_free().
5230         (parse_expression) Renamed expr_parse().  Uses new type_check()
5231         function.
5232         (init_functab) Renamed init_func_tab().
5233         (type_check) New function.
5234         (parse_or) Rewritten to use new allocate_nonterminal() and
5235         append_nonterminal_arg() functions.
5236         (parse_and) Ditto.
5237         (parse_not) Ditto.
5238         (parse_rel) Ditto.  Also simplified logic.
5239         (parse_add) Ditto.
5240         (parse_mul) Ditto.
5241         (parse_neg) Ditto.
5242         (parse_exp) Ditto.
5243         (SYSMIS_func) Ditto.
5244         (VALUE_func) Rephrased.
5245         (CONCAT_func) Fix memory leak by replacing free by free_node on
5246         lossage.
5247         (generic_str_func) Ditto.
5248         (parse_function) Ditto.  Also rephrasings.  Uses bsearch() to find
5249         function.
5250         (allocate_nonterminal) New function.
5251         (append_nonterminal_arg) New function.
5252         (static func_tab[]) Now at file level.
5253         (cmp_func) Moved.
5254         (init_func_tab) Moved.  Now just uses qsort() to sort func_tab[].
5255
5256         * expr.h: (enum series OP_*) Moved to exprP.h.
5257         (OP_* defines) Ditto.
5258         (struct op_desc) Ditto.
5259         (global ops[]) Ditto.
5260         (struct num_con_node) Ditto.
5261         (struct str_con_node) Ditto.
5262         (struct var_node) Ditto.
5263         (struct lag_node) Ditto.
5264         (struct casenum_node) Ditto.
5265         (struct nonterm_node) Ditto.
5266         (union any_node) Members renamed.
5267         (struct sys_node) Removed.
5268         (struct val_node) Removed.
5269         (operator typedef) Removed.
5270         (typedef exprtype) Removed.
5271         (enum series EX_*) Moved to exprP.h.
5272         (struct expression) Ditto.  Also renamed a lot of the members.
5273         (PXP_* defines) Changed to enums.
5274         (free_node prototype) Moved to exprP.h.
5275
5276         * file-handle.h: (struct file_handle) New member `where'.
5277
5278         * file-handle.q: Migrated to new q2c format.
5279         (prepend_current_directory) Removed (dead code).
5280         (cmd_file_handle) Incorporated all of internal_cmd_file_handle().
5281         (fh_get_handle_by_filename) Removed dead code.
5282         Set new `where' member.
5283
5284         * file-type.c: (file_type_source_read) References to
5285         parse_string_as_format() changed to data_in().
5286         dfm_push_cust()/pop_cust() changed to dfm_push()/dfm_pop().
5287
5288         * filename.c: All references updated.
5289         (init_filename) Renamed fn_init().
5290         (expand_line) Removed.
5291         (macro EXPAND_LINE) Removed.
5292         (interp_vars) Renamed fn_interp_vars().  Now uses st_*() instead
5293         of custom functions.
5294         (gnu_getcwd) Renamed fn_get_cwd(), rewritten.
5295         (tilde_expand) Renamed fn_tilde_expand(), uses ds_*().
5296         (normalize_filename) Renamed fn_normalize().
5297         (search_path) Renamed fn_search_path(), rewritten.
5298         (prepend_dir) Renamed fn_prepend_dir().
5299         (blp_getenv) Renamed fn_getenv().
5300         (blp_dirname) Renamed fn_dirname().
5301         (fn_basename) New function, not used.
5302         (absolute_filename_p) Renamed fn_absolute_p().
5303         (is_special_filename) Renamed fn_special_p().
5304         (file_exists) Renamed fn_exists_p().
5305         (readlink_malloc) Renamed fn_readlink().
5306         (getenv_default) Renamed fn_getenv_default().
5307         (open_file) Renamed fn_open().
5308         (close_file) Renamed fn_close().
5309         (open_file_ext) Renamed fn_open_ext().
5310         (close_file_ext) Renamed fn_close_ext().
5311
5312         * font.h: Migrate from arenas to pools.
5313
5314         * format.c: (parse_format_specifier_name) Deal with ds_* strings.
5315
5316         * frequencies.g: Migrate from arenas to pools.
5317
5318         * frequencies.q: Migrate to new q2c version.  Migrate from arenas
5319         to pools.
5320
5321         * getline.c: All references updated.
5322         (global getl_buf) Changed from char * to struct string.
5323         (static getl_include_path) Ditto.
5324         (global getl_buf_len) Removed.
5325         (global getl_buf_size) Removed.
5326         (getl_include_path) Deal with new getl_buf, getl_include_path.
5327         (getl_uninitialize) New function.
5328         (getl_get_current_directory) Rewritten.
5329         (getl_clear_include_path) Rewritten.
5330         (getl_add_include_dir) Rewritten.
5331         (getl_add_file) Assertion fixed.
5332         (getl_add_virtual_file) Change initial value of `remaining_loops'
5333         from 2 to 1.
5334         (welcome) Rewritten.
5335         (handle_line_buffer) Make static.  Change logic to make
5336         getl_add_virtual_file() change sensible.  Use ds_*() strings.
5337         (getl_read_line) Use ds_*() strings.  Implement SET ECHO.
5338         (getl_close_file) Moved.
5339         (getl_location) New function.
5340
5341         * getline.h: All references updated.
5342         (macro curln) Removed.
5343         (macro curfn) Removed.
5344         (macro am_interactive) Renamed getl_am_interactive.
5345         (macro am_reading_script) Renamed getl_reading_script.
5346
5347         * glob.c: (global fmt_parse_ignore_error) Removed.
5348         (init_glob) Use locale_dir not LOCALEDIR.  Use feholdexcept() on
5349         systems that support it (C99).  Turn off SET ECHO by default.  No
5350         necessary julcal initialization anymore.
5351
5352         * groff-font.c: Migrate from arenas to pools.
5353         (groff_read_font) Use err_push_file_locator().
5354         (groff_read_DESC) Ditto.
5355         (font_msg) Use tmsg().
5356
5357         * hash.c: (hsh_sort) Fix debug code.
5358         [GLOBAL_DEBUGGING] Include stdio.h.
5359
5360         * hash.h: (macro force_hsh_insert) Rephrase.
5361
5362         * heap.c: Rewritten.
5363         
5364         * heap.h: Rewritten.
5365
5366         * html.c: (html_option) Change from outp_value to struct string.
5367         (postopen) Change from curfn to getl_location().
5368         (escape_string) Remove rich-text code.  Signature changed.
5369         (output_tab_table) Switch from a_string to struct len_string.
5370         Remove rich text support.
5371
5372         * lexer.c: All references updated.  Largely rewritten.  Major
5373         changes listed below.  Removed tagged quote support.  Adapted to
5374         struct string tokstr.
5375         (global tokstr) Changed to struct string.
5376         (global tokstr_size) Removed.
5377         (global tokstr_len) Removed.
5378         (global tokid) New.
5379         (global tokint) Removed.
5380         (global toklongstr) Removed.
5381         (C* defines) Removed.
5382         (static tbl[]) Removed.
5383         (static id[]) Removed.
5384         (static une[]) Removed.
5385         (discard_line) Renamed lex_discard_line().
5386         (get_entire_line) Renamed lex_entire_line().
5387         (get_rest_of_line) Renamed lex_rest_of_line().
5388         (get_dotted_rest_of_line) Merged into lex_rest_of_line().
5389         (make_hexit) Removed.
5390         (syntax_error) Renamed lex_error().  Return value removed.
5391         (get_token_representation) Renamed lex_token_representation().
5392         (putback) Renamed lex_put_back().
5393         (putfwd) Renamed lex_put_forward().
5394         (convert_negative_to_dash) Renamed lex_negative_to_dash().
5395         (set_prog) Renamed lex_set_prog().
5396         (init_lex) Renamed lex_init().
5397         (reset_eof) Renamed lex_reset_eof().
5398         (lookahead) Renamed lex_look_ahead().
5399         (check_id) Rewritten.
5400         (yylex) Renamed lex_get(), rewritten.
5401         (lex_end_of_command) New function.  Many commands were rephrased
5402         using this.
5403         (lex_integer_p) New function.  Replaces compare of tokint against
5404         NOT_LONG.
5405         (lex_integer) New function.  Replaces tokint.
5406         (match_tok) Renamed lex_match().
5407         (match_id) Renamed lex_match_id().
5408         (match_int) Renamed lex_match_int().
5409         (force_match_id) Renamed lex_force_match_id(), added return value.
5410         (force_match) Renamed lex_force_match(), added return value.
5411         (force_string) Renamed lex_force_string(), added return value.
5412         (force_int) Renamed lex_force_int(), added return value.
5413         (lex_id_match_len) New function.
5414         (id_match) Renamed lex_id_match(), rewritten.
5415         (get_line) Renamed lex_get_line().
5416         (preprocess_line) Renamed lex_preprocess_line().
5417         (tokname) Renamed lex_token_name().
5418         (bin_value_func) Removed.
5419         (oct_value_func) Removed.
5420         (hex_value_func) Removed.
5421         (unexpected_eof) New function.
5422         (convert_numeric_string_to_char_string) New function.
5423         (parse_string) Rewritten, signature changed.
5424         (add_tokstr_char) Removed.
5425         (add_tokstr_unsigned) Removed.
5426         (add_tokstr_string) Removed.
5427         (parse_tagged_quote) Removed.
5428         (skip_comment) Renamed lex_skip_comment().
5429
5430         * lexer.h: All references updated.
5431         (macro is_id1) Renamed CHAR_IS_ID1.
5432         (macro is_idn) Renamed CHAR_IS_IDN.
5433         (token names ID, NUM, STRING, STOP, ... WITH, EXP) Renamed with
5434         prefix T_: T_ID, T_NUM, T_STRING, T_STOP, ... T_WITH, T_EXP.
5435         (macro get_token) Removed.
5436         (macro id_match) Removed.
5437         (macro force_match_id) Removed.
5438         (macro force_match) Removed.
5439         (macro force_string) Removed.
5440         (macro force_int) Removed.
5441         (macro force_num) Removed.
5442         (macro force_id) Removed.
5443
5444         * lexerP.h: Removed.
5445
5446         * list.q: Migrated to new q2c format.
5447         (write_line) Deal with struct len_string.
5448         (write_varname) Ditto.
5449         (write_fallback_headers) Ditto.
5450
5451         * magic.c: New file, incorporating the following global variables
5452         previously in other files: endian, second_lowest_value.  And both
5453         of those are conditional on #define's.
5454
5455         * magic.h: New file, incorporating the following global variable
5456         declarations: endian, second_lowest_value, and the following macro
5457         declarations: NOT_DOUBLE, NOT_LONG, NOT_INT.
5458
5459         * main.c: Added declarations of pgmname, finished, curdate,
5460         start_interactive.
5461         (main) Call new parse_script() function.
5462         (parse_script) New function.
5463         (execute_command) New function.
5464         (dump_token) Removed.
5465         (handle_error) New function.
5466
5467         * matrix.c: New file.
5468
5469         * matrix.h: New file.
5470
5471         * matrix-data.c: Migrated from arenas to pools.
5472         (mget_token) Change from parse_string_as_format() to data_in().
5473
5474         * means.q: Migrate to new q2c.
5475         (custom_tables) Renamed mns_custom_tables().
5476         (custom_crossbreak) Renamed mns_custom_crossbreak().
5477         (custom_variables) Renamed mns_custom_variables().
5478
5479         * mis-val.c: (static var width) Changed from `int' to `size_t'.
5480         (parse_varnames) Prototype.
5481         (parse_numeric) Rephrasings.
5482         (parse_alpha) Adapt to new struct string tokstr.
5483
5484         * misc.c: (intlog10) Rewritten.
5485         (spacing) Removed.
5486         (ansi_rand) Renamed real_rand(), moved into random.c.
5487         (ansi_srand) Renamed real_srand(), moved into random.c.
5488         (setup_randomize) Moved to random.c.
5489         (rand_uniform) Ditto.
5490         (rand_normal) Ditto.
5491         (rand_simple) Ditto.
5492         (get_config_line) Removed.
5493         (reverse) Removed (dead code).
5494
5495         * misc.h: (macro SET_BIT) Moved to bitvector.h.
5496         (macro CLEAR_BIT) Ditto.
5497         (macro TEST_BIT) Ditto.
5498         (macro SET_BIT_TO) Ditto.
5499         (macro BIT_INDEX) Ditto.
5500
5501         * output.c: (outp_read_devices) Move to err_push_file_locator()
5502         from push_cust().  Use struct string.
5503         (expand_op_tokstr) Removed.
5504         (static var op_tokstr) Changed to struct string.
5505         (static var op_tokstr_size) Removed.
5506         (tokener) Rephrasings.  Use struct string.
5507         (parse_options) Use struct string.
5508         (destroy_driver) Fix assertion.
5509         (outp_get_paper_size) Move to err_push_file_locator().
5510         [0] Removed dead code.
5511         (outp_string_width) Move to len_string.
5512
5513         * output.h: Comment fixes.
5514         (TAG_* enum series) Removed.
5515         (struct outp_value) Removed.
5516         (enum OUTP_T_FANCY) Removed.
5517         (struct outp_text) `s' changed from a_string to len_string.
5518         (struct outp_class) `option' change arg 3 from outp_value to
5519         struct string.
5520
5521         * pfm-read.c: (corrupt_msg) Rewritten.
5522
5523         * pfm-write.c: (bufwrite) Fix assertion.
5524
5525         * pool.c: New file, reference version.
5526
5527         * pool.h: New file, reference version.
5528
5529         * postscript.c: (ps_font_sizes) Fix assertion.
5530         (ps_option) Change arg 3 from outp_value to struct string.
5531         Adapt to struct string.
5532         (macro output_line) Removed.
5533         (macro add_string) Removed.
5534         (output_encodings) Adapted to struct string.  Moved to
5535         err_push_file_locator().
5536         (find_encoding_file) Fix assertion.
5537         (read_ps_encodings) Move to err_push_file_locator().
5538         (postopen) Use getl_location() instead of curfn.
5539         (out_text_plain) Move to len_string.
5540         (text) Ditto.  Remove rich text support.
5541
5542         * print.c: (cmd_print) Remove now-unneeded resource cleanup code.
5543         (cmd_print_eject) Ditto.
5544         (cmd_write) Ditto.
5545         (internal_cmd_print) Now cleans up after itself.  Uses
5546         fh_parse_file_handle() now.
5547         (cmd_print_space) Use PXP_NUMERIC to type-check.
5548
5549         * q2c.c: Overhauled.  Removed _("") i18n support.  All references
5550         updated.  All output functions updated to handle structures rather
5551         than local or static variables.  Adapt to new PSPP lex_*()
5552         functions.
5553         (macro _) Removed.
5554         (macro N_) Removed.
5555         (macro MAX_N_SBC) Removed.
5556         (global bare) Removed.
5557         (enum STRING) Renamed T_STRING.
5558         (enum ID) Renamed T_ID.
5559         (get_buffer) Buffer size increased.
5560         (strlower) Renamed st_lower(), rephrased.
5561         (strupper) Renamed st_upper(), rephrased.
5562         (skip_ws) New function.
5563         (get_line) Don't special-case any types of lines (like those
5564         beginning with ! or $, for instance).
5565         (get_token) Renamed lex_get().  Rephrased.
5566         (static var `prefix') New.
5567         (parse) New function.
5568         (parse_setting) Minor rephrasing.
5569         (dump_specifier_vars) Ditto.
5570         (make_identifier) Put null terminator on identifier, duh.
5571         (dump_vars) Renamed dump_declarations().  Never indent.  Never
5572         static.  Output changed entirely.
5573         (dump_specifier_init) Rephrase.
5574         (dump_vars_init) No index variable needed.  Other modifications.
5575         (dump_parser) Don't parse command name.  Do dump functions instead
5576         of just code fragments.
5577         (dump_free) Dump function instead of code fragment.
5578         (recognize_directive) New function.
5579         (main) Use recognize_directive().  Don't rely on magic $ line
5580         beginning: instead, parse comments.  Update list of headers.
5581
5582         * random.c: New file, containing the following functions:
5583         real_rand(), real_srand(), setup_randomize, shuffle, rand_uniform,
5584         rand_normal, rand_simple.
5585
5586         * random.h: New file.
5587
5588         * recode.c: (cmd_recode) Merge internal_cmd_recode() into this
5589         function.  `max_src_width', `max_dst_width' changed to size_t.
5590         (internal_cmd_recode) Removed.
5591         (parse_dest_spec) Merge similar cases.
5592         (parse_src_spec) Add assertion.
5593
5594         * repeat.c: (recognize_keyword) New function.
5595         (internal_cmd_do_repeat) Parse and handle PRINT keyword on END
5596         REPEAT.  Improve recognition of END REPEAT (use
5597         recognize_keyword()).  Move from curfn to getl_location().  Use
5598         struct string.
5599                 
5600         (perform_DO_REPEAT_substitutions) Adapt to struct string.
5601
5602         * set.q: Adapt to new q2c.
5603         (cmd_set) Range-check some values better.
5604         (custom_blanks) Renamed stc_custom_blanks().
5605         (custom_length) Renamed stc_custom_length().
5606         (custom_results) Renamed stc_custom_results().
5607         (custom_seed) Renamed stc_custom_seed().
5608         (custom_width) Renamed stc_custom_width().
5609         (custom_format) Renamed stc_custom_format().
5610         (custom_journal) Renamed stc_custom_journal().
5611         (custom_color) Renamed stc_custom_color().
5612         (custom_listing) Renamed stc_custom_listing().
5613         (custom_disk) Renamed stc_custom_disk().
5614         (custom_log) Renamed stc_custom_log().
5615         (custom_rcolor) Renamed stc_custom_rcolor().
5616         (custom_viewlength) Renamed stc_custom_viewlength().
5617         (custom_workdev) Renamed stc_custom_workdev().
5618
5619         * settings.h: Not necessary to include format.h any longer.
5620
5621         * sfm-read.h: (macro bswap_int32) Moved here from sfmP.h.
5622         (corrupt_msg) Rewritten.
5623
5624         * sort.c: Adapt to rewritten heap ADT.
5625
5626         * str.c: (aa_strcpy) Removed.
5627         (ab_strcpy) Removed.
5628         (ac_strcpy) Removed.
5629         (ba_strcpy) Removed.
5630         (bb_strcpy) Removed.
5631         (ca_strcpy) Removed.
5632         (aa_strdup) Removed.
5633         (aa_strdupcpy) Removed.
5634         (ba_strdup) Removed.
5635         (sa_strdup) Removed.
5636         (memrev) Renamed mm_reverse().
5637         (memrmem) Renamed mm_find_reverse().
5638         (cmp_str) Renamed st_compare_pad().
5639         (strmaxcpy) Removed.
5640         (strbarepadcpy) Renamed st_bare_pad_copy(), signature changed.
5641         (strbarepadlencpy) Renamed st_bare_pad_len_copy(), signature
5642         changed.
5643         (strpadcpy) Renamed st_pad_copy(), signature changed.
5644         (blpstrset) Removed.
5645         (ds_create) New function.
5646         (ds_init) New function.
5647         (ds_replace) New function.
5648         (ds_destroy) New function.
5649         (ds_clear) New function.
5650         (ds_extend) New function.
5651         (ds_shrink) New function.
5652         (ds_truncate) New function.
5653         (ds_length) New function.
5654         (ds_size) New function.
5655         (ds_value) New function.
5656         (ds_end) New function.
5657         (ds_concat) New function.
5658         (ds_concat_buffer) New function.
5659         (ds_printf) New function.
5660         (ds_putchar) New function.
5661         (ds_getline) New function.
5662         (ds_get_config_line) New function derived from the old
5663         misc.c:get_config_line().
5664         (ls_create) New function.
5665         (ls_create_buffer) New function.
5666         (ls_init) New function.
5667         (ls_shallow_copy) New function.
5668         (ls_destroy) New function.
5669         (ls_null) New function.
5670         (ls_null_p) New function.
5671         (ls_empty_p) New function.
5672         (ls_length) New function.
5673         (ls_value) New function.
5674         (ls_end) New function.
5675
5676         * str.h: Reformatted.
5677         (struct a_string) Removed.
5678         (struct b_string) Removed.
5679         (struct c_string) Removed.
5680         (struct len_string) New.
5681         (struct string) New.
5682         (macro as_streq) Removed.
5683         (macro bs_streq) Removed.
5684         (macro cs_streq) Removed.
5685         (macro sa_streq) Removed.
5686         (macro sb_streq) Removed.
5687         [__GNUC__] (inline function ds_putchar) New function.
5688         [__GNUC__] (inline function ds_length) New function.
5689         [__GNUC__] (inline function ds_value) New function.
5690         [__GNUC__] (inline function ds_end) New function.
5691
5692         * sysfile-info.c: (cmd_sysfile_info) Rephrased.
5693         (display_vectors) Fix missing i18n.
5694
5695         * t-test.q: Migrate to new q2c.
5696
5697         * tab.c: Migrate from arenas to pools.
5698         (tab_create) Use struct len_string.
5699         (tab_realloc) Ditto.
5700         (text_format) Ditto.
5701         (tab_joint_text) Ditto.
5702         (tab_natural_width) Remove rich text support.
5703         (tab_natural_height) Ditto.
5704         (tab_output_text) Handle TAT_FIX.
5705         (tab_raw) Change arg from a_string to len_string.
5706         (tabi_driver) Fix assertion.  Use struct len_string.
5707         (render_strip) Use struct len_string.  Remove rich text support.
5708         Add `const' qualifiers.
5709
5710         * tab.h: (enum TAB_RICH) Remove.
5711         (enums TAB_COL_NONE, TAB_COL_DONE) New.  Where appropriate,
5712         SOM_COL_* updated to read TAB_COL_*.
5713         (struct tab_table) Change arena to pool.  Change a_string to
5714         len_string.
5715
5716         * temporary.c: (restore_dictionary) Rewrite Checker code.
5717
5718         * var.h: (macros MAX_SHORT_STRING, MIN_LONG_STRING, SYSMIS,
5719         LOWEST, HIGHEST) Moved here from common.h.
5720         (typedef any_trns) Removed.  All references changed to `struct
5721         trns_header'.
5722
5723         * vars-atr.c: (force_create_variable) Fix assertion.
5724         (force_dup_variable) Fix assertion.
5725         
5726 Thu Jun  3 18:40:42 1999  Ben Pfaff  <blp@gnu.org>
5727
5728         Using alphanumeric variables in functions under AGGREGATE
5729         segfaulted.  Fixed.  Thanks to Dr. Dirk Melcher
5730         <BZN-mdksh@t-online.de> for reporting this bug.
5731         
5732         * aggregate.c: (parse_aggregate_functions) When setting the
5733         FSTRING bit, also allocate memory for the `string' member of
5734         agr_next.
5735         (free_aggregate_functions) Free iter->string.  Don't use the
5736         non-function bits when indexing the array of functions.
5737         [DEBUGGING] (debug_print) Don't use the non-function bits when
5738         indexing the array of functions.        
5739
5740 Sun May 30 00:00:54 1999  Ben Pfaff  <blp@gnu.org>
5741
5742         Under certain circumstances, the final case would be omitted from
5743         the results of an AGGREGATE operation.  Fixed.  Thanks to Dr. Dirk
5744         Melcher <BZN-mdksh@t-online.de> for reporting this bug.
5745         
5746         * aggregate.c (agr_00x_end_func): Increment number of cases in
5747         sink before writing case.  For streams that keep track of how many
5748         cases there are based on this value, this means that the last case
5749         will be read in on the next stream read.
5750
5751 Sat May 29 22:03:31 1999  Ben Pfaff  <blp@gnu.org>
5752
5753         Undefined behavior was invoked by referencing a freed pointer.
5754         
5755         * vfm.c (memory_stream_write): Free pointer *after* checking for
5756         non-null status.
5757
5758 Sat May 29 22:02:22 1999  Ben Pfaff  <blp@gnu.org>
5759
5760         A wrong record size was displayed when paging the active file to
5761         disk.
5762         
5763         * vfm.c: (memory_stream_write) Fix off-by-one error.
5764
5765 Sat May 29 21:50:26 1999  Ben Pfaff  <blp@gnu.org>
5766
5767         Not having enough temporary space for sorting caused a core dump.
5768         Fixed.
5769         
5770         * sort.c: (allocate_cases) Initialize i.
5771
5772 Sat May 29 21:40:54 1999  Ben Pfaff  <blp@gnu.org>
5773
5774         Syntax errors in function descriptions on AGGREGATE caused core
5775         dumps.  Fixed.
5776         
5777         * aggregate.c (cmd_aggregate): Don't free agr_dict after calling
5778         free_aggregate_functions(), since that function already frees
5779         agr_dict.
5780         
5781 Sat May 29 21:06:10 1999  Ben Pfaff  <blp@gnu.org>
5782
5783         A null pointer was dereferenced, causing a core dump, when
5784         PERCENTILES was specified on FREQUENCIES.  This fixes the problem,
5785         but PSPP still doesn't calculate percentiles.  Thanks to Regnor
5786         Jernsletten <rjernsle@eunet.no> for reporting this problem.
5787         
5788         * arena.c: (arena_malloc) If the arena hasn't been initialized
5789         already, initialize it.
5790
5791 Sat May 29 20:47:29 1999  Ben Pfaff  <blp@gnu.org>
5792
5793         * Makefile.cygwin: New file supplied by Hankin <hankin@dunno.com>
5794         for compilation with Cygnus Windows B20.  Not used by other
5795         systems.
5796
5797 Sat May 29 20:36:04 1999  Ben Pfaff  <blp@gnu.org>
5798
5799         SORT always sorted in ascending order.  Fixed.  Thanks to Dr. Dirk
5800         Melcher <BZN-mdksh@t-online.de> for reporting this bug.
5801
5802         * sort.c: (compare_case_lists) Reverse sense of comparison if
5803         sorting in descending order.
5804         (compare_record) Ditto.
5805
5806 Tue Mar  9 13:18:54 1999  Ben Pfaff  <blp@gnu.org>
5807
5808         SPLIT FILE with a string variable caused a core dump.  Fixed.
5809
5810         * vfm.c: If the variable is a string then make a temporary value
5811         struct pointing to it.  The underlying problem is a lot bigger
5812         than this (see TODO) but this is a stopgap for the simple case at
5813         least.
5814         
5815 Tue Mar  9 13:15:53 1999  Ben Pfaff  <blp@gnu.org>
5816
5817         Nested INCLUDEs didn't work.  Fixed.
5818
5819         * getline.c: (getl_include) Set first_line to NULL in allocated
5820         structure.
5821
5822 Tue Mar  9 13:13:46 1999  Ben Pfaff  <blp@gnu.org>
5823
5824         The MATCH FILES procedure set the values of variables not present
5825         to 0.  It should have been SYSMIS.  This is now fixed.
5826
5827         * get.c: (mtf_delete_file_in_place) Replace 0.0 by SYSMIS.
5828
5829 Tue Mar  9 12:52:23 1999  Ben Pfaff  <blp@gnu.org>
5830
5831         The REMARK command was too aggressive about skipping lines.  It
5832         didn't like being the last command in a file.
5833
5834         * command.c: (cmd_remark) Call get_entire_line() instead of
5835         get_line().
5836
5837 Tue Mar  9 12:48:05 1999  Ben Pfaff  <blp@gnu.org>
5838
5839         Comment parsing wasn't consistent with the rest of the code in its
5840         idea of where one command ends and another starts.  This meant
5841         that sometimes commands would be mysteriously ignored.  Thanks to
5842         Dr. Dirk Melcher <BZN-mdksh@t-online.de> for reporting this bug.
5843          
5844         * command.c: (parse_cmd) Hand off comment parsing to new function
5845         skip_comment() in lexer.c.
5846         * lexer.c: (skip_comment) New function.
5847
5848 Wed Jan 20 20:22:07 1999  Ben Pfaff  <blp@gnu.org>
5849
5850         The TABLE subcommand on MATCH FILES worked only erratically at
5851         best.  This fixes it.  Thanks to Dr. Dirk Melcher
5852         <BZN-mdksh@t-online.de> for reporting this bug.
5853
5854         * get.c: (mtf_compare_BY_values) When comparing string values, a
5855         difference of 1 is still a difference :-)
5856         (mtf_processing) Inverted TABLE reading logic fixed.  Also don't
5857         advance TABLE files automatically when matched.  Comment fixes.
5858
5859 Tue Jan 19 22:32:31 1999  Ben Pfaff  <blp@gnu.org>
5860
5861         VARIABLE LABELS rejected a slash before the first variable
5862         specification, contradicting the documentation.  Thanks to Walter
5863         M. Gray <graywm@northernc.on.ca> for reporting this bug.
5864
5865         * var-labs.c: (cmd_variable_labels) Ignore a leading slash in
5866         command specification.
5867
5868 Tue Jan 19 22:29:54 1999  Ben Pfaff  <blp@gnu.org>
5869
5870         Because of an incorrect optimization in memory allocation,
5871         CROSSTABS sometimes segfaulted when asked to output multiple
5872         tables.  Thanks to Walter M. Gray <graywm@northernc.on.ca> for
5873         reporting this bug.
5874
5875         * crosstabs.q: (postcalc) New variables maxcols, maxcells, which
5876         are passed to output_pivot_table() for its use.
5877         (output_pivot_table) Instead of assuming the number of columns is
5878         constant, keep track with maxcols.  In general mode, use maxcells
5879         to determine whether more matrix cells need to be allocated.    
5880
5881 Tue Jan 19 22:27:46 1999  Ben Pfaff  <blp@gnu.org>
5882
5883         CROSSTABS didn't display value labels for column and row
5884         variables.  Thanks to Walter M. Gray <graywm@northernc.on.ca> for
5885         reporting this bug.
5886
5887         * crosstabs.q: (table_value_missing) If the specified value has a
5888         value label for this variable, then show it instead of the raw
5889         value.
5890         (display_dimensions) Delegate display of value_labels to
5891         table_value_missing.
5892
5893 Mon Jan 18 20:04:06 1999  Ben Pfaff  <blp@gnu.org>
5894
5895         WRITE didn't write line ends.  Fixed.  Thanks to Dr. Dirk Melcher
5896         <BZN-mdksh@t-online.de> for reporting this bug.
5897
5898         * print.c: (print_trns_proc) Write (CR/)LF if PRINT is used _or_
5899         if the file isn't declared as binary.
5900
5901 Mon Jan 18 19:56:45 1999  Ben Pfaff  <blp@gnu.org>
5902
5903         MATCH FILES corrupted memory and dumped core on some syntax
5904         errors.  Fixed.
5905
5906         * get.c: (cmd_match_files) Set file->handle to NULL before
5907         jumping to lossage.
5908         (mtf_free_file) Don't free a null dictionary.   
5909
5910 Mon Jan 18 19:27:57 1999  Ben Pfaff  <blp@gnu.org>
5911
5912         MATCH FILES should set numeric values not available to the
5913         system-missing value, not to 0.  Thanks to Dr. Dirk Melcher
5914         <BZN-mdksh@t-online.de> for reporting this bug.
5915
5916         * get.c: (mtf_processing) Set unused records to system-missing,
5917         not 0.
5918
5919 Mon Jan 18 15:06:46 1999  Ben Pfaff  <blp@gnu.org>
5920
5921         KEEP didn't work properly on the SAVE procedure.  Fixed.  Thanks
5922         to Ralf Geschke <ralf@kuerbis.org> for reporting this bug.
5923
5924         * temporary.c: (save_dictionary) Initialize var_by_name AVL tree
5925         in newly created dictionary, and add each copied variable to the
5926         tree.
5927  
5928 Mon Jan 18 15:04:48 1999  Ben Pfaff  <blp@gnu.org>
5929
5930         Memory leak fix.
5931         
5932         * get.c: (trim_dictionary) Free variable list for KEEP after
5933         finishing with it.
5934
5935 Mon Jan 18 12:57:36 1999  Ben Pfaff  <blp@gnu.org>
5936
5937         Some systems didn't like the way open_file was coded.  Thanks to
5938         Hankin <hankin@rogue.consultco.com> for pointing this out.
5939
5940         * filename.c: (open_file) Don't try to store stdin, stdout,
5941         stderr as part of an array, because that doesn't always work.
5942
5943 Mon Jan 18 12:53:27 1999  Ben Pfaff  <blp@gnu.org>
5944
5945         The SAVE procedure didn't save long string variables properly.
5946         Fixed by this patch.  Thanks to Hankin
5947         <hankin@rogue.consultco.com> for this patch.
5948         
5949         * sfm-write.c: (write_variable) Fix off-by-one error in writing
5950         out variable pad records.
5951
5952 Tue Jan  5 14:29:27 1999  Ben Pfaff  <blp@gnu.org>
5953
5954         Previously, if PRINT SPACE were given a negative argument, it
5955         would report an error, then spin in an (almost) infinite loop.
5956         This fixes that behavior.
5957
5958         * print.c: (print_space_trns_proc) After reporting a negative
5959         argument, set number of lines to print to 1.
5960
5961 Tue Jan  5 13:59:55 1999  Ben Pfaff  <blp@gnu.org>
5962
5963         SPSS 8.0 outputs some new record types in its system files, and it
5964         allows longer value labels.  Accept these system files.
5965
5966         * sfm-read.c: (sfm_read_dictionary) Ignore record type 7 subtype
5967         11 emitted by SPSS 8.0.
5968         
5969 Tue Jan  5 13:55:50 1999  Ben Pfaff  <blp@gnu.org>
5970
5971         The LIST procedure was too conservative in allocating space for
5972         buffers, which caused a bug that only showed up with very long
5973         output variables.  Thanks to Hankin <hankin@dunno.com> for this
5974         bug report.
5975
5976         * list.q: (determine_layout) Allocate 1022 bytes instead of 256.
5977
5978 Tue Jan  5 13:34:34 1999  Ben Pfaff  <blp@gnu.org>
5979
5980         Typo meant string format specifiers weren't checked properly.  I
5981         think that Hankin <hankin@dunno.com> sent me this report, but I'm
5982         willing to be corrected on this point.
5983  
5984         * format.c: (check_string_specifier) Fix obvious typo.  
5985
5986 Tue Jan  5 12:50:42 1999  Ben Pfaff  <blp@gnu.org>
5987
5988         Using $CASENUM in an expression didn't work.  Here's a fix.
5989         Thanks to Dirk Melcher <BZN-mdksh@t-online.de> for reporting this
5990         bug.
5991          
5992         * expr-evl.c: (evaluate_expression) Add OP_CASENUM case.
5993
5994         * expr-opt.c: (dump_node) OP_CASENUM is acceptable.
5995
5996 Tue Jan  5 12:47:48 1999  Ben Pfaff  <blp@gnu.org>
5997
5998         The changes in 0.2.1 to fix DATA LIST FREE parsing broke some
5999         other behavior, *sigh*.  This patch hopefully fixes that.  This
6000         time I've actually tested it.
6001
6002         Thanks to Hankin <hankin@dunno.com> for reporting this bug.
6003
6004         * data-list.c: (read_from_data_list_free,
6005         read_from_data_list_list) Call parse_string_as_format() directly
6006         without mucking around with the field width.
6007
6008 Tue Jan  5 12:31:19 1999  Ben Pfaff  <blp@gnu.org>
6009
6010         Occasionally, you may encounter a script that wants to be
6011         interpreted in interactive mode.  Make -i emulate this behavior to
6012         allow such scripts to be executed with PSPP.
6013
6014         Thanks to Hankin <hankin@dunno.com> for reporting this behavior.
6015
6016         * cmdline.c: (pre_syntax_message[]) Update -i description.
6017
6018         * lexer.c: (preprocess_line) When getl_interactive is 2 (i.e.,
6019         when -i is given on the command line) don't treat unindented lines
6020         as starting a new command.
6021
6022 Tue Jan  5 12:30:10 1999  Ben Pfaff  <blp@gnu.org>
6023
6024         In conjunction with egcs 1.1.1, Checker emits some bogus warnings,
6025         mostly caused by local initialized aggregates.  After egcs is
6026         fixed upstream these can be removed, but for now they're not a big
6027         deal.
6028         
6029         * ascii.c: (ascii_postopen_driver) Checker chokes on local
6030         initialized arrays.  Avoid this.
6031
6032         * sfm-write.c: (sfm_write_dictionary) Don't use a local
6033         initialized struct.
6034
6035 Tue Jan  5 12:07:24 1999  Ben Pfaff  <blp@gnu.org>
6036
6037         egcs 1.1.1 has some new warnings relative to gcc 2.8.1, which the
6038         following changes avoid.  Currently I compile sources with egcs
6039         1.1.1 and gcc 2.7.2.3 before sending them out.
6040
6041         * apply-dict.c: (apply_dict) Use new avl_traverser_init() macro.
6042         
6043         * ascii.c: (option_tab[]) Initialize all struct members.
6044
6045         * avl.h: (avl_traverser_init) New macro.
6046         
6047         * command.c: (DEFCMD, UNIMPL macros, cmd_table[]) Initialize all
6048         struct members.
6049
6050         * crosstabs.q: (enum_var_values) Use new hsh_iterator_init()
6051         macro.
6052
6053         * hash.c: Comment fix.
6054
6055         * hash.h: (hsh_iterator_init) New macro.
6056
6057         * html.c: (option_tab[]) Initialize all struct members.
6058
6059         * pfm-write.c: (write_value_labels) Use new avl_traverser_init()
6060         macro.
6061
6062         * postscript.c: (option_tab[]) Initialize all struct members.
6063         (output_encodings, preclose, dump_lines) Use new
6064         hsh_iterator_init() macro.
6065
6066         * sfm-write.c: (write_value_labels) Use new avl_traverser_init()
6067         macro.
6068
6069         * sysfile-info.c: (describe_variable) Use new avl_traverser_init()
6070         macro.
6071
6072 Thu Nov 19 12:32:45 1998  Ben Pfaff  <blp@gnu.org>
6073
6074         * data-in.c: Examined each of the parsing functions to make sure
6075         that they wouldn't dump core if they were passed a string of the
6076         wrong length, since now the DATA LIST FREE/LIST routines don't
6077         check for field width before passing it to the data parser.
6078         (parse_RBHEX, parse_AHEX) Reject odd length input.
6079         (parse_string_as_format) Reject input that's too short or too
6080         long.
6081
6082         * data-list.c: Before, the DATA LIST FREE/LIST routines would pad
6083         a field to its entire declared output width then pass it to the
6084         data-in parsing routines.  This contradicted the documented
6085         behavior.  This is fixed in these changes.  Thanks to Mark H. Wood
6086         <mwood@IUPUI.Edu>.  In addition, this fixes a few more details of
6087         free-format parsing that differed from SPSS.
6088         (cut_field) Commas and spaces are treated identically.  Returns
6089         the proper column instead of a fixed 1 value.
6090         (parse_field) Removed.
6091         (read_from_data_list_free, read_from_data_list_list) Call
6092         parse_string_as_format directly instead of parse_field.
6093
6094         * heap.c: (heap_delete) Stylistic fixes.
6095
6096 Sun Aug  9 11:12:13 1998  Ben Pfaff  <blp@gnu.org>
6097
6098         * loop.c: (loop_2_trns_proc) Formatting fix.
6099
6100         * sel-if.c: (cmd_filter) Set FILTER_before_TEMPORARY.
6101
6102         * var.h: (glob var FILTER_before_TEMPORARY) New global var.
6103
6104         * vfm.c: (macro FILTERED) New.
6105         (static var filter_var) New.
6106         (process_active_file_write_case) Use FILTERED.
6107         (setup_filter) Set filter_var.
6108         (close_active_file) Delete the filter if not
6109         FILTER_before_TEMPORARY.
6110         (procedure_write_case) Use FILTERED.
6111
6112 Sat Aug  8 00:20:14 1998  Ben Pfaff  <blp@gnu.org>
6113
6114         * crosstabs.q: Changed /PIVOT={ON,OFF} to /FORMAT={PIVOT,NOPIVOT}.
6115
6116         * data-in.c: (parse_day_count) Message fix.
6117         (parse_month) Style fix.
6118
6119         * data-list.c: (struct data_list_pgm) New member eof.
6120         (cmd_data_list) Init eof to 0.
6121         (do_reading) Implement the /END subcommand and read-past-eof
6122         checking.
6123
6124         * do-if.c: Include stdio.h when debugging.
6125         (cmd_else_if) Make sure the command is .-terminated.
6126
6127         * glob.c: (init_glob) Capitalize the command prompt.
6128
6129         * inpt-pgm.c: (end_case_trns_proc) Debugging message.
6130         (end_file_trns_proc) Debugging message.
6131
6132         * loop.c: (internal_cmd_loop) Make it work when there's no loop
6133         index!
6134         (loop_2_trns_proc) Enable MXLOOPS (why was this disabled?)
6135
6136         * main.c: (dump_token) Make kwtab[] const.
6137
6138         * set.q: Spelling, comment fixes.
6139
6140         * sysfile-info.c: (cmd_display) DISPLAY VECTORS not DISPLAY
6141         VECTOR.
6142
6143         * vars-prs.c: (fill_all_vars) Style fix.
6144
6145         * vfm.c: (index_to_varname) Return const.
6146
6147 Tue Aug  4 23:49:23 1998  Ben Pfaff  <blp@gnu.org>
6148
6149         * Changes in many source files for partial -ansi -pedantic and
6150         no-debugging compliance: Remove trailing common in enum
6151         declarations; add `unused' attributes; insert some appropriate
6152         casts.
6153
6154         * cmdline.c: (parse_command_line) Add new --testing-mode flag.
6155
6156         * command.c: (shell) Make static.
6157         (run_command) Make static.
6158
6159         * data-list.c: (dump_fixed_table) Remove use of local_strdup().
6160
6161         * dfm.c: (cmd_begin_data) I18n fix.
6162
6163         * error.c: (verbose_msg) Define if __STRICT_ANSI__.
6164
6165         * error.h: (macro verbose_msg) Define if __STRICT_ANSI__.
6166
6167         * expr-opt.c: (evaluate_tree) Don't initialize local arrays if
6168         __STRICT_ANSI__.
6169
6170         * file-handle.q: Don't prepend the source file directory name to
6171         the data file name.  (Ongoing issue.)
6172         (prepend_current_directory) Comment out.
6173         (internal_cmd_file_handle) Don't call prepend_current_directory().
6174         (fh_get_handle_by_filename) Ditto.
6175
6176         * filename.c: Append zero byte to readlink() return value.
6177
6178         * getline.c: (getl_read_line) I18n fix.
6179
6180         * lexer.h: Don't use gcc features if __STRICT_ANSI__.
6181
6182         * misc.h: Don't use gcc features if __STRICT_ANSI__.
6183
6184         * pfm-write.c: (bufwrite) Don't try to increment a void * pointer
6185         directly.
6186
6187         * postscript.c: (output_encodings) Don't use local_strdup().
6188         (postopen) Ditto.
6189
6190         * print.c: Don't use gcc features if __STRICT_ANSI__.
6191
6192         * q2c.c: (dump_vars) Don't put a , at the end of the last enum.
6193
6194         * recode.c: (parse_src_spec) Fully brace nested if's.
6195
6196         * set.q: (global var set_testing_mode) New var.
6197
6198 Wed Jul 29 22:01:44 1998  Ben Pfaff  <blp@gnu.org>
6199
6200         * ascii.c: Add some more `unused' attributes that only come into
6201         play when NDEBUG is defined.
6202         (ascii_close_page) Set s_len when reallocating s.
6203         
6204         * crosstabs.q: (delete_missing) New function.
6205         (output_pivot_table) Call delete_missing() if /MISSING=REPORT.
6206         (make_summary_table) Create summary table reallocable.
6207
6208         * postscript.c: Add more `unused' attributes as above.
6209
6210         * tab.c: (tab_create) [GLOBAL_DEBUGGING] Set reallocable member.
6211         (tab_realloc) [GLOBAL_DEBUGGING] Assert that table is reallocable.
6212          
6213         * tab.h: (struct tab_table) [GLOBAL_DEBUGGING] New `reallocable'
6214         member.
6215
6216         * var.h: (macro force_dup_variable) [!GLOBAL_DEBUGGING] Remove
6217         gratuitous space between parameter definition.
6218
6219         * vars-atr.c: Changed some assert(0)'s to abort()'s to prevent
6220         complaints about running off the end of functions with NDEBUG
6221         enabled.
6222
6223 Sun Jul  5 00:17:25 1998  Ben Pfaff  <blp@gnu.org>
6224
6225         * Several source files: Removed some PORTME notes when reflection
6226         revealed that ANSI forbids that sort of breakage.  Also, added
6227         lots of `unused' qualifiers here and there.
6228
6229         * aggregate.c: (accumulate_aggregate_info) Remove local var
6230         weighting that turned out not to be used.
6231
6232         * avl.c: Update to version 1.1.0.  Add unused specifier.
6233         (avl_destroy) Initialize ab to 0.  Comment fixes.  Cast return
6234         value to void *.
6235         (avl_probe) Replace some instances of 1 with +1 where appropriate.
6236         (avl_find) Cast return value to void *.
6237         (avl_delete) q doesn't need to be initialized at the beginning of
6238         the function.  Replace some instances of 1 with +1.
6239         (force_avl_delete) Renamed avl_force_delete, all references changed.
6240         (compare_ints) `param' marked unused.
6241         (print_int) `param' marked unused.
6242         (recurse_tree) Replace some instances of 1 with +1.
6243
6244         * avl.h: Update to version 1.1.0.  Only declares avl function
6245         types if not already declared.
6246         (AVL_MAX_HEIGHT) Only define if not already defined.
6247         (struct avl_node) New unused member char pad[2].
6248         [GLOBAL_DEBUGGING] Change conditionalization to NDEBUG instead.
6249         (force_avl_insert) Renamed avl_force_insert.
6250         (force_avl_delete) Renamed avl_force_delete.
6251
6252         * crosstabs.q: (struct table_entry) Put `freq' into a union with
6253         new member `data'.
6254         (struct crosstab) Add new member `ofs'.
6255         (glob var int_tab) Removed.
6256         (custom_tables) In integer mode, assign v[i] properly through the
6257         indirect var_dict.
6258         (custom_variables) Now p.crs.max == max + 1.
6259         [DEBUGGING] (debug_print) p.crs.min and p.crs.max are now ints.
6260         (precalc) Implement integer mode.
6261         (calc_integer) Implement integer mode.
6262         (compare_table_entry) Remove unused local variable `comparing'.
6263         (make_summary_table) Implement integer mode.
6264         (macro ns_rows) Implemented as static variable now.
6265         (several variables) Made static, from global.
6266         (output_pivot_table) Use table_value_missing() for column heads.
6267         Remove several unused local variables.  Implement integer mode
6268         table summing.  Count up ns_rows.
6269         (crosstabs_dim) Make columns wider when /MISSING=REPORT requested.
6270         (find_pivot_extent) Moved into find_pivot_extent_general; now just
6271         calls that function or find_pivot_extent_integer.
6272         (find_pivot_extent_integer) New function.
6273         (enum_var_values) Implemented for integer mode.
6274         (table_value_missing) New function.
6275         (display_dimensions) Call table_value_missing() for heads.
6276         (float_M_suffix) New function.
6277         (display_crosstabulation) Call table_value_missing() for row
6278         heads.  Handle missing values in /MISSING=REPORT mode.
6279         (calc_fisher) Remove unused var N.
6280         (calc_r) Remove unused var fact.
6281
6282         * data-list.c: (dump_fixed_table) Fix table dimensioning.
6283         (read_one_set_of_repetitions) Remove unused vars var_spec, column.
6284
6285         * data-out.c: (insert_commas) Remove unused var cp.
6286         (convert_CCx) Remove unused vars save_set_decimal,
6287         save_set_grouping.
6288
6289         * descript.q: (dump_z_table) Fix table dimensioning.
6290         (pre_calc) Remove unused var j.
6291         (display) Remove unused vars title, s.  Fix table dimensioning.
6292
6293         * expr-evl.c: Comment fixes.
6294
6295         * frequencies.q: (full_dim) New function.
6296         (dump_full) Fix table dimensioning.
6297         (condensed_dim) New function.
6298         (dump_condensed) Fix table dimensioning.
6299
6300         * get.c: (cmd_match_files) Remove unused var n_val.  Remove unused
6301         label winnage.
6302
6303         * html.c: (html_close_drive) Remove unused var i.
6304         (postopen) Remove unused vars title, curfn_len, cp.
6305         (preclose) Remove unused vars this, x.
6306
6307         * lexer.c: Comment fixes.
6308
6309         * matrix-data.c: (cmd_matrix_data) Remove unused var index.
6310
6311         * means.q: (custom_tables) Remove unused var m_dim.
6312
6313         * mis-val.c: Format fix.
6314
6315         * modify-vars.c: (cmd_modify_vars) Remove unused var new_dict.
6316
6317         * output.c: (outp_get_paper_size) Remove unused var cp.
6318
6319         * pfm-read.c: (read_float) Remove unused var save, unused label
6320         underflow.
6321         (read_variables) Remove unused vars cp, j.
6322         (read_value_label) Remove unused var j.
6323
6324         * pfm-write.c: (bufwrite) Remove unused var i.
6325
6326         * postscript.c: (ps_postopen_drive) Remove unused vars dev_info,
6327         fn.
6328         (output_encodings) Remove unused vars char_cp, n_output.
6329         (read_ps_encodings) Remove unused var ep.
6330         (postopen) Remove unused var title.
6331         (preclose) Remove unused var fp.
6332         (ps_open_page) Remove unused vars true, false, orientation,
6333         mirror_horz, mirror_vert, width, length.
6334         (ps_text_metrics) Remove unused var x.
6335
6336         * q2c.c: (find_symbol) Remove unused var y.
6337         (parse_setting) Remove unused parameter sbc, all references
6338         changed.
6339         (dump_parser) Remove unused var cp.
6340         (dump_free) Remove unused var i.
6341
6342         * set.q: (static vars args, n) Removed.
6343         (internal_cmd_gset) Removed.
6344
6345         * sfm-read.c: (sfm_read_dictionary) Removed unused var i.
6346         (read_machine_flt64_info) Removed unused var file_endian.
6347         (read_documents) Removed unused var i.
6348         (read_compressed_data) Removed unused parameter dict, all
6349         references changed.
6350
6351         * sfm-write.c: (bufwrite) Removed unused var i.
6352         (sfm_write_case) Removed unused var i.
6353
6354         * sort.c: (merge_once) Remove unused var t.
6355         (write_separate) #if 0 out as dead code.
6356
6357         * split-file.c: (cmd_split_file) Remove unused var i.
6358
6359         * sysfile-info.c: (sysfile_info_dim) New function.
6360         (cmd_sysfile_info) Fix table dimensioning.
6361         (variables_dim) New function.
6362         (display_variables) Fix table dimensioning.
6363         (describe_variable) Remove unused var prev_r.
6364
6365         * t-test.q: (z_postcalc) Removed.
6366         (pairs_calc) Remove unused var bad_weight.
6367         (postcalc) Remove unused vars dfn, dfd.
6368
6369         * tab.c: (tab_create) Set t->dim to NULL.
6370         (tab_dim) Make sure t->dim is NULL first.
6371         (tab_natural_width) Remove parameter `clamp'.
6372         (tab_value) Remove duplicate assertion for table.
6373         (tab_raw) New function.
6374         (nowrap_dim) New function.
6375         (wrap_dim) New function.
6376         (tab_output_text) Fix table dimensioning.
6377
6378         * tab.h: (tab_raw) New macro.
6379
6380         * val-labs.c: (get_label) Remove unused var type.
6381         (copy_value_labels) Remove unused var trav.
6382
6383         * var.h: (struct crosstab_proc) Completely changed.
6384
6385         * vars-prs.c: (parse_dict_variable) Remove unused var v.
6386
6387         * vfm.c: (open_active_file) Remove unused vars i, lp.
6388
6389         * weight.c: (weight_trns_proc) #if 0 out as dead code.
6390         
6391 Tue Jun  2 23:37:21 1998  Ben Pfaff  <blp@gnu.org>
6392
6393         * Makefile.am: Add apply-dict.c, flip.c.
6394
6395         * apply-dict.c: New file.
6396         
6397         * command.c: (struct command) Make cmd[] larger for CLEAR
6398         TRANSFORMATIONS command name.
6399         (parse_cmd) Make sure we're in a valid state before using it as an
6400         index.  Discard variables and reset state on invalid transitions.
6401         (cmd_clear_transformations) New function.
6402
6403         * command.def: Add APPLY DICTIONARY, CLEAR TRANSFORMATIONS, FLIP.
6404         Add unimplemented PRESERVE, RESTORE.
6405
6406         * file-handle.h: Include stddef.h.
6407
6408         * flip.c: New file.
6409         
6410         * pfm-read.c: (parse_value) Pad value label values with spaces,
6411         not nulls.
6412
6413         * sfm-read.c: (struct sfm_fhuser_ext) Add reference count.
6414         (sfm_close) Decrement reference count, make sure it's zero.
6415         (sfm_maybe_close) New function.
6416         (sfm_read_dictionary) Handle reference counts.
6417
6418         * vars-atr.c: (clear_default_dict) New function.
6419         (discard_variables) Use clear_default_dict().
6420
6421 Sun May 31 00:58:05 1998  Ben Pfaff  <blp@gnu.org>
6422
6423         * Makefile.am: Add pfm-write.c.
6424         (LDADD) Add the libgmp2 libraries.
6425
6426         * command.def: Define EXPORT.
6427
6428         * get.c: (cmd_export) New function.
6429         (export_write_case_func) New function.
6430
6431         * pfm-read.c: (static spss2ascii[]) Make it const.
6432
6433         * pfm-write.c: New file.
6434
6435         * sfm-write.c: Formatting, comment fixes.
6436
6437         * var.h: Comment fix.
6438
6439 Fri May 29 21:44:12 1998  Ben Pfaff  <blp@gnu.org>
6440
6441         * Makefile.am: Add pfm.h, pfm-read.c.
6442
6443         * command.def: IMPORT is now implemented.
6444
6445         * format.c: (glob var translate_fmt[]) New var.
6446
6447         * get.c: (enum GTSV_NONE) Renamed GTSV_OPT_NONE.
6448         (cmd_import) New function.
6449         (import_source_read) New function.
6450         (glob var import_source) New var.
6451
6452         * pfm-read.c: New file.
6453
6454         * pfm.h: New file.
6455         
6456         * sfm-read.c: (parse_format_spec) Local variable translate_fmt[]
6457         moved in format.c.
6458         (dump_dictionary) Disabled printing a couple of items.
6459
6460 Mon May 25 12:42:37 1998  Ben Pfaff  <blp@gnu.org>
6461
6462         * crosstabs.q: (postcalc) Call make_summary_table().
6463         (make_summary_table) New function.
6464         (insert_summary) New function.
6465         (display_dimensions) Remove some unnecessary arguments, all
6466         references changed.
6467         (output_pivot_table) Fix lots of problems with the risk table
6468         setup.
6469         (submit) Don't display an empty table.
6470         (display_risk) Fix order of arguments to calc_risk().
6471
6472         * glob.c: Always include assert.h and stdlib.h.
6473
6474         * output.h: (enum OUTP_T_JUST_FULL) Removed, all references
6475         removed.
6476
6477         * tab.c: (tab_create) Cosmetic changes.
6478
6479         * tab.h: (enum TAB_JUSTIFY) Removed, all references removed.
6480
6481 Sun May 24 22:39:23 1998  Ben Pfaff  <blp@gnu.org>
6482
6483         * tab.def: Removed.
6484
6485         * crosstabs.q: (output_pivot_table) Headers drawing and submission
6486         code simplified, moved into new function submit().
6487         (submit) New function.
6488         (crosstabs_dim) New function.
6489         (display_directional) Substitute variable names for %s where
6490         appropriate.
6491         (somers_d_v[], somers_d_ase[], somers_d_t[]) New static vars.
6492         (calc_symmetric) Initialize parameters only if non-NULL.
6493         Calculate Somers' d.
6494         (calc_directional) Calculate Somers' d (or copy it, really).
6495         Calculate eta.
6496
6497         * output.c: (outp_string_width) New function.
6498
6499         * postscript.c: (postopen) Calculate font widths based on the
6500         width of the zero '0' character, not the width of the space
6501         character.  Set paper-width and paper-length based on points, not
6502         device units.
6503         (ps_open_page) Fix page setup string for landscape mode.
6504
6505         * som.h: (struct som_dimension) Removed.
6506         (struct som_table_class) height, width members take int * not
6507         som_dimesion * now.
6508
6509         * tab.c: Many functions now have added parameter validation.
6510         (tab_height, tab_width) These functions were removed and merged
6511         into a single function tab_resize(), and all references changed.
6512         (tab_dim) Rewritten since the interface changed; reduced from
6513         hundreds of lines to two.  All callers were changed.  Currently
6514         most of them just use tab_natural_dimensions as their callback and
6515         await detailed translation of functionality.
6516         (tab_natural_width) New function.
6517         (tab_natural_height) New function.
6518         (tab_natural_dimensions) New function.  This is a callback
6519         function, not something that you'd want to call directly.
6520         (tab_nat_dim) Removed.
6521         (tabi_table) Allocates t->w and t->h.
6522         (tabi_driver) Inlined sum_columns()'s functionality.  Calls the
6523         dimensions callback.
6524         (evaluate_dimensions) Removed.
6525         (sum_columns) Removed.
6526
6527         * tab.h: (enum TAL_1THIN) Removed.
6528         (enum series t_*) Removed.
6529         (struct tab_table) Members trh, trv changed to unsigned char *
6530         from int *.  Member dim changed to a function pointer from a
6531         unsigned char *.  Member max_stack_height removed.  New members
6532         hr_tot, vr_tot.
6533         (macros tab_l, tab_r, tab_t, tab_b) New.
6534
6535 Sat May 23 23:22:13 1998  Ben Pfaff  <blp@gnu.org>
6536
6537         * ascii.c: (delineate) Assign last_space_nchars before skipping
6538         spaces, to fix right justification.
6539
6540         * crosstabs.q: (static vars risk, direct) New vars.
6541         (static var pearson_r) Removed.
6542         (glob var chisq_fisher) Made static.
6543         (static vars row_tot[], col_tot[]) Don't include grand total
6544         anymore.
6545         (static var grand_total) Renamed W, all references changed.
6546         (output_pivot_table) Only make `table' if num_cells != 0.  Make
6547         risk and directional tables.  Deal with grand total no longer part
6548         of col_tot[].  Free rows and cols after we're done with them.
6549         (display_risk) New function.
6550         (display_directional) New function.
6551         (clac_r) Rewritten so that it stores all its results into its
6552         arguments, so it can be used for Spearman's correlation too.
6553         (calc_symmetric) Added a t[] argument, all references changed.
6554         Calculates ASEs for tau-b, tau-c, gamma.  Calculates Spearman's r,
6555         Pearson's r, Cohen's kappa.
6556         (calc_risk) New function.
6557         (calc_directional) New function.
6558
6559         * som.c: (som_submit) Improved debugging code.
6560
6561         * stats.c: (hypercube) New function.
6562         (cube) New function.
6563         (sqr) New function.
6564         (normal_sig) Went back to old implementation, which actually
6565         worked.
6566
6567         * stats.h: (macros square, cube, hypercube) Removed.  The
6568         equivalent functions in stats.c are inlined here; all references
6569         to square changed to sqr.
6570
6571 Fri May 22 00:03:41 1998  Ben Pfaff  <blp@gnu.org>
6572
6573         * crosstabs.q: (N_SYMMETRIC) New define.
6574         (postcalc) Disable debug printing.
6575         (static vars chisq_fisher, pearson_r) New.
6576         (output_pivot_table) Add support for symmetric measures.  Add
6577         chi-square output of exact sigs.
6578         (display_chisq) Rewritten.
6579         (display_symmetric) New function.
6580         (gamma_int) New function.
6581         (Pr) New function.
6582         (swap) New function.
6583         (calc_fisher) New function.
6584         (calc_chisq) Check boundary conditions better. Calculate Yates,
6585         Fisher, Mantel-Haenszel tests.
6586         (calc_r) New function.
6587         (calc_symmetric) New function.
6588
6589         * stats.c: (normal_sig) Rewritten with new algorithm.  Renamed
6590         from calc_normal.
6591         (chisq_sig) Better boundary conditions.  Renamed from
6592         calc_significance.
6593
6594         * tab.h: (struct tab_table) New member cf.
6595
6596         * tab.c: (tab_create) Set cf.
6597         (tab_width) New function.
6598         (tab_realloc) Handle cf.
6599         (tab_vline) Handle cf.
6600         (tab_hline) Handle cf.
6601         (tab_box) Handle cf.
6602         (tab_value) Handle cf.
6603         (tab_float) Handle cf.
6604         (tab_text) Handle cf.
6605         (tab_joint_text) Handle cf.
6606         (tab_offset) Handle cf.
6607         (tab_next_row) Handle cf.
6608         (evaluate_dimensions) Handle cf.
6609         (render_strip) Handle cf.
6610
6611 Wed May 20 00:03:59 1998  Ben Pfaff  <blp@gnu.org>
6612
6613         * crosstabs.q: (postcalc) New vars row_tot, col_tot, pass them to
6614         output_pivot_table().
6615         (output_pivot_table) Moved lots of local variables outside and
6616         made them static.  Add beginnings of chi-square statistic
6617         support.  Now column and row totals aren't in the main matrix.
6618         Always zero out any leftover rows & columns after we're done with
6619         the table entries.  Move all output stuff into
6620         display_dimensions(), display_crosstabs(), display_chisq().
6621         (display_dimensions) New function.
6622         (display_crosstabulation) New function.
6623         (display_chisq) New function.
6624         (calc_chisq) Implemented Pearson and likelihood-ratio chisquares.
6625
6626         * frequencies.q: (dump_full, dump_condensed) Remove tab_null()
6627         references, simplify logic.
6628
6629         * postscript.c: Remove scale, translate-x, translate-y,
6630         mirror-horz, mirror-vert, rotate-180 options.
6631         (struct ps_driver_ext) Remove scale, translate_x, translate_y.
6632         All references deleted.
6633         (macro YT) New macro.
6634         (array option_tab[]) Removed options.
6635         (ps_option) Removed options.
6636         (ps_open_page) Write page setup explicitly to output file, without
6637         using now-deleted BP function.
6638         (macro dump_line) Use YT().
6639         (macro dump_thick_line) Use YT().
6640         (draw_headers) Use YT().
6641         (switch_font) Reorder arguments to SF function.
6642         (write_text) Use YT().
6643
6644         * sfm-read.c: (sfm_read_case) Don't attempt to read variables that
6645         have get.fv == -1.
6646
6647         * sysfile-info.c: (describe_variables) Don't use tab_nulls().
6648
6649         * tab.c: (tab_create) Initialize t->ct to zeros.  Remove
6650         null-debugging code.
6651         (tab_realloc) Remove null-debugging code.  Initialize new regions
6652         of t->ct to zeros.
6653         (tab_vline) Support offsets.
6654         (tab_hline) Support offsets.
6655         (tab_box) Support offsets.
6656         (tab_null) Removed.
6657         (tab_nulls) Removed.
6658         (tab_row) Removed.
6659         (tab_col) Removed.
6660         (evaluate_dimensions) Remove null-debugging code.  Understand
6661         TAB_EMPTY attribute.  Assert that text.s.s is always non-NULL if
6662         TAB_EMPTY not present.
6663
6664         * tab.h: New cell attribute TAB_EMPTY.
6665         (macros tab_nr, tab_nc, tab_row, tab_col) New.
6666
6667         * vars-atr.c: (init_variable) Set get.fv to -1 so that GET doesn't
6668         try to read them from system files.
6669
6670         * vfm.c: (dump_splits) Don't call tab_null().   
6671
6672 Sat May 16 19:36:55 1998  Ben Pfaff  <blp@gnu.org>
6673
6674         * crosstabs.q: (struct crosstab) Added `missing' member.
6675         (custom_tables) Init missing.
6676         (calc_general) Handle missing values.
6677         (calc_chisq) New function.
6678         (output_pivot_table) Start work on chi-square output.  Update for
6679         new tab offset support functions.  Shorten statistic names.
6680
6681         * Several files: add in more `const's to placate gcc's warnings.
6682
6683         * tab.h: (struct tab_table) Add col_ofs, row_ofs members.  Comment
6684         fixes.
6685
6686         * tab.c: (tab_height, tab_realloc, tab_vline, tab_hline, tab_box,
6687         tab_null, tab_nulls, tab_value, tab_float, tab_text,
6688         tab_joint_text) Add col_ofs and row_ofs support.
6689         (tab_offset) New function.
6690         (tab_next_row) New function.
6691         (tab_row) New function.
6692         (tab_col) New function.
6693         (tabi_table) Add col_ofs and row_ofs support.
6694
6695         * vars-atr.c: (is_system_missing) New function.
6696
6697 Tue May 12 16:14:30 1998  Ben Pfaff  <blp@gnu.org>
6698
6699         * crosstabs.q: Expanded subcommand names RESID --> RESIDUAL, etc.
6700         (static var no_cells) Removed.
6701         (static var num_cells) New.
6702         (static var expected) New.
6703         (static var cells[]) New.
6704         (internal_cmd_crosstabs) Deal with new variables.
6705         (postcalc) Removed most of the meat and put it in new function
6706         output_pivot_table().
6707         (output_pivot_table) Calculates and outputs an entire pivot table.
6708
6709         * postscript.c: (postopen) Fix problems with free()ing addresses
6710         not obtained from malloc().
6711
6712         * som.c: (som_submit) Add assertion.
6713
6714         * sysfile-info.c: (describe_variable) Use new tab_nulls()
6715         function.
6716
6717         * tab.c: (static var tab_names[]) New.
6718         (tab_realloc) -1 for nc or nr indicates no change.
6719         (tab_nulls) New function.
6720         (tab_dim) Use tab_names[].
6721         (tabi_cumulate) Don't include bottom or right headers.  Furrfu.
6722         (evaluate_dimensions) Don't terminate on uninited cells, just put
6723         an X in them and emit a notice.  Use tab_names[].
6724
6725         * tab.h: Move bits into tab.def.
6726
6727         * tab.def: New.  Don't try to declare tab_table_class because then
6728         som.h has to be included.       
6729         
6730 Thu May  7 22:55:04 1998  Ben Pfaff  <blp@gnu.org>
6731
6732         * command.def: New file, contains all the command definitions
6733         previously included bodily in command.c.
6734
6735         * format.def: New file, contains all of the format definitions
6736         previously split across format.h, format.c, and sfm-write.c.
6737
6738         * lexer.h: Renamed from tokens.h in order to match corresponding
6739         .c file name.
6740
6741         * lexerP.h: Moved some rarely used functions exported by lexer.c
6742         into here.
6743
6744         * Makefile.am: Commemorate renamed files.
6745         (EXTRA_DIST) Add command.def, format.def.
6746
6747         * command.c: [0] (walk_cmdtable_func) Removed.
6748
6749         * crosstabs.q: (postcalc) Made it work and print out matrices
6750         proving it.
6751         (enum_column_values) Renamed enum_var_values, generalized for any
6752         variable.
6753
6754         * format.h: (struct fmt_desc) New member `spss'.
6755
6756         * q2c.c: (main) Generated code includes lexer.h instead of
6757         tokens.h.
6758
6759         * sfm-write.c: (write_format_spec) Use new spss member of fmt_spec
6760         instead of an independent translation table.
6761
6762 Tue May  5 13:19:03 1998  Ben Pfaff  <blp@gnu.org>
6763
6764         * Lots of source files: Added const to declarations.
6765
6766         * aggregate.c: (parse_aggregate_function) Rename inner i to j.
6767         
6768         * arena.c: (arena_clear) Set prev pointer to null when done.
6769
6770         * ascii.c: (ascii_option) Rename index as indx.
6771
6772         * avl.c: This is now a separate library called libavl.
6773         (xmalloc) Make static.
6774         (avl_probe) Step A7 can use the cache instead of an explicit
6775         compare.
6776         (avl_delete) Don't maintain a q pointer because it's always
6777         available in the pointer stack.  Comment fix.
6778
6779         * avl.h: This is now a separate library called libavl.
6780
6781         * command.c: (cmd_table[]) Remove spurious trailing "".
6782
6783         * common.h: Only include random() fix if this system needs it.
6784
6785         * crosstabs.q: Include alloca headers.
6786         (n_sorted_tab) New global var.
6787         (postcalc) Mostly rewritten.
6788         (find_pivot_extent) Rewritten.
6789         (enum_column_values) Rewritten.
6790
6791         * data-out.c: (convert_F) Rename inner n as n_spaces.
6792
6793         * error.c: (dump_message) Don't have an outer var i.
6794
6795         * file-handle.q: (static var f) Removed.  All references removed.
6796         (internal_cmd_file_handle) Uses a local variable instead of f.
6797
6798         * get.c: (trim_dictionary) Change scope of i, i1, i2.
6799         (cmd_match_files) Don't strcpy tokstr into sbc (why was this ever
6800         done?)
6801
6802         * getline.h: Declare getl_history as extern.  Reported by
6803         palme@uni-wuppertal.de (Hubert Palme).
6804
6805         * postscript.c: (postopen) Some large mods for constness.
6806
6807         * recode.c: Remove spurious copyrights since PSPP is owned by FSF
6808         anyway.
6809
6810 Fri Apr 24 12:52:47 1998  Ben Pfaff  <blp@gnu.org>
6811
6812         * Makefile.am: Rename BUILT_SOURCES to q_sources, all references
6813         changed.  Add avl.c, avl.h to pspp_SOURCES.  Remove avllib from
6814         LDADD.
6815
6816         * avl.c, avl.h: New files.  These form a clean-room
6817         reimplementation of avllib.  Iterative algorithms are used in
6818         place of recursive ones, so there is no resemblance in the code.
6819
6820         * Lots of headers: Don't include other headers by default.
6821
6822         * Lots of source files: Explicitly include all needed headers.
6823
6824         * arena.c: (arena_clear) New function.
6825
6826         * crosstabs.q: (ROW_VAR, COL_VAR) New enums.
6827         (static var ar) Removed.
6828         (staitc vars ar_tc, ar_col) New.
6829         (cmd_crosstabs) Destroy the arenas.
6830         (internal_cmd_crosstabs) Create the arenas.
6831         (precalc) Don't need a free function for the hash.
6832         (calc_general) Make sure to zero out the trailer on the key data
6833         before inserting.
6834         (print_table_entries) Updated.
6835         (postcalc) Worked on actually implementing.
6836         (find_pivot_extent) New function.
6837         (compare_value) New function.
6838         (enum_column_values) New function.
6839
6840         * data-in.c: (parse_month) Make local array `static const'.
6841         
6842         * data-out.c: (convert_date) Make local array `static const'.
6843         (convert_WKDAY) Same.
6844         (convert_MONTH) Same.
6845
6846         * frequencies.q: (postprocess_freq_tab) avl_walk_inorder() has
6847         been renamed to avl_walk().
6848         
6849         * hash.c: Rewritten more efficiently.
6850
6851         * hash.h: Add attribute const to hsh_next_prime declaration.
6852
6853         * lexer.c: (id_match) Make arguments const.
6854
6855         * postscript.c: (ps_postopen_driver) Make default fonts the
6856         Helvetica family.
6857
6858         * q2c.c: (main) Generated code needs stdlib.h.
6859
6860         * sfm-write.c: (write_value_labels) An avl_traverser needs to be
6861         initialized to 0 now, not to NULL.  All other references to
6862         avl_traverser were updated in the same way.
6863
6864         * tokens.h: Macro version of id_match updated to use const
6865         properly.
6866
6867         * val-labs.c: (inc_ref_count) New function.
6868         (copy_value_labels) Simply through use of new avl_copy() function.
6869
6870 Wed Apr 15 13:01:58 1998  Ben Pfaff  <blp@gnu.org>
6871
6872         * crosstabs.q: Probably doesn't compile.  New PIVOT subcommand.
6873         (postcalc) Worked on this.
6874
6875         * postscript.c: (OPO_DOUBLE_LINE) New enum.
6876         (struct ps_driver_ext) New line_width_thick member.
6877         (ps_preopen_drive) Init line_width_thick.
6878         (option_tab[]) Add line-* options.
6879         (ps_option) Parse line-* options.
6880         (postopen) Add line_width_thick support.  Strip leading spaces on
6881         prologue output lines.
6882         (ps_open_page) Include line_width_thick in output.
6883         (macro dump_thick_line) New.
6884         (dump_fancy_line) Support thick lines as well as double lines.
6885
6886 Tue Apr 14 00:50:08 1998  Ben Pfaff  <blp@gnu.org>
6887
6888         * Makefile.am: Add crosstabs.c to BUILT_SOURCES.  Add crosstabs.q
6889         to pspp_SOURCES.  Add crosstabs.q to EXTRA_DIST.
6890
6891         * Many source files: Rename `options' to `pv_opts' as appropriate.
6892
6893         * command.c: (static var cmd_table[]) Add CROSSTABS command.
6894
6895         * common.c: (xcalloc) New function.
6896
6897         * crosstabs.q: New file.  Not finished yet, though.
6898                 
6899         * data-list.c: Comment fix.
6900
6901         * error.c: Remove some old Checker cruft.
6902
6903         * frequencies.q: (dump_full) Cumulate valid percent instead of
6904         regular percent.
6905
6906         * getline.c: Comment fix.
6907
6908         * hash.c: Comment fixes.
6909
6910         * hash.h: (struct hsh_table) Make hash functions return unsigned
6911         instead of int to avoid problems with taking the modulo of
6912         negative return values.  All references changed.
6913
6914         * misc.c: (intlog10) Make its table static const instead of auto.
6915
6916         * sfm-read.c: (read_header) Make `prefix' static const instead of
6917         auto.
6918
6919         * var.h: (union value) Add member `hash'.
6920         (struct variable) Rename prv_index as `foo'--all references
6921         changed.  Reorder.
6922         (typedef pv_opts) Removed.  All references changed.
6923
6924         * vars-prs.c: (parse_variables) Message fixes.
6925         
6926 Mon Mar  9 15:35:08 1998  Ben Pfaff  <blp@gnu.org>
6927
6928         * get.c: (cmd_match_files) Don't reverse the order of FILEs as
6929         they are being inserted.  Don't check for BY variables of
6930         different types.  Discard variables if the active file isn't
6931         included in the merge.
6932         (mtf_processing) Essentially rewritten.
6933         (mtf_merge_dictionary) Check for master/slave variables of
6934         different types/widths.
6935
6936         * vfm.c: (static var not_canceled) New var.
6937         (process_active_file) Don't call vfm_source->read() if
6938         there's no vfm-source.  Initialize not_canceled.
6939         (process_active_file_write_case) Honor and update not_canceled.
6940         (prepare_for_writing) Rollback changes from yesterday, they were
6941         wrong.
6942         (close_active_file) Don't destroy vfm_source unless it exists.
6943         
6944 Mon Mar  9 00:56:16 1998  Ben Pfaff  <blp@gnu.org>
6945
6946         * Lots of source files: Added { } around nested if/else constructs
6947         to avoid new gcc 2.8 warnings.
6948
6949         * data-in.c: (parse_Z) Declare `int' type explicitly.
6950         (convert_Z) Ditto.
6951
6952         * get.c: (struct mtf_file) Add prev, next_min, by, input members.
6953         (cmd_match_files) Initialize mtf_by_values.  Manage by, input,
6954         prev members.  Put TABLEs at the end of the chain and FILEs at the
6955         beginning.  Don't allow the active file in STATE_INIT.  Use proper
6956         `seen' value for the active file.  Fill out the by members and
6957         make sure they're of consistent type.  Do the actual merge
6958         operation.
6959         (mtf_processing_finish) New function.
6960         (var_type_description) New function.
6961         (mtf_free_file) New function.
6962         (mtf_free) Rewritten.
6963         (mtf_delete_file_in_place) New function.
6964         (mtf_read_nonactive_records) New function.
6965         (mtf_compare_BY_values) New function.
6966         (static var mtf_seq_no) New var.
6967         (mtf_processing) New function.
6968         (mtf_merge_dictionary) Assign nval members for the system file
6969         dictionary.  Assign fv values for its variables.  Point each slave
6970         variable to the corresponding master variable.
6971
6972         * hash.c: Include str.h.
6973
6974         * mis-val.c: (copy_missing_values) src arg is const.
6975
6976         * misc.c: (spacing) Make `max' var explicitly int.
6977
6978         * sfm-read.c: (dump_dictionary) Message reformatting.
6979         (sfm_read_case) Add assertion.
6980
6981         * sort.c: Esthetic fixes.
6982
6983         * var.h: (struct match_files_proc) New struct.
6984         (struct variable) Add private data match_files_proc.
6985
6986         * vars-atr.c: (delete_variable) Implement.  Add argument for the
6987         dictionary that owning the variable.
6988         (dup_variable) Add assertion.
6989
6990         * vfm.c: Comment fixes, hopefully the comments are correct now.
6991         (process_active_file) New function.
6992         (process_active_file_write_case) New function.
6993         (process_active_file_output_case) New function.
6994         (prepare_for_writing) Use temp_dict->nval for vfm_info, not
6995         default_dict.nval.
6996         (write_case) Renamed procedure_write_case().  Now write_case is a
6997         pointer to a function.  Style fixes.
6998         
6999 1998-03-05  Ben Pfaff  <blp@gnu.org>
7000
7001         * Makefile.am: (q2c) Link with libmisc.
7002         (version.c) Define default_config_path, include_path,
7003         groff_font_path.
7004
7005         * ascii.c: (ascii_postopen_driver) When the default newline string
7006         is requested, open file in text mode.  Suggested by
7007         palme@uni-wuppertal.de (Hubert Palme).
7008         (static vars line_buf, line_p) Change from char * to unsigned char
7009         *.
7010         (ascii_close_page) char * to unsigned char *.
7011
7012         * cmdline.c: (parse_command_line) Implement -r option by
7013         prepending ~/.pspp/rc to the list of files to process.
7014
7015         * command.c: (cmd_remark) Reset getl_prompt to the standard prompt
7016         before pulling in a final line.
7017         (null_func, null_int_func) Removed (dead code).
7018
7019         * descript.q: (display) Calculate width of variable name column
7020         properly.  Calculate number of valid cases properly.  Reported by
7021         palme@uni-wuppertal.de (Hubert Palme).
7022
7023         * filename.c: (init_filename) Use default_config_path instead of
7024         now obsolete CONFIG_PATH.
7025
7026         * getline.c: (getl_initialize) Use include_path instead of now
7027         obsolete INCLUDE_PATH.
7028         (getl_add_file) New argument `where'.  All references changed.
7029
7030         * groff.c: (find_font_file) Use groff_font_path instead of now
7031         obsolete GROFF_FONT_PATH.
7032         
7033         * postscript.c: (find_ps_file) Use groff_font_path instead of now
7034         obsolete GROFF_FONT_PATH.  Copy through temporary variable to
7035         avoid problems with constness.
7036
7037         * str.h: (macro cs_streq) New macro.
7038
7039         * version.h: (glob var default_config_path, include_path,
7040         groff_font_path) New vars.
7041         
7042 1998-02-23  Ben Pfaff  <blp@gnu.org>
7043
7044         * Many source files: Change verbose_msg() priority levels and
7045         messages.
7046
7047         * aggregate.c: Include debug-print.h.
7048
7049         * cmdline.c: (parse_command_line) Add --safer/-s and --command/-c
7050         options.
7051         (static var pre_syntax_message) Document --safer/-s and
7052         --command/-c.
7053
7054         * command.c: (cmd_erase, cmd_host) Disable if set_safer is set.
7055
7056         * dfm.c: (open_inline_file) [__CHECKER__] Zero out ext->file,
7057         because it's not used but it's still copied.
7058         (open_file_r) Remove gratuitous debug message.
7059
7060         * filename.c: (safety_violation) New function.
7061         (open_file) Remove gratuitous debug messages.  Don't allow pipe
7062         files if set_safer is set.
7063
7064         * get.c: Turn off debugging.
7065
7066         * getline.c: (getl_add_virtual_file) New function.
7067         (getl_read_line) Add verbose_msg() call for opening new syntax
7068         file.
7069         (getl_perform_delayed_reset) Add a return value describing whether
7070         any action was taken.  Call reset_eof().
7071
7072         * getline.h: Comment fix.
7073
7074         * groff-font.c: (groff_read_font) Use `goto next_iteration' in
7075         place of incorrect `continue'.  Use strtok_r() instead of
7076         strtok().  Always check strtok_r() return value.
7077         (groff_read_DESC) Use strtok_r() instead of strtok().
7078
7079         * lexer.c: (reset_eof) New function.
7080
7081         * main.c: (parse) Get a token after performing a delayed reset
7082         action; allow empty syntax files.
7083
7084         * postscript.c: (output_encodings) Use strtok_r() instead of
7085         strtok().
7086
7087         * q2c.c: (dump_parser) Use strtok_r() instead of strtok().
7088
7089         * set.q: Comment fixes.
7090         (glob var set_safer) New var.
7091         (internal_cmd_set) Support SAFER.
7092
7093         * str.h: [!HAVE_STRTOK_R] Declare strtok_r() prototype.
7094
7095         * temporary.c: (free_dictionary) Set d->splits to NULL after
7096         freeing.
7097
7098         * vars-atr.c: (clear_variable) Decrement dict->n_splits if
7099         variable deleted, not if it *isn't* deleted.
7100
7101 1998-02-16  Ben Pfaff  <blp@gnu.org>
7102
7103         * command.c: (array cmd_table[]) Add MATCH FILES.
7104
7105         * common.c: Comment fixes.
7106
7107         * data-list.c, dfm.c, error.c, filename.c, list.q, matrix-data.c,
7108         modify-vars.c, postscript.c, sfm-read.c, sfm-write.c, tab.c:
7109         Include alloca.h.  Problem reported by palme@uni-wuppertal.de
7110         (Hubert Palme).
7111
7112         * expr-opt.c: Include str.h.  Problem reported by
7113         palme@uni-wuppertal.de (Hubert Palme).
7114
7115         * get.c: (cmd_get) [DEBUGGING] Update v->p.get to v->get.
7116         (static var mtf_by) Change from char ** to variable **.
7117         (static var mtf_master) New var.
7118         (mtf_merge_dictionary) New function.
7119         (cmd_match_files) Init mtf_master.  Parse mtf_by according to new
7120         var type.  Reorder tests properly.  Initialize file->dict.  Detect
7121         TABLE= without BY=.  Read file dictionaries and merge them.  Give
7122         subcommand name with IN, LAST, FIRST error messages.  Create IN,
7123         LAST, FIRST variables.  Comment fixes.
7124         (mtf_free) Don't free default_dict.  Free mtf_master.
7125
7126         * getline.c: Define getl_mode.  Change getl_buf_size to size_t
7127         from int.
7128         (handle_line_buffer) Cast int to size_t in comparison to avoid
7129         warning.
7130
7131         * getline.h: Declare getl_mode extern.
7132
7133         * groff-font.c: (groff_read_font) Type-fix calls to getline.
7134         (groff_read_DESC) Make line_size a size_t.
7135         (match_tok) Parenthesize name to avoid macro expansion.
7136
7137         * mis-val.c: (copy_missing_values) New function.
7138
7139         * postscript.c: (postopen) Make buf_size a size_t.
7140
7141         * sfm-read.c: (dump_dictionary) Make global from static.  Print
7142         variable info in parts for easier debugging with Checker.
7143
7144         * temporary.c: (copy_variable) Use copy_value_labels().
7145         (new_dictionary) New arg: whether to copy file label, documents.
7146
7147         * val-labs.c: (copy_value_labels) New function.
7148
7149         * var.h: (enums MISSING_*) Add MISSING_COUNT.
7150
7151         * vars-atr.c: [GLOBAL_DEBUGGING] (force_dup_variable) New
7152         function.
7153         (dup_variable) Set prv_index, get.fv, get.nv.
7154
7155 Fri Feb 13 15:38:36 1998  Ben Pfaff  <blp@gnu.org>
7156
7157         * Makefile.am: (pspp_SOURCE) Add htmlP.h.
7158
7159         * Many source files: For ANSI-compliance, add empty statement
7160         after label.  Reported by palme@uni-wuppertal.de (Hubert Palme)
7161         and Micah Altman <maltman@www-vdc.fas.harvard.edu>.
7162
7163         * data-in.c: (parse_numeric) Some header files break on
7164         -DBL_MIN_10_EXP because they get a --; add () for safety.
7165         Reported by palme@uni-wuppertal.de (Hubert Palme).
7166
7167         * dfm.c: Idea by Dr Eberhard W Lisse <el@linux.lisse.na>.
7168         (struct dfm_fhuser_ext) Change `file' from FILE * to file_ext.
7169         (dfm_close) Use close_file_ext.
7170         (open_inline_file) Set file.file to NULL, not file.
7171         (open_file_r, open_file_w) Initialize file.file; fill in file_ext
7172         struct and use open_file_ext().
7173         (read_record) Use file.file.
7174
7175         * file-handle.q: (prepend_current_directory) Pass through special
7176         filenames.
7177
7178         * filename.c: Only include unistd.h if HAVE_UNISTD_H.
7179         (normalize_filename) Pass through special filenames.
7180         (open_file, close_file) Accept pipe| and |pipe syntaxes as
7181         equivalent.
7182         (dirname) Rename blp_dirname() because of name conflict on some
7183         OS.  All references changed.  Reported by palme@uni-wuppertal.de
7184         (Hubert Palme).
7185         (is_special_filename) New function.
7186
7187         * get.c: (GTSV_OPT*) Add GTSV_OPT_MATCH_FILES.
7188         (trim_dictionary) Conditionalize some of the options on whether
7189         GTSV_OPT_MATCH_FILES is in *options.
7190         (rename_variables) Don't allow variables to be renamed as scratch
7191         variables.
7192         (MTF_*) New enum series.
7193         (struct mtf_file) New struct.
7194         (static vars mtf_head, mtf_tail, mtf_by, mtf_n_by, mtf_free) New
7195         vars.
7196         (cmd_match_files, mtf_free) New functions.
7197
7198         * lexer.c: (match_int) Needed parentheses around name to escape
7199         macro expansion.  Reported by Micah Altman
7200         <maltman@www-vdc.fas.harvard.edu>.
7201
7202         * print.c: Needed to include alloca.h.  Reported by Micah Altman
7203         <maltman@www-vdc.fas.harvard.edu>.
7204
7205         * recode.c: (convert_to_double) Parenthesize -DBL_MIN_10_EXP to
7206         -(DBL_MIN_10_EXP).  Reported by palme@uni-wuppertal.de (Hubert
7207         Palme).
7208         
7209         * str.h: Include stdarg.h.  Reported by palme@uni-wuppertal.de
7210         (Hubert Palme) and Micah Altman <maltman@www-vdc.fas.harvard.edu>.
7211
7212 Thu Feb  5 00:18:21 1998  Ben Pfaff  <blp@gnu.org>
7213
7214         * html.c: (struct html_driver_ext) Move into htmlP.h.
7215         (html_preopen_driver) Initialize cp_x, cp_y.
7216         (html_submit) Implement as call to output_tab_table().
7217         (change_attributes) New function.
7218         (escape_string) New function.
7219         (output_tab_table) New function.
7220
7221         * list.q: (write_all_headers) Add code for writing headers for the
7222         html driver.
7223         (clean_up) Write out the html close-table tag.
7224         (determine_layout) Ignore html driver.
7225         (list_cases) Write html data.
7226
7227         * som.c: (som_submit) Move more of the code into output_table().
7228
7229         * tab.c: (static var hit) Make a global var and rename tab_hit.
7230         (static var tab_table_class) Make a global var.
7231
7232         * htmlP.h: New file.
7233
7234 Tue Feb  3 16:12:18 1998  Ben Pfaff  <blp@gnu.org>
7235
7236         * dump-sysfile.c: Removed.
7237
7238         * html.c: (preclose) Change comment in emitted code.
7239
7240         * matrix-data.c: Debugging off by default.  Comment fixes.
7241         (static var container) New var.
7242         (cmd_matrix_data) Create and destroy container.  Initialize
7243         is_per_factor[] to 0s.  Move code into new function
7244         string_to_content_type().  Require split values to be present in
7245         the data when ROWTYPE_ is explicit.  Call specific function, not
7246         general read_matrices().
7247         (string_to_content_type) New function.
7248         (context) Exclude all whitespace, not just spaces.
7249         (mget_token) A dot is a number.  Add assertion.
7250         (static var data) Renamed nr_data.
7251         (static var factor_values) Renamed nr_factor_values.
7252         (read_matrices) Renamed read_matrices_without_rowtype().  Handle
7253         only specific case.  Close data_file before exit.
7254         (fill_matrix) New function.
7255         (read_data_lines) Renamed nr_read_data_lines().  Remove debug
7256         printing.  Style fixes.  Message fixes.  Move code into
7257         fill_matrix().
7258         (read_matrices_without_rowtype) Rename
7259         matrix_data_read_without_rowtype().  Fix off-by-one error on
7260         loops.  Allocate nr_data[] memory from arena.
7261         (read_matrices_with_rowtype) Removed.
7262         (read_splits) Renamed nr_read_splits().  Style fixes.
7263         (read_factors) Renamed nr_read_factors().
7264         (dump_cell_content) Comment fixes.  Arguments changed.  Change
7265         debug printing.  All references changed.
7266         (output_data) Renamed nr_output_data().
7267         (static var wr_content) New var.
7268         (struct factor_data) New struct.
7269         (static var wr_data) New var.
7270         (static var wr_current) New var.
7271         (matrix_data_source_destroy_source) Removed.
7272         (read_matrices_with_rowtype) New function.
7273         (matrix_data_read_with_rowtype) New function.
7274         (wr_read_splits) New function.
7275         (compare_factors) New function.
7276         (wr_output_data) New function.
7277         (wr_read_rowtype) New function.
7278         (wr_read_factors) New function.
7279         (wr_read_indeps) New function.
7280         (glob var matrix_data_source) Make destroy_source member NULL as
7281         well.
7282
7283 Fri Jan 23 00:09:08 1998  Ben Pfaff  <blp@gnu.org>
7284
7285         * lexer.c: (syntax_error) Give better error message when at end of
7286         file.
7287
7288         * matrix-data.c: (var content_names[]) Fix PROX spelling.  Change
7289         N_SCALAR to output as plain N.
7290         (mdump_token) Change output format.
7291         (context) Fix message output interaction with spaces in input.
7292         (another_token) New function.
7293         (force_eol) Improved error message.
7294         (static var max_cell_index) New var.
7295         (read_matrices) Init `cells'.  factor_values is now per-cell.
7296         Init max_cell_index.
7297         (read_data_lines) Replace `compare' local with new `compare' arg.
7298         Debugging messages changed.  Only read factors if per_factor.
7299         Propagate error return from read_factors(), force_eol().
7300         Copy N_SCALAR values across the N vector.
7301         (read_matrices_without_rowtype) Don't init `cells'.  Don't need to
7302         check parentheses manually since we now have is_per_factor[].
7303         Call read_data_lines() with new args.  Check for end of data after
7304         looping, using another_token().
7305         (read_factors) Arguments changed.  Use max_cell_index to determine
7306         whether to read or compare factors.  Message fixes.
7307         (dump_cell_content) New function.
7308         (output_data) Completely rewritten because content types were
7309         supported to be nested inside factor values, not vice versa.
7310         
7311 Thu Jan 22 00:26:38 1998  Ben Pfaff  <blp@gnu.org>
7312
7313         * lexer.c: (syntax_error) Support formatted varargs messages.
7314
7315         * matrix-data.c: Turn debugging on by default.
7316         (static content_type[]) New array.
7317         (static content_names[]) New array.
7318         (static rowtype_, varname_) New vars.
7319         (static is_per_factor[]) New array.
7320         (static split_values) Moved declaration.
7321         (static n_continuous, first_continuous) New var.
7322         (cmd_matrix_data) Don't init split_values.  Assign ROWTYPE_ to
7323         rowtype_.  Simplify SPLIT code.  Init is_per_factor[].  Assign
7324         VARNAME_ to varname_.  Initialize first_continuous, n_continuous.
7325         Check for continuous variables.
7326         [DEBUGGING] (debug_print) Remove content_names[].
7327         (mdump_token) New macro.
7328         (mget_token_dump) New function.
7329         (mdump_token) New function.
7330         (context) New function.
7331         (mget_token) Fix messages.
7332         (static var data, split_values, factor_values) New vars.
7333         (read_matrices) Manage split_values, factor_values.
7334         (read_data_lines) New function.
7335         (read_matrices_without_rowtype) Implemented.
7336         (read_splits) Message fixes.  Uses `just_read'.
7337         (read_factors) New function.
7338         (output_data) New function.
7339         (matrix_data_source_destroy_source) Close the file handle.
7340         (glob var matrix_source) Change name from "DATA LIST" to "MATRIX
7341         DATA".
7342
7343         * str.c: (strpadcmp) Removed.
7344
7345         * vfm.c: (dump_splits) Initialize i; fix test for end of splits.
7346
7347 Sun Jan 18 00:30:59 1998  Ben Pfaff  <blp@gnu.org>
7348
7349         * Lots of source files: Add cast to unsigned character to calls to
7350         tolower() and toupper().
7351
7352         * aggregate.c: Set default_dict.splits to NULL.
7353
7354         * command.c: (static variable tab[]) Add MATRIX DATA.
7355
7356         * data-in.c: Add debugging defines.  Formatting fixes.
7357
7358         * expr-opt.c: Formatting fixes.
7359
7360         * lexer.c: (syntax_error) Message fixes.
7361
7362         * matrix-data.c: New enum series.
7363         (static vars fmt, section, diag, explicit_rowtype, signle_split,
7364         split_values, n_factors, factors, cells, pop_n, contents,
7365         n_contents) New vars.
7366         (cmd_matrix_data) Finished implementation.
7367         (compare_variables_by_mxd_vartype) New function.
7368         [DEBUGGING] (debug_print) New function.
7369         (static vars mtoken, mtokstr, mtoklen, mtokval) New vars.
7370         (read_matrices) New function.
7371         (read_matrices_without_rowtype) New function.
7372         (read_matrices_with_rowtype) New function.
7373         (read_splits) New function.
7374         (mget_token) New function.
7375         (force_eol) New function.
7376         [0] (test_tokenizer) New function.
7377         (matrix_data_source_destroy_source) New function.
7378         (glob var matrix_data_source) New var.
7379
7380         * misc.h: Include ieeefp.h if present.
7381
7382         * split-file.h: (cmd_split_file) Changes corresponding to struct
7383         dictionary changes.
7384
7385         * str.h: Fix memmem prototype.
7386
7387         * temporary.c: (save_dictionary, restore_dictionary,
7388         free_dictionary) Changes corresponding to struct dictionary
7389         changes.
7390
7391         * var.h: (MXD_* enums) New enum series.
7392         (struct matrix_data_proc) New struct.
7393         (struct split) Removed.
7394         (struct dictionary) Changed `splits' member from `split *' to
7395         `variable **'.
7396         (macro force_create_variable) New macro.  Replaced lots of
7397         create_variable()/assert() calls with calls to this macro.
7398
7399         * vars-atr.c: (discard_variables) Changed assertion.
7400         [GLOBAL_DEBUGGING] (force_create_variable) New function
7401         called by the macro of the same name.
7402         (clear_variable) Changes to delete splits from the dictionary
7403         corresponding to struct dictionary changes.
7404
7405         * vars-prs.c: (parse_variables) [GLOBAL_DEBUGGING] Check for
7406         corrupted variable `index' values in the dictionary passed in
7407         every time this function is called.
7408
7409         * vfm.c: (dump_splits, SPLIT_FILE_procfunc) Changes corresponding
7410         to struct dictionary changes.
7411
7412 Tue Jan 13 23:45:02 1998  Ben Pfaff  <blp@gnu.org>
7413
7414         * Makefile.am: (pspp_SOURCES) Add matrix-data.c.
7415
7416         * command.c: New includes.
7417         (static array cmd_table[]) Add ERASE, HOST, NEW FILE.
7418         (cmd_erase) New function.
7419         [unix] (shell) New function.
7420         (run_command) New function.
7421         (cmd_host) New function.
7422         (cmd_new_file) New function.
7423
7424         * expr-prs.c: (parse_primary) Message fix.
7425
7426         * inpt-pgm.c: Formatting fix.
7427         (cmd_reread) Implement the FILE subcommand.
7428
7429         * matrix-data.c: New file.
7430
7431         * q2c.c: (dump_header) Change output commenting style.
7432
7433         * weight.c: Comment fix.
7434
7435 Tue Jan 13 00:53:39 1998  Ben Pfaff  <blp@gnu.org>
7436
7437         * aggregate.c: (buf64_10x) Renamed buf64_1xx, all references
7438         changed.
7439         (buf_10x) Renamed buf_1xx, all references changed.
7440         (cmd_aggregate) Implemented cases 010, 011, 110, and 111 (all
7441         cases now implemented).
7442         (create_sysfile) New function.
7443         (agr_11x_func) New function.
7444
7445         * data-in.c: (parse_numeric) Work properly if there's an
7446         explicitly coded decimal point in the data and decimal places are
7447         specified on DATA LIST.  Bug reported by Dr Eberhard W Lisse
7448         <el@linux.lisse.na>.
7449
7450         * get.c: (cmd_get, cmd_save_internal) Allow extraneous slash
7451         before file specification on GET, SAVE, XSAVE.  Bug reported by Dr
7452         Eberhard W Lisse <el@linux.lisse.na>.
7453
7454         * q2c.c: [!HAVE_STRERROR] Include misc/strerror.c, not
7455         strerror.c.  Bug reported by Alexandre Oliva
7456         <oliva@dcc.unicamp.br>.
7457
7458         * sort.c: Include sort.h.  Comment fixes.  A few esthetic fixes.
7459         (static var separate_case_tab) New var.
7460         (cmd_sort_cases) Cancel temporary transformations here.  Free
7461         v_sort before return.
7462         (sort_cases) Run an EXECUTE procedure if SEPARATE is nonzero and
7463         we're reading from a sort stream.  Don't cancel temporary
7464         transformations.  Offload internal sorting to do_internal_sort().
7465         (do_internal_sort) New function.  Handles internal sorting even
7466         when SEPARATE is nonzero.  Doesn't free v_sort.
7467         (do_external_sort) Take new arg SEPARATE.  Only destroy `x' if
7468         it's non-NULL.
7469         (write_initial_runs) Take new arg SEPARATE.  Only destroy the old
7470         sink if SEPARATE is zero.
7471         (read_output_cases) Renamed read_sort_output(), all references
7472         changed.  Now uses separate_case_tab when it exists.
7473         (write_separate) New function.
7474
7475         * vfm.c: (page_to_disk) Destroy memory_source_cases, not
7476         memory_sink_cases.  Don't redundantly call
7477         vfm_source->destroy_source().
7478         (memory_stream_mode) After switching over, set memory_sink_cases
7479         to NULL.
7480
7481 Sat Jan 10 23:35:51 1998  Ben Pfaff  <blp@gnu.org>
7482
7483         * aggregate.c: (struct agr_var) Expand dbl[] array from 2 to 3
7484         elements.
7485         (static var prev_case) New, moved out of aggregate_single_case()
7486         local scope.
7487         (static var buf64_10x, buf_10x) New.
7488         (cmd_aggregate) Initialize prev_case.  Comment fixes.  Implement
7489         the 000, 001, 100, and 101 cases.  Free prev_case.
7490         (parse_aggregate_functions) Disallow scratch variables.
7491         (free_aggregate_functions) Only free agr_dict if non-null.  Use
7492         iter->function to determine numeric/string type, not
7493         iter->src->type.
7494         (aggregate_single_case) Don't manage prev_case.  Initialize
7495         aggregate info after dumping it.
7496         (accumulate_aggregate_info) Fix sum, weighted sum, mean, weighted
7497         mean, stddev, weighted stddev definitions.
7498         (dump_aggregate_info) Implemented.
7499         (initialize_aggregate_info) Renamed from
7500         initialize_aggregate_functions().  Initializes dbl[2].
7501         (agr_00x_trns_proc, agr_00x_end_func, write_case_to_sfm,
7502         agr_10x_trns_proc, agr_10x_trns_free, agr_10x_end_func) New.
7503
7504         * cases.c: (alloc_val) Removed.
7505
7506         * get.c: (cmd_save_internal) Initialize new `dict' member.
7507
7508         * sfm-write.c: (sfm_write_dictionary, write_header,
7509         write_variable, write_value_labels, write_documents) Reorganize,
7510         simplify for new parameter structure.
7511         (write_variable) Only one variable * argument now.
7512
7513         * sfm.h: (struct sfm_write_info) Removed `pri', `sec', and
7514         replaced by new `dict' member.
7515
7516         * temporary.c: (new_dictionary) Initialize n_documents.
7517
7518         * vars-atr.c: (dup_variable) Allocate `value's from dict into
7519         v->fv manually.
7520         (init_variable, replace_variable) Eliminate usage of alloc_val().
7521
7522         * vars-prs.c: (parse_DATA_LIST_vars) Accept PV_NO_SCRATCH option.
7523
7524         * vfm.c: (arrange_compaction) Allow `temporary' value of 2 to
7525         signal that AGGREGATE is to be used for forming final cases.
7526         (close_active_file) Call end_func before stopping lagging.  Cancel
7527         temporary after finishing compaction.
7528         (write_case) Comment fixes.  Cleaned up.
7529         (compact_case) Let AGGREGATE handle compaction when `temporary' is
7530         2.
7531
7532 Sat Jan 10 02:10:47 1998  Ben Pfaff  <blp@gnu.org>
7533
7534         * Makefile.am: (BUILT_SOURCES) Add means.c.
7535         (pspp_SOURCES) Add means.c.
7536         (EXTRA_DIST) Add means.q.
7537
7538         * command.c: (array cmd_table[]) Add MEANS.
7539
7540         * common.h: Esthetic fixes.  Comment fixes.  Test for
7541         MAX_SHORT_STRING greater than 8.
7542         (macros LOWEST, HIGHEST) New.
7543
7544         * data-in.c, data-list.c, recode.c: Comment fixes.
7545
7546         * means.q: New file, base version.
7547
7548         * mis-val.c: (parse_num_or_range, parse_numeric) Replace -DBL_MAX
7549         with LOWEST, DBL_MAX with HIGHEST.
7550
7551         * q2c.c: (dump_vars) Add an enum to array types giving the number
7552         of values for the enum.
7553
7554         * sfm-read.c: (sfm_read_dictionary, read_machine_flt64_info)
7555         Replace second_lowest_value with second_lowest_flt64.
7556
7557         * sfm-write.c: (write_variable, write_rec_7_34) Replace
7558         second_lowest_value with second_lowest_flt64.
7559
7560         * t-test.q: Comment fix.
7561
7562         * temporary.c: (restore_dictionary) Esthetic fix.
7563
7564         * tokens.h: (force_match_id, force_match, force_string, force_int,
7565         force_num, force_id) Replace msg() with syntax_error().
7566
7567         * var.h: (struct means_proc) New.
7568         (struct variable) Add mns member to `p' union.
7569
7570         * vars-prs.c: (parse_variable, parse_dict_variable,
7571         parse_variables, parse_DATA_LIST_vars) Replace msg() with
7572         syntax_error().
7573
7574 Thu Jan  8 22:28:41 1998  Ben Pfaff  <blp@gnu.org>
7575
7576         * Makefile.am: (pspp_SOURCES) Add tab.h.
7577
7578         * Most source files: Added a cast to unsigned char in usages of
7579         the ctype is*() functions.  Replaced `end of command expected'
7580         calls to msg() with calls to syntax_error().
7581
7582         * frequencies.q: (dump_condensed) Fix tab_dim() column reference.
7583
7584         * lexer.c: (hex_val) Removed (was dead code).
7585         (idmatch) Parenthesize function name to avoid macro expansion.
7586
7587         * postscript.c: Comment fixes.
7588         (ps_preopen_driver) Change default font size to 10pt.
7589
7590         * sfm-read.c: (read_variables) Byteswap sv.print, sv.write as
7591         int32s.
7592         (parse_format_spec) Change system-file format spec argument type
7593         to int32.  Parse the format spec with bitwise operators.
7594
7595         * sfmP.h: (struct sysfile_format) Removed.
7596         (struct sysfile_variable) Changed print, write members from
7597         sysfile_format to int32.
7598
7599         * tokens.h: Esthetic fixes.
7600         [__GNUC__] (macro id_match) New macro to hopefully speed up
7601         identifier matching.
7602         (macros match_id, match_tok, match_int) Implemented in
7603         compiler-independent manner; no longer GNU C only.
7604
7605         * vfm.h: Include time.h.
7606
7607 Mon Jan  5 11:06:15 1998  Ben Pfaff  <blp@gnu.org>
7608
7609         * data-list.c: (dump_fixed_table) Change tab_dim().
7610
7611         * dump-sysfile.c: (open_sysfile) Fix mmap() call.
7612
7613         * error.c: Include command.h.
7614
7615         * frequencies.g: Formatting fixes.
7616
7617         * frequencies.q: Add tab_dim() calls.  Make the total cell a
7618         joined cell.
7619
7620         * glob.c: Include command.h.
7621
7622         * sfm-read.c: (struct sfm_fhuser_ext) New members sysmis, highest,
7623         lowest.
7624         (sfm_read_dictionary) Initialize sysmis, highest, lowest.
7625         (sfm_read_machine_flt64_info) Update sysmis, highest, lowest.
7626         (read_variables) Byteswap sv.type; byteswap sv.print, sv.write as
7627         the other elements (is this right?).
7628         (read_variables) Use lowest, highest members.
7629         (parse_format_spec) New arg `vv' for more stringent checking.
7630         (dump_dictionary) Byteswaps nonexplicit data.
7631         (sfm_read_case) Byteswap numeric data.
7632
7633         * som.c: Initialize table_num to 1.
7634         (render_segments) Remember to increment y_index after each table
7635         segment.
7636
7637         * sysfile-info.c: (cmd_sysfile_info) Change tab_dim().  Don't call
7638         avl_count() on a NULL tree.  No title for the second table.
7639         (cmd_display) Handle DISPLAY VECTORS by calling display_vectors().
7640         Handle AS_SCRATCH as AS_NAMES.  Warn if no variables.  Re-enable;
7641         fix call to display_variables().
7642         (display_variables) Default to 4 columns, not 3.  Set up headers.
7643         Column title is Variable, not Name.  Fix index column.
7644         Add joint text.  Add tab_dim().  Handle value labels properly.
7645         Handle DISPLAY LABELS properly.  Draw boxes correctly.
7646         (describe_variable) Value labels don't need titles.  Don't clear
7647         nonexistent index column.
7648         (compare_vectors_by_name) New function.
7649         (display_vectors) New function.
7650
7651         * tab.c: (tab_height) Add assertion.
7652         (tab_null) Add debug code.
7653         (evaluate_dimensions) Add debug code.
7654
7655         * var.h: (struct variable) get_proc data is sometimes used
7656         simultaneously with other per-procedure info, therefore it was
7657         removed from the union.  All references changed.        
7658
7659 Sun Jan  4 18:13:33 1998  Ben Pfaff  <blp@gnu.org>
7660
7661         * ascii.c: (ascii_close_page) Put title on second line of headers
7662         if there is no subtitle.
7663
7664         * command.c: (glob var cur_proc) Move definition here, from
7665         common.c.
7666         (cmd_remark) Emit blank line before remarks.
7667
7668         * command.h: (glob var cur_proc) Move declaration here, from
7669         common.h.
7670
7671         * data-list.c: (dump_fixed_table) Fix messages.
7672         (dump_free_table) Call tab_nat_dim().
7673
7674         * descript.q: (dump_z_table) Modify tab_dim() call.
7675
7676         * frequencies.q: (dump_condensed, dump_statistics) Add tab_dim()
7677         call.
7678         (dump_statistics) Don't output header.
7679
7680         * groff-font.c: Minor format fix.
7681
7682         * html.c: Comment fix.
7683
7684         * list.q: (write_varname) Indent after advancing page.
7685
7686         * output.h: Minor reordering.
7687
7688         * postscript.c: Comment fixes.  Many places, '\n' was replaced by
7689         a reference to eol[].
7690         (struct ps_driver_ext) New member eol[].
7691         (ps_preopen_driver) Initialize eol[].
7692         (ps_postopen_driver) Fix sense of text for text_opt, line_opt
7693         defaults.  Handle headers.  Fix test for minimum page length.
7694         (static var option_tab[]) Add `line-ends'.
7695         (ps_option) Handle line-ends to change eol[].
7696         (postopen) Scale prop_em_width and fixed_width properly.  Set the
7697         prologue title to outp_title if applicable.  Replace the prologue
7698         line ends with eol[].  Call draw_headers() if headers are enabled.
7699         (text_width) New function.
7700         (out_text_plain) New function.
7701         (draw_headers) New function.
7702
7703         * print.c: (dump_table) Call tab_nat_dim().
7704
7705         * som.c: (som_blank_line) Only advance a line if not at the top of
7706         a page.
7707         (som_submit) Move several informational table calls here.
7708         Increment subtable_num if SOMF_NO_TITLE not set.
7709         (output_table) Advance a line if SOMF_NO_SPACING not set.
7710         (render_columns, render_segments, render_simple) Handle spacing
7711         between tables.  Handle table titles.  Remove debug output.
7712
7713         * som.h: (SOMF_*) New enum series.
7714         (struct som_table_class) New member `flags'.
7715
7716         * sysfile-info.c: (cmd_sysfile_info) Calls tab_nat_dim().  No
7717         headers or spacing.
7718         (display_variables) Calls tab_nat_dim().
7719         (describe_variable) Remove restriction on number of value labels.
7720         Make value labels separated by thin lines.
7721
7722         * tab.c: (tab_create) Default `flags' to none.
7723         (tab_float) New arg `w'.  All references changed.
7724         (tab_nat_dim) New function.
7725         (tab_output_text) No title or spacing.
7726         (tab_flags) New function.
7727         (tabi_flags) New function.
7728         (tabi_title) New function.
7729         (strip_height) Removed.
7730         (tabi_render) Skip title when necessary.
7731         (static var tab_tab_class) Add tabi_flags, tabi_title.
7732         (evaluate_dimensions) Disable display of column, row size.
7733         (sum_columns) Add title height to top header.
7734         (render_strip) Moved within file.
7735
7736         * tab.h: (struct tab_table) New member `flags'.
7737
7738         * vfm.c: (dump_splits) Calls tab_nat_dim().  No title.
7739
7740 Sat Jan  3 16:55:44 1998  Ben Pfaff  <blp@gnu.org>
7741
7742         * Most source files: Add `const' attribute in all appropriate
7743         places.
7744         
7745         * sysfile-info.c: (cmd_sysfile_info) Add tab_dim() call, add a
7746         column to the variables table for use by describe_variable().
7747         (cmd_display) Disable for the present.
7748         (display_documents) Don't wrap documents.
7749         (display_variables) Table has four columns now.
7750         (describe_variable) Table has four columns now.  Don't use a
7751         subtable, use joined cells instead.
7752
7753         * tab.c: (tab_create) Don't set `join'.
7754         (tab_realloc) ct array is not made up of a_string's.
7755         Reallocate trh, hrh, h arrays, initialize trh array.  Initialize
7756         cell contents on GLOBAL_DEBUGGING, not DEBUGGING.
7757         (text_format) New function.
7758         (tab_title) Rewritten, uses text_format().
7759         (tab_text) Rewritten, uses text_format().
7760         (tab_joint_text) New function.
7761         (tab_join) Removed.
7762         (static var hit) New variable.
7763         (render_strip) New args r1, r2.  Implement joined cells that fit
7764         on a single page.
7765         (tabi_render) Increment hit.  Pass new args to render_strip().
7766         (evaluate_dimensions) [GLOBAL_DEBUGGING] Check for uninitialized
7767         cells.  For t_naw and t_nah, ignore joined cells and null cells in
7768         calculations.
7769         
7770         * tab.h: (struct tab_join_rect) Removed.
7771         (struct tab_table) Removed `join'.
7772         (TAB_JOIN_MAIN) Removed.
7773         (struct tab_joined_cell) New struct.
7774         (TAT_NOWRAP) New enum.
7775
7776 Fri Jan  2 01:39:58 1998  Ben Pfaff  <blp@gnu.org>
7777
7778         * ascii.c: (ascii_postopen) Replace ASCII_* macros with their
7779         expansions.
7780         (ascii_postopen_driver) Fix initialization of *_spacing so that
7781         the TAL_0 bit doesn't count.
7782
7783         * data-list.c: (dump_fixed_table) Use natural width for Format
7784         column.
7785
7786         * glob.c: (rerange) Removed.
7787         (get_date) Formatting fixes.  Internationalization fix.
7788
7789         * html.c: (html_postopen_driver) Replace HTML_DEFAULT_OUTPUT_FILE
7790         with "pspp.html".
7791
7792         * postscript.c: (ps_postopen_driver) Replace
7793         PS_DEFAULT_OUTPUT_FILE with "pspp.ps".
7794
7795         * som.c: (som_submit) Don't eject page before every table.
7796         (output_table) Fix order of arguments on call to area().
7797         (render_columns) Fix calculation of max_len.
7798         
7799         * tab.c: (tabi_cumulate) Minor change to increase elegance.
7800         (render_strip) New function.
7801         (strip_height) New function.
7802         (tabi_render) Rewrite as calls to render_strip().
7803
7804         * tab.h: (TAT_* enums) Removed TAT_RICH, all references removed.
7805         Renumbered TAT_PRINTF, TAT_TITLE, TAT_FIX to correspond better
7806         with the TAB_* and OUTP_T_* constants.
7807         
7808 Thu Jan  1 11:53:52 1998  Ben Pfaff  <blp@gnu.org>
7809
7810         * Makefile.am: Formatting fixes.
7811
7812         * ascii.c: (ascii_postopen_driver) Initialize *_line_spacing[],
7813         *_line_width[].
7814
7815         * data-list.c: (dump_fixed_table) Add tab_dim() call.
7816
7817         * descript.q: (dump_z_table, display) Add tab_dim() calls.
7818
7819         * dump-sysfile.c: (glob var length) Make type off_t.
7820         (usage) Fix arguments.
7821         (main) Return 0.
7822
7823         * output.h: (OUTP_T_*) Change constants' value to match tab.h.
7824         Now right-justification is the default so many references had to
7825         change.
7826         (struct outp_class) Removed line_width, all references changed.
7827         (OUTP_DEV_*) Add OUTP_DEV_DISABLED.
7828         (struct outp_driver) Add elements horiz_line_width,
7829         vert_line_width, horiz_line_spacing, vert_line_spacing.  Remove
7830         som element.
7831
7832         * postscript.c: (outp_encodings) Formatting fixes.  Fix garbage
7833         collection.
7834         (postopen) Initialize all the informational members of
7835         outp_driver.
7836
7837         * som.c: (som_blank_line) New function, renamed from blank_line(),
7838         all references changed.
7839         (som_submit) Disables drivers whose pages can't be opened.
7840         (render_columns, render_simple, render_segments) Add debug output.
7841         (render_columns) Fix loop range.
7842         (render_simple) Don't try to render the headers, they're taken
7843         care of automatically.  Advance cp_y past the table when done.
7844         (render_segments) Fix loop ranges.
7845
7846         * tab.c: Initialize new members of tab_table.
7847         (tab_vline) Handle trv[]; don't set style for spacing-only lines.
7848         (tab_hline) Handle trh[]; don't set style for spacing-only lines.
7849         (tab_box) Handle trh[], trv[]; don't set style for spacing-only
7850         lines.
7851         (set_expr) Removed.
7852         (tab_dim) New function.
7853         (tab_col_width) Removed.
7854         (tab_row_height) Removed.
7855         (tab_output_text) Call tab_dim().
7856         (tabi_driver) Call evaluate_dimensions(), sum_columns().
7857         (tabi_area) Implemented.
7858         (tabi_cumulate) Implemented.
7859         (tabi_render) Partially implemented, but broken.
7860         (var tab_table_class) Made static.
7861         (evaluate_dimensions) New function.
7862         (sum_columns) New function.
7863
7864         * tab.h: (enum t_*) Now start at t_end.  New: t_ptw, t_nr, t_nc,
7865         t_nah, t_naw, t_neg, t_xch, t_dup, t_lbl, t_jnz, t_sac, t_sar,
7866         t_scr, t_srr, t_sentinel.  Removed: t_nat.
7867         (struct tab_table) New: wl, wr, ht, hb, trh, hrh, trv, wrv, dim,
7868         max_stack_height, w, h.  Removed: ce, re.
7869         (macro blank_line) Removed.
7870         (glob var zero_length) Removed.
7871
7872 Fri Dec 26 15:44:31 1997  Ben Pfaff  <blp@gnu.org>
7873
7874         * Most source files: include some of the new include files broken
7875         out of var.h.
7876         
7877         * Makefile.am: (pspp_SOURCES) Add all the new source files to the
7878         list.
7879
7880         * aggregate.c: (glob var outfile) Make static.
7881
7882         * command.c: (glob var pgm_state) Move here.
7883
7884         * common.c: (glob vars endian, second_lowest_value, pgmname,
7885         finished, curdate, cur_proc, start_interactive, history_file) Move
7886         here.
7887
7888         * descript.q: (structs dsc_z_score, descriptives_trns) Move here.
7889
7890         * file-handle.q: (glob vars files, inline_file) Move here.
7891
7892         * glob.c: Lost lots of glob vars, detailed in individual file
7893         entries.
7894         (init_glob) set_printer, set_screen were obsolete, deleted.
7895         set_cprompt has fewer spaces because pspp has fewer letters than
7896         fiasco.
7897
7898         * inpt-pgm.c: (glob vars inp_init, inp_init_size) Move here.
7899         (inp_nval) Made static.
7900
7901         * lexer.c: (glob vars token, tokval, tokstr, tokstr_size,
7902         tokstr_len, toklongstr, tokint) Move here.
7903
7904         * misc.c: Lost several vars and functions.
7905
7906         * set.q: (all the set_* variables) Move here.
7907
7908         * str.c: (strmaxcpy, strbarepadcpy, strbarepadlencpy, strpadcpy,
7909         blpstrset, strpadcmp, memrev, memrmem, cmp_str) Move here from
7910         misc.c.
7911
7912         * tab.c: (set_expr, tab_col_width, tab_row_height) New functions.
7913
7914         * tab.h: (enum series t_*) New enums.
7915         (struct tab_table) Use arena struct tag.  New members ce, re.
7916
7917         * tokens.h: Comment fixes.
7918
7919         * var.h: Move lots of enums and variables and functions and
7920         structures to other files.  Use and declare a lot more union and
7921         struct tags.  Comment fixes.  
7922
7923         * vector.c: (glob vars vec, nvec) Move here.
7924
7925         * vfm.c: (glob vars reinit_sysmis, reinit_blanks, init_zero,
7926         init_blanks, last_vfm_invocation) Move here.
7927
7928         * cases.h: New file.
7929         (struct long_vec) Move here.
7930         (vec_init, vec_clear, vec_insert, vec_delete, devector, envector)
7931         Move here.
7932
7933         * command.h: New file.
7934         (STATE_* enums) Move here.
7935         (glob var pgm_state) Move here.
7936
7937         * format.c: New file.
7938         (glob var formats) Move here.
7939         (parse_format_specifier_name, fmt_to_string,
7940         check_input_specifier, check_output_specifier,
7941         check_string_specifier, convert_fmt_ItoO, parse_format_specifier)
7942         Move here.
7943
7944         * format.h: New file.  Move functions now in format.c here.
7945         (FMT_* enums) Move here.
7946         (struct fmt_desc) Move here.
7947         (FCAT_* enums) Move here.
7948         (struct fmt_spec) Move here.
7949         (glob vars formats, fmt_parse_ignore_error) Move here.
7950
7951         * inpt-pgm.h: New file.
7952         (INP_* enums) Move here, make #defines into enums.
7953         (glob vars inp_init, inp_init_size) Move here.
7954
7955         * sort.h: New file.
7956         (glob vars v_sort, nv_sort) Move here.
7957         (sort_cases, read_sort_output) Move here.
7958
7959         * vector.h: New file.
7960         (struct vector) Move here, add struct tag.
7961         (glob vars vec, nvec) Move here.
7962         (find_vector) Move here.
7963
7964         * New file.
7965         (glob vars last_vfm_invocation, temp_case, reinit_sysmis,
7966         reinit_blanks, init_zero, init_blanks) Move here.
7967         (struct case_stream) Move here.
7968         (glob vars vfm_source, vfm_sink, vfm_memory_stream,
7969         vfm_disk_stream, sort_stream, data_list_source,
7970         input_program_source, file_type_source, get_source, n_lag) Move
7971         here.
7972         (procedure, write_case, lagged_case, compact_case, page_to_disk)
7973         Move here.
7974                 
7975 Wed Dec 24 22:40:42 1997  Ben Pfaff  <blp@gnu.org>
7976
7977         * Makefile.am: (pspp_SOURCES) Added html.c, som.c, som.h.
7978         (LDADD) Add libdcdflib.
7979
7980         * ascii.c: Comment and formatting fixes.  Almost every external
7981         function had an assert added, checking driver_open and page_open.
7982         (ascii_init_driver) Broken into ascii_preopen_driver,
7983         ascii_postopen_driver, ascii_close_driver.  Manages driver_open.
7984         (ascii_open_page) Sets page_open.
7985         (ascii_close_page) Clears page_open.
7986
7987         * html.c: Comment and formatting fixes.  Almost every external
7988         function had an assert added, checking driver_open and page_open.
7989         (html_init_driver) Broken into html_preopen_driver,
7990         html_postopen_driver, html_close_driver.  Manages driver_open.
7991         (html_open_page) Sets page_open.
7992         (html_close_page) Clears page_open.
7993         (html_submit) Disabled.
7994
7995         * lexer.c: (parse_string) Remove debugging printf.
7996
7997         * list.q: (determine_layout) Open a page if one is not yet open.
7998
7999         * output.c: Comment fixes.
8000         (add_class) Set the class member of the new list element.
8001         (parse_options) Don't handle device type.
8002         (colon_tokenize) New function.
8003         (configure_driver) New four-field format with a field for device
8004         type.  Now initialize driver_open, page_open, next, and prev
8005         fields.  Use new colon_tokenize() function.  Don't do a memory
8006         copy to replace a driver, it doesn't work; instead delete the old
8007         driver and insert a new one.
8008         (destroy_driver) Don't call som_destroy_driver().  Close the page
8009         if it's open.  Find the class in the list of classes and decrement
8010         that reference count.  Remove the driver from the global driver
8011         list.
8012         (outp_iterate_enabled_drivers) Renamed outp_drivers().  All
8013         references changed.  Rewritten.  Don't return a driver that's not
8014         enabled.
8015         (outp_eject_page) All references to som_internal_eject_page()
8016         changed to use this.  Sets cp_x to 0 as well as cp_y.
8017
8018         * output.h: (OUTP_I_* enums) Removed.
8019         (struct som_submission_form) Removed.
8020         (struct outp_class) init_driver broken into preopen_driver,
8021         postopen_driver, and close_driver.  submit changed to take a
8022         som_table argument.
8023
8024         * postscript.c: Comment and formatting fixes.  Almost every
8025         external function had an assert added, checking driver_open and
8026         page_open.
8027         (ps_init_driver) Broken into ps_preopen_driver,
8028         ps_postopen_driver, ps_close_driver.  Manages driver_open.
8029         (ps_open_page) Sets page_open.
8030         (ps_close_page) Clears page_open.
8031
8032         * som.c: New file, base implementation.
8033         
8034         * som.h: (struct som_table) Add struct tag.
8035         (enum SOM_COL_ACROSS) Removed.
8036         (SOM_ROWS, SOM_COLUMNS) New enums.
8037         (struct som_table_class) Add member `cumulate'.  Remove `segment';
8038         change `render' arguments.
8039         (struct som_point, struct som_rect) Removed.
8040         (som_submit_table) Fixed typo, should have been som_submit.
8041
8042         * sysfile-info: (describe_variable) Don't try to insert a
8043         subtable; just destroy it for now.
8044
8045         * t-test.q: Include dcdflib/cdflib.h instead of cdflib.h.  Fix
8046         references to value labels.
8047
8048         * tab.c: (tab_destroy) New function.
8049         (tab_columns) Change argument.
8050         [0] (tab_submit) Remove dead code.
8051         (tab_title) Allocate string from the table's arena.
8052         (tab_output_text) Only free the buffer if we allocated it.
8053         (tab_submit) New function.
8054         (static vars t, d) New static vars.
8055         (tabi_table, tabi_driver, tabi_count, tabi_area, tabi_columns,
8056         tabi_headers, tabi_cumulate, tabi_render) New functions.
8057         (glob var tab_table_class) New global var.
8058
8059         * tab.h: (struct tab_join_rect) Don't use a som_rect; directly
8060         encapsulate the rectangle.  All references changed.
8061         
8062 Sun Dec 21 16:18:58 1997  Ben Pfaff  <blp@gnu.org>
8063
8064         * All header files updated to use struct tags in addition to
8065         typedefs for all structures.  Don't use word `struct' in struct
8066         tags.
8067         
8068         * Makefile.am: (pspp_SOURCES) Remove html.c.
8069         (INCLUDES) Replace the lib/* includes with a single lib/ include;
8070         all references updated.
8071
8072         * command.c: (parse_cmd) Remove call to som_check_workspace.
8073         (output_line) Update to new som.
8074
8075         * data-in.c: (parse_numeric) A single dot is not an error; it is
8076         the system-missing value.
8077
8078         * data-list.c: (dump_fixed_table, dump_free_table) Update to new
8079         som.
8080
8081         * data-out.c: Added `const' as appropriate to many prototypes.
8082         (convert_E, convert_F, convert_CCx) Take double argument instead
8083         of value * argument.
8084         (convert_format_to_string) Call changed functions appropriately.
8085         Instead of modifying the caller's value for FCAT_SHIFT_DECIMAL,
8086         make a local copy of the value.
8087
8088         * descript.q: Remove custom_variables() prototype now provided by
8089         q2c.  
8090         (custom_variables) Don't increment sbc_variables, the caller does
8091         this.
8092         (dump_z_table, display) Update to new som.
8093
8094         * error.c: (vmsg) Add const to prototype.  Remove code to handle
8095         `too many errors' condition.
8096         (check_error_count) New function.
8097         (msg) Add const to prototype.
8098
8099         * filename.c: (open_file) Rewrite for elegance.
8100
8101         * frequencies.q: Remove custom_*() prototypes now provided by q2c.
8102         (dump_full, dump_condensed, dump_statistics) Update for new som.
8103
8104         * list.q: Don't include somP.h.  Change all references to
8105         som_driver_ext to refer to the new members of som_driver.  Change
8106         som_internal_eject_page() references to outp_eject_page().
8107
8108         * main.c: (parse) Rewrite for elegance.  Add call to
8109         check_error_count().
8110
8111         * output.c: (add_class, outp_list_classes, outp_configure_driver)
8112         Rewrite or revise for new outp_driver_class_list structure.
8113         (outp_iterate_enabled_drivers) Fix comparison between disabled
8114         devices and current device type.
8115         (outp_eject_page) New function.
8116
8117         * output.h: Comment fixes.
8118         (struct outp_driver) New members driver_open, page_open, cp_x,
8119         cp_y, font_height, prop_em_width, fixed_width.  Deleted members
8120         ref_count, next.
8121         (struct outp_driver_class_list) New struct.
8122         (outp_class_list) Changed to type outp_driver_class_list; all
8123         references updated.
8124
8125         * print.c: (dump_table, print_trns_proc) Updated for new som.
8126
8127         * q2c.c: (dump_vars) Simplify array subcommand code.  Declare
8128         prototypes for custom subcommands.
8129         (dump_subcommand) Always include the `else'.
8130         (dump_parser) Fix comments in output code.
8131
8132         * set.q: Reordered functions.
8133
8134         * som-frnt.c, som-high.c, som-low.c, somP.h: Removed.
8135         
8136         * som.h: Rewritten from scratch.
8137
8138         * str.h: Remove dead code.
8139
8140         * tab.c, tab.h: New files, base implementation.
8141
8142         * sysfile-info.c: (cmd_sysfile_info, describe_variable) Update to
8143         new som.
8144
8145         * t-test.q: New code from John Williams
8146         <johnr.williams@stonebow.otago.ac.nz>.  Include math.h, cdflib.h.
8147         Many many new static vars and defines.
8148         (precalc, postcalc, g_postcalc, z_postcalc, t_pairs, t_groups,
8149         groups_calc, pairs_calc, z_dev_calc, z_calc) New functions.
8150         (struct value_list) New struct.
8151         (variance, covariance, pooled_variance, oneway, pearson_r, f_sig,
8152         t_crt, t_sig, print_t_groups) New functions.
8153         (cmd_t_test) Implemented.
8154
8155         * temporary.c: (cancel_temporary) Only free the temp_dict if it's
8156         non-NULL.
8157
8158         * vfm.c: (dump_splits) Update to new som.
8159
8160 Thu Dec  4 23:02:22 1997  Ben Pfaff  <blp@gnu.org>
8161
8162         * Makefile.am: (fiasco_SOURCES) Add html.c.
8163
8164         * aggregate.c: Base source.
8165
8166         * ascii.c: (postopen, preclose) Reformat.
8167
8168         * data-out.c, expr-evl.c: Comment fixes.
8169         
8170         * filename.c: (open_file) When opening a file for writing, use
8171         line buffering instead of full buffering for better interactive
8172         performance.  Suggested by Valerio Aimale
8173         <valerio@svpop.com.dist.unige.it>.  Also, recognize special file
8174         names `stdin', `stdout', `stderr'.
8175
8176         * groff-font.c: Comment fixes.
8177
8178         * html.c: New file; base version.
8179
8180         * list.q: (write_all_headers, clean_up, determine_layout,
8181         list_cases) Ignore `special' devices for now.  Needs to be fixed
8182         later.
8183
8184         * output.c: (outp_init) Add html driver to list; reverse list
8185         order.
8186
8187         * output.h: (struct outp_class_struct) New members `special',
8188         `submit'; comment fixes.  All references changed.
8189
8190         * postscript.c: (ps_init_driver) Make defaults for text_opt,
8191         line_opt depend on whether the OUTP_DEV_SCREEN bit is set on the
8192         device.
8193         (postopen) Comment fix.
8194         (preclose) Comment fixes, formatting fixes.  Change x->file.file
8195         references to more proper f->file.
8196
8197         * som-high.c: (som_submit_table) Special classes use their own
8198         renderers.
8199
8200         * som.h: Comment fixes.
8201
8202         * temporary.c: (new_dictionary) Don't try to xstrdup() a NULL
8203         string.
8204         
8205 Tue Dec  2 14:36:07 1997  Ben Pfaff  <blp@gnu.org>
8206
8207         * Makefile.am: (fiasco_SOURCES) Add aggregate.c back in.
8208
8209         * aggregate.c: Still working on this.
8210
8211         * command.c: (cmd_table[]) Add AGGREGATE back in.
8212         (split_words) Make '-' a legal word separator as well as ' '.
8213
8214         * main.c: Comment fixes.
8215
8216         * q2c.c: (dump_parser) Don't require the procedure's full name to
8217         be present, in the generated source.
8218
8219         * t-test.q: Change name to `t-test' from `t test'.  Let PAIRS be
8220         multiply specified and let it be default; let MISSING, CRITERIA,
8221         FORMAT be multiply specified.
8222         (cmd_t_test) Parse command name.  [DEBUGGING] Call debug_print().
8223         (custom_groups) Fix defaults.
8224         (custom_pairs) Check whether this is a PAIRS subcommand before
8225         attempting to parse.  Better garbage collection.  Proper storage
8226         allocation.
8227         [DEBUGGING] (debug_print) New function.
8228
8229         * temporary.c: Comment fixes.
8230         (copy_variable) Don't copy variable name and index.
8231         (save_dictionary) Copy variable name and index by hand.
8232
8233         * vars-atr.c: Comment fixes.
8234         (create_variable) New dictionary argument.  All references
8235         changed.
8236         (common_init_stuff) New dictionary argument.  All references
8237         changed.
8238         (init_variable) New dictionary argument.  All references changed.
8239         (dup_variable) New function.
8240
8241         * vars-prs.c: (parse_variables) If there are any errors, we always
8242         return 0.  Previously, it was possible for some types of errors to
8243         be ignored.
8244         
8245 Sat Nov 22 01:20:59 1997  Ben Pfaff  <blp@gnu.org>
8246
8247         * Makefile.am: (fiasco_SOURCES) For 0.1.5 release, remove
8248         aggregate.c.
8249
8250         * command.c: (cmd_table[]) Comment out AGGREGATE; add T TEST.
8251
8252         * list.q, t-test.q: Remove ALL option from VARLIST declaration in
8253         grammar rules.
8254
8255         * q2c.c: Comment fixes.
8256         (SBC_* enums) Remove SBC_VARLIST_ALL; all references removed.
8257         
8258         * t-test.q: (cmd_list) Rename cmd_t_test.
8259
8260         * temporary.c: (new_dictionary) Don't declare as static.
8261         
8262 Fri Nov 21 00:03:06 1997  Ben Pfaff  <blp@gnu.org>
8263
8264         * aggregate.c: Changes, still not finished.
8265
8266         * file-handle.q, frequencies.q, list.q, set.q: Comment fixes.
8267
8268         * q2c.c: Comment fixes.  Now its output is internationalized.
8269         (get_token) Fix parsing of escapes within literal strings.
8270         (main) Fix bad #line directives in output.
8271
8272         * t-test.q: Base implementation.
8273
8274         * temporary.c: (new_dictionary) New function.
8275         (restore_dictionary) [__CHECKER__] Change fill character to *
8276         (from @).
8277         
8278 Sun Nov 16 01:29:57 1997  Ben Pfaff  <blp@gnu.org>
8279
8280         * Makefile.am: (BUILT_SOURCES, fiasco_SOURCES) Add t-test.c
8281
8282         * aggregate.c: Changes, still not finished.
8283
8284         * descript.q, list.q: Comment fixes.
8285
8286         * q2c.c: Almost completely rewritten.
8287
8288         * t-test.q: New file, not complete.
8289
8290 Fri Nov 14 00:14:48 1997  Ben Pfaff  <blp@gnu.org>
8291
8292         * aggregate.c: Changes, still not finished.
8293
8294         * sort.c: (sort_cases) Call cancel_temporary() instead of doing it
8295         by hand.
8296
8297         * temporary.c: (cancel_temporary) New function.
8298
8299         * vars-atr.c: (discard_variables) Call cancel_temporary() instead
8300         of doing it by hand.
8301
8302         * vfm.c: (close_active_file) After restoring a TEMPORARY
8303         dictionary, set temp_dict to NULL.  Cancel TEMPORARY through
8304         cancel_temporary().
8305         (SPLIT_FILE_procfunc) Comment fix.
8306
8307 Tue Oct 28 16:08:45 1997  Ben Pfaff  <blp@gnu.org>
8308
8309         * Makefile.am: (fiasco_SOURCES) Add aggregate.c.
8310
8311         * aggregate.c: New file, not finished yet.
8312
8313         * command.c: (cmd_table) Add AGGREGATE.
8314
8315         * common.h: (pgm_state) Move declaration to var.h.
8316
8317         * lexer.c: (bin_value_func, oct_value_func, hex_value_func) i18n
8318         fixes.
8319         (parse_string) Message fix.
8320
8321         * recode.c: Comment fix.
8322
8323         * sfm-read.c: (read_variables) Code esthetic fixes.
8324         (write_header) Default date is `Jan', not `JAN'.
8325
8326         * sfmP.h: (bswap_int32) [!__linux__] Fix off-by-one errors.
8327
8328         * sort.c: (cmd_sort_cases) Farm the work out to new function
8329         parse_sort_variables().
8330         (parse_sort_variables) New function.
8331         (sort_cases) New function.  Cancels temporary transformations,
8332         which sorting didn't do previously.
8333         (cmd_sort_cases) Better garbage collection on error.  Uses
8334         do_external_sort().
8335         (write_initial_runs, merge_once) Improved code esthetics.
8336         (sort_stream_read) Reduced to one call to read_output_cases().
8337         (read_output_cases) New function.
8338
8339         * var-labs.c: (cmd_variable_labels) Re-enabled truncation of
8340         variable labels to 120 characters.
8341
8342         * var.h: Comment fixes.
8343         (glob var pgm_state) From common.h.
8344
8345         * vars-atr.c: (discard_variables) Set pgm_state to STATE_INIT.
8346
8347         * vars-prs.c: (parse_DATA_LIST_vars) Support PV_SINGLE in
8348         options.  Set *names to NULL on error.
8349
8350         * vfm.c: (memory_stream_init) Assert compaction_nval != 0.
8351
8352 Thu Oct  9 09:59:49 1997  Ben Pfaff  <blp@gnu.org>
8353
8354         * sfm-write.c, vfm.c: [HAVE_UNISTD] #include <unistd.h>, needed by
8355         SunOS4.  From Alexandre Oliva <oliva@dcc.unicamp.br>.
8356
8357 Wed Oct  8 18:55:24 1997  Ben Pfaff  <blp@gnu.org>
8358
8359         * vfm.c: (page_to_disk) Added missing local variables.
8360
8361 Tue Oct  7 20:23:17 1997  Ben Pfaff  <blp@gnu.org>
8362
8363         * get.c: Comment fix.
8364
8365         * sort.c: (cmd_sort_cases) Attempt to perform internal sort if the
8366         source is anything other than a disk stream, not just if it's in a
8367         memory stream.  Call page_to_disk() before external sort.
8368         (allocate_cases) Message fix.
8369
8370         * vfm.c: (prepare_for_writing) Warn user when paging workspace to
8371         disk.
8372         (page_to_disk) New function.
8373
8374 Sun Oct  5 15:56:14 1997  Ben Pfaff  <blp@gnu.org>
8375
8376         * Makefile.am: (INCLUDES) Include .. instead of $(top_srcdir).
8377
8378         * common.h: (macro strerror) Remove.  From Alexandre Oliva
8379         <oliva@dcc.unicamp.br>.
8380
8381         * get.c: (dict_delete_run) The number of variables to delete is
8382         not necessarily the number of variables that need to be shifted
8383         up.
8384         (trim_dictionary) Don't set *options to 0.  Fix bug that caused
8385         too many variables to be deleted.
8386
8387         * postscript.c: Comment fix.
8388
8389         * q2c.c: Include strerror.c.  From Alexandre Oliva
8390         <oliva@dcc.unicamp.br>.
8391
8392         * set.q: #undef ON and OFF.  From Alexandre Oliva
8393         <oliva@dcc.unicamp.br>.
8394
8395         * sfm-read.c: (sfm_read_dictionary) Don't set the file class too
8396         early, otherwise errors cause a bad free().
8397
8398         * str.h: (macro nvsprintf) s/FORMATS/FORMAT/ typo.  From Alexandre
8399         Oliva <oliva@dcc.unicamp.br>.
8400
8401         * temporary.c: (save_dictionary) Don't allocate memory if
8402         n_documents is 0.
8403
8404         * vfm.c: (memory_stream_write) Message fix.
8405
8406 Sat Oct  4 16:20:43 1997  Ben Pfaff  <blp@gnu.org>
8407
8408         * command.c: (static var cmd_table[]) Define REPEATING DATA
8409         command.
8410
8411         * common.h: Added support for broken systems that are missing
8412         EXIT_SUCCESS, EXIT_FAILURE, RAND_MAX, and/or strerror().
8413
8414         * Many source files: Replace syntax error messages via msg() with
8415         call to syntax_error().
8416
8417         * data-list.c: (dump_fixed_table) Add support for dumping table
8418         for REPEATING DATA as well as DATA LIST FIXED.
8419         (cmd_repeating_data) Allows and requires `/' between subcommands.
8420         Does proper thing with allowing rpd.starts_end to stay 0.  Allows
8421         CONTINUED specifications to be omitted.  Forces CONTINUED to be
8422         specified if ID is.  Calculates starts_end, cont_end from logical
8423         record length as reported by fhp.  Calls dump_fixed_table() if
8424         requested.  Fixed length of record copied by memcpy.
8425         (parse_num_or_var) Sets `num' to 0, not NOT_INT, for variables.
8426         Message fix.
8427         (realize_value) Returns sensible value for out-of-range variable
8428         values.
8429         (rpd_parse_record) New argument `ofs'.  Fixed confusion between
8430         length of occurrences and length of line.  Added warning for
8431         fields that exceed the line length.  Fixed infinite loop.
8432         (read_one_set_of_repetitions) Numerous minor changes for more
8433         complete SPSS compliance.  Message fixes.
8434
8435         * dfm.c: (dfm_close) If the file being closed is the inline file,
8436         read all the remaining data before closing it.
8437         (dfm_get_record) Don't close the file on lossage, as either it
8438         has been closed already or it doesn't belong to us.
8439
8440         * error.c: (puts_stdout) New function.
8441         (vmsg) Use puts_stdout instead of puts.
8442
8443         * file-handle.q: (fh_record_width) New function.
8444
8445         * inpt-pgm.c: (init_case) Fixed buffer overrun when inp_nval % 4
8446         == 0.
8447         (clear_case) Ditto.
8448         (input_program_source_read) Made an old kluge an approved method.
8449
8450         * lexer.c: (syntax_error) New function.
8451
8452         * misc.c: [BROKEN_RAND] (ansi_rand, ansi_srand; static var next)
8453         New.
8454
8455         * output.c: (oupt_get_paper_size) Message fix.
8456
8457         * q2c.c: Numerous fixes to formatting of generated code made to
8458         conform to GNU coding standards.  Uses syntax_error() in generated
8459         code.  Other miscellaneous generated message fixes.  Added support
8460         for broken systems that are missing EXIT_SUCCESS, EXIT_FAILURE,
8461         RAND_MAX, and/or strerror().
8462
8463 Sat Oct  4 02:09:56 1997  Ben Pfaff  <blp@gnu.org>
8464
8465         * data-in.c: Comment fixes.
8466
8467         * data-list.c: (struct repeating_data_trns) New member `id_spec'.
8468         (find_variable_input_spec) New function.
8469         (cmd_repeating_data) Initializes id_spec.
8470         (rpd_parse_record) Implemented.
8471         (read_one_set_of_repetitions) Returns -3 by default in order to
8472         kluge out some potential bugs.
8473
8474         * data-out.c: Comment fixes.
8475
8476         * file-type.c: (internal_cmd_record_type) Message fix.
8477
8478         * inpt-pgm.c: (input_program_source_read) Special temporary kluge
8479         for handling -3 return value.
8480
8481 Sat Sep 20 23:58:15 1997  Ben Pfaff  <blp@gnu.org>
8482
8483         * data-list.c: Comment fixes.
8484         (struct dls_var_spec) Reordered members.
8485         (read_from_data_list_fixed) Restructured.
8486         (struct repeating_data_trns) Reordered members.  Renamed `starts'
8487         as `starts_beg', `ends' as `starts_end'.
8488         (cmd_repeating_data) Calculates length of repeated data if
8489         necessary and possible.
8490         (parse_num_or_var) Don't allow string variables.
8491         (realize_value) New function.
8492         (rpd_msg) New function.
8493         (rpd_parse_record) New function.  Currently stubbed out.
8494         (read_one_set_of_repetitions) Implemented.
8495
8496         * inpt-pgm.c: (input_program_source_read) Comment fix.
8497
8498 Thu Sep 18 21:34:57 1997  Ben Pfaff  <blp@gnu.org>
8499
8500         * command.c: (cmd_end_repeat_p) Removed.
8501         (init_cmd_parser) Doesn't set cmd_end_repeat_p.
8502         (parse_cmd_name) Removed.
8503
8504         * data-list.c: Comment fixes.
8505         (data_list_pgm) Removed `eof' member.
8506         (static var first) New var.
8507         (cmd_data_list) Sets `first'.  Ensures that DATA LIST uses the
8508         FILE TYPE file inside FILE TYPE structures.
8509         (append_var_spec) Appends to *first, not dls.spec.
8510         (parse_fixed) Message fixes.
8511         (struct rpd_num_or_var) New.
8512         (struct repeating_data_trns) New.
8513         (static var rpd) New.
8514         (cmd_repeating_data) New function.
8515         (parse_num_or_var) New function.
8516         (parse_repeating_data) New function.
8517         (read_one_set_of_repetitions) New function.
8518
8519         * file-type.c: (cmd_file_type) Message fixes.  Always
8520         default_handle to FILE TYPE file handle.
8521         (internal_cmd_record_type) Message fixes.
8522
8523 Wed Aug 20 14:22:03 1997  Ben Pfaff  <blp@gnu.org>
8524
8525         * repeat.c: Comment fix.  Disable debugging.
8526
8527         * temporary.c: (restore_dictionary) Sets splits to NULL and
8528         n_splits to 0 before destroying the variables because now doing
8529         this tries to remove split variables.
8530
8531         * vars-atr.c: (discard_variables) Asserts that n_splits is 0 after
8532         destroying the dictionary.
8533         (clear_variable) Removes a variable from splits after destroying
8534         it.
8535
8536 Mon Aug 18 18:06:55 1997  Ben Pfaff  <blp@gnu.org>
8537
8538         * cmdline.c: (set_compat) Removed.
8539         (pick_compat) Removed.
8540         (parse_command_line) Removed -c option.
8541         (pre_syntax_message) Removed -c option.
8542         (usage) Remove compatibility code.
8543
8544         * common.h: (macros VER_PC, VER_WND, VER_X) Removed.
8545         (glob var compat) Removed.
8546
8547         * compute.c: (type_check) Fixed messages about type mismatches.
8548
8549         * data-list.c: (cmd_data_list) Removed compatibility code.
8550         (fixed_parse_compatible) Calls convert_negative_to_dash().
8551         Fixed bug where it only set the variable in fx.spec if it created
8552         the variable itself.
8553         (dump_fmt_list) Spelling fix.
8554         (cut_field) Removed compatibility code.
8555
8556         * dfm.c: (cmd_begin_data) Don't require a command terminator on
8557         BEGIN DATA command.
8558
8559         * expr-evl.c: (evaluate_expression) Implement LAG.
8560
8561         * expr-prs.c: (parse_add) Calls convert_negative_to_dash().
8562         (parse_neg) Calls convert_negative_to_dash().
8563         (LAG_func) Increases n_lag to the lag requested.  Fixed assignment
8564         bug.
8565
8566         * expr.h: (struct expression_struct) Removed member max_lag.
8567
8568         * file-type.c: (parse_col_spec) Calls convert_negative_to_dash().
8569         (internal_cmd_record_type) Removed special handling to produce
8570         negative numbers from dash tokens.
8571
8572         * getline.c: (static var DO_REPEAT_level) New var.
8573         (getl_add_DO_REPEAT_file) Increments DO_REPEAT_level.
8574         (handle_line_buffer) Copies the line into getl_buf; doesn't call
8575         copy_with_DO_REPEAT_substitutions().
8576         (getl_read_line) Maintains value of getl_mode.  Calls
8577         perform_DO_REPEAT_substitutions() whenever DO_REPEAT_level is
8578         positive.
8579         (getl_close_file) Decrements DO_REPEAT_level when appropriate.
8580
8581         * getline.h: (getl_mode) New glob var.
8582
8583         * glob.c: Comment fixes.
8584         (init_glob) Restructured.  Sets set_seed.
8585         (init_compat_dependent) Removed.  All references removed.
8586         (get_date) Format changed from MM/DD/YY to DD MMM YYYY.
8587         (__htonl, __htons) Removed.  (What were these for?)
8588
8589         * lexer.c: (static var tbl) Dash set to class CNUM.
8590         (make_hexit) New function from data-out.c.
8591         (get_token_representation) Rewritten.
8592         (convert_negative_to_dash) New function.
8593         (lex_init_compat_dependent) Removed.
8594         (yylex) A dash is parsed as part of a number if it is followed by
8595         a digit.  The ASCII representation of a number is copied to
8596         tokstr.  String parsing farmed out to parse_string().  Comment
8597         fixes.
8598         (bin_value_func, oct_value_func, hex_value_func, parse_string) New
8599         functions.
8600         (preprocess_line) Line processing depends on interactive/batch
8601         mode, not on compatibility mode.  Removed PC+ compatibility code.
8602
8603         * loop.c: (loop_3_trns_proc) Comment fix.
8604
8605         * main.c: Remove dead code.
8606         (main) Remove call to init_compat_dependent().
8607
8608         * misc.c: (convert_fmt_ItoO) Make E format conversion more
8609         conformant.
8610
8611         * print.c: (parse_string_argument) Calls
8612         convert_negative_to_dash().
8613         (fixed_parse_compatible) Calls convert_negative_to_dash().
8614
8615         * repeat.c: (RPT_* defines) Removed.
8616         (struct rpt_numeric) Removed.
8617         (struct repeat_entry) New member type, changed `replacement' from
8618         char * to char **.
8619         (clean_up) Deallocation adapted to new repeat_entry.
8620         (internal_cmd_do_repeat) `type' defaults to 0.  Remove lookahead()
8621         usage.  Creates vars for `type' of 1.
8622         (parse_ids) Sets type of 1.  Adapted to new repeat_entry.
8623         (store_numeric) Rewritten, new interface.
8624         (parse_numbers) Rewritten.
8625         (parse_strings) Rewritten.
8626         (find_DO_REPEAT_substitution) New function.
8627         (perform_DO_REPEAT_substitutions) New function.
8628         (copy_with_DO_REPEAT_substitutions) Removed.
8629         (debug_print) Rewritten.
8630
8631         * set.q: Comment fix.
8632         (custom_results) Removed compatibility code.
8633         (internal_cmd_set) Removed SET EMULATION subcommand.  Removed
8634         compatibility code.
8635
8636         * sysfile-info.c: (cmd_display) Removed compatibility code.
8637
8638         * tokens.h: Comment fixes.
8639         (token types enum) Removed `toktype' typedef name for this int
8640         type.  Removed SUBST.  Restructured.
8641
8642         * vars-atr.c: (discard_variables) Sets n_lag to 0.
8643
8644         * vars-prs.c: Comment fix.
8645
8646         * vfm.c: Comment fixes.
8647         (glob var n_lag) New var.
8648         (static vars lag_count, lag_head, lag_queue) New vars.
8649         (procedure) Removed argument nlag.
8650         (setup_lag) New function.
8651         (close_active_file) Discards lagging state.
8652         (lag_case) New function.
8653         (lagged_case) New function.
8654         (write_case) Lags a case if lagging.
8655
8656         * weight.c: (cmd_weight) Removed compatibility code.
8657         
8658 Sun Aug 17 22:34:40 1997  Ben Pfaff  <blp@gnu.org>
8659
8660         * getline.h: (struct getl_script) New members loop_index, macros.
8661
8662         * getline.c: (getl_add_file) Sets first_line field to NULL.
8663         (getl_add_DO_REPEAT_file) New function.
8664         (handle_line_buffer) When the current line's length is negative,
8665         set the filename and line number.  Increment line number after
8666         reading line.  Pass the line to
8667         copy_with_DO_REPEAT_substitutions() for processing.
8668         (getl_close_file) Free DO REPEAT lines before freeing the
8669         filename, and just set the filename to NULL when doing this,
8670         because otherwise the filename gets freed twice.
8671
8672         * glob.c: (glob var queuing) Removed.  All references removed.
8673
8674         * lexer.c: Comment fixes.
8675         (get_token_representation) New function.
8676
8677         * repeat.c: Comment fixes.
8678         (struct repeat_entry) Replaced type and v union members with a
8679         simple string.
8680         (append_record) New function.
8681         (internal_cmd_do_repeat) Started reforming it for the new
8682         repeat_entry struct.  Properly records filename changes in the
8683         getl_line_buf.  Fixed improper use of = for ==.  Fixed sense of
8684         strncasecmp() result usage.  Uses append_record() to simplify.
8685         Properly discards END REPEAT line.  Calls getl_add_DO_REPEAT_file
8686         to add in the file.
8687
8688         (copy_with_DO_REPEAT_substitutions) Started coding.
8689
8690         [DEBUGGING] (debug_print_lines) New function.
8691
8692         * set.q: (custom_results, internal_cmd_set) s/VER_PCP40/VER_PC/;
8693
8694         * tokens.h: (macro is_id1, is_idn) New macros.
8695
8696 Sat Aug 16 10:57:41 1997  Ben Pfaff  <blp@gnu.org>
8697
8698         * cmdline.c: (static var pre_syntax_message) Changed `win'
8699         compatibility mode to `wnd'.
8700
8701         * data-list.c: (fixed_parse_spss) Renamed
8702         fixed_parse_compatible().
8703
8704         * glob.c: (init_glob) Excise unused code for
8705         program_invocation_short_name.
8706
8707         * lexer.c: (preprocess_line) Leading indentors are ignored in Wnd
8708         as well as in X.
8709
8710         * print.c: (fixed_parse_spss) Renamed fixed_parse_compatible().
8711
8712         * set.q: `win' compatibility renamed `wnd'.
8713
8714 Thu Aug 14 22:11:12 1997  Ben Pfaff  <blp@gnu.org>
8715
8716         * filename.c: [__WIN32__] Change the included Windows header files
8717         (again).
8718         (absolute_filename_p) [__MSDOS__] A filename with a colon as the
8719         second character is absolute.
8720         (dirname) Fix logic error.  Don't printf() the results.
8721         (prepend_dir) Don't printf() the results.
8722
8723         * getline.c: (handle_line_buffer) New function.
8724         (getl_read_line) Reads line with handle_line_buffer() when
8725         appropriate.
8726         (getl_close_file) Discard line buffer data.
8727
8728         * getline.h: Comment fixes.
8729         (struct getl_line_list) New struct.
8730         (getl_script_struct) Added line buffer members.  These are hooks
8731         for use by DO REPEAT to allow it to insert virtual source code
8732         into the program.
8733
8734         * glob.c: (init_glob) [__DJGPP__ || (__WIN32__ && __BORLANDC__)]
8735         Override Borland C++ stupidity that claims Windows has a console
8736         window size of 0x3.
8737
8738         * repeat.c: This is in the process of being restructured from
8739         using a token-buffering approach to the DO REPEAT facility to
8740         using the more flexible approach of a line-buffering approach in
8741         conjunction with the getline module.  Comment fixes.
8742         (struct tok_struct) Removed.
8743         (static vars queue_index, queue_head, queue) Removed.
8744         (static vars line_buf_head, line_buf_tail) New vars.
8745         (internal_cmd_do_repeat) Instead of queuing tokens, queue lines.
8746         Not complete.
8747         (pull_queue, destroy_queue) Removed.
8748         [DEBUGGING] (debug_print_tokens) Removed.
8749
8750 Tue Aug  5 13:57:58 1997  Ben Pfaff  <blp@gnu.org>
8751
8752         * file-handle.q: (prepend_current_directory) New function.
8753         (internal_cmd_file_handle, fh_get_handle_by_filename) Prepends
8754         current directory before normalizing filename.
8755
8756         * filename.c: (gnu_getcwd) New function.
8757         (absolute_filename_p) New function.
8758         (search_path) New argument, PREPEND.  All references changed to
8759         pass NULL except those explicitly mentioned.  Uses
8760         absolute_filename_p().  Prepends PREPEND before trying the
8761         filename.
8762         (dirname, prepend_dir) New functions.
8763
8764         * getline.c: (getl_get_current_directory) New function.
8765         (getl_include) Passes getl_get_current_directory() as PREPEND arg
8766         to search_path().
8767                 
8768 Sun Aug  3 11:42:36 1997  Ben Pfaff  <blp@gnu.org>
8769
8770         * In several source files, the term `script' was replaced with
8771         `syntax file' inside error messages.  Usage of the term `script'
8772         in the sense of a syntax file is now deprecated.
8773
8774         * cmdline.c: (static vars pre_syntax_message, post_syntax_message)
8775         Updated messages.
8776
8777         * dump-sysfile.c: (usage) Update message.
8778
8779         * getline.c: (getl_read_line) Ignore lines beginning with `#!'.
8780
8781         * getline.h: (glob var getl_include_path) Declare extern.
8782
8783         * list.q: Define EXTERN as extern before #including somP.h.
8784
8785         * var.h: Remove declaration of `disptype' variable.
8786
8787         * vfm.c: (close_active_file) After switching the data sink to a
8788         data source, set vfm_sink to NULL, because it doesn't exist any
8789         more.
8790
8791 Thu Jul 17 21:41:44 1997  Ben Pfaff  <blp@gnu.org>
8792
8793         * glob.c: [__BORLANDC__] Include math.h.  Define _matherr() and
8794         _matherrl() to ignore all math errors.
8795
8796         * sfm-read.c: (read_value_labels) When reading the labels from
8797         disk, read the little parts separately instead of as a struct;
8798         this avoids alignment problems.
8799
8800         * sfm-write.c: (struct sfm_fhuser_ext) New member `elem_type'.
8801         (sfm_write_dictionary) Sets elem_type and frees it on lossage.
8802         (write_header) Allocates and initializes elem_type.
8803         (sfm_write_case) Uses elem_type to determine how to handle each
8804         flt64 element.
8805         (sfm_close) Frees elem_type.
8806
8807         * sfmP.h: Comment fix.
8808         [__BORLANDC__] Uses #pragma -a to adjust structure member
8809         alignment.
8810         
8811 Thu Jul 17 01:55:12 1997  Ben Pfaff  <blp@gnu.org>
8812
8813         * Makefile.am: (fiasco_SOURCES) Remove display.c.
8814
8815         * common.c: Fix typo.
8816
8817         * dfm.c: (read_record) Remove strncasecmp() emulation and fix the
8818         sense of the condition.
8819
8820         * expr-evl.c: (macro ALLOC_STRING_SPACE) [!PAGED_STACK] Add
8821         line-continuation backslash.
8822
8823         * filename.c: [__WIN32__] Include <windef.h> before <winbase.h>.
8824
8825         * frequencies.q: (custom_grouped, add_percentile) Don't use a
8826         non-constant expression as an argument to sizeof.
8827
8828         * glob.c: [__WIN32__ && __BORLANDC__] When including <conio.h>,
8829         undefine gettext macro because that's a conio function.
8830
8831         * hash.h: (hsh_prime_tab declaration) Remove.
8832
8833         * list.q: (write_fallback_headers) Move `leader' allocation out of
8834         main loop.  Change to local_alloc() allocation.
8835
8836         * output.h: Formatting fixes.  Put __attribute__ in right place on
8837         function prototypes.
8838
8839         * sfm-read.c: (read_machine_flt64_info, read_variables) Change
8840         incorrect `SECOND_LOWEST_VALUE' references to proper
8841         `second_lowest_value'.
8842
8843         * som-frnt.c: (EXTERN macro) Define as `extern' instead of null
8844         value.  This way 2 out of 3 of the som files define the vars
8845         extern, the correct way, that actually works under BC++.
8846         (som_set_float) Don't use nonconstant initializers for a struct.
8847
8848         * som-high.c: Add the standard alloca() header.
8849         (replicate_table) Add prototype.
8850
8851         Merged DISPLAY routine.
8852         * sysfile-info.c: (AS_*) New enum series.
8853         (cmd_sysfile_info) Gutted.  Calls describe_variable() to do the
8854         dirty work.
8855         (cmd_display, display_macros, display_documents,
8856         display_variables) Stolen from defunct display.c.
8857         (describe_variable) New function.
8858
8859         * temporary.c: [0] (display_tree) New debug function.
8860         (copy_variable) Performs shallow copy of value labels instead of
8861         deep copy; i.e., just copys the AVL tree and increments the
8862         reference counts.
8863
8864         * val-labs.c: Comment fixes.
8865         (do_value_labels) Optionally skip leading forward slash.
8866         (get_label) Creates only a single value label instead of many
8867         copies of one, and sets the reference count.
8868
8869         * display.c: Removed.
8870
8871         * dump-sysfile.c: New file, not yet complete.
8872
8873 Fri Jul 11 23:02:18 1997  Ben Pfaff  <blp@gnu.org>
8874
8875         For lots of source files I added more verbose_msg's.  These aren't
8876         listed below as they have tested as being benign.  In some cases
8877         these replaced debug_printf() calls.
8878
8879         * output.c: (outp_read_devices) Message fix.
8880
8881         * postscript.c: (output_encodings) Message fix.  Reports errors on
8882         fclose().
8883         (postopen) Message fix.
8884         
8885 Fri Jul 11 14:09:40 1997  Ben Pfaff  <blp@gnu.org>
8886
8887         * dfm.c: (dfm_close) Don't call fclose() for a NULL FILE.
8888
8889         * filename.c: (close_file_ext) Set f->file to NULL *after* closing
8890         it.
8891
8892         * main.c: Remove <malloc.h> #include.
8893
8894         * mis-val.c: (parse_numeric) Set .f member for each missing[]
8895         instead of trying to just set the missing[] itself, which is a
8896         gcc-specific idiom.
8897
8898         * sfm-read.c: (read_variables) Same.
8899
8900         * str.h: Add memmem() prototype.
8901
8902         * val-labs.c, var-labs.c: Replace <malloc.h> with <stdlib.h>.
8903
8904 Thu Jul 10 22:13:53 1997  Ben Pfaff  <blp@gnu.org>
8905
8906         * Makefile.am: (q2c) Don't include any libraries in the link.
8907
8908         * dfm.c: (force_line_buffer_extension) New macro.
8909         (count_tabs) New function.
8910         (tabs_To_spaces) New function.
8911         (read_record) Calls tabs_to_spaces() on the line being processed.
8912
8913         * q2c.c: Disabled i18n for this proglet so that libintl.a doesn't
8914         have to be compiled twice (once for CC, once for LOCAL_CC).
8915  
8916 Sun Jul  6 19:14:33 1997  Ben Pfaff  <blp@gnu.org>
8917
8918         * Makefile.am: (INCLUDES) Add intl directory; fix directories.
8919         (LDADD) Add @INTLLIBS@.
8920         (q2c) Add LIBS, @INTLLIBS@ to link step.
8921
8922         * inpt-pgm.c: Turn off debugging.
8923
8924         * postscript.c: (postopen) Format fix.  local_free() blocks
8925         returned by local_alloc(); don't free() them.
8926
8927 Sat Jul  5 23:44:51 1997  Ben Pfaff  <blp@gnu.org>
8928
8929         * data-in.c: (parse_string_as_format) Comment fix.  Fix check for
8930         string length.
8931
8932         * data-list.c: (read_from_data_list_fixed) Pass proper value for
8933         LEN arg, not simply the full string length.
8934
8935         * sort.c: (allocate_file_handles) Check SPSS compatible temp file
8936         directories before generic temp file directories.
8937
8938         * vfm.c: Disable debugging.
8939
8940 Fri Jul  4 13:26:41 1997  Ben Pfaff  <blp@gnu.org>
8941
8942         * get.c: Comment fix.
8943         (cmd_save_internal) Always passes GTSV_OPT_SAVE option.
8944
8945 Wed Jun 25 22:52:28 1997  Ben Pfaff  <blp@gnu.org>
8946
8947         * expr-prs.c: (debug_print_postfix) Conditionally included on
8948         GLOBAL_DEBUGGING.  Removed out_header() reference.
8949
8950         * exprP.h: Removed #undef GLOBAL_DEBUGGING.
8951
8952 Sun Jun 22 22:00:28 1997  Ben Pfaff  <blp@gnu.org>
8953
8954         * ascii.c: Removed obsolete ascii_close_page() prototype.
8955
8956         * command.c: (output_line) Comment fix.
8957
8958         * data-in.c: Formatting fix.
8959         (parse_string_as_format) Now the `fc' argument is used only for
8960         the purpose of error messages; it is not an index into the string
8961         passed.  All references changed.
8962
8963         * data-list.c: Comment fix.
8964         (cut_field) Comment fix.  Now returns the column number of the
8965         position of the field cut out on success.
8966         (parse_field) Added `column' argument.  Puts the column numbers in
8967         the error message.
8968         (read_from_data_list_free, read_from_data_list_list) Record the
8969         column number returned by cut_field(), pass it to parse_field().
8970
8971         * dfm.c: Comment fix.
8972
8973         * do-ifP.h: Comment fix.
8974
8975         * expr-prs.c: (SYSMIS_func) Implemented string-type arguments for
8976         the SYSMIS function.
8977
8978         * expr.h, exprP.h: Comment fix.
8979
8980         * glob.c: (init_glob) Only calls setlocale() and family if
8981         ENABLE_NLS set.
8982
8983         * hash.h: Comment fix.
8984
8985         * include.c: Comment fix.
8986
8987         * output.c: Comment fix.
8988
8989         * postscript.c: (ps_line_intersection) Simplified assertion.
8990
8991         * repeat.c: Comment fix.
8992
8993         * vars-atr.c: Comment fix.
8994
8995         * vars-prs.c: Comment fix.
8996
8997         * vfm.c: (vector_initialization) [DEBUGGING] Fixed undefined
8998         behavior with usage of postincrement.
8999         (memory_stream_read) Discards cases as it goes. 
9000
9001 Sun Jun 15 16:45:17 1997  Ben Pfaff  <blp@gnu.org>
9002
9003         * Makefile.am: Cleans q2c, not just distcleans it.  Distcleans
9004         foo.
9005
9006         * Most source files: Includes debug-print.h, related comment
9007         fixes.
9008
9009         * cases.c: (alloc_val) Removed complex allocation code.  Merely
9010         increments default_dict.nval and returns the former value.
9011         (envector, devector) Removed references to lv member of struct
9012         variable.
9013
9014         * common.h: (macro VME) Replaced complex definition with simple
9015         one.
9016
9017         * data-list.c: (cmd_data_list) Sets vfm_source instead of
9018         read_active_file and cancel_input_pgm.
9019         (read_from_data_list, cancel_data_list) Removed.
9020         (data_list_source_read, data_list_source_destroy_source) New
9021         functions.
9022         (glob var data_list_source) New var.
9023
9024         * dfm.c: (open_file_r, open_file_w) Simplified debug output.
9025         (cmd_begin_data) Improved criteria for an input program accessing
9026         the inline file.  Still not perfect.
9027
9028         * do-if.c: (do_if_trns_proc) Simplified debug output.
9029
9030         * expr-prs.c: Comment fixes.
9031         [DEBUGGING] (debug_print_postfix) Simplified debug output.
9032
9033         * file-handle.q: (fh_close_handle) Simplified debug output.
9034
9035         * file-type.c: Comment fixes.
9036         (cmd_file_type) Sets vfm_source instead of read_active_file and
9037         cancel_input_pgm.
9038         (cmd_end_file_type) On failure, discards variables in place of
9039         just canceling the input program.
9040         (read_from_file_type) Renamed file_type_source_read.
9041         (cancel_file_type) Renamed file_type_source_destroy_source.
9042         (glob var file_type_source) New var.
9043
9044         * get.c: (GTSV_* enum series) New enums GTSV_OPT_SAVE, GTSV_NONE.
9045         (cmd_get) Initializes options to GTSV_NONE before passing to
9046         trim_dictionary().  Removed `lv' reference.  Sets vfm_source
9047         instead of read_active_file and cancel_input_pgm.
9048         (cmd_save_internal) Initializes options before passing to
9049         trim_dictionary().  Local var `nval' removed.
9050         (dict_delete_run) Comment fixes.
9051         (trim_dictionary) Comment fixes.  Disallows scratch variables if
9052         GTSV_OPT_SAVE set in options.
9053         (read_from_get) Renamed get_source_read.
9054         (cancel_get) Renamed get_source_destroy_source.
9055         (glob var get_source) New var.
9056
9057         * inpt-pgm.c: (cmd_input_program) Sets vfm_source instead of
9058         read_active_file and cancel_input_pgm.
9059         (read_from_input_program) Renamed input_program_source_read.
9060         Simplified debug output.
9061         (cancel_input_program) Renamed
9062         input_program_source_destroy_source.
9063         (glob var input_program_source) New var.
9064
9065         * loop.c: (loop_1_trns_proc) Simplified debug output.
9066
9067         * main.c: (dump_token) Made eof output more explicit.
9068
9069         * sfm-read.c: (read_variables, dump_dictionary) Removed `lv'
9070         references.
9071
9072         * sort.c: (cmd_sort_cases) Disallows scratch variables.  Removed
9073         code for always-memory or always-disk cases.  malloc's case-list
9074         based on vfm_source_info.ncases.  Explicit support for
9075         memory_stream via memory_source_cases.
9076         (do_external_sort) Sets vfm_source instead of read_active_file and
9077         cancel_input_pgm.
9078         (allocate_file_handles) The temporary directory permissions are
9079         set to 0700 instead of 0777.
9080         (allocate_cases) Formatting fixes.  Simplified debug output.
9081         (output_record) Compacts the case if necessary before writing it
9082         out.
9083         (close_handle, open_handle_w) Simplified debug output.
9084         (write_initial_runs) Destroys vfm_sink, then sets it to
9085         sort_stream.  Writes records to memory based on
9086         vfm_sink_info.case_size.
9087         (write_to_sort_cases) Renamed sort_stream_write().
9088         (merge) Simplified error handling.  Simplified debug output.
9089         Formatting fixes.
9090         (read_from_external_sort) Renamed sort_stream_read().
9091         Reads records based on vfm_source_info.case_size.
9092         (sort_stream_write) Writes records to memory based on
9093         vfm_sink_info.case_size.
9094         (sort_stream_mode) New function.
9095         (glob var sort_stream) New variable.
9096
9097         * temporary.c: (cmd_temporary) Simplified debug output.
9098         (copy_variable) Removed references to `lv'.
9099
9100         * title.c: (get_title) Simplified debug output.
9101
9102         * var.h: Comment fixes.
9103         (struct get_proc) Removed member `lv'.
9104         (struct variable) Removed member `lv'.  Comment fixes.
9105         (glob vars read_active_file, write_active_file, cancel_input_pgm)
9106         Removed.
9107         (struct case_stream) New.
9108
9109         * vars-atr.c: (discard_variables) Changed cancel_input_pgm,
9110         read_active_file references to use vfm_source.
9111         (init_variable, replace_variable) Removed references to `lv'.
9112
9113         * vfm.c: Comment fixes.
9114         (glob var vfm_source, vfm_sink, vfm_source_info, vfm_sink_info)
9115         New variables.
9116         (static var queue, qh, qt, n_lag) Removed.  All references
9117         removed.
9118         (glob var compaction_necessary, compaction_nval, compaction_case,
9119         paging) New variables.
9120         (record_case) Removed.
9121         (procedure) Comment fixes.  Calls vfm_source->read() instead of
9122         read_active_file().
9123         (lag) Removed.
9124         (prepare_for_writing, arrange_compaction, make_temp_case,
9125         vector_initialization, setup_filter) New function.
9126         (open_active_file) Most of the code moved into the abovementioned
9127         new functions.  Now sets temp_dict to &default_dict if there is no
9128         temporary dictionary, for convenience.  New debug output.
9129         (close_active_file) Deals with changing the sink to the source.
9130         Calls finish_compaction().  Frees compaction_case.  Mostly
9131         rewritten.
9132         (glob vars disk_source_file, disk_sink_file) New vars.
9133         (destroy_active_file, read_from_memory) Removed.
9134         (disk_stream_init, disk_stream_read, disk_stream_write,
9135         disk_stream_mode, disk_stream_destroy_source,
9136         disk_stream_destroy_sink) New functions.
9137         (glob var vfm_disk_stream) New var.
9138         (glob vars memory_source_cases, memory_sink_cases,
9139         memory_sink_iter, memory_sink_max_cases) New vars.
9140         (memory_stream_init, memory_stream_read, memory_stream_write,
9141         memory_stream_mode, memory_stream_destroy_source,
9142         memory_stream_destroy_sink) New functions.
9143         (glob var vfm_memory_stream) New var.
9144         (write_case) Local var `i' renamed `cur_trns'; local var `retval'
9145         named `more_cases'.  Simplified debug output.  Otherwise mostly
9146         rewritten.
9147         (record_case) Moved into the stream drivers.  Removed.
9148         (transform) Removed (was dead code).
9149         (SPLIT_FILE_procfunc) s/vfm_replacement/vfm_sink_info/.  In the
9150         common case that the splits don't change, we don't need to copy
9151         the case into prev_case again--pointless.
9152         (compact_case) New function.
9153         (finish_compaction) New function.
9154
9155         * vfmP.h: Comment fixes.
9156         (DEV_* enum series) Removed. 
9157         (struct storage) Renamed `stream_info'.  Removed variant record.
9158         Removed `device' member.
9159
9160         * debug-print.h: New file.
9161         
9162 Sun Jun  8 01:12:38 1997  Ben Pfaff  <blp@gnu.org>
9163
9164         * autorecode.c: Turned off debugging.
9165
9166         * data-list.c: (destroy_dls) Closes the associated file handle.
9167
9168         * descript.q: (custom_variables) Added PV_NO_SCRATCH to
9169         parse_variables() options.
9170
9171         * dfm.c: (open_file_r) Removed gratuituous argument to msg() call.
9172
9173         * display.c: (display_variables) Really fixed null cell bug.
9174
9175         * file-handle.q: (fh_close_handle) Changed debugging message.
9176
9177         * frequencies.q: (custom_variables) Added PV_NO_SCRATCH to
9178         parse_variables() options.
9179
9180         * list.q: Added PV_NO_SCRATCH in q2c varlist options.
9181         (cmd_list) Fails if no variables specified.
9182         (determine_layout) Writes blank lines manually.
9183
9184         * loop.c: (loop_1_trns_proc) Made debugging code only print
9185         messages if debugging.
9186
9187         * q2c.c: (dump_subcommand) Appends sbc->message to SBC_VARLIST
9188         parse_variables() arguments.
9189         (main) Parses optional parenthesized options to varlist
9190         subcommands into sbc->message.
9191
9192         * sfm-read.c: Format fix.
9193
9194         * var.h: (FV_*) New enum series.
9195         (PV_*) New enum PV_NO_SCRATCH.
9196
9197         * vars-prs.c: (find_var) Removed.
9198         (fill_all_vars) Takes FV_* enum instead of boolean third
9199         argument.  Rewritten to deal with scratch as well as system
9200         variables.
9201         (parse_variables) Error message on scratch variable if
9202         PV_NO_SCRATCH set.
9203
9204         * vfm.c: (static var virt_begin_func) New var.
9205         (procedure) Sets up virt_begin_func.
9206         (SPLIT_FILE_procfunc) For the first case, calls virt_begin_func()
9207         after dump_splits().  For succeeding groups changes, calls
9208         virt_begin_func() instead of begin_func().      
9209
9210 Fri Jun  6 22:42:23 1997  Ben Pfaff  <blp@gnu.org>
9211
9212         * count.c, data-out.c, file-handle.q, list.q, loop.c: Turned off
9213         debugging.
9214
9215         * dfm.c: Added some debugging messages, disabled by default.
9216         (open_file_r) Fixed error message.
9217         (read_record) On eof on inline_file, instead of calling
9218         fh_close_handle(), simply jump to eof label like a normal file.
9219         Message fixes.
9220
9221         * display.c: Thin lines between rows for certain kinds of
9222         listing.  Fixed `null cell' bug.
9223
9224         * error.c: (failure) Flush stdout, stderr before failing.
9225
9226         * file-handle.q: (fh_close_handle) Added debugging message.
9227
9228         * frequencies.q: (dump_full) Bottom line extends across entire
9229         table width.  Changed title formatting.
9230         (dump_condensed) Changed title formatting.
9231         (dump_statistics) Fixed title formatting.
9232
9233         * glob.c: (init_glob) Moved initialization of cur_proc out of #if.
9234         Sets default value of set_format.
9235
9236         * list.q: (cmd_list) Calls blank_line() before determine_layout().
9237         Passes write_all_headers() to procedure() as pre-group func.
9238         (write_all_headers) New function.
9239         (determine_layout) Removed calls to write_header().
9240         Calls blank_line() before and after write_fallback_headers().
9241
9242         * recode.c: (recode_trns_free) Only attempts to free head->map if
9243         non-NULL.
9244
9245         * sfm-read.c: (read_variables) Allows `#' at beginning of system
9246         file variable names but gives a warning.  Sets `left' based on
9247         first character being/not being `#'.  On lossage frees dict->var.
9248
9249         * som-high.c: (som_draw_title) Simplified title formatting.
9250
9251         * vfm.c: (dump_splits) Fixed and changed splits formatting.
9252
9253 Thu Jun  5 22:51:15 1997  Ben Pfaff  <blp@gnu.org>
9254
9255         * autorecode.c: (cmd_autorecode) Sets h_trans to NULL at
9256         beginning.  Frees v_src, v_dest on successful exit.  Frees
9257         h_trans[*], h_trans on lossage.
9258         (recode) Frees h_trans[*], h_trans.
9259
9260         * dfm.c: (dfm_close) Formatting change.
9261         (open_inline_file) Now passed a dfm_fhuser_ext to initialize; no
9262         longer allocates its own in inline_file.
9263         (open_file_r) Passes the local dfm_fhuser_ext to
9264         open_inline_file().
9265         (open_file_w) Message fix. 
9266         (read_record) Buffer reallocation strategy changed.  Frees
9267         ext->line even in inline_file to prevent leaks.
9268         (dfm_put_record) Fixed bug where `ext' was cached before the file
9269         was opened and thus it would be NULL when the file really was
9270         open.
9271         (cmd_begin_data) Sets up inline_file basics itself, then calls
9272         open_inline_file() for the dfm_fhuser_ext.  Formatting fix.
9273
9274         * list.q: (write_line) Formatting fix.
9275         (clean_up) Minor strategy change.  Sets proportional font after
9276         finishing cleanup.
9277         (determine_layout) Sets fixed font before writing regular headers,
9278         or after writing fallback headers.
9279
9280         * modify-vars.c: (cmd_modify_vars) Frees variable lists for DROP
9281         and KEEP vars after using them.
9282
9283         * postscript.c: (ps_init_driver) Frees x->family.
9284         (postopen) When loading fonts, free the temporary font name buffer
9285         after using it.
9286         (ps_text_set_font_by_position) Free temporary font name buffer
9287         after using it.
9288         (text) Fixed code that calculated `lig' so that `lig' always gets
9289         initialized.  Formatting fix.
9290
9291         * som-low.c: (get_cell_size, som_get_table_size) `prop_height' ->
9292         `font_height'.
9293         [GLOBAL_DEBUGGIGN] (check_table) Use arena_alloc() to allocate
9294         cells, not xmalloc(), so that the cells will get destroyed
9295         automatically.
9296
9297         * sysfile-info.c: (cmd_sysfile_info) Frees the dictionary after
9298         using it.
9299
9300 Tue Jun  3 23:33:22 1997  Ben Pfaff  <blp@gnu.org>
9301
9302         * ascii.c: (ascii_text_draw) Always sets metrics for strings that
9303         are drawn.
9304
9305         * dfm.c: Comment fix.
9306
9307         * list.q: Comment fixes.  Include somP.h.  Removed static vars
9308         table, n_columns, n_rows, part.  New struct list_ext.  New static
9309         var line_buf.
9310         (n_lines_remaining, n_chars_width, write_line) New functions.
9311         (cmd_list, list_cases) Rewritten.
9312         (begin_row, end_row, flush_table) Removed.
9313         (write_header, clean_up, write_varname, write_fallback_headers,
9314         determine_layout) New functions.
9315
9316         * output.c: (outp_iterate_enabled_drivers) Minor reformat.
9317
9318         * output.h: Comment fix.
9319
9320         * postscript.c: Comment fix.
9321         (struct ps_driver_ext) Removed prop_size, fixed_size members;
9322         added font_size.  All references changed.
9323         (ps_init_driver) Initializes font_size.  Simplified space checking
9324         code.
9325         (static var option_tab[]) Removed prop-size, fixed-size; added
9326         font-size.
9327         (ps_option) Handles font_size.
9328
9329         * som-high.c: Moved prototypes into somP.h.
9330         (som_init_driver) New function.
9331         (som_submit_table) Moved some code into new function
9332         som_init_driver().
9333         (build_target) Moved some code into new function
9334         som_internal_eject_page().
9335         (som_eject_page) Uses som_internal_eject_page().
9336         (som_internal_eject_page) New function.
9337
9338         * som-low.c: Moved prototypes into somP.h.
9339
9340         * som.h: Formatting fixes.
9341
9342         * somP.h: (struct som_driver_ext) Removed em_width;
9343         added prop_em_width, fixed_width.
9344
9345 Mon Jun  2 14:25:25 1997  Ben Pfaff  <blp@gnu.org>
9346
9347         * Makefile.am: Added `localedir' definition.  Added
9348         -DLOCALEDIR="..." to DEFS.  Added -I. to INCLUDES.
9349
9350         * ascii.c: (macro draw_line) Fixed capitalization.
9351
9352         * ascii.c, autorecode.c, cases.c, cmdline.c, command.c, common.c,
9353         compute.c, count.c, data-in.c, data-list.c, data-out.c,
9354         descript.q, dfm.c, display.c, do-if.c, error.c, expr-evl.c,
9355         expr-opt.c, expr-prs.c, file-handle.q, file-type.c, filename.c,
9356         formats.c, frequencies.q, get.c, getline.c, glob.c, groff-font.c,
9357         hash.c, heap.c, include.c, inpt-pgm.c, lexer.c, list.q, loop.c,
9358         main.c, mis-val.c, misc.c, modify-vars.c, numeric.c, output.c,
9359         postscript.c, print.c, q2c.c, recode.c, rename-vars.c, repeat.c,
9360         sample.c, sel-if.c, sfm-read.c, sfm-write.c, sfmP.h, som-frnt.c,
9361         som-high.c, som-low.c, sort.c, split-file.c, sysfile-info.c,
9362         temporary.c, title.c, tokens.h, val-labs.c, var-labs.c,
9363         vars-atr.c, vars-prs.c, vector.c, vfm.c, weight.c: Marked strings
9364         for internationlization.
9365
9366         * glob.c: [HAVE_LOCALE_H] Includes locale.h.
9367
9368 Sun Jun  1 23:31:18 1997  Ben Pfaff  <blp@gnu.org>
9369
9370         * do-if.c, sort.c, val-labs.c: Comment fixes.
9371
9372         * glob.c: (init_glob) Uncommented, updated i18n support.
9373         
9374         * arena.c, ascii.c, data-in.c, descript.q, error.c, expr-evl.c,
9375         expr-opt.c, expr-prs.c, filename.c, frequencies.q, groff-font.c,
9376         output.c, postscript.c, sfm-read.c, som-high.c, vars-prs.c: Made
9377         the declarations of macros taking arguments a lot nicer.
9378
9379 Sun Jun  1 17:22:04 1997  Ben Pfaff  <blp@gnu.org>
9380
9381         * error.h: Removed CE, CW aliases for SE, SW.
9382
9383         * q2c.c: Removed explicit streq() definition since it's duplicated
9384         in str.h.
9385         
9386         * approx.h, error.h, font.h, hash.h, misc.h, output.h, somP.h,
9387         stats.h, str.h, tokens.h: Made the declarations of macros taking
9388         arguments a lot nicer-looking of <pinard@iro.umontreal.ca>.
9389         Comment fixes.
9390
9391 Sun Jun  1 12:02:06 1997  Ben Pfaff  <blp@gnu.org>
9392
9393         * cmdline.c: Comment fixes.
9394         (pick_compat) Changed return type to int.  Now, instead of setting
9395         glob var `compat' to the emulation, returns the emulation.  All
9396         references changed.
9397         (parse_command_line) Added terminating null to end of
9398         `long_options' array definition.
9399         (pre_syntax_message) Fixes.
9400         (usage) Shows the default emulation in the syntax message by
9401         calling pick_compat().
9402
9403         * getline.c: (getl_add_include_dir) Separates paths with
9404         PATH_DELIMITER, not DIR_SEPARATOR.
9405
9406         * glob.c: (init_glob) Fixed references to DEFAULT_VER_PCP40,
9407         DEFAULT_VER_WIN61, DEFAULT_VER_X40.
9408
9409         * output.c: (outp_configure_macro) Make earlier definitions for a
9410         particular key override later ones for the same key.
9411         
9412 Fri May 30 19:40:49 1997  Ben Pfaff  <blp@gnu.org>
9413
9414         * ascii.c: Comment fixes.
9415
9416         * output.c: (outp_get_paper_size)
9417         s/STAT_OUTPUT_INIT_FILE/STAT_OUTPUT_PAPERSIZE_FILE/.
9418         
9419 Sun May 25 22:34:07 1997  Ben Pfaff  <blp@gnu.org>
9420
9421         * ascii.c, postscript.c, sfm-read.c, sfm-write.c, sort.c: Include
9422         <errno.h>.  GNU libc 2 enforces this!
9423
9424         * command.c: (parse_cmd) Fixed problem with `else' clause being
9425         paired with wrong `if'.  Comment fix.
9426
9427 Fri May  9 16:53:52 1997  Ben Pfaff  <blp@gnu.org>
9428
9429         * getline.c: [!HAVE_LIBREADLINE] (read_console) Changed
9430         blp_getline() to getline().
9431
9432         * output.c: (outp_eval_dimension) Changed the fix from last time;
9433         there was no variable `a'.
9434
9435         * q2c.c: (get_line) Fixed boundary condition overrun bug.
9436
9437 Mon May  5 21:58:22 1997  Ben Pfaff  <blp@gnu.org>
9438
9439         * output.c: (outp_evaluate_dimension) Fixed handling of negative
9440         numbers having fractional parts.  Added case of a fraction without
9441         a whole-number part.
9442
9443 Fri May  2 22:08:05 1997  Ben Pfaff  <blp@gnu.org>
9444
9445         * ascii.c: (ascii_text_get_font_position) Removed.
9446
9447         * expr.h, exprP.h: Disabled debugging.
9448
9449         * groff-font.c, postscript.c: Changed `groff' to `Groff' in
9450         several places.
9451
9452         * output.h: (struct outp_class_struct) Removed
9453         text_get_font_position method.  All references deleted.
9454
9455         * postscript.c: Big change here.  Fontmaps were completely
9456         eliminated because of a change in philosophy.  Comment fixes.
9457         (struct ps_fontmap, ps2dit_map, font_family, dit2family_map)
9458         Removed.
9459         (struct ps_driver_ext) `position', `fontmap', `prop_name',
9460         `fixed_name' members removed.  New members `prop_family',
9461         `fixed_family'.  `family' member changed to type char *.
9462         (static var ps_fontmaps) Removed.
9463         () Removed.
9464         (ps_init_driver) Removed obsolete references, updated.
9465         Initializes `translate_x', `translate_y', `scale'.  Doesn't read
9466         fontmap, of course.  Refers to font names through internal_name
9467         rather than subversive means.  Frees proper items.
9468         (static var option_tab[]) Removed `fontmap-file' option; renamed
9469         `fixed-font', `prop-font'.
9470         (ps_option) Corresponds to option_tab[].
9471         (read_fontmap, release_fontmap, ps_to_dit, compare_ps2dit,
9472         hash_ps2dit, compare_dit2family, hash_dit2family, compare_family,
9473         hash_family) Removed.
9474         (postopen) Generates font names from family names.  Gets
9475         PostScript font name properly.  New prologue file comment `!!!'
9476         style.
9477         (ps_open_page) Adds translate_x, translate_y to BP prologue
9478         function; gives SF argument floating-point format.
9479         (ps_text_set_font_by_name) Doesn't try to map PostScript->Groff
9480         font name.  Doesn't change font family.
9481         (ps_text_set_font_by_position) Generates Groff font name from font
9482         family name instead of through table lookup.
9483         (ps_text_set_font_by_family) Renamed `ps_text_set_font_family',
9484         all references changed.  Reduced to simple string assignment.
9485         (ps_get_font_name) Removed.
9486         (ps_get_font_family) Reduced to string return.
9487         (text) Doesn't save `position' since it no longer exists.  Ugly
9488         kluge to save font family--fix soon?
9489         (load_font) Removed PostScript name argument.
9490         
9491 Thu May  1 14:58:59 1997  Ben Pfaff  <blp@gnu.org>
9492
9493         * postscript.c: Comment fix.
9494         (ps_open_page) Puts scale factor in PostScript output.
9495         
9496 Sat Apr 26 11:49:32 1997  Ben Pfaff  <blp@gnu.org>
9497
9498         * Makefile.am: Distcleans q2c.
9499
9500 Wed Apr 23 21:33:48 1997  Ben Pfaff  <blp@gnu.org>
9501
9502         * ascii.c: (delineate) Sets text size even if width is zero.
9503
9504         * command.c: Comment fix.
9505         (static var cmd_table[]) Re-enabled EVALUATE command.
9506         (parse_cmd) Lotsa comment fixes.  Fixed infinite loop in parsing
9507         of comments in script files.  Now more liberal on criteria for
9508         performing a state transition--if *anything* happened correctly,
9509         not just if *everything* happened correctly.
9510
9511         * data-out.c: (convert_F) Comment fix.  Why in the fsck does
9512         Checker segfault on formatting large numbers and why in the fsck
9513         hadn't I noticed this before?
9514
9515         * expr.h, exprP.h: No longer turn off GLOBAL_DEBUGGING.
9516
9517         * list.q: (cmd_list) Commented out the actual output routine
9518         because of various problems.  Probably will abandon the idea of
9519         using the general `crushed tables' for the LIST procedure.
9520
9521         * temporary.c: (restore_dictionary) Sets var_by_name to NULL after
9522         clearing it.  Allocates a new var_by_name dictionary before trying
9523         to add members to it.
9524
9525         * vars-atr.c: [DEBUGGING] (dump_one_var_node) Removed argument
9526         `sib'.  Changed type of `node' argument.
9527         [DEBUGGING] (dump_var_tree) Replaced avlwalk() with
9528         avl_walk_inorder().
9529         (clear_variable) Only dumps the var tree if var_by_name non-NULL.
9530         [DEBUGGING] Only deletes the variable from var_by_name if that var
9531         non-NULL.
9532
9533 Fri Apr 18 16:48:41 1997  Ben Pfaff  <blp@gnu.org>
9534
9535         * Makefile.am: Added include files to SOURCES.  Added
9536         frequencies.q to EXTRA_DIST.  Removed include/ from INCLUDES.  Now
9537         includes rules for q2c.  Added `boast' target.
9538
9539 Fri Apr 18 15:42:22 1997  Ben Pfaff  <blp@gnu.org>
9540
9541         * Makefile.am: Maintainer-clean Makefile.in.
9542         
9543         * Makefile.am: Fixed redundant EXTRA_DIST line.
9544
9545         * ascii.c: Comment fixes.
9546         (ascii_line_vert) Fixed overly aggressive range check.
9547
9548         * display.c: Removed dead code.
9549
9550         * list.q: Turn debugging on.
9551         (flush_table) New debug code.
9552
9553         * sfm-read.c: (read_value_labels) malloc's the structure before
9554         trying to assign to its members.
9555
9556         * sfm-write.c: Comment fix.
9557
9558         * som-high.c: (som_submit_table) Sets som.t and som.d on each call
9559         to output_table().
9560         (output_table) No arguments anymore--gets them through `som'
9561         global.  New debug code.  In crushed tables, now sets `htv' as
9562         well as `hv' to avoid bad confusion later.
9563         (dump_crush_page) New debug code.
9564
9565         * som-low.c: (som_dump_crush_page) New debug code.
9566
9567 Thu Mar 27 01:11:29 1997  Ben Pfaff  <blp@gnu.org>
9568
9569         All source files: Broke long lines into multiple lines.
9570         
9571         * ascii.c: (ascii_close_page) Uses host_system var in place of
9572         HOST_SYSTEM constant.
9573
9574         * cmdline.c: (var syntax_message[]) Broke into
9575         pre_syntax_message[] and post_syntax_message[].
9576         (usage) Outputs both parts, separated by driver list.
9577
9578         * error.h: Fixed broken formatting.
9579
9580         * expr-opt.c: (str_search, str_rsearch) New functions.
9581
9582         * misc.c: (blp_getdelim) Removed.  All references changed to
9583         `getdelim'.
9584         (str_search, str_rsearch) Removed.
9585         (memrmem) New function.
9586
9587         * misc.h: (blp_getline) Removed.  All reference changed to
9588         `getline'.
9589
9590         * stat.h: New file.
9591
9592         * filename.c: Includes "stat.h", not <sys/stat.h>.
9593         (blp_getenv) Uses host_system var instead of HOST_SYSTEM constant.
9594
9595         * output.c: (outp_list_classes) Changed output formatting.
9596
9597         * sfm-write.c: (write_header) Uses host_system var instead of
9598         HOST_SYSTEM constant.
9599         (write_rec_7_34) Extracts version numbers from the version string.
9600         Untested.
9601
9602         * sort.c: Includes "stat.h", not <sys/stat.h>.
9603
9604         * str.c: (strcasecmp) Removed.
9605
9606         * title.c: (cmd_document) Uses host_system var instead of
9607         HOST_SYSTEM constant.
9608
9609         * version.c: Generated on-the-fly by the Makefile instead of being
9610         static.
9611
9612         * str.h: Comment fixes.  Doesn't substitute for missing memmove or
9613         memcpy.
9614         [!HAVE_STRNCASECMP] Declares strncasecmp().
9615
9616         * version.h: Removed stray character.  Comment fixes.
9617         (vars host_system, build_system) New vars.
9618
9619 Mon Mar 24 21:47:31 1997  Ben Pfaff  <blp@gnu.org>
9620
9621         * Most source files: Changed formatting of copyright notice; fixed
9622         FSF address; reformatted to better conform to GNU standards;
9623         comment fixes.  Added markups to prevent GNU indent from messing
9624         up my beautiful formatting :-).
9625         
9626         * q2c.c: (get_line) Ignores lines that begin with `/* *INDENT' so
9627         that GNU indent markups can be passed through without problems.
9628
9629 Wed Feb 19 21:30:31 1997  Ben Pfaff  <blp@gnu.org>
9630
9631         * get.c: Turned off debugging.
9632
9633         * glob.c: (init_glob) Turned on save-file compression by default.
9634
9635         * sfm-write.c: (sfm_write_case) Fixed bug which resulted in less
9636         compression than was possible in save files.
9637
9638 Sun Feb 16 20:57:20 1997  Ben Pfaff  <blp@gnu.org>
9639
9640         * data-out.c: (convert_F) Comment fixes.  Debug message fixes.
9641
9642         * frequencies.q: Removed Fiasco extensions.  Updated calculation
9643         algorithms.  Polished output format. 
9644         (struct frq_info_struct) Removed members `max_degree', `min_n',
9645         all references removed.
9646         (macro frq_extensions) Removed.
9647         (static vars min_n, max_degree) Removed, all references removed.
9648         (internal_cmd_frequencies) Doesn't handle extensions.  Doesn't
9649         calculate `min_n', `max_degree'.
9650         (postcalc) Passes new arg to dump_statistics().
9651         (dump_full) Honor NOLABEL option.  Buggy?  Adds variable name
9652         title.
9653         (dump_condensed) Adds variable name title.
9654         (sum_freqs) Removed.
9655         (calc_stats) Updated calculation algorithm.
9656         (dump_statistics) Removed warning for too-few observations.
9657         Changed table formatting.  Adds variable name title if passed new
9658         arg is nonzero.
9659
9660         * output.h: Comment fix.
9661
9662         * recode.c, sample.c, sort.c: Disabled debug code.
9663
9664         * som-frnt.c: (som_set_value, som_set_float, som_set_text)
9665         Improved debug code.
9666
9667         * var.h: (enum series frq_*) Removed Fiasco extensions.
9668
9669 Sat Feb 15 21:26:53 1997  Ben Pfaff  <blp@gnu.org>
9670
9671         * command.c: Added PROCESS IF to command table.
9672
9673         * Lots & lots of places, removed checks for NULLs preceding calls
9674         to free_expression(), which itself checks.
9675
9676         * descript.q: Removed Fiasco extensions.  Removed optimizations
9677         for non-weighted active files.  Implemented some options.
9678         Finished polishing output format.  Comment fixes.  Merged
9679         `descript.g'.
9680         (static vars n_glob_miss_list, n_glob_valid, n_glob_missing,
9681         max_degree, min_n) Removed.
9682         (macro dsc_extensions) Removed.
9683         (struct dsc_info_struct) Removed `min_n' member, all references
9684         fixed.
9685         (internal_cmd_descriptives) Removed calculation of min_n,
9686         max_degree.  Only deals with one `calc' routine instead of two
9687         flavors.
9688         (precalc) Eliminated redundancy.  Updated for changes to
9689         descriptives_proc structure.
9690         (calc) Moved here from `descript.g'.  Rewritten to calculate
9691         statistics via `moments about the mean' rather than by summing,
9692         summing squares, summing cubes, and so on.
9693         (postcalc) Rewritten for new-style statistical calculation.
9694         (display) Removed support for displaying variables across rows.
9695         No longer crushes the descriptives table.  Removed ancient code.
9696         Added display of N, by variable and listwise.
9697
9698         * descript.g: Removed; merged into `descript.q'.
9699
9700         * expr-evl.c: (evaluate_expression) Now returns a double.  For
9701         numeric results, it returns the result as well as storing it in
9702         the passed `value' structure if non-NULL.  For string results it
9703         just returns 0.0 and it must be passed non-NULL.  Many references
9704         to this function were optimized by use of this change, especially
9705         but not exclusively in `compute.c'.
9706
9707         * frequencies.g: Comment fix.
9708
9709         * glob.c: (glob var process_if_expr) New global var.
9710
9711         * postscript.c: (static var option_tab[]) Corrected entry for
9712         `fixed_size'.
9713         (postopen) Sets x->size to x->prop_size.
9714         (ps_text_set_font_by_name) Sets font size as well as typeface for
9715         PROP and FIXED fonts.
9716         
9717         * sel-if.c: (cmd_process_if) New function.
9718
9719         * sfm-write.c: (struct sfm_fhuser_ext) New member `n_cases'.
9720         (sfm_write_dictionary) Sets `n_cases' to 0.
9721         (sfm_write_case) Increments `n_cases'.
9722         (sfm_close) Attempts to seek the system file back to the header
9723         and write the number of cases in its proper slot.
9724
9725         * som-frnt.c: (som_insert_table) Masks off expansion options since
9726         only SOPT_X_NORM seems to work sensibly.
9727
9728         * som-low.c: (get_cell_size) Fixed bug when a table cell was sized
9729         with a `fixed' value of 2.
9730
9731         * sort.c: (cmd_sort_cases) Cancels PROCESS IF.
9732
9733         * sysfile-info.c: (cmd_sysfile_info) Doesn't display more than 10
9734         value labels; uses SOPT_NONE instead of SOPT_X_BOTH.
9735
9736         * var.h: (enum series dsc_*) Removed Fiasco extensions.
9737         (struct descriptives_proc) Removed `miss_noweight'; new members
9738         `X_bar', `M2', `M3', `M4', `min', `max'.
9739
9740         * vars-atr.c: (discard_variables) Cancels PROCESS IF.
9741
9742         * vfm.c: (close_active_file) Cancels PROCESS IF.
9743         (write_case) Doesn't process cases unselected by PROCESS IF.
9744
9745 Fri Feb 14 23:32:58 1997  Ben Pfaff  <blp@gnu.org>
9746
9747         * glob.c: (glob var err) Removed.
9748
9749         * sysfile-info.c: (cmd_sysfile_info) When adjusting table size,
9750         doesn't have to take into account number of value labels since
9751         they're in a subtable anyway.  Also, doesn't display more than 10
9752         value labels since we can't yet break pages in subtables.
9753
9754 Tue Feb  4 15:15:50 1997  Ben Pfaff  <blp@gnu.org>
9755
9756         * som-frnt.c: (som_change_table_size) Simple change for elegance
9757         that shouldn't change behavior.
9758         (som_set_value) Comment fix.
9759
9760         * som-high.c: (som_submit_table) Message fix.
9761
9762 Wed Jan 22 21:54:00 1997  Ben Pfaff  <blp@gnu.org>
9763
9764         * command.c: Added SYSFILE INFO to command table.
9765
9766         * file-handle.q: (fh_handle_filename) New function.
9767
9768         * get.c: (save_trns_proc) Fixed a bug in padding of output data
9769         with spaces.
9770
9771         * main.c: (parse) New return value for command functions, -3.
9772
9773         * misc.h: Comment fix.
9774
9775         * output.h: Comment fixes.
9776         (macro COMPONENTS) Removed.
9777
9778         * postscript.c: (write_text) Modified literal_chars[] so that `('
9779         and ')' are not written to the output in strings as literals.
9780
9781         * sfm-read.c: (sfm_read_dictionary) New argument.
9782         (read_header) New argument.  Sets the information structure's
9783         values from the header information.  
9784         (read_variables) [__CHECKER__] Redefines isalnum()--some sort of
9785         bizarre Checker problem, I guess.
9786         (read_variables) Proper cleanup on lossage.
9787
9788         * sfm.h: (struct sfm_read_info) New struct for use by
9789         sfm_read_dictionary().
9790
9791         * som-frnt.c: (som_create_table) New argument CREATE_FLAGS,
9792         currently used just for tables that can be dynamically resized and
9793         thus have to be allocated with arena_malloc() instead of
9794         arena_alloc().  All references changed.
9795         (som_change_table_size) New function.
9796         (som_insert_table) Bugfix: now inserts `cell', not `c'!
9797
9798         * som-high.c: [GLOBAL_DEBUGGING] (check_table) Moved to som-low.c.
9799         (som_submit_table) [GLOBAL_DEBUGGING] Doesn't call check_table()
9800         any more.
9801
9802         * som-low.c: (draw_cell) Calls draw_table_cell() for SCON_TABLE
9803         cells.
9804         (draw_intersection) Now takes an argument specifying the table in
9805         question.  All references changed.
9806         (draw_table_cell) New function.
9807         (som_get_table_size) [GLOBAL_DEBUGGING] Calls check_table().
9808         (som_get_table_size) Many nice new explanatory comments.
9809         [GLOBAL_DEBUGGING] (check_table) Moved here from som-high.c.
9810
9811         * som.h: New enum series SOM_CREATE_* for use as create flags with
9812         som_create_table().
9813
9814         * str.h: Moved a comment here from TODO.
9815
9816         * sysfile-info.c: New file.  Reference implementation.
9817
9818 Sun Jan 19 14:22:11 1997  Ben Pfaff  <blp@gnu.org>
9819
9820         * command.c: Added RENAME VARIABLES to table of commands.
9821
9822         * data-in.c: (dls_error) Sets `cust_field'.
9823         (parse_N) Message fix.
9824         (parse_day_count) New function.
9825         (to_roman) Never outputs VX as a `short form' of V.
9826         (parse_month) Fixed parsing of Roman numerals.
9827         (parse_trailer) Message fix.
9828         (parse_DATE, parse_ADATE, parse_EDATE, parse_SDATE, parse_JDATE,
9829         parse_QYR, parse_MOYR, parse_WKYR, parse_DTIME) Issue a message if
9830         the date is invalid.
9831         (parse_SDATE) Fixed swapped day, year.
9832         (parse_JDATE) Fixed bug for dates in 1582.
9833         (parse_DTIME) Allows days not between 1 and 31.
9834         (parse_numeric) Makes local copy of f.type for easier usage.
9835         FMT_DOLLAR fixed.
9836
9837         * data-out.c: (convert_F) When outputting as scientific, properly
9838         sets f.type as fp->type.
9839         (insert_commas) Fixed operator precedence problem with setting of
9840         nitems.  Changed strcpy to memcpy (no null terminator). 
9841         (convert_date) Fixed FMT_JDATE: added 1900 to year.
9842         (convert_CCx) Essentially rewritten, but now it works.
9843
9844         * display.c: (cmd_display) Added DISPLAY FILE LABEL (undocumented
9845         feature of Fiasco).
9846         (display_documents) Implemented.
9847
9848         * error.c: (glob var cust_field) New var.
9849         (vmsg) Displays cust_field as part of message classes DE and DW.
9850
9851         * formats.c: (debug_print) Fixed to compile under updated
9852         dictionary format.
9853
9854         * get.c: (cmd_get, cmd_save_internal) Close file handle on
9855         failure.
9856
9857         * misc.c: (parse_format_specifier) Formatting fix.
9858
9859         * modify-vars.c: (struct var_modification) Renamed `n_reorder' as
9860         `n_rename' for clarity.
9861         (cmd_modify_vars) Initializes `forward' and `positional' at
9862         appropriate times.  Frees lists of vars to rename on failure.
9863         Comment fix.  Frees memory on success.  
9864         (rearrange_dict) Simplified `for' loop condition.
9865
9866         * rename-vars.c: New file (reference implementation).
9867         
9868         * set.q: (internal_cmd_set) Fixed `emu' test condition.
9869
9870         * sfm-read.c: (read_header) File label is created only if file
9871         label in file is not blank.
9872         (read_variables) Initializes `dict' local variable.
9873         (read_documents) Proper behavior on lossage.
9874
9875         * sfm-write.c: (write_header) Doesn't blank out the file label
9876         (why was this here to begin with?!)
9877
9878         * temporary.c: (save_dictionary) File label is copied only if
9879         non-NULL.  Doesn't try to xstrdup() dictionary documents.
9880         Adapted so as to not irritate Checker.
9881         (free_dictionary) Only destroys var_by_name if non-NULL.
9882
9883         * title.c: (cmd_file_label) Doesn't skip FILE, LABEL tokens.
9884         (cmd_document) Doesn't skip DOCUMENT token.  Adds some header
9885         lines to the document, indents the document.  Also, it works now.
9886         (add_document_line) New function.
9887
9888         * var.h: (struct dictionary) Reordering.
9889
9890         * vars-prs.c: (parse_variables) On lossage, only local_free()'s
9891         bits if it was allocated to begin with.
9892
9893 Thu Jan 16 13:08:57 1997  Ben Pfaff  <blp@gnu.org>
9894
9895         * command.c: Added MODIFY VARS to list of commands.
9896
9897         * configure.in: Updated custom macros for autoconf 2.12.  Removed
9898         mmap reference; fixed termcap library reference.
9899
9900         * display.c: (display_variables) Fixed a few bugs although it's
9901         still not well written.
9902
9903         * error.c: [!__CHECKER__] (chkr_disp_call_chain) New function.
9904         (induce_segfault) Calls chkr_disp_call_chain() instead of
9905         inducing an actual SIGSEGV.
9906
9907         * expr-opt.c: (evaluate_tree) Swapped order of arguments to
9908         str_search() and str_rsearch().  Fixed tests for matches on
9909         OP_INDEX and OP_RINDEX.
9910
9911         * filename.c: (good_getcwd) Removed as the new libc for Checker
9912         doesn't contain this bug, apparently.
9913
9914         * misc.c: (str_search, str_rsearch) Changed order of arguments for
9915         consistency with GNU memmem.
9916         (blp_getdelim) Changed `len' from `int' to `size_t'.
9917
9918         * modify-vars.c: Reference implementation.
9919
9920         * som-frnt.c: (zero_length) New global var.
9921         (som_create_table) Message fix.
9922
9923         * som.h: Added gcc attributions to som_set_text(),
9924         som_output_text() prototypes.  blank_line() refers to
9925         zero_length[] instead of a literal null string to suppress gcc
9926         warnings.
9927
9928         * sort.c: (do_external_sort) Fixed fencepost error on lossage.
9929         (allocate_cases) Decrements x_max so the last element of x[] can
9930         be used by the algorithm.
9931
9932         * var.h: Changed minor details of `variable' declaration.  
9933         (struct modify_vars_proc) New struct.
9934         (struct variable) Added field p.mfv.
9935
9936         * vars-atr.c: Comment fix.
9937
9938         * vars-prs.c: (fill_all_vars) More optimal implementation.
9939
9940         * vfm.c: (dump_splits) Sets the last byte of temp_buf to a null
9941         character, which it shouldn't have to do but printf() seems to
9942         read the null byte even though I supply a maximum length...
9943
9944 Fri Jan 10 20:22:08 1997  Ben Pfaff  <blp@gnu.org>
9945
9946         * command.c: Removed command alias X for QUIT.
9947         (parse_cmd) Fixed comment parsing.
9948
9949         * dfm.c: (struct dfm_fhuser_ext) Fields `len', `size' are now of
9950         type size_t.
9951         (read_record) Fixed references to len, size.
9952         (dfm_get_record) Restructured.
9953
9954         * file-handle.h: (struct file_handle) Field `lrecl' now of type
9955         size_t.
9956
9957         * file-handle.q: (internal_cmd_file_handle) Checks for nonpositive
9958         record length.
9959
9960         * modify-vars.c: New file.  Not complete.
9961         
9962         * set.q: (set_ccx) Fixed operator precedence problem regarding ^
9963         and ==.
9964
9965         * sfm-read.c: (bswap_flt64, read_header, write_variable) Fixed
9966         problems caused by int/size_t differences.
9967
9968         * sort.c: (output_record, merge_once) Cast `size_t's to `int's in
9969         appropriate spots.
9970
9971         * str.c: (strcasecmp) Fixed bug that cropped up when the strings
9972         being compared were of equal length.
9973
9974 Thu Jan  2 19:08:23 1997  Ben Pfaff  <blp@gnu.org>
9975
9976         * command.c: Added DOCUMENT, DROP DOCUMENTS, FILE LABEL.
9977
9978         * lexer.c: (get_dotted_rest_of_line) New function.
9979
9980         * sel-if.c: (cmd_filter) Cannot choose string or scratch variables
9981         as filters.
9982
9983         * sfm-read.c: (sfm_read_dictionary) Calls read_documents() to read
9984         type 6 records.  Frees the dictionary properly.
9985         (read_header) Initializes the dictionary instead of letting
9986         read_variables() do it.  Sets the dictionary file label from the
9987         system file.
9988         (read_documents) New function.
9989
9990         * sfm-write.c: (sfm_write_dictionary) Calls write_documents() to
9991         write type 6 record if appropriate.
9992         (write_header) Writes file label from dictionary.
9993         (write_documents) New function.
9994
9995         * temporary.c: (save_dictionary, restore_dictionary,
9996         free_dictionary) Properly handle new fields in dictionary struct.
9997
9998         * title.c: (get_title) Returns after failure().
9999         (cmd_file_label, cmd_document, cmd_drop_documents) New functions
10000         for new commands FILE LABEL, DOCUMENT, DROP DOCUMENTS.  Untested.
10001
10002         * var.h: (struct dictionary) New fields `label', `n_documents',
10003         `documents'.
10004
10005 Wed Jan  1 22:08:10 1997  Ben Pfaff  <blp@gnu.org>
10006
10007         * command.c: Added FILTER to list of commands.
10008
10009         * frequencies.g: [WEIGHTING] Removed test for weighting!=-1 since
10010         it's always true.
10011
10012         * get.c: (cmd_save_internal) Removed weighting code since it's now
10013         handled by sfm-write.c.  Properly commented out debug code.
10014
10015         * glob.c: (glob var weighting) Removed.
10016
10017         * sel-if.c: Comment fixes.
10018         (cmd_filter) New function.
10019
10020         * sfm-read.c: (struct sfm_fhuser_ext) New field `weight_index'.
10021         (sfm_read_dictionary) Sets weighting variable direct in the
10022         created dictionary now.  (Apparently we previously didn't support
10023         weighting on GET?)
10024         (read_header) Sets weight_index field in sfm_fhuser_ext from
10025         header read from disk.
10026
10027         * sfm-write.c: (sfm_write_dictionary) Comment fix.
10028         (write_header) Now sets the weighting in the header from the
10029         passed primary dictionary instead of from the sfm_write_info.
10030
10031         * sfm.h: (struct sfm_write_info) Removed field `weight'.
10032
10033         * som-high.c: (dump_crush_table) Fixed a couple of assertions that
10034         broke on boundary conditions.
10035
10036         * var.h: (struct dictionary) New fields `weight_var',
10037         `weight_index', and `filter_var'.
10038         (glob var weighting) Removed.  This is now part of struct
10039         dictionary.  All references changed; the less mechanical changes
10040         are described above.
10041
10042         * vars-atr.c: (find_dict_variable) New function.
10043
10044         * vfm.c: (static var filter_index) New variable.
10045         (open_active_file) Initializes filter_index from default_dict.
10046         (write_case) Calls proc_func() only if the filter variable is
10047         nonzero; this implements FILTER behavior.
10048
10049         * weight.c: (static var weight_varname) Removed.
10050         (cmd_weight) Modified default_dict instead of glob vars.
10051         (update_weighting) Changed the signature to modify a dictionary
10052         instead of glob vars.  Now returns the weighting variable.
10053         (get_weighting_variable) Removed; its function is absorbed by
10054         update_weighting().
10055         (stop_weighting) Operates on a dictionary now.
10056
10057 Wed Jan  1 17:00:59 1997  Ben Pfaff  <blp@gnu.org>
10058
10059         * sort.c: Removed debugging info from messages.
10060         (do_external_sort) Cleans up after itself by deleting the
10061         temporary directory on failure.  (On success it is deleted by the
10062         input program.)
10063         (allocate_cases) Removed debug code.  Added clean up code.
10064         (output_record) Removed debug code.
10065         (merge) Added code to close all the input files that are currently
10066         open.  This is a likely location for bugs, because I'm not sure
10067         about boundary conditions.  Removed an unnecesary heap_delete().
10068         (merge_once) Removed input file "optimization" that in fact
10069         screwed up the rest of the code.  Message and comment fixes.
10070
10071 Sun Dec 29 21:36:48 1996  Ben Pfaff  <blp@gnu.org>
10072
10073         * error.c: [__CHECKER__] (induce_segfault) Flushes output streams.
10074
10075         * heap.c: (heap_delete) New argument.
10076
10077         * sort.c: Finished implementation of external sort.
10078
10079         * vfm.c: (read_from_disk) Returns after a disk error.
10080
10081 Sun Dec 22 23:10:39 1996  Ben Pfaff  <blp@gnu.org>
10082
10083         * sort.c: (static var state) Removed.
10084         (static vars max_handles, tmp_basename, tmp_extname,
10085         huffman_queue) New variables.
10086         (do_external_sort) Moved most code to new functions.
10087         Creates huffman_queue.
10088         (allocate_file_handles, allocate_cases) New functions.
10089         (static vars run_no, run_length, file_index, case_count) New
10090         variables. 
10091         (output_record) Returns success.  Now really writes to the output
10092         file.
10093         (begin_run, end_run) New functions.
10094         (write_initial_runs) Returns success.  Initializes run_no to -1.
10095         Calls begin_run(), end_run() at appropriate times.  Outputs debug
10096         messages.
10097         (write_to_sort_cases) Calls begin_run(), end_run() at appropriate
10098         times.
10099         (merge) New function.
10100
10101         * heap.c, heap.h: New files.  Hopefully in near-final form.
10102
10103 Sat Dec 21 21:51:04 1996  Ben Pfaff  <blp@gnu.org>
10104
10105         * glob.c: Added write_active_file to global vars.
10106
10107         * sort.c: Several new miscellaneous static variables.
10108         (cmd_sort_cases) Big comment fix.
10109         (perform_case_2) Renamed `do_external_sort' and completely
10110         rewritten.
10111         (case_2_proc_func) Removed.
10112         (output_record, write_initial_runs, write_to_sort_cases,
10113         compare_record) New functions.
10114
10115         * vfm.c: [DEBUGGING] (index_to_varname) Excised bit rot.
10116
10117 Tue Dec 17 18:57:59 1996  Ben Pfaff  <blp@gnu.org>
10118
10119         * sort.c: (perform_case_2) Changed the method for allocation of
10120         lots of memory--now allocates one case at a time in hopes that
10121         more cases can be allocated with heavily fragmented memory.
10122
10123         * var.h: (write_active_file) New global var.
10124
10125         * vfm.c: (procedure, close_active_file, write_case,
10126         SPLIT_FILE_procfunc) Now allow beginfunc, procfunc, and endfunc
10127         arguments to procedure() to be NULL.  All references to
10128         procedure() that made use of dummy functions were changed to NULL
10129         functions.
10130         (open_active_file) If write_active_file is non-NULL, the output
10131         device becomes DEV_PGM (a new enum).
10132         (close_active_file) Sets write_active_file to NULL.
10133         (read_from_memory) Comment fix.
10134         (record_case) Calls write_active_file() when the output device is
10135         DEV_PGM.
10136
10137 Sun Dec 15 15:32:16 1996  Ben Pfaff  <blp@gnu.org>
10138
10139         * sort.c: New file.
10140
10141         * autorecode.c: (cmd_autorecode) Fixed parsing of options.
10142         Fixed checking for duplicate varnames.
10143         (recode) xmalloc()'s the transformation instead of arena_alloc()'ing
10144         it.
10145         (autorecode_trns_free) Destroys hash tables for each recoding
10146         specification.
10147         (autorecode_proc_func) Compares NULL to *vpp instead of vpp.
10148
10149         * command.c: Added SORT CASES to cmd_table.
10150         (null_func, null_int_func) Prototyped.
10151
10152         * descript.g: (calc_weight, calc_noweight) Computes own case
10153         number now.
10154         
10155         * frequencies.q: (dump_statistics) Fixed problem with
10156         too-few-cases warning message.
10157
10158         * get.c: (cmd_save_internal) Handles weighting properly.
10159
10160         * hash.c: (hsh_dump) Output format changed.
10161         (force_hsh_insert) Actually works now, prototype changed.
10162
10163         * list.q: (static var case_num) New variable.
10164         (cmd_list) Initializes case_num.
10165         (list_cases) Increments case_num.
10166
10167         * var.h: Added definitions for SORT CASES.  Comment fixes.
10168
10169         * vfm.c: Some definitions moved to new file vfmP.h.  Comment
10170         fixes.  `active' renamed vfm_active, `rep' renamed
10171         vfm_replacement, all references changed.
10172         (procedure) The procfunc no longer receives a case number.  All
10173         references changed.
10174         (write_case) Subtle reordering.
10175         (SPLIT_FILE_procfunc) Counts cases differently.  Slightly less
10176         redundant.
10177
10178         * weight.c: (get_weighting_variable) New function.
10179
10180         * vfmP.h: New file with definitions from vfm.c.
10181
10182 Sat Dec 14 10:35:30 1996  Ben Pfaff  <blp@gnu.org>
10183
10184         * command.c: (FILE_TYPE_okay) Commented out some tests because
10185         they're clumsy and not yet needed.
10186
10187         * var.h: Most *_trns structures moved to their respective source
10188         files.  Some were moved into a new file, do-ifP.h.  Comment fixes.
10189         (union any_trns) Changed to a typedef for trns_header.
10190         (struct input_program_pgm) Removed.
10191
10192         * vars-prs.c: (parse_variables) Only local_free()'s bits if it
10193         was allocated in the first place.
10194
10195 Fri Dec 13 21:30:53 1996  Ben Pfaff  <blp@gnu.org>
10196
10197         * autorecode.c: New file.
10198         
10199         * command.c: Added AUTORECODE to command table; re-enabled SET.
10200
10201         * data-out.c: (convert_F) Handles infinities and NaNs properly.
10202
10203         * error.c: (vmsg) Comment fixes.
10204
10205         * hash.c: Comment fix.
10206         (hashpjw_d) New function.
10207         (hashpjw) Reimplemented as call to more general function
10208         hashpjw_d().
10209         (internal_comparison_fn) Initializes pointers properly.
10210         (hsh_sort) [GLOBAL_DEBUGGING] New debugging code.
10211         (force_hsh_insert, force_hsh_find) New debugging wrapper
10212         functions.
10213
10214         * main.c: (main) Message fix.
10215
10216         * output.c: (outp_read_devices) Message fix.
10217
10218         * set.q: Comment fixes.
10219         (custom_results) Implemented Wnd/X form of subcommand.
10220         (set_routing) New function.
10221         (internal_cmd_set) Implemented ERRORS, MESSAGES.
10222
10223         * settings.h: (SET_ROUTE_*) New enum series.
10224         (set_results) Renamed set_results_file, all references changed.
10225         (set_messages) Removed.
10226         (glob vars set_errors, set_messages, set_results) New vars.
10227
10228         * title.c: (get_title) Remembers to xstrdup() the result of
10229         get_rest_of_line().
10230
10231         * var.h: (arc_item, arc_spec, autorecode_trns) New structures for
10232         use by AUTORECODE.
10233         (union any_trns) New element `arc'.
10234
10235 Fri Dec  6 23:53:47 1996  Ben Pfaff  <blp@gnu.org>
10236
10237         * command.c: (output_line) Removed references to set_screen.
10238
10239         * error.c: (static var terminating) New var.
10240         (hcf) Sets terminating to 1.
10241         (vmsg) If terminating is nonzero, does not attempt to call hcf().
10242         This prevents an infinite loop if an error occurs within hcf().
10243
10244         * expr-evl.c: (evaluate_expression) [__CHECKER__] Replaced case
10245         statement circumlocution with `case 42000' trick.
10246         (evaluate_expression) New support for OP_STR_MIS.
10247
10248         * expr-opt.c: (evaluate_expression) [__CHECKER__] Replaced case
10249         statement circumlocution with `case 42000' trick.
10250         (dump_node) Handles OP_STR_MIS.
10251
10252         * expr-prs.c: (MISSING_func, SYSMIS_func) Rewrote to handle string
10253         variables exceptions.
10254         (parse_function) Message fix.
10255         (ops[]) Added OP_STR_MIS.
10256
10257         * expr.h: Added OP_STR_MIS to OP_* enum.  Comment fixes.
10258
10259         * exprP.h: [__CHECKER__] Removed case statement circumlocution.
10260
10261         * glob.c: Removed set_scrnfile glob var.
10262         (init_glob) set_errorbreak set to 0 by default.
10263
10264         * groff-font.c: Changed included files.
10265         (groff_read_font) Initializes font_arena local var correctly.
10266         (default_font) New function.
10267
10268         * output.c: Comment fixes.
10269         (glob var disabled_devices) New variable.
10270         [GLOBAL_DEBUGGING] (static var iterating_driver_list) New
10271         variable.
10272         [GLOBAL_DEBUGGING] (reentrancy) New function.
10273         [GLOBAL_DEBUGGING] (outp_read_devices, outp_done, find_driver,
10274         outp_iterate_enabled_drivers) Calls to reentrancy().
10275         (destroy_list) New function.
10276         (outp_done) Moved code to destroy_list().
10277         (parse_options) Parses `listing', `screen', `printer' options
10278         internally.
10279         (configure_driver) Sets new `device' member of driver.
10280         (outp_iterate_enabled_drivers, outp_enable_device) New functions.
10281
10282         * output.h: Comment fixes.  New enum series OUTP_DEV_*.
10283         (struct outp_driver_struct) New member `device'.
10284
10285         * postscript.c: (find_encoding_file) Doesn't display its own error
10286         messages.
10287         (default_encoding) New function.
10288         (switch_font) Calls default_encoding() if no encoding can be
10289         found.
10290         (text) Makes up a character metric if none exists for the desired
10291         character.
10292         (load_font) Properly copies a fallback filename.  Calls
10293         default_font() for a font if none at all are known.
10294
10295         * set.q: Comment fixes.  Removed OUTPUT subcommand.
10296         (custom_listing) Calls outp_enable_device() to enable/disable
10297         listing device.
10298         (turn_screen_on) Removed.
10299         (internal_cmd_set) Calls outp_enable_device() to enable/disable
10300         screen, printer devices.
10301
10302         * settings.h: Comment fixes.
10303         (glob vars set_output, set_printer, set_screen, set_scrnfile)
10304         Removed.
10305
10306         * som-high.c: (som_submit_table, som_eject_page) Use
10307         outp_iterate_enabled_drivers() instead of iterating
10308         outp_driver_list directly.
10309
10310 Wed Dec  4 21:34:17 1996  Ben Pfaff  <blp@gnu.org>
10311
10312         * data-in.c: (parse_EDATE, parse_SDATE) New functions.
10313         (parse_string_as_format) Handles new formats.
10314         (parse_numeric) Now handles DOT and PCT formats.
10315
10316         * data-out.c: (convert_E, convert_F, insert_commas) Handle DOT
10317         format now.
10318         (convert_date) Handle EDATE and SDATE formats.
10319         (convert_CCx) Now if there's not room for the currency characters,
10320         converts it as F format if it's positive instead of giving up
10321         quickly.  Also fixed save-and-restore bug with decimal point
10322         characters.  
10323         (convert_format_to_string) Handles new formats.
10324
10325         * misc.c: (formats[]) Added new formats.
10326         (convert_fmt_ItoO) Supports new formats.
10327
10328         * sfm-read.c: (parse_format_spec) Supports new formats.  Better
10329         data checking.  New argument, all references changed.
10330
10331         * sfm-write.c: (write_format_spec) Supports new formats.
10332
10333         * var.h: New formats FMT_DOT, FMT_PCT, FMT_EDATE, FMT_SDATE.
10334         Comment fixes.
10335
10336 Sun Dec  1 17:19:00 1996  Ben Pfaff  <blp@gnu.org>
10337
10338         * cmdline.c: Comment fixes.
10339         (parse_command_line) Changed return type to void.
10340
10341         * data-in.c: (parse_string_as_format) Added FMT_CCA...FMT_CCE to
10342         switch.
10343         (parse_numeric) Handles international numbers (comma as decimal
10344         point).  Some reformatting.
10345
10346         * data-list.c: (parse_free) Default output format is now
10347         set_format instead of hard-coded F8.2.
10348         (read_from_data_list_list) Emits error message on undefined data
10349         only if set_undefined is nonzero.
10350
10351         * data-out.c: (convert_E) Changes decimal point from period to
10352         comma if appropriate.  Restructured.  Better comments.
10353         (convert_F) Changes decimal point from period to comma if
10354         appropriate.
10355         (insert_commas) Major bug with handling of negative values fixed.
10356         Also, inserts periods instead of commas if appropriate.
10357         (convert_CCx) New function.
10358         (convert_format_to_string) Added FMT_CCA...FMT_CCE to switch.
10359         (num_to_string) Changed `.' to set_decimal.
10360
10361         * dfm.c: Comment fixes.
10362         (dfm_close) Frees ext->line even in inline_file.
10363         (open_inline_file) New function.
10364         (open_file_r) When opening the inline file: now properly
10365         recognizes `BEGIN DATA.' line, and calls open_inline_file() to
10366         finish up.
10367         (read_record) Calls fh_close_handle() instead of dfm_close() to
10368         close the inline file.  Makes a copy of the line getl_buf to avoid
10369         interlock problems.
10370         (dfm_get_record) Restructured.  Now checks the return value of
10371         open_file_r().
10372         (cmd_begin_data) Moved open code into open_inline_file().  Relaxed
10373         checking for use of inline file.  No longer tries to close inline
10374         file.
10375
10376         * error.c: (glob var error_already_flagged) New var.
10377         (vmsg) Message change.  Now checks max number of errors/warnings,
10378         acts on it.
10379
10380         * file-handle.q: (fh_handle_name) Now allows closing of
10381         inline_file.
10382         (fh_init_files) Reformatted.
10383
10384         * get.c: (trim_dictionary) Checks SCOMP option instead of COMP.
10385
10386         * getline.c: (getl_include) Fixed bug that popped up when called
10387         when file queue was empty.
10388         (read_console) Resets error_count, warning_count,
10389         error_already_flagged to zero.
10390
10391         * glob.c: Many changes to update list of variables.
10392         (init_compat_dependent) Now this function is called whenever
10393         `compat' changes.  It now sets set_seed only if it hasn't
10394         previously been referenced.  It now calls
10395         lex_init_compat_dependent().
10396
10397         * include.c: (cmd_include_at) Frees temporary buffer instead of
10398         line buffer.  
10399         (cmd_include) Doesn't make copy of include file name.
10400
10401         * lexer.c: Comment fixes.
10402         (init_lex) Moved some code into new function
10403         lex_init_compat_dependent().
10404         (lex_init_compat_dependent) New function.
10405         (hex_val) Simplified.
10406         (preprocess_line) Uses set_endcmd instead of hardcoding `.'.
10407
10408         * main.c: Comment fixes.
10409         (main) Reformatted.
10410
10411         * misc.c: (formats[]) Added FMT_CCA...FMT_CCE.
10412         (check_input_specifier) Disallows FMT_CCA...FMT_CCE.
10413         (convert_fmt_ItoO) Detects FMT_CCA...FMT_CCE.
10414         (setup_randomize) Sets set_seed_used.
10415
10416         * set.q: Comment fixes.
10417         (custom_results) Conditionalizes on `compat'.
10418         (custom_log) Calls custom_journal().
10419         (set_ccx) New function.
10420         (cmd_set) Calls init_compat_dependent() when `compat' changes.
10421         Calls set_ccx() to handle CCA...CCE.  Sets set_grouping
10422         when set_decimal changes.  Range-checks values for MITERATE,
10423         MNEST.  Message fixes.
10424
10425         * settings.h: Comment fixes.
10426         (struct set_cust_currency) New struct.
10427         (set_cc[], set_grouping, set_seed_used) New global vars.
10428
10429         * var.h: (FMT_CCA...FMT_CCE) New output formats.
10430         (FCAT_OUTPUT_ONLY) New FCAT_* constant.
10431
10432 Thu Nov 28 23:14:07 1996  Ben Pfaff  <blp@gnu.org>
10433
10434         * glob.c: Revised variables to correspond to settings.h.
10435         (init_glob) Initializes variables from settings.h properly.
10436
10437         * set.q: Began long-overdue major revision to correspond to new
10438         philosophy.  Most code changed. 
10439
10440         * settings.h: Mostly changed; reorganized, reordered, large new
10441         comment.
10442
10443 Thu Nov 28 19:46:10 1996  Ben Pfaff  <blp@gnu.org>
10444
10445         * get.c: (cmd_save_internal) No longer forces compression off.
10446
10447         * sfm-read.c: (read_compressed_data) If eof is reached when
10448         reading a new instruction octet, only signal error if we're in the
10449         middle of a case.
10450
10451         * sfm-write.c: (COMPRESSION_BIAS) New #define.
10452         (struct sfm_fhuser_ext) New member `end'.
10453         (write_header) Refers to COMPRESSION_BIAS instead of magic 100.0.
10454         (ensure_buf_space) New function.
10455         (sfm_write_case) Reimplemented in order to support compression.
10456         (sfm_close) Writes out the remaining contents of the compression
10457         buffer if any.
10458
10459 Wed Nov 27 23:18:35 1996  Ben Pfaff  <blp@gnu.org>
10460
10461         * command.c: Defined SAVE and XSAVE commands in command table.
10462
10463         * common.h: second_lowest_value is of type flt64, not double.
10464
10465         * file-handle.h: Comment fix.
10466
10467         * get.c: Comment fixes.
10468         (static var `trns') New.
10469         (save_write_case_func, save_trns_proc, save_trns_free, null_func,
10470         cmd_save_internal, cmd_save, cmd_xsave) New functions.
10471         (dict_delete_run) Clears the variables and frees them now.
10472         (trim_dictionary) Sets default for compression.
10473         On KEEP subcommand, frees deleted variables as well as clearing
10474         them.  Finally got the sense of the test for deleting all
10475         variables correct.
10476         [DEBUGGING] (dump_dict_variables) Message fix.
10477
10478         * glob.c: (init_glob) set_compression set to 1 by default.
10479
10480         * list.q: Properly #includes config.h.
10481
10482         * misc.h: New macro REM_RND_UP.
10483
10484         * settings.h: Comment fix.
10485
10486         * sfm-read.c: (structs sysfile_header, sysfile_format,
10487         sysfile_variable; inline function bswap_int32) Moved to new file
10488         sfmP.h.
10489         (corrupt_msg) [__CHECKER__] No longer induces segfault.
10490         (sfm_read_dictionary) Fixed bug caused by failing to initialize
10491         var_by_index.
10492         (read_machine_flt64_info) Fixed some problems caused by confusion
10493         between flt64 and double types.
10494         (read_header) Message fix.
10495         (read_variables) Fixed set of cases in which we byte-swap sv.print
10496         and sv.write.  Fixed confusion of flt64 and double.
10497
10498         * sfm.h: (struct sfm_write_info) New.
10499
10500         * som-high.c: (som_draw_title) Properly frees `s'.
10501
10502         * temporary.c: (save_dictionary) Comment fix.
10503
10504         * var.h: Comment fixes.  New FMT_* enum, FMT_NUMBER_OF_FORMATS.
10505         (struct trns_header) Formatting fix.
10506         (struct save_trns) New.
10507
10508         * vars-atr.c: (discard_variables) Comment fix.
10509
10510         * sfm-write.c: New file, baseline release.
10511
10512         * sfmP.h: New file, baseline release.
10513
10514 Sun Nov 24 14:53:53 1996  Ben Pfaff  <blp@gnu.org>
10515
10516         * cmdline.c: (parse_command_line) `--version' output updated.
10517         (glob var syntax_message[]) Added my e-mail address.
10518
10519         * file-handle.q, lexer.c, vfm.c: Changed many instances of
10520         `illegal' to `invalid'.
10521
10522         * sfm-read.c: (struct sfm_fhuser_ext) New fields used as
10523         uncompression buffer.
10524         (sfm_close) Frees decompression buffer.
10525         (sfm_read_dictionary) Initializes decompression buffer.
10526         (buffer_input, read_compressed_data) New functions.
10527         (sfm_read_case) Restructured; now calls read_compressed_data() to
10528         handle compressed system file data.
10529
10530         * var.h: Comment fix.
10531
10532 Mon Nov 11 15:34:09 1996  Ben Pfaff  <blp@gnu.org>
10533
10534         * dfm.c: (dfm_close) Does not set h->{ext,class} because the
10535         caller handles it.
10536          
10537         * get.c: New comments.  New static var `get_file'.
10538         (cmd_get) Now fully implemented.  Calls discard_variables();
10539         initializes fv and lv for all variables; new debug code; sets
10540         up the dictionary; sets up the input program.
10541         (read_from_get, cancel_get) New functions.
10542
10543         * sfm-read.c: Comment fixes.
10544         (sfm_close) New static function.
10545         (sfm_read_dictionary) Properly sets up the class of the
10546         file_handle.  No longer cares what size the data is in records of
10547         type 7.  Also, on failure, properly cleans up the file_handle and
10548         free()s some stuff.
10549         (read_variables) No longer thinks it knows `nval' of the
10550         dictionary.  Now sets p.get.fv, etc., instead of speculatively
10551         setting fv itself.
10552         (read_value_labels) Fixed off-by-one error in indexing of
10553         var_by_index[].
10554         (sfm_read_case) New function.
10555         (sfm_r_class) New static var.
10556
10557         * var.h: (get_proc) New struct.
10558         (struct variable) New member p.get.
10559
10560 Thu Nov  7 20:52:28 1996  Ben Pfaff  <blp@gnu.org>
10561
10562         * get.c: Removed GTSV_OPT_MAP because of a misinterpretation of
10563         the manual's meaning.
10564         (rename_variables) New function.
10565         (trim_variables) Doesn't try to parse MAP any more.  Removed debug
10566         code.  Now properly reorders the dictionary on the KEEP keyword.
10567
10568         * sfm-read.c: (read_value_labels) Fixed some bugs regarding
10569         garbage collection.
10570
10571         * vars-atr.c: (clear_variable) New argument `dictionary *'.
10572         (rename_variable) New function.
10573         (free_val_lab) Reformatted.
10574
10575 Thu Nov  7 17:29:16 1996  Ben Pfaff  <blp@gnu.org>
10576
10577         * var.h: Reindented entire file.  Comment fixes.
10578         (glob vars var, var_by_name, nvar, N, nval, n_splits, splits)
10579         Removed.
10580         (glob var default_dict) New.
10581         (struct indirect_dictionary) Removed.
10582
10583         * Many other source files were changed to add `default_dict.'
10584         before all references to the dictionary of the active file.
10585         
10586         * vars-atr.c: (make_indirect_dictionary) Removed.
10587
10588         * glob.c: Reindented all variable declarations.  Updated for
10589         changed var.h.  Comment fixes.
10590
10591         * temporary.c: (restore_dictionary, save_dictionary) Simplified
10592         because now we can mainly copy dictionary structs.
10593
10594         * vars-prs.c: (is_dict_varname, parse_dict_variable,
10595         parse_variables) Takes dictionary instead of indirect_dictionary
10596         first argument.
10597         (parse_variables) Instead of calling make_indirect_dictionary,
10598         just sets DICT to &default_dict if DICT is NULL.  Of course, lots
10599         of `*dict.' references had to be changed to `dict->'.  Removed
10600         debug code.
10601
10602 Thu Nov  7 15:48:52 1996  Ben Pfaff  <blp@gnu.org>
10603
10604         * get.c: Added GTSV_OPT_* series of enums.
10605         (trim_dictionary, dict_delete_run) New functions.
10606         [DEBUGGING] (dump_dict_variables) New function.
10607         (cmd_get) Calls trim_dictionary() to get dictionary fully set-up.
10608         [DEBUGGING] Calls dump_dict_variables() to display results.
10609
10610         * glob.c: (cmp_variable) Now a public function declared in var.h.
10611
10612         * sfm-read.c: Turned off debug code.  Comment fixes.
10613         (read_machine_int32_info, read_machine_flt64_info) New functions
10614         to parse type 7 records.
10615         (sfm_read_dictionary) Properly byteswaps several fields now.
10616         Calls read_machine_*_info() to parse type 7 subtypes 3 and 4
10617         records.  [DEBUGGING] Dumps dictionary.
10618         (read_variables) Sets `index' field of variables created properly.
10619         Constructs avl tree of variables in dictionary.  [DEBUGGING] No
10620         longer dumps dictionary.
10621         (read_value_labels) Properly byteswaps fields.  [DEBUGGING] New
10622         debug code.
10623         [DEBUGGING] (dump_dictionary) No longer stubbed out.
10624
10625         * temporary.c: (restore_dictionary) Destroys `var_by_name' glob
10626         var before destroying any variables just to save a little time.
10627
10628         * var.h: (struct variable) Reordered in order to make name[] the
10629         first member; this makes pointers to `variable' pointers to the
10630         variable name, simplifying avl trees, etc.
10631         (struct indirect_dictionary) New struct.
10632
10633         * vars-atr.c: (find_variable) Rewritten for efficiency.
10634         (make_indirect_dictionary, is_dict_varname, parse_dict_variable)
10635         New functions.
10636         (is_varname) Rewritten for efficiency.
10637         (parse_variables) New argument, which is a `dictionary *'.  All
10638         references changed.  This function now reads variable names from
10639         the dictionary passed, or from the default dictionary if NULL.
10640
10641 Tue Nov  5 18:34:59 1996  Ben Pfaff  <blp@gnu.org>
10642
10643         * misc.h: Added new macro DIV_RND_UP to perform integer division,
10644         rounding up.  Changed many references to ROUND_UP to use this
10645         instead.
10646
10647         * sfm-read.c: Includes avl.h.
10648         (corrupt_msg) Induces a segfault under Checker.
10649         (macro assertive_bufread) New.  Many references to bufread() now
10650         use this instead.
10651         (sfm_read_dictionary) Split up into several functions.  Added code
10652         to read dictionary records following the the type 2 records.  Not
10653         quite complete.  New variable `var_by_index'.
10654         (read_header, read_variables) New functions extracted from
10655         sfm_read_dictionary().
10656         (read_value_labels) New function.
10657         (bufread) Checks ferror() if fread() doesn't return the expected
10658         value; if ferror() is zero it's just EOF.
10659         (dump_dictionary) Stubbed out.
10660
10661         * BTW: The source code now exceeds 50000 lines!
10662         
10663 Mon Nov  4 22:03:28 1996  Ben Pfaff  <blp@gnu.org>
10664
10665         * command.c: Added GET to cmd_table[].
10666
10667         * list.q: Removed reference to alloca headers.
10668         (cmd_list) Gave prototype.
10669
10670         * sfm-read.c: Added DEBUGGING comments.
10671         (sfm_read_dictionary) Checks bias correctly.  Sets
10672         dict->var_by_name to NULL.  Calculates long_string_count
10673         correctly.  realloc's dict->var[] array to minimum size.
10674         [DEBUGGING] Calls dump_dictionary.
10675         [DEBUGGING] (dump_dictionary) New function.
10676
10677         * temporary.c: (save_dictionary) Sets var_by_name to NULL.
10678         (restore_dictionary) If the dictionary contains a non-NULL
10679         var_by_name, uses that instead of generating one.
10680         (free_dictionary) Destroys var_by_name.
10681
10682         * var.h: (struct dictionary) Added field `var_by_name'.
10683
10684         * get.c: New file, not complete.
10685
10686 Sun Nov  3 12:24:36 1996  Ben Pfaff  <blp@gnu.org>
10687
10688         * mis-val.c: New enums MV_NOR_*.  New struct num_or_range.
10689         (parse_num_or_range) New function.
10690         (parse_numeric) Reimplemented in order to support LOW THRU <n> and
10691         <n> THRU HIGH missing values.
10692
10693         * output.h: [__GNUC__>1 && __OPTIMIZE__] (width, height) Made
10694         __attribute__((const)).
10695
10696         * q2c.c: (get_token) Merged isdigit || isalpha into isalnum.
10697
10698         * sfm-read.c: Finished reference implementation.
10699
10700         * sfm.h: Includes var.h.
10701
10702         * var.h: Comment fixes.
10703         (struct `variable') Reordered some fields.
10704
10705         * vars-atr.c: (is_num_user_missing) Added support for MISSING_*
10706         constants added previously.
10707
10708 Wed Oct 30 17:13:08 1996  Ben Pfaff  <blp@gnu.org>
10709
10710         * common.h: Comment fixes.  Added declaration of
10711         `second_lowest_value' as variable or macro.  Made `compat_type',
10712         `pgm_state_type' into anonymous enums.
10713
10714         * display.c: Comment fix.
10715
10716         * glob.c: [ENDIAN==UNKNOWN] Added definition for `endian' global
10717         var.
10718         [!defined SECOND_LOWEST_VALUE] Added definition for
10719         `second_lowest_value' global var.
10720         (compat, pgm_state global vars) Changed types to `int'.
10721         (init_glob) Initializes `second_lowest_value'.
10722
10723         * sfm-read.c: Continued work, not complete.
10724
10725         * var.h: Added new MISSING_* constants to handle LOWEST and
10726         HIGHEST.
10727
10728 Sat Oct 26 23:06:06 1996  Ben Pfaff  <blp@gnu.org>
10729
10730         * sfm-read.c: New file, not complete.
10731
10732         * cases.c: (vec_insert) Changed vector expansion algorithm.
10733         (vec_delete) Fixed bug that screwed up deletion sometimes, it was
10734         mucking up the RECODE transformation in particular.
10735         (envector) Harmless change in notation.
10736
10737         dfm is now fairly well tested again.  
10738         * dfm.c: (dfm_get_record) Only returns ext->ptr if ext is
10739         non-NULL--duh.
10740         (cmd_begin_data) if(ext->line) replaced by if(ext && ext->line).
10741
10742         * recode.c: Comment fix.
10743
10744         * sfm.h: Interface should be fairly final now, or at least for a
10745         day or so...
10746
10747         * vfm.c: [DEBUGGING] (index_to_varname) New function.
10748         (open_active_file) [DEBUGGING] Translates ccase indices into
10749         variable names now to make it easier to understand what's really
10750         going on.
10751
10752 Sat Oct 26 20:46:31 1996  Ben Pfaff  <blp@gnu.org>
10753
10754         * data-in.c: Comment fix.
10755
10756         * data-list.c: Includes dfm.h.
10757         (do_reading) Uses new function dfm_push_cust().
10758
10759         * data-out.c: (convert_time, convert_WKDAY, convert_MONTH) Added
10760         `return 1;' at end.
10761
10762         * file-handle.h: Completely changed.  Some parts split off into
10763         new file dfm.h.  Implemented in file-handle.q.
10764         (enum FH_*) Removed.
10765         (struct fh_ext_class) New struct.
10766         (struct file_handle) Retained only these fields: name, norm_fn,
10767         fn, recform, lrecl, mode.  New fields class, ext.
10768         (get_handle_by_name, get_handle_by_filename, parse_file_handle,
10769         close_handle, handle_name) Added `fh_' prefix to name, all
10770         references changed.
10771
10772         * dfm.h: New file, implemented in dfm.c.
10773         (get_record, put_record, fwd_record, bkwd_record, set_record,
10774         get_cur_col) Functions moved from file-handle.h, now prefixed with
10775         `dfm_'.
10776         (dfm_push_cust) New function.
10777
10778         * sfm.h: New file.  Incomplete.
10779
10780         * dfm.c: All functions adjusted/rewritten for new dfm/fhp
10781         interface.  Functions reordered, comments changed.  Not well
10782         tested, probably full of bugs.
10783         (struct dfm_fhuser_ext) New struct.
10784         (dfm_close) New function.
10785         (open_file_r) Pickier about finding `BEGIN DATA.' line.
10786         (open_file_w) User messages changed.
10787         (get_record) Comment fixed.
10788         (read_record) Increments ext->ln even for inline_file.  Calls
10789         dfm_close() for inline_file when `END DATA.' encountered.
10790         (dfm_get_record) Experimental restructuring.
10791         (dfm_push_cust) New function.
10792         (cmd_begin_data) Detects whether the inline file was fully read by
10793         checking whether it is still open; detects whether it was read at
10794         all by checking whether the line number is greater than zero.
10795
10796         * file-handle.q: All functions adjust/rewritten for new dfm/fhp
10797         interface.  Functions reordered, comments changed.  Not well
10798         tested, probably full of bugs.
10799         (init_file_handle) Removed initializers for obsolete fields, added
10800         new fields.
10801         (fh_close_handle) Much simpler, now mainly calls the class
10802         function.
10803         (fh_init_files) Renamed inline file internal filename.
10804
10805         * file-type.c: Includes dfm.h.
10806         (read_from_file_type) Doesn't use dfm internal state anymore.
10807
10808         * inpt-pgm.c, print.c: Include dfm.h.
10809
10810         * recode.c: (internal_cmd_recode) Casts strlen() return value to
10811         int in comparison with other int.
10812
10813         * som-high.c: (build_target) Fixed operator precedence problem in
10814         if statement (& versus ==).
10815
10816 Sat Oct 26 10:39:25 1996  Ben Pfaff  <blp@gnu.org>
10817
10818         * dfm.c: (read_record) Can now read fixed-length records; not
10819         tested.
10820         (put_record) Can now write fixed-length records; not tested.
10821
10822         * file-handle.h: FH_* defines changed to enums.  New enum series
10823         FH_RF_*, FH_MD_*.
10824         (struct file_handle) New members recform, lrecl, mode.
10825
10826         * file-handle.q: Parser changed.
10827         (internal_cmd_file_handle) Added support for new /RECFORM, /MODE,
10828         /LRECL subcommands.  These are compatible with Windows.
10829         (init_file_handle) Initializes recform, mode fields.
10830
10831         * q2c.c: (get_line) When outputting `!' comment lines, now
10832         increments the output file line number so that `#line' directives
10833         are correct.
10834         (make_identifier) New function that converts an arbitrary string
10835         into a valid C identifier.
10836         (dump_vars) Calls make_identifier() in two places in order to
10837         suppress some errors for bad identifiers.
10838         (make_match) Allows TRUE as synonym for YES and FALSE as synonym
10839         for NO.  Allows numbers to be prefixed by underscores to make them
10840         acceptable C identifiers but still to be parsed as numbers by the
10841         Fiasco lexer.
10842
10843 Thu Oct 24 20:13:42 1996  Ben Pfaff  <blp@gnu.org>
10844
10845         * command.c: Re-enabled RECODE, SAMPLE, SELECT IF.
10846         
10847         * dfm.c: Comment fixes. (get_record) Gives error if file handle
10848         was opened for writing.
10849         (open_file_w) New function.
10850         (read_record) Uses strncasecmp if available.  Improved error
10851         messages, comments.
10852         (put_record) New function.
10853
10854         * file-handle.h: Moved function comments into dfm.c and
10855         file-handle.q.  Comment fixes.  Removed declarations of
10856         tilde_expand() and normalize_filename().
10857         (struct file_handle) Changed `open' from boolean to enumerated
10858         field to allow for three states--closed, open for reading, open
10859         for writing--all references changed.
10860
10861         * file-handle.q: Includes filename.h.
10862
10863         * print.c: (CMD_* enums) Renamed PRT_* and moved into var.h; all
10864         references changed.
10865         (alloc_line) Makes allowance for line terminator characters in
10866         calculations.
10867         (print_trns_proc) Now handles OUTFILE, WRITE differences.
10868         (print_space_trns_proc) Handles OUTFILE differences.
10869
10870         * recode.c, sample.c: Comment fixes.
10871
10872         * var.h: (struct print_trns) Changed boolean field `eject' to
10873         bitmapped field `options'; all references changed.  New enums
10874         PRT_* for use with this field.
10875
10876         * exception.h, test-exception.c: Removed.
10877
10878 Thu Oct 24 17:47:14 1996  Ben Pfaff  <blp@gnu.org>
10879
10880         * ascii.c: (delineate) Turned off debug output.
10881
10882         * common.c: [Checker and Linux] (__assert_fail, __eprintf) Moved
10883         to error.c.
10884
10885         * data-in.c: (parse_string_as_format) Sets the entire string value
10886         to spaces, not just the short string part of it.  Is this correct
10887         now? 
10888
10889         * data-out.c: (convert_date) Fixed DATETIME format problems with
10890         decimal places, removed debug code.
10891
10892         * dfm.c: (open_file_r) Fixed bug where an error would occur in the
10893         middle of parsing BEGIN DATA that would cause the lexer to read
10894         from a wild pointer `prog'; now calls new function
10895         preprocess_line() in lexer.c.
10896
10897         * error.c: [__CHECKER__] (hcf) Calls induce_segfault() on improper
10898         termination.
10899         [Checker and Linux] (__assert_fail, _eprintf) Moved from common.c.
10900         Now call induce_segfault() to induce the segfault.
10901         (induce_segfault) New function.
10902
10903         * expr-opt.c: Comment fix.
10904         (parse_sysvar) New function.
10905         (parse_primary) Added system variable support--calls
10906         parse_sysvar().
10907         (global var ops) Added OP_CASENUM operator.
10908
10909         * expr.h: Comment fixes.
10910         (OP_* enum) added OP_CASENUM operator.
10911         (struct casenum_node) New struct.
10912         (union any_union_union) New member `cas' of type `casenum_node'.
10913
10914         * glob.c: (global var last_vfm_invocation) New var.
10915         (init_glob) Initializes last_vfm_invocation.
10916
10917         * lexer.c: (lookahead) Fixed reversed condition on if statement.
10918
10919         * getline.c: (get_line) Split into get_line() and preprocess_line().
10920         (preprocess_line) New function.
10921
10922         * var.h: Declares last_vfm_invocation.
10923
10924         * vfm.c: (procedure) Sets last_vfm_invocation.
10925
10926 Wed Oct 23 21:53:43 1996  Ben Pfaff  <blp@gnu.org>
10927
10928         * command.c: (parse_cmd) Fixed bad assertion related to
10929         lookahead().
10930
10931         * data-in.c: (parse_month) Implemented to parse months according
10932         to full interpretation of standard.
10933         (to_roman) New function.
10934         (parse_wk_delimiter) Bug fix (forgot to skip `WK' in string).
10935         (parse_weekday) Bug fix (forgot to skip all the day name).
10936
10937         * data-list.c: (read_from_data_list_fixed) Fixed bug that screwed
10938         up parsing of multirecord data items.  Also fixed user message.
10939
10940         * data-out.c: Comment fix.
10941         (year2, year4, convert_date, convert_time, convert_WKDAY,
10942         convert_MONTH) New functions to support time & date output.
10943         (convert_format_to_string) Calls new time & date output routines.
10944
10945         * expr-prs.c: (nary_num_func) Found a bug, but didn't fix it yet.
10946
10947         * lexer.c: (lookahead) Noted a previously unnoticed caveat in
10948         comment.
10949
10950         * main.c: [DEBUGGING] (dump_token) Updated to handle getline.h.
10951
10952         * misc.c: (global var formats) Fixed declarations of DATETIME,
10953         TIME, DTIME.
10954
10955         * postscript.c: (text) Fixed a pair of bugs in the reallocation of
10956         the output_char buffer.
10957
10958         * vars-prs.c: (parse_DATA_LIST_vars) Fixed a failure to free
10959         memory bug.  Fixed user messages.
10960
10961 Tue Oct 22 17:27:04 1996  Ben Pfaff  <blp@gnu.org>
10962
10963         * Removed #pragma argsused from lots of places.
10964         
10965         * data-in.c: Implemented zoned decimal and time-date formats.
10966         Untested.  This is a huge chunk of code--maybe 1000 lines and 50
10967         new functions.
10968
10969         * data-out.c: Implemented zoned decimal format.
10970
10971         * expr.h: Moved yrmoda() declaration here from exprP.h.
10972
10973         * misc.c: (global var formats) Minor fixes--added
10974         FCAT_SHIFT_DECIMAL to formats N and Z.
10975         (convert_fmt_ItoO) Added support for format Z.
10976
10977         * som-frnt.c: (som_set_value) Fixed bug regarding string values.
10978
10979 Mon Oct 21 20:39:59 1996  Ben Pfaff  <blp@gnu.org>
10980
10981         * command.c: (parse_cmd) [GLOBAL_DEBUGGING] Inserted call to
10982         som_check_workspace() that is activated between commands.
10983
10984         * data-list.c: (dump_fixed_table, dump_free_table) Finished these
10985         for good, I hope.
10986
10987         * list.q: (begin_row) Changed title expansion style from
10988         SOPT_X_VERT to SOPT_X_SHSP.
10989
10990         * som-frnt.c: Now includes `somP.h'.
10991         (som_push_workspace, som_pop_workspace) New functions that, taken
10992         together, form a solution to the recursive table building problem
10993         mentioned yesterday.  Surrounded every table output routine
10994         throughout the program with calls to these functions.
10995         [GLOBAL_DEBUGGING] (som_check_workspace) New function.
10996         (som_create_table) Checks that there's an active workspace.
10997         (som_destroy_all_tables, som_crush) Removed.
10998
10999         * som-high.c: (global var som_preserve_tables) Removed, all
11000         references deleted.
11001         (som_submit_table) Checks that there's an active workspace.
11002         (dump_columnated_table) Doesn't columnate tables that would have
11003         just one row per column.
11004         (dump_crush_page, som_dump_crush_page) Removed debugging code.
11005         (som_dump_crush_page) Moved row number labels from left side of
11006         tables to right side.
11007         (som_get_table_size) Added support for SOPT_X_SHSP.
11008
11009         * som.h: New cell expansion type SOPT_X_SHSP.
11010
11011         * somP.h: (global vars arena_stack, n_arena_stack, m_arena_stack)
11012         New vars.
11013         (global var curtab_arena) Moved from som-frnt.c.
11014
11015 Sun Oct 20 13:45:28 1996  Ben Pfaff  <blp@gnu.org>
11016
11017         * ascii.c: [GLOBAL_DEBUGGING] (SUPPRESS_WARNINGS) New debug option
11018         that causes bad location warnings to be suppressed.
11019         (delineate) Saves current font when calling draw_text(); fixed
11020         handling of NULLs when backing up.  Also fixed line-wrapping bug.
11021
11022         * command.c: Re-enabled `LEAVE', `NUMERIC', `PRINT', `PRINT EJECT',
11023         `PRINT FORMATS', `PRINT SPACE', `STRING', `TITLE', `WRITE'.
11024
11025         * common.c: Added code to cause assertion failure to dump core
11026         when run under Checker.
11027
11028         * data-list.c: (dump_fixed_table) Fixed some inconsistencies, but
11029         there are still bugs.
11030
11031         * glob.c: (__eprintf) Removed.
11032
11033         * list.q: Inserted som_preserve_tables kluge that prevents tables
11034         from being thrown away due to recursive table building through
11035         som_output_line being called from a transformation during the LIST
11036         procedure invocation.  This is a general problem that must be
11037         solved in a better way since it applies to all procedures in
11038         general.
11039         (begin_row) Changed title options to SOM_X_VERT from SOM_X_BOTH.
11040         (flush_table) Removed SOM_TOPT_PRESERVE from submission options.
11041
11042         * numeric.c: Fixed several errors in the form of msg() calls.
11043
11044         * print.c: Updated for use of som.
11045         (dump_table) Reimplemented.
11046         (print_trns_proc) Calls som_eject_page() instead of eject_page().
11047         Calls som_output_text() instead of outs_line().
11048
11049         * som-frnt.c: (som_destroy_all_tables) Sets som_preserve_tables to
11050         0.
11051         (som_output_text) Function moved from som-low.c.  Interface
11052         changed.
11053
11054         * som-high.c: (som_preserve_tables) New global public variable
11055         declared in som.h.
11056         (som_submit_table) Destroys the tables only if som_preserve_tables
11057         is 0.
11058         (paginate_horizontally) Bugfix: sets som.mpw even if there's only
11059         one subrow per row.  Now labels subrows if there's more than one
11060         subrow per row.
11061         (dump_crush_table) Added wishlist comment.
11062         (som_eject_page) New public function declared in som.h.
11063
11064         * som-low.c: (som_dump_crush_page) Draws row labels if there's
11065         more than one subrow per row.
11066         (som_output_text) Moved to som-frnt.c.
11067
11068         * som.h: (SOM_TOPT_PRESERVE) Removed.
11069
11070         * title.c: (get_title) Changed interface.
11071         (cmd_title) Changed `title' to `outp_title'.
11072         (cmd_subtitle) Changed `subtitle' to `outp_subtitle'.
11073
11074 Sun Oct 20 09:04:15 1996  Ben Pfaff  <blp@gnu.org>
11075
11076         * list.q: (flush_table) Conforms to new partial options in
11077         som_submission_form.
11078
11079         * som-high.c: (paginate_horizontally) Changed form of subrow
11080         number labels.
11081         (build_target) Omits spacing before table if
11082         SOM_TOPT_PARTIAL_OMIT_TOP is selected.
11083         (dump_crush_page) Changed interface.  Only trims bottom rule if
11084         SOM_TOPT_PARTIAL_OMIT_BTM is not selected.
11085         (dump_crush_table) Handles partial tables.
11086         (output_row_label) New function.
11087         (som_dump_crush_page) Emits subrow number labels.  Draws vertical
11088         rule on the right edge of narrow subrows.
11089
11090         * som.h: Changed SOM_SUB_PARTIAL_* series of submission type
11091         constants to a series of SOM_TOPT_PARTIAL_* submission options.
11092         All references updated.
11093
11094 Fri Oct 18 19:46:49 1996  Ben Pfaff  <blp@gnu.org>
11095
11096         * misc.c: Comment fix.
11097
11098         * som-high.c: (examine_table) Treats crushed tables separates for
11099         purpose of determining header size.
11100         (paginate_horizontally) Allots space for line numbers in crushed
11101         tables with lots of subrows per row.  Calculates the `maximum page
11102         width', the width of the widest horizontal page.
11103         (build_target) Removed trim argument; all references changed.
11104         Stricter assertions.  (dump_crush_page) New function.
11105         (dump_crush_table) Reimplemented.
11106
11107         * som-low.c: (som_dump_page) Uses new RULE_ROW &c. constants.
11108         (som_dump_crush_page) Reimplemented, interface changed.
11109
11110         * somP.h: Many many new helper macros for use with crushed tables.
11111         (global var som) Removed `tv', `cum_y' members; all references
11112         removed.  New members `mpw', `digit_space'.
11113
11114 Sun Sep 29 19:37:03 1996  Ben Pfaff  <blp@gnu.org>
11115
11116         * arena.c: (arena_alloc) [!DISCRETE_BLOCKS] Removed `size'
11117         variable, changed to constant 1024.
11118         (arena_ca_strdup) Changed `sizeof(a_string)' to
11119         `sizeof(c_string)'.
11120         (arena_ca_strdup) [!DISCRETE_BLOCKS] Changed bad cast from
11121         `(c_string *)' to `(char *)'; this fixed some offset problems.
11122
11123         * filename.c: (readlink_malloc) Changed initial allocation from
11124         100 bytes to 128.
11125         (good_getcwd) Changed from xmalloc() to local_alloc(); removed
11126         comment.
11127
11128         * postscript.c: (read_fontmap) Fixed leak by changing &owner to
11129         &fm->owner in several places.
11130
11131         * som-high.c: (output_table) Changed interface to rest of world.
11132         (examine_crush_table) Removed.  Crushed tables are re-broken now,
11133         in preparation for rewrite.
11134
11135         * som.h: Comment fix.
11136
11137 Sat Sep 28 21:28:07 1996  Ben Pfaff  <blp@gnu.org>
11138
11139         * ascii.c: (ascii_init_driver) Disposes of x->file.filename and x
11140         itself in the cleanup stage.
11141
11142         * descript.q: (display) At least temporarily, changed the table
11143         format to a crushed table.
11144
11145         * list.q: (begin_row) At least temporarily, added horizontal lines
11146         between cases.
11147
11148         * som-high.c: (examine_crush_table) Sets som.hh to the width of
11149         the horizontal "headers," that is, to the width of the far left
11150         and far right rules.
11151         (justify_pagination) Sets som.th to the width of the widest row
11152         in the crushed table.  Fixed inner loop off-by-one error.
11153
11154         * som-low.c: (som_dump_crush_page) Added code to draw horizontal
11155         rules.
11156
11157         * somP.h: Comment fix.
11158
11159 Fri Sep 27 20:08:39 1996  Ben Pfaff  <blp@gnu.org>
11160
11161         * filename.c: (open_file_ext) Now, doesn't set f->file to NULL
11162         before closing it; also, opens the constructed filename `s'
11163         instead of f->filename.
11164
11165         * postscript.c: Moved initialization of x->loaded, x->prop,
11166         x->fixed, x->current, also the add_encoding() calls, into
11167         postopen().
11168         (preclose) Destroys x->combos; sets x->loaded, x->combos to NULL;
11169         sets x->last_font to NULL; sets x->next_combo to zero.
11170
11171         * som-high.c: (crushed_row_height) Moved definition farther up.
11172         (som_submit_table) Doesn't calculate line width, font size until
11173         after calling open_page(), to accomodate changes to PostScript
11174         driver.
11175         (vert_headers) Removed; equivalent functionality moved to
11176         examine_table(), examine_crush_table().
11177         (justify_pagination) Replaced with different algorithm.
11178         (dump_crush_table) Bugfix that caused tables to fail to be clipped
11179         at the bottom of the page.
11180
11181 Thu Sep 26 22:20:26 1996  Ben Pfaff  <blp@gnu.org>
11182
11183         * command.c: Added cmd_list back into cmd_table.
11184
11185         * freq.c, frequencies.q, repeat.c, list.q, vars-atr.c, vfm.c:
11186         Comment fix: `#define DEBUGGING' --> `#define DEBUGGING 1'.
11187
11188         * list.q: (flush_table) Updated to new som_submission_form format.
11189
11190         * som-frnt.c: Comment fix.
11191
11192         * som-high.c: Changed `#endif' to `#undef EXTERN'.
11193         (output_table) Calls som_get_table_size() directly; handles
11194         crushed tables.
11195         (examine_crush_table) New function; calls vert_headers().
11196         (examine_table) Moved some code into new function, vert_headers().
11197         (justify_pagination) New function.
11198         (dump_plain_table) Removed `static' from `cy'.
11199         (dump_crush_table) New function.
11200
11201         * som-low.c: (som_dump_crush_page) New function.
11202
11203         * som.h: Comment fixes.
11204         (enum SOM_TOPT_CRUSH) New.
11205         (SOM_SUB_PARTIAL_BEG, SOM_SUB_PARTIAL_MID, SOM_SUB_PARTIAL_END)
11206         Temporarily set to zero to make do with LIST procedure.
11207
11208         * somP.h: Re-ordering.
11209
11210 Wed Sep 25 19:36:11 1996  Ben Pfaff  <blp@gnu.org>
11211
11212         * som.c: Split into som-frnt.c, som-high.c, som-low.c.
11213
11214         * somP.h: New file for use by som-high.c, som-low.c.
11215
11216         * q2c.c: Added definition for VME.
11217         (get_line) Now dumps `!' comment lines to the output file
11218         verbatim.
11219
11220         * crosstabs.q, descript.q, file-handle.q, frequencies.q, list.q,
11221         set.q: Changed format of `!' comment lines.
11222
11223 Tue Sep 24 18:39:09 1996  Ben Pfaff  <blp@gnu.org>
11224
11225         * All source files: Added copyright notice.
11226
11227         * common.c: (xmalloc, xrealloc, xstrdup) Cast size_t's to unsigned
11228         longs in msg() calls.
11229
11230         * con32s.c: (xmalloc, xrealloc) Updated from common.c.
11231
11232         * q2c.c: (xmalloc, xrealloc, xstrdup) Updated from common.c.
11233
11234 Sat Sep 21 23:16:31 1996  Ben Pfaff  <blp@gnu.org>
11235
11236         * output.c: (outp_read_devices) Changed criteria for
11237         distinguishing different types of lines.
11238
11239 Fri Sep 20 22:52:28 1996  Ben Pfaff  <blp@gnu.org>
11240
11241         * cmdline.c: Changed syntax message.
11242
11243         * filename.c: (good_getcwd) Bug fix (?).
11244         (normalize_filename) [__BORLANDC__] Uses _fullpath() library
11245         function.
11246         (search_path) Appends DIR_SEPARATOR to directory name only if it
11247         does not already end with one.
11248
11249         * glob.c: Checks STAT_PAGER envvar before PAGER.
11250
11251         * output.c: Checks environment variables instead of just local
11252         macros.
11253
11254 Tue Sep 10 21:39:00 1996  Ben Pfaff  <blp@gnu.org>
11255
11256         * arena.c: (arena_destroy) Swatted a subtle bug that cropped up
11257         when the pointer passed to the function was within the arena
11258         itself, so that it couldn't properly be set to NULL _after the
11259         arena was freed_.
11260
11261         * command.c: Re-enabled DISPLAY.
11262
11263         * display.c: Rewritten to handle tables.  Untested.
11264
11265         * filename.c: (search_path) Fixed memory leak.
11266
11267         * frequencies.q: (cmd_frequencies) Frees v_variables.
11268         (postcalc) Calls cleanup_freq_tab() after displaying statistics.
11269         (cleanup_freq_tab) New function to garbage collect.
11270         (dump_full) Elegantized.
11271
11272         * main.c: New comment.
11273
11274         * output.h: New tag for tagged quotes: TAG_NEWLINE.
11275
11276         * postscript.c: Comment fix.
11277         (release_fontmap, free_font_entry) New functions.
11278         (ps_init_driver) Sets free_font_entry() as the freefunc for
11279         hashtable `loaded'.  Calls release_fontmap() when destroying a
11280         driver; also frees the output filename; also frees the
11281         ps_driver_ext block.
11282         (free_ps_encoding) Frees the filename as well as the encoding
11283         block.
11284         (output_encodings) Frees the line buffer and pops the msg-filename
11285         stack.
11286         (read_fontmap) Frees the fontmap filename and the line buffer.
11287         (postopen, preclose) Misc. garbage collection fixes.
11288         (ps_open_page) Destroys the `combos' hash table; sets `last_font'
11289         to NULL; this fixes some output problems.
11290         (text) Handles TAG_NEWLINE.  Untested.
11291
11292         * som.c: (cell_byte_size) Merged SCON_VALUE and SCON_TEXT cases.
11293         (som_set_string) Removed.  All references changed to
11294         `som_set_text'.
11295         (som_set_text) Rewritten.  New interface.  More general.
11296
11297         * som.h: Minor format changes.
11298         (struct som_value_cell) Removed; all references changed to
11299         `som_text_cell'.
11300         (enums SOT_*) Changed.
11301
11302 Mon Sep  9 21:43:13 1996  Ben Pfaff  <blp@gnu.org>
11303
11304         * command.c: Re-enabled SPLIT FILE.
11305
11306         * postscript.c: Comment fix.
11307
11308         * som.h: Added `SOT_NONE'.
11309
11310         * split-file.h: (cmd_split_file) Removed superfluous parenthesis.
11311
11312         * vfm.c: (dump_splits) Reimplemented.
11313
11314 Sat Sep  7 22:35:12 1996  Ben Pfaff  <blp@gnu.org>
11315
11316         * Compiled the project under gcc 2.7.2, which gave some new
11317         warnings.  This led to many additions of casts from unsigned to
11318         int sprinkled throughout the code.
11319         
11320         * arena.c: Many uses of `unsigned' changed to `size_t'.
11321
11322         * command.c: Added END FILE, END REPEAT to command table.
11323         (var cmd_end_repeat) Renamed cmd_end_repeat_p.
11324         (find_command, FILE_TYPE_okay) Not commented out anymore.
11325         (parse_cmd) Calls FILE_TYPE_okay again.
11326         (output_line) Added calls to som_output_text() to put the line
11327         in the output files.
11328
11329         * common.c: (macro VME) Format changes.
11330         (xstrdup) Asserts that its argument is not NULL.
11331         
11332         * data-list.c: Implemented dump_fixed_table().
11333         
11334         * inpt-pgm.c: Formatting changes.  Comment changes.
11335         (end_case_proc) Renamed end_case_trns_proc.
11336         (cmd_end_file, end_file_trns_proc) New functions.
11337
11338         * misc.c: Many uses of `int' and `unsigned' changed to `size_t'.
11339
11340         * misc.h: (local_strdup) New macro corresponding to strdup() but
11341         allocating its data through local_alloc() if possible--that is, if
11342         GNU C is in use.
11343
11344         * postscript.c: Comment changes.
11345         (quote_ps_name, quote_ps_string, output_encodings) New functions.
11346         (output_line, add_string) New macros supporting
11347         output_encodings().
11348         (postopen) Fixed contents of ${fixed-font} and ${prop-font}
11349         substitution vars.  Calls output_encodings() when a line
11350         consisting of `!encodings' is encountered.
11351         (preclose) Some code moved into quote_ps_string().
11352         (dump_line) Changed into macro supporting dump_fancy_line().
11353         (switch_font) Now outputs DSC "%%IncludeResource: font (...)"
11354         command when appropriate.
11355         (write_text) Fixed `literal_char' array (I think it's fixed, at
11356         least.)
11357         (text) Fixed bug when width was zero.  Now exits immediately on
11358         zero height_left.  Now, when executing `goto restart;', checks
11359         that cp<end, so that we don't read beyond end-of-string.  Also,
11360         outputs the correct code to the output file by outputting the code
11361         from the metric instead of the internal metric index.
11362
11363         * repeat.c: (cmd_end_repeat) New function.
11364
11365         * som.c: (var som) `headers' renamed `options' and semantics
11366         changed.  All references changed.
11367         (draw_title) `if(px!=-1 || px!=-1)' --> `if(px!=-1 || py!=-1)'.
11368         (build_target) Only inserts spacing if SOM_TOPT_SPACING not
11369         selected.
11370         (som_text_table) Removed.
11371         (som_output_text) New function.
11372
11373         * som.h: (struct som_submission_form) Removed `header', `reuse',
11374         replaced with bitmapped field `options'.
11375         (SOM_TOPT_*) New enum set for som_submission_form.options.
11376         (SOT_*) New enum set for som_output_text().
11377
11378         * temporary.c: (copy_variable) When copying the var label, only
11379         calls xstrdup() if it's non-NULL.
11380
11381         * var.h: (enum type `vartype') Removed; all references changed to
11382         `int'.
11383
11384         * vars-atr.c: (init_variable) Changed local var `nbytes' from
11385         `int' to `size_t'.
11386
11387 Thu Sep  5 22:05:56 1996  Ben Pfaff  <blp@gnu.org>
11388
11389         * font.h: Comment changes.
11390
11391         * groff-font.c: (groff_read_font) Initializes `name' field to
11392         NULL.  Handles `encoding' field.
11393
11394         * hash.c: (hsh_dump) [GLOBAL_DEBUGGING] Output formatting changes.
11395
11396         * postscript.c: (struct font_entry) Removed `position' field.
11397         (struct ps_font_combo) New struct.
11398         (struct ps_driver_ext) Removed field `next_position'.  New fields
11399         `combos', `next_combo'.  `last_font' field changed from
11400         `font_entry *' to `ps_font_combo *'.
11401         (ps_init_driver) Reformatted; handles new fields.  When
11402         OPO_AUTO_ENCODE is set, adds the two default fonts' encodings to
11403         the encoding list.
11404         (get_encoding, find_encoding_file) New functions.
11405         (add_encoding) Some code moved out into find_encoding_file().
11406         (postopen) Changed value for ${title}.
11407         (preclose) Sets `loaded' field to NULL after destroying the hash
11408         table.
11409         (ps_open_page) Added comment.  Inits the `combos' and `next_combo'
11410         fields.
11411         (ps_text_set_font_by_position) Figures out the current family if
11412         not known.
11413         (compare_ps_combo, hash_ps_combo, free_ps_combo) New functions.
11414         (switch_font) Implemented.
11415         (write_text) Calls switch_font() more often.  Format changes.
11416         #undefs its macros after they're no longer useful.
11417         (text) Changed `continue' at one point to a jump to the top of the
11418         loop because we don't want `separate' reset to 0 at that point.
11419         (load_font) No longer sets `position' in the font_entry created.
11420
11421 Wed Sep  4 21:45:35 1996  Ben Pfaff  <blp@gnu.org>
11422
11423         * font.h: (struct font_desc) New member `encoding', which is not
11424         properly handled yet.
11425
11426         * glob.c: (init_glob) Some new i18n code, which is probably
11427         screwed up.
11428
11429         * output.c: (outp_read_devices, outp_get_paper_size) Changed
11430         `size' local from `int' to `size_t'.
11431
11432         * postscript.c: New driver configuration parameter `auto-encode'.
11433         New enums OPO_AUTO_ENCODE, ODA_COUNT.
11434         (struct font_entry) New member `position'.
11435         (struct ps_driver_ext) Reordered.  New hash table member
11436         `encodings'; new members `next_position', `next_encoding',
11437         `last_font'.  Members `current', `prop', `fixed' changed from type
11438         `font_desc *' to `font_entry *'; all references changed.
11439         (struct ps_encoding) New struct.
11440         (read_ps_encodings, compare_ps_encoding, hash_ps_encoding,
11441         free_ps_encoding, add_encoding) New functions.
11442         (ps_init_driver) Added OPO_AUTO_ENCODE to default
11443         x->output_options.  Initializes new members of ps_driver_ext.
11444         Changed default value for prologue_fn, encoding_fn.  Calls
11445         read_ps_encodings after loading default fonts.
11446         (option_tab[], ps_option) Handle new configuration parameter.
11447         (switch_font) New function.
11448         (struct output_char) `font' member changed from `font_desc *' to
11449         `font_entry *'.  New member `separate'.
11450         (read_fontmap) Changed `size' from `int' to `size_t'.
11451         (output_line, put_number) New macros for write_text().
11452         (write_text) Optimizes text output by consolidating multiple
11453         calls to PostScript `show' operator.
11454         (text) Keeps track of when text arguments can't be consolidated by
11455         write_text(), and marks those spots in the output stream.
11456         (load_font) Sets `position' of the allocated font_entry to -1, cuz
11457         the font hasn't been switched to by switch_font(), which is where
11458         the position is important--the PostScript is what cares about the
11459         position.
11460
11461 Sat Aug 31 23:52:38 1996  Ben Pfaff  <blp@gnu.org>
11462
11463         * hash.c: (hsh_destroy) Ignores NULL argument.  Doesn't try to
11464         call a NULL free_func.
11465         (hsh_rehash) Elegantized.
11466         (hsh_probe) Fix bug that manifested when the table was expanded
11467         and thus had to change location in memory.  Good thing
11468         too--otherwise could have been much more subtle.
11469         (hsh_find) [GLOBAL_DEBUGGING] Not stubbed out anymore.
11470         (hsh_foreach) New function for hash table iteration.
11471
11472         * hash.h: (struct hsh_iterator) New.
11473
11474         * lexer.c: (parse_tagged_quote) Font and family name strings in
11475         tags are now null-terminated.
11476
11477         * output.c: (outp_evaluate_dimension) Fixed over-aggressive unit
11478         parsing.
11479         (internal_get_paper_size, outp_get_paper_size) Fixed; now work as
11480         documented.  (Never before tested?)
11481
11482         * output.h: Comment changes.
11483
11484         * postscript.c: New driver options `optimize-text-size',
11485         `optimize-line-size', `max-fonts-simult'.  New enum set for
11486         specing cached line types.  Comment fixes.
11487         (struct line_form) New struct.
11488         (struct ps_driver_struct) New members `text_opt', `line_opt',
11489         `max_fonts', `lines'.
11490         (ps_init_driver) Initializes new members of ps_driver_struct.
11491         (user option type enum set) New member `nonneg_int_arg'.
11492         (static var option_tab[]) Supports new options.
11493         (ps_option) Handles new options.
11494         (find_ps_file) Made static.  No longer calls hsh_dump().
11495         (ps_get_var) Made static.
11496         (preclose) Dumps out proper DSC trailer.
11497         (ps_open_page) Elegantized.
11498         (ps_close_page) Calls dump_lines() if appropriate.
11499         (ps_line_horz, ps_line_vert, ps_line_intersection) Reduced to
11500         wrappers around line().
11501         (int_2_compare, compare_line, dump_line, dump_fancy_line,
11502         dump_lines, hash_line, free_line, line) New functions for support
11503         of line caching.
11504         (write_text, text) Made static.
11505         (text) Added to font support, not finished.
11506
11507 Thu Aug 29 21:36:41 1996  Ben Pfaff  <blp@gnu.org>
11508
11509         * font.h: (struct font_desc) New members ascent, descent.
11510
11511         * groff-font.c: (groff_read_font) Calculates font ascent and
11512         descent from the ascent and descent of the `d' and `p' characters,
11513         respectively, as per a suggestion on comp.fonts.
11514
11515         * postscript.c: (ps_open_page, ps_close_page, ps_line_horz,
11516         ps_line_vert, ps_line_intersection) Rewritten to deal with changed
11517         prologue.
11518         (write_text) Handles text right-justification and centering (not
11519         full justification).  Still very inefficient.  (One output line
11520         per character?!)
11521         (struct output_char) Added fields for font and font size.
11522         (text) Many bugfixes.
11523
11524 Sat Aug 24 23:26:00 1996  Ben Pfaff  <blp@gnu.org>
11525
11526         * cmdline.c: (usage) Calls outp_list_classes().
11527
11528         * font.h: Comment fix.
11529
11530         * groff-font.c: New exported global var `space_index'.
11531         (groff_init) New function to initialize `space_index'.
11532         (hash_kern) Casts result to unsigned.
11533         (font_name_to_index) Renamed font_char_name_to_index.  All
11534         references changed.  Also, now returns the value of `space_index'
11535         when passed an ASCII space character as an argument.  Fixed
11536         handling of nulls.
11537         (font_get_kern_adjust) Changed i from `int' to `unsigned'.
11538         Handles passed NULL pointers properly.
11539
11540         * lexer.c: (parse_tagged_quote) Comment fix.  Better range
11541         checking.
11542
11543         * output.c: (outp_list_drivers) Removed.  Removed all references.
11544         
11545         * output.h: Comment fixes.
11546
11547         * postscript.c: (ps_open_global) Calls groff_init().
11548         (output_char) New structure.
11549         (write_text) New function.
11550         (text) No longer stubbed out!  Now the output is correct--with a
11551         few exceptions, one of them being that the page has to be held
11552         upside down into a mirror.
11553
11554 Sun Aug 11 21:31:22 1996  Ben Pfaff  <blp@gnu.org>
11555
11556         * font.h: Comment fix.
11557         
11558         * font.c: (name_to_index) Renamed font_name_to_index, made extern.
11559         All callers changed.
11560         (number_to_index) Renamed font_number_to_index, made extern.  All
11561         callers changed.
11562         (font_get_kern_adjust, font_get_char_metrics) New functions.
11563
11564         * output.h: New constant OUTP_T_INTERNAL_DRAW.
11565
11566         * postscript.c: Changed default line width back to 1/2 point.
11567         (ps_line_horz, ps_line_vert, ps_line_intersection) Now lines are
11568         in the center of the space allotted for them, not just a fixed
11569         offset from the edge of the space; this fixes some bugs.
11570         (ps_line_intersection) Now supports all command line styles.
11571         (ps_text_get_size) Bug fix in computation of em width.
11572         (text) New function, the meat behind ps_text_metrics and
11573         ps_text_draw.  Not complete.
11574         (ps_text_metrics, ps_text_draw) Removed the stub taken from
11575         ascii.c; call text().
11576
11577 Sat Aug 10 23:28:17 1996  Ben Pfaff  <blp@gnu.org>
11578
11579         * arena.c: (arena_free) Assert that the argument is non-NULL.
11580         
11581         * groff-font.c: (add_kern) Calls arena_free() for old_kern if and
11582         only if old_kern is non-NULL.
11583
11584         * postscript.c: (ps_init_driver) Changed default line width to 1
11585         point.
11586         (postopen) New prologue variables.
11587         (ps_line_horz, ps_line_vert, ps_line_intersection) Implements some
11588         more of the common line styles properly, but not all.
11589         (ps_text_metrics) Fixed problem with this stubbed out version that
11590         kept it from taking font sizes into account.
11591
11592 Thu Aug  8 22:31:11 1996  Ben Pfaff  <blp@gnu.org>
11593
11594         * arena.c: (arena_malloc) Bug fix.
11595         (arena_dump) [GLOBAL_DEBUGGING] New function.
11596
11597         * ascii.c: Comment fix.
11598         (count_fancy_chars, delineate) Now static functions.
11599         
11600         * filename.c: (interp_vars) Bug fixes.
11601
11602         * font.h: Comment fixes.
11603
11604         * glob.c: (init_glob) Sets set_viewwidth, set_viewlength at
11605         beginning in case we have an error message to display before
11606         initializing the display.
11607
11608         * groff-font.c: Comment fix.  Changed rehash threshold from 2/3
11609         full to 1/2 full.
11610         (groff_read_font) Bug fixes.
11611         (name_to_index) Increments hash.used.  Sets `name' field of hash
11612         entry properly.
11613         (add_kern) Sets kern_max_used after rehashing.  Other bug fixes.
11614
11615         * hash.c: Return type changed.
11616
11617         * postscript.c: Continued development.  Now marks lines on the
11618         paper, but very buggy.
11619
11620 Sat Aug  3 20:50:35 1996  Ben Pfaff  <blp@gnu.org>
11621
11622         * Changed comments in many source files from `/* xxx /* yyy */' to
11623         `/* xxx */ /* yyy */' for cleanliness.
11624
11625         * arena.c: (arena_sd_strdup) New function.
11626         
11627         * ascii.c: (struct ascii_driver_ext) New member `file'.
11628         (ascii_init_driver) Fills out member `file' for initing; uses
11629         close_file_ext for closing drivers.
11630         (ascii_option) Changed %.*s back to %s because the a_string's are
11631         always null-terminated.
11632         (postopen, preclose) New functions.
11633         (ascii_open_page) Uses new style of open_file_ext.
11634         (ascii_option, commit_line_buf, output_lines) Use ext->file.file
11635         instead of this->output.
11636         (__assert_fail) Removed.
11637
11638         * cmdline.c: Changed syntax_message[].
11639
11640         * error.c: #include's <readline/history.h> only if the history
11641         library is available, not if just the readline library is
11642         available.
11643
11644         * filename.c: (expand_line) Removed alloca() support.
11645         (interp_vars) No longer tilde-expands argument.  Limit on output
11646         length removed.
11647         (tilde_expand) Now treats argument as path rather than filename.
11648         [!unix] Now is a no-op function.
11649         (search_path) Better verbose message formatting.
11650         (open_file, close_file) Comment fixes.
11651         (close_file) [!unix] Doesn't bother with pipes.
11652         (open_file_ext) Completely rewritten, interface revamped.
11653         (close_file_ext) New function.
11654
11655         * font.h: Comment changes.
11656
11657         * frequencies.q: Removed AIX alloca support since it doesn't use
11658         alloca.
11659
11660         * hash.c: Comment changes & additions.
11661         (hsh_create) Initializes entire table instead of first M entries.
11662         (hsh_probe) Stupid bug fixed.  Now it works.
11663         (hsh_dump) [GLOBAL_DEBUGGING] New function.
11664
11665         * main.c: (parse) Detects EOF properly in token-eating loop.
11666         Should the STOP token have its value changed to 0?
11667
11668         * misc.c: (blp_getdelim) [HAVE_GETDELIM] Now it's a macro.
11669         (blp_getline) Now it's a macro.
11670
11671         * output.h: (struct outp_driver) Removed members output, filename.
11672         
11673         * output.c: (outp_init) [!NO_POSTSCRIPT] Installs PostScript
11674         drivers in driver table.
11675         (outp_read_devices) Frees buf.  Warns if there are no active
11676         output drivers.
11677         (outp_configure_clear) Sets outp_configure_vec to NULL after
11678         deleting its elements.
11679         (configure_driver, destroy_driver) Removed references to output,
11680         filename members of outp_driver.
11681         (outp_evaluate_dimension, internal_get_paper_size,
11682         outp_get_paper_size) New functions.
11683
11684         * postscript.c: Continued development.  Now links but doesn't make
11685         any marks on the page.  Lotsa bugs I suppose.
11686
11687         * str.c: (strcasecmp) [!HAVE_STRCASECMP] New function.
11688
11689         * str.h: Comment changes.
11690
11691 Sat Jul 27 22:32:38 1996  Ben Pfaff  <blp@gnu.org>
11692
11693         * Removed dependencies on non-nested comments in several files.
11694         Also removed references to (unix || __unix__) in #if's since
11695         prefh.orig makes those two equivalent.
11696         
11697         * ascii.c: (ascii_open_global) Creates ascii_arena.
11698         (ascii_close_global) Destroys ascii_arena.
11699         (ascii_init_driver) Doesn't create ascii_arena.
11700         (ascii_copy_driver) Removed.
11701         (ascii_option) Possible bugfix regarding %s vs. %.*s with a_string's.
11702         (outp_class ascii_class) Removed ascii_copy_driver reference.
11703
11704         * frequencies.q: Now can display all statistics except median.
11705         Still not finished.
11706
11707         * output.c: Handles outp_class.ref_count so output class
11708         destructors are called properly.
11709         (add_class) Sets ref_count to 0.
11710         (configure_driver) Initializes class if ref_count++ is 0.
11711         (destroy_driver) Destructs class if --ref_count is 0.  Frees the
11712         class output file name.
11713         
11714         * output.h: (struct outp_class) Removed copy_driver, inited.
11715         Added ref_count.
11716
11717         * postscript.c: Completely replaced but not finished.
11718         
11719 Tue Jul 23 21:48:36 1996  Ben Pfaff  <blp@gnu.org>
11720
11721         * approx.h: #includes <float.h>.
11722
11723         * arena.h, arena.c: Many functions changed to take an arena **
11724         instead of an arena *, for consistency.  All callers changed.
11725         (arena_alloc) Now creates a new arena if passed *A that is NULL.
11726         (arena_destroy) Sets *A to NULL.
11727         
11728         * ascii.c: (delineate) Implements OUTP_T_VERT correctly.  Removed
11729         assertion that `width' be positive.
11730
11731         * command.c: Removed #if's from cmd_table.
11732         (walk_cmdtable_func) [0] New function (debug code).
11733         (init_cmd_parser) [0] Dumps out cmd_table (debug code).
11734         (parse_cmd) Doesn't return failure for unimplemented commands.
11735
11736         * common.h: (SYSMIS) Changed from DBL_MAX to -DBL_MAX.
11737         (SYSCODE) New constant macro.
11738
11739         * descript.q: Checks for positive n_variables before performing
11740         analysis.
11741
11742         * file-handle.q: (get_handle_by_filename) Bug fix: passes &f to
11743         avl_find instead of &fp as arg 2.
11744
11745         * frequencies.g, frequencies.q: Continued updating; now compiles &
11746         works again, but not complete.
11747
11748         * main.c: Changes to user messages.
11749
11750         * misc.c: (reverse) [0] New function.
11751
11752         * settings.h: Comment removed.  #includes "common.h".
11753
11754         * som.c: (som_set_null) New function.
11755         (som_set_value, som_set_string, som_set_text) More detailing
11756         assertions.
11757         (som_set_float) Implemented function.
11758         (dump_columnated_table) Bug fix regarding page breaks.
11759         (draw_cell) Bug fix regarding text that spilled out of a cell.
11760         (draw_intersection, draw_horz_rule, draw_vert_rule) No longer draw
11761         null lines.
11762         (get_cell_size) Support SCON_EMPTY cells.
11763         (get_table_size) When calculating rules' widths and heights, mask
11764         out SLIN_SPACING bit.  Added SOPT_X_HLTL support.
11765         
11766         * som.h: (som_any_cell) New option SOPT_X_HTLT.  Removed
11767         SOPT_X_SHADE.
11768         (struct som_submission_form) New member `header'; all users
11769         changed.
11770
11771         * val-labs.c: (get_label) User messages changed.
11772
11773         * var.h: Changed FREQUENCIES structures.
11774
11775         * vars-atr.c: (is_num_user_missing, is_str_user_missing) Made
11776         inline.
11777         
11778 Fri Jul 19 19:11:13 1996  Ben Pfaff  <blp@gnu.org>
11779
11780         * approx.h: Definition of EPSILON now depends on system's
11781         DBL_EPSILON.  Removed GNU C specific code.
11782         (cmpapx) Renamed approx_compare.
11783
11784         * frequencies.g, frequencies.q: Continued updating; still doesn't
11785         compile.
11786
11787         * groff-font.c: (name_to_index) Fix bug that kept it from
11788         compiling.
11789
11790         * hash.c, hash.h: Completed work.
11791
11792         * var.h: Changes to freq_tab, frequencies_proc.
11793         
11794 Wed Jul 17 21:23:36 1996  Ben Pfaff  <blp@gnu.org>
11795
11796         New hashing code.
11797         * hash.c, hash.h: New files.  Not completed.
11798         * Makefile.am: Added hash.c to source file list.
11799         * font.h: (struct font_desc) New member kern_size_p.
11800         * groff-font.c: Uses hash.h.
11801         (hashpjw) Moved to hash.c.
11802         (next_prime_power) Rewrote, renamed hsh_next_prime, moved to
11803         hash.c.
11804         (static var hash) New member size_p.
11805         * var.h: Includes hash.h.
11806         (struct freq_tab) Changed AVL_TREE to hash_tab.
11807
11808         * vars-prs.c: Comment, formatting fixes.
11809
11810         * frequencies.g, frequencies.q: Continued updating.  Not yet
11811         working.
11812
11813         * formats.c: Bug fix.
11814
11815 Tue Jul 16 22:10:04 1996  Ben Pfaff  <blp@gnu.org>
11816
11817         Increasing parallelism between DESCRIPTIVES and FREQUENCIES.
11818         * descript.g: Comment fixes.
11819         * descript.q: Comment fixes.  Moved some declarations into var.h.
11820         Made dsc_info a static table.  Updated FIXMEs.
11821         (internal_cmd_descriptives) Beautified.
11822         
11823         * frequencies.q: Started updating into working order.
11824         * frequencies.g: New file analogous to descript.g.
11825         * var.h: Comment fixes.  Added structures for FREQUENCIES.
11826         
11827         * som.c: Removed vestiges of crushing and partial table support.
11828
11829 Sun Jul 14 15:45:31 1996  Ben Pfaff  <blp@gnu.org>
11830
11831         * Many more changes to som.c especially, but these will not be
11832         documented as I have resolved to remove them.  This patchlevel is
11833         being released solely so that I can fall back to it if I decide
11834         that removing the changes is not a good idea.
11835
11836 Sat Jul 13 09:58:44 1996  Ben Pfaff  <blp@gnu.org>
11837
11838         * som.c: (global var som) New member `cum_y'.
11839         (build_target) Properly handles titles for partial tables.
11840         (dump_partial_beg, dump_partial_mid, dump_partial_end)
11841         Merged into single new function dump_partial().  Fixed problem
11842         with titles on partial tables.
11843         (dump_table) Calls dump_partial() for all parts of partial tables.
11844         (dump_page) Criteria for drawing title changed.
11845         
11846 Fri Jul 12 22:03:36 1996  Ben Pfaff  <blp@gnu.org>
11847
11848         * command.c: (cmd_table) Added LIST, WEIGHT.
11849
11850         * command.c: (cmd_remark) No longer frees `s' since it's not
11851         dynamically allocated.
11852         
11853         * data-out.c: (convert_f) Now correctly handles the case where
11854         abs(v->f)<1 but v->f rounds to a value of 1.00 given the specified
11855         number of decimals.
11856         (som_destroy_all_tables) Removed argument.  All callers changed.
11857         (som_vline, som_hline) Argument validity checking corrected.
11858         (som_set_value) Implemented half-heartedly.
11859         (replicate_table) Copies tables piece-by-piece when using Checker.
11860
11861         * som.h: New line style SLIN_1THIN, currently equivalent to
11862         SLIN_0.  New enum set SOM_SUB_*.
11863         (struct som_submission_form) Removed `seq_no'.  Added `type'.
11864         
11865         * list.q: Newly working file; uses partial tables.
11866         
11867         * som.c: (som_reduce_table) Renamed som_set_table_height().
11868         (som_crush) Removed argument `group'.
11869         (global var som) Removed `nt', `seq_no'.  Added `type'.
11870         (som_submit_table) Arguments changed.
11871         (output_table) Removed partial table code.
11872         (build_target) New arg; partial table support added.  All callers
11873         changed.
11874         (dump_plain_table) Removed partial table code.
11875         (dump_partial_beg, dump_partial_mid, dump_partial_end) New functions.
11876         (dump_table) Supports partial tables.
11877         (dump_page) New argument to allow not drawing top and/or bottom
11878         headers.  All callers changed.  Supports partial tables.
11879
11880 Sat Jul  6 22:22:25 1996  Ben Pfaff  <blp@gnu.org>
11881
11882         * data-out.c: Changed `#include <approx.h>' to `#include
11883         "approx.h".
11884         (convert_F) Comment fix.  Now won't print `-.000', etc.
11885
11886         * descript.q: Now Z-scores work, although there appears to
11887         be a bug (which might actually be in data-out.c:convert_F()).
11888         (descriptives_trns_proc, descriptives_trns_free) New functions.
11889         (run_z_pass) Implemented.
11890         
11891         * var.h: Comment fixes.
11892         (dsc_z_score, descriptives_trns) New structs.
11893         (descriptives_trns) Added to any_trns as `dsc'.
11894
11895         * error.c, error.h: New error class, IS (Installation Script
11896         error), used in those instances where the error is in the
11897         installation, but there is a script file or installation file that
11898         can be usefully referred to.
11899         
11900         * output.c: Change many IE classes to IS classes.
11901
11902         * cases.c, command.c, common.c, crosstabs.q, expr-evl.c,
11903         frequencies.q, list.q, vars-prs.c, vfm.c: Removed reference to
11904         HAVE_MALLOC_H because Borland C++ alloca() is broken, so why
11905         include the corresponding header?
11906         
11907         * glob.c: (init_glob) Don't malloc term_buffer under Checker.
11908         Don't bail out if termcap can't be read.
11909
11910         * som.c: (som_destroy_table) Removed.
11911         (som_reduce_table, som_destroy_all_tables) New functions.
11912         (som_crush) New function, not implemented.
11913         
11914         * som.h: New table option STAB_CRUSH.  Comment fix.  New struct
11915         som_submission_form.  Function prototypes revised.
11916
11917         Outputting huge tables (1000s of rows) a few rows at a time
11918         is supported, though untested.  May even break everything.
11919         Actually, the code doesn't even compile right now.
11920         * som.c: (struct som) New fields htv, nt, seq_no.
11921         (som_submit_table) Multiple arguments changed to a single
11922         pointer to struct submission_form.  Only increments subtable_num
11923         if seq_no is zero.  Only destroys table if it's not going to
11924         be reused.
11925         (replicate_table) New function.
11926         (output_table) Comment fix.
11927         (examine_table) Changed inline code to code calling
11928         replicate_table().  Calculates htv.  Supports partial tables.
11929         (draw_title) Removed comment.
11930         (build_target) Only allows for title on first part of partial
11931         tables.
11932         (dump_plain_table) Only resets table chunk number on first part
11933         of partial tables; FIXME: doesn't work quite right.  Supports
11934         partial tables.
11935         (dump_page) Titles only on first part of partial tables.
11936
11937 Fri Jul  5 20:16:19 1996  Ben Pfaff  <blp@gnu.org>
11938
11939         * Thanks to an unreliable IDE hard drive, I have spent the last
11940         day reconstructing my Debian GNU/Linux installation and redoing
11941         the previous day's changes--somehow I managed to save every file
11942         except for output.c and output.h.  So the following changes could
11943         really be considered independent of the output.c, output.h changes
11944         from Jul 4.
11945
11946         * output.h, output.c: Moved the outp_configure_vec global var,
11947         outp_names struct, and enum set OUTP_S_* from output.h to output.c.
11948         outp_configure_vec is now static.
11949         
11950 Thu Jul  4 20:20:24 1996  Ben Pfaff  <blp@gnu.org>
11951
11952         * The entire philosophy behind configuration of the output drivers
11953         changed.  Now there is a termcap-type configuration where drivers
11954         to be read are determined beforehand, rather than parsing the
11955         entire output init file and storing it in memory & deciding what
11956         to actually use later.  Faster & more memory-efficient at the same
11957         time, cool.
11958         
11959         * output.c: Comment fix.  Removed outp_init_drivers global var.
11960         Removed all references to synonyms.  New structure outp_defn.  New
11961         global vars outp_macros, outp_configure_vec.
11962         (search_name, delete_name, add_name, check_configure_vec,
11963         expand_name, find_defn_value) New static functions.
11964         (outp_configure_clear, outp_configure_add, outp_configure_macro,
11965         outp_read_devices) New extern functions.
11966         (outp_init) Much functionality moved into outp_read_devices.
11967         (outp_read_devices) Format of output init file changed; name of
11968         file is `devices' rather than `output' to avoid Makefile
11969         conflicts.
11970         (outp_clear) Renamed outp_done.
11971         (outp_list_classes) Bug fix, cleaned up.
11972         (outp_list_drivers) Not implemented anymore.
11973         (outp_configure_driver) Now a static function; simplified; now
11974         interpolates macros; supports new structure.
11975         (outp_enable_driver, match_synonym) Removed; all references
11976         removed.
11977         (find_driver) First argument removed.
11978         
11979         * output.h: Global var outp_init_drivers removed; new structure
11980         outp_names; new enum set OUTP_S_*; new global var
11981         outp_configure_vec; function prototypes for output.c exports
11982         updated.
11983         
11984         * main.c: (main) Calls outp_read_devices() after parsing the
11985         command line.
11986         
11987         * cmdline.c: (parse_command_line) New option -v --verbose;
11988         --version changed to -V.  --device option changed syntax to just
11989         take a single device name.  Accepts key=value declaration of
11990         output init file macros.  Syntax message updated.
11991
11992         * filename.c: (expand_line) New function.
11993         (interp_environ_vars) Renamed interp_vars; no longer uses
11994         fixed-size buffer.
11995         (blp_getenv) Allows $ARCH and $VER pseudo-environment-vars to be
11996         overridden by real environment vars.
11997         (search_path) Uses verbose_msg() instead of #ifdef'd printf().
11998         * filename.h: interp_environ_vars() renamed interp_vars().
11999         
12000         * error.c, error.h: Added extern variable `verbosity', message
12001         class MM.
12002         
12003         * error.c: (vmsg) Support message class MM.
12004         (verbose_msg) New function.
12005
12006         * descript.q: (generate_z_varname) Bug fix in generation of
12007         Z-score varnames.
12008         (dump_z_table) Bug fix in column headers.
12009         
12010         * ascii.c: (ascii_init_driver) Changed minimum number of lines per
12011         page from 29 to 15.  Don't set a default for ops[OPS_INIT,
12012         OPS_DONE].  Writes the uninit string when the driver is closed.
12013         (ascii_open_page) Write the init string before the first page.
12014         (output_shorts) Form of main loop changed from `while' to `for'.
12015         Bug fix with overstrikes: the character is printed *after* the
12016         backspace.  Eliminated a lot of `& 0xff' modifiers.
12017         (advance_to_left_margin) New function.
12018         (return_carriage, output_lines) Handle left margin.
12019
12020 Thu Jul  4 00:35:59 1996  Ben Pfaff  <blp@gnu.org>
12021
12022         * ascii.c: New option `carriage-return-style'.
12023
12024         * ascii.c: (count_fancy_chars) New function.
12025         (delineate, text_metrics) Use new function; bug fixes regarding
12026         rich text strings.
12027         (text_draw) Bug fix with rich text.
12028         (output_string, output_shorts) Reordered.
12029         (output_shorts) Now handles boxchars and some overstrike font
12030         changes.
12031         (output_char, return_carriage) New functions.
12032         (output_lines) Now handles overstriking and font changes properly;
12033         some code moved to output_shorts.
12034
12035 Tue Jul  2 22:13:23 1996  Ben Pfaff  <blp@gnu.org>
12036
12037         [GLOBAL_DEBUGGING]
12038         * ascii.c: New member `debug' in ascii_driver_ext.
12039         (ascii_init_driver, delineate) Uses new member.
12040
12041         Now you can set a vertical height on writing text.
12042         * ascii.c: (delineate) Keeps track of vertical position.
12043         (text_draw) No longer considers fully justified text an internal
12044         error.
12045         
12046         * output.h: New flag OUTP_T_VERT; other OUTP_T_ values changed.
12047
12048         Tables' titles are drawn; they can have variable height.
12049         * som.c: `som' struct has new member, title_height.
12050         (draw_title) New argument.  Moved within file.  All caller
12051         changed.
12052         (build_target) New argument, amount of space needed for first row.
12053         Calculates height of title, takes that into account.  All callers
12054         changed.
12055         (dump_plain_table, dump_columnated_table) Took calculation of y1,
12056         y2 out of loop.
12057         (dump_columnated_table) [GLOBAL_DEBUGGING] Debugging code
12058         improved.
12059         (dump_columnated_table) Organized for readability.
12060         (dump_page) Makes use of som.title_height.
12061
12062         * som.c: Many comment bug fixes.
12063
12064         * descript.q: (try_name, generate_z_name) Bug fix regarding
12065         generation of Z-score variable names.
12066         * var.h: Removed num from descriptives_proc; all referents removed.
12067
12068 Mon Jul  1 22:13:39 1996  Ben Pfaff  <blp@gnu.org>
12069
12070         * ascii.c: (ascii_line_horz, ascii_line_vert,
12071         ascii_line_intersection) Added debugging code.
12072
12073         Added a descriptive line above each table to describe it.
12074         * command.c: (parse_cmd) Calls som_new_series.
12075         
12076         * som.c: New static vars table_num, subtable_num.  New `som'
12077         member `title'.
12078         (dump_page) New arguments.
12079         (som_submit_table) Handle new variables.
12080         
12081         * som.c, som.h: (som_submit_table) New arguments.  All callers
12082         changed.
12083         (som_new_series) New function.
12084         (build_target) Makes room for extra line.
12085         (draw_title) New function.
12086         (dump_page) Calls draw_title.  Bug fix: doesn't always set
12087         som.ext->cp to 0.
12088         
12089         Columnation of tables support.
12090         * som.h: Deleted fr, lr, ri from som_table.  Reorganized.
12091         
12092         * som.c: Deleted references to fr, lr, ri.
12093         (som_columnate) Bux fix: sets group member of table.
12094         (som_add_options) Function removed.
12095         (dump_table) Split into three functions; extensively reworked.
12096         
12097         * descript.q: (dump_z_table) Better output table formatting; added
12098         title support to correspond to som.h changes.
12099         (display) Title support.
12100
12101         * output.h: Added OUTP_T_NONE.
12102         
12103 Mon Jul  1 13:00:00 1996  Ben Pfaff  <blp@gnu.org>
12104
12105         * descript.q: Improved handling of Z scores; still not perfect.
12106         
12107         * output.h, ascii.c: Added hook for getting em width of current
12108         font.
12109         
12110         * som.c: Uses new em-width hook.  Added debugging code to
12111         several functions.
12112         (som_columnate) New argument.
12113         (som_add_options) Removed.
12114
12115 Jun 29 17:40:47 1996  Ben Pfaff  <blp@gnu.org>
12116
12117         * som.h, som.c, output.c, output.h, ascii.c: Updated to work with
12118         rules as a property of the table instead of as a property of the
12119         cells.
12120         
12121         * ascii.c: Added `header' to table of options.
12122         
12123         * descript.q: Added even shorter statistic names; modified to work
12124         with new som interface.
12125         
12126         * misc.c (blp_getdelim): Bug fix.
12127         
12128         * version.c: includes 'conf.h'.
12129         
12130 ----------------------------------------------------------------------
12131 Local Variables:
12132 mode: change-log
12133 version-control: never
12134 End: