Did some more work on bug 12859 and then realized that a *good*
[pspp-builds.git] / src / ChangeLog
1 Sun Jun 12 14:54:40 2005  Ben Pfaff  <blp@gnu.org>
2
3         Did some more work on bug 12859 and then realized that a *good*
4         solution would require some fundamental restructuring.  For now,
5         I'm marking REPEATING DATA unimplemented, and then we can revisit
6         it post-0.4.0.
7         
8         * command.def: Make REPEATING DATA unimplemented.
9
10         * data-list.c: (cmd_repeating_data) Assume inline file is 80
11         characters wide.
12         (realize_value) Revert previous changes; no longer needed.
13         Updated all callers.
14
15         * error.c: (err_hcf) Set nfile_loc, mfile_loc to 0 after freeing
16         file_loc, to avoid bad references later.
17
18         * str.c: Fix typo.
19
20 Tue Jun  7 00:14:09 2005  Ben Pfaff  <blp@gnu.org>
21
22         Make some code tolerant of reentry.  Should not be needed if other
23         code is correct but it is good to be generally tolerant.
24         
25         * error.c: (err_hcf) Set file_loc to null after free().
26
27         * output.c: (outp_done) Similar changes.
28
29         * str.c: (ds_destroy) Ditto.
30         
31 Tue Jun  7 00:10:20 2005  Ben Pfaff  <blp@gnu.org>
32
33         Continue work on bug 12859, plus some code cleanup.
34         
35         * data-list.c: (cmd_repeating_data) Replace `seen' bitmap by
36         boolean variables.  Don't try to compute starts_end, cont_end for
37         inline file.  Calculate length only after parsing variable
38         specifications.  Add proper transformation to list.
39         (realize_value) If the rpd_num_or_var has no value, return new
40         DEFAULT_MEMBER argument (for use with inline file).
41         (repeating_data_trns_proc) Pass default values.
42
43         * dfm-read.c: (dfm_close_reader) Only skip data if *not* still
44         open, and only if we actually started reading data.
45
46 Sun Jun  5 18:39:36 2005  Ben Pfaff  <blp@gnu.org>
47
48         Fix bug 11894.
49         
50         * output.c: (outp_read_devices) Fix message.
51
52 Fri May 27 12:34:43 WST 2005 John Darrington <john@darrington.wattle.id.au>
53         
54         * sort-prs.[ch] (newfiles), aggregate.c, sort.[ch]: Separated the guts 
55         of the sort algorithm from the parser for the SORT command.
56         
57         * rank.q: Added the parser for the RANK command.
58         
59 Thu May 26 12:29:21 2005  Ben Pfaff  <blp@gnu.org>
60
61         Fix bug 13192.
62
63         * sort.c: (sort_parse_criteria) Only set *saw_direction if
64         saw_direction is non-null.  Thanks to John Darrington for
65         reporting this bug.
66
67 Tue May 24 21:52:55 2005  Ben Pfaff  <blp@gnu.org>
68
69         * get.c: (mtf_processing) Handle case of a lookup table as the
70         active file.  Thanks to John Darrington for reporting this bug.
71
72 Wed May 25 10:27:02 WST 2005 John Darrington <john@darrington.wattle.id.au>
73         
74         * alloc.c alloc.h: (xcalloc) changed signature to imitate the
75         POSIX  calloc function.
76         
77         * crosstabs.q get.c vars-prs.c: Updated calls to xcalloc to
78         reflect new signature.
79
80         * sfm-read.c: Now much more robust in the face of badly formed
81         system files.
82
83 Mon May 23 11:57:31 WST 2005 John Darrington <john@darrington.wattle.id.au>
84
85         *sfm-read.c: Fixed some bugs regarding long string continuation
86         records, which the previous fix uncovered.
87
88 Sat May 21 12:48:34 WST 2005 John Darrington <john@darrington.wattle.id.au>
89
90         * sfm-read.c, sfmP.h:  Allow reading of system files when the 
91         case_size value in the header is -1.  Also changed some Errors to 
92         Warnings when reading system files.
93
94 Tue May 17 21:00:57 2005  Ben Pfaff  <blp@gnu.org>
95
96         * data-list.c: (data_list_trns_free) Don't free the argument
97         because cancel_transformations() will do that itself.
98         (data_list_source_destroy) Destroy the argument to
99         data_list_trns_free(), because it no longer does so itself.
100
101 Tue May 17 18:29:35 2005  Ben Pfaff  <blp@gnu.org>
102
103         * data-out.c: (format_and_round) Don't output leading `-' if value
104         rounds to zero.
105
106 Tue May 17 00:06:43 2005  Ben Pfaff  <blp@gnu.org>
107
108         Fix bug 11119.
109
110         * som.c: (output_encodings) If some cell in the table won't fit
111         with the horizontal or vertical headers, cancel those headers.
112
113         * som.h: (struct som_table_class) Add fits_width, fits_length,
114         set_headers members.
115
116         * tab.c: (tabi_fits_width) New function.
117         (tabi_fits_length) New function.
118         (tabi_set_headers) New function.
119         (global var tab_table_class) Add the new functions as appropriate
120         members.
121         
122 Mon May 16 22:34:06 2005  Ben Pfaff  <blp@gnu.org>
123
124         Fix rest of bug 13054.
125
126         * format.def: Fix EDATE, SDATE, ADATE, JDATE, QYR, MOYR, WKYR,
127         DATETIME, TIME system/portable file values.
128
129 Mon May 16 22:31:15 2005  Ben Pfaff  <blp@gnu.org>
130
131         * data-list.c: (parse_free) Use make_input_format().
132         
133         * data-out.c: (num_to_string) Use make_output_format().
134
135         * dictionary.c: (dict_create_var) Ditto.
136
137         * format.c: (global var f8_2) New var.
138         (make_input_format) New function.
139         (make_output_format) New function.
140
141         * get.c: (cmd_match_files) Use make_output_format().
142
143         * list.q: (cmd_list) Ditto.
144
145         * matrix-data.c: Ditto.
146
147         * sfm-read.c: (parse_format_spec) Check output specifier
148         thoroughly.
149
150         * tab.c: (tab_float) Use make_output_format().
151
152 Sun May 15 23:38:10 2005  Ben Pfaff  <blp@gnu.org>
153
154         Fix more of bug 13054.
155         
156         * format.def: FMT_A should allow 255-character output.  FMT_AHEX
157         should allow 510-character input and output.
158
159         * data-out.c: (num_to_string) Get rid of NEW_STYLE option.
160         (convert_E) Handle non-finite values.
161         (try_F) Rewrite.
162         (format_and_round) New function.
163         (convert_infinite) New function used by try_F() and convert_E().
164
165 Sun May 15 23:36:55 2005  Ben Pfaff  <blp@gnu.org>
166
167         Regularize string and buffer function names so that they make some
168         kind of sense.
169
170         * str.c: (mm_reverse) Rename buf_reverse().  Update all
171         references.
172         (mm_find_reverse) Rename buf_find_reverse().  Update all
173         references.
174         (mm_case_compare) Rename buf_compare_case().  Update all
175         references.
176         (st_compare_pad) Rename buf_compare_rpad().  Update all
177         references.
178         (str_compare_rpad) New function.
179         (st_bare_pad_copy) Rename buf_copy_str_rpad().  Update all
180         references.
181         (buf_copy_str_lpad) New function.
182         (st_bare_pad_len_copy) Rename buf_copy_rpad().  Update all
183         references.
184         (st_pad_copy) Rename str_copy_rpad().  Update all references.
185         (st_trim_copy) Rename str_copy_trunc().  Update all references.
186         (st_uppercase) Renamed str_uppercase().  Update all references.
187         
188 Sat May 14 08:22:26 WST 2005 John Darrington <john@darrington.wattle.id.au>
189
190         * dfm-read.c: Fixed polarity of test in dfm-close-reader.  Closes 
191         Bug #13082
192
193 Tue May 10 20:08:18 2005  Ben Pfaff  <blp@gnu.org>
194
195         * data-in.c: (data_in) Add assertion to check input specifier.
196
197         * data-out.c: (data_out) Add assertion to check output specifier.
198
199 Tue May 10 19:56:35 2005  Ben Pfaff  <blp@gnu.org>
200
201         Start to fix bug 13054.
202
203         * format.c: (check_input_specifier) Improve error message.
204         (check_input_specifier) Check F, COMMA, and DOLLAR formats for
205         valid decimal places.
206         (check_output_specifier) Ditto (but different criteria).
207         (convert_fmt_ItoO) Assert valid input and output specifiers.
208         Also, if input specifier has *any* decimal places, make the output
209         specifier 1 place wider.
210
211 Mon May  9 07:14:29 WST 2005 John Darrington <john@darrington.wattle.id.au>
212
213         * sysfile-info.c: Fixed bug [# 13024 ]
214
215 Sun May  8 13:52:12 2005  Ben Pfaff  <blp@gnu.org>
216
217         "Fix" bug 13021 by disabling FILE TYPE.  Eventually, we should
218         actually implement it.
219
220         * command.c: (FILE_TYPE_okay) Always return 1.
221
222         * command.def: Change FILE TYPE, END FILE TYPE into UNIMPL.
223
224         * file-type.c: Add prototypes to get rid of warnings.
225
226 Sun May  8 08:08:07 WST 2005 John Darrington <john@darrington.wattle.id.au>
227
228         * barchart.c box-whisker.c cartesian.c piechart.c plot-hist.c: Fixed 
229         more ISO/IEC 9899:1990 conformance issues.
230
231 Wed May  4 23:54:02 2005  Ben Pfaff  <blp@gnu.org>
232
233         Fix bug 12948.  See also new test in
234         tests/bugs/match-file-scratch.sh.
235         
236         * get.c: (mtf_merge_dictionary) Don't compact dictionary because
237         that deletes scratch variables that someone else might be using,
238         and because we can't reassign our sources' value indexes.
239         Instead, simply don't copy scratch variables into the master
240         dictionary.
241
242         * dictionary.c: (dict_compact_values) Delete variables from the
243         dictionary passed in, not from default_dict (!).
244
245 Tue May  3 22:25:17 2005  Ben Pfaff  <blp@gnu.org>
246
247         Improve hash.c comments, error-checking.
248         
249         * hash.c: (struct hsh_table) [NDEBUG] Add hash_ordered member.
250         (hsh_create) size == 0 should *not* return NULL!  Set
251         hash_ordered.
252         (hsh_clear) Set hash_ordered.
253         (locate_matching_entry) Check hash_ordered.
254         (hsh_rehash) Rename rehash().  Add assertion.  Set hash_ordered.
255         (hsh_data) Set hash_ordered.  Add const-ness to return value and
256         update all callers.
257         (hsh_sort) Ditto.       
258
259 Wed May  4 08:50:11 WST 2005 John Darrington <john@darrington.wattle.id.au>
260
261         * casefile.c: Removed unnecessary #include <valgrind/valgrind.h>
262
263 Tue May  3 19:14:48 WST 2005 John Darrington <john@darrington.wattle.id.au>
264
265         * copyleft.c: Updated copyright date.
266
267         * Makefile.am: Removed erroneous explicit "-lplot"
268
269         * examine.q oneway.q: Made these files conform to ISO/IEC 9899:1990
270
271 Tue May  3 16:20:31 WST 2005 John Darrington <john@darrington.wattle.id.au>
272
273         * command.c command.def: Added description string for unimplemented commands.
274
275         * oneway.q: Sorted the hash tables before shipping out the results. Closes 
276         bug [#12931].
277
278 Mon May  2 23:45:01 2005  Ben Pfaff  <blp@gnu.org>
279
280         Code improvements.
281         
282         * data-list.c:  (parse_fixed) Use lex_end_of_command().
283         (parse_free) Ditto.
284         (cmd_repeating_data) Set cont_end.num in right situations.
285         (parse_repeating_data) Remove redundant test.
286
287 Mon May  2 23:37:19 2005  Ben Pfaff  <blp@gnu.org>
288
289         Partial fix for bug 12859.
290         
291         * data-list.c: (cmd_data_list) Add transformation properly in
292         vfm_source == NULL case.
293
294 Mon May  2 23:27:28 2005  Ben Pfaff  <blp@gnu.org>
295
296         * lexer.c: (lex_error) Improve error messages.
297
298 Mon May  2 22:28:17 2005  Ben Pfaff  <blp@gnu.org>
299
300         * get.c: (cmd_match_files) Check token type before trying to match
301         tokid.  Fixes bug 12923.
302
303 Mon May  2 22:16:51 2005  Ben Pfaff  <blp@gnu.org>
304
305         * flip.c: [HAVE_SYS_TYPES_H] Include <sys/types.h>.  Fixes bug
306         12789.
307
308 Mon May  2 22:02:52 2005  Ben Pfaff  <blp@gnu.org>
309
310         * expressions/generate.pl: (get_token) Make use of /g
311         backward-compatible with Perl 5.6.1.
312
313 Sun May  1 23:00:19 2005  Ben Pfaff  <blp@gnu.org>
314
315         * var-display.c: (cmd_variable_alignment) Fix memory leak.
316         (cmd_variable_level) Ditto.
317
318 Sun May  1 22:49:04 2005  Ben Pfaff  <blp@gnu.org>
319
320         Hash table had buggy deletion function.  The fix required changing
321         other functions to do probing in the required order.
322
323         * hash.c: (locate_matching_entry) Rewrite and change interface.
324         (hsh_rehash) Rewrite to use locate_matching_entry().
325         (hsh_probe) Ditto.
326         (hsh_find) Ditto.
327         (hsh_delete) Ditto.  Also, fix stupid bugs.
328
329 Sun May  1 22:24:58 2005  Ben Pfaff  <blp@gnu.org>
330
331         * dictionary.c: (dict_clone) Properly copy vectors.
332
333 Sun May  1 22:07:58 2005  Ben Pfaff  <blp@gnu.org>
334
335         New implementation of long variable names.  Each variable has a
336         "normal" name, which may be up to 64 bytes long and which is used
337         for all normal operations.  Variables may have a "short" name,
338         which is limited to 8 bytes and used only for system and portable
339         file input and output.
340         
341         Make tokid case-preserving.  Update most uses of tokid to treat it
342         case-insensitively.
343
344         Update many commands to deal with long variable names.
345
346         * autorecode.c: (cmd_autorecode) Use strcasecmp() instead of strcmp().
347
348         * command.c: (cmd_parse) Ditto.
349         (match_strings) Use toupper() before comparing characters.
350         (conflicting_3char_prefixes) Use mm_case_compare() instead of
351         memcmp().
352         (cmd_match_words) Ditto.
353
354         * compute.c: (lvalue_parse) Use st_trim_copy() instead of
355         strncpy().
356
357         * count.c: (struct cnt_var_info) Change n[] to fit long var name.
358         Use st_trim_copy() instead of strcpy().
359
360         * data-in.c: (parse_enum) Use mm_case_compare() instead of
361         memcmp().
362
363         * data-list.c: (struct dls_var_spec) Change name[] to fit long var
364         name.
365         (parse_free) Use st_trim_copy() instead of strcpy().
366
367         * descript.c: (struct dsc_var) Change z_name[] to fit long var
368         name.
369         (try_name) Use strcasecmp() instead of strcmp().
370         (generate_z_varname) Use st_trim_copy() instead of strcpy().
371         (descriptives_compare_dsc_vars) Use strcasecmp() instead of
372         strcmp().
373
374         * dictionary.c: (struct dictionary) Removed `long_name_tab'
375         member.
376         (compare_long_names) Removed.
377         (hash_long_name) Removed.
378         (dict_create) Don't initialize `long_name_tab' member.
379         (dict_clone) Copy short names into new dictionary. 
380         (dict_clear) Don't clear `long_name_tab' member.
381         (dict_get_varname_block) Removed.
382         (dict_add_longvar_entry) Removed.
383         (free_nte) Removed.
384         (dict_destroy) Don't destroy `long_name_tab' member.
385         (dict_create_var_from_short) Removed.
386         (dict_create_var_x) Removed.
387         (dict_create_var) Get rid of longname handling.
388         Clear short name.
389         (dict_clone_var) Get rid of longname parameter and longname
390         handling.
391         (dict_lookup_var) Get rid of longname handling.
392         (dict_reorder_var) New function.
393         (dict_rename_var) Clear short name.
394         (dict_rename_vars) Get rid of longname handling.  Clear short
395         names.
396         (dict_create_vector) Support long vector names.
397         (dict_lookup_vector) Use strcasecmp() instead of strcmp().
398         (quasi_base27) Removed.
399         (make_short_name) Removed.
400         (compare_strings) New function.
401         (hash_string) New function.
402         (dict_assign_short_names) New function.
403
404         * file-handle.q: (get_handle_with_name) Use strcasecmp() instead
405         of strcmp().
406         (get_handle_for_filename) Support long handle names.
407
408         * file-type.c: (struct col_spec) Make `name' fit long var names.
409         (cmd_file_type) Use strcasecmp() instead of strcmp().
410
411         * flip.c: (make_new_var) Rewrite.
412         (flip_sink_write) Use st_trim_copy() instead of strncpy().
413
414         * format.c: (parse_format_specifier_name) Use mm_case_compare()
415         instead of memcmp().
416
417         * get.c: (cmd_save_internal) Rephrase.
418         (rename_variables) Drop test for identical variable name.
419         (struct mtf_proc) Change `first', `last' to fit long var name.
420
421         * hash.c: (hsh_hash_case_string) New function for case-insensitive
422         string hashing.
423
424         * lexer.c: (restore_token) Use st_trim_copy() instead of
425         strncpy().
426         (lex_get) Don't uppercase string when copying into tokid.
427         (lex_put_back_id) Use st_trim_copy() instead of
428         strncpy().
429
430         * list.q: (determine_layout) Consider length of variable names in
431         choosing vertical layout.
432
433         * matrix-data.c: (cmd_matrix_data) Use strcasecmp() instead of
434         strcmp().
435         (string_to_content_type) Ditto.
436
437         * modify-vars.c: (compare_variables_given_ordering) Ditto.
438         (struct var_renaming) Change `new_name' to fit long var name.
439         (compare_var_renaming_by_new_name) Use strcasecmp() instead of
440         strcmp().
441
442         * pfm-read.c: (read_variables) Disallow system variables in system
443         files.
444         (write_variables) Call dict_assign_short_names() and use
445         short_name[] members.
446
447         * repeat.c: (internal_cmd_do_repeat) Use strcasecmp() instead of
448         strcmp().
449
450         * sfm-read.c: (sfm_open_reader) Rewrite code for long variable
451         map.  Reorder variables into same order as long variable map.
452         (read_variables) Set short name.
453
454         * sfm-write.c: (sfm_open_writer) Call dict_assign_short_names().
455         (write_variable) Use st_bare_pad_copy().
456         (write_longvar_table) Rewrite.
457
458         * str.c: (mm_case_compare) New function.
459
460         * sysfile-info.c: (compare_vectors_by_name) Use strcasecmp()
461         instead of strcmp().
462
463         * t-test.q: (tts_custom_groups) Remove redundant test.
464         (tts_custom_pairs) Ditto.
465
466         * var.h: (struct variable) Change `name' to fit long var names.
467         Remove `longname'.  Add `short_name' member.  Reorder some
468         variables.
469         (struct name_table_entry) Removed.
470         (struct vector) Change `name' to fit long vector names.
471
472         * vars-atr.c: (var_is_valid_name) Allow long var names.
473         (compare_var_names) Use strcasecmp() instead of strcmp().
474         (compare_var_ptr_names) Ditto.
475         (hash_var_name) Use hsh_hash_case_string().
476         (hash_var_ptr_name) Ditto.
477         (var_set_short_name) New function.
478         (var_clear_short_name) New function.
479         (var_set_short_name_suffix) New function.
480
481         * vars-prs.c: (parse_DATA_LIST_vars) Support long names.
482         Use strcasecmp() instead of strcmp().
483         (struct array_var_set) Removed `longname_tab'.
484         (array_var_set_lookup_var_idx) Drop longname_tab support.
485         (array_var_set_destroy) Don't destroy `longname_tab'.
486         (var_set_create_from_array) Don't create `longname_tab'.
487
488         * vector.c: (cmd_vector) Use strcasecmp() instead of strcmp().
489         Support long names.
490
491         * expressions/parse.c: (word_matches) Use mm_case_compare()
492         instead of memcmp().
493         (compare_strings) New function.
494         (lookup_function) Use compare_strings() instead of strcmp().
495         
496 Sun May  1 22:07:43 2005  Ben Pfaff  <blp@gnu.org>
497
498         * algorithm.c: (move_element) New function.
499
500 Sun May  1 22:05:35 2005  Ben Pfaff  <blp@gnu.org>
501
502         * aggregate.c: (parse_aggregate_functions) Always initialize
503         destvar.
504
505 Sun May  1 22:03:47 2005  Ben Pfaff  <blp@gnu.org>
506
507         * aggregate.c: (cmd_aggregate) Use dict_clone_var_assert().
508
509         * dictionary.c: (dict_clone) Ditto.
510         (dict_clone_var_assert) New function.
511
512         * get.c: (mtf_merge_dictionary) Use dict_clone_var_assert().
513
514 Sun May  1 15:05:54 WST 2005 John Darrington <john@darrington.wattle.id.au>
515
516         * error.c: Added a string for the compiler version to the
517         request_bug_report_and_abort function.
518
519         * groff_font.c, font.c: Removed manpage(1) style references from 
520         comments, because RMS frowns upon them.
521
522 Thu Apr 28 18:52:06 2005  Ben Pfaff  <blp@gnu.org>
523
524         * expressions/parse.c: Improve previous fix for bug 12858 (LAG).
525
526 Fri Apr 29 09:28:00 WST 2005 John Darrington <john@darrington.wattle.id.au>
527
528         * expressions/parse.c: Added handler for OP_LAG_Vn and OP_LAG_Vs.  
529         Fixed bug [#12858] .
530
531 Wed Apr 27 12:42:34 WST 2005 John Darrington <john@darrington.wattle.id.au>
532
533         * loop.c recode.c repeat.c: Fixed a couple of instances of SHORT_NAME_LEN 
534         which should be LONG_NAME_LEN
535
536 Wed Apr 27 07:43:50 WST 2005 John Darrington <john@darrington.wattle.id.au>
537
538         * command.def echo.c:  Added the ECHO command.
539
540 Mon Apr 25 22:55:59 2005  Ben Pfaff  <blp@gnu.org>
541
542         Finish fixing MATCH FILES (bug 11677).
543
544         * get.c: (trim_dictionary) Rewrite in terms of drop_variables(),
545         keep_variables(), rename_variables().
546         (drop_variables) New function.
547         (keep_variables) New function.
548         (struct mtf_file) Rename `in' to `in_name'.  Add `in_var'.
549         (cmd_match_files) Deal with in_var.  Use drop_variables(),
550         keep_variables().  When IN is specified, require BY.  Set master
551         variables after master dictionary is complete.  Add IN variables
552         after master dictionary is complete.
553         (mtf_free_file) Free `in_name'.
554         (mtf_delete_file_in_place) Set in_var value to 0.
555         (mtf_read_nonactive_records)  Rephrase.
556         (mtf_processing) Support IN.  Rephrase.  Fix bugs.
557         (mtf_merge_dictionary) Don't set master variables; we do that
558         later now.
559         (get_master) Don't insist that there's a master variable.
560         
561 Mon Apr 25 22:55:22 2005  Ben Pfaff  <blp@gnu.org>
562
563         Kluge to make some variable renaming sort of work.
564         Needs real fix.
565
566         * dictionary.c: (dict_rename_var) Call dict_add_longvar_entry().
567
568 Mon Apr 25 22:52:28 2005  Ben Pfaff  <blp@gnu.org>
569
570         Add functions for comparing sets of variables between cases.
571         Use the functions.
572
573         * case.c: (case_compare) New function.
574         (case_compare_2dict) New function.
575         
576         * aggregate.c: (struct agr_proc) Remove `prev_break' member.  Add
577         `break_case'.
578         (cmd_aggregate) Nullify break_case.  Don't call
579         initialize_aggregate_info().
580         (agr_destroy) Destroy break_case.
581         (aggregate_single_case) Rewrite.  Use case_compare().
582         (dump_aggregate_info) Copy from break_case into output.
583         (initialize_aggregate_info) Copy break_case from input.
584
585         * get.c: (mtf_compare_BY_values) Use case_compare_2dict().
586
587         * vfm.c: (equal_splits) Use case_compare().
588
589 Sat Apr 23 17:01:04 WST 2005 John Darrington <john@darrington.wattle.id.au>
590
591         * dictionary.c vars-prs.c sfm-write.c: Fixed some memory leaks
592
593 Sun Apr 17 23:08:15 2005  Ben Pfaff  <blp@gnu.org>
594
595         Start work on fixing MATCH FILES.
596
597         * get.c: (enum operation) Remove OP_MATCH.
598         (trim_dictionary) Change return value to bool.  Don't support
599         OP_MATCH.
600         (struct mtf_file) Remove `first', `last' members.
601         (struct mtf_proc) Add `first', `last' members.  Change mtf_case
602         from `struct ccase *' to `struct ccase'.  Remove `by' member.
603         (cmd_match_files) Essentially rewrite.
604         (mtf_free) Don't free `by' member.  Destroy `mtf_case' member.
605         (mtf_read_nonactive_records) mtf_ parameter is not unused.
606         (mtf_processing) Ditto.  Also rephrase some code.
607         (mtf_merge_dictionary) Rewrite for easy comprehension.  
608
609 Sun Apr 17 23:06:00 2005  Ben Pfaff  <blp@gnu.org>
610
611         * matrix-data.c: (wr_output_data) [DEBUGGING] Fix compilation
612         error.
613
614         * q2c.c: (dump_token) [DEBUGGING] Fix compilation error.
615         
616 Thu Apr 14 2005 John Darrington
617
618         * var-display.c: New file.
619
620         * format.h var.h sfm-read.c sfm-write.c dictionary.c :  Added 
621           display_width, measure and alignment parameters to variables.
622
623         * aggregate.c command.def compute.c count.c data-list.c descript.c
624           dictionary.c dictionary.h expr-prs.c file-type.c flip.c get.c 
625           lexer.c lexer.h loop.c modify-vars.c pfm-read.c recode.c repeat.c 
626           sfm-read.c sfm-write.c sfm-write.h sfmP.h val-labs.c val.h var.h 
627           vars-prs.c vector.c :  
628               - Replaced literal constants representing maximum variable name 
629                 length with macro definitions. 
630               - Added support for long variable names.
631               - Changed lexer such that it no longer makes tokens upper
632                 case, but relies upon case insensitive behaviour of commands.
633
634 Mon Apr  4 22:27:34 2005  Ben Pfaff  <blp@gnu.org>
635
636         * aggregate.c: (parse_aggregate_functions) If dict_create_var()
637         fails, don't dereference the resulting null pointer (bug 12427).
638         Also, fix double free error.
639
640 Sat Mar 19 23:06:02 2005  Ben Pfaff  <blp@gnu.org>
641
642         * aggregate.c: (parse_aggregate_functions) Fix N_NO_VARS format.
643         (accumulate_aggregate_info) Set int1 to 1 for SUM.
644         (dump_aggregate_info) Only make SUM non-missing if there was at
645         least one variate.
646
647 Sat Mar 19 14:48:19 2005  Ben Pfaff  <blp@gnu.org>
648
649         * aggregate.c: (dump_aggregate_info) Properly test whether the
650         destination variable is numeric, when making the result
651         system-missing for columnwise missing values.
652
653 Mon Mar 14 21:52:34 2005  Ben Pfaff  <blp@gnu.org>
654
655         * misc.h: Remove GCC specializations.
656
657 Mon Mar 14 21:07:23 2005  Ben Pfaff  <blp@gnu.org>
658
659         Make sort stable (bug 12313).
660         
661         * sort.c: Don't need to include some headers anymore.
662         (static var min_buffers) New variable.
663         (static var max_buffers) New variable.
664         (static var allow_internal_sort) New variable.
665         (cmd_sort_cases) Add test mode.
666         (sort_execute) Rephrase.
667         (do_internal_sort) Don't try internal sorting if
668         allow_internal_sort is set.
669         (struct external_sort) Renamed `initial_runs' to `runs' and
670         updated all references.
671         (macro MIN_BUFFER_TOTAL_SIZE_RECS) Removed.
672         (macro MIN_BUFFER_SIZE_BYTES) Removed.
673         (macro MIN_BUFFER_SIZE_RECS) Removed.
674         (compare_initial_runs) Removed.
675         (struct record_run) Add member `idx'.
676         (write_initial_runs) Pass increasing values to process_case() as
677         index.
678         (process_case) Add `idx' parameter and use it to initialize new
679         `idx' member.
680         (allocate_cases) Limit allocated buffers to max_buffers.
681         (compare_record_run) Use new `idx' member for last resort
682         comparison, for stability.
683         (end_run) Call casefile_sleep() on irs->casefile, to prevent
684         running out of file descriptors.
685         (struct merge_state) Removed.
686         (merge) Don't need to allocate cases.  Always use MAX_MERGE_ORDER
687         unless we have fewer runs left.  Always merge consecutive runs,
688         for stability.  Return the final run.
689         (mod) Removed.
690         (choose_merge) New function.
691         (merge_once) Rewritten.
692
693 Mon Mar 14 21:05:42 2005  Ben Pfaff  <blp@gnu.org>
694
695         * cmdline.c: (static var testing_mode) Move into
696         parse_command_line().
697         
698 Mon Mar 14 21:05:13 2005  Ben Pfaff  <blp@gnu.org>
699
700         * algorithm.c: (remove_range) New function.
701         (remove_element) New function.
702
703         * dictionary.c: (dict_delete_var) Use remove_element().
704
705         * flip.c: (cmd_flip) Ditto.
706
707 Sun Mar 13 22:52:05 2005  Ben Pfaff  <blp@gnu.org>
708
709         * file-handle.q: (struct file_handle) `open_mode' should not be
710         const.
711         
712 Sun Mar 13 22:40:54 2005  Ben Pfaff  <blp@gnu.org>
713
714         First phase of making SORT CASES stable (bug 12313).
715
716         * sort.c: (struct indexed_case) New structure.
717         (do_internal_sort) Rewrite to make internal sorting stable.
718         (compare_case_dblptrs) Removed.
719         (compare_indexed_cases) New function.
720
721 Sun Mar 13 22:38:40 2005  Ben Pfaff  <blp@gnu.org>
722
723         Clean-ups.
724
725         * casefile.c: (casereader_read_xfer_assert) New function.
726
727         * dictionary.c: (dict_compact_case) New function.
728
729         * flip.c: (struct flip_pgm) New member idx_to_fv.
730         (cmd_flip) Initialize idx_to_fv member.
731         (destroy_flip_pgm) Free idx_to_fv member.
732         (flip_sink_write) Use struct flip_pgm member instead of case_sink
733         member.
734         (flip_sink_write) Ditto.
735
736         * vfm.c: (write_case) Use dict_compact_case() instead of
737         compact_case().
738         (compact_case) Removed.
739         (storage_source_create) Removed `dict' parameter.  All references
740         updated.
741
742         * vfm.h: (struct case_source) Removed `value_cnt' member.  All
743         references removed.
744         (struct case_sink) Removed `dict', `idx_to_fv' members.  All
745         references removed.
746
747 Sun Mar 13 22:35:55 2005  Ben Pfaff  <blp@gnu.org>
748
749         More AGGREGATE fixes.
750
751         * aggregate.c: (accumulate_aggregate_info) Implement NMISS and
752         NUMISS for strings.  Fix FOUT, POUT, FGT, FLT, FIN, FOUT for
753         strings.
754         (initialize_aggregate_info) Fix initialization for MIN, MAX for
755         strings.
756
757 Sat Mar 12 23:26:21 2005  Ben Pfaff  <blp@gnu.org>
758
759         Start work on testing and debugging AGGREGATE.
760
761         * aggregate.c: (cmd_aggregate) Use discrete bool variables instead
762         of a bit-map.  Require proper subcommand ordering.  Make OUTFILE
763         subcommand mandatory.
764         (parse_aggregate_functions) Check that PIN, POUT, FIN, FOUT
765         functions' arguments are in the correct order and swap them if
766         not.
767         (accumulate_aggregate_info) Make SUM include weights.  Add various
768         string functions.
769         (dump_aggregate_info) Add various string functions.
770         (initialize_aggregate_info) Initialize int1 for MIN, MAX.
771
772         * sort.c: (sort_parse_criteria) Add parameter for returning
773         whether any directions were specified.  All callers updated.
774
775 Sun Mar 13 14:54:27 WST 2005 John Darrington <john@darrington.wattle.id.au>
776
777         * t-test.q: Fixed erroneous logic in compare_group_binary.
778
779 Sat Mar 12 13:29:21 2005  Ben Pfaff  <blp@gnu.org>
780
781         * split-file.c: (cmd_split_file) Ignore LAYERED and SEPARATE
782         keywords (bug 11628).
783
784 Sat Mar 12 13:17:12 2005  Ben Pfaff  <blp@gnu.org>
785
786         * vfm.c: (procedure_with_splits) Fix bug 11492: end_func() must be
787         called *before* close_active_file().
788
789 Sat Mar 12 12:20:57 2005  Ben Pfaff  <blp@gnu.org>
790
791         * file-handle.q: (struct file_handle) Change open_mode from
792         character pointer to 3-char array, for safety.  Updated all
793         references.
794
795 Sat Mar 12 12:15:49 2005  Ben Pfaff  <blp@gnu.org>
796
797         Thanks to Ben Kujala <bkujala@oregonchildcare.org> for reporting
798         these bugs.
799         
800         * pfm-read.c: (read_header) Improve error message for many cases
801         in which the input is not actually a portable file.
802
803         * file-handle.q: (fh_open) When we give an error message, actually
804         return NULL.
805
806 Fri Mar 11 11:50:30 2005  Ben Pfaff  <blp@gnu.org>
807
808         * format.c: (check_common_specifier) New function for checks
809         common to check_input_specifier() and check_output_specifier().
810         (check_input_specifier) Use check_common_specifier().
811         (check_output_specifier) Use check_common_specifier().
812         (check_string_specifier) Removed.
813         (check_specifier_type) New function.
814         (check_specifier_width) New function.
815         (get_format_var_width) Fix bug.
816
817         * formats.c: (internal_cmd_formats) Only accept numeric variables.
818
819         * lexer.c: (check_id) Rename lex_id_to_token(), make public,
820         update all references.  Make case-insensitive.
821
822         * pfm-read.c: Essentially rewrite the whole file.  Now much
823         cleaner.
824
825         * print.c: (check_string_width) New function.
826         (fixed_parse_compatible) Use check_string_width(),
827         check_specifier_type().
828         (dump_fmt_list) Ditto.
829
830         * str.c: (st_trim_copy) New function.
831         (st_uppercase) New function.
832
833         * vars-atr.c: (var_is_valid_name) New function.
834         
835         * expressions/parse.c: (type_coercion_core) Use
836         check_specifier_type().
837         
838 Fri Mar 11 11:31:24 2005  Ben Pfaff  <blp@gnu.org>
839
840         * expressions/evaluate.c: (cmd_debug_evaluate) Fix memory leaks.
841
842         * expressions/parse.c: (no_match) Ditto.
843
844 Wed Mar  9 09:54:27 2005  Ben Pfaff  <blp@gnu.org>
845
846         * Makefile.am: (pspp_LDADD) Add libgsl-extras.a.
847
848         * expressions/helpers.c: (struct func_params) Removed.
849         (generalized_idf) Removed.
850         (cdf_beta) Removed.
851         (idf_beta) Removed.
852         (idf_fdist) Use gslextras_cdf_beta_Pinv() instead of idf_beta().
853
854         * expressions/operations.def: Implement IDF.BETA, CDF.BINOM,
855         CDF.GEOM, CDF.HYPER, CDF.NEGBIN, CDF.POISSON using gsl-extras.
856         Implement SIG.F, which I had overlooked previously.
857
858 Tue Mar  8 12:47:53 WST 2005 John Darrington <john@darrington.wattle.id.au>
859
860         * command.c command.def glob.[ch] cmdline.c: Made DEBUG cmds
861         available only in testing mode.
862
863 Sun Mar  6 23:25:40 2005  Ben Pfaff  <blp@gnu.org>
864
865         * data-in.c: Use `bool' throughout, where relevant.
866
867 Sun Mar  6 19:52:22 2005  Ben Pfaff  <blp@gnu.org>
868
869         DATA LIST with free-field formats should not have implied decimal
870         places (bug 12035).  Also clean up data-in.c a bit.
871
872         * data-in.h: (enum) Add DI_IMPLIED_DECIMALS.
873
874         * data-in.c: (apply_implied_decimals) New function.
875         (parse_numeric) Don't adjust exponent if DI_IMPLIED_DECIMALS not
876         set.  Also, get rid of gotos.
877         (parse_Z) Use apply_implied_decimals() if the field doesn't
878         contain a decimal point.
879         (parse_N) Use apply_implied_decimals().
880         (parse_IB) Ditto.
881         (parse_PIB) Ditto.
882         (parse_P) Ditto.
883         (parse_PK) Ditto.
884         (to_roman) Removed.
885         (parse_enum) New function.
886         (macro CHAR_IS_ROMAN) Removed.
887         (macro ROMAN_VALUE) Removed.
888         (parse_month) Use parse_enum().
889         (parse_weekday) Use parse_enum().
890         (parse_DATETIME) Use long for weekday.
891
892         * data-list.c: (read_from_data_list_fixed) Use
893         DI_IMPLIED_DECIMALS.
894
895 Sun Mar  6 17:07:20 2005  Ben Pfaff  <blp@gnu.org>
896
897         When the lexer sees something like `-5' in the input, it has to
898         decide whether it's a negative numeric constant token or a '-'
899         token followed by a positive numeric constant token.  It always
900         decides on the former, and then the parser can call
901         lex_negative_to_dash() if it wants the latter.  However, this
902         doesn't work for the case of `-0', because negative zero is
903         (portably) indistinguishable from positive zero.  So now we divide
904         T_NUM into two tokens, T_POS_NUM and T_NEG_NUM, to make the
905         distinction clear.  This requires a little bit of extra effort,
906         because there were several references to T_NUM in the code base.
907         
908         * lexer.c: (lex_get) Use T_NEG_NUM and T_POS_NUM to distinguish
909         positive and negative numeric constants.
910         (lex_double_p) Renamed lex_is_number().  Changed return type to
911         bool.  Updated all relevant references to T_NUM to instead use
912         this function.
913         (lex_double) Renamed lex_number().  All references updated.
914         (lex_integer_p) Renamed lex_is_integer().  Changed return type to
915         bool.  All references updated.
916         (lex_token_representation) Understand T_NEG_NUM and T_POS_NUM.
917         (lex_negative_to_dash) Ditto.
918         (dump_token) Ditto.
919         
920         * lexer.h: (enum) Add T_POS_NUM, T_NEG_NUM.  Remove T_NUM.
921
922 Sun Mar  6 22:09:20 2005  Ben Pfaff  <blp@gnu.org>
923
924         * expressions/operations.def: (NUMBER) Use DI_IMPLIED_DECIMALS.
925
926 Sun Mar  6 19:33:24 2005  Ben Pfaff  <blp@gnu.org>
927
928         * expressions/operations.def: (VEC_ELEM_NUM) Treat user-missing
929         values as system-missing.
930
931         * expressions/parse.c: (parse_vector_element) Fix order of
932         arguments in call to expr_allocate_binary().
933
934 Sun Mar  6 17:51:05 2005  Ben Pfaff  <blp@gnu.org>
935
936         * expressions/optimize.c: (optimize_tree) Fix optimization bug for
937         x**2.
938
939         * expressions/parse.c: (type_coercion_core) Set *node to NULL on
940         failure, as indicated by function comment.
941         (parse_binary_operators) Always return NULL on type_coercion()
942         failure.  Should have been doing this anyway, but bug in
943         type_coercion_core() filtered through.
944         (parse_add) Fix typo in user message.
945         (parse_primary) Understand T_NEG_NUM and T_POS_NUM.
946
947 Sun Mar  6 10:47:13 2005  Ben Pfaff  <blp@gnu.org>
948
949         * expressions/operations.def: Add VALUE function.
950
951         * expressions/parse.c: (parse_function) Need an unary composite
952         node for variables in A TO B, not a variable node.  Use
953         allocate_unary_variable().
954         (parse_primary) Use allocate_unary_variable().
955         (allocate_unary_variable) New function.
956
957 Thu Mar  3 23:53:32 2005  Ben Pfaff  <blp@gnu.org>
958
959         * expressions/PSPP_expressions.pm: Renamed it back to generate.pl
960         but fixed the real problem that was preventing the build from a
961         separate directory.  I liked it my way better ;-)
962         
963 Thu Mar  3 23:17:51 2005  Ben Pfaff  <blp@gnu.org>
964
965         * expressions/parse.c: (expr_parse) Fix parameter type.  Thanks to
966         John Darrington <john@darrington.wattle.id.au> for reporting this
967         bug.
968
969 Thu Mar  3 22:10:25 WST 2005 John Darrington <john@darrington.wattle.id.au>
970
971         * expressions/Makefile.am expressions/evaluate.h.pl
972           expressions/evaluate.inc.pl expressions/operations.h.pl
973           expressions/optimize.inc.pl expressions/parse.inc.p:
974
975           Renamed generate.pl to PSPP_expressions.pm and adjusted *.pl
976           to suit. 
977
978           Fixed everything so that it can be built from an arbitrary
979           directory.
980         
981 Thu Mar  3 22:08:35 WST 2005 John Darrington <john@darrington.wattle.id.au>
982
983         * Makefile.am : Fixed up CLEANFILES target.
984
985 Mon Feb 28 23:49:56 2005  Ben Pfaff  <blp@gnu.org>
986
987         * str.h: Changed `struct len_string' to `struct fixed_string', a
988         more accurate name.  Updated all references.
989
990 Mon Feb 28 23:35:30 2005  Ben Pfaff  <blp@gnu.org>
991
992         Redo calendar support.  Should now be bug-for-bug compatible.
993         
994         * calendar.c: New file.
995
996         * calendar.h: New file.
997
998         * data-in.c: Use new calendar functions.
999         (parse_sign) Change sense of return value.
1000         (calendar_error) New function.
1001         (ymd_to_ofs) New function.
1002         (ymd_to_date) New function.
1003         (parse_DATE) Use new function.
1004         (parse_ADATE) Ditto.
1005         (parse_EDATE) Ditto.
1006         (parse_SDATE) Ditto.
1007         (parse_JDATE) Ditto.
1008         (parse_QYR) Ditto.
1009         (parse_MOYR) Ditto.
1010         (parse_WKYR) Ditto.
1011         (parse_TIME) Ditto.
1012         (parse_DTIME) Ditto.
1013         (parse_DATETIME) Ditto.
1014
1015         * data-out.c: (convert_date) Use new calendar functions.
1016
1017         * error.c: (err_vmsg) Changed interface to be more sensible.
1018         Updated all callers.
1019         (dump_message) Don't double new-lines (why did we do this
1020         anyway?).
1021
1022 Mon Feb 28 23:30:25 2005  Ben Pfaff  <blp@gnu.org>
1023
1024         * sfmP.h: (macro flt64) Moved here from pref.h.orig.
1025         (macro FLT64_MAX) Moved here from pref.h.orig.
1026
1027 Mon Feb 28 23:28:01 2005  Ben Pfaff  <blp@gnu.org>
1028
1029         * set.q: Support SET EPOCH.
1030         (static var set_epoch) New var.
1031         (aux_stc_custom_epoch) New function.
1032         (stc_custom_epoch) New function.
1033         (get_epoch) New function.
1034         (stc_custom_pager) [USE_INTERNAL_PAGER] Fix bug.
1035
1036         * format.c: Make it possible just to check whether a specifier is
1037         valid without emitting an error message.
1038         (parse_format_specifier_name) Change interface, update all
1039         callers.
1040         (check_input_specifier) Ditto.
1041         (check_output_specifier) Ditto.
1042         (parse_format_specifier) Ditto.
1043
1044 Mon Feb 28 23:24:08 2005  Ben Pfaff  <blp@gnu.org>
1045
1046         * command.def: Add DEBUG POOL.
1047
1048         * pool.c: (pool_destroy) Fix bug in deleting this pool from its
1049         parent.
1050         (pool_clear) Properly account for size of pool gizmo.
1051         (pool_realloc) Ditto.
1052         (pool_clone) New function.
1053
1054         * pool.h: Mark our allocation functions MALLOC_LIKE.
1055
1056 Mon Feb 28 23:21:26 2005  Ben Pfaff  <blp@gnu.org>
1057
1058         * Makefile.am: Move many definitions into new top-level
1059         Make.build.  Add expressions to SUBDIRS.  Add calendar.c,
1060         calendar.h.  Remove expr-evl.c, expr-opt.c expr-prs.c, expr.h,
1061         exprP.h, expr.def.
1062
1063         * case.c: (case_resize) New function.
1064         (case_swap) New function.
1065
1066         * casefile.c: Include mkfile.h.
1067
1068 Fri Feb 25 21:11:35 WST 2005 John Darrington <john@darrington.wattle.id.au>
1069
1070         * sfm-read.c: Fixed a buglet which caused a crash when trying
1071         to read a non-existent file.
1072
1073 Sun Feb 13 16:11:13 2005  Ben Pfaff  <blp@gnu.org>
1074
1075         Fix bug 11955.
1076
1077         * aggregate.c: (parse_aggregate_functions) Code cleanup.
1078         Important part: get rid of spurious copying of function->format to
1079         destvar->print and destvar->write.
1080
1081 Fri Feb 11 00:08:36 2005  Ben Pfaff  <blp@gnu.org>
1082
1083         Fix bug 11916, which was confusing a variable's `index' member
1084         with the variable's position in a var_set.  Although these are
1085         usually the same, they are not for array `var_set's.
1086         
1087         Took advantage of this bug as an opportunity to clean up and
1088         rewrite parse_var_set_vars().
1089
1090         * vars-prs.c: (parse_vs_variable_idx) New function.
1091         (parse_vs_variable) Reimplement in terms of
1092         parse_vs_variable_idx().
1093         (parse_var_idx_class) New function.
1094         (add_variable) New function.
1095         (add_variables) New function.
1096         (parse_var_set_vars) Rewritten.
1097         (struct var_set) Change `lookup_var' member that returns a
1098         variable into `lookup_var_idx' member that returns an int.
1099         Updated the var set implementations in obvious corresponding ways.
1100         Used compare_var_ptr_names(), hash_var_ptr_name() just added.
1101         
1102 Fri Feb 11 00:06:03 2005  Ben Pfaff  <blp@gnu.org>
1103
1104         Use our global variable compare & hash functions and give them
1105         better names.  Add similar functions for dealing with double
1106         pointers to variables.
1107         
1108         * vars-atr.c: (compare_variables) Renamed compare_var_names().
1109         (hash_variable) Renamed hash_var_name().
1110         (compare_var_ptr_names) New function.
1111         (hash_var_ptr_name) New function.
1112         
1113         * t-test.q: (cmd_t_test) Use global compare_var_names(),
1114         hash_var_name().
1115         (compare_var_name) Removed.
1116         (hash_var_name) Removed.
1117
1118 Fri Feb 11 00:04:39 2005  Ben Pfaff  <blp@gnu.org>
1119
1120         Fix dictionary bug.
1121         
1122         * dictionary.c: (compare_variable_dblptrs) Rename
1123         compare_var_ptrs() and fix it to properly dereference the double
1124         pointers.
1125
1126 Mon Feb  7 09:58:15 WST 2005 John Darrington <john@darrington.wattle.id.au>
1127
1128         crosstabs.q examine.q oneway.q q2c.c:  Added a q2c feature to 
1129         declare subcommands as mandatory.  Closed bug #11843
1130
1131 Sat Feb  5 20:35:10 WST 2005 John Darrington <john@darrington.wattle.id.au>
1132         
1133         * getline.c command.[ch] command.def:  Added (very rudimentary)
1134         support for line  completion when in interactive mode.  Partially 
1135         addresses bug #11693
1136         
1137 Mon Jan 31 09:52:51 WST 2005 John Darrington <john@darrington.wattle.id.au>
1138
1139         * examine.q factor_stats.c oneway.q output.c pfm-read.c: Fixed some
1140         problems revealed by valgrind.
1141
1142
1143 Wed Jan 26 11:44:11 WST 2005 John Darrington <john@darrington.wattle.id.au>
1144
1145         * set.q: Affixed a fix to the previous fix such that we'll be OK now
1146         whether or not PAGER is set.
1147
1148 Wed Jan 26 09:25:54 WST 2005 John Darrington <john@darrington.wattle.id.au>
1149
1150         * set.q: Copied the string produced by getenv("PAGER") thus avoiding
1151         "invalid free" errors.  Hopefully fixes bug #11722
1152
1153         * compute.c expr-prs.c: Check that lvalues are populated before 
1154         attempting to destroy them.  Closes bug #11676
1155
1156 Tue Jan 25 21:01:43 WST 2005 John Darrington <john@darrington.wattle.id.au>
1157
1158         * aggregate.c: Initialised the complete agr_proc structure.
1159         Closes bug #11675
1160
1161
1162 Sun Jan 23 23:02:21 2005  Ben Pfaff  <blp@gnu.org>
1163
1164         * print.c: (print_trns_free) Close the dfm writer if there is one,
1165         fixing a memory leak.
1166
1167 Mon Jan 24 12:24:36 WST 2005 John Darrington <john@darrington.wattle.id.au>
1168
1169         * glob.c oneway.q q2c.c t-test.q vfm.c: Still *more* memory leaks 
1170         fixed.
1171
1172
1173 Fri Jan 21 19:54:14 WST 2005 John Darrington <john@darrington.wattle.id.au>
1174
1175         * linked-list.[ch] Added
1176
1177         * examine.q file-handle.[hq] font.h glob.c groff-font.c postscript.c 
1178           set.q:    Yet more memory leaks
1179
1180 Tue Jan 18 23:12:40 WST 2005 John Darrington <john@darrington.wattle.id.au>
1181
1182         * t-test.q examine.q : More memory leaks fixed.
1183
1184 Tue Jan 18 19:26:59 WST 2005 John Darrington <john@darrington.wattle.id.au>
1185
1186         * examine.q  factor_stats.[ch] get.c pfm-read.c: Plugged numerous
1187         memory leaks.
1188
1189 Mon Jan 10 14:43:45 WST 2005 John Darrington <john@darrington.wattle.id.au>
1190
1191         * ascii.c cartesian.c casefile.c chart.h devind.c 
1192           examine.q frequencies.q
1193           html.c output.h piechart.c plot-chart.c plot-hist.c
1194
1195           Integrated the chart rendering into the output stream
1196           (currently only works for html).
1197           
1198           Removed gratuitous use of ifndef NO_CHARTS, and replaced with
1199           dummy-chart.c for compiling without charts.
1200
1201         * mkfile.[ch] Created.  
1202
1203         * som.[ch] tab.[ch]: Changed name of som_table to som_entity
1204         Added type element so we can tell if it's a chart or a table.
1205
1206         * chart.h examine.q piechart.c plot-chart.c plot-hist.c: changed the 
1207         API of charts to be more like that of tables.
1208
1209 Thu Jan 13 21:00:02 WST 2005 John Darrington <john@darrington.wattle.id.au>
1210
1211         * casefile.c main.c: Moved the SIGINT handler from casefile.c to
1212         main.c. Removed the handler for SIGQUIT.
1213
1214 Mon Jan 10 14:43:45 WST 2005 John Darrington <john@darrington.wattle.id.au>
1215
1216         * casefile.c: Added a signal handler to delete temp files on 
1217         SIGINT and SIGQUIT
1218
1219         * permissions.c Inhibited the PERMISSIONS command when SAFER is on.
1220
1221         * command.def Added a lot more unimplemented commands.
1222
1223         * copyleft.[ch] cmdline.c Moved legal information to copyleft.c
1224
1225 Sat Jan  8 23:58:34 2005  Ben Pfaff  <blp@gnu.org>
1226
1227         * sort.c: (compare_initial_runs) Needed additional level of
1228         dereferencing.
1229         (merge_once) Fix plenty of stupid mistakes.
1230
1231 Sat Jan  8 23:55:27 2005  Ben Pfaff  <blp@gnu.org>
1232
1233         * casefile.c: (casefile_sleep) Need to flush_buffer() after
1234         calling casefile_to_disk() or we will lose the last block in the
1235         file if the casefile started out as disk-based.
1236         (casefile_get_reader) Initialize reader->destructive to 0.
1237         (cmd_debug_casefile) Add new test pattern.
1238         (test_casefile) Define new test pattern to make sure
1239         casefile_sleep() works properly.
1240
1241 Fri Jan  7 08:00:05 WST 2005 John Darrington <john@darrington.wattle.id.au>
1242
1243         * Makefile.am chart.[ch]  histogram.[ch] piechart.c (Modified);
1244           plot-hist.c plot-chart.c (Added) Reorganised these files in an
1245           attempt to seperate the creation and processing of charts from their
1246           actuall renedering.
1247
1248         * examine.q frequencies.q generated charts conditional upon the NO_CHARTS
1249           macro.
1250
1251 Thu Jan  6 18:48:58 WST 2005 John Darrington <john@darrington.wattle.id.au>
1252
1253         * main.c Added a signal handler for SIGFPE
1254
1255         * sort.c Somewhat more robust fix to the previous entry.
1256
1257 Wed Jan  5 21:23:31 2005  Ben Pfaff  <blp@gnu.org>
1258
1259         * sort.c: (merge) Fix assertion for proper Huffman merge pattern:
1260         0 == 1 modulo 1.  See Knuth 5.4.9 (vol. 3, 2nd ed.,
1261         pp. 361).  Thanks to John Darrington <john@cellform.com.au> for
1262         reporting the bug.
1263
1264 Wed Jan  5 22:42:26 WST 2005 John Darrington <john@darrington.wattle.id.au>
1265
1266         * case.h Fixed bug # 11307
1267         
1268 Wed Jan  5 08:30:48 WST 2005 John Darrington <john@darrington.wattle.id.au>
1269
1270         * val-labs.c Fixed bug which caused a crash if VALUE LABELS had
1271         a trailing slash.
1272
1273 Mon Jan  3 17:44:37 2005  Ben Pfaff  <blp@gnu.org>
1274
1275         * pfm-read.c: (read_variables) Remove direct manipulation of
1276         v->aux, which is no longer needed.  Fixes bug 11483.
1277
1278 Sat Jan  1 19:01:16 WST 2005 John Darrington <john@darrington.wattle.id.au>
1279
1280         * data-list.c Fixed a bug in parsing delimiters.
1281
1282         * group.c vars-atr.c Fixed buglet in hash/compare functions for alpha
1283         values.
1284
1285         * percentiles.c Properly handled calculation of Tukey hinges where
1286         the number of data is small.
1287
1288         * oneway.q Used the generic value_to_string function for independent
1289         variable instead of trying to do it ourselves.
1290
1291         * box-whisker.c Fixed a buglet which caused a crash if the number of
1292         data was zero
1293
1294
1295 Fri Dec 31 16:47:45 WST 2004 John Darrington <john@darrington.wattle.id.au>
1296
1297         * examine.q box-whisker.c chart.h Implemented boxplots in EXAMINE
1298
1299         * percentiles.c Fixed some bugs when calculating percentiles when
1300         there's a small number of cases.
1301
1302 Wed Dec 29 08:18:08 WST 2004 John Darrington <john@darrington.wattle.id.au>
1303
1304         * percentiles.[ch] Added. Calculates percentiles and Tukey hinges
1305
1306         * examine.q factor_stats.[ch]  Added calculation of percentiles
1307
1308 Fri Dec 24 15:09:11 WST 2004 John Darrington <john@darrington.wattle.id.au>
1309
1310         * t-test.q Fixed bug #11227 Made t-test work when the independent
1311         variable is alpha
1312
1313 Sat Dec 11 11:43:45 WST 2004 John Darrington <john@darrington.wattle.id.au>
1314
1315         * factor_stats.c Fixed calculation of trimmed mean under various
1316         special conditions.
1317
1318 Sat Dec  4 17:14:45 WST 2004 John Darrington <john@darrington.wattle.id.au>
1319
1320         * histogram.c chart.[ch] factor_stats.c frequencies.q
1321
1322         Added code to calculate sensible histogram ranges and limits.
1323
1324 Thu Dec  2 13:37:43 WST 2004 John Darrington <john@darrington.wattle.id.au>
1325
1326         * chart.h Updated to reflect many API changes.
1327
1328         * cartesian.c chart.c Moved the definitions of chart_write_{xy}scale from 
1329         cartesian.c and into chart.c
1330
1331         * factorstats.[ch] Added the histogram calculations
1332
1333         * casefile.c Removed an unused variable.
1334
1335         * frequencies.q examine.q histogram.c  Reworked the API for 
1336         histograms.
1337
1338         * piechart.c  Revised the API for piecharts.
1339
1340         * var.h  Moved the definitions of freq_tab and freq out of var.h
1341         and into frequencies.q where they belong.
1342         
1343 Tue Nov 30 21:10:20 2004  Ben Pfaff  <blp@gnu.org>
1344
1345         * flip.c: (flip_file) Check for off_t separately from fseeko(),
1346         using AC_TYPE_OFF_T.
1347
1348 Tue Nov 30 08:47:41 2004  Ben Pfaff  <blp@gnu.org>
1349
1350         * flip.c: (flip_file) If fseeko() is not available, use long int
1351         for off_t.  Thanks to "Marshall DeBerry" <mdb@radix.net> for
1352         reporting the problem.
1353
1354 Mon Nov 29 12:20:59 WST 2004 John Darrington <john@darrington.wattle.id.au>
1355
1356         * examine.q factor_stats.[ch] Changed stderr to se_mean to avoid
1357         conflict with stdio.
1358
1359 Sun Nov 21 10:32:41 WST 2004 John Darrington <john@darrington.wattle.id.au>
1360
1361         * var-labs.c (var_to_string) Now returns null if the variable is null
1362
1363         * value-labels.c (value_to_string) Made it return null if either the 
1364         value or the variable is null.
1365
1366         * hash.c (hsh_clear) Fixed a buglet.
1367
1368         * examine.q  factor_stats.[ch] Largely  rewrote, because I'd started 
1369         with  the wrong model.
1370
1371         * casefile.[ch] Added a function to return the casereader.case_idx 
1372         member
1373
1374         * examine.q  Implemented the extreme values results.
1375
1376 John Darrington <john@darrington.wattle.id.au>
1377
1378         * settings.h set.c glob.[ch] frequencies.q q2c.c error.c lexer.[ch] 
1379           output.[ch] getline.c 
1380
1381           Plugged some memory leaks
1382
1383 Mon Nov 15 23:47:40 2004  Ben Pfaff  <blp@gnu.org>
1384
1385         Adopt GSL random number generators, paving the way for providing
1386         the complete suite of random number generators on expressions.
1387         
1388         * Makefile.am: Remove random.c, random.h.
1389
1390         * random.c: Removed.
1391
1392         * random.h: Removed.
1393
1394         * algorithm.c: (algo_default_random) Use GSL functions.
1395
1396         * casefile.c: (test_casefile) Use GSL RNG functions.
1397
1398         * expr-evl.c: (expr_evaluate) Use GSL RNG functions for OP_NORMAL,
1399         OP_UNIFORM.
1400
1401         * sample.c: (cmd_sample) Use GSL RNG functions.
1402         (sample_trns_proc) Ditto.
1403
1404         * set.q: (static var set_seed) Removed.
1405         (static var seed_flag) Removed.
1406         (static var rng) New variable.
1407         (aux_stc_custom_seed) No seed value anymore, don't print anything.
1408         (stc_custom_seed) Use new seed functions.
1409         (seed_is_set) Removed.
1410         (get_rng) New function that composes the entire external
1411         interface.
1412         (set_rng) New function.
1413         (random_seed) New function.
1414
1415 Mon Nov 15 22:08:25 2004  Ben Pfaff  <blp@gnu.org>
1416
1417         * expr-evl.c: (expr_evaluate) Fix XDATE.JDAY formula.  Thanks to
1418         John Darrington <john@darrington.wattle.id.au> for reporting this
1419         bug.
1420
1421 Tue Nov 16 13:19:18 WST 2004 John Darrington <john@darrington.wattle.id.au>
1422
1423         * permissions.c command.def Added the PERMISSIONS command
1424
1425 Mon Nov 15 01:33:32 2004  Ben Pfaff  <blp@gnu.org>
1426
1427         * q2c.c: (dump_header) Don't try to emit #includes at very top of
1428         output file because that will precede #include <config.h>, which
1429         is bad.
1430         (main) Add needed headers to /* (header) */ code.
1431
1432 Mon Nov 15 01:21:36 2004  Ben Pfaff  <blp@gnu.org>
1433
1434         Instead of making system or portable file readers responsible for
1435         dropping and reordering variables, make them read full cases and
1436         let the caller take care of any changes.
1437
1438         * get.c: New "case map" structure to handle this.  Use for GET,
1439         IMPORT, MATCH FILES.  Essentially rewrite the whole file.
1440
1441         * pfm-read.c: (pfm_read_case) Read into provided case.  Signature
1442         changed appropriately.
1443
1444         * sfm-read.c: (sfm_read_case) Ditto.
1445
1446 Mon Nov 15 00:47:45 2004  Ben Pfaff  <blp@gnu.org>
1447
1448         Decided that case_serialize() and case_unserialize() were too
1449         abstract.  Also we need a couple more functions to avoid excessive
1450         copying for data in/out fast paths.
1451
1452         * case.c: (case_serial_size) Removed.
1453         (case_serialize) Rename case_to_values() and make its argument
1454         explicitly an array of union values.
1455         (case_unserialize) Rename case_from_values() and make its argument
1456         explicitly an array of union values.
1457         (case_data_all) New function.
1458         (case_data_all_rw) New function.
1459
1460         * casefile.c: (struct casefile) Change buffer from array of
1461         unsigned char to array of union value for better accuracy.
1462         Redefine buffer_used and buffer_size in terms of values, not
1463         bytes.  Remove case_size because it is now redundant with
1464         value_cnt.  Fix up all references to these members.
1465
1466 Mon Nov 15 00:45:46 2004  Ben Pfaff  <blp@gnu.org>
1467
1468         * barchart.c: (struct subcat) Make `label' member const to silence
1469         GCC warning with -Wwrite-strings.
1470
1471         * cartesian.c: (struct dataset) Ditto.
1472
1473         * case.c: Don't re-define NDEBUG if already defined.
1474         Add lots of comments.
1475
1476         * str.c: Fix includes.
1477
1478         * crosstabs.q: Fix includes.
1479
1480         * examine.q: Fix includes.  Fix GCC warning about unused
1481         variables.
1482         
1483         * frequencies.q: (stat macro) Removed and replaced where used by
1484         its expansion.
1485
1486         * list.q: Fix includes.
1487
1488         * oneway.q: Fix includes.
1489
1490         * piechart.c: Fix includes.  Only define M_PI if not already
1491         defined.
1492
1493         * sfm-read.c: (bswap) New function.
1494         (bswap_int32) Write in terms of bswap.
1495         (bswap_flt64) Ditto.
1496
1497         * str.c: (ds_data) Add external definition here, needed because
1498         str.h has only an `extern inline' version.
1499
1500         * value-labels.c: Fix includes.
1501
1502 Mon Nov 15 00:40:55 2004  Ben Pfaff  <blp@gnu.org>
1503
1504         Instead of providing a system or portable file writer with a raw
1505         case in the format needed for output, provide it with a regular
1506         case.  The writer takes care of any needed translation.
1507
1508         * aggregate.c: Adopt new scheme for AGGREGATE.
1509         (struct agr_proc) sfm_agr_case member removed.
1510         (write_case_to_sfm) Removed because the new interface is easier to
1511         use.
1512
1513         * get.c: Adopt new scheme for SAVE, XSAVE, EXPORT.
1514
1515         * pfm-write.c: Implement new scheme.
1516
1517         * sfm-write.c: Ditto.
1518
1519 Mon Nov 15 00:32:24 2004  Ben Pfaff  <blp@gnu.org>
1520
1521         Instead of treating `struct file_handle' as a class to subclass
1522         into data files, system files, and portable files, instead use it
1523         as a helper that coordinates access.  Now it is opaque, too.
1524
1525         This means that most references to a struct file_handle are now
1526         changed into references to one of struct dfm_reader, struct
1527         dfm_writer, struct sfm_reader, struct sfm_writer, struct
1528         pfm_reader, or struct pfm_writer, according to what's being read
1529         or written.
1530
1531         Most related changes are only worth summarizing briefly.
1532
1533         * dictionary.c: (dict_clear) Destroy aux data in deleted
1534         variables.
1535         (dict_clear_aux) New function.
1536         (dict_create_var) Initialize aux, aux_dtor.
1537         (dict_delete_var) Destroy aux data in deleted variable.
1538
1539         * file-handle.h: (struct fh_ext_class) Removed.
1540         (struct file_handle) Removed.
1541         (fh_init_files) Removed.
1542
1543         * file-handle.q: Changed references to a handle's `private' member
1544         to direct references.
1545         (struct private_file_handle) Renamed file_handle.
1546         Add next, open_cnt, type, open_mode, aux members.
1547         (struct file_handle_list) Removed.
1548         (extern var inline_file) Removed.
1549         (static var file_handles) Changed from file_handle_list * to
1550         file_handle *.
1551         (create_file_handle) Initialize new members.
1552         (fh_close_handle) Removed.
1553         (mode_name) New function.
1554         (fh_open) New function.
1555         (fh_close) New function.
1556         (fh_parse_file_handle) Renamed fh_parse().
1557
1558         * glob.c: (init_glob) Remove fh_init_files() call.
1559         
1560         * aggregate.c: use sfm_writer.
1561         (create_sysfile) Removed because the new interface is simpler.
1562         
1563         * apply-dict.c: Use sfm_reader.
1564
1565         * data-list.c: Use dfm_reader.
1566
1567         * file-type.c: Use dfm_reader.
1568
1569         * get.c: Use sfm_reader, sfm_writer, pfm_reader, pfm_writer.
1570
1571         * inpt-pgm.c: Use dfm_reader.
1572
1573         * print.c: Use dfm_writer.
1574
1575         * sysfile-info: Use sfm_reader.
1576
1577         * dfm-read.c: Adopt new file handle infrastructure.
1578
1579         * dfm-write.c: Ditto.
1580
1581         * pfm-read.c: Ditto.
1582         
1583         * pfm-write.c: Ditto.
1584
1585         * sfm-read.c: Ditto.
1586
1587         * sfm-write.c: Ditto.
1588         
1589 Mon Nov 15 00:31:44 2004  Ben Pfaff  <blp@gnu.org>
1590
1591         Break dictionary functions into separate header file.
1592
1593         * dictionary.h: New file.
1594
1595         * var.h: Moved dict_*() functions to dictionary.h.
1596
1597 Mon Nov 15 00:30:33 2004  Ben Pfaff  <blp@gnu.org>
1598
1599         Get rid of procedure-specific union in struct variable, using
1600         instead a void * pointer and a destructor function.
1601
1602         Most related changes are only worth brief summaries.
1603
1604         * crosstabs.q: Fix includes.  Use new struct var_range in lieu of
1605         old p.crs member in struct variable.
1606         
1607         * frequencies.q: Fix includes.  Use new struct var_freqs in lieu
1608         of old p.frq member in struct variable.
1609
1610         * histogram.c: (draw_histogram) Takes new freq_tab arg because
1611         it's no longer possible to grab this from var->p.frq.
1612
1613         * piechart.c: (draw_piechart) Ditto.
1614
1615         * group.c: (group_proc_get) New function.
1616
1617         * levene.c: Use group_proc_get() in lieu of old p.grp_data member
1618         in struct variable.
1619
1620         * oneway.q: Ditto.
1621
1622         * t-test.q: Ditto.
1623
1624         * main.c: (execute_command) Clear aux data in default_dict after
1625         each command.  (It's debatable whether this should be done.)
1626
1627         * matrix-data.c: Use new struct mxd_var in lieu of old p.mxd
1628         member in struct variable.
1629
1630         * means.q: Get rid of integer mode, which is not included in
1631         recent SPSS and was the only code that wanted per-variable private
1632         data.
1633
1634         * var.h: (struct crosstab_proc) Removed.
1635         (struct frequencies_proc) Removed.
1636         (struct list_proc) Removed.
1637         (struct get_proc) Removed.
1638         (struct means_proc) Removed.
1639         (struct matrix_data_proc) Removed.
1640         (struct match_files_proc) Removed.
1641         (lots of enums) Removed.
1642         (struct variable) Removed members `p', `get'.  Add member
1643         `aux_dtor'.
1644
1645         * vars-atr.c: (var_attach_aux) New function.
1646         (var_detach_aux) New function.
1647         (var_clear_aux) New function.
1648         (var_dtor_free) New function.
1649         (discard_variables) Use NULL instead of inline_file.
1650
1651 Fri Nov 12 10:07:11 WST 2004 John Darrington <john@darrington.wattle.id.au>
1652
1653         * value-labs.c  Fixed the implmentation of value_to_string, so 
1654         that it properly handles alpha values.
1655
1656         * oneway.q  Changed instances where labels were being probed manually, 
1657         to use the canonical {var,value}_to_string functions
1658
1659 Thu Nov 11 21:01:31 WST 2004 John Darrington <john@darrington.wattle.id.au>
1660
1661         * examine.q cartesian.c chart.[ch]   Added normal and detrended normal
1662         plots.  Changed the API of the cartesian plot to be a much lower level
1663         thing.
1664
1665 Sun Nov  7 17:25:04 WST 2004 John Darrington <john@darrington.wattle.id.au>
1666
1667         * examine.q Added some of the parametric calculations
1668
1669         * factor_stats.[ch]  Created
1670         
1671 Sat Nov  6 21:24:31 WST 2004 John Darrington <john@darrington.wattle.id.au>
1672
1673         * examine.q  Changed the definition of factors to be a composite, and
1674         dealt with the consequences.
1675
1676 Sat Nov  6 20:40:38 WST 2004 John Darrington <john@darrington.wattle.id.au>
1677
1678         * examine.q Fixed problem where examine wasn't dealing properly with 
1679         splits
1680
1681 Sat Nov  6 14:49:47 WST 2004 John Darrington <john@darrington.wattle.id.au>
1682
1683         * oneway.q Fixed problem where oneway wasn't dealing properly with 
1684         splits
1685
1686 Thu Nov  4 11:09:01 WST 2004 John Darrington <john@darrington.wattle.id.au>
1687
1688         * q2c.c examine.q  Fixed a bug (feature?) whereby arrays in the
1689         command which had settings didn't get the appropriate code
1690         generated.
1691
1692         * val.h value-labels.[ch] var-labs.c Added v*to_string functions
1693         to convert variables/values to strings.
1694
1695         * examine.q  Added framework for the EXAMINE command.
1696
1697 Mon Nov  1 12:46:17 WST 2004 John Darrington <john@darrington.wattle.id.au>
1698
1699         * q2c.c frequencies.q set.q t-test.q  Fixed the q2c parsing of DBL 
1700         subcommand types.  Changed frequencies.q to use it rather then the 
1701         custom parser.  Dealt with the consequences.  Added a test for NTILES
1702         subcommand of frequencies.
1703
1704 Sat Oct 30 09:16:29 WST 2004 John Darrington <john@darrington.wattle.id.au>
1705
1706         * oneway.q   Fixed up the behaviour when given missing values
1707
1708         * levene.c oneway.q Fixed a buglet with the levene statistic and
1709         incorporated the levene test into the oneway command.
1710
1711         * group.h  t-test.q  Moved the CMP_EQ and CMP_LE symbols out of 
1712         global scope, since they're only relevant to T-TEST
1713
1714 Fri Oct 29 17:39:03 WST 2004 John Darrington <john@darrington.wattle.id.au>
1715
1716         * group.c group.h group_proc.h levene.c oneway.q t-test.q
1717
1718         Made the t-test more consistent
1719         with the way it handles groups.  That is, it now uses a hash instead
1720         of an array of 2.  Also, made the levene.c file independent of the 
1721         implementation of the t-test.  So now levene should be fine for both
1722         t-test and anova.
1723
1724         * Added an oneway.q file for one way anova
1725
1726 Wed Jun  2 22:08:02 2004  Ben Pfaff  <blp@gnu.org>
1727
1728         * descript.c: (cmd_descriptives) Remove harmless but bogus test in
1729         STATISTICS parsing.
1730
1731 Mon May 31 20:45:24 2004  Ben Pfaff  <blp@gnu.org>
1732
1733         Fix memory leaks.
1734
1735         * data-list.c: (cmd_data_list) Free dls->delims on lossage.
1736         (data_list_trns_free) Free dls->delims.
1737
1738         * t-test.q: (tts_custom_pairs) Free vars.
1739         (ssbox_one_sample_init) Fix tab_vline() argument.
1740         (ssbox_independent_samples_init) Ditto.
1741         (trbox_paired_init) Ditto.
1742         (trbox_one_sample_init) Ditto.
1743
1744 Mon May 31 17:19:27 2004  Ben Pfaff  <blp@gnu.org>
1745
1746         Generalize casefiles to the extent that we can use them for
1747         sorting and other kinds of data transformations.  Change cases to
1748         be copy-on-write to improve memory efficiency in common cases.
1749         Every access to a member of a `struct ccase' was changed to be a
1750         call to a case_*() function, especially case_data(), case_num(),
1751         case_str(), or case_data_rw().  Many instances of a local variable
1752         named "case_num" were changed to "case_idx" as a consequence.
1753         Many `struct ccase *' were changed to actual `struct ccase'
1754         because of copying semantics of cases.  In several places there
1755         was a choice between updating debug code to work with the new ADTs
1756         or just deleting it because it was useless; I chose to delete it.
1757  
1758         * Makefile.am: (pspp_SOURCES) Add case.c, case.h.
1759
1760         * case.c: New file.
1761
1762         * case.h: New file.
1763
1764         * aggregate.c: (struct agr_proc) Change type of `sort' to
1765         sort_criteria *.  Add `break_vars', `break_var_cnt' members.
1766         Rename `vars' to `agr_vars', all references updated.  Change
1767         `agr_case' to type `struct ccase'.
1768         (cmd_aggregate) Deal with new members.  Use case_create(),
1769         sort_active_file_in_place(), sort_active_file_to_casefile().
1770         (agr_destroy) Deal with new members.
1771         (aggregate_single_case) Ditto.
1772         (dump_aggregate_info) Ditto.
1773         (initialize_aggregate_info) Ditto.
1774         (agr_to_active_file) Ditto.
1775         (presorted_agr_to_sysfile) Ditto.
1776         (sort_agr_to_sysfile) Removed.
1777
1778         * alloc.c: (out_of_memory) Make non-static.
1779
1780         * alloc.h: Prototype out_of_memory().
1781
1782         * casefile.c: Switched from a linked list in-memory representation
1783         to a two-level array-style representation.  The linked list was
1784         appropriate when we could stick a header onto cases, but that's no
1785         longer the case.  Also, the two-level array will allow for random
1786         in-memory access in case that's ever wanted.  Also added the
1787         concept of a `destructive casereader', one that destroys cases in
1788         the underlying casefile as they are read out.
1789         (macro CASES_PER_BLOCK) New macro.
1790         (struct casefile) New members `value_cnt', `case_list_size',
1791         `case_acct_size', `being_destroyed', `cases'.  Removed `head',
1792         `tail'.
1793         (struct casereader) Removed `cur'.  Added `destructive', `c'.
1794         (global var casefiles) Made static.
1795         (static var case_bytes) New var.
1796         (casefile_create) Takes a value count, not a case size in bytes,
1797         to conform to the case interface.  All callers updated.  Deal with
1798         new and removed members.
1799         (casefile_destroy) Deal with new and removed members.
1800         (casefile_sleep) New function.
1801         (casefile_get_case_size) Removed.
1802         (casefile_get_value_cnt) New function.
1803         (casefile_append) Rewritten to deal with new and removed members.
1804         (casefile_append_xfer) New function.
1805         (write_case_to_disk) Use case_serialize().
1806         (call_posix_fadvise) Removed because posix_fadvise64 segfaults.
1807         Couldn't figure out why.
1808         (casefile_to_disk) Don't call call_posix_fadvise.  Rewritten to
1809         deal with new and removed members.
1810         (merge) Removed.
1811         (merge_sort) Removed.
1812         (casefile_sort) Removed.
1813         (casefile_get_reader) Deal with new and removed members.
1814         (casefile_get_destructive_reader) New function.
1815         (reader_open_file) Make code more readable.  Create case for
1816         reader.
1817         (casereader_get_casefile) New function.
1818         (casereader_read) Deal with new and removed members.  Now returns
1819         a copy of the case, so that the caller is responsible for
1820         destroying the returned case.
1821         (casereader_read_xfer) New function.
1822         (casereader_destroy) Destroy reader's case.
1823         (test_casefile) Second arg is now a value count, all callers
1824         updated.  Now tests destructive readers too.
1825         (get_random_case) Deal with new case ADT.
1826         (write_random_case) Ditto.
1827         (read_and_verify_random_case) Ditto.
1828
1829         * crosstabs.q: Remove debug code.
1830
1831         * descript.q: (calc_descriptives) Deal with new case, casefile
1832         ADTs.
1833
1834         * dfm.c: (cmd_begin_data) There's no storage_source_class anymore.
1835
1836         * do-if.c: Remove unneeded header inclusion.
1837
1838         * expr-prs.c: Remove debug code.
1839
1840         * exprP.h: Remove debug code.
1841
1842         * flip.c: (flip_file) Use fseeko() if available.
1843
1844         * formats.c: Remove debug code.
1845
1846         * get.c: Remove debug code.
1847         (struct mtf_file) Change `input' from `union value *' to `struct
1848         ccase', all references updated.
1849
1850         * levene.c: (levene) Deal with new case, casefile ADTs.
1851
1852         * list.q: Remove debug code.
1853
1854         * loop.c: Remove debug code.
1855         
1856         * matrix-data.c: Remove debug code.
1857
1858         * means.q: Remove debug code.
1859
1860         * mis-val.c: Remove debug code.
1861
1862         * pfm-read.c: Remove debug code.
1863         (pfm_read_code) Change second arg from `union value *' to `struct
1864         ccase *', all references updated.
1865
1866         * recode.c: (string_to_long) Make first arg const.
1867         (convert_to_double) Ditto.
1868
1869         * repeat.c: Remove debug code.
1870
1871         * sample.c: Remove debug code.
1872
1873         * sfm-read.c: Remove debug code.
1874         (sfm_read_case) Change second arg from `union value *' to `struct
1875         ccase *'.
1876
1877         * sort.c: Redone in terms of casefiles.
1878         (enum sort_direction) Moved here from sort.h.
1879         (struct sort_criterion) New structure.
1880         (struct sort_criteria) New structure.
1881         (cmd_sort_cases) Rewritten.
1882         (prepare_to_sort_active_file) New function.
1883         (sort_active_file_in_place) New function.
1884         (sort_active_file_to_casefile) New function.
1885         (parse_sort) Renamed sort_parse_criteria(), rewritten & interface
1886         changed, all callers updated.
1887         (destroy_sort_cases_pgm) Renamed sort_destroy_criteria(),
1888         rewritten & interface changed, all callers updated.
1889         (sort_cases) Renamed sort_execute(), rewritten & interface
1890         changed, all callers updated.
1891         (struct internal_sort) Removed.
1892         (do_internal_sort) Rewritten, interface changed.
1893         (destroy_internal_sort) Removed.
1894         (compare_case_dblptrs) Use sort_criteria instead of sort_case_pgm.
1895         (struct initial_run) Removed; an initial run is now just a
1896         casefile.
1897         (compare_initial_runs) Rewritten.
1898         (struct external_sort) Changed almost completely.
1899         (do_external_sort) Rewritten, interface changed.
1900         (destroy_external_sort) Rewritten.
1901         [HAVE_MKDTEMP] (make_temp_dir) Removed.
1902         [!HAVE_MKDTEMP] (do_mkdir) Removed.
1903         [!HAVE_MKDTEMP] (make_temp_dir) Removed.
1904         (init_external_sort) Removed.
1905         (simulate_error) Removed.
1906         (rmdir_temp_dir) Removed.
1907         (get_temp_file_name) Removed.
1908         (open_temp_file) Removed.
1909         (close_temp_file) Removed.
1910         (remove_temp_file) Removed.
1911         (write_temp_file) Removed.
1912         (read_temp_file) Removed.
1913         (struct record_run) Change `record' from `struct case_lit *' to
1914         `struct ccase'.
1915         (struct initial_run_state) Remove `idx_to_fv', `free_list',
1916         `file_idx', `output_file'.  Add `run', casefile'.  Change
1917         `last_output' from `struct case_list *' to `struct ccase'.
1918         (write_initial_runs) Change interface, rewrite.
1919         (sort_sink_write) Renamed process_case(), changed interfaced,
1920         rewrote.
1921         (destroy_initial_run_state) Rewritten.
1922         (allocate_cases) Rewritten.
1923         (compare_record) Interface changed, rewritten.
1924         (start_run) Rewritten.
1925         (end_run) Rewritten.
1926         (output_record) Rewritten.
1927         (grab_case) Removed.
1928         (release_case) Removed.
1929         (struct merge_case) Change `cases' from double pointer to single
1930         pointer.
1931         (merge) Deal with new case and casefile ADTs.
1932         (struct run) Removed.
1933         (merge_once) Rewritten, interface changed.
1934         (fill_run_buffer) Removed.
1935         (sort_sink_make_source) Removed.
1936         (sort_sink_class) Removed.
1937         (struct sort_source_aux) Removed.
1938         (sort_source_read_helper) Removed.
1939         (sort_source_read) Removed.
1940         (read_sort_output) Removed.
1941         (read_internal_sort_output) Removed.
1942         (read_external_sort_output) Removed.
1943         (sort_source_destroy) Removed.
1944         (sort_source_class) Removed.
1945
1946         * sort.h: (struct sort_cases_pgm) Removed.
1947         (enum sort_direction) Moved to sort.c.
1948
1949         * t-test.q: (calculate) Deal with new case, casefile ADTs.
1950
1951         * tab.c: Remove debug code.
1952
1953         * var-labs.c: Remove debug code.
1954
1955         * var.h: (struct ccase) Removed.
1956         (struct case_list) Removed.
1957
1958         * vars-atr.c: (discard_variables) Use free_case_source().
1959
1960         * vars-prs.c: (parse_vs_variable) Make arg const.
1961         (parse_dict_variable) Ditto.
1962         (parse_variables) Make struct dictionary * arg const.
1963         (parse_var_set_vars) Make struct var_set * arg const.
1964         (struct var_set) Add const to some of the function pointers' args.
1965         (var_set_get_cnt) Make arg const.
1966         (var_set_get_var) Make first arg const.
1967         (var_set_lookup_var) Make first arg const.
1968         (dict_var_set_get_cnt) Make arg const.
1969         (dict_var_set_get_var) Make first arg const.
1970         (dict_var_set_lookup_var) Make first arg const.
1971         (var_set_create_from_dict) Make arg const.  Add cast to aux
1972         assignment.
1973         (struct array_var_set) Add const to var member.
1974         (array_var_set_get_cnt) Make arg const.
1975         (array_var_set_get_var) Make first arg const.
1976         (array_var_set_lookup_var) Make first arg const.
1977         (var_set_create_from_array) Make first arg const.  Insert cast.
1978
1979         * vfm.c: (struct write_case_data) Change trns_case, sink_case
1980         members from `struct ccase *' to `struct ccase'.
1981         (static var lag_queue) Change from double to single pointer.
1982         (procedure) Optimize trivial case.
1983         (internal_procedure) Deal with changed case, case_source ADTs.
1984         (create_trns_case) Changed interface, rewrote.
1985         (open_active_interface) Initialize modified lag queue.
1986         (write_case) Deal with changed case ADT.
1987         (lag_case) Deal with modified lag queue.
1988         (close_active_file) Destroy modified lag queue.
1989         Deal with changed case_source, case_sink ADTs.
1990         (destroy_storage_stream_info) Make null arg into no-op.
1991         (storage_sink_make_source) Set aux in created source.
1992         (storage_source_read) Deal with changed case, casefile ADTs.
1993         (storage_source_create) New function.
1994         (lagged_case) Rewrite.
1995         (free_case_source) New function.
1996         (free_case_sink) Rewrite.
1997         (struct split_aux_data) Changed prev_case from `struct ccase *' to
1998         `struct ccase'.
1999         (procedure_with_splits) Deal with changed prev_case.
2000         (procedure_with_splits_callback) Ditto.
2001         (multipass_split_aux_data) Changed prev_case from `struct ccase *' to
2002         `struct ccase'.
2003         (multipass_procedure_with_splits) Deal with changed prev_case.
2004         (multipass_split_callback) Ditto.
2005         
2006         
2007 Mon May 31 17:19:06 2004  Ben Pfaff  <blp@gnu.org>
2008
2009         The workspace idea didn't work out.
2010
2011         * Makefile.am: (pspp_SOURCES) Remove workspace.c, workspace.h.
2012         
2013         * workspace.c: Removed.
2014
2015         * workspace.h: Removed.
2016
2017 Sun May 30 18:35:19 2004  Ben Pfaff  <blp@gnu.org>
2018
2019         Fully implement arbitrary delimiters on DATA LIST, extending the
2020         half implementation that was already there.
2021
2022         * data-list.c: (struct data_list_pgm) Remove `delim', add
2023         `delims', `delim_cnt'.
2024         (cmd_data_list) Initialize new members.  Parse delimiters and
2025         clean up code a bit.
2026         (cut_field) Extract fields with arbitrary delimiters.  Also, fix
2027         handling of leading commas.
2028         (read_from_data_list_fixed) Expand tabs.  Adapt to new DFM
2029         interfaces.
2030         (read_from_data_list_free) Adapt to new DFM interfaces.
2031         (read_from_data_list_list) Ditto.
2032         (repeating_data_trns_proc) Ditto.
2033
2034         * dfm.c: Split up reader and writer into separate code, because
2035         they do different things.  Use struct string instead of explicit
2036         allocation code, for clarity.
2037         (enum dfm_reader_flags) New enum.
2038         (struct dfm_fhuser_ext) Removed.
2039         (struct dfm_reader_ext) New.
2040         (get_reader) New function, used by just about all the reader
2041         functions.
2042         (dfm_close) Removed.
2043         (close_reader) New function.
2044         (dfm_open_for_reading) Rewrite initialization of dfm_fhuser_ext.
2045         (dfm_open_for_writing) Ditto.
2046         (macro force_line_buffer_expansion) Removed.
2047         (count_tabs) Removed.
2048         (tabs_to_spaces) Removed.
2049         (read_record) Deal with new dfm_reader_ext.  Use struct string
2050         functions.  Don't convert tabs to spaces.
2051         (dfm_eof) New function.
2052         (dfm_get_record) Changed interface, rewrote.
2053         (dfm_expand_tabs) New function.
2054         (dfm_fwd_record) Renamed dfm_forward_record(), updated to new
2055         dfm_reader_ext, rewritten.
2056         (dfm_bkwd_record) Renamed dfm_reread_record(), updated to new
2057         dfm_reader_ext, rewritten.
2058         (dfm_set_record) Removed in favor of dfm_forward_columns().
2059         (dfm_forward_columns) New function.
2060         (dfm_get_cur_col) Renamed dfm_column_start, updated to new
2061         dfm_reader_ext, rewritten.
2062         (static var dfm_r_class) Use close_reader for the destructor.
2063         (struct dfm_writer_ext) New.
2064         (dfm_put_record) Updated to new dfm_writer_ext, rewritten.  Uses
2065         bounce buffer now instead of local allocation.
2066         (close_writer) New function.
2067         (static var dfm_writer_ext) Use close_writer for destructor.
2068         (cmd_begin_data) Adapt to new dfm_reader_ext.
2069
2070         * file-handle.q: Add support for per-file tab width.
2071         (struct private_file_handle) Add tab_width member.
2072         (q2c specifications) Add tabwidth subcommand.
2073         (cmd_file_handle) Put parsed tab width into private_file_handle.
2074         (create_file_handle) Set default tab width.
2075         (handle_get_tab_width) New function.
2076
2077         * file-type.c: (file_type_source_read) Adapt to new DFM interface.
2078
2079         * inpt-pgm.c: (reread_trns_proc) Ditto.
2080
2081         * matrix-data.c: (context) Ditto.
2082         (another_token) Ditto.
2083         (mget_token) Ditto.
2084         (force_eol) Ditto.
2085
2086 Sun May 30 18:33:59 2004  Ben Pfaff  <blp@gnu.org>
2087
2088         * casefile.c: (casefile_destroy) Fix memory leak by freeing
2089         cf->filename.
2090         (casereader_destroy) Don't close file descriptor -1.
2091
2092         * recode.c: (cmd_recode) Fix memory leak.
2093
2094         * set.q: (q2c specifications) Fix typo in user message.
2095
2096         * str.c: (st_bare_pad_len_copy) Change memcpy to memmove to avoid
2097         undefined behavior for overlapping arguments.
2098
2099 Sun May 30 18:31:48 2004  Ben Pfaff  <blp@gnu.org>
2100
2101         * casefile.c: valgrind doesn't implement posix_fadvise() yet, so
2102         don't call it when we're running under valgrind.
2103         (call_posix_fadvise) New function.
2104         (casefile_to_disk) Use call_posix_fadvise().
2105         (reader_open_file) Ditto.
2106         
2107 Sun May 30 18:20:12 2004  Ben Pfaff  <blp@gnu.org>
2108
2109         Update our string ADTs, struct string and struct len_string.  Get
2110         rid of pool support, which was largely unused.  Rename lots of
2111         functions to have more obvious or consistent names.
2112         
2113         * ascii.c: Get rid of ascii_pool.  It was only used for string
2114         allocations.
2115         (ascii_open_global) Don't create ascii_pool.
2116         (ascii_close_driver) Don't destroy ascii_pool.
2117         (ascii_postopen_driver) Don't use pool.
2118         (ascii_close_driver) Destroy strings manually.
2119
2120         * str.c: (ds_create) Remove pool argument, all references updated.
2121         (ds_init) Ditto.
2122         (ds_replace) Remove pool support, make more efficient when we
2123         don't need to reallocate.
2124         (ds_destroy) Remove pool support.
2125         (ds_rpad) New function.
2126         (ds_size) Renamed ds_capacity(), all references updated.
2127         (ds_value) Renamed ds_c_str(), all references updated.
2128         (ds_concat) Renamed ds_puts(), all references updated.
2129         (ds_concat_buffer) Renamed ds_concat(), all references updated.
2130         (ds_putchar) Renamed ds_putc(), all references updated.
2131         (ds_getline) Renamed ds_gets(), all references updated.
2132         (ls_create) Remove pool argument, all references updated.
2133         (ls_create_buffer) Ditto.
2134         (ls_destroy) Removed pool support.
2135         (ls_value) Renamed ls_c_str(), all references updated.
2136
2137         * str.h: (ls_length) [__GNUC__] Add inline version.
2138         (ls_c_str) [__GNUC__] Add inline version.
2139         (ls_end) [__GNUC__] Add inline version.
2140         (struct string) Remove pool member.  Rename `size' to `capacity',
2141         all references updated.
2142
2143         * tab.c: (text_format) Instead of using pool argument to
2144         ls_create_buffer(), call pool_register() on allocated data.
2145
2146 Mon Apr 26 22:40:07 2004  Ben Pfaff  <blp@gnu.org>
2147
2148         We're abusing the current ASCII driver by telling it to allocate a
2149         9999-line, 9999-character page in the tests.  This causes some
2150         systems to curl up and die because it allocates 20 MB of
2151         contiguous RAM.  This change alleviates at least part of the
2152         problem.  It is mostly a stop-gap until the new output system is
2153         ready.
2154         
2155         * ascii.c: (struct line) New structure.
2156         (struct ascii_driver_ext) Remove `page', `page_size', `line_len',
2157         `line_len_size', `n_output' members.  Add `lines', `lines_cap'.
2158         (ascii_preopen_driver) Initialize new members, not old ones.
2159         (ascii_close_driver) Destroy new members, not old ones.
2160         (ascii_open_page) Allocate new members, not old ones.
2161         (expand_line) Allocate room in line.
2162         (draw_line) Use new members.
2163         (ascii_line_horz) Ditto.
2164         (ascii_line_vert) Ditto.
2165         (ascii_line_intersection) Ditto.
2166         (text_draw) Ditto.
2167         (output_lines) Ditto.
2168         (ascii_close_page) Ditto.
2169
2170 Sun Apr 25 23:40:15 2004  Ben Pfaff  <blp@gnu.org>
2171
2172         * matrix.c: Dead code.  Removed.
2173
2174         * matrix.h: Dead code.  Removed.
2175
2176 Fri Apr 16 23:59:51 2004  Ben Pfaff  <blp@gnu.org>
2177
2178         Contrary to what I'd always understood, there is an efficient
2179         algorithm for deletion from a hash table populated via linear
2180         probing.  This change implements it.
2181         
2182         * hash.c: (hsh_rehash) Probe in increasing order.
2183         (hsh_probe) Ditto.
2184         (locate_matching_entry) Ditto.
2185         (hsh_delete) Use Knuth's Algorithm 6.4R for deletion.
2186
2187 Tue Apr 13 19:24:15 2004  Ben Pfaff  <blp@gnu.org>
2188
2189         * moments.c (calc_moments): Adjust calculation of kurtosis to
2190         avoid subtracting huge numbers from huge numbers, on Michael
2191         Kiefte's advice.
2192
2193 Sun Apr 11 14:22:12 2004  Ben Pfaff  <blp@gnu.org>
2194
2195         Rework moments routines for improved numerical stability based on
2196         Michael Kiefte's advice.  Any bugs or remaining numerical problems
2197         are still mine though.
2198
2199         There is now a struct moments1 for use with one-pass moments.  It
2200         uses a provisional means algorithm as an attempt to improve
2201         accuracy of higher moments.  The older struct moments now only
2202         handles two-pass moments.
2203         
2204         * aggregate.c: Use moments1 instead moments.
2205
2206         * descript.c: Revert previous change, which is no longer needed
2207         due to the moments revision.
2208
2209         * moments.c: (calc_moments) New function for calculating variance,
2210         skewness, kurtosis.
2211         (moments_pass_one) Only accumulate weights bigger than zero.
2212         (moments_calculate) Allow calculating the mean on pass one, others
2213         require pass two.  Implement in terms of calc_moments().
2214         (struct moments1) New structure.
2215         (init_moments1) New function.
2216         (moments1_clear) Ditto.
2217         (moments1_create) Ditto.
2218         (moments1_add) Ditto.
2219         (moments1_calculate) Ditto.
2220         (moments1_destroy) Ditto.
2221         (cmd_debug_moments) Deal with `struct moments' or `struct
2222         moments1' as requested by user.
2223
2224 Sun Apr 11 14:21:55 2004  Ben Pfaff  <blp@gnu.org>
2225
2226         * Makefile.am (pspp_SOURCES): Remove debug.c.
2227
2228         * debug.c: Removed.  It was empty anyway.
2229
2230 Fri Apr  9 20:04:49 2004  Ben Pfaff  <blp@gnu.org>
2231
2232         * descript.c (calc_descriptives): Fix assert failure when only
2233         MOMENT_MEAN is needed.
2234
2235 2004-04-09  Michael Kiefte  <mkiefte@dal.ca>
2236
2237         * descript.c: 
2238
2239         fixed problem with parsing in match_statistic() causing
2240         "DESCRIPTIVE STAT=MEAN." to barf.
2241
2242         "MEAN" is now default if "SORT" given without specification.
2243
2244         Fixed infinite loop with "DESCRIPT GIBBERISH=ALL."  Parsing is
2245         generally less forgiving of syntax errors: better to have it do
2246         nothing and type it in again then to not know what it actually did
2247         instead.  
2248
2249         z-score transformation now checks score for user-missing values
2250         and checks std_dev for SYSMIS.
2251
2252 2004-04-06  Michael Kiefte  <mkiefte@dal.ca>
2253
2254         * aggregate.c, crosstabs.q, descript.c, dictionary.c, frequencies.q, levene.c, t-test.q, var.h: 
2255         Changed dict_get_case_weight() to accept an additional int * flag
2256         to complain about system-missing, user-missing, zero, or negative
2257         weights and updated existing functions to pass int * to
2258         dict_get_case_weight().
2259
2260 2004-04-05  jmd  <jmd@gnu.org>
2261
2262         * main.c: Fixed configuration problems with gsl
2263
2264         * t-test.q: Fixed some problems encountered when compiling under Cygwin
2265
2266 2004-04-03  blp  <blp@gnu.org>
2267
2268         * lexer.c, ChangeLog:
2269         Fix infinite loop on comment at end of file, add test.
2270
2271 2004-04-03  jmd  <jmd@gnu.org>
2272
2273         * 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:
2274         Fixed the calculation of percentiles and added --syntax and --algorithm options
2275
2276 Sat Apr  3 11:43:37 2004  Ben Pfaff  <blp@gnu.org>
2277
2278         * lexer.c: (lex_skip_comment) Handle end-of-file correctly (I
2279         hope).
2280
2281 Sat Apr  3 15:00:18 WST 2004 John Darrington <john@darrington.wattle.id.au>
2282
2283         * frequencies.q:  Fixed the calculation of percentiles
2284
2285         * Makefile.am:  Added the --ansi flag and dealt with the
2286         consequences.  Added some entries to PSPP_sources so that
2287         make distcheck would pass
2288
2289         * cmdline.c:   Added the --syntax and --algorithm options
2290
2291         * q2c.c:  Added an implicit /ALGORITHM subcommand to everything.
2292
2293 Fri Apr  2 11:25:22 WAST 2004 John Darrington <john@darrington.wattle.id.au>
2294
2295         * t-test.q, levene.c, levene.h  Converted t-test (incl levene) to 
2296         use the new multipass_split_... mechanism.
2297
2298 Wed Mar 31 22:36:22 2004  Ben Pfaff  <blp@gnu.org>
2299
2300         * frequencies.q: (calc_stats) Use moments data structure and
2301         calc_seskew(), calc_sekurt() functions.
2302
2303         * set.q main.c settings.h Added support for --syntax and --algorithm 
2304         options
2305
2306 Tue Mar 30 22:04:19 2004  Ben Pfaff  <blp@gnu.org>
2307
2308         * vfm.c: Had to get last call to multipass_split_output() inside
2309         open_active_file()/close_active_file() pairing, so introduce new
2310         function.
2311         (internal_procedure) Move procedure() code here, except for calls
2312         to open_active_file() and close_active_file().
2313         (procedure) Wrap open_active_file() and close_active_file() around
2314         internal_procedure().
2315         (multipass_procedure_with_splits) Wrap open_active_file() and
2316         close_active_file() around internal_procedure().
2317
2318 Tue Mar 30 22:01:57 2004  Ben Pfaff  <blp@gnu.org>
2319
2320         * descript.c: (cmd_descriptives) Free `vars' to avoid memory leak.
2321
2322 Mon Mar 29 16:26:40 2004  Ben Pfaff  <blp@gnu.org>
2323
2324         * debug.c: Removed.  Moved cmd_debug_evaluate() into expr-evl.c.
2325
2326         * expr-evl.c: (cmd_debug_evaluate) Moved here from debug.c.
2327
2328 Mon Mar 29 16:03:08 2004  Ben Pfaff  <blp@gnu.org>
2329
2330         * algorithm.c: By default turn off some of the more expensive
2331         assertions.
2332         (expensive_assert) New macro which expands to assert if
2333         EXTRA_CHECKS is defined, to nothing otherwise.
2334         (unique) Use expensive_assert().
2335         (binary_search) Ditto.
2336         (push_heap) Ditto.
2337         (pop_heap) Ditto.
2338         (make_heap) Ditto.
2339         (sort_heap) Ditto.
2340
2341         * command.c: (conflicting_3char_prefixes) Words that are the same
2342         don't cause conflicts when they are abbreviated to the first three
2343         letters.
2344
2345         * expr-evl.c: (CONCAT_func) Fix memory leak by incrementing struct
2346         nonterm_node's n earlier.
2347         (generic_str_func) Ditto.
2348         
2349 Mon Mar 29 15:32:17 2004  Ben Pfaff  <blp@gnu.org>
2350
2351         Add support for multipass procedures.  Rewrite DESCRIPTIVES to
2352         test multipass support, take advantage of new moments
2353         calculation, and to not be such crappy code.  Get rid of q2c
2354         processing for DESCRIPTIVES.
2355
2356         * vfm.c: (struct multipass_split_aux_data) New structure.
2357         (multipass_procedure_with_splits) New function.
2358         (multipass_split_callback) New function.
2359         (multipass_split_output) New function.
2360         * descript.q: Removed.
2361
2362         * descript.c: New file.
2363
2364         * var.h: Removed descriptives enums.
2365         (struct descriptives_proc) Removed.
2366         (struct variable) Removed p.dsc.
2367
2368         * Makefile.am: (q_sources_c) Remove descript.c.
2369         (q_sources_q) Removed descript.q.
2370         
2371 Mon Mar 29 15:31:55 2004  Ben Pfaff  <blp@gnu.org>
2372
2373         New manager for keeping track of used workspace.
2374         
2375         * workspace.c: New file.
2376
2377         * workspace.h: New file.
2378
2379         * Makefile.am: (pspp_SOURCES) Add workspace.c, workspace.h.
2380
2381         * sort.c: (do_internal_sort) Use workspace_malloc().
2382         (destroy_internal_sort) Use workspace_free().
2383
2384 Mon Mar 29 15:31:08 2004  Ben Pfaff  <blp@gnu.org>
2385
2386         New `struct casefile' for managing sets of cases.
2387
2388         * casefile.c: New file.
2389
2390         * casefile.h: New file.
2391
2392         * command.def: Add DEBUG CASEFILE command.
2393
2394         * Makefile.am: (pspp_SOURCES) Add casefile.c, casefile.h.
2395
2396         * sort.c: (sort_cases) Move logic for sending storage file to disk
2397         into do_external_sort().
2398         (struct internal_sort) Use an array of ccase pointers instead of a
2399         case_list.
2400         (do_internal_sort) Rewrite to handle casefiles.
2401         (compare_case_list) Removed.
2402         (compare_cases) New function.
2403         (compare_case_dblptrs) New function.
2404         (read_internal_sort_output) Deal with new struct internal_sort.
2405
2406         * vfm.c: (static var workspace_overflow) Removed.
2407         (struct storage_stream_info) Removed all the members.  Added
2408         struct casefile * member.
2409         (storage_sink_open) Use casefile.
2410         (open_storage_file) Removed.
2411         (write_storage_file) Removed.
2412         (storage_to_disk) Removed.
2413         (destroy_storage_stream_info) Use casefile.
2414         (storage_sink_write) Use casefile.
2415         (storage_sink_make_source) Use casefile.
2416         (storage_source_count) Use casefile.
2417         (storage_source_read) Use casefile.
2418         (storage_source_on_disk) Removed.
2419         (storage_source_get_cases) Removed.
2420         (storage_source_set_cases) Removed.
2421         (storage_source_get_casefile) New function.
2422         
2423 Mon Mar 29 15:30:09 2004  Ben Pfaff  <blp@gnu.org>
2424
2425         New `struct moments' for calculating moments.
2426
2427         * stats.c: Removed.
2428
2429         * stats.h: Removed.
2430
2431         * moments.c: New file.
2432
2433         * moments.h: New file.
2434
2435         * command.def: Add DEBUG MOMENTS command.
2436
2437         * Makefile.am: (pspp_SOURCES) Add moments.c, moments.h.  Remove
2438         stats.c, stats.h.
2439
2440         * aggregate.c: Modify AGGREGATE to use the new moments
2441         calculation, even if not in such a great way.
2442         (struct agr_var) Add `moments' member.
2443         (parse_aggregate_functions) Set `moments' member to null.
2444         (agr_destroy) Destroy `moments' member.
2445         (accumulate_aggregate_info) Use `moments' for standard deviation.
2446         (dump_aggregate_info) Ditto.
2447         (initialize_aggregate_info) Create or clear `moments'.
2448
2449         * misc.h: Add pow2(), pow3(), pow4() functions in place of sqr(),
2450         cube(), pow4() that were in stats.h.  All references updated.
2451
2452         * crosstabs.q: stats.h had chi-square significance functions.  Use
2453         GSL instead.
2454         (display_chisq) Use gsl_cdf_chisq_Q() instead of chisq_sig().
2455
2456         * expr-evl.c: (expr_evaluate) Use moments_of_values() for
2457         OP_CFVAR, OP_MEAN, OP_SD, OP_VARIANCE.
2458                 
2459 Fri Mar 26 14:21:23 2004  Ben Pfaff  <blp@gnu.org>
2460
2461         * dictionary.c: (dict_compact_values) Compacted values need to
2462         start off from 0.
2463
2464 Fri Mar 26 00:54:57 2004  Ben Pfaff  <blp@gnu.org>
2465
2466         * var-labs.c: (cmd_variable_labels) For compatibility, don't allow
2467         `/' at start.  Check return value of parse_variables() for error
2468         return.
2469
2470 Fri Mar 26 00:19:27 2004  Ben Pfaff  <blp@gnu.org>
2471
2472         Revamp expressions: make the code a little nicer, and fix bugs
2473         found in testing.
2474         
2475         * expr-evl.c: (expr_evaluate) Make expression argument const.
2476         Support OP_ADD, OP_SUB, OP_MUL, OP_DIV instead of OP_PLUS, OP_MUL.
2477         OP_POW is missing for arg 2 <= 0.  OP_LOG is natural log, not
2478         base-10 log.  Fix OP_ANY, OP_ANY_STRING, OP_RANGE, OP_RANGE_STRING
2479         off-by-ones.  Add OP_MAX_STRING, OP_MIN_STRING.  Fix OP_TIME_HMS,
2480         OP_DATE_WKYR boundary conditions.  Add OP_CTIME_DAYS,
2481         OP_CTIME_HOURS, OP_CTIME_MINUTES, OP_CTIME_DAYS, OP_CTIME_SECONDS.
2482         Support OP_INDEX_2, OP_INDEX_3, OP_RINDEX_2, OP_RINDEX_3 instead
2483         of OP_INDEX, OP_INDEX_OPT, OP_RINDEX, OP_RINDEX_OPT.  Merge
2484         OP_LPAD_OPT into OP_LPAD, OP_RPAD_OPT into OP_RPAD, OP_LTRIM_OPT
2485         into OP_LTRIM, OP_RTRIM_OPT into OP_RTRIM, OP_NUMBER_OPT into
2486         OP_NUMBER.  Fix OP_RTRIM fragility.  Support OP_SUBSTR_2,
2487         OP_SUBSTR_3 instead of OP_SUBSTR, OP_SUBSTR_OPT.  Remove OP_INV.
2488         Simplify OP_SYSMIS.  Remove OP_STR_MIS.
2489
2490         * expr-opt.c: (optimize_expression) Rewrite.
2491         (macro n0) Removed.
2492         (macro n1) Removed.
2493         (macro n2) Removed.
2494         (macro s0) Removed.
2495         (macro s0l) Removed.
2496         (macro s1) Removed.
2497         (macro s1l) Removed.
2498         (macro s2) Removed.
2499         (macro s2l) Removed.
2500         (macro s) Removed.
2501         (macro sl) Removed.
2502         (eq_num_con) New function.
2503         (optimize_tree) New function.
2504         (macro rnc) Removed.
2505         (macro frnc) Removed.
2506         (str_search) Add const to string params.
2507         (str_rsearch) Ditto.
2508         (evaluate_tree_no_missing) Renamed from evaluate_tree.  Add num[],
2509         str[], str_len[] locals to substitute for most of removed macros.
2510         Support OP_ADD, OP_SUB, OP_MUL, OP_DIV instead of OP_PLUS, OP_MUL.
2511         Removed support for missing values because we're never called with
2512         missing values.  Use set_number() or set_number_errno() instead of
2513         rnc or frnc.  Removed any stuff that caused trouble in testing.
2514         We can re-add it later if it really slows anything.  Fix some
2515         random problems.
2516         (evaluate_tree_with_missing) Not yet supported.  To be added later
2517         if it's important.
2518         (repl_num_con) Removed.
2519         (collapse_node) New function.
2520         (force_repl_num_con) Removed.
2521         (set_number) New function.
2522         (set_number_errno) New function.
2523         (repl_str_con) Removed.
2524         (set_string) New function.
2525         (yrmoda) Tighten boundary conditions.  Adopt 2030 cut-off for
2526         2-digit years.
2527         (dump_node) No special case for OP_AND, OP_OR.
2528
2529         * expr-prs.c: (expr_prs) Honor EXPR_NO_OPTIMIZE bit.  Rewrite.
2530         (expr_get_type) New function.
2531         (type_check) Rewrite.
2532         (type_coercion) New function.
2533         (struct operator) New structure.
2534         (match_operator New function.
2535         (parse_binary_operators) New function.
2536         (parse_inverting_unary_operator) New function.
2537         (parse_or) Rewritten.
2538         (parse_and) Rewritten.
2539         (parse_not) Rewritten.
2540         (parse_rel) Rewritten.
2541         (parse_add) Rewritten.
2542         (parse_mul) Rewritten.
2543         (parse_neg) Rewritten.
2544         (parse_exp) Rewritten.
2545         (parse_sysvar) Add $TRUE, $FALSE system variables.
2546         Get $LENGTH, $WIDTH from get_viewlength(), get_viewwidth().
2547         (parse_primary) Use allocate_var_node(), allocate_num_con(),
2548         allocate_str_con().
2549         (struct function) Remove desc, change `func' prototype.
2550         (unary_func) Remove special cases.
2551         (MISSING_func) Reduce to unary_func() that just returns a boolean.
2552         (SYSMIS_func) Handle SYSMIS((x)) like SYSMIS(x).
2553         (VALUE_func) Use allocate_var_node().
2554         (nary_num_func) Allow MIN and MAX for strings.
2555         Use allocate_var_node().  Properly clean up.
2556         Fix return type.
2557         (generic_str_func) Use local table instead of removed `desc'
2558         member.  Mostly rewrite.
2559         (get_num_args) Revise error message.
2560         (parse_function) Return EXPR_ERROR, not 0 on error.
2561         (macro op) Removed.
2562         (macro varies) Removed.
2563         (ops[]) Use expr.def.
2564         (free_node) Do nothing if node is null.
2565         (allocate_num_con) New function.
2566         (allocate_str_con) New function.
2567         (allocate_var_node) New function.
2568         (allocate_binary_nonterminal) New function.
2569         (append_nonterminal_arg) Removed.
2570         (static var func_tab[]) Revised.
2571         (expr_debug_print_postfix) Make parameter const.
2572         Use printf() instead of debug_printf().
2573
2574         * expr.def: New file.
2575         
2576         * expr.h: Change PXP_* to EXPR_*, all references updated.  Also
2577         use named enum instead of unnamed, all references updated.  Add
2578         EXPR_ANY, EXPR_NO_OPTIMIZE.
2579
2580         * exprP.h: Remove EX_*.  Add DEFINE_OPERATOR.  Use expr.def
2581         instead of defining OP_* directly.
2582         (macro IS_TERMINAL) New macro.
2583         (macro IS_NONTERMINAL) New macro.
2584         (enum OP_NO_FLAGS) New.
2585         
2586 Fri Mar 26 00:18:01 2004  Ben Pfaff  <blp@gnu.org>
2587
2588         * error.c: (err_assert_fail) msg variable needs to be non-const.
2589
2590 Fri Mar 26 00:17:24 2004  Ben Pfaff  <blp@gnu.org>
2591
2592         * debug.c: (cmd_debug_evaluate) Rewrite.
2593
2594 Fri Mar 26 00:15:13 2004  Ben Pfaff  <blp@gnu.org>
2595
2596         Fix some CROSSTABS bit rot stupidity.
2597
2598         * crosstabs.q: Reorder the CELLS subcommands for compatibility.
2599         (internal_cmd_crosstabs) Initializes cells[] correctly.
2600         (float_M_suffix) Rename format_cell_entry(), change prototype,
2601         rewrite.
2602         (display_crosstabulation) Fix cell formatting.
2603
2604 Fri Mar 26 00:14:09 2004  Ben Pfaff  <blp@gnu.org>
2605
2606         Make lex_rest_of_line(), lex_entire_end() not discard lines.  Have
2607         to call lex_discard_line() to do that.
2608
2609         * command.c: (run_command) Call lex_discard_line() after
2610         lex_rest_of_line().
2611
2612         * lexer.c: (lex_entire_end) Change behavior.
2613         (lex_rest_of_line) Change behavior.  Return const char *.
2614         (lex_discard_line) Don't clear getl_buf, don't emit message.
2615
2616         * main.c: (handle_error) Emit message here.
2617
2618         * repeat.c: (internal_cmd_do_repeat) Use lex_discard_line()
2619         instead of lex_entire_line().
2620
2621         * str.c: (mm_find_reverse) Make length params size_t.  Rewrite.
2622
2623         * title.c: (get_title) Call lex_discard_line() after
2624         lex_rest_of_line().
2625         (cmd_file_label) Ditto.
2626         (cmd_document) Deal with const char * return value.
2627
2628 Fri Mar 26 00:10:16 2004  Ben Pfaff  <blp@gnu.org>
2629
2630         Removed REMARK command.
2631
2632         * command.c: (extract_prefix) Removed.
2633         (output_line) Removed.
2634         (cmd_remark) Removed.
2635
2636         * command.def: Remove REMARK.
2637
2638 Fri Mar 26 00:08:38 2004  Ben Pfaff  <blp@gnu.org>
2639
2640         Added abort() after lots of assert(0) invocations to avoid some
2641         compiler warnings.  We really need a NOT_REACHED macro.
2642
2643 Tue Mar 23 08:00:42 WAST 2004 John Darrington <john@darrington.wattle.id.au>
2644
2645         * sort.c: Added missing call to temp_file_close.  Changed error 
2646         messages to warnings.
2647
2648         * set.q: Improved setting of set_view{length,width} to be more tolerant
2649         of buggy OSes.
2650
2651 Sun Mar 21 10:11:14 WST 2004 John Darrington <john@darrington.wattle.id.au>
2652
2653         * val-labs.c: Fixed a bug where PSPP would crash, if VALUE LABELS was
2654         used with incorrect syntax.
2655
2656         * error.c, error.h et al:  Overridden definition of assert for a
2657         custom one.
2658
2659         * test-q.c: Fixed a buglet where it would crash if no /VARIABLES
2660         subcommand was given when it ought to have been.
2661
2662 Sat Mar 20 22:19:08 2004  Ben Pfaff  <blp@gnu.org>
2663
2664         * tab.c: (tab_vline) Fix assertions to respect row_ofs and
2665         col_ofs.
2666         (tab_hline) Ditto.
2667         (tab_box) Ditto.
2668         (tab_joint_text) Ditto.
2669
2670 Sat Mar 20 17:57:23 2004  Ben Pfaff  <blp@gnu.org>
2671
2672         * levene.c: Add #include.
2673
2674         * set.q: (set_viewport) Add `int' argument to make its prototype
2675         correct for signal().
2676
2677 Sat Mar 20 15:35:17 2004  Ben Pfaff  <blp@gnu.org>
2678
2679         * expr-evl.c: (expr_evaluate) Assert that `c' is nonzero before
2680         using it.
2681
2682 Sat Mar 20 15:18:16 2004  Ben Pfaff  <blp@gnu.org>
2683
2684         Changed DFM from open-at-first-access to explicit-open.  Before,
2685         calling dfm_get_record() or dfm_put_record() would automatically
2686         open the file.  Now, you have to call dfm_open_for_reading() or
2687         dfm_open_for_writing() explicitly.  This makes it possible to
2688         check permissions, file existence, etc. earlier.
2689
2690         Also made struct file_handle more opaque, and clean up in general.
2691
2692         * data-list.c: (cmd_data_list) Open handle for reading.
2693
2694         * dfm.c: (struct dfm_fhuser_ext) Add `where', `saw_begin_data'
2695         members.
2696         (open_file_r) Renamed dfm_open_for_reading(), rewrote.
2697         (open_file_w) Renamed dfm_open_for_writing(), rewrote.
2698         (open_inline_file) Removed.
2699         (read_record) For inline_file, if we haven't seen BEGIN DATA, read
2700         it.  Deal with line_number in extension record instead of file
2701         handle.
2702         (dfm_get_record) Rewrote.
2703         (dfm_put_record) Rewrote.
2704         (dfm_push) Assert file is open and one of ours.  Deal with
2705         line_number in extension record instead of file handle.
2706         (dfm_pop) Assert file is open and one of ours.  Deal with
2707         line_number in extension record instead of file handle.
2708         (cmd_begin_data) Use dfm_open_for_reading().  Mark that we saw
2709         BEGIN DATA.     
2710
2711         * file-handle.h: (enum constants RH_RF_*) Removed.
2712         (enum constants FH_MD_*) Removed.
2713         (struct file_handle) Removed `name', `norm_fn', `fn', `where',
2714         `recform', `lrecl', `mode' members.  Public references to
2715         `recform' changed to use handle_get_mode(), references to `lrecl'
2716         changed to use handle_get_record_width().  Added `private' member.
2717         (enum file_handle_mode) New.
2718
2719         * file-handle.q: (struct private_file_handle) New structure.
2720         (struct file_handle_list) New structure.
2721         (static var files) New.
2722         (static var file_handles) Removed.
2723         (init_file_handle) Removed.
2724         (create_file_handle) Removed.
2725         (get_handle_with_name) New function.
2726         (get_handle_for_filename) New function.
2727         (cmd_file_handle) Rewritten.
2728         (hash_file_handle) Removed.
2729         (cmp_file_handle) Removed.
2730         (fh_init_files) Rewritten.
2731         (fh_parse_file_handle) Rewritten.  Allows identifiers as
2732         filenames.
2733         (fh_get_handle_by_name) Renamed handle_get_name(), all references
2734         updated.  Rewritten.
2735         (fh_get_handle_by_filename) Renamed handle_get_filename(), all
2736         references updated.  Rewritten.
2737         (fh_record_width) Renamed handle_get_record_width(), all
2738         references updated.  Rewritten.
2739         (handle_get_mode) New function.
2740
2741         * file-type.c: (cmd_file_type) Open handle for reading.
2742
2743         * filename.c: [unix] (struct file_identity) New structure.
2744         [unix] (fn_get_identity) New function.
2745         [unix] (fn_free_identity) New function.
2746         [unix] (fn_compare_file_identities) New function.
2747         [!unix] (struct file_identity) New structure.
2748         [!unix] (fn_get_identity) New function.
2749         [!unix] (fn_free_identity) New function.
2750         [!unix] (fn_compare_file_identities) New function.
2751
2752         * lexer.c: (static var put) Renamed put_token, all references
2753         updated.
2754         (static var put_tokstr) New.
2755         (static var put_tokval) New.
2756         (lex_init) Initialize put_tokstr().
2757         (restore_token) New function.
2758         (save_token) New function.
2759         (lex_get) Use restore_token().
2760         (lex_put_back) Use save_token().
2761         (lex_put_back_id) New function.
2762         (lex_put_forward) Removed.
2763         (lex_preprocess_line) Set put_token instead of using
2764         lex_put_forward().
2765         (lex_negative_to_dash) Use save_token(), set put_token directly.
2766         (dump_token) Use stderr instead of stdout.
2767
2768         * main.c: (main) Remove call to cmd_init().
2769         
2770         * matrix-data.c: (cmd_matrix_data) Open file for reading.
2771
2772         * pfm-read.c: Use handle_get_filename() instead of trying to use
2773         h->fn directly, all over.
2774
2775         * pfm-write.c: Ditto.
2776
2777         * print.c: (internal_cmd_print) Open handle for writing.
2778         (dump_table) Use handle_get_filename().
2779         (print_trns_proc) Use handle_get_mode().
2780         (cmd_print_space) Use fh_parse_file_handle().
2781         Open handle for writing.
2782         [0] (debug_print) Removed.
2783
2784         * sfm-read.c: Use handle_get_filename() instead of trying to use
2785         h->fn directly, all over.
2786
2787         * sfm-write.c: Ditto.
2788
2789 Sat Mar 20 14:35:48 2004  Ben Pfaff  <blp@gnu.org>
2790
2791         Fix memory leaks.
2792         
2793         * autorecode.c: (arc_free) Free arc->src_values.
2794
2795         * error.c: (msg) Free buf.
2796
2797         * val-labs.c: (do_value_labels) Always free vars.
2798
2799         * vfm.c: (close_active_file) If sink has no make_source then call
2800         its destroy function.
2801
2802 Sat Mar 20 14:00:24 2004  Ben Pfaff  <blp@gnu.org>
2803
2804         Fixed cmd_parse() so that it always skips past a full command
2805         name.  A few special commands for which this would be bad get
2806         special treatment.  This lets us drop code for skipping past the
2807         end of a command name in most cmd_*() functions.  It's not worth
2808         listing all the commands affected.
2809
2810         * command.c: (struct command) Remove `cmd' member, replace by
2811         `name' member, all references updated.  Remove `word', `next',
2812         `skip_entire_name' members.
2813         (macro DEFCMD) Deal with revised `struct command'.
2814         (macro UNIMPL) Ditto.
2815         (macro SPCCMD) New macro for commands whose last word shouldn't be
2816         skipped.
2817         (static array cmd_table[]) Make const, rename `commands', remove
2818         sentinel element.
2819         (macro COMMAND_CNT) New macro.
2820         (split_words) Removed.
2821         (cmd_init) Removed.
2822         (FILE_TYPE_okay) Make parameter const.
2823         (cmd_parse) Improve error messages.
2824         (match_strings) New function.
2825         (next_word) New function.
2826         (enum command_match) New enum.
2827         (conflicting_3char_prefixes) New function.
2828         (conflicting_3char_prefix_command) New function.
2829         (cmd_match_words) New function.
2830         (count_matching_commands) New function.
2831         (get_command_name) New function.
2832         (free_words) New function.
2833         (unknown_command_error) New function.
2834         (figure_out_command) Renamed parse_command_name(), rewritten.
2835
2836         * command.def: Removed @ command.  Marked BEGIN DATA, DOCUMENT,
2837         FILE LABEL, REMARK, SUBTITLE, TITLE as special.  Renamed EVALUATE
2838         to DEBUG EVALUATE.  Added N alias for N OF CASES, SORT alias for
2839         SORT CASES.
2840
2841         * command.h: (macro SPCCMD) New.
2842
2843         * include.c: (cmd_include_at) Removed.
2844         (cmd_include) Allow identifier to be used as filename.
2845
2846         * inpt-pgm.c: (cmd_reread) Use fh_parse_file_handle().
2847
2848         * t-test.q: (cmd_t_test) Command name is now parsed for us.
2849         
2850
2851 Sat Mar 20 13:56:00 2004  Ben Pfaff  <blp@gnu.org>
2852
2853         Start work on better test framework.
2854         
2855         * Makefile.am: (pspp_sources) Add debug.c.
2856         
2857         * debug.c: New file.
2858
2859         * compute.c: (cmd_evaluate) Moved to debug.c, renamed
2860         cmd_debug_evaluate().
2861
2862         * expr-prs.c: (expr_parse) Remove PXP_DUMP support.
2863
2864         * expr.h: (enum constant PXP_DUMP) Removed.
2865
2866 Sat Mar 20 00:05:42 WST 2004 John Darrington <john@darrington.wattle.id.au>
2867
2868         * set.q:  Implemented the SHOW command, and synced it to the existing 
2869         SET cmd.
2870
2871         Added a handler for SIGWINCH so that viewlength and viewwidth follow
2872         changes as the window size is changed.
2873
2874         Added fallback to set viewlength and viewwidth from LINES and COLUMS
2875         environment variables if other methods are not available.
2876
2877         glob.c: Removed a lot of global variables from glob.c and encapsulated 
2878         them in set.q
2879
2880         random.c: Tidied up the way the random seed is set.
2881
2882         str.c: Added a ds_vprintf function.
2883
2884         error.c: Extended dump_message so that messages are always broken at
2885         '\n' characters.
2886         
2887 Thu Mar 18 11:07:14 2004  Ben Pfaff  <blp@gnu.org>
2888
2889         * pfm-write.c: (bufwrite) Write out the correct element for string
2890         variables.  From Andreas Streichardt <streichardt@globalpark.de>.
2891
2892 Mon Mar 15 20:48:03 2004  Ben Pfaff  <blp@gnu.org>
2893
2894         Get rid of static and global (!) vars in matrix-data.c.
2895
2896         * matrix-data.c: (static var nr_data) Removed.
2897         (static var nr_factor_values) Removed.
2898         (static var max_cell_index) Removed.
2899         (static var split_values) Removed.
2900         (struct nr_aux_data) New structure.
2901         (read_matrices_without_rowtype) Use a local struct nr_aux_data in
2902         place of static vars, pass to create_case_source() and procedure()
2903         as aux data.
2904         (nr_read_data_lines) Use struct nr_aux_data * parameter instead of
2905         struct matrix_data_pgm *.
2906         (nr_read_splits) Ditto.
2907         (nr_read_factors) Ditto.
2908         (nr_output_data) Ditto.
2909         (static var wr_content) Removed.
2910         (global var wr_data) Removed.
2911         (global var wr_current) Removed.
2912         (struct wr_aux_data) New structure.
2913         (read_matrices_with_rowtype) Use a local struct wr_aux_data in
2914         place of static vars, pass to create_case_source() and procedure()
2915         as aux data.
2916         (matrix_data_read_with_rowtype) Use struct wr_aux_data * parameter
2917         instead of matrix_data_pgm *.
2918         (wr_read_splits) Ditto.
2919         (wr_output_data) Ditto.
2920         (wr_read_rowtype) Ditto.
2921         (wr_read_factors) Ditto.
2922         (wr_read_indeps) Ditto.
2923         
2924 Mon Mar 15 20:07:29 2004  Ben Pfaff  <blp@gnu.org>
2925
2926         Get rid of static vars in autorecode.c.
2927
2928         * autorecode.c: (struct autorecode_trns) Rename `arc' to `specs',
2929         `n_arc' to `spec_cnt'.  All references updated.
2930         (static var v_src) Removed.
2931         (static var v_dest) Removed.
2932         (static var h_trns) Removed.
2933         (static var nv_src) Removed.
2934         (static var descend) Removed.
2935         (static var print) Removed.
2936         (enum direction) New enum.
2937         (struct autorecode_pgm) New structure.
2938         (cmd_autorecode) Use struct autorecode_pgm instead of static vars.
2939         Move n_dest local var into struct autorecode_pgm for ease of
2940         clean-up.  Use arc_free().
2941         (arc_free) New function.
2942         (recode) Modify to take struct autorecode_pgm * parameter instead
2943         of using statics.  Let the caller clean up.
2944         (autorecode_proc_func) Use struct autorecode_pgm * auxiliary data
2945         instead of statics.  Rearrange code a little.
2946
2947 Mon Mar 15 00:25:02 2004  Ben Pfaff  <blp@gnu.org>
2948
2949         Get rid of static, global vars in recode.c.  Remove debug code.
2950
2951         * recode.c: (static var head) Removed.
2952         (global var v) Removed.
2953         (global var nv) Removed.
2954         (cmd_recode) New local variables head, v, nv.  Initialize and free
2955         v.  Don't call debug_print().
2956         [DEBUGGING] (dump_dest) Removed.
2957         [DEBUGGING] (debug_print) Removed.
2958
2959 Mon Mar 15 00:14:49 2004  Ben Pfaff  <blp@gnu.org>
2960
2961         Get rid of static vars in expr-opt.c.
2962
2963         * expr-opt.c: (static var e) Removed.
2964         (static var nop) Removed.
2965         (static var mop) Removed.
2966         (static var ndbl) Removed.
2967         (static var mdbl) Removed.
2968         (static var nstr) Removed.
2969         (static var mstr) Removed.
2970         (static var nvars) Removed.
2971         (static var mvars) Removed.
2972         (struct expr_dump_state) New structure.
2973         (dump_expression) Use new struct expr_dump_state instead of static
2974         vars and pass to functions we call.
2975         (dump_node) Use struct expr_dump_state * parameter.
2976         (emit) Ditto.
2977         (emit_num_con) Ditto.
2978         (emit_str_con) Ditto.
2979         (emit_var) Ditto.
2980         
2981 Mon Mar 15 00:03:51 2004  Ben Pfaff  <blp@gnu.org>
2982
2983         Get rid of static var in COUNT.
2984
2985         * count.c: (static var head) Move into cmd_count().
2986         (cmd_count) [DEBUGGING] Don't call debug_print.
2987         [DEBUGGING] (debug_print) Removed.
2988
2989 Sun Mar 14 23:56:09 2004  Ben Pfaff  <blp@gnu.org>
2990
2991         Get rid of static vars in VALUE LABELS, ADD VALUE LABELS.
2992
2993         * val-labs.c: (static var v) Removed.
2994         (static var nv) Removed.
2995         [DEBUGGING] (debug_print) Removed.
2996         (verify_val_labs) Add struct variable **, int parameters.
2997         (get_label) Ditto.  Improve error messages, streamline.
2998         (erase_labels) New function for erasing value labels, taking over
2999         part of verify_val_labs()'s function.
3000         (init) Removed.
3001         (done) Removed.
3002         (cmd_value_labels) No need to call init() or done() anymore.
3003         (cmd_add_value_labels) Ditto.
3004         (do_value_labels) Add vars, var_cnt local variables.  Clean up
3005         after them internally.  Call erase_labels() if we should.  Don't
3006         call debug_print().
3007
3008 Sun Mar 14 23:33:53 2004  Ben Pfaff  <blp@gnu.org>
3009
3010         Get rid of static vars in MATCH FILES.
3011         
3012         * get.c: (static var mtf_head) Removed.
3013         (static var mtf_tail) Removed.
3014         (static var mtf_by) Removed.
3015         (static var mtf_n_by) Removed.
3016         (static var mtf_master) Removed.
3017         (static var mtf_seq_num) Removed.
3018         (static var mtf_seq_nums) Removed.
3019         (static var mtf_sink) Removed.
3020         (static var mtf_case) Removed.
3021         (struct mtf_proc) New structure.
3022         (cmd_match_files) Use struct mtf_proc instead of static vars.
3023         (mtf_processing_finish) Ditto.
3024         (mtf_free) Ditto.
3025         (mtf_delete_file_in_place) Ditto.
3026         (mtf_read_nonactive_records) Ditto.
3027         (mtf_compare_BY_values) Ditto.
3028         (mtf_processing) Ditto.
3029         (mtf_merge_dictionary) Ditto.
3030
3031 Sun Mar 14 22:48:12 2004  Ben Pfaff  <blp@gnu.org>
3032
3033         * command.def: Add CASESTOVARS, VARSTOCASES unimplemented commands.
3034
3035         * dictionary.c: (dict_rename_var) Add assertion.
3036         (dict_contains_var) Check by index instead of name.
3037
3038 Sun Mar 14 22:01:02 2004  Ben Pfaff  <blp@gnu.org>
3039
3040         Get rid of compaction_necessary, compaction_nval, compaction_case.
3041         Redo VFM interface.  Replace disk_sink and memory_sink by
3042         storage_sink, disk_source and memory_source by storage_source.
3043
3044         * vfm.h: (struct case_sink) Add `dict', `idx_to_fv', `value_cnt'
3045         members.
3046
3047         * vfm.c: 
3048         (struct write_case_data) Remove `begin_func', `end_func',
3049         `func_aux' members.  Add `aux', `trns_case', `sink_case',
3050         `cases_written', `cases_analyzed' members.
3051         (global var compaction_necessary) Make static.
3052         (global var compaction_nval) Removed.
3053         (global var compaction_case) Removed.
3054         (static var case_count) Removed.
3055         (struct procedure_aux_data) Removed.
3056         (struct split_aux_data) Removed.
3057         (procedure) Remove begin_func, end_func parameters.  Rewrite.
3058         (static var not_canceled) Removed.
3059         (process_active_file) Removed.
3060         (process_active_file_write_case) Removed.
3061         (process_active_file_output_case) Removed.
3062         (prepare_for_writing) Moved into open_active_file().
3063         (arrange_compaction) Ditto.
3064         (setup_lag) Ditto.
3065         (open_active_file) Rewrote.
3066         (write_case) New function.
3067         [DEBUGGING] (index_to_varname) Removed.
3068         (execute_transformations) New function.
3069         (exclude_this_case) Renamed filter_case(), changed interface.
3070         (clear_case) Added struct ccase * parameter to interface.
3071         (close_active_file) Added struct write_case_data * parameter,
3072         rewrote.
3073         (disk_sink_create) Removed.
3074         (disk_sink_destroy) Removed.
3075         (disk_sink_make_source) Removed.
3076         (disk_sink_write) Removed.
3077         (disk_source_count) Removed.
3078         (disk_source_destroy) Removed.
3079         (disk_source_read) Removed.
3080         (global var disk_sink_class) Removed.
3081         (global var disk_source_class) Removed.
3082         (global var memory_sink_class) Removed.
3083         (global var memory_source_class) Removed.
3084         (memory_sink_create) Removed.
3085         (memory_sink_destroy) Removed.
3086         (memory_sink_make_source) Removed.
3087         (memory_sink_write) Removed.
3088         (memory_source_count) Removed.
3089         (memory_source_destroy) Removed.
3090         (memory_source_get_cases) Removed.
3091         (memory_source_read) Removed.
3092         (memory_source_set_cases) Removed.
3093         (struct disk_stream_info) Removed.
3094         (struct memory_sink_info) Removed.
3095         (struct memory_source_info) Removed.
3096         (write_active_file_to_disk) Removed.
3097         (destroy_storage_stream_info) New function.
3098         (global var null_sink_class) New var.
3099         (global var storage_sink_class) New var.
3100         (global var storage_source_class) New var.
3101         (open_storage_file) New function.
3102         (storage_sink_destroy) New function.
3103         (storage_sink_make_source) New function.
3104         (storage_sink_open) New function.
3105         (storage_sink_write) New function.
3106         (storage_source_count) New function.
3107         (storage_source_destroy) New function.
3108         (storage_source_get_cases) New function.
3109         (storage_source_on_disk) New function.
3110         (storage_source_read) New function.
3111         (storage_source_set_cases) New function.
3112         (storage_source_to_disk) New function.
3113         (storage_to_disk) New function.
3114         (struct storage_stream_info) New structure.
3115         (write_storage_file) New function.
3116         (procedure_write_case) Removed.
3117         (create_case_source) Add `struct dictionary *' parameter, all
3118         references updated.
3119         (create_case_sink) Ditto.
3120         (free_case_sink) New function.
3121         (struct split_aux_data) New structure.
3122         (procedure_with_splits) New function implementing what procedure()
3123         used to.
3124         (SPLIT_FILE_proc_func) Removed.
3125         (procedure_with_splits_callback) New function.
3126         (equal_splits) New function.
3127         
3128         * aggregate.c: Pass around a struct instead of using statics.
3129         (static var outfile) Remove.
3130         (enum type) Give it tag `missing_treatment'.
3131         (static var missing) Remove.
3132         (static var sort) Remove.
3133         (static var agr_first) Remove.
3134         (static var agr_next) Remove.
3135         (static var case_count) Remove.
3136         (static var prev_case) Remove.
3137         (static var buf64_1xx) Remove.
3138         (static var buf_1xx) Remove.
3139         (struct agr_proc) New structure incorporating the above.
3140         (cmd_aggregate) Use new struct.  Clean up error handling using
3141         agr_destroy().  Completely rewrite actual implementation of
3142         aggregation.
3143         (create_sysfile) Add struct agr_proc * parameter, modify
3144         accordingly.
3145         (parse_aggregate_functions) Ditto.
3146         (free_aggregate_functions) Ditto.  Rename agr_destroy().
3147         (aggregate_single_case) Add struct agr_proc * parameter, modify
3148         accordingly.
3149         (accumulate_aggregate_info) Ditto.
3150         (dump_aggregate_info) Ditto.
3151         (initialize_aggregate_info) Ditto.
3152         (agr_00x_trns_proc) Removed.
3153         (agr_00x_end_func) Removed.
3154         (agr_10x_trns_proc) Removed.
3155         (agr_10x_trns_free) Removed.
3156         (agr_10x_end_func) Removed.
3157         (agr_11x_read) Removed.
3158         (agr_11x_finish) Removed.
3159         [DEBUGGING] (debug_print) Removed.
3160         (write_case_to_sfm) Add struct agr_proc * parameter, modify
3161         accordingly.
3162         (agr_to_active_file) New function.
3163         (presorted_agr_to_sysfile) New function.
3164         (sort_agr_to_sysfile) New function.
3165
3166         * autorecode.c: (cmd_autorecode) Use procedure_with_splits().
3167
3168         * crosstabs.q: (internal_cmd_crosstabs) Ditto.
3169
3170         * descript.q: (cmd_descriptives) Ditto.
3171
3172         * dfm.c: (cmd_begin_data) Check for storage_source_class.  Adapt
3173         to new procedure() interface.
3174
3175         * command.c: (cmd_execute) Adapt to new procedure() interface.
3176
3177         * dictionary.c: (dict_compact_values) Also delete scratch
3178         variables.
3179         (dict_get_compacted_value_cnt) New function.
3180         (dict_get_compacted_idx_to_fv) New function.
3181
3182         * flip.c: (cmd_flip) Warn about and cancel TEMPORARY.
3183         (cmd_flip) Adapt to new procedure() interface.
3184         (flip_sink_write) Use sink->idx_to_fv.
3185
3186         * frequencies.q: (internal_cmd_frequencies) Use
3187         procedure_with_splits().
3188
3189         * get.c: (cmd_save_internal) Adapt to new procedure() interface.
3190         (static var mtf_sink) New static var.
3191         (static var mtf_case) New static var.
3192         (cmd_match_files) Warn about and cancel TEMPORARY.  Redo the way
3193         we actually implement the matching.
3194         (mtf_delete_file_in_place) Use mtf_case.
3195         (mtf_processing) Use mtf_case and mtf_sink.
3196         (cmd_export) Adapt to new procedure() interface.
3197
3198         * levene.c: (levene) Use procedure_with_splits().
3199
3200         * list.q: (cmd_list) Use procedure_with_splits().
3201
3202         * matrix-data.c: (read_matrices_without_rowtype) Adapt to new
3203         procedure() interface.
3204         (read_matrices_with_rowtype) Ditto.
3205
3206         * modify-vars.c; (cmd_modify_vars) Warn about and cancel
3207         TEMPORARY.  Adapt to new procedure() interface.
3208
3209         * rename-vars.c: Warn about and cancel TEMPORARY.
3210
3211         * sort.c: (cmd_sort_cases) Warn about TEMPORARY.
3212         (sort_cases) Use dict_get_compacted_value_cnt() instead of
3213         compaction_nval.  Adapt to new procedure() interface.  Use
3214         storage_source_to_disk().
3215         (do_internal_sort) Don't try to dump the cases to memory.
3216         (compare_case_lists) Pass null idx_to_fv.
3217         (struct initial_run_state) Add `idx_to_fv' member.  Remove
3218         `case_size' member.
3219         (write_initial_runs) Don't initialize irs->case_size.  Adapt to
3220         new procedure() interface.  Reset irs->idx_to_fv after calling
3221         procedure().
3222         (sort_sink_write) Set irs->idx_to_fv.  Use case_size from struct
3223         sort_cases_pgm.  Pass irs, not struct sort_cases_pgm to
3224         push_heap().
3225         (destroy_initial_run_state) Don't dereference irs after freeing
3226         it.
3227         (allocate_cases) Don't calculate case_size locally.
3228         (compare_record) Add idx_to_fv parameter.
3229         (compare_record_run) Change parameter from struct sort_cases_pgm *
3230         to struct initial_run_state *.  Pass irs->idx_to_fv to
3231         compare_record().
3232         (compare_record_run) Third parameter now a struct
3233         initial_run_state *.
3234         (output_record) No need for out_case anymore.  Pass irs, not
3235         struct sort_cases_pgm to pop_heap().  Use case_size from struct
3236         sort_cases_pgm.
3237         (merge) Use case_size from struct sort_cases_pgm.
3238         (merge_once) Use case_size from struct sort_cases_pgm.
3239         Pass null pointer to compare_record() as idx_to_fv.
3240         (global var sort_sink_class) Make static.
3241
3242         * t-test.q: (cmd_t_test) Use procedure_with_splits().
3243
3244         * temporary.c: Remove debugging crap.
3245
3246 Sat Mar 13 14:19:52 WST 2004 John Darrington <john@darrington.wattle.id.au>
3247
3248         * t-test.q, levene.c: Fixed up the handling of MISSING values
3249         int the T-TEST
3250
3251 Fri Mar 12 16:23:35 WST 2004 John Darrington <john@darrington.wattle.id.au>
3252
3253         * t-test.q, levene.c: Added support for T-TEST /GROUP where only 
3254         one value is given.
3255
3256 Wed Mar 10 23:25:13 2004  Ben Pfaff  <blp@gnu.org>
3257
3258         Change explicit variable name checks into use of
3259         dict_class_from_id().
3260
3261         * dictionary.c: (dict_create_var)  Change explicit variable name
3262         check into use of dict_class_from_id().
3263
3264         * get.c: (trim_dictionary) Ditto.
3265
3266         * sel-if.c: (cmd_filter) Ditto.
3267
3268         * sysfile-info.c: (cmd_display) Ditto.
3269
3270         * vars-prs.c: (parse_DATA_LIST_vars) Ditto.
3271
3272         * vfm.c: (arrange_compaction) Ditto.
3273
3274         * weight.c: (cmd_weight) Ditto.
3275
3276 Wed Mar 10 21:16:34 2004  Ben Pfaff  <blp@gnu.org>
3277
3278         * temporary.c: (cmd_temporary) When TEMPORARY was the first
3279         transformation following the input program, if any, for some
3280         reason we special-cased f_trns.  That's just wrong.  It should
3281         always be set to n_trns.
3282
3283 Tue Mar  9 23:44:40 2004  Ben Pfaff  <blp@gnu.org>
3284
3285         * format.c: (parse_format_specifier_name) Fix brown-bag bug
3286         introduced in last check-in.
3287
3288 Tue Mar  9 23:10:41 2004  Ben Pfaff  <blp@gnu.org>
3289
3290         * format.c: (global array translate_fmt[]) Removed.
3291         (translate_fmt) New function as replacement.
3292         (parse_format_specifier_name) Rewrite.
3293
3294         * pfm-read.c: (convert_format) Use translate_fmt() instead of
3295         translate_fmt[].
3296
3297         * sfm-read.c: (parse_format_spec) Ditto.
3298
3299         * postscript.c: (text) Fix handling of fonts with missing
3300         ligatures.
3301
3302         * sort.c: (struct external_sort) Add temp_name member.
3303         (destroy_external_sort) Free temp_dir, temp_name members.
3304         (init_external_sort) Allocate temp_name.
3305         (get_temp_file_name) Change prototype.
3306         (open_temp_file) Deal with change to get_temp_file_name().
3307         (close_temp_file) Ditto.
3308         (remove_temp_file) Ditto.
3309         (write_temp_file) Ditto.
3310         (read_temp_file) Ditto.
3311         (sort_sink_destroy) Removed.
3312         (sort_sink_class) Change destroy member to null.
3313
3314 Tue Mar  9 22:36:34 2004  Ben Pfaff  <blp@gnu.org>
3315
3316         Eliminate temp_case.
3317
3318         * aggregate.c: (cmd_aggregate) No need to save/restore temp_case
3319         anymore.  Use agr_11x_finish().
3320         (aggregate_single_case) Make first param const.
3321         (accumulate_aggregate_info) Ditto.
3322         (agr_00x_end_func) Use compaction_case, not temp_case.
3323         (agr_11x_func) Break into agr_11x_read(), agr_11x_finish().
3324
3325         * data-list.c: (struct data_list_pgm) Add `case_size' member.
3326         (cmd_data_list) Initialize case_size.
3327         (read_from_data_list_fixed) Add struct ccase * param, use instead
3328         of temp_case.
3329         (read_from_data_list_free) Ditto.
3330         (read_from_data_list_list) Ditto.
3331         (read_one_case) Rename data_list_trns_proc(), all references
3332         updated.  Add argument in calling above functions.  Use c
3333         argument instead of temp_case.
3334         (destroy_dls) Rename data_list_trns_free(), all references
3335         updated.
3336
3337         * expr-evl.c: (expr_evaluate) Make second parameter const.
3338
3339         * file-type.c: (struct file_type_pgm) Add `case_size' member.
3340         (cmd_end_file_type) Initialize `case_size'.
3341         (file_type_source_read) Add struct ccase * parameter.  Use instead
3342         of temp_case.
3343
3344         * flip.c: Rewritten.
3345
3346         * get.c: (struct get_pgm) New structure to keep track of
3347         case_size.
3348         (cmd_get) Initialize case_size.
3349         (cmd_import) Ditto.
3350         (get_source) Deal with struct get_pgm.
3351         (get_source_read) Add struct ccase * parameter, use instead of
3352         temp_case.
3353         (import_source_read) Ditto.
3354
3355         * get.c: Use a null pointer instead of temp_case to represent the
3356         "current case" in a struct mtf_file's input member.
3357         (mtf_processing_finish) Pass null to mtf_processing(), not
3358         temp_case.
3359         (mtf_read_nonactive_records) Don't set iter->input to temp_case.
3360         (mtf_compare_BY_values) Add extra arg, use instead of null input
3361         members.
3362         (mtf_processing) Use c parameter instead of temp_case.  Pass
3363         compaction_case to process_active_file_output_case().
3364         
3365         * glob.c: (global variable temp_case) Removed.
3366
3367         * inpt-pgm.c: (struct input_program_pgm) Add `case_size' member.
3368         (cmd_input_program) Initialize case_size.  Set
3369         vfm_source->value_cnt.
3370         (init_case) Add struct ccase * parameter, use instead of
3371         temp_case.
3372         (clear_case) Ditto.
3373         (input_program_source_read) Ditto.
3374
3375         * matrix-data.c: (matrix_data_read_without_rowtype) Ditto.
3376         (dump_cell_content) Ditto.
3377         (nr_output_data) Ditto.
3378         (read_matrices_without_rowtype) Ditto.
3379         (matrix_data_read_with_rowtype) Ditto.
3380         (wr_read_splits) Ditto.
3381         (wr_output_data) Ditto.
3382
3383         * sort.h: (struct sort_cases_pgm) New member `case_size'.
3384         
3385         * sort.c: (sort_cases) Initialize scp->case_size.
3386         (struct external_sort) Remove `case_size' member.
3387         (write_initial_runs) Only call vfm_sink->class_destroy if
3388         non-null.
3389         (struct sort_source_aux) New structure.
3390         (sort_source_read_helper) New function.
3391         (sort_source_read) Use sort_source_read_helper().
3392         (read_sort_output) Change interface to be more reasonable.
3393         (read_internal_sort_output) Ditto.
3394         (read_external_sort_output) Ditto.
3395
3396         * vars-prs.c: (dict_class_to_name) Pass return value through
3397         gettext.
3398
3399         * vfm.c: (struct procedure_aux_data) Add `trns_case' member.
3400         (procedure) Initialize trns_case.
3401         (procedure) Pass trns_case to vfm_source->class->read().
3402         Free trns_case.
3403         (process_active_file) Start using struct procedure_aux_data.
3404         (process_active_file_write_case) Pass trns_case to
3405         transformations, lag_case(), clear_case().
3406         (process_active_file_output_case) Add struct ccase * parameter.
3407         (create_trns_case) New function.
3408         (make_temp_case) Removed.
3409         (vector_initialization) Removed.
3410         (close_active_file) Only call make_source if non-null, otherwise
3411         set vfm_source to null pointer.  Don't free temp_case.
3412         (disk_source_read) Add struct ccase * parameter, use instead of
3413         temp_case.
3414         (memory_source_read) Ditto.
3415         (lag_case) Add const struct ccase * member.
3416         (procedure_write_case) Use trns_case instead of temp_case.
3417         (clear_case) Add struct ccase * member, use instead of temp_case.
3418         (exclude_this_case) Ditto.
3419         (create_case_source) Add struct dictionary * parameter, use to
3420         initialize source->value_cnt.
3421
3422         * vfm.h: (struct case_source) Add `value_cnt' member.
3423         (struct case_source_class) Add struct ccase * parameter to `read'
3424         member function pointer.
3425         (struct case_sink_class) Make struct ccase * parameter const in
3426         `write' member function pointer.
3427         
3428 Wed Mar  3 20:44:37 2004  Ben Pfaff  <blp@gnu.org>
3429
3430         Fix a lot of "possibly uninitialized variable" warnings.  Some of
3431         them are even real bugs.  A few of them make me wonder how the
3432         code ever worked.
3433
3434         * aggregate.c: (parse_aggregate_functions) Initialize `function.
3435
3436         * ascii.c: (output_lines) Add default case to switch.
3437
3438         * crosstabs.q: Remove static variable `expected' and all
3439         references to it.
3440         (display_crosstabulation) Always calculate expected value.
3441         (calc_chisq) Ditto.
3442         (output_pivot_table) Initialize `cmp'.
3443         (display_crosstabulation) New variable `last_row', which is
3444         initialized.
3445
3446         * data-in.c: (parse_numeric) Always initialize sign.  How did this
3447         work at all?!
3448
3449         * data-list.c: (repeating_data_trns_proc) Always initialize code.
3450         Always set info.ofs.  (How did this work?!)
3451
3452         * expr-opt.c: (optimize_tree) Always initialize `m'.
3453         (evaluate_tree) Always initialize `c'.  (How did this work?)
3454
3455         * frequencies.q: (frq_custom_variables) Always initialize min,
3456         max.
3457         (frq_custom_grouped) Always initialize `dl'.
3458
3459         * groff-font.c: (groff_read_font) Always initialize char_set.
3460
3461         * matrix-data.c: (nr_output_data) Initialize `split'.
3462         (wr_read_splits) Remove shadowing split_cnt declaration.
3463         (wr_output_data) Initialize `split'.
3464
3465         * output.c: (tokener) Skip add character on syntax error.
3466
3467         * pool.c: (pool_strndup) Always set `copy'.  (How did this work?!)
3468
3469         * postscript.c: (read_ps_encodings) Use line.string instead of
3470         uninitialized `bp'.
3471         (write_text) Add default case to switch.
3472         (text) Always initialize multiple variables.  Fix bug with
3473         ligatures.
3474
3475         * print.c: (fixed_parse_fortran) Initialize head.
3476         (alloc_line) Add default case to switch.
3477
3478         * recode.c: (parse_dest_spec) Handle case where nothing matches.
3479         (recode_trns_proc) Move variable declaration inward.  Add default
3480         case to switch.
3481
3482         * sfm-read.c: (read_header) Initialize skip_amt.
3483
3484         * sysfile-info.c: (display_variables) Always initialize pc.
3485
3486         * vars-prs.c: Initialized `included'.
3487
3488 Wed Mar  3 09:30:09 2004  Ben Pfaff  <blp@gnu.org>
3489
3490         * main.c: (main) sigaction()'s sa_flags member was uninitialized.
3491         Just use signal() instead.
3492
3493 Wed Mar  3 09:26:30 2004  Ben Pfaff  <blp@gnu.org>
3494
3495         Get rid of vfm_sink_info and vfm_source_info.
3496         
3497         * aggregate.c: (agr_00x_end_func) Don't increment
3498         sfm_sink_info.ncases.
3499
3500         * sort.c: (do_internal_sort) Get case count from
3501         vfm_source->class->count().
3502         (struct external_sort) Add `case_size' member.
3503         (do_external_sort) Initialize case_size.
3504         (struct initial_run_state) Add `case_size' member.
3505         (write_initial_runs) Initialize case_size.
3506         (sort_sink_write) Use case_size.
3507         (read_external_sort_output) Use case_size.  Get case_cnt from
3508         initial_runs.
3509
3510         * vfm.c: (struct write_case_data) Add underscores to existing arg
3511         names, all references updated.  Renamed `aux' as `func_aux', all
3512         references updated.  Added new `aux' member.
3513         (global var vfm_source_info) Removed.
3514         (global var vfm_sink_info) Removed.
3515         (struct procedure_aux_data) New.
3516         (struct split_aux_data) New.
3517         (procedure) Use `aux' fields for procedure_aux_data,
3518         split_aux_data.
3519         (process_active_file_write_case) Pass case_count + 1 to
3520         transformation procedures, exclude_this_case().
3521         (process_active_file_output_case) Don't increment
3522         vfm_sink_info.ncases.
3523         (prepare_for_writing) Don't initialize vfm_sink_info.  Don't try
3524         to send data to disk early.
3525         (make_temp_case) Don't use vfm_sink_info.case_size.
3526         (close_active_file) Don't initialize vfm_source_info.
3527         (struct disk_stream_info) New, to allow for case_cnt and case_size fields.
3528         (disk_sink_create) Initialize and/or update disk_stream_info.
3529         (disk_sink_write) Ditto.
3530         (disk_sink_destroy) Ditto.
3531         (disk_sink_make_source) Ditto.
3532         (disk_source_read) Ditto.
3533         (disk_source_destroy) Ditto.
3534         (global var disk_source_class) Add disk_source_count().
3535         (disk_source_count) New function.
3536         (struct memory_sink_info) Add `case_cnt', `case_size' members.
3537         (struct memory_source_info) Ditto.
3538         (memory_sink_create) Deal with case_cnt, case_size.
3539         (memory_sink_write) Ditto.
3540         (memory_sink_make_source) Ditto.
3541         (memory_source_read) Ditto.
3542         (memory_source_count) New function.
3543         (memory_source_class) Add memory_source_count().
3544         (procedure_write_case) Don't use vfm_sink_info.ncases.  Do use
3545         proc_aux->cases_written, and pass it to transformation procedures
3546         and exclude_this_case ().
3547         (exclude_this_case) Add case_num parameter.  Pass it to
3548         expr_evaluate().
3549         (SPLIT_FILE_procfunc) Use split_aux->prev_case instead of static
3550         variable.
3551
3552         * vfm.h: (struct case_source_class) Add `count' member.
3553
3554         * vfmP.h: (struct stream_info) Removed.
3555         (global variable vfm_source_info) Removed.
3556         (global variable vfm_sink_info) Removed.
3557         
3558 Tue Mar  2 23:38:17 2004  Ben Pfaff  <blp@gnu.org>
3559
3560         * var.h: (typedef trns_proc_func) New typedef.
3561         (trns_free_func) New typedef.
3562         (struct trns_header) Change `proc' to type trns_proc_func, `free'
3563         to type trns_free_func.  This only changes the actual type of
3564         trns_proc_func, adding a `case_num' parameter.  Updated all
3565         implementations to use the typedefs instead.
3566
3567         * compute.c: (compute_num) Pass case_num to expr_evaluate().
3568         (compute_num_vec) Ditto.
3569         (compute_str) Ditto.
3570         (compute_str_vec) Ditto.
3571
3572         * do-if.c: (do_if_trns_proc) Ditto.
3573
3574         * expr-evl.c: (expr_evaluate) Add new case_num parameter, use for
3575         OP_CASENUM.
3576
3577         * inpt-pgm.c: (input_program_source_read) Maintain case count,
3578         pass to transformation functions.
3579         (reread_trns_proc) Pass case_num arg to expr_evaluate().
3580
3581         * loop.c: (loop_1_trns_proc) Ditto.
3582         (loop_2_trns_proc) Ditto.
3583         (loop_3_trns_proc) Ditto.
3584
3585         * print.c: (print_space_trns_proc) Ditto.
3586
3587         * sel-if.c: (select_if_proc) Ditto.
3588
3589 Tue Mar  2 11:36:52 2004  Ben Pfaff  <blp@gnu.org>
3590
3591         * frequencies.q: (cleanup_freq_tab) Avoid memory leak by
3592         destroying hash table.
3593
3594         * glob.c: (read_active_file) Variable not referenced, removed.
3595         (cancel_input_pgm) Ditto.
3596
3597         * levene.c: Add #include <stdlib.h> needed to call free().
3598
3599         * aggregate.c: (parse_aggregate_functions) Make `function'
3600         variable const.
3601
3602 Tue Mar  2 11:30:56 2004  Ben Pfaff  <blp@gnu.org>
3603
3604         Start working to eliminate VFM dependence on static variables.
3605
3606         * command.c: (cmd_parse) Use case_source_is_class().
3607
3608         * data-list.c: Rewrite to eliminate use of static variables.
3609
3610         * dfm.c: (cmd_begin_data) Use case_source_is_class().
3611
3612         * file-handle.q: (fh_handle_name) Make parameter const.
3613
3614         * file-type.c: Rewrite to eliminate use of static variables.
3615
3616         * flip.c: Rewrite to eliminate use of static variables.
3617
3618         * format.c: (get_format_var_width) New function.
3619
3620         * get.c: Eliminate use of static variables.
3621
3622         * inpt-pgm.c: Eliminate use of static variables.
3623
3624         * matrix-data.c: Eliminate use of static variables.
3625
3626         * set.q: (set_max_workspace) New variable.
3627         (cmd_set) Use SET WORKSPACE to modify set_max_workspace.
3628
3629         * var.h: (struct case_list) Move here from vfmP.h.
3630
3631         * vars-atr.c: (discard_variables) Handle new vfm_source type.
3632
3633         * vfm.c: (vfm_source) Change type from struct case_stream to
3634         struct case_source.
3635         (vfm_sink) Change type from struct case_stream to struct
3636         case_sink.
3637         (static var paging) Rename workspace_overflow, all references
3638         updated.
3639         (procedure) Use new class structures.
3640         (process_active_file) Ditto.
3641         (process_active_file_write_case) Ditto.
3642         (prepare_for_writing) Use set_max_workspace.  Use new class
3643         structures.
3644         (close_active_file) Use new class structures.  Free old sink.
3645         (global var disk_source_file) Removed.
3646         (global var disk_sink_file) Removed.
3647         (disk_stream_init) Removed.
3648         (disk_stream_read) Removed.
3649         (disk_stream_write) Removed.
3650         (disk_stream_mode) Removed.
3651         (disk_stream_destroy_source) Removed.
3652         (disk_stream_destroy_sink) Removed.
3653         (global var vfm_disk_stream) Removed.
3654         (disk_sink_create) New function.
3655         (disk_sink_write) New function.
3656         (disk_sink_destroy) New function.
3657         (disk_sink_make_source) New function.
3658         (disk_sink_class) New static var.
3659         (disk_source_read) New function.
3660         (disk_source_destroy) New function.
3661         (global var vfm_source_class) New var.
3662         (global var memory_source_cases) Removed.
3663         (global var memory_sink_cases) Removed.
3664         (global var memory_sink_max_cases) Removed.
3665         (struct memory_sink_info) New struct.
3666         (memory_stream_init) Removed.
3667         (memory_stream_read) Removed.
3668         (memory_stream_write) Removed.
3669         (memory_stream_mode) Removed.
3670         (memory_stream_destroy_source) Removed.
3671         (memory_stream_destroy_sink) Removed.
3672         (global var vfm_memory_stream) Removed.
3673         (page_to_disk) Renamed write_active_file_to_disk().
3674         (memory_sink_create) New function.
3675         (memory_sink_write) New function.
3676         (memory_sink_destroy) New function.
3677         (memory_sink_make_source) New function.
3678         (memory_sink_class) New static var.
3679         (memory_source_read) New function.
3680         (memory_source_destroy) New function.
3681         (memory_source_get_cases) New function.
3682         (memory_source_set_cases) New function.
3683         (global var vfm_source_class) New var.
3684         (procedure_write_case) Use new class structures.
3685         (create_case_source) New function.
3686         (case_source_is_complex) New function.
3687         (case_source_is_class) New function.
3688         (create_case_sink) New function.
3689
3690         * vfm.h: (global variable reinit_sysmis) Not used, removed.
3691         (global variable reinit_blanks) Not used, removed.
3692         (global variable init_zero) Not used, removed.
3693         (global variable init_blanks) Not used, removed.
3694         (struct case_source) New struct.
3695         (struct case_source_class) New struct.
3696         (struct case_sink) New struct.
3697         (struct case_sink_class) New struct.
3698         (struct case_stream) Removed.
3699
3700         * vfmP.h: (struct case_list) Moved to var.h.
3701
3702 Tue Mar  2 11:28:30 2004  Ben Pfaff  <blp@gnu.org>
3703
3704         * algorithm.c: (count_equal) New function.
3705         (count_if) New function.
3706         (unique) Add assertions.
3707         (partition) Add assertions.
3708         (is_partitioned) New function.
3709         (copy_if) Add assertions.
3710         (remove_equal) Add assertions.
3711         (lexicographical_compare) Rename lexicographical_compare_3way.
3712         (sort) Add assertions.  Rephrase some code.
3713         (is_sorted) New function.
3714
3715 Sun Feb 29 23:24:57 2004  Ben Pfaff  <blp@gnu.org>
3716
3717         Rewrite SORT CASES.
3718
3719         * sort.c: Completely rewrite.
3720
3721         * sort.h: Expose interface via struct sort_cases_pgm, not via
3722         global variables.
3723
3724         * aggregate.c: (sort) New static var.
3725         (cmd_aggregate) Use sort.
3726         (create_sysfile) Ditto.
3727         (aggregate_single_case) Ditto.
3728         (dump_aggregate_info) Ditto.
3729         (agr_00x_end_func) Ditto.
3730         (debug_print) Ditto.
3731
3732         * var.h: (enum SRT_ASCEND) Removed.
3733         (enum SRT_DESCEND) Removed.
3734         (struct sort_cases_proc) Removed.
3735         (struct variable) Remove p.srt member.
3736
3737 Sun Feb 29 23:22:45 2004  Ben Pfaff  <blp@gnu.org>
3738
3739         Get rid of the old, crappy heap structure and replace it by a new,
3740         shiny, C++ STL-like heap structure.
3741         
3742         * Makefile.am: (pspp_SOURCES) Remove heap.c, heap.h.
3743
3744         * algorithm.c: (push_heap) New function.
3745         (heapify) Ditto.
3746         (pop_heap) Ditto.
3747         (make_heap) Ditto.
3748         (sort_heap) Ditto.
3749         (is_heap) Ditto.
3750         
3751         * heap.c: Removed.
3752
3753         * heap.h: Removed.
3754
3755 Sun Feb 29 23:21:53 2004  Ben Pfaff  <blp@gnu.org>
3756
3757         Increase warning level.
3758         
3759         * Makefile.am: (AM_CFLAGS) Remove -Wnouninitialized.
3760
3761 Sat Feb 21 17:38:58 WST 2004 John Darrington <john@darrington.wattle.id.au>
3762
3763         * main.c: Added a signal handler for SIGSEGV requesting a bug report.
3764          
3765 Fri Feb 20 23:22:14 2004  Ben Pfaff  <blp@gnu.org>
3766
3767         * dictionary.c: (dict_create_var) Fix root cause of bug worked
3768         around by previous change log entry.
3769         
3770         * compute.c: (lvalue_finalize) Remove workaround from previous
3771         change log entry.
3772
3773 Fri Feb 20 14:37:41 WAST 2004 John Darrington <john@darrington.wattle.id.au>
3774
3775         * compute.c: Fixed a bug where the Format was not getting set for 
3776           computed variables (thus causing a crash when SAVEing).
3777
3778         * Added a test to stop this bug ever coming back
3779
3780 Wed Feb 18 22:21:35 2004  Ben Pfaff  <blp@gnu.org>
3781
3782         Got rid of approx.h.  In general, replaced all references to
3783         approx_eq() by ==, approx_lt() by <, etc.  Other types of changes
3784         noted below.
3785
3786         * Makefile.am: (pspp_SOURCES) Removed approx.h.
3787
3788         * data-out.c: (try_F) Replaced test for approx_eq(number, 0.0) by
3789         test for mag < EPSILON.
3790
3791         * misc.h: Add definition of EPSILON.
3792
3793 Wed Feb 18 21:32:44 2004  Ben Pfaff  <blp@gnu.org>
3794
3795         * vfm.c: (procedure) Add check to prevent recursive call.
3796
3797 Wed Feb 18 21:48:54 WST 2004 John Darrington <john@darrington.wattle.id.au>
3798
3799         * Moved the declarations relating to values to their own header file
3800           (val.h)
3801
3802         * Added levene.c and levene.h
3803
3804         * vars-atr.c: Changed the signature of compare_values to 
3805         take const * arguments.
3806                 
3807         * t-test.q: Changed the structure of struct t_test_proc 
3808        variables now contain their own group statistics information.
3809        Eventually, t_test_proc might get renamed, because it'd be 
3810        applicable to other commands too.
3811
3812 Mon Feb 16 23:15:51 2004  Ben Pfaff  <blp@gnu.org>
3813
3814         * data-out.c: Clean up.  Changed interface of convert_*() to take
3815         either a `double' or a `const char *' instead of a `const union
3816         value *'.  Update all implementations of those interfaces.
3817         (data_out) Use switch statements instead of a table.
3818         (convert_AHEX) Rewrite.
3819
3820         * format.h: Update comment.
3821
3822 Mon Feb 16 22:14:36 2004  Ben Pfaff  <blp@gnu.org>
3823
3824         * q2c.c: (dump_header) Add an Emacs header line to output files
3825         that makes generated .c files read-only by default, to make it
3826         difficult to accidentally change generated files.
3827
3828 Mon Feb 16 22:12:07 2004  Ben Pfaff  <blp@gnu.org>
3829
3830         * frequencies.q: (compare_freq_numeric_a) Compare by frequency,
3831         not bogus a->v.c <=> b->v.c pointer compare.
3832         (compare_freq_alpha_a) Ditto.
3833         (compare_freq_numeric_d) Ditto.
3834         (compare_freq_alpha_d) Ditto.
3835         
3836 Mon Feb 16 22:00:53 2004  Ben Pfaff  <blp@gnu.org>
3837
3838         Changed data_out() to store string data directly into a `union
3839         value''s s member, not indirectly into c.
3840
3841         * crosstabs.q: (output_pivot_table) Use format_short() instead of
3842         data_out().
3843         (table_value_missing) Ditto.
3844         (float_M_suffix) Ditto.
3845         (format_short) New function.
3846
3847         * data-in.h: (data_in_finite_line) Remove inline definition.
3848
3849         * data-list.c: (destroy_dls_var_spec) New function.
3850         (destroy_dls) Rewrite in terms of destroy_dls_var_spec().
3851         (data_list_source_destroy_source) Avoid cast.
3852         (struct repeating_data_trns) New field `id_value'.  Update
3853         comments.
3854         (cmd_repeating_data) Initialize id_value.  Use new
3855         repeating_data_trns_free() for freeing REPEATING DATA
3856         transformations.
3857         (rpd_parse_record) Rewrite support for record ID to be less bogus.
3858         (repeating_data_trns_free) New function.
3859
3860         * data-out.c: (data_out) Change return type to `void' by replacing
3861         error returns by writing a message into the output buffer.
3862         (convert_A) Read from v->s instead of v->c.
3863         (convert_AHEX) Ditto.
3864
3865         * expr-evl.c: Update comment.
3866         (expr_evaluate) Add assertion in OP_STRING case.
3867
3868         * format.h: (macro MAX_FORMATTED_LEN) New macro.
3869
3870         * list.q: (list_cases) Update for new data_out() semantics.
3871
3872         * print.c: (print_trns_proc) Ditto.
3873
3874         * tab.c: (tab_value) Ditto.
3875         (tab_float) Avoid stupid cast.
3876
3877         * var.h: Update comments.
3878         (macro MAX_STRING) New macro.
3879         (macro MAX_ELEMS_PER_VALUE) New macro.
3880
3881         * vars-atr.c: (compare_values) New function.
3882
3883         * vfm.c: (dump_splits) Update for new data_out() semantics.
3884
3885 Mon Feb 16 21:45:47 2004  Ben Pfaff  <blp@gnu.org>
3886
3887         * crosstabs.q: (struct table_entry) Rename v[] to values[].  All
3888         references updated.
3889         (struct crosstab) Rename v[] to vars[].  All references updated.
3890         (hash_table_entry) Replace the hash algorithm and fix a bug at the
3891         same time, which caused the hash value to depend only on a single
3892         value, not all of the variables' values.
3893         
3894 Mon Feb 16 12:49:53 2004  Ben Pfaff  <blp@gnu.org>
3895
3896         Clean up struct dictionary's value_cnt usage.
3897
3898         * dictionary.c: Add a function comment to each function.
3899         (struct dictionary) Rename value_cnt to next_value_idx, which more
3900         accurately reflects its meaning.  All references updated.
3901         (dict_rename_vars) Add assertion.
3902         (dict_get_value_cnt) Rename dict_get_next_value_idx().  All
3903         references updated.
3904         (dict_get_case_size) New function.
3905
3906         * aggregate.c: (create_sysfile) Use dict_get_case_size().
3907
3908         * get.c: (mtf_read_nonactive_records) Ditto.
3909
3910         * sort.c: (allocate_cases) Ditto.
3911         (write_initial_runs) Ditto.
3912         (merge) Ditto.
3913         (merge_once) Ditto.
3914
3915         * vfm.c: (prepare_for_writing) Ditto.
3916         (setup_lag) Ditto.
3917         (lag_case) Ditto.
3918
3919 Mon Feb 16 00:17:55 2004  Ben Pfaff  <blp@gnu.org>
3920
3921         Make vfm.c slightly less grotesque.
3922
3923         * vfm.c: (filter_var) Removed.
3924         (filter_index) Removed.
3925         (FILTERED macro) Removed.
3926         (exclude_this_case) New function.
3927         (process_active_file_write_case) Use exclude_this_case() instead
3928         of FILTERED and inline tests.
3929         (procedure_write_case) Ditto.
3930         (setup_filter) Removed.
3931         (open_active_file) Don't call setup_filter().
3932         (close_active_file) Call dict_get_filter() instead of checking
3933         filter_var.
3934
3935 Mon Feb 16 00:01:53 2004  Ben Pfaff  <blp@gnu.org>
3936
3937         * var.h: (struct variable) Update comments.
3938
3939 Sun Feb 15 23:14:59 2004  Ben Pfaff  <blp@gnu.org>
3940
3941         New functions dict_create_var_assert(), dict_lookup_var_assert().
3942         Converted several dict_*_var()/assert pairs into a single
3943         dict_*_var_assert().
3944
3945         * dictionary.c: (dict_create_var_assert) New function.
3946         (dict_lookup_var_assert) New function.
3947
3948 Sun Feb 15 23:06:08 2004  Ben Pfaff  <blp@gnu.org>
3949
3950         Got rid of "struct long_vec", envector(), devector(), etc.  Added
3951         two members `init', `reinit' to struct variable as a substitute.
3952         
3953         * Makefile.am: (pspp_SOURCES) Removed cases.c, cases.h.
3954         
3955         * cases.c: Removed.
3956
3957         * cases.h: Removed.
3958
3959         * aggregate.c: (parse_aggregate_functions) destvar doesn't need
3960         init.
3961
3962         * autorecode.c: (cmd_autorecode) destvars don't need init.
3963
3964         * compute.c: (lvalue_finalize) Set reinit.
3965
3966         * data-list.c: (fixed_parse_compatible) Don't need init usually.
3967         (dump_fmt_list) Ditto.
3968         (parse_free) Ditto.
3969
3970         * descript.q: (run_z_pass) Don't need init for z-scores.
3971
3972         * dictionary.c: (dict_create_var) Initialize `init', `reinit'
3973         members.
3974         (dict_clone_var) Copy `reinit' member, initialize `init' member.
3975
3976         * glob.c: (init_glob) Remove vec_init() calls.
3977
3978         * inpt-pgm.c: (cmd_end_input_program) Use `reinit', not `left'.
3979         
3980         * loop.c: (internal_cmd_loop) Don't need to call envector().
3981
3982         * numeric.c: (cmd_numeric) Ditto.
3983         (cmd_string) Ditto.
3984         (cmd_leave) Ditto.  Set `init', `reinit' members.
3985
3986         * recode.c: (cmd_recode) Don't need to call envector().
3987
3988         * repeat.c: (internal_cmd_do_repeat) Ditto.
3989
3990         * var.h: (struct variable) Remove `left'.  Add `init', `reinit'.
3991         (force_create_variable) Removed prototype.
3992         (force_dup_variable) Ditto.
3993
3994         * vector.c: (cmd_vector) Don't need to call envector().
3995
3996         * vfm.c: (reinit_sysmis) Removed.
3997         (reinit_blanks) Removed.
3998         (init_zero) Removed.
3999         (init_blanks) Removed.
4000         (process_active_file_write_case) No need to deal with vectors.
4001         Call clear_temp_case().
4002         (vector_initialization) Rewrite to use `init', `reinit'.
4003         (close_active_file) No need to call vec_clear().
4004         (procedure_write_case) Call clear_temp_case().
4005         (clear_temp_case) New function.
4006
4007 Sun Feb 15 20:50:36 2004  Ben Pfaff  <blp@gnu.org>
4008
4009         * pfm-write.c: (bufwrite) Get rid of nasty cast that also invoked
4010         undefined behavior.
4011
4012 Thu Feb 12 23:35:15 2004  Ben Pfaff  <blp@gnu.org>
4013
4014         Add auxiliary argument to procedure() interface.  Associated small
4015         clean-ups of vfm interface.
4016         
4017         * Updated every caller of procedure() and process_active_file() to
4018         reflect modified interface.  Simple, ordinary changes not listed
4019         otherwise below.
4020
4021         * Updated every function that implements struct case_stream's
4022         `read' function to take a write_case_func and a write_case_data.
4023         Also updated every caller of write_case() to instead call them
4024         through these arguments.  In some cases this meant that the extra
4025         args had to be threaded through a couple of extra levels.  This
4026         wasn't difficult or interesting so the details won't be given.
4027
4028         * data-list.c: (struct repeating_data_trns) Add members
4029         `write_case', `wc_data' as kluge.
4030         (read_one_set_of_repetitions) Rename repeating_data_trns_proc and
4031         make non-static.
4032         (repeating_data_set_write_case) New function.
4033
4034         * data-list.h: New file to declare repeating_data_trns_proc() and
4035         repeating_data_set_write_case().
4036
4037         * inpt-pgm.c: (input_program_source_read) Call
4038         repeating_data_set_write_case() for all the REPEATING DATA
4039         transformations, so that they know where to send their cases.
4040         It's a big kluge.  Also kluge in END CASE.
4041         (end_case_trns_proc) Never called anymore, but we still need it,
4042         so just assert(0).
4043
4044         * sort.c: (read_sort_output) Update to match struct case_stream
4045         `read' member.
4046
4047         * vfm.c: (struct write_case_data) New structure.
4048         (proc_func) Removed.
4049         (virt_proc_func) Removed.
4050         (begin_func) Removed.
4051         (virt_begin_func) Removed.
4052         (end_func) Removed.
4053         (write_case) Removed.
4054         (procedure) Added an auxiliary parameter to each function pointer
4055         argument's prototype.  Added an auxiliary data parameter.
4056         Rewrote.
4057         (process_active_file) Ditto.
4058         (process_active_file_write_case) Pass aux data along.
4059         (close_active_file) Ditto.
4060         (procedure_write_case) Ditto.
4061         (SPLIT_FILE_procfunc) Ditto.
4062
4063         * vfm.h: (typedef write_case_data) New.
4064         (typedef write_case_func) New.
4065         (struct case_stream) Add parameters to `read' member prototype.
4066         
4067 Thu Feb 12 19:24:53 WST 2004 John Darrington <john@darrington.wattle.id.au>
4068
4069         * t-test.q:  Added calculations for independent samples. (But no Levene
4070         test yet!)
4071
4072         * Makefile.am: Moved q_sources_c into own variable 
4073
4074 Wed Feb 11 23:56:51 2004  Ben Pfaff  <blp@gnu.org>
4075
4076         Miscellaneous cleanups.
4077         
4078         * Change unused to UNUSED in many source files to reflect modified
4079         pref.h.  Change use of __WIN32__, __MSDOS, __DJGPP__,
4080         __CYGWIN32__, __unix__, and unix not to assume that they're
4081         defined to a nonzero value.  Change use of __attribute__ to use
4082         NO_RETURN or PRINTF_FORMAT instead.
4083         
4084         * alloc.h: Move definitions for local_alloc(), local_free() here
4085         from ../pref.h.orig and simplify.
4086
4087         * expr-evl.c: Instead of working differently based on PAGED_STACK,
4088         use a pool allocator unconditionally.
4089         (CHECK_STRING_SPACE) Removed.
4090         (ALLOC_STRING_SPACE) Removed.
4091         (expr_evaluate) Use e->pool instead of CHECK_STRING_SPACE and
4092         ALLOC_STRING_SPACE.
4093
4094         * expr-opt.c: (dump_expression) Allocate string pool.
4095
4096         * expr-prs.c: (expr_free) Free string pool.
4097
4098         * pool.c: (pool_destroy) This pool must be removed from its
4099         parent's list of gizmos, not from its own.  Use free_all_gizmos().
4100         (pool_clear) New function.
4101         (free_all_gizmos) New function.
4102         (pool_alloc) Use space in empty block after this one if any.
4103         (pool_release) Only empty out blocks, don't actually free() them.
4104
4105         * print.c: Get rid of PAGED_STACK special case by always
4106         dynamically allocating line buffers.
4107         (struct print_trns) Always include the `line' member.
4108         (internal_cmd_print) Always initialize the `line' member.
4109         (alloc_line) Always allocate memory for `line'.
4110         (print_trns_proc) Always initialize buf from `line' member.
4111         (print_trns_free) Always free `line' memory.
4112
4113         * sort.c: (allocate_file_handles) Special-case MS-DOS for mkdir()
4114         call.
4115         
4116 Wed Feb 11 20:33:18 2004  Ben Pfaff  <blp@gnu.org>
4117
4118         * flip.c: Fixed crash from FLIP when a numeric variable is
4119           specified on NEWNAMES and a large value is used, and a couple of
4120           other minor bugs besides.
4121           (struct varname) Make name a 9-character fixed-size array
4122           instead of a 1-character variable size array.
4123           (make_new_var) Allow digits in variable names.
4124           (flip_stream_write) Limit numeric values to 8 characters and
4125           format system missing and very large and small values more
4126           appropriately.
4127
4128 Thu Feb  5 13:19:06 WAST 2004 John Darrington <john@darrington.wattle.id.au>
4129
4130         * command.c: Fixed test on command return status for the correct 
4131           value,  which had been causing a crash under certain invalid input.
4132
4133 Wed Feb  4 15:34:11 WST 2004 John Darrington <john@darrington.wattle.id.au>
4134
4135         * t-test.q: Added calculations for the one sample variant of the T-TEST
4136
4137 Tue Feb  3 20:09:54 2004  Ben Pfaff  <blp@gnu.org>
4138
4139         * tab.c: (render_strip) Fix bug that sometimes caused joined text
4140           in joined cells to be rendered outside box boundaries.
4141
4142 Tue Feb  3 18:56:45 WST 2004 John Darrington <john@darrington.wattle.id.au>
4143
4144         * random.c (rng_create): Fixed seeding so that it gets reseeded after
4145         SET seed=xx has been called.
4146
4147 Mon Jan 19 14:08:09 2004  Ben Pfaff  <blp@gnu.org> 
4148
4149         * random.c (rng_get_double): Fix always-returning-zero bug in my
4150         preferred way, and at the same time make sure rounding doesn't
4151         bite us.
4152
4153 Thu Jan  1 23:16:41 2004  Ben Pfaff  <blp@gnu.org>
4154
4155         * html.c: (change_attributes) Dead code, removed.
4156         (escape_string) Eliminate code to call change_attributes() that
4157         never actually called it.
4158         (output_tab_table) Get rid of dependence on tab_hit
4159         and struct tab_joined_cell's hit member, which are abominations.
4160
4161         * tab.c: (tab_output_text) Don't call
4162         d->class->text_set_font_by_name if it's a null pointer.
4163         (macro UNROLL_LOOP) Eliminate.
4164         (macro UNROLL_3_LOOPS) Eliminate.
4165         (tabi_render) Rewrite not to use the above macros.
4166
4167 Thu Jan  1 23:09:07 2004  Ben Pfaff  <blp@gnu.org>
4168
4169         Start working on a new output driver system, one that doesn't suck
4170         so much, by adding a "device-independent" output driver.  The idea
4171         is to write out only a single output stream, then use separate
4172         processes to translate them into whatever formats we want.  This
4173         is similar to how "groff" works with its various output drivers
4174         (grops, grotty, grodvi, ...).
4175         
4176         * Makefile.am: (pspp_SOURCES) Add devind.c, devind.h.
4177
4178         * list.q: (write_all_headers) Stub out devind class.
4179         (clean_up) Ditto.
4180         (determine_layout) Ditto.
4181         (list_cases) Ditto.
4182
4183         * output.c: (outp_init) Add devind class.
4184
4185         * devind.c: New file.
4186
4187         * devind.h: New file.
4188
4189 Thu Jan  1 23:08:14 2004  Ben Pfaff  <blp@gnu.org>
4190
4191         * frequencies.q: (hash_value_alpha) Fixed up the previous change
4192         to use the proper string length.
4193
4194 Wed Dec 31 16:27:33 WAST 2003 John Darrington <john@darrington.wattle.id.au>
4195
4196         * Fixed bug where FREQ would crash on alpha values
4197
4198 Tue Dec 30 22:42:57 2003  Ben Pfaff  <blp@gnu.org>
4199
4200         * Removed bletcherous alloca() workarounds for AIX from top of
4201         many files.  AIX can use the alternative alloca() implementation
4202         instead.
4203
4204 Tue Dec 30 22:35:16 2003  Ben Pfaff  <blp@gnu.org>
4205
4206         * ascii.c: (ascii_option) Fix implementation of headers option.
4207
4208 Tue Dec 30 22:32:53 2003  Ben Pfaff  <blp@gnu.org>
4209
4210         * ascii.c: Add a "squeeze" option to the ASCII driver to squeeze
4211         multiple blank lines into one.
4212         (struct ascii_driver_ext) Add squeeze_blank_lines option.
4213         (ascii_preopen_driver) Initialize squeeze_blank_lines.
4214         (static var option_tab) Add squeeze entry.
4215         (ascii_option) Set squeeze_blank_lines.
4216         (output_lines) Implement squeezing blank lines.
4217
4218 Wed Dec 31 07:19:46 WST 2003 John Darrington <john@darrington.wattle.id.au>
4219
4220         * Removed redundant code from output.h
4221
4222 Sat Dec 27 22:17:52 2003  Ben Pfaff  <blp@gnu.org>
4223
4224         Dictionary classes: each variable is "ordinary", "system", or
4225         "scratch".
4226
4227         * var.h: (enum dict_class) New enum.
4228
4229         * vars-prs.c: (dict_class_from_id) New function.
4230         (dict_class_to_name) New function.
4231
4232 Sat Dec 27 22:16:06 2003  Ben Pfaff  <blp@gnu.org>
4233
4234         * var.h: (struct freq_tab_set) Removed (not used).
4235
4236 Sat Dec 27 22:15:21 2003  Ben Pfaff  <blp@gnu.org>
4237
4238         * value-labels.c: (val_labs_destroy) vls needs to be freed too.
4239
4240 Sat Dec 27 22:10:49 2003  Ben Pfaff  <blp@gnu.org>
4241
4242         * stats.c: (hypercube) Rename pow4().  All references updated.
4243
4244 Sat Dec 27 22:05:49 2003  Ben Pfaff  <blp@gnu.org>
4245
4246         * rename-vars.c: (cmd_rename_variables) Rewritten.
4247         (compare_name) Removed.
4248
4249 Sat Dec 27 22:03:51 2003  Ben Pfaff  <blp@gnu.org>
4250
4251         var_set feature, and code taking advantage of it.
4252         
4253         * crosstabs.q: (static var var_dict) Removed.
4254         (static var variables) New variable.
4255         (static var variables_cnt) New variable.
4256         (cmd_crosstabs) Free variables instead of var_dict.
4257         (internal_cmd_crosstabs) Initialize and use variables,
4258         variables_cnt instead of var_dict.
4259         (free_var_dict) Removed.
4260         (crs_custom_tables) Use var_set instead of a copied dictionary.
4261         (crs_custom_variables) Set up variables, variables_cnt instead of
4262         var_dict.
4263         [DEBUGGING] (debug_print) Ditto.
4264
4265         * means.q: (mns_custom_tables) Use var_set instead of a copied
4266         dictionary.
4267
4268         * vars-prs.c: (parse_vs_variable) New function.
4269         (parse_dict_variable) Rewritten.
4270         (parse_variable) Rewritten.
4271         (parse_variables) Renamed parse_var_set_vars(), rewritten.
4272         (parse_variables) New function in terms of parse_var_set_vars().
4273         Now requires its first argument to be non-null.  All references
4274         that passed a null pointer updated to pass default_dict instead.
4275         (macro id_dict) Removed.
4276         (parse_DATA_LIST_vars) Add assertions.
4277         (parse_mixed_vars) Ditto.
4278         (struct var_set) New structure.
4279         (var_set_get_cnt) New function.
4280         (var_set_get_var) New function.
4281         (var_set_lookup_var) New function.
4282         (var_set_destroy) New function.
4283         (dict_var_set_get_cnt) New function.
4284         (dict_var_set_get_var) New function.
4285         (dict_var_set_lookup_var) New function.
4286         (dict_var_set_destroy) New function.
4287         (var_set_create_from_dict) New function.
4288         (struct array_var_set) New structure.
4289         (array_var_set_get_cnt) New function.
4290         (array_var_set_get_var) New function.
4291         (array_var_set_lookup_var) New function.
4292         (array_var_set_destroy) New function.
4293         (var_set_create_from_array) New function.
4294
4295         * q2c.c: (dump_parser) Use parse_variables(default_dict, ...)
4296         instead of parse_variables(NULL, ...) in output code.
4297
4298 Sat Dec 27 21:38:53 2003  Ben Pfaff  <blp@gnu.org>
4299
4300         Change inp_init from a 2-bit vector to an ordinary array.
4301         Initialize it all in cmd_end_input_program() instead of in
4302         create_variable().
4303
4304         * inpt-pgm.c: (enum value_init_type) New enum.
4305         (global var inp_init) Change to `enum value_init_type *', make
4306         static.
4307         (inp_init_size) Removed.
4308         (inp_nval) Change to `size_t', make static.
4309         (cmd_input_program) Don't initialize inp_init or inp_init_size.
4310         (cmd_end_input_program) Initialize inp_init, inp_nval.
4311         (init_case) Rewrite.
4312         (clear_case) Rewrite.
4313
4314         * inpt-pgm.h: Removed.
4315
4316 Sat Dec 27 21:36:38 2003  Ben Pfaff  <blp@gnu.org>
4317
4318         * hash.c: (hsh_hash_bytes) Use Fowler-Noll-Vo hash instead of
4319         Colin Plumb hash.  It is simpler and should better resist
4320         collisions.
4321         (hsh_hash_string) Ditto.
4322
4323 Sat Dec 27 21:34:57 2003  Ben Pfaff  <blp@gnu.org>
4324
4325         * get.c: (export_write_case_func) Remove debug printing code.
4326
4327 Sat Dec 27 21:11:09 2003  Ben Pfaff  <blp@gnu.org>
4328
4329         * get.c: (cmd_save_internal) Rename parameter.  Use &t->h instead
4330         of cast.
4331         (save_write_case_func) Use &trns->h instead of cast.
4332         (cmd_export) Use &t->h instead of cast.
4333
4334 Sat Dec 27 20:57:42 2003  Ben Pfaff  <blp@gnu.org>
4335
4336         Moved vectors into the dictionary.
4337
4338         * var.h: (struct vector) Moved here from vector.h.  `index' member
4339         renamed `idx', `v' renamed `var', `nv' renamed `cnt'.  All
4340         references updated.
4341         
4342         * vector.h: Removed.
4343
4344         * vector.c: (global var vec) Removed.
4345         (global var nvec) Removed.
4346         (cmd_vector) Rewritten.
4347         (find_vector) Removed.
4348
4349         * dictionary.c: (dict_create_vector) New function.
4350         (dict_get_vector) New function, replaces reading global vec[]
4351         array.
4352         (dict_get_vector_cnt) New function, replaces reading global nvec
4353         variable.
4354         (dict_lookup_vector) New function, replaces find_vector().
4355         (dict_clear_vectors) New function.
4356
4357 Sat Dec 27 20:54:01 2003  Ben Pfaff  <blp@gnu.org>
4358
4359         Start to move away from `struct variable' p `union' member to void
4360         * aux member.
4361
4362         * var.h: (struct variable) Add `aux' member.
4363
4364 Sat Dec 27 20:36:25 2003  Ben Pfaff  <blp@gnu.org>
4365
4366         Get rid of struct variable `foo' member.
4367
4368         * frequencies.q: (internal_cmd_frequencies) Use p.frq.used instead
4369         of foo.
4370         (frq_custom_variables) Ditto.
4371         (frq_custom_grouped) Ditto.
4372
4373         * get.c: (struct save_trns) Change `var' member from `int *' to
4374         `struct variable **'.
4375         (cmd_save_internal) Use aux instead of foo.
4376         (save_trns_proc) Use revised `var' member.
4377         (static var mtf_seq_no) Renamed mtf_seq_num.
4378         (static var mtf_seq_nums) New static var.
4379         (cmd_match_files) Initialize mtf_seq_nums.
4380         (mtf_free) Free mtf_seq_nums.
4381         (mtf_processing) Use mtf_seq_nums instead of foo.
4382         (mtf_merge_dictionary) No need to initialize mv->foo.
4383         (cmd_export) Use aux instead of foo.  Use revised `var' member.
4384         (mns_custom_tables) Don't use foo to check for duplicates, that's
4385         what PV_NO_DUPLICATE is for.
4386
4387         * var.h: (struct variable) Remove `foo' member.
4388         (struct frequencies_proc) New member.
4389         
4390 Sat Dec 27 19:46:13 2003  Ben Pfaff  <blp@gnu.org>
4391
4392         Clean up COMPUTE and IF.
4393
4394         * compute.c: More or less rewrite the darn thing.
4395         (struct compute_trns) Rename and reorder and add and delete
4396         members.
4397         (cmd_compute) Rewrite.
4398         (compute_num) Make conditional on test expression.  Now used for
4399         both COMPUTE and IF.
4400         (compute_num_vec) Ditto.
4401         (compute_str) Ditto.
4402         (compute_str_vec) Ditto.
4403         (cmd_if) Rewrite.
4404         (if_num) Removed.
4405         (if_num_vec) Removed.
4406         (if_str) Removed.
4407         (if_str_vec) Removed.
4408         (parse_target_expression) Renamed parse_rvalue_expression(),
4409         rewritten.
4410         (new_trns) Renamed compute_trns_create(), rewritten.
4411         (delete_trns) Removed.
4412         (free_trns) Renamed compute_trns_free(), rewritten.
4413         (struct lvalue) New structure.
4414         (parse_var_or_vec) Renamed lvalue_parse(), rewritten.
4415         (lvalue_get_type) New function.
4416         (lvalue_is_vector) New function.
4417         (lvalue_finalize) New function.
4418         (lvalue_destroy) New function.
4419         
4420 Sat Dec 27 19:44:14 2003  Ben Pfaff  <blp@gnu.org>
4421
4422         * command.def: Disallow MODIFY VARS in input mode, so that
4423         variables can't get dropped and confuse cmd_end_input_program()'s
4424         attempt to fill inp_init[].
4425         
4426         * modify-vars.c: (static var forward_positional_ordering) New
4427         variable.
4428         (struct var_modification) Entirely changed.
4429         (rearrange_dict) Interface changed, rewritten.
4430         (cmd_modify_vars) Deal with modified struct var_modification, much
4431         rewritten.
4432         (struct var_renaming) New structure.
4433         (compare_var_renaming_by_new_name) New function.
4434         (validate_var_modification) New function.
4435
4436         * var.h: (struct modify_vars_proc) Removed.
4437         (struct variable) Removed member p.mfv.
4438
4439 Sat Dec 27 19:40:26 2003  Ben Pfaff  <blp@gnu.org>
4440
4441         Make EVALUATE a valid command whether we're debugging or not, so
4442         that `make check' can succeed regardless of whether debugging is
4443         turned on.
4444         
4445         * command.def: [GLOBAL_DEBUGGING] Drop the #if.
4446
4447         * compute.c: [GLOBAL_DEBUGGING] (cmd_evaluate) Drop the #if.
4448
4449 Sat Dec 27 19:34:40 2003  Ben Pfaff  <blp@gnu.org>
4450
4451         * apply-dict.c: (cmd_apply_dictionary) Replace a ghastly switch
4452         statement by a simple if test.
4453
4454         * dfm.c: (dfm_get_record) Add assertion.
4455
4456 Sat Dec 27 17:51:26 2003  Ben Pfaff  <blp@gnu.org>
4457
4458         For each file x.c, move #include "x.h" to the very top of the
4459         include list, to catch x.h failing to include the proper headers.
4460
4461 Sat Dec 27 17:50:19 2003  Ben Pfaff  <blp@gnu.org>
4462
4463         * algorithm.c: (find) New function.
4464         (remove_equal) New function.
4465         (set_difference) New function.
4466         (adjacent_find_equal) New function.
4467         [TEST_UNIQUE] Removed test case.
4468         (copy_if) Find end test.
4469
4470 Sat Dec 27 17:42:45 2003  Ben Pfaff  <blp@gnu.org>
4471
4472         * dictionary.c: (dict_get_case_weight) New convenience function.
4473
4474         * aggregate.c: (accumulate_aggregate_info) Use
4475         dict_get_case_weight().
4476
4477         * frequencies.q: (calc_general) Ditto.
4478         (calc_integer) Ditto.
4479         (calc) Ditto.
4480
4481         * t-test.q: (groups_calc) Ditto.
4482         (z_calc) Ditto.
4483
4484 Sat Dec 27 17:29:45 2003  Ben Pfaff  <blp@gnu.org>
4485
4486         * glob.c: (global var default_dict) Change from `struct
4487         dictionary' to `struct dictionary *'.  All references changed.
4488         (init_glob) Initialize default_dict with dict_create().
4489
4490 Sat Dec 27 17:06:06 2003  Ben Pfaff  <blp@gnu.org>
4491
4492         struct dictionary now made opaque.  All related functions:
4493
4494         * get.c: (rename_variables) Removed.
4495         (dict_delete_run) Removed.
4496         
4497         * temporary.c: (copy_variable) Removed.
4498         (new_dictionary) Removed.
4499         (save_dictionary) Removed.
4500         (restore_dictionary) Removed.
4501         (free_dictionary) Removed.
4502
4503         * vars-atr.c: (clear_default_dict) Removed.
4504         (find_variable) Removed.
4505         (find_dict_variable) Removed.
4506         (create_variable) Removed.
4507         (delete_variable) Removed.
4508         (common_init_stuff) Removed.
4509         (init_variable) Removed.  Updating of inp_init moved into
4510         cmd_end_input_program().
4511         (replace_variable) Removed.
4512         (rename_variable) Removed.
4513         (clear_variable) Removed.
4514         (dup_variable) Removed.
4515
4516         * vars-prs.c: (is_varname) Removed.
4517         (is_dict_varname) Removed.
4518         (fill_all_vars) Removed.
4519
4520         * vector.c: (find_vector) Removed.
4521
4522         * weight.c: (stop_weighting) Removed.
4523
4524         * dictionary.c: New file.
4525         (dict_create) New, replaces new_dictionary().
4526         (dict_clone) New, replaces save_dictionary() and
4527         restore_dictionary().
4528         (dict_clear) New, replaces clear_default_dict().
4529         (dict_destroy) New, replaces free_dictionary().
4530         (dict_get_var_cnt) New function, replaces references to
4531         dict->nvar.
4532         (dict_get_var) New function, replaces references to dict->var[i].
4533         (dict_get_vars) New function, replaces fill_all_vars().
4534         (dict_create_var) New, replaces create_variable().  Interface
4535         drops `type' parameter, using a zero `width' to designate numeric.
4536         (dict_clone_var) New, replaces dup_variable().
4537         (dict_rename_var) New, replaces rename_variable().
4538         (dict_lookup_var) New, replaces find_variable(),
4539         find_dict_variable(), is_varname().
4540         (dict_contains_var) New function.
4541         (compare_variable_dblptrs) New function.
4542         (dict_delete_var) New function, replaces clear_variable().
4543         (dict_delete_vars) New function, replaces dict_delete_run().
4544         (dict_reorder_vars) New function.
4545         (dict_rename_vars) New function, replaces rename_variables().
4546         (dict_get_weight) New function, replaces reading dict->weight_var.
4547         (dict_set_weight) New function, replaces writing dict->weight_var
4548         or calling stop_weight(dict).
4549         (dict_get_filter) New function, replaces reading dict->filter_var.
4550         (dict_set_filter) New function, replaces writing dict->filter_var.
4551         (dict_get_case_limit) New function, replaces reading dict->N.
4552         (dict_set_case_limit) New function, replaces writing dict->N.
4553         (dict_get_value_cnt) New function, replaces reading dict->nval.
4554         (dict_compact_values) New function, replaces a loop that was
4555         replicated in several places.
4556         (dict_get_split_vars) New function, replaces reading dict->splits.
4557         (dict_get_split_cnt) New function, replaces reading
4558         dict->n_splits.
4559         (dict_set_split_vars) New function, replaces writing dict->splits.
4560         (dict_get_label) New function, replaces reading dict->label.
4561         (dict_set_label) New function, replaces writing dict->label.
4562         (dict_get_documents) New function, replaces reading
4563         dict->documents.
4564         (dict_set_documents) New function, replaces writing
4565         dict->documents.
4566         
4567         All references to above functions updated.
4568         
4569         * aggregate.c: (cmd_aggregate) Copy file label and documents from
4570         old dictionary to new by hand, because dict_create() can't do it
4571         itself.  Use dict_set_documents(), dict_set_split_vars().
4572
4573         * temporary.c: (cancel_temporary) Also set temp_dict to NULL after
4574         calling dict_destroy().
4575
4576         * data-list.c: (dls_var_spec) Remove `type' member, replace by
4577         `width'.
4578         (fixed_parse_compatible) Some slightly nontrivial changes for
4579         dict_create_var().
4580         (dump_fmt_list) Ditto.
4581         (parse_free) Ditto.
4582
4583         * file-type.c: (create_col_var) Ditto.
4584
4585         * get.c: (cmd_get) Use dict_compact_values() instead of a loop.
4586         (trim_dictionary) Use dict_delete_vars(), dict_reorder_vars().
4587         (rename_variables) Use dict_rename_vars().
4588         (mtf_merge_dictionary) Use dict_get_documents(),
4589         dict_set_documents(), dict_compact_values().
4590
4591         * pfm-read.c: (read_variables) Deal with changes to weighting.
4592
4593         * q2c.c: (dump_parser) Use dict_lookup_var() instead of
4594         is_varname() in output code.
4595
4596         * sfm-read.c: (read_header) Use dict_create(), dict_set_label(),
4597         other dictionary functions.
4598
4599         * title.c: (add_document_line) Use dict_get_documents(),
4600         dict_set_documents().
4601
4602         * vars-atr.c: (discard_variables) Use dict_clear(default_dict),
4603         reset default_handle by hand.  dict_clear() will clear vectors so
4604         there's no need for that by hand.
4605
4606         * vfm.c: (close_active_file) Move call to finish_compaction()
4607         earlier, so that we can do the compaction as a single step using
4608         dict_compact_values().  Use dict_clear_vectors().
4609         (finish_compaction) Use dict_delete_var(), dict_compact_values().
4610                 
4611         Some functions don't have replacements:
4612
4613         * vars-atr.c: (force_create_variable) Removed.  All references
4614         updated to dict_create_var() followed by an assertion.
4615         (force_dup_variable) Removed.  All references updated to
4616         dict_clone_var() followed by an assertion.
4617         
4618         * weight.c: (update_weighting) Removed.  No longer necessary, so
4619         all references removed.
4620
4621 Sat Dec 27 16:43:01 2003  Ben Pfaff  <blp@gnu.org>
4622
4623         Clean up AGGREGATE.
4624         
4625         * aggregate.c: Eliminate separation of weighted and unweighted
4626         case.  It made the code too obscure and I doubt it was actually
4627         faster.  Instead, all code uses the "weighted" code, because
4628         that's a generalization of the "unweighted" code.
4629         (FWEIGHT) Removed.
4630         (FOPTIONS) Ditto.
4631         (parse_aggregate_functions) No need to set FWEIGHT.
4632         (accumulate_aggregate_info) Get rid of FWEIGHT cases.
4633         (dump_aggregate_info) Ditto.
4634         (initialize_aggregate_info) No need for special plain_function
4635         that gets rid of FWEIGHT option.
4636
4637         * aggregate.c: Get rid of approximations.
4638         (accumulate_aggregate_info) Don't use approx_gt(), approx_lt(),
4639         approx_in_range().
4640         (aggregate_single_case) Don't use approx_ne().
4641
4642 Sat Dec 27 16:19:36 2003  Ben Pfaff  <blp@gnu.org>
4643
4644         * ascii.c (ascii_line_width): Dead code, removed.
4645
4646         * postscript.c (ps_line_width): Ditto.
4647
4648         * q2c.c (xrealloc): Ditto.
4649
4650         * count.c (internal_cmd_count): Ditto.
4651
4652         * means.q (validate_dependent_endpoint): Ditto.
4653
4654         * set.q: (cmd_gset) Ditto.
4655
4656         * weight.c: [0] (weight_trns_proc) Ditto.
4657
4658 Sat Dec 27 16:18:16 2003  Ben Pfaff  <blp@gnu.org>
4659
4660         Make the code -Wmissing-prototypes clean.
4661
4662         * Makefile.am (version.c): Add #include "version.h".
4663         
4664         * ascii.c: (ascii_open_global) Make static.
4665         (ascii_close_page) Ditto.
4666         (ascii_font_sizes) Ditto.
4667         (ascii_postopen_driver) Ditto.
4668         (ascii_close_driver) Ditto.
4669         (ascii_option) Ditto.
4670         (ascii_open_page) Ditto.
4671         (ascii_line_horz) Ditto.
4672         (ascii_line_vert) Ditto.
4673         (ascii_line_intersection) Ditto.
4674         (ascii_box) Ditto.
4675         (ascii_polyline_begin) Ditto.
4676         (ascii_polyline_point) Ditto.
4677         (ascii_polyline_end) Ditto.
4678         (ascii_text_set_font_by_name) Ditto.
4679         (ascii_text_set_font_by_position) Ditto.
4680         (ascii_text_set_font_by_family) Ditto.
4681         (ascii_text_get_font_name) Ditto.
4682         (ascii_text_get_font_family) Ditto.
4683         (ascii_text_set_size) Ditto.
4684         (ascii_text_get_size) Ditto.
4685         (ascii_text_metrics) Ditto.
4686         (ascii_text_draw) Ditto.
4687         (ascii_close_page) Ditto.
4688
4689         * cmdline.h: New header for parse_command_line().  Used where
4690         needed.
4691
4692         * command.c: Move prototypes for cmd_*() functions to command.h.
4693
4694         * command.h: Prototypes for cmd_*() functions moved here from
4695         command.c.
4696
4697         * crosstabs.q: (gamma_int) Ditto.
4698
4699         * file-handle.h: Add fh_init_files() prototype.
4700         
4701         * getline.c: (welcome) Ditto.
4702
4703         * glob.h: New header for init_glob().  Used where appropriate.
4704
4705         * hash.c: (comparison_helper) Ditto.
4706
4707         * html.c: (html_open_global) Ditto.
4708         (html_close_global) Ditto.
4709         (html_preopen_driver) Ditto.
4710         (html_postopen_driver) Ditto.
4711         (html_close_driver) Ditto.
4712         (html_option) Ditto.
4713         (html_open_page) Ditto.
4714         (html_close_page) Ditto.
4715         (html_submit) Ditto.
4716
4717         * inpt-pgm.c: (input_program_source_read) Ditto.
4718
4719         * output.c: (find_defn_value) Ditto.
4720         (destroy_list) Ditto.
4721
4722         * pfm-read.c: (read_int) Ditto.
4723
4724         * postscript.c: (ps_open_global) Ditto.
4725         (ps_close_global) Ditto.
4726         (ps_font_sizes) Ditto.
4727         (ps_preopen_driver) Ditto.
4728         (ps_postopen_driver) Ditto.
4729         (ps_close_driver) Ditto.
4730         (ps_option) Ditto.
4731         (ps_open_page) Ditto.
4732         (ps_close_page) Ditto.
4733         (ps_line_horz) Ditto.
4734         (ps_line_vert) Ditto.
4735         (ps_line_intersection) Ditto.
4736         (ps_box) Ditto.
4737         (ps_polyline_begin) Ditto.
4738         (ps_polyline_point) Ditto.
4739         (ps_polyline_end) Ditto.
4740         (ps_text_set_font_by_name) Ditto.
4741         (ps_text_set_font_by_position) Ditto.
4742         (ps_text_set_font_family) Ditto.
4743         (ps_text_get_font_name) Ditto.
4744         (ps_text_get_font_family) Ditto.
4745         (ps_text_set_size) Ditto.
4746         (ps_text_get_size) Ditto.
4747         (ps_text_metrics) Ditto.
4748         (ps_text_draw) Ditto.
4749
4750         * q2c.c: (finish_up) Ditto.
4751         (xmalloc) Ditto.
4752         (xstrdup) Ditto.
4753         (get_buffer) Ditto.
4754         (st_lower) Ditto.
4755         (st_upper) Ditto.
4756         (skip_ws) Ditto.
4757         (get_line) Ditto.
4758         (add_symbol) Ditto.
4759         (find_symbol) Ditto.
4760         (lex_get) Ditto.
4761         (force_id) Ditto.
4762         (force_string) Ditto.
4763         (match_id) Ditto.
4764         (match_token) Ditto.
4765         (skip_token) Ditto.
4766         (parse) Ditto.
4767         (parse_setting) Ditto.
4768         (parse_specifier) Ditto.
4769         (parse_specifiers) Ditto.
4770         (parse_subcommand) Ditto.
4771         (dump_specifier_vars) Ditto.
4772         (is_keyword) Ditto.
4773         (make_identifier) Ditto.
4774         (dump_declarations) Ditto.
4775         (dump_specifier_init) Ditto.
4776         (dump_vars_init) Ditto.
4777         (make_match) Ditto.
4778         (dump_specifier_parse) Ditto.
4779         (dump_subcommand) Ditto.
4780         (dump_parser) Ditto.
4781         (dump_header) Ditto.
4782         (dump_free) Ditto.
4783         (recognize_directive) Ditto.
4784
4785         * recode.c: (string_to_long) Ditto.
4786
4787         * repeat.c: (find_DO_REPEAT_substitution) Ditto.
4788
4789         * repeat.h: New header for perform_DO_REPEAT_substitutions, used
4790         where appropriate.
4791
4792         * sort.c: (sort_stream_read) Ditto.
4793         (sort_stream_mode) Ditto.
4794         
4795 Fri Dec 19 23:35:04 2003  Ben Pfaff  <blp@gnu.org>
4796
4797         * algorithm.c (binary_search): Fix comparison.
4798
4799 Fri Dec 19 23:27:45 2003  Ben Pfaff  <blp@gnu.org>
4800
4801         * algorithm.c: (binary_search) Fix assertion.
4802
4803 Fri Dec 19 21:31:48 2003  Ben Pfaff  <blp@gnu.org>
4804
4805         * sysfile-info.c: (compare_vectors_by_name) Rewrite.
4806
4807 Fri Dec 19 21:30:24 2003  Ben Pfaff  <blp@gnu.org>
4808
4809         * sort.c: (compare_case_lists) Rewrite.
4810
4811 Fri Dec 19 16:44:22 2003  Ben Pfaff  <blp@gnu.org>
4812
4813         * quicksort.c: Removed (not used).
4814
4815         * quicksort.h: Removed (not used).
4816
4817         * sort.c: Removed blp_quicksort() prototype.
4818
4819 Fri Dec 19 16:42:13 2003  Ben Pfaff  <blp@gnu.org>
4820
4821         * postscript.c: (int_2_compare) Rewrite.
4822         (compare_line) Rewrite.
4823
4824 Fri Dec 19 16:38:35 2003  Ben Pfaff  <blp@gnu.org>
4825
4826         * matrix-data.c (compare_factors) Use lexicographical_compare()
4827         algorithm.
4828         (compare_doubles) New function.
4829         
4830         * algorithm.c: (lexicographical_compare) New algorithm.
4831
4832 Fri Dec 19 16:23:45 2003  Ben Pfaff  <blp@gnu.org>
4833
4834         * matrix-data.c (compare_variables_by_mxd_vartype): Rewrite.
4835
4836 Fri Dec 19 15:54:45 2003  Ben Pfaff  <blp@gnu.org>
4837
4838         * expr-prs.c: (cmp_func) Removed.
4839         (parse_function) Use binary_search() algorithm.
4840         (compare_functions) New function.
4841         (init_func_tab) Use sort() algorithm.
4842
4843         * algorithm.c: (binary_search) New algorithm.
4844
4845 Fri Dec 19 15:50:45 2003  Ben Pfaff  <blp@gnu.org>
4846
4847         * descript.q: (display) Use sort() algorithm instead of qsort().
4848         (compare_func) Removed.
4849         (descriptives_compare_variables) New function.
4850
4851 Fri Dec 19 15:08:38 2003  Ben Pfaff  <blp@gnu.org>
4852
4853         Get rid of AVL trees.  Hashes are more appropriate for everything
4854         PSPP does.
4855
4856         * Makefile.am: (pspp_SOURCES) Remove avl.c, avl.h.
4857         
4858         * avl.c: Removed.
4859
4860         * avl.h: Removed.
4861
4862 Fri Dec 19 14:33:31 2003  Ben Pfaff  <blp@gnu.org>
4863
4864         Much code can be clarified by using C++ STL-like algorithms.  Not
4865         all uses of these algorithms are listed below, only the ones where
4866         the change to an algorithm was the only change of interest.
4867         
4868         * Makefile.am: (pspp_SOURCES) Add algorithm.c, algorithm.h.
4869         
4870         * algorithm.c: New file.
4871
4872         * algorithm.h: New file.
4873
4874         * modify-vars.c: (static var forward) Removed.
4875         (static var positional) Removed.
4876         (compare_variables) Removed.
4877         (struct ordering) New.
4878         (cmd_modify_vars) Use sort() algorithm.
4879         (compare_variables_given_ordering) New function.
4880         (rearrange_dict) Use sort() algorithm.
4881
4882         * sysfile-info.c: (cmd_display) Use sort() algorithm.
4883         (cmp_var_by_name) Removed.
4884
4885 Fri Dec 19 14:26:17 2003  Ben Pfaff  <blp@gnu.org>
4886
4887         Make file handles use a hash table.
4888         
4889         * file-handle.q: (files) Change to hash table, make static.
4890         (cmd_file_handle) Use hash table functions.
4891         (fh_get_handle_by_filename) Ditto.
4892         (fh_get_handle_by_name) Ditto.
4893         (hash_file_handle) New function.
4894         (cmp_file_handle) Rewrite.
4895         (fh_init_files) Use hash table functions.
4896
4897 Fri Dec 19 14:24:38 2003  Ben Pfaff  <blp@gnu.org>
4898
4899         Clean up FREQUENCIES.
4900         
4901         * Makefile.am: (pspp_SOURCES) Remove frequencies.g.
4902
4903         * frequencies.q: Remove a lot of old #if'd out code at the end.
4904         (internal_cmd_frequencies) Use calc() instead of calc_no_weight()
4905         or calc_weight().  Initialize percentile_values.
4906         (calc) New function based on calc_weight() from frequencies.g.
4907         (precalc) Use hash functions.
4908         (static var comparison_func) Removed.
4909         (static var comparison_param) Removed.
4910         (comparison_helper) Removed.
4911         (get_freq_comparator) New function.
4912         (not_missing) New function.
4913         (add_freq) Removed.
4914         (postprocess_freq_tab) Use hash table functions, algorithms,
4915         get_freq_comparator().  Rewrite.
4916         (cleanup_freq_tab) Rephrase.
4917         (add_percentile) Clean up spacing.
4918         (hash_value_numeric) New function.
4919         (hash_value_alpha) New function.
4920         (compare_value_numeric_a) Rewrite.
4921         (compare_value_alpha_a) Rewrite.
4922         (compare_value_numeric_d) Rewrite.
4923         (compare_value_alpha_d) Rewrite.
4924         (compare_freq_numeric_a) Rewrite.
4925         (compare_freq_alpha_a) Rewrite.
4926         (compare_freq_numeric_d) Rewrite.
4927         (compare_freq_alpha_d) Rewrite.
4928         (calc_stats) Clean up mode, percentiles, max.
4929         (dump_statistics) Clean up spacing.
4930         
4931         * frequencies.g: Removed.
4932
4933         * var.h: (struct freq_tab) Change `data' to hash table.
4934
4935 Fri Dec 19 14:15:46 2003  Ben Pfaff  <blp@gnu.org>
4936
4937         * file-handle.h: Remove declaration of global variable `files',
4938         which wasn't used anywhere.
4939
4940         * postscript.c: (add_encoding) Remove superfluous cast.
4941         (line) Ditto.
4942
4943         * sfm-read.c: [linux] (bswap_int32) Drop ntohl() non-portable
4944         version.
4945
4946         * temporary.c: [0] (display_tree) Removed.
4947
4948 Fri Dec 19 14:13:04 2003  Ben Pfaff  <blp@gnu.org>
4949
4950         Implement a new random number generator based on the alleged RC4
4951         algorithm.
4952
4953         * expr-evl.c: (expr_evaluate) Use rng_get_double_normal() instead
4954         of rand_normal().
4955
4956         * random.c: [!HAVE_GOOD_RANDOM] (real_rand) Removed.
4957         [!HAVE_GOOD_RANDOM] (real_srand) Removed.
4958         (macro k) Removed.
4959         (static var V[]) Removed.
4960         (static var Y) Removed.
4961         (static var X2) Removed.
4962         (setup_randomize) Removed.
4963         (shuffle) Removed.
4964         (rand_uniform) Removed.
4965         (rand_normal) Removed.
4966         (struct rng) New structure.
4967         (rng_create) New function.
4968         (rng_destroy) New function.
4969         (swap_byte) New static function.
4970         (rng_seed) New function.
4971         (rng_get_bytes) New function.
4972         (rng_get_int) New function.
4973         (rng_get_unsigned) New function.
4974         (rng_get_double) New function.
4975         (rng_get_double_normal) New function.
4976         (pspp_rng) New function.
4977
4978         * random.h: Sync up to random.c.
4979
4980         * sample.c: (struct sample_trns) Make `frac' unsigned and a
4981         fraction of UINT_MAX, not 65536.
4982         (cmd_sample) Use rng_get_unsigned(), rng_get_double(), UINT_MAX
4983         fraction.
4984
4985         * vfm.c: (open_active_file) No need to call setup_randomize() any
4986         longer.
4987
4988 Fri Dec 19 12:05:56 2003  Ben Pfaff  <blp@gnu.org>
4989
4990         Change dictionary name indexes to use hash tables instead of AVL
4991         trees.
4992
4993         * crosstabs.q: (free_var_dict) Use hash tables.
4994         (crs_custom_tables) Ditto.
4995         (calc_general) Ditto.
4996         (compare_table_entry) Rewrite.
4997         (enum_var_values) Reorder parameters.  All references updated.
4998         Rewrite.
4999
5000         * get.c: (rename_variable) Use hash tables.
5001         (mtf_merge_dictionary) Ditto.
5002
5003         * glob.c: (init_glob) Use hash tables.
5004         (cmp_variable) Removed.
5005
5006         * means.q: (mns_custom_tables) Use hash tables.
5007
5008         * modify-vars.c: (rearrange_dict) Use hash tables.
5009
5010         * rename-vars.c: (cmd_rename_variables) Use hash tables.
5011
5012         * sfm-read.c: (read_header) Use hash tables.
5013         (read_variables) Ditto.
5014
5015         * temporary.c: (new_dictionary) Use hash tables.
5016         (save_dictionary) Ditto.
5017         (restore_dictionary) Ditto.
5018
5019         * var.h: (struct dictionary) Change AVL tree `var_by_name' into
5020         hash table `name_tab'.
5021
5022         * vars-atr.c: [DEBUGGING] (dump_one_var_node) Removed.
5023         [DEBUGGING] (dump_var_tree) Removed.
5024         (find_variable) Use hash tables.
5025         (find_dict_variable) Ditto.
5026         (common_init_stuff) Ditto.
5027         (rename_variable) Ditto.
5028         (clear_variable) Ditto.  Also, remove debug code.
5029         (dup_variable) Use hash tables.
5030
5031         * vars-prs.c: (fill_all_vars) Use hash tables.
5032         (is_dict_varname) Ditto.
5033         (parse_dict_variable) Ditto.
5034         
5035 Fri Dec 19 11:46:23 2003  Ben Pfaff  <blp@gnu.org>
5036
5037         Change value labels to use hash tables instead of AVL trees, and
5038         change value labels into an ADT.
5039
5040         * Makefile.am: (pspp_SOURCES) Add value-labels.c, value-labels.h.
5041         
5042         * value-labels.c: New file.
5043
5044         * value-labels.h: New file.
5045
5046         * apply-dict.c: (cmd_apply_dictionary) Use value label ADT.
5047         Get rid of a stupid use of goto.
5048
5049         * autorecode.c: (compare_alpha_value) Rewrite.
5050         (hash_alpha_value) Ditto.
5051         (compare_numeric_value) Rewrite.
5052         (hash_numeric_value) Ditto.
5053
5054         * frequencies.q: (dump_full) Use value label ADT.
5055
5056         * pfm-read.c: (read_value_label) Use value label ADT.
5057
5058         * pfm-write.c: (write_value_labels) Use value label ADT.
5059
5060         * sfm-read.c: (read_variables) Use value label ADT.
5061         (read_value_labels) Rewrite.
5062
5063         * sfm-write.c: (write_value_labels) Rewrite.
5064
5065         * sysfile-info.c: (cmd_sysfile_info) Use value label ADT.
5066         (display_variables) Ditto.
5067         (describe_variable) Ditto.
5068
5069         * t-test.q: (print_t_groups) Use value label ADT.
5070
5071         * temporary.c: (copy_variable) Use value label ADT.
5072         (free_dictionary) Ditto.
5073
5074         * val-labs.c: (verify_val_labs) Use value label ADT.
5075         (get_label) Ditto.
5076         (debug_print) Ditto.
5077         (val_lab_cmp) Removed.
5078         (inc_ref_count) Removed.
5079         (copy_value_labels) Removed.
5080
5081         * var.h: (struct value_label) Removed.
5082         (struct variable) Change AVL tree `val_lab' into hash table
5083         `val_labs'.
5084
5085         * vars-atr.c: (init_variable) Use value label ADT.
5086         (clear_variable) Ditto.
5087         (free_value_label) Removed.
5088         (free_val_lab) Removed.
5089         (get_val_lab) Removed.
5090         (compare_variables) New function.
5091         (hash_variable) New function.
5092
5093         * vfm.c: (dump_splits) Use value label ADT.
5094
5095 Fri Dec 19 11:18:11 2003  Ben Pfaff  <blp@gnu.org>
5096
5097         Add to the hash table interface.
5098
5099         * hash.c: (hsh_hash_bytes) Add assertion.
5100         (hsh_hash_string) Ditto.
5101         (hsh_clear) Ditto.
5102         (hsh_rehash) Ditto.
5103         (hsh_probe) Ditto.
5104         (hsh_create) Ditto.  Also make minimum `size'.
5105         (hsh_destroy) Rephrase.
5106         (sort_nulls_last) Removed.
5107         (not_null) New function.
5108         (hsh_data) Ditto.
5109         (comparison_helper) Ditto.
5110         (hsh_sort) Rewritten.
5111         (hsh_data_copy) New function.
5112         (hsh_sort_copy) Ditto.
5113         (hsh_insert) Ditto.
5114         (hsh_replace) Ditto.
5115         (hsh_hash_double) Ditto.
5116         (hsh_delete) Fix stupid bug.
5117         
5118 Thu Dec 18 12:27:03 WAST 2003 John Darrington <john@darrington.wattle.id.au>
5119         * added a calculation of the mode to FREQUENCIES
5120
5121 Wed Dec 17 12:53:01 WAST 2003 John Darrington <john@darrington.wattle.id.au>
5122
5123         * moved (un)defs of DEBUGGING to config.h
5124
5125 Mon Dec 15 21:35:59 2003  Ben Pfaff  <blp@gnu.org>
5126
5127         * groff-font.c: (add_kern) Fix indentation.
5128         (add_kern) Use & instead of % to take power-of-2 modulus.
5129         (font_get_kern_adjust) Likewise.
5130
5131 Fri Dec 12 23:54:37 2003  Ben Pfaff  <blp@gnu.org>
5132
5133         * autorecode.c: (recode) Replace stupid use of memcpy() by
5134         memberwise copy.
5135         (hash_alpha_value) Use hsh_hash_bytes().  Get rid of nasty casts.
5136         (hash_numeric_value) Ditto.
5137         (autorecode_proc_func) pool_strdup() was wrong here because the
5138         source string was not null-terminated.  Use new pool_strndup()
5139         instead.
5140
5141         * crosstabs.q: (enum_var_values) Remove superfluous and bizarre
5142         use of hsh_iterator_init().
5143
5144         * data-in.c: (parse_N) Initialize i->v->f.
5145
5146         * flip.c: (cmd_flip) Use memmove(), not memcpy(), to copy
5147         overlapping arrays.
5148
5149         * groff-font.c: Use power-of-2 hash table sizes, not prime.
5150         (groff_read_font) Don't call hsh_next_prime().  Don't call
5151         fclose(NULL).
5152         (static var hash) Remove `size_p', `max_used' members.
5153         (font_char_name_to_index) Don't call hsh_next_prime().  Use
5154         hsh_hash_string() instead of hashpjw(), & instead of %.
5155         (default_font) Don't call hsh_next_prime().
5156
5157         * pool.c: (pool_strndup) New function.
5158         (pool_strdup) Reimplement in terms of pool_strndup.
5159
5160         * postscript.c: (hash_font_entry) Use hsh_hash_string().  Get rid
5161         of nasty casts.
5162         (hash_ps_encoding) Use hsh_hash_string().
5163         (hash_ps_combo) Use hsh_hash_string(), hsh_hash_int().
5164         (hash_filename2font) Use hsh_hash_string().
5165
5166         * som.c: Add #include <stdlib.h>.
5167
5168         * tab.c: (tab_destroy) Don't set t->container after freeing `t'
5169         (by destroying its pool).
5170         
5171 Fri Dec 12 23:18:59 2003  Ben Pfaff  <blp@gnu.org>
5172
5173         Miscellaneous hash table code cleanup:
5174         
5175         * hash.h: (struct hsh_table) Moved into hash.c.
5176         (hsh_count) Ditto, and transformed into function.
5177         (hsh_compare_func) New typedef, used for defining otherwise-long
5178         function types here and in hash.c
5179         (hsh_hash_func) Ditto.
5180         (hsh_free_func) Ditto.
5181         
5182         * hash.c: (struct hsh_table) Renamed `n' to `used', `m' to `size',
5183         `table' to `entries'.  Removed `mp'.  All references updated.
5184         (hsh_clear) Don't shrink entries array; if the hash was this big
5185         once, it probably will be again.
5186         (hsh_rehash) Made static.
5187         (force_hsh_insert) Renamed hsh_force_insert.
5188         (force_hsh_find) Renamed hsh_force_find.
5189
5190         Made hash table sizes powers of 2, because that's fine with any
5191         reasonable hash function and because taking a power-of-2 modulus
5192         is faster than any other:
5193         
5194         (hsh_prime_tab) Removed;
5195         (hsh_next_prime) Ditto.
5196         (next_power_of_2) New function.
5197         (hsh_create) Use next_power_of_2.
5198         (hsh_rehash) Use & instead of %.
5199
5200         Cleaned up hsh_sort:
5201         
5202         (internal_comparison_fn) Removed.
5203         (sort_nulls_last) New function.
5204         (hsh_sort) Removed second parameter, switched to using the new
5205         quicksort() function from quicksort.h to avoid using nasty need
5206         for static variables with qsort().  All references updated.
5207
5208         Changed the hash functions offered, because there are better hash
5209         functions than the ones we had, and cleaned up the names to boot:
5210         
5211         * hash.c: (hashpjw_d) Removed.
5212         (hashpjw) Ditto.
5213         (hsh_hash_bytes) New function.
5214         (hsh_hash_string) New function.
5215         (hsh_hash_int) New function.
5216
5217         Improved the hash table iteration interface:
5218         
5219         * hash.h: (hsh_iterator_init) Removed.
5220         (struct hsh_iterator) Removed `init' member, change `next' to
5221         size_t.
5222
5223         * hash.c: (hsh_foreach) Removed.  All references updated to use
5224         hsh_first/hsh_next instead.
5225         (hsh_first) New function.  Notably, unlike hsh_foreach() it does
5226         not treat a null pointer as an empty hash table.
5227         (hsh_next) New function.
5228
5229         Made deletion possible, though slow:
5230
5231         * hash.c: (locate_matching_entry) New function.
5232         (hsh_find) Use locate_matching_entry().
5233         (hsh_delete) New function also using locate_matching_entry().
5234         (hsh_force_delete) New function.
5235
5236 Fri Dec 12 23:16:10 2003  Ben Pfaff  <blp@gnu.org>
5237
5238         * quicksort.c: New file implementing a sort routine with a
5239         interface better than qsort() because it passes a user-provided
5240         parameter to the sort routine.
5241
5242         * Makefile.am: Add quicksort.c, quicksort.h.
5243
5244 Fri Dec 12 13:31:58 2003  Ben Pfaff  <blp@gnu.org>
5245
5246         * All source files: Get rid of nasty special cases for Checker,
5247         which is pretty obsolete now.
5248
5249 Thu Dec 11 21:38:24 WST 2003 John Darrington <john@darrington.wattle.id.au>
5250
5251         * Fixed a bug apparent when using the FREQUENCIES command with the
5252         html driver.  The html driver was incorrectly trying to display 
5253         empty cells.
5254
5255 Sun Jan  2 21:40:13 2000  Ben Pfaff  <blp@gnu.org>
5256
5257         * Makefile.am: Reorganized.  Put locale dir in version.c instead
5258         of passing it to each compile command.  Only put local gmp libs in
5259         LD_ADD if not installed on system.  Remove `boast' target.
5260
5261         * All source files: struct and union typedefs eliminated.
5262         `sizeof type' replaced by `sizeof object' where practical.  Moved
5263         `unused' qualifiers from start to end of declarations for gcc
5264         2.7.2 compatibility.  Change `while (1)' to `for (;;)'.  Made
5265         assertions on pointers strictly compliant.  Removed _ prefixes on
5266         some function parameter names.
5267
5268         * alloc.c: New source file, containing these external linkage
5269         functions removed from common.c: xmalloc, xcalloc, xrealloc,
5270         xstrdup.
5271
5272         * arena.c: Removed.
5273         
5274         * arena.h: Removed.
5275
5276         * ascii.c: Migrated from arenas to pools.
5277         (struct ascii_driver_ext) ops[], box[], fonts[] changed from
5278         c_string to len_string.  All references changed.
5279         (ascii_option) Signature changed to comply to new output.c
5280         interface.
5281         (count_fancy_chars) Removed.
5282         (delineate) Removed support for rich text.
5283         (ascii_text_metrics) Ditto.
5284         (text_draw) Ditto.
5285         (output_shorts) Change `box', `off', `on' from c_string to
5286         len_string.  Change `remaining' from int to size_t.
5287         (ascii_close_page) Make page numbering less haphazard.
5288
5289         * autorecode.c: Migrate from arenas to pools.
5290
5291         * avl.c: Migrate from arenas to pools.  Synch from libavl 1.4.0.
5292
5293         * bitvector.h: New file containing these macros from misc.h:
5294         SET_BIT, CLEAR_BIT, SET_BIT_TO, TEST_BIT, BIT_INDEX.
5295
5296         * command.c: (struct command) cmd1, cmd2, cmd3 members changed to
5297         word[3].  ncmd removed.
5298         (var empty_string) Removed.
5299         (var cmd_table) Declaration updated.
5300         (var cmdtab) Removed.
5301         (cmp_command) Removed.
5302         (split_words) Rewritten to use strtok_r().
5303         (init_cmd_parser) Renamed cmd_init().  Rewritten.
5304         (find_command) Removed.
5305         (FILE_TYPE_okay) Rewritten.
5306         (cmd_parse) Rewritten.  Semantics of the return value of command
5307         handlers has changed: they must now return one of the new CMD_*
5308         enumerals, rather than a magic value.  This meant that all
5309         commands had to be modified, and they were.
5310         (figure_out_command) New function.
5311
5312         * command.def: Add CORRELATIONS, PEARSON CORRELATIONS.  Add
5313         #defines for INIT, INPU, etc.
5314
5315         * command.h: New CMD_* enum series.
5316         (cur_proc) Make const char *, not char *.
5317         (cmd_init) Prototype.
5318         (cmd_parse) Ditto.
5319
5320         * common.c: Removed.
5321
5322         * common.h: Removed.
5323
5324         * correlations.q: New file.
5325
5326         * crosstabs.q: Migrate from arenas to pools.  Migrate to new-style
5327         q2c.
5328         (custom_tables) Renamed crs_custom_tables().
5329         (custom_variables) Renamed crs_custom_variables().
5330         (calc_integer) Add in some `const' qualifiers.
5331         (table_value_missing) Change from a_string to len_string.
5332         (float_M_suffix) Change from a_string to len_string.
5333
5334         * data-in.c: Rewritten.  All references to
5335         parse_string_as_format() changed to data_in().
5336
5337         * data-in.h: New file.
5338
5339         * data-list.c: Change DLS_* from #define's to enums.  Move from
5340         rpd_msg() to tmsg().
5341         (RPD_ERR) New #define.
5342         (do_reading) Change dfm_push_cust() to dfm_push(), pop_cust() to
5343         dfm_pop().
5344         (read_from_data_list_fixed) Change from old
5345         parse_string_as_format() to new data_in().
5346         (read_from_data_list_free) Ditto.
5347         (read_from_data_list_list) Ditto.
5348         (cmd_repeating_data) Modify approach to checking for end of
5349         command.
5350         (rpd_msg) Removed.
5351         (rpd_parse_record) Change from old parse_string_as_format() to new
5352         data_in().  Change from old convert_format_to_string() to new
5353         data_out().
5354         (read_one_set_of_repetitions) Change dfm_push_cust() to
5355         dfm_push(), pop_cust() to dfm_pop().
5356
5357         * data-out.c: Rewritten.  All references to
5358         convert_format_to_string() changed to data_out().
5359
5360         * descript.q: Migrate to new q2c.
5361         (cmd_descriptives) Removed.
5362         (internal_cmd_descriptives) Renamed cmd_descriptives ().
5363         (custom_variables) Renamed dsc_custom_variables().
5364
5365         * dfm.c: (struct dfm_fhuser_ext) `ln' removed.  All references
5366         removed.
5367         (open_file_r) Initialize h->where.line_number.  Migrate to new
5368         struct string.
5369         (open_file_w) Initialize h->where.line_number.
5370         (read_record) Change from ext->ln to h->where.line_number.
5371         Migrate to struct string.
5372         (dfm_put_record) Rephrased.
5373         (dfm_push_cust) Renamed dfm_push(), rewritten.
5374         (dfm_pop) New function.
5375
5376         * error.c: All references updated.
5377         (glob var error_count) Renamed err_err_count.
5378         (glob var warning_count) Renamed err_warning_count.
5379         (glob var error_already_flagged) Renamed err_already_flagged.
5380         (glob var verbosity) Renamed err_verbosity.
5381         (glob var cust_fn) Removed.
5382         (glob var cust_ln) Removed.
5383         (static var file_loc) New.
5384         (static var nfile_loc) New.
5385         (static var mfile_loc) New.
5386         (tmsg) New function.
5387         (push_cust) Removed.
5388         (pop_cust) Removed.
5389         (msg) Rewritten.
5390         (static var terminating) Removed.
5391         (failure) Renamed err_failure().
5392         (hcf) Renamed err_hcf().
5393         (err_push_file_locator) New function.
5394         (err_pop_file_locator) New function.
5395         (err_location) New function.
5396         (check_error_count) Renamed err_check_count().
5397         (vmsg) Renamed err_vmsg().  Interface changed.
5398         (verbose_msg) Removed.
5399         (err_cond_fail) New function.
5400         (error_break) Renamed err_break().
5401
5402         * error.h: All references updated.
5403         (enum MSG_CLASS_COUNT) Renamed ERR_CLASS_COUNT.
5404         (enum ERR_CLASS_MASK, ERR_VERBOSITY_SHIFT, ERR_VERBOSITY_MASK)
5405         New.
5406         (struct file_locator) New.
5407         (struct error) New.
5408         (macro verbose_msg) Removed.
5409         (macro cond_fail) Removed.
5410
5411         * expr-opt.c: (evaluate_tree) sizeof(char) == 1.
5412
5413         * expr-prs.c: Reorganized.  All references updated.
5414         (exprtypename) Renamed expr_type_name().
5415         (typename) Renamed type_name().
5416         (free_expression) Renamed expr_free().
5417         (parse_expression) Renamed expr_parse().  Uses new type_check()
5418         function.
5419         (init_functab) Renamed init_func_tab().
5420         (type_check) New function.
5421         (parse_or) Rewritten to use new allocate_nonterminal() and
5422         append_nonterminal_arg() functions.
5423         (parse_and) Ditto.
5424         (parse_not) Ditto.
5425         (parse_rel) Ditto.  Also simplified logic.
5426         (parse_add) Ditto.
5427         (parse_mul) Ditto.
5428         (parse_neg) Ditto.
5429         (parse_exp) Ditto.
5430         (SYSMIS_func) Ditto.
5431         (VALUE_func) Rephrased.
5432         (CONCAT_func) Fix memory leak by replacing free by free_node on
5433         lossage.
5434         (generic_str_func) Ditto.
5435         (parse_function) Ditto.  Also rephrasings.  Uses bsearch() to find
5436         function.
5437         (allocate_nonterminal) New function.
5438         (append_nonterminal_arg) New function.
5439         (static func_tab[]) Now at file level.
5440         (cmp_func) Moved.
5441         (init_func_tab) Moved.  Now just uses qsort() to sort func_tab[].
5442
5443         * expr.h: (enum series OP_*) Moved to exprP.h.
5444         (OP_* defines) Ditto.
5445         (struct op_desc) Ditto.
5446         (global ops[]) Ditto.
5447         (struct num_con_node) Ditto.
5448         (struct str_con_node) Ditto.
5449         (struct var_node) Ditto.
5450         (struct lag_node) Ditto.
5451         (struct casenum_node) Ditto.
5452         (struct nonterm_node) Ditto.
5453         (union any_node) Members renamed.
5454         (struct sys_node) Removed.
5455         (struct val_node) Removed.
5456         (operator typedef) Removed.
5457         (typedef exprtype) Removed.
5458         (enum series EX_*) Moved to exprP.h.
5459         (struct expression) Ditto.  Also renamed a lot of the members.
5460         (PXP_* defines) Changed to enums.
5461         (free_node prototype) Moved to exprP.h.
5462
5463         * file-handle.h: (struct file_handle) New member `where'.
5464
5465         * file-handle.q: Migrated to new q2c format.
5466         (prepend_current_directory) Removed (dead code).
5467         (cmd_file_handle) Incorporated all of internal_cmd_file_handle().
5468         (fh_get_handle_by_filename) Removed dead code.
5469         Set new `where' member.
5470
5471         * file-type.c: (file_type_source_read) References to
5472         parse_string_as_format() changed to data_in().
5473         dfm_push_cust()/pop_cust() changed to dfm_push()/dfm_pop().
5474
5475         * filename.c: All references updated.
5476         (init_filename) Renamed fn_init().
5477         (expand_line) Removed.
5478         (macro EXPAND_LINE) Removed.
5479         (interp_vars) Renamed fn_interp_vars().  Now uses st_*() instead
5480         of custom functions.
5481         (gnu_getcwd) Renamed fn_get_cwd(), rewritten.
5482         (tilde_expand) Renamed fn_tilde_expand(), uses ds_*().
5483         (normalize_filename) Renamed fn_normalize().
5484         (search_path) Renamed fn_search_path(), rewritten.
5485         (prepend_dir) Renamed fn_prepend_dir().
5486         (blp_getenv) Renamed fn_getenv().
5487         (blp_dirname) Renamed fn_dirname().
5488         (fn_basename) New function, not used.
5489         (absolute_filename_p) Renamed fn_absolute_p().
5490         (is_special_filename) Renamed fn_special_p().
5491         (file_exists) Renamed fn_exists_p().
5492         (readlink_malloc) Renamed fn_readlink().
5493         (getenv_default) Renamed fn_getenv_default().
5494         (open_file) Renamed fn_open().
5495         (close_file) Renamed fn_close().
5496         (open_file_ext) Renamed fn_open_ext().
5497         (close_file_ext) Renamed fn_close_ext().
5498
5499         * font.h: Migrate from arenas to pools.
5500
5501         * format.c: (parse_format_specifier_name) Deal with ds_* strings.
5502
5503         * frequencies.g: Migrate from arenas to pools.
5504
5505         * frequencies.q: Migrate to new q2c version.  Migrate from arenas
5506         to pools.
5507
5508         * getline.c: All references updated.
5509         (global getl_buf) Changed from char * to struct string.
5510         (static getl_include_path) Ditto.
5511         (global getl_buf_len) Removed.
5512         (global getl_buf_size) Removed.
5513         (getl_include_path) Deal with new getl_buf, getl_include_path.
5514         (getl_uninitialize) New function.
5515         (getl_get_current_directory) Rewritten.
5516         (getl_clear_include_path) Rewritten.
5517         (getl_add_include_dir) Rewritten.
5518         (getl_add_file) Assertion fixed.
5519         (getl_add_virtual_file) Change initial value of `remaining_loops'
5520         from 2 to 1.
5521         (welcome) Rewritten.
5522         (handle_line_buffer) Make static.  Change logic to make
5523         getl_add_virtual_file() change sensible.  Use ds_*() strings.
5524         (getl_read_line) Use ds_*() strings.  Implement SET ECHO.
5525         (getl_close_file) Moved.
5526         (getl_location) New function.
5527
5528         * getline.h: All references updated.
5529         (macro curln) Removed.
5530         (macro curfn) Removed.
5531         (macro am_interactive) Renamed getl_am_interactive.
5532         (macro am_reading_script) Renamed getl_reading_script.
5533
5534         * glob.c: (global fmt_parse_ignore_error) Removed.
5535         (init_glob) Use locale_dir not LOCALEDIR.  Use feholdexcept() on
5536         systems that support it (C99).  Turn off SET ECHO by default.  No
5537         necessary julcal initialization anymore.
5538
5539         * groff-font.c: Migrate from arenas to pools.
5540         (groff_read_font) Use err_push_file_locator().
5541         (groff_read_DESC) Ditto.
5542         (font_msg) Use tmsg().
5543
5544         * hash.c: (hsh_sort) Fix debug code.
5545         [GLOBAL_DEBUGGING] Include stdio.h.
5546
5547         * hash.h: (macro force_hsh_insert) Rephrase.
5548
5549         * heap.c: Rewritten.
5550         
5551         * heap.h: Rewritten.
5552
5553         * html.c: (html_option) Change from outp_value to struct string.
5554         (postopen) Change from curfn to getl_location().
5555         (escape_string) Remove rich-text code.  Signature changed.
5556         (output_tab_table) Switch from a_string to struct len_string.
5557         Remove rich text support.
5558
5559         * lexer.c: All references updated.  Largely rewritten.  Major
5560         changes listed below.  Removed tagged quote support.  Adapted to
5561         struct string tokstr.
5562         (global tokstr) Changed to struct string.
5563         (global tokstr_size) Removed.
5564         (global tokstr_len) Removed.
5565         (global tokid) New.
5566         (global tokint) Removed.
5567         (global toklongstr) Removed.
5568         (C* defines) Removed.
5569         (static tbl[]) Removed.
5570         (static id[]) Removed.
5571         (static une[]) Removed.
5572         (discard_line) Renamed lex_discard_line().
5573         (get_entire_line) Renamed lex_entire_line().
5574         (get_rest_of_line) Renamed lex_rest_of_line().
5575         (get_dotted_rest_of_line) Merged into lex_rest_of_line().
5576         (make_hexit) Removed.
5577         (syntax_error) Renamed lex_error().  Return value removed.
5578         (get_token_representation) Renamed lex_token_representation().
5579         (putback) Renamed lex_put_back().
5580         (putfwd) Renamed lex_put_forward().
5581         (convert_negative_to_dash) Renamed lex_negative_to_dash().
5582         (set_prog) Renamed lex_set_prog().
5583         (init_lex) Renamed lex_init().
5584         (reset_eof) Renamed lex_reset_eof().
5585         (lookahead) Renamed lex_look_ahead().
5586         (check_id) Rewritten.
5587         (yylex) Renamed lex_get(), rewritten.
5588         (lex_end_of_command) New function.  Many commands were rephrased
5589         using this.
5590         (lex_integer_p) New function.  Replaces compare of tokint against
5591         NOT_LONG.
5592         (lex_integer) New function.  Replaces tokint.
5593         (match_tok) Renamed lex_match().
5594         (match_id) Renamed lex_match_id().
5595         (match_int) Renamed lex_match_int().
5596         (force_match_id) Renamed lex_force_match_id(), added return value.
5597         (force_match) Renamed lex_force_match(), added return value.
5598         (force_string) Renamed lex_force_string(), added return value.
5599         (force_int) Renamed lex_force_int(), added return value.
5600         (lex_id_match_len) New function.
5601         (id_match) Renamed lex_id_match(), rewritten.
5602         (get_line) Renamed lex_get_line().
5603         (preprocess_line) Renamed lex_preprocess_line().
5604         (tokname) Renamed lex_token_name().
5605         (bin_value_func) Removed.
5606         (oct_value_func) Removed.
5607         (hex_value_func) Removed.
5608         (unexpected_eof) New function.
5609         (convert_numeric_string_to_char_string) New function.
5610         (parse_string) Rewritten, signature changed.
5611         (add_tokstr_char) Removed.
5612         (add_tokstr_unsigned) Removed.
5613         (add_tokstr_string) Removed.
5614         (parse_tagged_quote) Removed.
5615         (skip_comment) Renamed lex_skip_comment().
5616
5617         * lexer.h: All references updated.
5618         (macro is_id1) Renamed CHAR_IS_ID1.
5619         (macro is_idn) Renamed CHAR_IS_IDN.
5620         (token names ID, NUM, STRING, STOP, ... WITH, EXP) Renamed with
5621         prefix T_: T_ID, T_NUM, T_STRING, T_STOP, ... T_WITH, T_EXP.
5622         (macro get_token) Removed.
5623         (macro id_match) Removed.
5624         (macro force_match_id) Removed.
5625         (macro force_match) Removed.
5626         (macro force_string) Removed.
5627         (macro force_int) Removed.
5628         (macro force_num) Removed.
5629         (macro force_id) Removed.
5630
5631         * lexerP.h: Removed.
5632
5633         * list.q: Migrated to new q2c format.
5634         (write_line) Deal with struct len_string.
5635         (write_varname) Ditto.
5636         (write_fallback_headers) Ditto.
5637
5638         * magic.c: New file, incorporating the following global variables
5639         previously in other files: endian, second_lowest_value.  And both
5640         of those are conditional on #define's.
5641
5642         * magic.h: New file, incorporating the following global variable
5643         declarations: endian, second_lowest_value, and the following macro
5644         declarations: NOT_DOUBLE, NOT_LONG, NOT_INT.
5645
5646         * main.c: Added declarations of pgmname, finished, curdate,
5647         start_interactive.
5648         (main) Call new parse_script() function.
5649         (parse_script) New function.
5650         (execute_command) New function.
5651         (dump_token) Removed.
5652         (handle_error) New function.
5653
5654         * matrix.c: New file.
5655
5656         * matrix.h: New file.
5657
5658         * matrix-data.c: Migrated from arenas to pools.
5659         (mget_token) Change from parse_string_as_format() to data_in().
5660
5661         * means.q: Migrate to new q2c.
5662         (custom_tables) Renamed mns_custom_tables().
5663         (custom_crossbreak) Renamed mns_custom_crossbreak().
5664         (custom_variables) Renamed mns_custom_variables().
5665
5666         * mis-val.c: (static var width) Changed from `int' to `size_t'.
5667         (parse_varnames) Prototype.
5668         (parse_numeric) Rephrasings.
5669         (parse_alpha) Adapt to new struct string tokstr.
5670
5671         * misc.c: (intlog10) Rewritten.
5672         (spacing) Removed.
5673         (ansi_rand) Renamed real_rand(), moved into random.c.
5674         (ansi_srand) Renamed real_srand(), moved into random.c.
5675         (setup_randomize) Moved to random.c.
5676         (rand_uniform) Ditto.
5677         (rand_normal) Ditto.
5678         (rand_simple) Ditto.
5679         (get_config_line) Removed.
5680         (reverse) Removed (dead code).
5681
5682         * misc.h: (macro SET_BIT) Moved to bitvector.h.
5683         (macro CLEAR_BIT) Ditto.
5684         (macro TEST_BIT) Ditto.
5685         (macro SET_BIT_TO) Ditto.
5686         (macro BIT_INDEX) Ditto.
5687
5688         * output.c: (outp_read_devices) Move to err_push_file_locator()
5689         from push_cust().  Use struct string.
5690         (expand_op_tokstr) Removed.
5691         (static var op_tokstr) Changed to struct string.
5692         (static var op_tokstr_size) Removed.
5693         (tokener) Rephrasings.  Use struct string.
5694         (parse_options) Use struct string.
5695         (destroy_driver) Fix assertion.
5696         (outp_get_paper_size) Move to err_push_file_locator().
5697         [0] Removed dead code.
5698         (outp_string_width) Move to len_string.
5699
5700         * output.h: Comment fixes.
5701         (TAG_* enum series) Removed.
5702         (struct outp_value) Removed.
5703         (enum OUTP_T_FANCY) Removed.
5704         (struct outp_text) `s' changed from a_string to len_string.
5705         (struct outp_class) `option' change arg 3 from outp_value to
5706         struct string.
5707
5708         * pfm-read.c: (corrupt_msg) Rewritten.
5709
5710         * pfm-write.c: (bufwrite) Fix assertion.
5711
5712         * pool.c: New file, reference version.
5713
5714         * pool.h: New file, reference version.
5715
5716         * postscript.c: (ps_font_sizes) Fix assertion.
5717         (ps_option) Change arg 3 from outp_value to struct string.
5718         Adapt to struct string.
5719         (macro output_line) Removed.
5720         (macro add_string) Removed.
5721         (output_encodings) Adapted to struct string.  Moved to
5722         err_push_file_locator().
5723         (find_encoding_file) Fix assertion.
5724         (read_ps_encodings) Move to err_push_file_locator().
5725         (postopen) Use getl_location() instead of curfn.
5726         (out_text_plain) Move to len_string.
5727         (text) Ditto.  Remove rich text support.
5728
5729         * print.c: (cmd_print) Remove now-unneeded resource cleanup code.
5730         (cmd_print_eject) Ditto.
5731         (cmd_write) Ditto.
5732         (internal_cmd_print) Now cleans up after itself.  Uses
5733         fh_parse_file_handle() now.
5734         (cmd_print_space) Use PXP_NUMERIC to type-check.
5735
5736         * q2c.c: Overhauled.  Removed _("") i18n support.  All references
5737         updated.  All output functions updated to handle structures rather
5738         than local or static variables.  Adapt to new PSPP lex_*()
5739         functions.
5740         (macro _) Removed.
5741         (macro N_) Removed.
5742         (macro MAX_N_SBC) Removed.
5743         (global bare) Removed.
5744         (enum STRING) Renamed T_STRING.
5745         (enum ID) Renamed T_ID.
5746         (get_buffer) Buffer size increased.
5747         (strlower) Renamed st_lower(), rephrased.
5748         (strupper) Renamed st_upper(), rephrased.
5749         (skip_ws) New function.
5750         (get_line) Don't special-case any types of lines (like those
5751         beginning with ! or $, for instance).
5752         (get_token) Renamed lex_get().  Rephrased.
5753         (static var `prefix') New.
5754         (parse) New function.
5755         (parse_setting) Minor rephrasing.
5756         (dump_specifier_vars) Ditto.
5757         (make_identifier) Put null terminator on identifier, duh.
5758         (dump_vars) Renamed dump_declarations().  Never indent.  Never
5759         static.  Output changed entirely.
5760         (dump_specifier_init) Rephrase.
5761         (dump_vars_init) No index variable needed.  Other modifications.
5762         (dump_parser) Don't parse command name.  Do dump functions instead
5763         of just code fragments.
5764         (dump_free) Dump function instead of code fragment.
5765         (recognize_directive) New function.
5766         (main) Use recognize_directive().  Don't rely on magic $ line
5767         beginning: instead, parse comments.  Update list of headers.
5768
5769         * random.c: New file, containing the following functions:
5770         real_rand(), real_srand(), setup_randomize, shuffle, rand_uniform,
5771         rand_normal, rand_simple.
5772
5773         * random.h: New file.
5774
5775         * recode.c: (cmd_recode) Merge internal_cmd_recode() into this
5776         function.  `max_src_width', `max_dst_width' changed to size_t.
5777         (internal_cmd_recode) Removed.
5778         (parse_dest_spec) Merge similar cases.
5779         (parse_src_spec) Add assertion.
5780
5781         * repeat.c: (recognize_keyword) New function.
5782         (internal_cmd_do_repeat) Parse and handle PRINT keyword on END
5783         REPEAT.  Improve recognition of END REPEAT (use
5784         recognize_keyword()).  Move from curfn to getl_location().  Use
5785         struct string.
5786                 
5787         (perform_DO_REPEAT_substitutions) Adapt to struct string.
5788
5789         * set.q: Adapt to new q2c.
5790         (cmd_set) Range-check some values better.
5791         (custom_blanks) Renamed stc_custom_blanks().
5792         (custom_length) Renamed stc_custom_length().
5793         (custom_results) Renamed stc_custom_results().
5794         (custom_seed) Renamed stc_custom_seed().
5795         (custom_width) Renamed stc_custom_width().
5796         (custom_format) Renamed stc_custom_format().
5797         (custom_journal) Renamed stc_custom_journal().
5798         (custom_color) Renamed stc_custom_color().
5799         (custom_listing) Renamed stc_custom_listing().
5800         (custom_disk) Renamed stc_custom_disk().
5801         (custom_log) Renamed stc_custom_log().
5802         (custom_rcolor) Renamed stc_custom_rcolor().
5803         (custom_viewlength) Renamed stc_custom_viewlength().
5804         (custom_workdev) Renamed stc_custom_workdev().
5805
5806         * settings.h: Not necessary to include format.h any longer.
5807
5808         * sfm-read.h: (macro bswap_int32) Moved here from sfmP.h.
5809         (corrupt_msg) Rewritten.
5810
5811         * sort.c: Adapt to rewritten heap ADT.
5812
5813         * str.c: (aa_strcpy) Removed.
5814         (ab_strcpy) Removed.
5815         (ac_strcpy) Removed.
5816         (ba_strcpy) Removed.
5817         (bb_strcpy) Removed.
5818         (ca_strcpy) Removed.
5819         (aa_strdup) Removed.
5820         (aa_strdupcpy) Removed.
5821         (ba_strdup) Removed.
5822         (sa_strdup) Removed.
5823         (memrev) Renamed mm_reverse().
5824         (memrmem) Renamed mm_find_reverse().
5825         (cmp_str) Renamed st_compare_pad().
5826         (strmaxcpy) Removed.
5827         (strbarepadcpy) Renamed st_bare_pad_copy(), signature changed.
5828         (strbarepadlencpy) Renamed st_bare_pad_len_copy(), signature
5829         changed.
5830         (strpadcpy) Renamed st_pad_copy(), signature changed.
5831         (blpstrset) Removed.
5832         (ds_create) New function.
5833         (ds_init) New function.
5834         (ds_replace) New function.
5835         (ds_destroy) New function.
5836         (ds_clear) New function.
5837         (ds_extend) New function.
5838         (ds_shrink) New function.
5839         (ds_truncate) New function.
5840         (ds_length) New function.
5841         (ds_size) New function.
5842         (ds_value) New function.
5843         (ds_end) New function.
5844         (ds_concat) New function.
5845         (ds_concat_buffer) New function.
5846         (ds_printf) New function.
5847         (ds_putchar) New function.
5848         (ds_getline) New function.
5849         (ds_get_config_line) New function derived from the old
5850         misc.c:get_config_line().
5851         (ls_create) New function.
5852         (ls_create_buffer) New function.
5853         (ls_init) New function.
5854         (ls_shallow_copy) New function.
5855         (ls_destroy) New function.
5856         (ls_null) New function.
5857         (ls_null_p) New function.
5858         (ls_empty_p) New function.
5859         (ls_length) New function.
5860         (ls_value) New function.
5861         (ls_end) New function.
5862
5863         * str.h: Reformatted.
5864         (struct a_string) Removed.
5865         (struct b_string) Removed.
5866         (struct c_string) Removed.
5867         (struct len_string) New.
5868         (struct string) New.
5869         (macro as_streq) Removed.
5870         (macro bs_streq) Removed.
5871         (macro cs_streq) Removed.
5872         (macro sa_streq) Removed.
5873         (macro sb_streq) Removed.
5874         [__GNUC__] (inline function ds_putchar) New function.
5875         [__GNUC__] (inline function ds_length) New function.
5876         [__GNUC__] (inline function ds_value) New function.
5877         [__GNUC__] (inline function ds_end) New function.
5878
5879         * sysfile-info.c: (cmd_sysfile_info) Rephrased.
5880         (display_vectors) Fix missing i18n.
5881
5882         * t-test.q: Migrate to new q2c.
5883
5884         * tab.c: Migrate from arenas to pools.
5885         (tab_create) Use struct len_string.
5886         (tab_realloc) Ditto.
5887         (text_format) Ditto.
5888         (tab_joint_text) Ditto.
5889         (tab_natural_width) Remove rich text support.
5890         (tab_natural_height) Ditto.
5891         (tab_output_text) Handle TAT_FIX.
5892         (tab_raw) Change arg from a_string to len_string.
5893         (tabi_driver) Fix assertion.  Use struct len_string.
5894         (render_strip) Use struct len_string.  Remove rich text support.
5895         Add `const' qualifiers.
5896
5897         * tab.h: (enum TAB_RICH) Remove.
5898         (enums TAB_COL_NONE, TAB_COL_DONE) New.  Where appropriate,
5899         SOM_COL_* updated to read TAB_COL_*.
5900         (struct tab_table) Change arena to pool.  Change a_string to
5901         len_string.
5902
5903         * temporary.c: (restore_dictionary) Rewrite Checker code.
5904
5905         * var.h: (macros MAX_SHORT_STRING, MIN_LONG_STRING, SYSMIS,
5906         LOWEST, HIGHEST) Moved here from common.h.
5907         (typedef any_trns) Removed.  All references changed to `struct
5908         trns_header'.
5909
5910         * vars-atr.c: (force_create_variable) Fix assertion.
5911         (force_dup_variable) Fix assertion.
5912         
5913 Thu Jun  3 18:40:42 1999  Ben Pfaff  <blp@gnu.org>
5914
5915         Using alphanumeric variables in functions under AGGREGATE
5916         segfaulted.  Fixed.  Thanks to Dr. Dirk Melcher
5917         <BZN-mdksh@t-online.de> for reporting this bug.
5918         
5919         * aggregate.c: (parse_aggregate_functions) When setting the
5920         FSTRING bit, also allocate memory for the `string' member of
5921         agr_next.
5922         (free_aggregate_functions) Free iter->string.  Don't use the
5923         non-function bits when indexing the array of functions.
5924         [DEBUGGING] (debug_print) Don't use the non-function bits when
5925         indexing the array of functions.        
5926
5927 Sun May 30 00:00:54 1999  Ben Pfaff  <blp@gnu.org>
5928
5929         Under certain circumstances, the final case would be omitted from
5930         the results of an AGGREGATE operation.  Fixed.  Thanks to Dr. Dirk
5931         Melcher <BZN-mdksh@t-online.de> for reporting this bug.
5932         
5933         * aggregate.c (agr_00x_end_func): Increment number of cases in
5934         sink before writing case.  For streams that keep track of how many
5935         cases there are based on this value, this means that the last case
5936         will be read in on the next stream read.
5937
5938 Sat May 29 22:03:31 1999  Ben Pfaff  <blp@gnu.org>
5939
5940         Undefined behavior was invoked by referencing a freed pointer.
5941         
5942         * vfm.c (memory_stream_write): Free pointer *after* checking for
5943         non-null status.
5944
5945 Sat May 29 22:02:22 1999  Ben Pfaff  <blp@gnu.org>
5946
5947         A wrong record size was displayed when paging the active file to
5948         disk.
5949         
5950         * vfm.c: (memory_stream_write) Fix off-by-one error.
5951
5952 Sat May 29 21:50:26 1999  Ben Pfaff  <blp@gnu.org>
5953
5954         Not having enough temporary space for sorting caused a core dump.
5955         Fixed.
5956         
5957         * sort.c: (allocate_cases) Initialize i.
5958
5959 Sat May 29 21:40:54 1999  Ben Pfaff  <blp@gnu.org>
5960
5961         Syntax errors in function descriptions on AGGREGATE caused core
5962         dumps.  Fixed.
5963         
5964         * aggregate.c (cmd_aggregate): Don't free agr_dict after calling
5965         free_aggregate_functions(), since that function already frees
5966         agr_dict.
5967         
5968 Sat May 29 21:06:10 1999  Ben Pfaff  <blp@gnu.org>
5969
5970         A null pointer was dereferenced, causing a core dump, when
5971         PERCENTILES was specified on FREQUENCIES.  This fixes the problem,
5972         but PSPP still doesn't calculate percentiles.  Thanks to Regnor
5973         Jernsletten <rjernsle@eunet.no> for reporting this problem.
5974         
5975         * arena.c: (arena_malloc) If the arena hasn't been initialized
5976         already, initialize it.
5977
5978 Sat May 29 20:47:29 1999  Ben Pfaff  <blp@gnu.org>
5979
5980         * Makefile.cygwin: New file supplied by Hankin <hankin@dunno.com>
5981         for compilation with Cygnus Windows B20.  Not used by other
5982         systems.
5983
5984 Sat May 29 20:36:04 1999  Ben Pfaff  <blp@gnu.org>
5985
5986         SORT always sorted in ascending order.  Fixed.  Thanks to Dr. Dirk
5987         Melcher <BZN-mdksh@t-online.de> for reporting this bug.
5988
5989         * sort.c: (compare_case_lists) Reverse sense of comparison if
5990         sorting in descending order.
5991         (compare_record) Ditto.
5992
5993 Tue Mar  9 13:18:54 1999  Ben Pfaff  <blp@gnu.org>
5994
5995         SPLIT FILE with a string variable caused a core dump.  Fixed.
5996
5997         * vfm.c: If the variable is a string then make a temporary value
5998         struct pointing to it.  The underlying problem is a lot bigger
5999         than this (see TODO) but this is a stopgap for the simple case at
6000         least.
6001         
6002 Tue Mar  9 13:15:53 1999  Ben Pfaff  <blp@gnu.org>
6003
6004         Nested INCLUDEs didn't work.  Fixed.
6005
6006         * getline.c: (getl_include) Set first_line to NULL in allocated
6007         structure.
6008
6009 Tue Mar  9 13:13:46 1999  Ben Pfaff  <blp@gnu.org>
6010
6011         The MATCH FILES procedure set the values of variables not present
6012         to 0.  It should have been SYSMIS.  This is now fixed.
6013
6014         * get.c: (mtf_delete_file_in_place) Replace 0.0 by SYSMIS.
6015
6016 Tue Mar  9 12:52:23 1999  Ben Pfaff  <blp@gnu.org>
6017
6018         The REMARK command was too aggressive about skipping lines.  It
6019         didn't like being the last command in a file.
6020
6021         * command.c: (cmd_remark) Call get_entire_line() instead of
6022         get_line().
6023
6024 Tue Mar  9 12:48:05 1999  Ben Pfaff  <blp@gnu.org>
6025
6026         Comment parsing wasn't consistent with the rest of the code in its
6027         idea of where one command ends and another starts.  This meant
6028         that sometimes commands would be mysteriously ignored.  Thanks to
6029         Dr. Dirk Melcher <BZN-mdksh@t-online.de> for reporting this bug.
6030          
6031         * command.c: (parse_cmd) Hand off comment parsing to new function
6032         skip_comment() in lexer.c.
6033         * lexer.c: (skip_comment) New function.
6034
6035 Wed Jan 20 20:22:07 1999  Ben Pfaff  <blp@gnu.org>
6036
6037         The TABLE subcommand on MATCH FILES worked only erratically at
6038         best.  This fixes it.  Thanks to Dr. Dirk Melcher
6039         <BZN-mdksh@t-online.de> for reporting this bug.
6040
6041         * get.c: (mtf_compare_BY_values) When comparing string values, a
6042         difference of 1 is still a difference :-)
6043         (mtf_processing) Inverted TABLE reading logic fixed.  Also don't
6044         advance TABLE files automatically when matched.  Comment fixes.
6045
6046 Tue Jan 19 22:32:31 1999  Ben Pfaff  <blp@gnu.org>
6047
6048         VARIABLE LABELS rejected a slash before the first variable
6049         specification, contradicting the documentation.  Thanks to Walter
6050         M. Gray <graywm@northernc.on.ca> for reporting this bug.
6051
6052         * var-labs.c: (cmd_variable_labels) Ignore a leading slash in
6053         command specification.
6054
6055 Tue Jan 19 22:29:54 1999  Ben Pfaff  <blp@gnu.org>
6056
6057         Because of an incorrect optimization in memory allocation,
6058         CROSSTABS sometimes segfaulted when asked to output multiple
6059         tables.  Thanks to Walter M. Gray <graywm@northernc.on.ca> for
6060         reporting this bug.
6061
6062         * crosstabs.q: (postcalc) New variables maxcols, maxcells, which
6063         are passed to output_pivot_table() for its use.
6064         (output_pivot_table) Instead of assuming the number of columns is
6065         constant, keep track with maxcols.  In general mode, use maxcells
6066         to determine whether more matrix cells need to be allocated.    
6067
6068 Tue Jan 19 22:27:46 1999  Ben Pfaff  <blp@gnu.org>
6069
6070         CROSSTABS didn't display value labels for column and row
6071         variables.  Thanks to Walter M. Gray <graywm@northernc.on.ca> for
6072         reporting this bug.
6073
6074         * crosstabs.q: (table_value_missing) If the specified value has a
6075         value label for this variable, then show it instead of the raw
6076         value.
6077         (display_dimensions) Delegate display of value_labels to
6078         table_value_missing.
6079
6080 Mon Jan 18 20:04:06 1999  Ben Pfaff  <blp@gnu.org>
6081
6082         WRITE didn't write line ends.  Fixed.  Thanks to Dr. Dirk Melcher
6083         <BZN-mdksh@t-online.de> for reporting this bug.
6084
6085         * print.c: (print_trns_proc) Write (CR/)LF if PRINT is used _or_
6086         if the file isn't declared as binary.
6087
6088 Mon Jan 18 19:56:45 1999  Ben Pfaff  <blp@gnu.org>
6089
6090         MATCH FILES corrupted memory and dumped core on some syntax
6091         errors.  Fixed.
6092
6093         * get.c: (cmd_match_files) Set file->handle to NULL before
6094         jumping to lossage.
6095         (mtf_free_file) Don't free a null dictionary.   
6096
6097 Mon Jan 18 19:27:57 1999  Ben Pfaff  <blp@gnu.org>
6098
6099         MATCH FILES should set numeric values not available to the
6100         system-missing value, not to 0.  Thanks to Dr. Dirk Melcher
6101         <BZN-mdksh@t-online.de> for reporting this bug.
6102
6103         * get.c: (mtf_processing) Set unused records to system-missing,
6104         not 0.
6105
6106 Mon Jan 18 15:06:46 1999  Ben Pfaff  <blp@gnu.org>
6107
6108         KEEP didn't work properly on the SAVE procedure.  Fixed.  Thanks
6109         to Ralf Geschke <ralf@kuerbis.org> for reporting this bug.
6110
6111         * temporary.c: (save_dictionary) Initialize var_by_name AVL tree
6112         in newly created dictionary, and add each copied variable to the
6113         tree.
6114  
6115 Mon Jan 18 15:04:48 1999  Ben Pfaff  <blp@gnu.org>
6116
6117         Memory leak fix.
6118         
6119         * get.c: (trim_dictionary) Free variable list for KEEP after
6120         finishing with it.
6121
6122 Mon Jan 18 12:57:36 1999  Ben Pfaff  <blp@gnu.org>
6123
6124         Some systems didn't like the way open_file was coded.  Thanks to
6125         Hankin <hankin@rogue.consultco.com> for pointing this out.
6126
6127         * filename.c: (open_file) Don't try to store stdin, stdout,
6128         stderr as part of an array, because that doesn't always work.
6129
6130 Mon Jan 18 12:53:27 1999  Ben Pfaff  <blp@gnu.org>
6131
6132         The SAVE procedure didn't save long string variables properly.
6133         Fixed by this patch.  Thanks to Hankin
6134         <hankin@rogue.consultco.com> for this patch.
6135         
6136         * sfm-write.c: (write_variable) Fix off-by-one error in writing
6137         out variable pad records.
6138
6139 Tue Jan  5 14:29:27 1999  Ben Pfaff  <blp@gnu.org>
6140
6141         Previously, if PRINT SPACE were given a negative argument, it
6142         would report an error, then spin in an (almost) infinite loop.
6143         This fixes that behavior.
6144
6145         * print.c: (print_space_trns_proc) After reporting a negative
6146         argument, set number of lines to print to 1.
6147
6148 Tue Jan  5 13:59:55 1999  Ben Pfaff  <blp@gnu.org>
6149
6150         SPSS 8.0 outputs some new record types in its system files, and it
6151         allows longer value labels.  Accept these system files.
6152
6153         * sfm-read.c: (sfm_read_dictionary) Ignore record type 7 subtype
6154         11 emitted by SPSS 8.0.
6155         
6156 Tue Jan  5 13:55:50 1999  Ben Pfaff  <blp@gnu.org>
6157
6158         The LIST procedure was too conservative in allocating space for
6159         buffers, which caused a bug that only showed up with very long
6160         output variables.  Thanks to Hankin <hankin@dunno.com> for this
6161         bug report.
6162
6163         * list.q: (determine_layout) Allocate 1022 bytes instead of 256.
6164
6165 Tue Jan  5 13:34:34 1999  Ben Pfaff  <blp@gnu.org>
6166
6167         Typo meant string format specifiers weren't checked properly.  I
6168         think that Hankin <hankin@dunno.com> sent me this report, but I'm
6169         willing to be corrected on this point.
6170  
6171         * format.c: (check_string_specifier) Fix obvious typo.  
6172
6173 Tue Jan  5 12:50:42 1999  Ben Pfaff  <blp@gnu.org>
6174
6175         Using $CASENUM in an expression didn't work.  Here's a fix.
6176         Thanks to Dirk Melcher <BZN-mdksh@t-online.de> for reporting this
6177         bug.
6178          
6179         * expr-evl.c: (evaluate_expression) Add OP_CASENUM case.
6180
6181         * expr-opt.c: (dump_node) OP_CASENUM is acceptable.
6182
6183 Tue Jan  5 12:47:48 1999  Ben Pfaff  <blp@gnu.org>
6184
6185         The changes in 0.2.1 to fix DATA LIST FREE parsing broke some
6186         other behavior, *sigh*.  This patch hopefully fixes that.  This
6187         time I've actually tested it.
6188
6189         Thanks to Hankin <hankin@dunno.com> for reporting this bug.
6190
6191         * data-list.c: (read_from_data_list_free,
6192         read_from_data_list_list) Call parse_string_as_format() directly
6193         without mucking around with the field width.
6194
6195 Tue Jan  5 12:31:19 1999  Ben Pfaff  <blp@gnu.org>
6196
6197         Occasionally, you may encounter a script that wants to be
6198         interpreted in interactive mode.  Make -i emulate this behavior to
6199         allow such scripts to be executed with PSPP.
6200
6201         Thanks to Hankin <hankin@dunno.com> for reporting this behavior.
6202
6203         * cmdline.c: (pre_syntax_message[]) Update -i description.
6204
6205         * lexer.c: (preprocess_line) When getl_interactive is 2 (i.e.,
6206         when -i is given on the command line) don't treat unindented lines
6207         as starting a new command.
6208
6209 Tue Jan  5 12:30:10 1999  Ben Pfaff  <blp@gnu.org>
6210
6211         In conjunction with egcs 1.1.1, Checker emits some bogus warnings,
6212         mostly caused by local initialized aggregates.  After egcs is
6213         fixed upstream these can be removed, but for now they're not a big
6214         deal.
6215         
6216         * ascii.c: (ascii_postopen_driver) Checker chokes on local
6217         initialized arrays.  Avoid this.
6218
6219         * sfm-write.c: (sfm_write_dictionary) Don't use a local
6220         initialized struct.
6221
6222 Tue Jan  5 12:07:24 1999  Ben Pfaff  <blp@gnu.org>
6223
6224         egcs 1.1.1 has some new warnings relative to gcc 2.8.1, which the
6225         following changes avoid.  Currently I compile sources with egcs
6226         1.1.1 and gcc 2.7.2.3 before sending them out.
6227
6228         * apply-dict.c: (apply_dict) Use new avl_traverser_init() macro.
6229         
6230         * ascii.c: (option_tab[]) Initialize all struct members.
6231
6232         * avl.h: (avl_traverser_init) New macro.
6233         
6234         * command.c: (DEFCMD, UNIMPL macros, cmd_table[]) Initialize all
6235         struct members.
6236
6237         * crosstabs.q: (enum_var_values) Use new hsh_iterator_init()
6238         macro.
6239
6240         * hash.c: Comment fix.
6241
6242         * hash.h: (hsh_iterator_init) New macro.
6243
6244         * html.c: (option_tab[]) Initialize all struct members.
6245
6246         * pfm-write.c: (write_value_labels) Use new avl_traverser_init()
6247         macro.
6248
6249         * postscript.c: (option_tab[]) Initialize all struct members.
6250         (output_encodings, preclose, dump_lines) Use new
6251         hsh_iterator_init() macro.
6252
6253         * sfm-write.c: (write_value_labels) Use new avl_traverser_init()
6254         macro.
6255
6256         * sysfile-info.c: (describe_variable) Use new avl_traverser_init()
6257         macro.
6258
6259 Thu Nov 19 12:32:45 1998  Ben Pfaff  <blp@gnu.org>
6260
6261         * data-in.c: Examined each of the parsing functions to make sure
6262         that they wouldn't dump core if they were passed a string of the
6263         wrong length, since now the DATA LIST FREE/LIST routines don't
6264         check for field width before passing it to the data parser.
6265         (parse_RBHEX, parse_AHEX) Reject odd length input.
6266         (parse_string_as_format) Reject input that's too short or too
6267         long.
6268
6269         * data-list.c: Before, the DATA LIST FREE/LIST routines would pad
6270         a field to its entire declared output width then pass it to the
6271         data-in parsing routines.  This contradicted the documented
6272         behavior.  This is fixed in these changes.  Thanks to Mark H. Wood
6273         <mwood@IUPUI.Edu>.  In addition, this fixes a few more details of
6274         free-format parsing that differed from SPSS.
6275         (cut_field) Commas and spaces are treated identically.  Returns
6276         the proper column instead of a fixed 1 value.
6277         (parse_field) Removed.
6278         (read_from_data_list_free, read_from_data_list_list) Call
6279         parse_string_as_format directly instead of parse_field.
6280
6281         * heap.c: (heap_delete) Stylistic fixes.
6282
6283 Sun Aug  9 11:12:13 1998  Ben Pfaff  <blp@gnu.org>
6284
6285         * loop.c: (loop_2_trns_proc) Formatting fix.
6286
6287         * sel-if.c: (cmd_filter) Set FILTER_before_TEMPORARY.
6288
6289         * var.h: (glob var FILTER_before_TEMPORARY) New global var.
6290
6291         * vfm.c: (macro FILTERED) New.
6292         (static var filter_var) New.
6293         (process_active_file_write_case) Use FILTERED.
6294         (setup_filter) Set filter_var.
6295         (close_active_file) Delete the filter if not
6296         FILTER_before_TEMPORARY.
6297         (procedure_write_case) Use FILTERED.
6298
6299 Sat Aug  8 00:20:14 1998  Ben Pfaff  <blp@gnu.org>
6300
6301         * crosstabs.q: Changed /PIVOT={ON,OFF} to /FORMAT={PIVOT,NOPIVOT}.
6302
6303         * data-in.c: (parse_day_count) Message fix.
6304         (parse_month) Style fix.
6305
6306         * data-list.c: (struct data_list_pgm) New member eof.
6307         (cmd_data_list) Init eof to 0.
6308         (do_reading) Implement the /END subcommand and read-past-eof
6309         checking.
6310
6311         * do-if.c: Include stdio.h when debugging.
6312         (cmd_else_if) Make sure the command is .-terminated.
6313
6314         * glob.c: (init_glob) Capitalize the command prompt.
6315
6316         * inpt-pgm.c: (end_case_trns_proc) Debugging message.
6317         (end_file_trns_proc) Debugging message.
6318
6319         * loop.c: (internal_cmd_loop) Make it work when there's no loop
6320         index!
6321         (loop_2_trns_proc) Enable MXLOOPS (why was this disabled?)
6322
6323         * main.c: (dump_token) Make kwtab[] const.
6324
6325         * set.q: Spelling, comment fixes.
6326
6327         * sysfile-info.c: (cmd_display) DISPLAY VECTORS not DISPLAY
6328         VECTOR.
6329
6330         * vars-prs.c: (fill_all_vars) Style fix.
6331
6332         * vfm.c: (index_to_varname) Return const.
6333
6334 Tue Aug  4 23:49:23 1998  Ben Pfaff  <blp@gnu.org>
6335
6336         * Changes in many source files for partial -ansi -pedantic and
6337         no-debugging compliance: Remove trailing common in enum
6338         declarations; add `unused' attributes; insert some appropriate
6339         casts.
6340
6341         * cmdline.c: (parse_command_line) Add new --testing-mode flag.
6342
6343         * command.c: (shell) Make static.
6344         (run_command) Make static.
6345
6346         * data-list.c: (dump_fixed_table) Remove use of local_strdup().
6347
6348         * dfm.c: (cmd_begin_data) I18n fix.
6349
6350         * error.c: (verbose_msg) Define if __STRICT_ANSI__.
6351
6352         * error.h: (macro verbose_msg) Define if __STRICT_ANSI__.
6353
6354         * expr-opt.c: (evaluate_tree) Don't initialize local arrays if
6355         __STRICT_ANSI__.
6356
6357         * file-handle.q: Don't prepend the source file directory name to
6358         the data file name.  (Ongoing issue.)
6359         (prepend_current_directory) Comment out.
6360         (internal_cmd_file_handle) Don't call prepend_current_directory().
6361         (fh_get_handle_by_filename) Ditto.
6362
6363         * filename.c: Append zero byte to readlink() return value.
6364
6365         * getline.c: (getl_read_line) I18n fix.
6366
6367         * lexer.h: Don't use gcc features if __STRICT_ANSI__.
6368
6369         * misc.h: Don't use gcc features if __STRICT_ANSI__.
6370
6371         * pfm-write.c: (bufwrite) Don't try to increment a void * pointer
6372         directly.
6373
6374         * postscript.c: (output_encodings) Don't use local_strdup().
6375         (postopen) Ditto.
6376
6377         * print.c: Don't use gcc features if __STRICT_ANSI__.
6378
6379         * q2c.c: (dump_vars) Don't put a , at the end of the last enum.
6380
6381         * recode.c: (parse_src_spec) Fully brace nested if's.
6382
6383         * set.q: (global var set_testing_mode) New var.
6384
6385 Wed Jul 29 22:01:44 1998  Ben Pfaff  <blp@gnu.org>
6386
6387         * ascii.c: Add some more `unused' attributes that only come into
6388         play when NDEBUG is defined.
6389         (ascii_close_page) Set s_len when reallocating s.
6390         
6391         * crosstabs.q: (delete_missing) New function.
6392         (output_pivot_table) Call delete_missing() if /MISSING=REPORT.
6393         (make_summary_table) Create summary table reallocable.
6394
6395         * postscript.c: Add more `unused' attributes as above.
6396
6397         * tab.c: (tab_create) [GLOBAL_DEBUGGING] Set reallocable member.
6398         (tab_realloc) [GLOBAL_DEBUGGING] Assert that table is reallocable.
6399          
6400         * tab.h: (struct tab_table) [GLOBAL_DEBUGGING] New `reallocable'
6401         member.
6402
6403         * var.h: (macro force_dup_variable) [!GLOBAL_DEBUGGING] Remove
6404         gratuitous space between parameter definition.
6405
6406         * vars-atr.c: Changed some assert(0)'s to abort()'s to prevent
6407         complaints about running off the end of functions with NDEBUG
6408         enabled.
6409
6410 Sun Jul  5 00:17:25 1998  Ben Pfaff  <blp@gnu.org>
6411
6412         * Several source files: Removed some PORTME notes when reflection
6413         revealed that ANSI forbids that sort of breakage.  Also, added
6414         lots of `unused' qualifiers here and there.
6415
6416         * aggregate.c: (accumulate_aggregate_info) Remove local var
6417         weighting that turned out not to be used.
6418
6419         * avl.c: Update to version 1.1.0.  Add unused specifier.
6420         (avl_destroy) Initialize ab to 0.  Comment fixes.  Cast return
6421         value to void *.
6422         (avl_probe) Replace some instances of 1 with +1 where appropriate.
6423         (avl_find) Cast return value to void *.
6424         (avl_delete) q doesn't need to be initialized at the beginning of
6425         the function.  Replace some instances of 1 with +1.
6426         (force_avl_delete) Renamed avl_force_delete, all references changed.
6427         (compare_ints) `param' marked unused.
6428         (print_int) `param' marked unused.
6429         (recurse_tree) Replace some instances of 1 with +1.
6430
6431         * avl.h: Update to version 1.1.0.  Only declares avl function
6432         types if not already declared.
6433         (AVL_MAX_HEIGHT) Only define if not already defined.
6434         (struct avl_node) New unused member char pad[2].
6435         [GLOBAL_DEBUGGING] Change conditionalization to NDEBUG instead.
6436         (force_avl_insert) Renamed avl_force_insert.
6437         (force_avl_delete) Renamed avl_force_delete.
6438
6439         * crosstabs.q: (struct table_entry) Put `freq' into a union with
6440         new member `data'.
6441         (struct crosstab) Add new member `ofs'.
6442         (glob var int_tab) Removed.
6443         (custom_tables) In integer mode, assign v[i] properly through the
6444         indirect var_dict.
6445         (custom_variables) Now p.crs.max == max + 1.
6446         [DEBUGGING] (debug_print) p.crs.min and p.crs.max are now ints.
6447         (precalc) Implement integer mode.
6448         (calc_integer) Implement integer mode.
6449         (compare_table_entry) Remove unused local variable `comparing'.
6450         (make_summary_table) Implement integer mode.
6451         (macro ns_rows) Implemented as static variable now.
6452         (several variables) Made static, from global.
6453         (output_pivot_table) Use table_value_missing() for column heads.
6454         Remove several unused local variables.  Implement integer mode
6455         table summing.  Count up ns_rows.
6456         (crosstabs_dim) Make columns wider when /MISSING=REPORT requested.
6457         (find_pivot_extent) Moved into find_pivot_extent_general; now just
6458         calls that function or find_pivot_extent_integer.
6459         (find_pivot_extent_integer) New function.
6460         (enum_var_values) Implemented for integer mode.
6461         (table_value_missing) New function.
6462         (display_dimensions) Call table_value_missing() for heads.
6463         (float_M_suffix) New function.
6464         (display_crosstabulation) Call table_value_missing() for row
6465         heads.  Handle missing values in /MISSING=REPORT mode.
6466         (calc_fisher) Remove unused var N.
6467         (calc_r) Remove unused var fact.
6468
6469         * data-list.c: (dump_fixed_table) Fix table dimensioning.
6470         (read_one_set_of_repetitions) Remove unused vars var_spec, column.
6471
6472         * data-out.c: (insert_commas) Remove unused var cp.
6473         (convert_CCx) Remove unused vars save_set_decimal,
6474         save_set_grouping.
6475
6476         * descript.q: (dump_z_table) Fix table dimensioning.
6477         (pre_calc) Remove unused var j.
6478         (display) Remove unused vars title, s.  Fix table dimensioning.
6479
6480         * expr-evl.c: Comment fixes.
6481
6482         * frequencies.q: (full_dim) New function.
6483         (dump_full) Fix table dimensioning.
6484         (condensed_dim) New function.
6485         (dump_condensed) Fix table dimensioning.
6486
6487         * get.c: (cmd_match_files) Remove unused var n_val.  Remove unused
6488         label winnage.
6489
6490         * html.c: (html_close_drive) Remove unused var i.
6491         (postopen) Remove unused vars title, curfn_len, cp.
6492         (preclose) Remove unused vars this, x.
6493
6494         * lexer.c: Comment fixes.
6495
6496         * matrix-data.c: (cmd_matrix_data) Remove unused var index.
6497
6498         * means.q: (custom_tables) Remove unused var m_dim.
6499
6500         * mis-val.c: Format fix.
6501
6502         * modify-vars.c: (cmd_modify_vars) Remove unused var new_dict.
6503
6504         * output.c: (outp_get_paper_size) Remove unused var cp.
6505
6506         * pfm-read.c: (read_float) Remove unused var save, unused label
6507         underflow.
6508         (read_variables) Remove unused vars cp, j.
6509         (read_value_label) Remove unused var j.
6510
6511         * pfm-write.c: (bufwrite) Remove unused var i.
6512
6513         * postscript.c: (ps_postopen_drive) Remove unused vars dev_info,
6514         fn.
6515         (output_encodings) Remove unused vars char_cp, n_output.
6516         (read_ps_encodings) Remove unused var ep.
6517         (postopen) Remove unused var title.
6518         (preclose) Remove unused var fp.
6519         (ps_open_page) Remove unused vars true, false, orientation,
6520         mirror_horz, mirror_vert, width, length.
6521         (ps_text_metrics) Remove unused var x.
6522
6523         * q2c.c: (find_symbol) Remove unused var y.
6524         (parse_setting) Remove unused parameter sbc, all references
6525         changed.
6526         (dump_parser) Remove unused var cp.
6527         (dump_free) Remove unused var i.
6528
6529         * set.q: (static vars args, n) Removed.
6530         (internal_cmd_gset) Removed.
6531
6532         * sfm-read.c: (sfm_read_dictionary) Removed unused var i.
6533         (read_machine_flt64_info) Removed unused var file_endian.
6534         (read_documents) Removed unused var i.
6535         (read_compressed_data) Removed unused parameter dict, all
6536         references changed.
6537
6538         * sfm-write.c: (bufwrite) Removed unused var i.
6539         (sfm_write_case) Removed unused var i.
6540
6541         * sort.c: (merge_once) Remove unused var t.
6542         (write_separate) #if 0 out as dead code.
6543
6544         * split-file.c: (cmd_split_file) Remove unused var i.
6545
6546         * sysfile-info.c: (sysfile_info_dim) New function.
6547         (cmd_sysfile_info) Fix table dimensioning.
6548         (variables_dim) New function.
6549         (display_variables) Fix table dimensioning.
6550         (describe_variable) Remove unused var prev_r.
6551
6552         * t-test.q: (z_postcalc) Removed.
6553         (pairs_calc) Remove unused var bad_weight.
6554         (postcalc) Remove unused vars dfn, dfd.
6555
6556         * tab.c: (tab_create) Set t->dim to NULL.
6557         (tab_dim) Make sure t->dim is NULL first.
6558         (tab_natural_width) Remove parameter `clamp'.
6559         (tab_value) Remove duplicate assertion for table.
6560         (tab_raw) New function.
6561         (nowrap_dim) New function.
6562         (wrap_dim) New function.
6563         (tab_output_text) Fix table dimensioning.
6564
6565         * tab.h: (tab_raw) New macro.
6566
6567         * val-labs.c: (get_label) Remove unused var type.
6568         (copy_value_labels) Remove unused var trav.
6569
6570         * var.h: (struct crosstab_proc) Completely changed.
6571
6572         * vars-prs.c: (parse_dict_variable) Remove unused var v.
6573
6574         * vfm.c: (open_active_file) Remove unused vars i, lp.
6575
6576         * weight.c: (weight_trns_proc) #if 0 out as dead code.
6577         
6578 Tue Jun  2 23:37:21 1998  Ben Pfaff  <blp@gnu.org>
6579
6580         * Makefile.am: Add apply-dict.c, flip.c.
6581
6582         * apply-dict.c: New file.
6583         
6584         * command.c: (struct command) Make cmd[] larger for CLEAR
6585         TRANSFORMATIONS command name.
6586         (parse_cmd) Make sure we're in a valid state before using it as an
6587         index.  Discard variables and reset state on invalid transitions.
6588         (cmd_clear_transformations) New function.
6589
6590         * command.def: Add APPLY DICTIONARY, CLEAR TRANSFORMATIONS, FLIP.
6591         Add unimplemented PRESERVE, RESTORE.
6592
6593         * file-handle.h: Include stddef.h.
6594
6595         * flip.c: New file.
6596         
6597         * pfm-read.c: (parse_value) Pad value label values with spaces,
6598         not nulls.
6599
6600         * sfm-read.c: (struct sfm_fhuser_ext) Add reference count.
6601         (sfm_close) Decrement reference count, make sure it's zero.
6602         (sfm_maybe_close) New function.
6603         (sfm_read_dictionary) Handle reference counts.
6604
6605         * vars-atr.c: (clear_default_dict) New function.
6606         (discard_variables) Use clear_default_dict().
6607
6608 Sun May 31 00:58:05 1998  Ben Pfaff  <blp@gnu.org>
6609
6610         * Makefile.am: Add pfm-write.c.
6611         (LDADD) Add the libgmp2 libraries.
6612
6613         * command.def: Define EXPORT.
6614
6615         * get.c: (cmd_export) New function.
6616         (export_write_case_func) New function.
6617
6618         * pfm-read.c: (static spss2ascii[]) Make it const.
6619
6620         * pfm-write.c: New file.
6621
6622         * sfm-write.c: Formatting, comment fixes.
6623
6624         * var.h: Comment fix.
6625
6626 Fri May 29 21:44:12 1998  Ben Pfaff  <blp@gnu.org>
6627
6628         * Makefile.am: Add pfm.h, pfm-read.c.
6629
6630         * command.def: IMPORT is now implemented.
6631
6632         * format.c: (glob var translate_fmt[]) New var.
6633
6634         * get.c: (enum GTSV_NONE) Renamed GTSV_OPT_NONE.
6635         (cmd_import) New function.
6636         (import_source_read) New function.
6637         (glob var import_source) New var.
6638
6639         * pfm-read.c: New file.
6640
6641         * pfm.h: New file.
6642         
6643         * sfm-read.c: (parse_format_spec) Local variable translate_fmt[]
6644         moved in format.c.
6645         (dump_dictionary) Disabled printing a couple of items.
6646
6647 Mon May 25 12:42:37 1998  Ben Pfaff  <blp@gnu.org>
6648
6649         * crosstabs.q: (postcalc) Call make_summary_table().
6650         (make_summary_table) New function.
6651         (insert_summary) New function.
6652         (display_dimensions) Remove some unnecessary arguments, all
6653         references changed.
6654         (output_pivot_table) Fix lots of problems with the risk table
6655         setup.
6656         (submit) Don't display an empty table.
6657         (display_risk) Fix order of arguments to calc_risk().
6658
6659         * glob.c: Always include assert.h and stdlib.h.
6660
6661         * output.h: (enum OUTP_T_JUST_FULL) Removed, all references
6662         removed.
6663
6664         * tab.c: (tab_create) Cosmetic changes.
6665
6666         * tab.h: (enum TAB_JUSTIFY) Removed, all references removed.
6667
6668 Sun May 24 22:39:23 1998  Ben Pfaff  <blp@gnu.org>
6669
6670         * tab.def: Removed.
6671
6672         * crosstabs.q: (output_pivot_table) Headers drawing and submission
6673         code simplified, moved into new function submit().
6674         (submit) New function.
6675         (crosstabs_dim) New function.
6676         (display_directional) Substitute variable names for %s where
6677         appropriate.
6678         (somers_d_v[], somers_d_ase[], somers_d_t[]) New static vars.
6679         (calc_symmetric) Initialize parameters only if non-NULL.
6680         Calculate Somers' d.
6681         (calc_directional) Calculate Somers' d (or copy it, really).
6682         Calculate eta.
6683
6684         * output.c: (outp_string_width) New function.
6685
6686         * postscript.c: (postopen) Calculate font widths based on the
6687         width of the zero '0' character, not the width of the space
6688         character.  Set paper-width and paper-length based on points, not
6689         device units.
6690         (ps_open_page) Fix page setup string for landscape mode.
6691
6692         * som.h: (struct som_dimension) Removed.
6693         (struct som_table_class) height, width members take int * not
6694         som_dimesion * now.
6695
6696         * tab.c: Many functions now have added parameter validation.
6697         (tab_height, tab_width) These functions were removed and merged
6698         into a single function tab_resize(), and all references changed.
6699         (tab_dim) Rewritten since the interface changed; reduced from
6700         hundreds of lines to two.  All callers were changed.  Currently
6701         most of them just use tab_natural_dimensions as their callback and
6702         await detailed translation of functionality.
6703         (tab_natural_width) New function.
6704         (tab_natural_height) New function.
6705         (tab_natural_dimensions) New function.  This is a callback
6706         function, not something that you'd want to call directly.
6707         (tab_nat_dim) Removed.
6708         (tabi_table) Allocates t->w and t->h.
6709         (tabi_driver) Inlined sum_columns()'s functionality.  Calls the
6710         dimensions callback.
6711         (evaluate_dimensions) Removed.
6712         (sum_columns) Removed.
6713
6714         * tab.h: (enum TAL_1THIN) Removed.
6715         (enum series t_*) Removed.
6716         (struct tab_table) Members trh, trv changed to unsigned char *
6717         from int *.  Member dim changed to a function pointer from a
6718         unsigned char *.  Member max_stack_height removed.  New members
6719         hr_tot, vr_tot.
6720         (macros tab_l, tab_r, tab_t, tab_b) New.
6721
6722 Sat May 23 23:22:13 1998  Ben Pfaff  <blp@gnu.org>
6723
6724         * ascii.c: (delineate) Assign last_space_nchars before skipping
6725         spaces, to fix right justification.
6726
6727         * crosstabs.q: (static vars risk, direct) New vars.
6728         (static var pearson_r) Removed.
6729         (glob var chisq_fisher) Made static.
6730         (static vars row_tot[], col_tot[]) Don't include grand total
6731         anymore.
6732         (static var grand_total) Renamed W, all references changed.
6733         (output_pivot_table) Only make `table' if num_cells != 0.  Make
6734         risk and directional tables.  Deal with grand total no longer part
6735         of col_tot[].  Free rows and cols after we're done with them.
6736         (display_risk) New function.
6737         (display_directional) New function.
6738         (clac_r) Rewritten so that it stores all its results into its
6739         arguments, so it can be used for Spearman's correlation too.
6740         (calc_symmetric) Added a t[] argument, all references changed.
6741         Calculates ASEs for tau-b, tau-c, gamma.  Calculates Spearman's r,
6742         Pearson's r, Cohen's kappa.
6743         (calc_risk) New function.
6744         (calc_directional) New function.
6745
6746         * som.c: (som_submit) Improved debugging code.
6747
6748         * stats.c: (hypercube) New function.
6749         (cube) New function.
6750         (sqr) New function.
6751         (normal_sig) Went back to old implementation, which actually
6752         worked.
6753
6754         * stats.h: (macros square, cube, hypercube) Removed.  The
6755         equivalent functions in stats.c are inlined here; all references
6756         to square changed to sqr.
6757
6758 Fri May 22 00:03:41 1998  Ben Pfaff  <blp@gnu.org>
6759
6760         * crosstabs.q: (N_SYMMETRIC) New define.
6761         (postcalc) Disable debug printing.
6762         (static vars chisq_fisher, pearson_r) New.
6763         (output_pivot_table) Add support for symmetric measures.  Add
6764         chi-square output of exact sigs.
6765         (display_chisq) Rewritten.
6766         (display_symmetric) New function.
6767         (gamma_int) New function.
6768         (Pr) New function.
6769         (swap) New function.
6770         (calc_fisher) New function.
6771         (calc_chisq) Check boundary conditions better. Calculate Yates,
6772         Fisher, Mantel-Haenszel tests.
6773         (calc_r) New function.
6774         (calc_symmetric) New function.
6775
6776         * stats.c: (normal_sig) Rewritten with new algorithm.  Renamed
6777         from calc_normal.
6778         (chisq_sig) Better boundary conditions.  Renamed from
6779         calc_significance.
6780
6781         * tab.h: (struct tab_table) New member cf.
6782
6783         * tab.c: (tab_create) Set cf.
6784         (tab_width) New function.
6785         (tab_realloc) Handle cf.
6786         (tab_vline) Handle cf.
6787         (tab_hline) Handle cf.
6788         (tab_box) Handle cf.
6789         (tab_value) Handle cf.
6790         (tab_float) Handle cf.
6791         (tab_text) Handle cf.
6792         (tab_joint_text) Handle cf.
6793         (tab_offset) Handle cf.
6794         (tab_next_row) Handle cf.
6795         (evaluate_dimensions) Handle cf.
6796         (render_strip) Handle cf.
6797
6798 Wed May 20 00:03:59 1998  Ben Pfaff  <blp@gnu.org>
6799
6800         * crosstabs.q: (postcalc) New vars row_tot, col_tot, pass them to
6801         output_pivot_table().
6802         (output_pivot_table) Moved lots of local variables outside and
6803         made them static.  Add beginnings of chi-square statistic
6804         support.  Now column and row totals aren't in the main matrix.
6805         Always zero out any leftover rows & columns after we're done with
6806         the table entries.  Move all output stuff into
6807         display_dimensions(), display_crosstabs(), display_chisq().
6808         (display_dimensions) New function.
6809         (display_crosstabulation) New function.
6810         (display_chisq) New function.
6811         (calc_chisq) Implemented Pearson and likelihood-ratio chisquares.
6812
6813         * frequencies.q: (dump_full, dump_condensed) Remove tab_null()
6814         references, simplify logic.
6815
6816         * postscript.c: Remove scale, translate-x, translate-y,
6817         mirror-horz, mirror-vert, rotate-180 options.
6818         (struct ps_driver_ext) Remove scale, translate_x, translate_y.
6819         All references deleted.
6820         (macro YT) New macro.
6821         (array option_tab[]) Removed options.
6822         (ps_option) Removed options.
6823         (ps_open_page) Write page setup explicitly to output file, without
6824         using now-deleted BP function.
6825         (macro dump_line) Use YT().
6826         (macro dump_thick_line) Use YT().
6827         (draw_headers) Use YT().
6828         (switch_font) Reorder arguments to SF function.
6829         (write_text) Use YT().
6830
6831         * sfm-read.c: (sfm_read_case) Don't attempt to read variables that
6832         have get.fv == -1.
6833
6834         * sysfile-info.c: (describe_variables) Don't use tab_nulls().
6835
6836         * tab.c: (tab_create) Initialize t->ct to zeros.  Remove
6837         null-debugging code.
6838         (tab_realloc) Remove null-debugging code.  Initialize new regions
6839         of t->ct to zeros.
6840         (tab_vline) Support offsets.
6841         (tab_hline) Support offsets.
6842         (tab_box) Support offsets.
6843         (tab_null) Removed.
6844         (tab_nulls) Removed.
6845         (tab_row) Removed.
6846         (tab_col) Removed.
6847         (evaluate_dimensions) Remove null-debugging code.  Understand
6848         TAB_EMPTY attribute.  Assert that text.s.s is always non-NULL if
6849         TAB_EMPTY not present.
6850
6851         * tab.h: New cell attribute TAB_EMPTY.
6852         (macros tab_nr, tab_nc, tab_row, tab_col) New.
6853
6854         * vars-atr.c: (init_variable) Set get.fv to -1 so that GET doesn't
6855         try to read them from system files.
6856
6857         * vfm.c: (dump_splits) Don't call tab_null().   
6858
6859 Sat May 16 19:36:55 1998  Ben Pfaff  <blp@gnu.org>
6860
6861         * crosstabs.q: (struct crosstab) Added `missing' member.
6862         (custom_tables) Init missing.
6863         (calc_general) Handle missing values.
6864         (calc_chisq) New function.
6865         (output_pivot_table) Start work on chi-square output.  Update for
6866         new tab offset support functions.  Shorten statistic names.
6867
6868         * Several files: add in more `const's to placate gcc's warnings.
6869
6870         * tab.h: (struct tab_table) Add col_ofs, row_ofs members.  Comment
6871         fixes.
6872
6873         * tab.c: (tab_height, tab_realloc, tab_vline, tab_hline, tab_box,
6874         tab_null, tab_nulls, tab_value, tab_float, tab_text,
6875         tab_joint_text) Add col_ofs and row_ofs support.
6876         (tab_offset) New function.
6877         (tab_next_row) New function.
6878         (tab_row) New function.
6879         (tab_col) New function.
6880         (tabi_table) Add col_ofs and row_ofs support.
6881
6882         * vars-atr.c: (is_system_missing) New function.
6883
6884 Tue May 12 16:14:30 1998  Ben Pfaff  <blp@gnu.org>
6885
6886         * crosstabs.q: Expanded subcommand names RESID --> RESIDUAL, etc.
6887         (static var no_cells) Removed.
6888         (static var num_cells) New.
6889         (static var expected) New.
6890         (static var cells[]) New.
6891         (internal_cmd_crosstabs) Deal with new variables.
6892         (postcalc) Removed most of the meat and put it in new function
6893         output_pivot_table().
6894         (output_pivot_table) Calculates and outputs an entire pivot table.
6895
6896         * postscript.c: (postopen) Fix problems with free()ing addresses
6897         not obtained from malloc().
6898
6899         * som.c: (som_submit) Add assertion.
6900
6901         * sysfile-info.c: (describe_variable) Use new tab_nulls()
6902         function.
6903
6904         * tab.c: (static var tab_names[]) New.
6905         (tab_realloc) -1 for nc or nr indicates no change.
6906         (tab_nulls) New function.
6907         (tab_dim) Use tab_names[].
6908         (tabi_cumulate) Don't include bottom or right headers.  Furrfu.
6909         (evaluate_dimensions) Don't terminate on uninited cells, just put
6910         an X in them and emit a notice.  Use tab_names[].
6911
6912         * tab.h: Move bits into tab.def.
6913
6914         * tab.def: New.  Don't try to declare tab_table_class because then
6915         som.h has to be included.       
6916         
6917 Thu May  7 22:55:04 1998  Ben Pfaff  <blp@gnu.org>
6918
6919         * command.def: New file, contains all the command definitions
6920         previously included bodily in command.c.
6921
6922         * format.def: New file, contains all of the format definitions
6923         previously split across format.h, format.c, and sfm-write.c.
6924
6925         * lexer.h: Renamed from tokens.h in order to match corresponding
6926         .c file name.
6927
6928         * lexerP.h: Moved some rarely used functions exported by lexer.c
6929         into here.
6930
6931         * Makefile.am: Commemorate renamed files.
6932         (EXTRA_DIST) Add command.def, format.def.
6933
6934         * command.c: [0] (walk_cmdtable_func) Removed.
6935
6936         * crosstabs.q: (postcalc) Made it work and print out matrices
6937         proving it.
6938         (enum_column_values) Renamed enum_var_values, generalized for any
6939         variable.
6940
6941         * format.h: (struct fmt_desc) New member `spss'.
6942
6943         * q2c.c: (main) Generated code includes lexer.h instead of
6944         tokens.h.
6945
6946         * sfm-write.c: (write_format_spec) Use new spss member of fmt_spec
6947         instead of an independent translation table.
6948
6949 Tue May  5 13:19:03 1998  Ben Pfaff  <blp@gnu.org>
6950
6951         * Lots of source files: Added const to declarations.
6952
6953         * aggregate.c: (parse_aggregate_function) Rename inner i to j.
6954         
6955         * arena.c: (arena_clear) Set prev pointer to null when done.
6956
6957         * ascii.c: (ascii_option) Rename index as indx.
6958
6959         * avl.c: This is now a separate library called libavl.
6960         (xmalloc) Make static.
6961         (avl_probe) Step A7 can use the cache instead of an explicit
6962         compare.
6963         (avl_delete) Don't maintain a q pointer because it's always
6964         available in the pointer stack.  Comment fix.
6965
6966         * avl.h: This is now a separate library called libavl.
6967
6968         * command.c: (cmd_table[]) Remove spurious trailing "".
6969
6970         * common.h: Only include random() fix if this system needs it.
6971
6972         * crosstabs.q: Include alloca headers.
6973         (n_sorted_tab) New global var.
6974         (postcalc) Mostly rewritten.
6975         (find_pivot_extent) Rewritten.
6976         (enum_column_values) Rewritten.
6977
6978         * data-out.c: (convert_F) Rename inner n as n_spaces.
6979
6980         * error.c: (dump_message) Don't have an outer var i.
6981
6982         * file-handle.q: (static var f) Removed.  All references removed.
6983         (internal_cmd_file_handle) Uses a local variable instead of f.
6984
6985         * get.c: (trim_dictionary) Change scope of i, i1, i2.
6986         (cmd_match_files) Don't strcpy tokstr into sbc (why was this ever
6987         done?)
6988
6989         * getline.h: Declare getl_history as extern.  Reported by
6990         palme@uni-wuppertal.de (Hubert Palme).
6991
6992         * postscript.c: (postopen) Some large mods for constness.
6993
6994         * recode.c: Remove spurious copyrights since PSPP is owned by FSF
6995         anyway.
6996
6997 Fri Apr 24 12:52:47 1998  Ben Pfaff  <blp@gnu.org>
6998
6999         * Makefile.am: Rename BUILT_SOURCES to q_sources, all references
7000         changed.  Add avl.c, avl.h to pspp_SOURCES.  Remove avllib from
7001         LDADD.
7002
7003         * avl.c, avl.h: New files.  These form a clean-room
7004         reimplementation of avllib.  Iterative algorithms are used in
7005         place of recursive ones, so there is no resemblance in the code.
7006
7007         * Lots of headers: Don't include other headers by default.
7008
7009         * Lots of source files: Explicitly include all needed headers.
7010
7011         * arena.c: (arena_clear) New function.
7012
7013         * crosstabs.q: (ROW_VAR, COL_VAR) New enums.
7014         (static var ar) Removed.
7015         (staitc vars ar_tc, ar_col) New.
7016         (cmd_crosstabs) Destroy the arenas.
7017         (internal_cmd_crosstabs) Create the arenas.
7018         (precalc) Don't need a free function for the hash.
7019         (calc_general) Make sure to zero out the trailer on the key data
7020         before inserting.
7021         (print_table_entries) Updated.
7022         (postcalc) Worked on actually implementing.
7023         (find_pivot_extent) New function.
7024         (compare_value) New function.
7025         (enum_column_values) New function.
7026
7027         * data-in.c: (parse_month) Make local array `static const'.
7028         
7029         * data-out.c: (convert_date) Make local array `static const'.
7030         (convert_WKDAY) Same.
7031         (convert_MONTH) Same.
7032
7033         * frequencies.q: (postprocess_freq_tab) avl_walk_inorder() has
7034         been renamed to avl_walk().
7035         
7036         * hash.c: Rewritten more efficiently.
7037
7038         * hash.h: Add attribute const to hsh_next_prime declaration.
7039
7040         * lexer.c: (id_match) Make arguments const.
7041
7042         * postscript.c: (ps_postopen_driver) Make default fonts the
7043         Helvetica family.
7044
7045         * q2c.c: (main) Generated code needs stdlib.h.
7046
7047         * sfm-write.c: (write_value_labels) An avl_traverser needs to be
7048         initialized to 0 now, not to NULL.  All other references to
7049         avl_traverser were updated in the same way.
7050
7051         * tokens.h: Macro version of id_match updated to use const
7052         properly.
7053
7054         * val-labs.c: (inc_ref_count) New function.
7055         (copy_value_labels) Simply through use of new avl_copy() function.
7056
7057 Wed Apr 15 13:01:58 1998  Ben Pfaff  <blp@gnu.org>
7058
7059         * crosstabs.q: Probably doesn't compile.  New PIVOT subcommand.
7060         (postcalc) Worked on this.
7061
7062         * postscript.c: (OPO_DOUBLE_LINE) New enum.
7063         (struct ps_driver_ext) New line_width_thick member.
7064         (ps_preopen_drive) Init line_width_thick.
7065         (option_tab[]) Add line-* options.
7066         (ps_option) Parse line-* options.
7067         (postopen) Add line_width_thick support.  Strip leading spaces on
7068         prologue output lines.
7069         (ps_open_page) Include line_width_thick in output.
7070         (macro dump_thick_line) New.
7071         (dump_fancy_line) Support thick lines as well as double lines.
7072
7073 Tue Apr 14 00:50:08 1998  Ben Pfaff  <blp@gnu.org>
7074
7075         * Makefile.am: Add crosstabs.c to BUILT_SOURCES.  Add crosstabs.q
7076         to pspp_SOURCES.  Add crosstabs.q to EXTRA_DIST.
7077
7078         * Many source files: Rename `options' to `pv_opts' as appropriate.
7079
7080         * command.c: (static var cmd_table[]) Add CROSSTABS command.
7081
7082         * common.c: (xcalloc) New function.
7083
7084         * crosstabs.q: New file.  Not finished yet, though.
7085                 
7086         * data-list.c: Comment fix.
7087
7088         * error.c: Remove some old Checker cruft.
7089
7090         * frequencies.q: (dump_full) Cumulate valid percent instead of
7091         regular percent.
7092
7093         * getline.c: Comment fix.
7094
7095         * hash.c: Comment fixes.
7096
7097         * hash.h: (struct hsh_table) Make hash functions return unsigned
7098         instead of int to avoid problems with taking the modulo of
7099         negative return values.  All references changed.
7100
7101         * misc.c: (intlog10) Make its table static const instead of auto.
7102
7103         * sfm-read.c: (read_header) Make `prefix' static const instead of
7104         auto.
7105
7106         * var.h: (union value) Add member `hash'.
7107         (struct variable) Rename prv_index as `foo'--all references
7108         changed.  Reorder.
7109         (typedef pv_opts) Removed.  All references changed.
7110
7111         * vars-prs.c: (parse_variables) Message fixes.
7112         
7113 Mon Mar  9 15:35:08 1998  Ben Pfaff  <blp@gnu.org>
7114
7115         * get.c: (cmd_match_files) Don't reverse the order of FILEs as
7116         they are being inserted.  Don't check for BY variables of
7117         different types.  Discard variables if the active file isn't
7118         included in the merge.
7119         (mtf_processing) Essentially rewritten.
7120         (mtf_merge_dictionary) Check for master/slave variables of
7121         different types/widths.
7122
7123         * vfm.c: (static var not_canceled) New var.
7124         (process_active_file) Don't call vfm_source->read() if
7125         there's no vfm-source.  Initialize not_canceled.
7126         (process_active_file_write_case) Honor and update not_canceled.
7127         (prepare_for_writing) Rollback changes from yesterday, they were
7128         wrong.
7129         (close_active_file) Don't destroy vfm_source unless it exists.
7130         
7131 Mon Mar  9 00:56:16 1998  Ben Pfaff  <blp@gnu.org>
7132
7133         * Lots of source files: Added { } around nested if/else constructs
7134         to avoid new gcc 2.8 warnings.
7135
7136         * data-in.c: (parse_Z) Declare `int' type explicitly.
7137         (convert_Z) Ditto.
7138
7139         * get.c: (struct mtf_file) Add prev, next_min, by, input members.
7140         (cmd_match_files) Initialize mtf_by_values.  Manage by, input,
7141         prev members.  Put TABLEs at the end of the chain and FILEs at the
7142         beginning.  Don't allow the active file in STATE_INIT.  Use proper
7143         `seen' value for the active file.  Fill out the by members and
7144         make sure they're of consistent type.  Do the actual merge
7145         operation.
7146         (mtf_processing_finish) New function.
7147         (var_type_description) New function.
7148         (mtf_free_file) New function.
7149         (mtf_free) Rewritten.
7150         (mtf_delete_file_in_place) New function.
7151         (mtf_read_nonactive_records) New function.
7152         (mtf_compare_BY_values) New function.
7153         (static var mtf_seq_no) New var.
7154         (mtf_processing) New function.
7155         (mtf_merge_dictionary) Assign nval members for the system file
7156         dictionary.  Assign fv values for its variables.  Point each slave
7157         variable to the corresponding master variable.
7158
7159         * hash.c: Include str.h.
7160
7161         * mis-val.c: (copy_missing_values) src arg is const.
7162
7163         * misc.c: (spacing) Make `max' var explicitly int.
7164
7165         * sfm-read.c: (dump_dictionary) Message reformatting.
7166         (sfm_read_case) Add assertion.
7167
7168         * sort.c: Esthetic fixes.
7169
7170         * var.h: (struct match_files_proc) New struct.
7171         (struct variable) Add private data match_files_proc.
7172
7173         * vars-atr.c: (delete_variable) Implement.  Add argument for the
7174         dictionary that owning the variable.
7175         (dup_variable) Add assertion.
7176
7177         * vfm.c: Comment fixes, hopefully the comments are correct now.
7178         (process_active_file) New function.
7179         (process_active_file_write_case) New function.
7180         (process_active_file_output_case) New function.
7181         (prepare_for_writing) Use temp_dict->nval for vfm_info, not
7182         default_dict.nval.
7183         (write_case) Renamed procedure_write_case().  Now write_case is a
7184         pointer to a function.  Style fixes.
7185         
7186 1998-03-05  Ben Pfaff  <blp@gnu.org>
7187
7188         * Makefile.am: (q2c) Link with libmisc.
7189         (version.c) Define default_config_path, include_path,
7190         groff_font_path.
7191
7192         * ascii.c: (ascii_postopen_driver) When the default newline string
7193         is requested, open file in text mode.  Suggested by
7194         palme@uni-wuppertal.de (Hubert Palme).
7195         (static vars line_buf, line_p) Change from char * to unsigned char
7196         *.
7197         (ascii_close_page) char * to unsigned char *.
7198
7199         * cmdline.c: (parse_command_line) Implement -r option by
7200         prepending ~/.pspp/rc to the list of files to process.
7201
7202         * command.c: (cmd_remark) Reset getl_prompt to the standard prompt
7203         before pulling in a final line.
7204         (null_func, null_int_func) Removed (dead code).
7205
7206         * descript.q: (display) Calculate width of variable name column
7207         properly.  Calculate number of valid cases properly.  Reported by
7208         palme@uni-wuppertal.de (Hubert Palme).
7209
7210         * filename.c: (init_filename) Use default_config_path instead of
7211         now obsolete CONFIG_PATH.
7212
7213         * getline.c: (getl_initialize) Use include_path instead of now
7214         obsolete INCLUDE_PATH.
7215         (getl_add_file) New argument `where'.  All references changed.
7216
7217         * groff.c: (find_font_file) Use groff_font_path instead of now
7218         obsolete GROFF_FONT_PATH.
7219         
7220         * postscript.c: (find_ps_file) Use groff_font_path instead of now
7221         obsolete GROFF_FONT_PATH.  Copy through temporary variable to
7222         avoid problems with constness.
7223
7224         * str.h: (macro cs_streq) New macro.
7225
7226         * version.h: (glob var default_config_path, include_path,
7227         groff_font_path) New vars.
7228         
7229 1998-02-23  Ben Pfaff  <blp@gnu.org>
7230
7231         * Many source files: Change verbose_msg() priority levels and
7232         messages.
7233
7234         * aggregate.c: Include debug-print.h.
7235
7236         * cmdline.c: (parse_command_line) Add --safer/-s and --command/-c
7237         options.
7238         (static var pre_syntax_message) Document --safer/-s and
7239         --command/-c.
7240
7241         * command.c: (cmd_erase, cmd_host) Disable if set_safer is set.
7242
7243         * dfm.c: (open_inline_file) [__CHECKER__] Zero out ext->file,
7244         because it's not used but it's still copied.
7245         (open_file_r) Remove gratuitous debug message.
7246
7247         * filename.c: (safety_violation) New function.
7248         (open_file) Remove gratuitous debug messages.  Don't allow pipe
7249         files if set_safer is set.
7250
7251         * get.c: Turn off debugging.
7252
7253         * getline.c: (getl_add_virtual_file) New function.
7254         (getl_read_line) Add verbose_msg() call for opening new syntax
7255         file.
7256         (getl_perform_delayed_reset) Add a return value describing whether
7257         any action was taken.  Call reset_eof().
7258
7259         * getline.h: Comment fix.
7260
7261         * groff-font.c: (groff_read_font) Use `goto next_iteration' in
7262         place of incorrect `continue'.  Use strtok_r() instead of
7263         strtok().  Always check strtok_r() return value.
7264         (groff_read_DESC) Use strtok_r() instead of strtok().
7265
7266         * lexer.c: (reset_eof) New function.
7267
7268         * main.c: (parse) Get a token after performing a delayed reset
7269         action; allow empty syntax files.
7270
7271         * postscript.c: (output_encodings) Use strtok_r() instead of
7272         strtok().
7273
7274         * q2c.c: (dump_parser) Use strtok_r() instead of strtok().
7275
7276         * set.q: Comment fixes.
7277         (glob var set_safer) New var.
7278         (internal_cmd_set) Support SAFER.
7279
7280         * str.h: [!HAVE_STRTOK_R] Declare strtok_r() prototype.
7281
7282         * temporary.c: (free_dictionary) Set d->splits to NULL after
7283         freeing.
7284
7285         * vars-atr.c: (clear_variable) Decrement dict->n_splits if
7286         variable deleted, not if it *isn't* deleted.
7287
7288 1998-02-16  Ben Pfaff  <blp@gnu.org>
7289
7290         * command.c: (array cmd_table[]) Add MATCH FILES.
7291
7292         * common.c: Comment fixes.
7293
7294         * data-list.c, dfm.c, error.c, filename.c, list.q, matrix-data.c,
7295         modify-vars.c, postscript.c, sfm-read.c, sfm-write.c, tab.c:
7296         Include alloca.h.  Problem reported by palme@uni-wuppertal.de
7297         (Hubert Palme).
7298
7299         * expr-opt.c: Include str.h.  Problem reported by
7300         palme@uni-wuppertal.de (Hubert Palme).
7301
7302         * get.c: (cmd_get) [DEBUGGING] Update v->p.get to v->get.
7303         (static var mtf_by) Change from char ** to variable **.
7304         (static var mtf_master) New var.
7305         (mtf_merge_dictionary) New function.
7306         (cmd_match_files) Init mtf_master.  Parse mtf_by according to new
7307         var type.  Reorder tests properly.  Initialize file->dict.  Detect
7308         TABLE= without BY=.  Read file dictionaries and merge them.  Give
7309         subcommand name with IN, LAST, FIRST error messages.  Create IN,
7310         LAST, FIRST variables.  Comment fixes.
7311         (mtf_free) Don't free default_dict.  Free mtf_master.
7312
7313         * getline.c: Define getl_mode.  Change getl_buf_size to size_t
7314         from int.
7315         (handle_line_buffer) Cast int to size_t in comparison to avoid
7316         warning.
7317
7318         * getline.h: Declare getl_mode extern.
7319
7320         * groff-font.c: (groff_read_font) Type-fix calls to getline.
7321         (groff_read_DESC) Make line_size a size_t.
7322         (match_tok) Parenthesize name to avoid macro expansion.
7323
7324         * mis-val.c: (copy_missing_values) New function.
7325
7326         * postscript.c: (postopen) Make buf_size a size_t.
7327
7328         * sfm-read.c: (dump_dictionary) Make global from static.  Print
7329         variable info in parts for easier debugging with Checker.
7330
7331         * temporary.c: (copy_variable) Use copy_value_labels().
7332         (new_dictionary) New arg: whether to copy file label, documents.
7333
7334         * val-labs.c: (copy_value_labels) New function.
7335
7336         * var.h: (enums MISSING_*) Add MISSING_COUNT.
7337
7338         * vars-atr.c: [GLOBAL_DEBUGGING] (force_dup_variable) New
7339         function.
7340         (dup_variable) Set prv_index, get.fv, get.nv.
7341
7342 Fri Feb 13 15:38:36 1998  Ben Pfaff  <blp@gnu.org>
7343
7344         * Makefile.am: (pspp_SOURCE) Add htmlP.h.
7345
7346         * Many source files: For ANSI-compliance, add empty statement
7347         after label.  Reported by palme@uni-wuppertal.de (Hubert Palme)
7348         and Micah Altman <maltman@www-vdc.fas.harvard.edu>.
7349
7350         * data-in.c: (parse_numeric) Some header files break on
7351         -DBL_MIN_10_EXP because they get a --; add () for safety.
7352         Reported by palme@uni-wuppertal.de (Hubert Palme).
7353
7354         * dfm.c: Idea by Dr Eberhard W Lisse <el@linux.lisse.na>.
7355         (struct dfm_fhuser_ext) Change `file' from FILE * to file_ext.
7356         (dfm_close) Use close_file_ext.
7357         (open_inline_file) Set file.file to NULL, not file.
7358         (open_file_r, open_file_w) Initialize file.file; fill in file_ext
7359         struct and use open_file_ext().
7360         (read_record) Use file.file.
7361
7362         * file-handle.q: (prepend_current_directory) Pass through special
7363         filenames.
7364
7365         * filename.c: Only include unistd.h if HAVE_UNISTD_H.
7366         (normalize_filename) Pass through special filenames.
7367         (open_file, close_file) Accept pipe| and |pipe syntaxes as
7368         equivalent.
7369         (dirname) Rename blp_dirname() because of name conflict on some
7370         OS.  All references changed.  Reported by palme@uni-wuppertal.de
7371         (Hubert Palme).
7372         (is_special_filename) New function.
7373
7374         * get.c: (GTSV_OPT*) Add GTSV_OPT_MATCH_FILES.
7375         (trim_dictionary) Conditionalize some of the options on whether
7376         GTSV_OPT_MATCH_FILES is in *options.
7377         (rename_variables) Don't allow variables to be renamed as scratch
7378         variables.
7379         (MTF_*) New enum series.
7380         (struct mtf_file) New struct.
7381         (static vars mtf_head, mtf_tail, mtf_by, mtf_n_by, mtf_free) New
7382         vars.
7383         (cmd_match_files, mtf_free) New functions.
7384
7385         * lexer.c: (match_int) Needed parentheses around name to escape
7386         macro expansion.  Reported by Micah Altman
7387         <maltman@www-vdc.fas.harvard.edu>.
7388
7389         * print.c: Needed to include alloca.h.  Reported by Micah Altman
7390         <maltman@www-vdc.fas.harvard.edu>.
7391
7392         * recode.c: (convert_to_double) Parenthesize -DBL_MIN_10_EXP to
7393         -(DBL_MIN_10_EXP).  Reported by palme@uni-wuppertal.de (Hubert
7394         Palme).
7395         
7396         * str.h: Include stdarg.h.  Reported by palme@uni-wuppertal.de
7397         (Hubert Palme) and Micah Altman <maltman@www-vdc.fas.harvard.edu>.
7398
7399 Thu Feb  5 00:18:21 1998  Ben Pfaff  <blp@gnu.org>
7400
7401         * html.c: (struct html_driver_ext) Move into htmlP.h.
7402         (html_preopen_driver) Initialize cp_x, cp_y.
7403         (html_submit) Implement as call to output_tab_table().
7404         (change_attributes) New function.
7405         (escape_string) New function.
7406         (output_tab_table) New function.
7407
7408         * list.q: (write_all_headers) Add code for writing headers for the
7409         html driver.
7410         (clean_up) Write out the html close-table tag.
7411         (determine_layout) Ignore html driver.
7412         (list_cases) Write html data.
7413
7414         * som.c: (som_submit) Move more of the code into output_table().
7415
7416         * tab.c: (static var hit) Make a global var and rename tab_hit.
7417         (static var tab_table_class) Make a global var.
7418
7419         * htmlP.h: New file.
7420
7421 Tue Feb  3 16:12:18 1998  Ben Pfaff  <blp@gnu.org>
7422
7423         * dump-sysfile.c: Removed.
7424
7425         * html.c: (preclose) Change comment in emitted code.
7426
7427         * matrix-data.c: Debugging off by default.  Comment fixes.
7428         (static var container) New var.
7429         (cmd_matrix_data) Create and destroy container.  Initialize
7430         is_per_factor[] to 0s.  Move code into new function
7431         string_to_content_type().  Require split values to be present in
7432         the data when ROWTYPE_ is explicit.  Call specific function, not
7433         general read_matrices().
7434         (string_to_content_type) New function.
7435         (context) Exclude all whitespace, not just spaces.
7436         (mget_token) A dot is a number.  Add assertion.
7437         (static var data) Renamed nr_data.
7438         (static var factor_values) Renamed nr_factor_values.
7439         (read_matrices) Renamed read_matrices_without_rowtype().  Handle
7440         only specific case.  Close data_file before exit.
7441         (fill_matrix) New function.
7442         (read_data_lines) Renamed nr_read_data_lines().  Remove debug
7443         printing.  Style fixes.  Message fixes.  Move code into
7444         fill_matrix().
7445         (read_matrices_without_rowtype) Rename
7446         matrix_data_read_without_rowtype().  Fix off-by-one error on
7447         loops.  Allocate nr_data[] memory from arena.
7448         (read_matrices_with_rowtype) Removed.
7449         (read_splits) Renamed nr_read_splits().  Style fixes.
7450         (read_factors) Renamed nr_read_factors().
7451         (dump_cell_content) Comment fixes.  Arguments changed.  Change
7452         debug printing.  All references changed.
7453         (output_data) Renamed nr_output_data().
7454         (static var wr_content) New var.
7455         (struct factor_data) New struct.
7456         (static var wr_data) New var.
7457         (static var wr_current) New var.
7458         (matrix_data_source_destroy_source) Removed.
7459         (read_matrices_with_rowtype) New function.
7460         (matrix_data_read_with_rowtype) New function.
7461         (wr_read_splits) New function.
7462         (compare_factors) New function.
7463         (wr_output_data) New function.
7464         (wr_read_rowtype) New function.
7465         (wr_read_factors) New function.
7466         (wr_read_indeps) New function.
7467         (glob var matrix_data_source) Make destroy_source member NULL as
7468         well.
7469
7470 Fri Jan 23 00:09:08 1998  Ben Pfaff  <blp@gnu.org>
7471
7472         * lexer.c: (syntax_error) Give better error message when at end of
7473         file.
7474
7475         * matrix-data.c: (var content_names[]) Fix PROX spelling.  Change
7476         N_SCALAR to output as plain N.
7477         (mdump_token) Change output format.
7478         (context) Fix message output interaction with spaces in input.
7479         (another_token) New function.
7480         (force_eol) Improved error message.
7481         (static var max_cell_index) New var.
7482         (read_matrices) Init `cells'.  factor_values is now per-cell.
7483         Init max_cell_index.
7484         (read_data_lines) Replace `compare' local with new `compare' arg.
7485         Debugging messages changed.  Only read factors if per_factor.
7486         Propagate error return from read_factors(), force_eol().
7487         Copy N_SCALAR values across the N vector.
7488         (read_matrices_without_rowtype) Don't init `cells'.  Don't need to
7489         check parentheses manually since we now have is_per_factor[].
7490         Call read_data_lines() with new args.  Check for end of data after
7491         looping, using another_token().
7492         (read_factors) Arguments changed.  Use max_cell_index to determine
7493         whether to read or compare factors.  Message fixes.
7494         (dump_cell_content) New function.
7495         (output_data) Completely rewritten because content types were
7496         supported to be nested inside factor values, not vice versa.
7497         
7498 Thu Jan 22 00:26:38 1998  Ben Pfaff  <blp@gnu.org>
7499
7500         * lexer.c: (syntax_error) Support formatted varargs messages.
7501
7502         * matrix-data.c: Turn debugging on by default.
7503         (static content_type[]) New array.
7504         (static content_names[]) New array.
7505         (static rowtype_, varname_) New vars.
7506         (static is_per_factor[]) New array.
7507         (static split_values) Moved declaration.
7508         (static n_continuous, first_continuous) New var.
7509         (cmd_matrix_data) Don't init split_values.  Assign ROWTYPE_ to
7510         rowtype_.  Simplify SPLIT code.  Init is_per_factor[].  Assign
7511         VARNAME_ to varname_.  Initialize first_continuous, n_continuous.
7512         Check for continuous variables.
7513         [DEBUGGING] (debug_print) Remove content_names[].
7514         (mdump_token) New macro.
7515         (mget_token_dump) New function.
7516         (mdump_token) New function.
7517         (context) New function.
7518         (mget_token) Fix messages.
7519         (static var data, split_values, factor_values) New vars.
7520         (read_matrices) Manage split_values, factor_values.
7521         (read_data_lines) New function.
7522         (read_matrices_without_rowtype) Implemented.
7523         (read_splits) Message fixes.  Uses `just_read'.
7524         (read_factors) New function.
7525         (output_data) New function.
7526         (matrix_data_source_destroy_source) Close the file handle.
7527         (glob var matrix_source) Change name from "DATA LIST" to "MATRIX
7528         DATA".
7529
7530         * str.c: (strpadcmp) Removed.
7531
7532         * vfm.c: (dump_splits) Initialize i; fix test for end of splits.
7533
7534 Sun Jan 18 00:30:59 1998  Ben Pfaff  <blp@gnu.org>
7535
7536         * Lots of source files: Add cast to unsigned character to calls to
7537         tolower() and toupper().
7538
7539         * aggregate.c: Set default_dict.splits to NULL.
7540
7541         * command.c: (static variable tab[]) Add MATRIX DATA.
7542
7543         * data-in.c: Add debugging defines.  Formatting fixes.
7544
7545         * expr-opt.c: Formatting fixes.
7546
7547         * lexer.c: (syntax_error) Message fixes.
7548
7549         * matrix-data.c: New enum series.
7550         (static vars fmt, section, diag, explicit_rowtype, signle_split,
7551         split_values, n_factors, factors, cells, pop_n, contents,
7552         n_contents) New vars.
7553         (cmd_matrix_data) Finished implementation.
7554         (compare_variables_by_mxd_vartype) New function.
7555         [DEBUGGING] (debug_print) New function.
7556         (static vars mtoken, mtokstr, mtoklen, mtokval) New vars.
7557         (read_matrices) New function.
7558         (read_matrices_without_rowtype) New function.
7559         (read_matrices_with_rowtype) New function.
7560         (read_splits) New function.
7561         (mget_token) New function.
7562         (force_eol) New function.
7563         [0] (test_tokenizer) New function.
7564         (matrix_data_source_destroy_source) New function.
7565         (glob var matrix_data_source) New var.
7566
7567         * misc.h: Include ieeefp.h if present.
7568
7569         * split-file.h: (cmd_split_file) Changes corresponding to struct
7570         dictionary changes.
7571
7572         * str.h: Fix memmem prototype.
7573
7574         * temporary.c: (save_dictionary, restore_dictionary,
7575         free_dictionary) Changes corresponding to struct dictionary
7576         changes.
7577
7578         * var.h: (MXD_* enums) New enum series.
7579         (struct matrix_data_proc) New struct.
7580         (struct split) Removed.
7581         (struct dictionary) Changed `splits' member from `split *' to
7582         `variable **'.
7583         (macro force_create_variable) New macro.  Replaced lots of
7584         create_variable()/assert() calls with calls to this macro.
7585
7586         * vars-atr.c: (discard_variables) Changed assertion.
7587         [GLOBAL_DEBUGGING] (force_create_variable) New function
7588         called by the macro of the same name.
7589         (clear_variable) Changes to delete splits from the dictionary
7590         corresponding to struct dictionary changes.
7591
7592         * vars-prs.c: (parse_variables) [GLOBAL_DEBUGGING] Check for
7593         corrupted variable `index' values in the dictionary passed in
7594         every time this function is called.
7595
7596         * vfm.c: (dump_splits, SPLIT_FILE_procfunc) Changes corresponding
7597         to struct dictionary changes.
7598
7599 Tue Jan 13 23:45:02 1998  Ben Pfaff  <blp@gnu.org>
7600
7601         * Makefile.am: (pspp_SOURCES) Add matrix-data.c.
7602
7603         * command.c: New includes.
7604         (static array cmd_table[]) Add ERASE, HOST, NEW FILE.
7605         (cmd_erase) New function.
7606         [unix] (shell) New function.
7607         (run_command) New function.
7608         (cmd_host) New function.
7609         (cmd_new_file) New function.
7610
7611         * expr-prs.c: (parse_primary) Message fix.
7612
7613         * inpt-pgm.c: Formatting fix.
7614         (cmd_reread) Implement the FILE subcommand.
7615
7616         * matrix-data.c: New file.
7617
7618         * q2c.c: (dump_header) Change output commenting style.
7619
7620         * weight.c: Comment fix.
7621
7622 Tue Jan 13 00:53:39 1998  Ben Pfaff  <blp@gnu.org>
7623
7624         * aggregate.c: (buf64_10x) Renamed buf64_1xx, all references
7625         changed.
7626         (buf_10x) Renamed buf_1xx, all references changed.
7627         (cmd_aggregate) Implemented cases 010, 011, 110, and 111 (all
7628         cases now implemented).
7629         (create_sysfile) New function.
7630         (agr_11x_func) New function.
7631
7632         * data-in.c: (parse_numeric) Work properly if there's an
7633         explicitly coded decimal point in the data and decimal places are
7634         specified on DATA LIST.  Bug reported by Dr Eberhard W Lisse
7635         <el@linux.lisse.na>.
7636
7637         * get.c: (cmd_get, cmd_save_internal) Allow extraneous slash
7638         before file specification on GET, SAVE, XSAVE.  Bug reported by Dr
7639         Eberhard W Lisse <el@linux.lisse.na>.
7640
7641         * q2c.c: [!HAVE_STRERROR] Include misc/strerror.c, not
7642         strerror.c.  Bug reported by Alexandre Oliva
7643         <oliva@dcc.unicamp.br>.
7644
7645         * sort.c: Include sort.h.  Comment fixes.  A few esthetic fixes.
7646         (static var separate_case_tab) New var.
7647         (cmd_sort_cases) Cancel temporary transformations here.  Free
7648         v_sort before return.
7649         (sort_cases) Run an EXECUTE procedure if SEPARATE is nonzero and
7650         we're reading from a sort stream.  Don't cancel temporary
7651         transformations.  Offload internal sorting to do_internal_sort().
7652         (do_internal_sort) New function.  Handles internal sorting even
7653         when SEPARATE is nonzero.  Doesn't free v_sort.
7654         (do_external_sort) Take new arg SEPARATE.  Only destroy `x' if
7655         it's non-NULL.
7656         (write_initial_runs) Take new arg SEPARATE.  Only destroy the old
7657         sink if SEPARATE is zero.
7658         (read_output_cases) Renamed read_sort_output(), all references
7659         changed.  Now uses separate_case_tab when it exists.
7660         (write_separate) New function.
7661
7662         * vfm.c: (page_to_disk) Destroy memory_source_cases, not
7663         memory_sink_cases.  Don't redundantly call
7664         vfm_source->destroy_source().
7665         (memory_stream_mode) After switching over, set memory_sink_cases
7666         to NULL.
7667
7668 Sat Jan 10 23:35:51 1998  Ben Pfaff  <blp@gnu.org>
7669
7670         * aggregate.c: (struct agr_var) Expand dbl[] array from 2 to 3
7671         elements.
7672         (static var prev_case) New, moved out of aggregate_single_case()
7673         local scope.
7674         (static var buf64_10x, buf_10x) New.
7675         (cmd_aggregate) Initialize prev_case.  Comment fixes.  Implement
7676         the 000, 001, 100, and 101 cases.  Free prev_case.
7677         (parse_aggregate_functions) Disallow scratch variables.
7678         (free_aggregate_functions) Only free agr_dict if non-null.  Use
7679         iter->function to determine numeric/string type, not
7680         iter->src->type.
7681         (aggregate_single_case) Don't manage prev_case.  Initialize
7682         aggregate info after dumping it.
7683         (accumulate_aggregate_info) Fix sum, weighted sum, mean, weighted
7684         mean, stddev, weighted stddev definitions.
7685         (dump_aggregate_info) Implemented.
7686         (initialize_aggregate_info) Renamed from
7687         initialize_aggregate_functions().  Initializes dbl[2].
7688         (agr_00x_trns_proc, agr_00x_end_func, write_case_to_sfm,
7689         agr_10x_trns_proc, agr_10x_trns_free, agr_10x_end_func) New.
7690
7691         * cases.c: (alloc_val) Removed.
7692
7693         * get.c: (cmd_save_internal) Initialize new `dict' member.
7694
7695         * sfm-write.c: (sfm_write_dictionary, write_header,
7696         write_variable, write_value_labels, write_documents) Reorganize,
7697         simplify for new parameter structure.
7698         (write_variable) Only one variable * argument now.
7699
7700         * sfm.h: (struct sfm_write_info) Removed `pri', `sec', and
7701         replaced by new `dict' member.
7702
7703         * temporary.c: (new_dictionary) Initialize n_documents.
7704
7705         * vars-atr.c: (dup_variable) Allocate `value's from dict into
7706         v->fv manually.
7707         (init_variable, replace_variable) Eliminate usage of alloc_val().
7708
7709         * vars-prs.c: (parse_DATA_LIST_vars) Accept PV_NO_SCRATCH option.
7710
7711         * vfm.c: (arrange_compaction) Allow `temporary' value of 2 to
7712         signal that AGGREGATE is to be used for forming final cases.
7713         (close_active_file) Call end_func before stopping lagging.  Cancel
7714         temporary after finishing compaction.
7715         (write_case) Comment fixes.  Cleaned up.
7716         (compact_case) Let AGGREGATE handle compaction when `temporary' is
7717         2.
7718
7719 Sat Jan 10 02:10:47 1998  Ben Pfaff  <blp@gnu.org>
7720
7721         * Makefile.am: (BUILT_SOURCES) Add means.c.
7722         (pspp_SOURCES) Add means.c.
7723         (EXTRA_DIST) Add means.q.
7724
7725         * command.c: (array cmd_table[]) Add MEANS.
7726
7727         * common.h: Esthetic fixes.  Comment fixes.  Test for
7728         MAX_SHORT_STRING greater than 8.
7729         (macros LOWEST, HIGHEST) New.
7730
7731         * data-in.c, data-list.c, recode.c: Comment fixes.
7732
7733         * means.q: New file, base version.
7734
7735         * mis-val.c: (parse_num_or_range, parse_numeric) Replace -DBL_MAX
7736         with LOWEST, DBL_MAX with HIGHEST.
7737
7738         * q2c.c: (dump_vars) Add an enum to array types giving the number
7739         of values for the enum.
7740
7741         * sfm-read.c: (sfm_read_dictionary, read_machine_flt64_info)
7742         Replace second_lowest_value with second_lowest_flt64.
7743
7744         * sfm-write.c: (write_variable, write_rec_7_34) Replace
7745         second_lowest_value with second_lowest_flt64.
7746
7747         * t-test.q: Comment fix.
7748
7749         * temporary.c: (restore_dictionary) Esthetic fix.
7750
7751         * tokens.h: (force_match_id, force_match, force_string, force_int,
7752         force_num, force_id) Replace msg() with syntax_error().
7753
7754         * var.h: (struct means_proc) New.
7755         (struct variable) Add mns member to `p' union.
7756
7757         * vars-prs.c: (parse_variable, parse_dict_variable,
7758         parse_variables, parse_DATA_LIST_vars) Replace msg() with
7759         syntax_error().
7760
7761 Thu Jan  8 22:28:41 1998  Ben Pfaff  <blp@gnu.org>
7762
7763         * Makefile.am: (pspp_SOURCES) Add tab.h.
7764
7765         * Most source files: Added a cast to unsigned char in usages of
7766         the ctype is*() functions.  Replaced `end of command expected'
7767         calls to msg() with calls to syntax_error().
7768
7769         * frequencies.q: (dump_condensed) Fix tab_dim() column reference.
7770
7771         * lexer.c: (hex_val) Removed (was dead code).
7772         (idmatch) Parenthesize function name to avoid macro expansion.
7773
7774         * postscript.c: Comment fixes.
7775         (ps_preopen_driver) Change default font size to 10pt.
7776
7777         * sfm-read.c: (read_variables) Byteswap sv.print, sv.write as
7778         int32s.
7779         (parse_format_spec) Change system-file format spec argument type
7780         to int32.  Parse the format spec with bitwise operators.
7781
7782         * sfmP.h: (struct sysfile_format) Removed.
7783         (struct sysfile_variable) Changed print, write members from
7784         sysfile_format to int32.
7785
7786         * tokens.h: Esthetic fixes.
7787         [__GNUC__] (macro id_match) New macro to hopefully speed up
7788         identifier matching.
7789         (macros match_id, match_tok, match_int) Implemented in
7790         compiler-independent manner; no longer GNU C only.
7791
7792         * vfm.h: Include time.h.
7793
7794 Mon Jan  5 11:06:15 1998  Ben Pfaff  <blp@gnu.org>
7795
7796         * data-list.c: (dump_fixed_table) Change tab_dim().
7797
7798         * dump-sysfile.c: (open_sysfile) Fix mmap() call.
7799
7800         * error.c: Include command.h.
7801
7802         * frequencies.g: Formatting fixes.
7803
7804         * frequencies.q: Add tab_dim() calls.  Make the total cell a
7805         joined cell.
7806
7807         * glob.c: Include command.h.
7808
7809         * sfm-read.c: (struct sfm_fhuser_ext) New members sysmis, highest,
7810         lowest.
7811         (sfm_read_dictionary) Initialize sysmis, highest, lowest.
7812         (sfm_read_machine_flt64_info) Update sysmis, highest, lowest.
7813         (read_variables) Byteswap sv.type; byteswap sv.print, sv.write as
7814         the other elements (is this right?).
7815         (read_variables) Use lowest, highest members.
7816         (parse_format_spec) New arg `vv' for more stringent checking.
7817         (dump_dictionary) Byteswaps nonexplicit data.
7818         (sfm_read_case) Byteswap numeric data.
7819
7820         * som.c: Initialize table_num to 1.
7821         (render_segments) Remember to increment y_index after each table
7822         segment.
7823
7824         * sysfile-info.c: (cmd_sysfile_info) Change tab_dim().  Don't call
7825         avl_count() on a NULL tree.  No title for the second table.
7826         (cmd_display) Handle DISPLAY VECTORS by calling display_vectors().
7827         Handle AS_SCRATCH as AS_NAMES.  Warn if no variables.  Re-enable;
7828         fix call to display_variables().
7829         (display_variables) Default to 4 columns, not 3.  Set up headers.
7830         Column title is Variable, not Name.  Fix index column.
7831         Add joint text.  Add tab_dim().  Handle value labels properly.
7832         Handle DISPLAY LABELS properly.  Draw boxes correctly.
7833         (describe_variable) Value labels don't need titles.  Don't clear
7834         nonexistent index column.
7835         (compare_vectors_by_name) New function.
7836         (display_vectors) New function.
7837
7838         * tab.c: (tab_height) Add assertion.
7839         (tab_null) Add debug code.
7840         (evaluate_dimensions) Add debug code.
7841
7842         * var.h: (struct variable) get_proc data is sometimes used
7843         simultaneously with other per-procedure info, therefore it was
7844         removed from the union.  All references changed.        
7845
7846 Sun Jan  4 18:13:33 1998  Ben Pfaff  <blp@gnu.org>
7847
7848         * ascii.c: (ascii_close_page) Put title on second line of headers
7849         if there is no subtitle.
7850
7851         * command.c: (glob var cur_proc) Move definition here, from
7852         common.c.
7853         (cmd_remark) Emit blank line before remarks.
7854
7855         * command.h: (glob var cur_proc) Move declaration here, from
7856         common.h.
7857
7858         * data-list.c: (dump_fixed_table) Fix messages.
7859         (dump_free_table) Call tab_nat_dim().
7860
7861         * descript.q: (dump_z_table) Modify tab_dim() call.
7862
7863         * frequencies.q: (dump_condensed, dump_statistics) Add tab_dim()
7864         call.
7865         (dump_statistics) Don't output header.
7866
7867         * groff-font.c: Minor format fix.
7868
7869         * html.c: Comment fix.
7870
7871         * list.q: (write_varname) Indent after advancing page.
7872
7873         * output.h: Minor reordering.
7874
7875         * postscript.c: Comment fixes.  Many places, '\n' was replaced by
7876         a reference to eol[].
7877         (struct ps_driver_ext) New member eol[].
7878         (ps_preopen_driver) Initialize eol[].
7879         (ps_postopen_driver) Fix sense of text for text_opt, line_opt
7880         defaults.  Handle headers.  Fix test for minimum page length.
7881         (static var option_tab[]) Add `line-ends'.
7882         (ps_option) Handle line-ends to change eol[].
7883         (postopen) Scale prop_em_width and fixed_width properly.  Set the
7884         prologue title to outp_title if applicable.  Replace the prologue
7885         line ends with eol[].  Call draw_headers() if headers are enabled.
7886         (text_width) New function.
7887         (out_text_plain) New function.
7888         (draw_headers) New function.
7889
7890         * print.c: (dump_table) Call tab_nat_dim().
7891
7892         * som.c: (som_blank_line) Only advance a line if not at the top of
7893         a page.
7894         (som_submit) Move several informational table calls here.
7895         Increment subtable_num if SOMF_NO_TITLE not set.
7896         (output_table) Advance a line if SOMF_NO_SPACING not set.
7897         (render_columns, render_segments, render_simple) Handle spacing
7898         between tables.  Handle table titles.  Remove debug output.
7899
7900         * som.h: (SOMF_*) New enum series.
7901         (struct som_table_class) New member `flags'.
7902
7903         * sysfile-info.c: (cmd_sysfile_info) Calls tab_nat_dim().  No
7904         headers or spacing.
7905         (display_variables) Calls tab_nat_dim().
7906         (describe_variable) Remove restriction on number of value labels.
7907         Make value labels separated by thin lines.
7908
7909         * tab.c: (tab_create) Default `flags' to none.
7910         (tab_float) New arg `w'.  All references changed.
7911         (tab_nat_dim) New function.
7912         (tab_output_text) No title or spacing.
7913         (tab_flags) New function.
7914         (tabi_flags) New function.
7915         (tabi_title) New function.
7916         (strip_height) Removed.
7917         (tabi_render) Skip title when necessary.
7918         (static var tab_tab_class) Add tabi_flags, tabi_title.
7919         (evaluate_dimensions) Disable display of column, row size.
7920         (sum_columns) Add title height to top header.
7921         (render_strip) Moved within file.
7922
7923         * tab.h: (struct tab_table) New member `flags'.
7924
7925         * vfm.c: (dump_splits) Calls tab_nat_dim().  No title.
7926
7927 Sat Jan  3 16:55:44 1998  Ben Pfaff  <blp@gnu.org>
7928
7929         * Most source files: Add `const' attribute in all appropriate
7930         places.
7931         
7932         * sysfile-info.c: (cmd_sysfile_info) Add tab_dim() call, add a
7933         column to the variables table for use by describe_variable().
7934         (cmd_display) Disable for the present.
7935         (display_documents) Don't wrap documents.
7936         (display_variables) Table has four columns now.
7937         (describe_variable) Table has four columns now.  Don't use a
7938         subtable, use joined cells instead.
7939
7940         * tab.c: (tab_create) Don't set `join'.
7941         (tab_realloc) ct array is not made up of a_string's.
7942         Reallocate trh, hrh, h arrays, initialize trh array.  Initialize
7943         cell contents on GLOBAL_DEBUGGING, not DEBUGGING.
7944         (text_format) New function.
7945         (tab_title) Rewritten, uses text_format().
7946         (tab_text) Rewritten, uses text_format().
7947         (tab_joint_text) New function.
7948         (tab_join) Removed.
7949         (static var hit) New variable.
7950         (render_strip) New args r1, r2.  Implement joined cells that fit
7951         on a single page.
7952         (tabi_render) Increment hit.  Pass new args to render_strip().
7953         (evaluate_dimensions) [GLOBAL_DEBUGGING] Check for uninitialized
7954         cells.  For t_naw and t_nah, ignore joined cells and null cells in
7955         calculations.
7956         
7957         * tab.h: (struct tab_join_rect) Removed.
7958         (struct tab_table) Removed `join'.
7959         (TAB_JOIN_MAIN) Removed.
7960         (struct tab_joined_cell) New struct.
7961         (TAT_NOWRAP) New enum.
7962
7963 Fri Jan  2 01:39:58 1998  Ben Pfaff  <blp@gnu.org>
7964
7965         * ascii.c: (ascii_postopen) Replace ASCII_* macros with their
7966         expansions.
7967         (ascii_postopen_driver) Fix initialization of *_spacing so that
7968         the TAL_0 bit doesn't count.
7969
7970         * data-list.c: (dump_fixed_table) Use natural width for Format
7971         column.
7972
7973         * glob.c: (rerange) Removed.
7974         (get_date) Formatting fixes.  Internationalization fix.
7975
7976         * html.c: (html_postopen_driver) Replace HTML_DEFAULT_OUTPUT_FILE
7977         with "pspp.html".
7978
7979         * postscript.c: (ps_postopen_driver) Replace
7980         PS_DEFAULT_OUTPUT_FILE with "pspp.ps".
7981
7982         * som.c: (som_submit) Don't eject page before every table.
7983         (output_table) Fix order of arguments on call to area().
7984         (render_columns) Fix calculation of max_len.
7985         
7986         * tab.c: (tabi_cumulate) Minor change to increase elegance.
7987         (render_strip) New function.
7988         (strip_height) New function.
7989         (tabi_render) Rewrite as calls to render_strip().
7990
7991         * tab.h: (TAT_* enums) Removed TAT_RICH, all references removed.
7992         Renumbered TAT_PRINTF, TAT_TITLE, TAT_FIX to correspond better
7993         with the TAB_* and OUTP_T_* constants.
7994         
7995 Thu Jan  1 11:53:52 1998  Ben Pfaff  <blp@gnu.org>
7996
7997         * Makefile.am: Formatting fixes.
7998
7999         * ascii.c: (ascii_postopen_driver) Initialize *_line_spacing[],
8000         *_line_width[].
8001
8002         * data-list.c: (dump_fixed_table) Add tab_dim() call.
8003
8004         * descript.q: (dump_z_table, display) Add tab_dim() calls.
8005
8006         * dump-sysfile.c: (glob var length) Make type off_t.
8007         (usage) Fix arguments.
8008         (main) Return 0.
8009
8010         * output.h: (OUTP_T_*) Change constants' value to match tab.h.
8011         Now right-justification is the default so many references had to
8012         change.
8013         (struct outp_class) Removed line_width, all references changed.
8014         (OUTP_DEV_*) Add OUTP_DEV_DISABLED.
8015         (struct outp_driver) Add elements horiz_line_width,
8016         vert_line_width, horiz_line_spacing, vert_line_spacing.  Remove
8017         som element.
8018
8019         * postscript.c: (outp_encodings) Formatting fixes.  Fix garbage
8020         collection.
8021         (postopen) Initialize all the informational members of
8022         outp_driver.
8023
8024         * som.c: (som_blank_line) New function, renamed from blank_line(),
8025         all references changed.
8026         (som_submit) Disables drivers whose pages can't be opened.
8027         (render_columns, render_simple, render_segments) Add debug output.
8028         (render_columns) Fix loop range.
8029         (render_simple) Don't try to render the headers, they're taken
8030         care of automatically.  Advance cp_y past the table when done.
8031         (render_segments) Fix loop ranges.
8032
8033         * tab.c: Initialize new members of tab_table.
8034         (tab_vline) Handle trv[]; don't set style for spacing-only lines.
8035         (tab_hline) Handle trh[]; don't set style for spacing-only lines.
8036         (tab_box) Handle trh[], trv[]; don't set style for spacing-only
8037         lines.
8038         (set_expr) Removed.
8039         (tab_dim) New function.
8040         (tab_col_width) Removed.
8041         (tab_row_height) Removed.
8042         (tab_output_text) Call tab_dim().
8043         (tabi_driver) Call evaluate_dimensions(), sum_columns().
8044         (tabi_area) Implemented.
8045         (tabi_cumulate) Implemented.
8046         (tabi_render) Partially implemented, but broken.
8047         (var tab_table_class) Made static.
8048         (evaluate_dimensions) New function.
8049         (sum_columns) New function.
8050
8051         * tab.h: (enum t_*) Now start at t_end.  New: t_ptw, t_nr, t_nc,
8052         t_nah, t_naw, t_neg, t_xch, t_dup, t_lbl, t_jnz, t_sac, t_sar,
8053         t_scr, t_srr, t_sentinel.  Removed: t_nat.
8054         (struct tab_table) New: wl, wr, ht, hb, trh, hrh, trv, wrv, dim,
8055         max_stack_height, w, h.  Removed: ce, re.
8056         (macro blank_line) Removed.
8057         (glob var zero_length) Removed.
8058
8059 Fri Dec 26 15:44:31 1997  Ben Pfaff  <blp@gnu.org>
8060
8061         * Most source files: include some of the new include files broken
8062         out of var.h.
8063         
8064         * Makefile.am: (pspp_SOURCES) Add all the new source files to the
8065         list.
8066
8067         * aggregate.c: (glob var outfile) Make static.
8068
8069         * command.c: (glob var pgm_state) Move here.
8070
8071         * common.c: (glob vars endian, second_lowest_value, pgmname,
8072         finished, curdate, cur_proc, start_interactive, history_file) Move
8073         here.
8074
8075         * descript.q: (structs dsc_z_score, descriptives_trns) Move here.
8076
8077         * file-handle.q: (glob vars files, inline_file) Move here.
8078
8079         * glob.c: Lost lots of glob vars, detailed in individual file
8080         entries.
8081         (init_glob) set_printer, set_screen were obsolete, deleted.
8082         set_cprompt has fewer spaces because pspp has fewer letters than
8083         fiasco.
8084
8085         * inpt-pgm.c: (glob vars inp_init, inp_init_size) Move here.
8086         (inp_nval) Made static.
8087
8088         * lexer.c: (glob vars token, tokval, tokstr, tokstr_size,
8089         tokstr_len, toklongstr, tokint) Move here.
8090
8091         * misc.c: Lost several vars and functions.
8092
8093         * set.q: (all the set_* variables) Move here.
8094
8095         * str.c: (strmaxcpy, strbarepadcpy, strbarepadlencpy, strpadcpy,
8096         blpstrset, strpadcmp, memrev, memrmem, cmp_str) Move here from
8097         misc.c.
8098
8099         * tab.c: (set_expr, tab_col_width, tab_row_height) New functions.
8100
8101         * tab.h: (enum series t_*) New enums.
8102         (struct tab_table) Use arena struct tag.  New members ce, re.
8103
8104         * tokens.h: Comment fixes.
8105
8106         * var.h: Move lots of enums and variables and functions and
8107         structures to other files.  Use and declare a lot more union and
8108         struct tags.  Comment fixes.  
8109
8110         * vector.c: (glob vars vec, nvec) Move here.
8111
8112         * vfm.c: (glob vars reinit_sysmis, reinit_blanks, init_zero,
8113         init_blanks, last_vfm_invocation) Move here.
8114
8115         * cases.h: New file.
8116         (struct long_vec) Move here.
8117         (vec_init, vec_clear, vec_insert, vec_delete, devector, envector)
8118         Move here.
8119
8120         * command.h: New file.
8121         (STATE_* enums) Move here.
8122         (glob var pgm_state) Move here.
8123
8124         * format.c: New file.
8125         (glob var formats) Move here.
8126         (parse_format_specifier_name, fmt_to_string,
8127         check_input_specifier, check_output_specifier,
8128         check_string_specifier, convert_fmt_ItoO, parse_format_specifier)
8129         Move here.
8130
8131         * format.h: New file.  Move functions now in format.c here.
8132         (FMT_* enums) Move here.
8133         (struct fmt_desc) Move here.
8134         (FCAT_* enums) Move here.
8135         (struct fmt_spec) Move here.
8136         (glob vars formats, fmt_parse_ignore_error) Move here.
8137
8138         * inpt-pgm.h: New file.
8139         (INP_* enums) Move here, make #defines into enums.
8140         (glob vars inp_init, inp_init_size) Move here.
8141
8142         * sort.h: New file.
8143         (glob vars v_sort, nv_sort) Move here.
8144         (sort_cases, read_sort_output) Move here.
8145
8146         * vector.h: New file.
8147         (struct vector) Move here, add struct tag.
8148         (glob vars vec, nvec) Move here.
8149         (find_vector) Move here.
8150
8151         * New file.
8152         (glob vars last_vfm_invocation, temp_case, reinit_sysmis,
8153         reinit_blanks, init_zero, init_blanks) Move here.
8154         (struct case_stream) Move here.
8155         (glob vars vfm_source, vfm_sink, vfm_memory_stream,
8156         vfm_disk_stream, sort_stream, data_list_source,
8157         input_program_source, file_type_source, get_source, n_lag) Move
8158         here.
8159         (procedure, write_case, lagged_case, compact_case, page_to_disk)
8160         Move here.
8161                 
8162 Wed Dec 24 22:40:42 1997  Ben Pfaff  <blp@gnu.org>
8163
8164         * Makefile.am: (pspp_SOURCES) Added html.c, som.c, som.h.
8165         (LDADD) Add libdcdflib.
8166
8167         * ascii.c: Comment and formatting fixes.  Almost every external
8168         function had an assert added, checking driver_open and page_open.
8169         (ascii_init_driver) Broken into ascii_preopen_driver,
8170         ascii_postopen_driver, ascii_close_driver.  Manages driver_open.
8171         (ascii_open_page) Sets page_open.
8172         (ascii_close_page) Clears page_open.
8173
8174         * html.c: Comment and formatting fixes.  Almost every external
8175         function had an assert added, checking driver_open and page_open.
8176         (html_init_driver) Broken into html_preopen_driver,
8177         html_postopen_driver, html_close_driver.  Manages driver_open.
8178         (html_open_page) Sets page_open.
8179         (html_close_page) Clears page_open.
8180         (html_submit) Disabled.
8181
8182         * lexer.c: (parse_string) Remove debugging printf.
8183
8184         * list.q: (determine_layout) Open a page if one is not yet open.
8185
8186         * output.c: Comment fixes.
8187         (add_class) Set the class member of the new list element.
8188         (parse_options) Don't handle device type.
8189         (colon_tokenize) New function.
8190         (configure_driver) New four-field format with a field for device
8191         type.  Now initialize driver_open, page_open, next, and prev
8192         fields.  Use new colon_tokenize() function.  Don't do a memory
8193         copy to replace a driver, it doesn't work; instead delete the old
8194         driver and insert a new one.
8195         (destroy_driver) Don't call som_destroy_driver().  Close the page
8196         if it's open.  Find the class in the list of classes and decrement
8197         that reference count.  Remove the driver from the global driver
8198         list.
8199         (outp_iterate_enabled_drivers) Renamed outp_drivers().  All
8200         references changed.  Rewritten.  Don't return a driver that's not
8201         enabled.
8202         (outp_eject_page) All references to som_internal_eject_page()
8203         changed to use this.  Sets cp_x to 0 as well as cp_y.
8204
8205         * output.h: (OUTP_I_* enums) Removed.
8206         (struct som_submission_form) Removed.
8207         (struct outp_class) init_driver broken into preopen_driver,
8208         postopen_driver, and close_driver.  submit changed to take a
8209         som_table argument.
8210
8211         * postscript.c: Comment and formatting fixes.  Almost every
8212         external function had an assert added, checking driver_open and
8213         page_open.
8214         (ps_init_driver) Broken into ps_preopen_driver,
8215         ps_postopen_driver, ps_close_driver.  Manages driver_open.
8216         (ps_open_page) Sets page_open.
8217         (ps_close_page) Clears page_open.
8218
8219         * som.c: New file, base implementation.
8220         
8221         * som.h: (struct som_table) Add struct tag.
8222         (enum SOM_COL_ACROSS) Removed.
8223         (SOM_ROWS, SOM_COLUMNS) New enums.
8224         (struct som_table_class) Add member `cumulate'.  Remove `segment';
8225         change `render' arguments.
8226         (struct som_point, struct som_rect) Removed.
8227         (som_submit_table) Fixed typo, should have been som_submit.
8228
8229         * sysfile-info: (describe_variable) Don't try to insert a
8230         subtable; just destroy it for now.
8231
8232         * t-test.q: Include dcdflib/cdflib.h instead of cdflib.h.  Fix
8233         references to value labels.
8234
8235         * tab.c: (tab_destroy) New function.
8236         (tab_columns) Change argument.
8237         [0] (tab_submit) Remove dead code.
8238         (tab_title) Allocate string from the table's arena.
8239         (tab_output_text) Only free the buffer if we allocated it.
8240         (tab_submit) New function.
8241         (static vars t, d) New static vars.
8242         (tabi_table, tabi_driver, tabi_count, tabi_area, tabi_columns,
8243         tabi_headers, tabi_cumulate, tabi_render) New functions.
8244         (glob var tab_table_class) New global var.
8245
8246         * tab.h: (struct tab_join_rect) Don't use a som_rect; directly
8247         encapsulate the rectangle.  All references changed.
8248         
8249 Sun Dec 21 16:18:58 1997  Ben Pfaff  <blp@gnu.org>
8250
8251         * All header files updated to use struct tags in addition to
8252         typedefs for all structures.  Don't use word `struct' in struct
8253         tags.
8254         
8255         * Makefile.am: (pspp_SOURCES) Remove html.c.
8256         (INCLUDES) Replace the lib/* includes with a single lib/ include;
8257         all references updated.
8258
8259         * command.c: (parse_cmd) Remove call to som_check_workspace.
8260         (output_line) Update to new som.
8261
8262         * data-in.c: (parse_numeric) A single dot is not an error; it is
8263         the system-missing value.
8264
8265         * data-list.c: (dump_fixed_table, dump_free_table) Update to new
8266         som.
8267
8268         * data-out.c: Added `const' as appropriate to many prototypes.
8269         (convert_E, convert_F, convert_CCx) Take double argument instead
8270         of value * argument.
8271         (convert_format_to_string) Call changed functions appropriately.
8272         Instead of modifying the caller's value for FCAT_SHIFT_DECIMAL,
8273         make a local copy of the value.
8274
8275         * descript.q: Remove custom_variables() prototype now provided by
8276         q2c.  
8277         (custom_variables) Don't increment sbc_variables, the caller does
8278         this.
8279         (dump_z_table, display) Update to new som.
8280
8281         * error.c: (vmsg) Add const to prototype.  Remove code to handle
8282         `too many errors' condition.
8283         (check_error_count) New function.
8284         (msg) Add const to prototype.
8285
8286         * filename.c: (open_file) Rewrite for elegance.
8287
8288         * frequencies.q: Remove custom_*() prototypes now provided by q2c.
8289         (dump_full, dump_condensed, dump_statistics) Update for new som.
8290
8291         * list.q: Don't include somP.h.  Change all references to
8292         som_driver_ext to refer to the new members of som_driver.  Change
8293         som_internal_eject_page() references to outp_eject_page().
8294
8295         * main.c: (parse) Rewrite for elegance.  Add call to
8296         check_error_count().
8297
8298         * output.c: (add_class, outp_list_classes, outp_configure_driver)
8299         Rewrite or revise for new outp_driver_class_list structure.
8300         (outp_iterate_enabled_drivers) Fix comparison between disabled
8301         devices and current device type.
8302         (outp_eject_page) New function.
8303
8304         * output.h: Comment fixes.
8305         (struct outp_driver) New members driver_open, page_open, cp_x,
8306         cp_y, font_height, prop_em_width, fixed_width.  Deleted members
8307         ref_count, next.
8308         (struct outp_driver_class_list) New struct.
8309         (outp_class_list) Changed to type outp_driver_class_list; all
8310         references updated.
8311
8312         * print.c: (dump_table, print_trns_proc) Updated for new som.
8313
8314         * q2c.c: (dump_vars) Simplify array subcommand code.  Declare
8315         prototypes for custom subcommands.
8316         (dump_subcommand) Always include the `else'.
8317         (dump_parser) Fix comments in output code.
8318
8319         * set.q: Reordered functions.
8320
8321         * som-frnt.c, som-high.c, som-low.c, somP.h: Removed.
8322         
8323         * som.h: Rewritten from scratch.
8324
8325         * str.h: Remove dead code.
8326
8327         * tab.c, tab.h: New files, base implementation.
8328
8329         * sysfile-info.c: (cmd_sysfile_info, describe_variable) Update to
8330         new som.
8331
8332         * t-test.q: New code from John Williams
8333         <johnr.williams@stonebow.otago.ac.nz>.  Include math.h, cdflib.h.
8334         Many many new static vars and defines.
8335         (precalc, postcalc, g_postcalc, z_postcalc, t_pairs, t_groups,
8336         groups_calc, pairs_calc, z_dev_calc, z_calc) New functions.
8337         (struct value_list) New struct.
8338         (variance, covariance, pooled_variance, oneway, pearson_r, f_sig,
8339         t_crt, t_sig, print_t_groups) New functions.
8340         (cmd_t_test) Implemented.
8341
8342         * temporary.c: (cancel_temporary) Only free the temp_dict if it's
8343         non-NULL.
8344
8345         * vfm.c: (dump_splits) Update to new som.
8346
8347 Thu Dec  4 23:02:22 1997  Ben Pfaff  <blp@gnu.org>
8348
8349         * Makefile.am: (fiasco_SOURCES) Add html.c.
8350
8351         * aggregate.c: Base source.
8352
8353         * ascii.c: (postopen, preclose) Reformat.
8354
8355         * data-out.c, expr-evl.c: Comment fixes.
8356         
8357         * filename.c: (open_file) When opening a file for writing, use
8358         line buffering instead of full buffering for better interactive
8359         performance.  Suggested by Valerio Aimale
8360         <valerio@svpop.com.dist.unige.it>.  Also, recognize special file
8361         names `stdin', `stdout', `stderr'.
8362
8363         * groff-font.c: Comment fixes.
8364
8365         * html.c: New file; base version.
8366
8367         * list.q: (write_all_headers, clean_up, determine_layout,
8368         list_cases) Ignore `special' devices for now.  Needs to be fixed
8369         later.
8370
8371         * output.c: (outp_init) Add html driver to list; reverse list
8372         order.
8373
8374         * output.h: (struct outp_class_struct) New members `special',
8375         `submit'; comment fixes.  All references changed.
8376
8377         * postscript.c: (ps_init_driver) Make defaults for text_opt,
8378         line_opt depend on whether the OUTP_DEV_SCREEN bit is set on the
8379         device.
8380         (postopen) Comment fix.
8381         (preclose) Comment fixes, formatting fixes.  Change x->file.file
8382         references to more proper f->file.
8383
8384         * som-high.c: (som_submit_table) Special classes use their own
8385         renderers.
8386
8387         * som.h: Comment fixes.
8388
8389         * temporary.c: (new_dictionary) Don't try to xstrdup() a NULL
8390         string.
8391         
8392 Tue Dec  2 14:36:07 1997  Ben Pfaff  <blp@gnu.org>
8393
8394         * Makefile.am: (fiasco_SOURCES) Add aggregate.c back in.
8395
8396         * aggregate.c: Still working on this.
8397
8398         * command.c: (cmd_table[]) Add AGGREGATE back in.
8399         (split_words) Make '-' a legal word separator as well as ' '.
8400
8401         * main.c: Comment fixes.
8402
8403         * q2c.c: (dump_parser) Don't require the procedure's full name to
8404         be present, in the generated source.
8405
8406         * t-test.q: Change name to `t-test' from `t test'.  Let PAIRS be
8407         multiply specified and let it be default; let MISSING, CRITERIA,
8408         FORMAT be multiply specified.
8409         (cmd_t_test) Parse command name.  [DEBUGGING] Call debug_print().
8410         (custom_groups) Fix defaults.
8411         (custom_pairs) Check whether this is a PAIRS subcommand before
8412         attempting to parse.  Better garbage collection.  Proper storage
8413         allocation.
8414         [DEBUGGING] (debug_print) New function.
8415
8416         * temporary.c: Comment fixes.
8417         (copy_variable) Don't copy variable name and index.
8418         (save_dictionary) Copy variable name and index by hand.
8419
8420         * vars-atr.c: Comment fixes.
8421         (create_variable) New dictionary argument.  All references
8422         changed.
8423         (common_init_stuff) New dictionary argument.  All references
8424         changed.
8425         (init_variable) New dictionary argument.  All references changed.
8426         (dup_variable) New function.
8427
8428         * vars-prs.c: (parse_variables) If there are any errors, we always
8429         return 0.  Previously, it was possible for some types of errors to
8430         be ignored.
8431         
8432 Sat Nov 22 01:20:59 1997  Ben Pfaff  <blp@gnu.org>
8433
8434         * Makefile.am: (fiasco_SOURCES) For 0.1.5 release, remove
8435         aggregate.c.
8436
8437         * command.c: (cmd_table[]) Comment out AGGREGATE; add T TEST.
8438
8439         * list.q, t-test.q: Remove ALL option from VARLIST declaration in
8440         grammar rules.
8441
8442         * q2c.c: Comment fixes.
8443         (SBC_* enums) Remove SBC_VARLIST_ALL; all references removed.
8444         
8445         * t-test.q: (cmd_list) Rename cmd_t_test.
8446
8447         * temporary.c: (new_dictionary) Don't declare as static.
8448         
8449 Fri Nov 21 00:03:06 1997  Ben Pfaff  <blp@gnu.org>
8450
8451         * aggregate.c: Changes, still not finished.
8452
8453         * file-handle.q, frequencies.q, list.q, set.q: Comment fixes.
8454
8455         * q2c.c: Comment fixes.  Now its output is internationalized.
8456         (get_token) Fix parsing of escapes within literal strings.
8457         (main) Fix bad #line directives in output.
8458
8459         * t-test.q: Base implementation.
8460
8461         * temporary.c: (new_dictionary) New function.
8462         (restore_dictionary) [__CHECKER__] Change fill character to *
8463         (from @).
8464         
8465 Sun Nov 16 01:29:57 1997  Ben Pfaff  <blp@gnu.org>
8466
8467         * Makefile.am: (BUILT_SOURCES, fiasco_SOURCES) Add t-test.c
8468
8469         * aggregate.c: Changes, still not finished.
8470
8471         * descript.q, list.q: Comment fixes.
8472
8473         * q2c.c: Almost completely rewritten.
8474
8475         * t-test.q: New file, not complete.
8476
8477 Fri Nov 14 00:14:48 1997  Ben Pfaff  <blp@gnu.org>
8478
8479         * aggregate.c: Changes, still not finished.
8480
8481         * sort.c: (sort_cases) Call cancel_temporary() instead of doing it
8482         by hand.
8483
8484         * temporary.c: (cancel_temporary) New function.
8485
8486         * vars-atr.c: (discard_variables) Call cancel_temporary() instead
8487         of doing it by hand.
8488
8489         * vfm.c: (close_active_file) After restoring a TEMPORARY
8490         dictionary, set temp_dict to NULL.  Cancel TEMPORARY through
8491         cancel_temporary().
8492         (SPLIT_FILE_procfunc) Comment fix.
8493
8494 Tue Oct 28 16:08:45 1997  Ben Pfaff  <blp@gnu.org>
8495
8496         * Makefile.am: (fiasco_SOURCES) Add aggregate.c.
8497
8498         * aggregate.c: New file, not finished yet.
8499
8500         * command.c: (cmd_table) Add AGGREGATE.
8501
8502         * common.h: (pgm_state) Move declaration to var.h.
8503
8504         * lexer.c: (bin_value_func, oct_value_func, hex_value_func) i18n
8505         fixes.
8506         (parse_string) Message fix.
8507
8508         * recode.c: Comment fix.
8509
8510         * sfm-read.c: (read_variables) Code esthetic fixes.
8511         (write_header) Default date is `Jan', not `JAN'.
8512
8513         * sfmP.h: (bswap_int32) [!__linux__] Fix off-by-one errors.
8514
8515         * sort.c: (cmd_sort_cases) Farm the work out to new function
8516         parse_sort_variables().
8517         (parse_sort_variables) New function.
8518         (sort_cases) New function.  Cancels temporary transformations,
8519         which sorting didn't do previously.
8520         (cmd_sort_cases) Better garbage collection on error.  Uses
8521         do_external_sort().
8522         (write_initial_runs, merge_once) Improved code esthetics.
8523         (sort_stream_read) Reduced to one call to read_output_cases().
8524         (read_output_cases) New function.
8525
8526         * var-labs.c: (cmd_variable_labels) Re-enabled truncation of
8527         variable labels to 120 characters.
8528
8529         * var.h: Comment fixes.
8530         (glob var pgm_state) From common.h.
8531
8532         * vars-atr.c: (discard_variables) Set pgm_state to STATE_INIT.
8533
8534         * vars-prs.c: (parse_DATA_LIST_vars) Support PV_SINGLE in
8535         options.  Set *names to NULL on error.
8536
8537         * vfm.c: (memory_stream_init) Assert compaction_nval != 0.
8538
8539 Thu Oct  9 09:59:49 1997  Ben Pfaff  <blp@gnu.org>
8540
8541         * sfm-write.c, vfm.c: [HAVE_UNISTD] #include <unistd.h>, needed by
8542         SunOS4.  From Alexandre Oliva <oliva@dcc.unicamp.br>.
8543
8544 Wed Oct  8 18:55:24 1997  Ben Pfaff  <blp@gnu.org>
8545
8546         * vfm.c: (page_to_disk) Added missing local variables.
8547
8548 Tue Oct  7 20:23:17 1997  Ben Pfaff  <blp@gnu.org>
8549
8550         * get.c: Comment fix.
8551
8552         * sort.c: (cmd_sort_cases) Attempt to perform internal sort if the
8553         source is anything other than a disk stream, not just if it's in a
8554         memory stream.  Call page_to_disk() before external sort.
8555         (allocate_cases) Message fix.
8556
8557         * vfm.c: (prepare_for_writing) Warn user when paging workspace to
8558         disk.
8559         (page_to_disk) New function.
8560
8561 Sun Oct  5 15:56:14 1997  Ben Pfaff  <blp@gnu.org>
8562
8563         * Makefile.am: (INCLUDES) Include .. instead of $(top_srcdir).
8564
8565         * common.h: (macro strerror) Remove.  From Alexandre Oliva
8566         <oliva@dcc.unicamp.br>.
8567
8568         * get.c: (dict_delete_run) The number of variables to delete is
8569         not necessarily the number of variables that need to be shifted
8570         up.
8571         (trim_dictionary) Don't set *options to 0.  Fix bug that caused
8572         too many variables to be deleted.
8573
8574         * postscript.c: Comment fix.
8575
8576         * q2c.c: Include strerror.c.  From Alexandre Oliva
8577         <oliva@dcc.unicamp.br>.
8578
8579         * set.q: #undef ON and OFF.  From Alexandre Oliva
8580         <oliva@dcc.unicamp.br>.
8581
8582         * sfm-read.c: (sfm_read_dictionary) Don't set the file class too
8583         early, otherwise errors cause a bad free().
8584
8585         * str.h: (macro nvsprintf) s/FORMATS/FORMAT/ typo.  From Alexandre
8586         Oliva <oliva@dcc.unicamp.br>.
8587
8588         * temporary.c: (save_dictionary) Don't allocate memory if
8589         n_documents is 0.
8590
8591         * vfm.c: (memory_stream_write) Message fix.
8592
8593 Sat Oct  4 16:20:43 1997  Ben Pfaff  <blp@gnu.org>
8594
8595         * command.c: (static var cmd_table[]) Define REPEATING DATA
8596         command.
8597
8598         * common.h: Added support for broken systems that are missing
8599         EXIT_SUCCESS, EXIT_FAILURE, RAND_MAX, and/or strerror().
8600
8601         * Many source files: Replace syntax error messages via msg() with
8602         call to syntax_error().
8603
8604         * data-list.c: (dump_fixed_table) Add support for dumping table
8605         for REPEATING DATA as well as DATA LIST FIXED.
8606         (cmd_repeating_data) Allows and requires `/' between subcommands.
8607         Does proper thing with allowing rpd.starts_end to stay 0.  Allows
8608         CONTINUED specifications to be omitted.  Forces CONTINUED to be
8609         specified if ID is.  Calculates starts_end, cont_end from logical
8610         record length as reported by fhp.  Calls dump_fixed_table() if
8611         requested.  Fixed length of record copied by memcpy.
8612         (parse_num_or_var) Sets `num' to 0, not NOT_INT, for variables.
8613         Message fix.
8614         (realize_value) Returns sensible value for out-of-range variable
8615         values.
8616         (rpd_parse_record) New argument `ofs'.  Fixed confusion between
8617         length of occurrences and length of line.  Added warning for
8618         fields that exceed the line length.  Fixed infinite loop.
8619         (read_one_set_of_repetitions) Numerous minor changes for more
8620         complete SPSS compliance.  Message fixes.
8621
8622         * dfm.c: (dfm_close) If the file being closed is the inline file,
8623         read all the remaining data before closing it.
8624         (dfm_get_record) Don't close the file on lossage, as either it
8625         has been closed already or it doesn't belong to us.
8626
8627         * error.c: (puts_stdout) New function.
8628         (vmsg) Use puts_stdout instead of puts.
8629
8630         * file-handle.q: (fh_record_width) New function.
8631
8632         * inpt-pgm.c: (init_case) Fixed buffer overrun when inp_nval % 4
8633         == 0.
8634         (clear_case) Ditto.
8635         (input_program_source_read) Made an old kluge an approved method.
8636
8637         * lexer.c: (syntax_error) New function.
8638
8639         * misc.c: [BROKEN_RAND] (ansi_rand, ansi_srand; static var next)
8640         New.
8641
8642         * output.c: (oupt_get_paper_size) Message fix.
8643
8644         * q2c.c: Numerous fixes to formatting of generated code made to
8645         conform to GNU coding standards.  Uses syntax_error() in generated
8646         code.  Other miscellaneous generated message fixes.  Added support
8647         for broken systems that are missing EXIT_SUCCESS, EXIT_FAILURE,
8648         RAND_MAX, and/or strerror().
8649
8650 Sat Oct  4 02:09:56 1997  Ben Pfaff  <blp@gnu.org>
8651
8652         * data-in.c: Comment fixes.
8653
8654         * data-list.c: (struct repeating_data_trns) New member `id_spec'.
8655         (find_variable_input_spec) New function.
8656         (cmd_repeating_data) Initializes id_spec.
8657         (rpd_parse_record) Implemented.
8658         (read_one_set_of_repetitions) Returns -3 by default in order to
8659         kluge out some potential bugs.
8660
8661         * data-out.c: Comment fixes.
8662
8663         * file-type.c: (internal_cmd_record_type) Message fix.
8664
8665         * inpt-pgm.c: (input_program_source_read) Special temporary kluge
8666         for handling -3 return value.
8667
8668 Sat Sep 20 23:58:15 1997  Ben Pfaff  <blp@gnu.org>
8669
8670         * data-list.c: Comment fixes.
8671         (struct dls_var_spec) Reordered members.
8672         (read_from_data_list_fixed) Restructured.
8673         (struct repeating_data_trns) Reordered members.  Renamed `starts'
8674         as `starts_beg', `ends' as `starts_end'.
8675         (cmd_repeating_data) Calculates length of repeated data if
8676         necessary and possible.
8677         (parse_num_or_var) Don't allow string variables.
8678         (realize_value) New function.
8679         (rpd_msg) New function.
8680         (rpd_parse_record) New function.  Currently stubbed out.
8681         (read_one_set_of_repetitions) Implemented.
8682
8683         * inpt-pgm.c: (input_program_source_read) Comment fix.
8684
8685 Thu Sep 18 21:34:57 1997  Ben Pfaff  <blp@gnu.org>
8686
8687         * command.c: (cmd_end_repeat_p) Removed.
8688         (init_cmd_parser) Doesn't set cmd_end_repeat_p.
8689         (parse_cmd_name) Removed.
8690
8691         * data-list.c: Comment fixes.
8692         (data_list_pgm) Removed `eof' member.
8693         (static var first) New var.
8694         (cmd_data_list) Sets `first'.  Ensures that DATA LIST uses the
8695         FILE TYPE file inside FILE TYPE structures.
8696         (append_var_spec) Appends to *first, not dls.spec.
8697         (parse_fixed) Message fixes.
8698         (struct rpd_num_or_var) New.
8699         (struct repeating_data_trns) New.
8700         (static var rpd) New.
8701         (cmd_repeating_data) New function.
8702         (parse_num_or_var) New function.
8703         (parse_repeating_data) New function.
8704         (read_one_set_of_repetitions) New function.
8705
8706         * file-type.c: (cmd_file_type) Message fixes.  Always
8707         default_handle to FILE TYPE file handle.
8708         (internal_cmd_record_type) Message fixes.
8709
8710 Wed Aug 20 14:22:03 1997  Ben Pfaff  <blp@gnu.org>
8711
8712         * repeat.c: Comment fix.  Disable debugging.
8713
8714         * temporary.c: (restore_dictionary) Sets splits to NULL and
8715         n_splits to 0 before destroying the variables because now doing
8716         this tries to remove split variables.
8717
8718         * vars-atr.c: (discard_variables) Asserts that n_splits is 0 after
8719         destroying the dictionary.
8720         (clear_variable) Removes a variable from splits after destroying
8721         it.
8722
8723 Mon Aug 18 18:06:55 1997  Ben Pfaff  <blp@gnu.org>
8724
8725         * cmdline.c: (set_compat) Removed.
8726         (pick_compat) Removed.
8727         (parse_command_line) Removed -c option.
8728         (pre_syntax_message) Removed -c option.
8729         (usage) Remove compatibility code.
8730
8731         * common.h: (macros VER_PC, VER_WND, VER_X) Removed.
8732         (glob var compat) Removed.
8733
8734         * compute.c: (type_check) Fixed messages about type mismatches.
8735
8736         * data-list.c: (cmd_data_list) Removed compatibility code.
8737         (fixed_parse_compatible) Calls convert_negative_to_dash().
8738         Fixed bug where it only set the variable in fx.spec if it created
8739         the variable itself.
8740         (dump_fmt_list) Spelling fix.
8741         (cut_field) Removed compatibility code.
8742
8743         * dfm.c: (cmd_begin_data) Don't require a command terminator on
8744         BEGIN DATA command.
8745
8746         * expr-evl.c: (evaluate_expression) Implement LAG.
8747
8748         * expr-prs.c: (parse_add) Calls convert_negative_to_dash().
8749         (parse_neg) Calls convert_negative_to_dash().
8750         (LAG_func) Increases n_lag to the lag requested.  Fixed assignment
8751         bug.
8752
8753         * expr.h: (struct expression_struct) Removed member max_lag.
8754
8755         * file-type.c: (parse_col_spec) Calls convert_negative_to_dash().
8756         (internal_cmd_record_type) Removed special handling to produce
8757         negative numbers from dash tokens.
8758
8759         * getline.c: (static var DO_REPEAT_level) New var.
8760         (getl_add_DO_REPEAT_file) Increments DO_REPEAT_level.
8761         (handle_line_buffer) Copies the line into getl_buf; doesn't call
8762         copy_with_DO_REPEAT_substitutions().
8763         (getl_read_line) Maintains value of getl_mode.  Calls
8764         perform_DO_REPEAT_substitutions() whenever DO_REPEAT_level is
8765         positive.
8766         (getl_close_file) Decrements DO_REPEAT_level when appropriate.
8767
8768         * getline.h: (getl_mode) New glob var.
8769
8770         * glob.c: Comment fixes.
8771         (init_glob) Restructured.  Sets set_seed.
8772         (init_compat_dependent) Removed.  All references removed.
8773         (get_date) Format changed from MM/DD/YY to DD MMM YYYY.
8774         (__htonl, __htons) Removed.  (What were these for?)
8775
8776         * lexer.c: (static var tbl) Dash set to class CNUM.
8777         (make_hexit) New function from data-out.c.
8778         (get_token_representation) Rewritten.
8779         (convert_negative_to_dash) New function.
8780         (lex_init_compat_dependent) Removed.
8781         (yylex) A dash is parsed as part of a number if it is followed by
8782         a digit.  The ASCII representation of a number is copied to
8783         tokstr.  String parsing farmed out to parse_string().  Comment
8784         fixes.
8785         (bin_value_func, oct_value_func, hex_value_func, parse_string) New
8786         functions.
8787         (preprocess_line) Line processing depends on interactive/batch
8788         mode, not on compatibility mode.  Removed PC+ compatibility code.
8789
8790         * loop.c: (loop_3_trns_proc) Comment fix.
8791
8792         * main.c: Remove dead code.
8793         (main) Remove call to init_compat_dependent().
8794
8795         * misc.c: (convert_fmt_ItoO) Make E format conversion more
8796         conformant.
8797
8798         * print.c: (parse_string_argument) Calls
8799         convert_negative_to_dash().
8800         (fixed_parse_compatible) Calls convert_negative_to_dash().
8801
8802         * repeat.c: (RPT_* defines) Removed.
8803         (struct rpt_numeric) Removed.
8804         (struct repeat_entry) New member type, changed `replacement' from
8805         char * to char **.
8806         (clean_up) Deallocation adapted to new repeat_entry.
8807         (internal_cmd_do_repeat) `type' defaults to 0.  Remove lookahead()
8808         usage.  Creates vars for `type' of 1.
8809         (parse_ids) Sets type of 1.  Adapted to new repeat_entry.
8810         (store_numeric) Rewritten, new interface.
8811         (parse_numbers) Rewritten.
8812         (parse_strings) Rewritten.
8813         (find_DO_REPEAT_substitution) New function.
8814         (perform_DO_REPEAT_substitutions) New function.
8815         (copy_with_DO_REPEAT_substitutions) Removed.
8816         (debug_print) Rewritten.
8817
8818         * set.q: Comment fix.
8819         (custom_results) Removed compatibility code.
8820         (internal_cmd_set) Removed SET EMULATION subcommand.  Removed
8821         compatibility code.
8822
8823         * sysfile-info.c: (cmd_display) Removed compatibility code.
8824
8825         * tokens.h: Comment fixes.
8826         (token types enum) Removed `toktype' typedef name for this int
8827         type.  Removed SUBST.  Restructured.
8828
8829         * vars-atr.c: (discard_variables) Sets n_lag to 0.
8830
8831         * vars-prs.c: Comment fix.
8832
8833         * vfm.c: Comment fixes.
8834         (glob var n_lag) New var.
8835         (static vars lag_count, lag_head, lag_queue) New vars.
8836         (procedure) Removed argument nlag.
8837         (setup_lag) New function.
8838         (close_active_file) Discards lagging state.
8839         (lag_case) New function.
8840         (lagged_case) New function.
8841         (write_case) Lags a case if lagging.
8842
8843         * weight.c: (cmd_weight) Removed compatibility code.
8844         
8845 Sun Aug 17 22:34:40 1997  Ben Pfaff  <blp@gnu.org>
8846
8847         * getline.h: (struct getl_script) New members loop_index, macros.
8848
8849         * getline.c: (getl_add_file) Sets first_line field to NULL.
8850         (getl_add_DO_REPEAT_file) New function.
8851         (handle_line_buffer) When the current line's length is negative,
8852         set the filename and line number.  Increment line number after
8853         reading line.  Pass the line to
8854         copy_with_DO_REPEAT_substitutions() for processing.
8855         (getl_close_file) Free DO REPEAT lines before freeing the
8856         filename, and just set the filename to NULL when doing this,
8857         because otherwise the filename gets freed twice.
8858
8859         * glob.c: (glob var queuing) Removed.  All references removed.
8860
8861         * lexer.c: Comment fixes.
8862         (get_token_representation) New function.
8863
8864         * repeat.c: Comment fixes.
8865         (struct repeat_entry) Replaced type and v union members with a
8866         simple string.
8867         (append_record) New function.
8868         (internal_cmd_do_repeat) Started reforming it for the new
8869         repeat_entry struct.  Properly records filename changes in the
8870         getl_line_buf.  Fixed improper use of = for ==.  Fixed sense of
8871         strncasecmp() result usage.  Uses append_record() to simplify.
8872         Properly discards END REPEAT line.  Calls getl_add_DO_REPEAT_file
8873         to add in the file.
8874
8875         (copy_with_DO_REPEAT_substitutions) Started coding.
8876
8877         [DEBUGGING] (debug_print_lines) New function.
8878
8879         * set.q: (custom_results, internal_cmd_set) s/VER_PCP40/VER_PC/;
8880
8881         * tokens.h: (macro is_id1, is_idn) New macros.
8882
8883 Sat Aug 16 10:57:41 1997  Ben Pfaff  <blp@gnu.org>
8884
8885         * cmdline.c: (static var pre_syntax_message) Changed `win'
8886         compatibility mode to `wnd'.
8887
8888         * data-list.c: (fixed_parse_spss) Renamed
8889         fixed_parse_compatible().
8890
8891         * glob.c: (init_glob) Excise unused code for
8892         program_invocation_short_name.
8893
8894         * lexer.c: (preprocess_line) Leading indentors are ignored in Wnd
8895         as well as in X.
8896
8897         * print.c: (fixed_parse_spss) Renamed fixed_parse_compatible().
8898
8899         * set.q: `win' compatibility renamed `wnd'.
8900
8901 Thu Aug 14 22:11:12 1997  Ben Pfaff  <blp@gnu.org>
8902
8903         * filename.c: [__WIN32__] Change the included Windows header files
8904         (again).
8905         (absolute_filename_p) [__MSDOS__] A filename with a colon as the
8906         second character is absolute.
8907         (dirname) Fix logic error.  Don't printf() the results.
8908         (prepend_dir) Don't printf() the results.
8909
8910         * getline.c: (handle_line_buffer) New function.
8911         (getl_read_line) Reads line with handle_line_buffer() when
8912         appropriate.
8913         (getl_close_file) Discard line buffer data.
8914
8915         * getline.h: Comment fixes.
8916         (struct getl_line_list) New struct.
8917         (getl_script_struct) Added line buffer members.  These are hooks
8918         for use by DO REPEAT to allow it to insert virtual source code
8919         into the program.
8920
8921         * glob.c: (init_glob) [__DJGPP__ || (__WIN32__ && __BORLANDC__)]
8922         Override Borland C++ stupidity that claims Windows has a console
8923         window size of 0x3.
8924
8925         * repeat.c: This is in the process of being restructured from
8926         using a token-buffering approach to the DO REPEAT facility to
8927         using the more flexible approach of a line-buffering approach in
8928         conjunction with the getline module.  Comment fixes.
8929         (struct tok_struct) Removed.
8930         (static vars queue_index, queue_head, queue) Removed.
8931         (static vars line_buf_head, line_buf_tail) New vars.
8932         (internal_cmd_do_repeat) Instead of queuing tokens, queue lines.
8933         Not complete.
8934         (pull_queue, destroy_queue) Removed.
8935         [DEBUGGING] (debug_print_tokens) Removed.
8936
8937 Tue Aug  5 13:57:58 1997  Ben Pfaff  <blp@gnu.org>
8938
8939         * file-handle.q: (prepend_current_directory) New function.
8940         (internal_cmd_file_handle, fh_get_handle_by_filename) Prepends
8941         current directory before normalizing filename.
8942
8943         * filename.c: (gnu_getcwd) New function.
8944         (absolute_filename_p) New function.
8945         (search_path) New argument, PREPEND.  All references changed to
8946         pass NULL except those explicitly mentioned.  Uses
8947         absolute_filename_p().  Prepends PREPEND before trying the
8948         filename.
8949         (dirname, prepend_dir) New functions.
8950
8951         * getline.c: (getl_get_current_directory) New function.
8952         (getl_include) Passes getl_get_current_directory() as PREPEND arg
8953         to search_path().
8954                 
8955 Sun Aug  3 11:42:36 1997  Ben Pfaff  <blp@gnu.org>
8956
8957         * In several source files, the term `script' was replaced with
8958         `syntax file' inside error messages.  Usage of the term `script'
8959         in the sense of a syntax file is now deprecated.
8960
8961         * cmdline.c: (static vars pre_syntax_message, post_syntax_message)
8962         Updated messages.
8963
8964         * dump-sysfile.c: (usage) Update message.
8965
8966         * getline.c: (getl_read_line) Ignore lines beginning with `#!'.
8967
8968         * getline.h: (glob var getl_include_path) Declare extern.
8969
8970         * list.q: Define EXTERN as extern before #including somP.h.
8971
8972         * var.h: Remove declaration of `disptype' variable.
8973
8974         * vfm.c: (close_active_file) After switching the data sink to a
8975         data source, set vfm_sink to NULL, because it doesn't exist any
8976         more.
8977
8978 Thu Jul 17 21:41:44 1997  Ben Pfaff  <blp@gnu.org>
8979
8980         * glob.c: [__BORLANDC__] Include math.h.  Define _matherr() and
8981         _matherrl() to ignore all math errors.
8982
8983         * sfm-read.c: (read_value_labels) When reading the labels from
8984         disk, read the little parts separately instead of as a struct;
8985         this avoids alignment problems.
8986
8987         * sfm-write.c: (struct sfm_fhuser_ext) New member `elem_type'.
8988         (sfm_write_dictionary) Sets elem_type and frees it on lossage.
8989         (write_header) Allocates and initializes elem_type.
8990         (sfm_write_case) Uses elem_type to determine how to handle each
8991         flt64 element.
8992         (sfm_close) Frees elem_type.
8993
8994         * sfmP.h: Comment fix.
8995         [__BORLANDC__] Uses #pragma -a to adjust structure member
8996         alignment.
8997         
8998 Thu Jul 17 01:55:12 1997  Ben Pfaff  <blp@gnu.org>
8999
9000         * Makefile.am: (fiasco_SOURCES) Remove display.c.
9001
9002         * common.c: Fix typo.
9003
9004         * dfm.c: (read_record) Remove strncasecmp() emulation and fix the
9005         sense of the condition.
9006
9007         * expr-evl.c: (macro ALLOC_STRING_SPACE) [!PAGED_STACK] Add
9008         line-continuation backslash.
9009
9010         * filename.c: [__WIN32__] Include <windef.h> before <winbase.h>.
9011
9012         * frequencies.q: (custom_grouped, add_percentile) Don't use a
9013         non-constant expression as an argument to sizeof.
9014
9015         * glob.c: [__WIN32__ && __BORLANDC__] When including <conio.h>,
9016         undefine gettext macro because that's a conio function.
9017
9018         * hash.h: (hsh_prime_tab declaration) Remove.
9019
9020         * list.q: (write_fallback_headers) Move `leader' allocation out of
9021         main loop.  Change to local_alloc() allocation.
9022
9023         * output.h: Formatting fixes.  Put __attribute__ in right place on
9024         function prototypes.
9025
9026         * sfm-read.c: (read_machine_flt64_info, read_variables) Change
9027         incorrect `SECOND_LOWEST_VALUE' references to proper
9028         `second_lowest_value'.
9029
9030         * som-frnt.c: (EXTERN macro) Define as `extern' instead of null
9031         value.  This way 2 out of 3 of the som files define the vars
9032         extern, the correct way, that actually works under BC++.
9033         (som_set_float) Don't use nonconstant initializers for a struct.
9034
9035         * som-high.c: Add the standard alloca() header.
9036         (replicate_table) Add prototype.
9037
9038         Merged DISPLAY routine.
9039         * sysfile-info.c: (AS_*) New enum series.
9040         (cmd_sysfile_info) Gutted.  Calls describe_variable() to do the
9041         dirty work.
9042         (cmd_display, display_macros, display_documents,
9043         display_variables) Stolen from defunct display.c.
9044         (describe_variable) New function.
9045
9046         * temporary.c: [0] (display_tree) New debug function.
9047         (copy_variable) Performs shallow copy of value labels instead of
9048         deep copy; i.e., just copys the AVL tree and increments the
9049         reference counts.
9050
9051         * val-labs.c: Comment fixes.
9052         (do_value_labels) Optionally skip leading forward slash.
9053         (get_label) Creates only a single value label instead of many
9054         copies of one, and sets the reference count.
9055
9056         * display.c: Removed.
9057
9058         * dump-sysfile.c: New file, not yet complete.
9059
9060 Fri Jul 11 23:02:18 1997  Ben Pfaff  <blp@gnu.org>
9061
9062         For lots of source files I added more verbose_msg's.  These aren't
9063         listed below as they have tested as being benign.  In some cases
9064         these replaced debug_printf() calls.
9065
9066         * output.c: (outp_read_devices) Message fix.
9067
9068         * postscript.c: (output_encodings) Message fix.  Reports errors on
9069         fclose().
9070         (postopen) Message fix.
9071         
9072 Fri Jul 11 14:09:40 1997  Ben Pfaff  <blp@gnu.org>
9073
9074         * dfm.c: (dfm_close) Don't call fclose() for a NULL FILE.
9075
9076         * filename.c: (close_file_ext) Set f->file to NULL *after* closing
9077         it.
9078
9079         * main.c: Remove <malloc.h> #include.
9080
9081         * mis-val.c: (parse_numeric) Set .f member for each missing[]
9082         instead of trying to just set the missing[] itself, which is a
9083         gcc-specific idiom.
9084
9085         * sfm-read.c: (read_variables) Same.
9086
9087         * str.h: Add memmem() prototype.
9088
9089         * val-labs.c, var-labs.c: Replace <malloc.h> with <stdlib.h>.
9090
9091 Thu Jul 10 22:13:53 1997  Ben Pfaff  <blp@gnu.org>
9092
9093         * Makefile.am: (q2c) Don't include any libraries in the link.
9094
9095         * dfm.c: (force_line_buffer_extension) New macro.
9096         (count_tabs) New function.
9097         (tabs_To_spaces) New function.
9098         (read_record) Calls tabs_to_spaces() on the line being processed.
9099
9100         * q2c.c: Disabled i18n for this proglet so that libintl.a doesn't
9101         have to be compiled twice (once for CC, once for LOCAL_CC).
9102  
9103 Sun Jul  6 19:14:33 1997  Ben Pfaff  <blp@gnu.org>
9104
9105         * Makefile.am: (INCLUDES) Add intl directory; fix directories.
9106         (LDADD) Add @INTLLIBS@.
9107         (q2c) Add LIBS, @INTLLIBS@ to link step.
9108
9109         * inpt-pgm.c: Turn off debugging.
9110
9111         * postscript.c: (postopen) Format fix.  local_free() blocks
9112         returned by local_alloc(); don't free() them.
9113
9114 Sat Jul  5 23:44:51 1997  Ben Pfaff  <blp@gnu.org>
9115
9116         * data-in.c: (parse_string_as_format) Comment fix.  Fix check for
9117         string length.
9118
9119         * data-list.c: (read_from_data_list_fixed) Pass proper value for
9120         LEN arg, not simply the full string length.
9121
9122         * sort.c: (allocate_file_handles) Check SPSS compatible temp file
9123         directories before generic temp file directories.
9124
9125         * vfm.c: Disable debugging.
9126
9127 Fri Jul  4 13:26:41 1997  Ben Pfaff  <blp@gnu.org>
9128
9129         * get.c: Comment fix.
9130         (cmd_save_internal) Always passes GTSV_OPT_SAVE option.
9131
9132 Wed Jun 25 22:52:28 1997  Ben Pfaff  <blp@gnu.org>
9133
9134         * expr-prs.c: (debug_print_postfix) Conditionally included on
9135         GLOBAL_DEBUGGING.  Removed out_header() reference.
9136
9137         * exprP.h: Removed #undef GLOBAL_DEBUGGING.
9138
9139 Sun Jun 22 22:00:28 1997  Ben Pfaff  <blp@gnu.org>
9140
9141         * ascii.c: Removed obsolete ascii_close_page() prototype.
9142
9143         * command.c: (output_line) Comment fix.
9144
9145         * data-in.c: Formatting fix.
9146         (parse_string_as_format) Now the `fc' argument is used only for
9147         the purpose of error messages; it is not an index into the string
9148         passed.  All references changed.
9149
9150         * data-list.c: Comment fix.
9151         (cut_field) Comment fix.  Now returns the column number of the
9152         position of the field cut out on success.
9153         (parse_field) Added `column' argument.  Puts the column numbers in
9154         the error message.
9155         (read_from_data_list_free, read_from_data_list_list) Record the
9156         column number returned by cut_field(), pass it to parse_field().
9157
9158         * dfm.c: Comment fix.
9159
9160         * do-ifP.h: Comment fix.
9161
9162         * expr-prs.c: (SYSMIS_func) Implemented string-type arguments for
9163         the SYSMIS function.
9164
9165         * expr.h, exprP.h: Comment fix.
9166
9167         * glob.c: (init_glob) Only calls setlocale() and family if
9168         ENABLE_NLS set.
9169
9170         * hash.h: Comment fix.
9171
9172         * include.c: Comment fix.
9173
9174         * output.c: Comment fix.
9175
9176         * postscript.c: (ps_line_intersection) Simplified assertion.
9177
9178         * repeat.c: Comment fix.
9179
9180         * vars-atr.c: Comment fix.
9181
9182         * vars-prs.c: Comment fix.
9183
9184         * vfm.c: (vector_initialization) [DEBUGGING] Fixed undefined
9185         behavior with usage of postincrement.
9186         (memory_stream_read) Discards cases as it goes. 
9187
9188 Sun Jun 15 16:45:17 1997  Ben Pfaff  <blp@gnu.org>
9189
9190         * Makefile.am: Cleans q2c, not just distcleans it.  Distcleans
9191         foo.
9192
9193         * Most source files: Includes debug-print.h, related comment
9194         fixes.
9195
9196         * cases.c: (alloc_val) Removed complex allocation code.  Merely
9197         increments default_dict.nval and returns the former value.
9198         (envector, devector) Removed references to lv member of struct
9199         variable.
9200
9201         * common.h: (macro VME) Replaced complex definition with simple
9202         one.
9203
9204         * data-list.c: (cmd_data_list) Sets vfm_source instead of
9205         read_active_file and cancel_input_pgm.
9206         (read_from_data_list, cancel_data_list) Removed.
9207         (data_list_source_read, data_list_source_destroy_source) New
9208         functions.
9209         (glob var data_list_source) New var.
9210
9211         * dfm.c: (open_file_r, open_file_w) Simplified debug output.
9212         (cmd_begin_data) Improved criteria for an input program accessing
9213         the inline file.  Still not perfect.
9214
9215         * do-if.c: (do_if_trns_proc) Simplified debug output.
9216
9217         * expr-prs.c: Comment fixes.
9218         [DEBUGGING] (debug_print_postfix) Simplified debug output.
9219
9220         * file-handle.q: (fh_close_handle) Simplified debug output.
9221
9222         * file-type.c: Comment fixes.
9223         (cmd_file_type) Sets vfm_source instead of read_active_file and
9224         cancel_input_pgm.
9225         (cmd_end_file_type) On failure, discards variables in place of
9226         just canceling the input program.
9227         (read_from_file_type) Renamed file_type_source_read.
9228         (cancel_file_type) Renamed file_type_source_destroy_source.
9229         (glob var file_type_source) New var.
9230
9231         * get.c: (GTSV_* enum series) New enums GTSV_OPT_SAVE, GTSV_NONE.
9232         (cmd_get) Initializes options to GTSV_NONE before passing to
9233         trim_dictionary().  Removed `lv' reference.  Sets vfm_source
9234         instead of read_active_file and cancel_input_pgm.
9235         (cmd_save_internal) Initializes options before passing to
9236         trim_dictionary().  Local var `nval' removed.
9237         (dict_delete_run) Comment fixes.
9238         (trim_dictionary) Comment fixes.  Disallows scratch variables if
9239         GTSV_OPT_SAVE set in options.
9240         (read_from_get) Renamed get_source_read.
9241         (cancel_get) Renamed get_source_destroy_source.
9242         (glob var get_source) New var.
9243
9244         * inpt-pgm.c: (cmd_input_program) Sets vfm_source instead of
9245         read_active_file and cancel_input_pgm.
9246         (read_from_input_program) Renamed input_program_source_read.
9247         Simplified debug output.
9248         (cancel_input_program) Renamed
9249         input_program_source_destroy_source.
9250         (glob var input_program_source) New var.
9251
9252         * loop.c: (loop_1_trns_proc) Simplified debug output.
9253
9254         * main.c: (dump_token) Made eof output more explicit.
9255
9256         * sfm-read.c: (read_variables, dump_dictionary) Removed `lv'
9257         references.
9258
9259         * sort.c: (cmd_sort_cases) Disallows scratch variables.  Removed
9260         code for always-memory or always-disk cases.  malloc's case-list
9261         based on vfm_source_info.ncases.  Explicit support for
9262         memory_stream via memory_source_cases.
9263         (do_external_sort) Sets vfm_source instead of read_active_file and
9264         cancel_input_pgm.
9265         (allocate_file_handles) The temporary directory permissions are
9266         set to 0700 instead of 0777.
9267         (allocate_cases) Formatting fixes.  Simplified debug output.
9268         (output_record) Compacts the case if necessary before writing it
9269         out.
9270         (close_handle, open_handle_w) Simplified debug output.
9271         (write_initial_runs) Destroys vfm_sink, then sets it to
9272         sort_stream.  Writes records to memory based on
9273         vfm_sink_info.case_size.
9274         (write_to_sort_cases) Renamed sort_stream_write().
9275         (merge) Simplified error handling.  Simplified debug output.
9276         Formatting fixes.
9277         (read_from_external_sort) Renamed sort_stream_read().
9278         Reads records based on vfm_source_info.case_size.
9279         (sort_stream_write) Writes records to memory based on
9280         vfm_sink_info.case_size.
9281         (sort_stream_mode) New function.
9282         (glob var sort_stream) New variable.
9283
9284         * temporary.c: (cmd_temporary) Simplified debug output.
9285         (copy_variable) Removed references to `lv'.
9286
9287         * title.c: (get_title) Simplified debug output.
9288
9289         * var.h: Comment fixes.
9290         (struct get_proc) Removed member `lv'.
9291         (struct variable) Removed member `lv'.  Comment fixes.
9292         (glob vars read_active_file, write_active_file, cancel_input_pgm)
9293         Removed.
9294         (struct case_stream) New.
9295
9296         * vars-atr.c: (discard_variables) Changed cancel_input_pgm,
9297         read_active_file references to use vfm_source.
9298         (init_variable, replace_variable) Removed references to `lv'.
9299
9300         * vfm.c: Comment fixes.
9301         (glob var vfm_source, vfm_sink, vfm_source_info, vfm_sink_info)
9302         New variables.
9303         (static var queue, qh, qt, n_lag) Removed.  All references
9304         removed.
9305         (glob var compaction_necessary, compaction_nval, compaction_case,
9306         paging) New variables.
9307         (record_case) Removed.
9308         (procedure) Comment fixes.  Calls vfm_source->read() instead of
9309         read_active_file().
9310         (lag) Removed.
9311         (prepare_for_writing, arrange_compaction, make_temp_case,
9312         vector_initialization, setup_filter) New function.
9313         (open_active_file) Most of the code moved into the abovementioned
9314         new functions.  Now sets temp_dict to &default_dict if there is no
9315         temporary dictionary, for convenience.  New debug output.
9316         (close_active_file) Deals with changing the sink to the source.
9317         Calls finish_compaction().  Frees compaction_case.  Mostly
9318         rewritten.
9319         (glob vars disk_source_file, disk_sink_file) New vars.
9320         (destroy_active_file, read_from_memory) Removed.
9321         (disk_stream_init, disk_stream_read, disk_stream_write,
9322         disk_stream_mode, disk_stream_destroy_source,
9323         disk_stream_destroy_sink) New functions.
9324         (glob var vfm_disk_stream) New var.
9325         (glob vars memory_source_cases, memory_sink_cases,
9326         memory_sink_iter, memory_sink_max_cases) New vars.
9327         (memory_stream_init, memory_stream_read, memory_stream_write,
9328         memory_stream_mode, memory_stream_destroy_source,
9329         memory_stream_destroy_sink) New functions.
9330         (glob var vfm_memory_stream) New var.
9331         (write_case) Local var `i' renamed `cur_trns'; local var `retval'
9332         named `more_cases'.  Simplified debug output.  Otherwise mostly
9333         rewritten.
9334         (record_case) Moved into the stream drivers.  Removed.
9335         (transform) Removed (was dead code).
9336         (SPLIT_FILE_procfunc) s/vfm_replacement/vfm_sink_info/.  In the
9337         common case that the splits don't change, we don't need to copy
9338         the case into prev_case again--pointless.
9339         (compact_case) New function.
9340         (finish_compaction) New function.
9341
9342         * vfmP.h: Comment fixes.
9343         (DEV_* enum series) Removed. 
9344         (struct storage) Renamed `stream_info'.  Removed variant record.
9345         Removed `device' member.
9346
9347         * debug-print.h: New file.
9348         
9349 Sun Jun  8 01:12:38 1997  Ben Pfaff  <blp@gnu.org>
9350
9351         * autorecode.c: Turned off debugging.
9352
9353         * data-list.c: (destroy_dls) Closes the associated file handle.
9354
9355         * descript.q: (custom_variables) Added PV_NO_SCRATCH to
9356         parse_variables() options.
9357
9358         * dfm.c: (open_file_r) Removed gratuituous argument to msg() call.
9359
9360         * display.c: (display_variables) Really fixed null cell bug.
9361
9362         * file-handle.q: (fh_close_handle) Changed debugging message.
9363
9364         * frequencies.q: (custom_variables) Added PV_NO_SCRATCH to
9365         parse_variables() options.
9366
9367         * list.q: Added PV_NO_SCRATCH in q2c varlist options.
9368         (cmd_list) Fails if no variables specified.
9369         (determine_layout) Writes blank lines manually.
9370
9371         * loop.c: (loop_1_trns_proc) Made debugging code only print
9372         messages if debugging.
9373
9374         * q2c.c: (dump_subcommand) Appends sbc->message to SBC_VARLIST
9375         parse_variables() arguments.
9376         (main) Parses optional parenthesized options to varlist
9377         subcommands into sbc->message.
9378
9379         * sfm-read.c: Format fix.
9380
9381         * var.h: (FV_*) New enum series.
9382         (PV_*) New enum PV_NO_SCRATCH.
9383
9384         * vars-prs.c: (find_var) Removed.
9385         (fill_all_vars) Takes FV_* enum instead of boolean third
9386         argument.  Rewritten to deal with scratch as well as system
9387         variables.
9388         (parse_variables) Error message on scratch variable if
9389         PV_NO_SCRATCH set.
9390
9391         * vfm.c: (static var virt_begin_func) New var.
9392         (procedure) Sets up virt_begin_func.
9393         (SPLIT_FILE_procfunc) For the first case, calls virt_begin_func()
9394         after dump_splits().  For succeeding groups changes, calls
9395         virt_begin_func() instead of begin_func().      
9396
9397 Fri Jun  6 22:42:23 1997  Ben Pfaff  <blp@gnu.org>
9398
9399         * count.c, data-out.c, file-handle.q, list.q, loop.c: Turned off
9400         debugging.
9401
9402         * dfm.c: Added some debugging messages, disabled by default.
9403         (open_file_r) Fixed error message.
9404         (read_record) On eof on inline_file, instead of calling
9405         fh_close_handle(), simply jump to eof label like a normal file.
9406         Message fixes.
9407
9408         * display.c: Thin lines between rows for certain kinds of
9409         listing.  Fixed `null cell' bug.
9410
9411         * error.c: (failure) Flush stdout, stderr before failing.
9412
9413         * file-handle.q: (fh_close_handle) Added debugging message.
9414
9415         * frequencies.q: (dump_full) Bottom line extends across entire
9416         table width.  Changed title formatting.
9417         (dump_condensed) Changed title formatting.
9418         (dump_statistics) Fixed title formatting.
9419
9420         * glob.c: (init_glob) Moved initialization of cur_proc out of #if.
9421         Sets default value of set_format.
9422
9423         * list.q: (cmd_list) Calls blank_line() before determine_layout().
9424         Passes write_all_headers() to procedure() as pre-group func.
9425         (write_all_headers) New function.
9426         (determine_layout) Removed calls to write_header().
9427         Calls blank_line() before and after write_fallback_headers().
9428
9429         * recode.c: (recode_trns_free) Only attempts to free head->map if
9430         non-NULL.
9431
9432         * sfm-read.c: (read_variables) Allows `#' at beginning of system
9433         file variable names but gives a warning.  Sets `left' based on
9434         first character being/not being `#'.  On lossage frees dict->var.
9435
9436         * som-high.c: (som_draw_title) Simplified title formatting.
9437
9438         * vfm.c: (dump_splits) Fixed and changed splits formatting.
9439
9440 Thu Jun  5 22:51:15 1997  Ben Pfaff  <blp@gnu.org>
9441
9442         * autorecode.c: (cmd_autorecode) Sets h_trans to NULL at
9443         beginning.  Frees v_src, v_dest on successful exit.  Frees
9444         h_trans[*], h_trans on lossage.
9445         (recode) Frees h_trans[*], h_trans.
9446
9447         * dfm.c: (dfm_close) Formatting change.
9448         (open_inline_file) Now passed a dfm_fhuser_ext to initialize; no
9449         longer allocates its own in inline_file.
9450         (open_file_r) Passes the local dfm_fhuser_ext to
9451         open_inline_file().
9452         (open_file_w) Message fix. 
9453         (read_record) Buffer reallocation strategy changed.  Frees
9454         ext->line even in inline_file to prevent leaks.
9455         (dfm_put_record) Fixed bug where `ext' was cached before the file
9456         was opened and thus it would be NULL when the file really was
9457         open.
9458         (cmd_begin_data) Sets up inline_file basics itself, then calls
9459         open_inline_file() for the dfm_fhuser_ext.  Formatting fix.
9460
9461         * list.q: (write_line) Formatting fix.
9462         (clean_up) Minor strategy change.  Sets proportional font after
9463         finishing cleanup.
9464         (determine_layout) Sets fixed font before writing regular headers,
9465         or after writing fallback headers.
9466
9467         * modify-vars.c: (cmd_modify_vars) Frees variable lists for DROP
9468         and KEEP vars after using them.
9469
9470         * postscript.c: (ps_init_driver) Frees x->family.
9471         (postopen) When loading fonts, free the temporary font name buffer
9472         after using it.
9473         (ps_text_set_font_by_position) Free temporary font name buffer
9474         after using it.
9475         (text) Fixed code that calculated `lig' so that `lig' always gets
9476         initialized.  Formatting fix.
9477
9478         * som-low.c: (get_cell_size, som_get_table_size) `prop_height' ->
9479         `font_height'.
9480         [GLOBAL_DEBUGGIGN] (check_table) Use arena_alloc() to allocate
9481         cells, not xmalloc(), so that the cells will get destroyed
9482         automatically.
9483
9484         * sysfile-info.c: (cmd_sysfile_info) Frees the dictionary after
9485         using it.
9486
9487 Tue Jun  3 23:33:22 1997  Ben Pfaff  <blp@gnu.org>
9488
9489         * ascii.c: (ascii_text_draw) Always sets metrics for strings that
9490         are drawn.
9491
9492         * dfm.c: Comment fix.
9493
9494         * list.q: Comment fixes.  Include somP.h.  Removed static vars
9495         table, n_columns, n_rows, part.  New struct list_ext.  New static
9496         var line_buf.
9497         (n_lines_remaining, n_chars_width, write_line) New functions.
9498         (cmd_list, list_cases) Rewritten.
9499         (begin_row, end_row, flush_table) Removed.
9500         (write_header, clean_up, write_varname, write_fallback_headers,
9501         determine_layout) New functions.
9502
9503         * output.c: (outp_iterate_enabled_drivers) Minor reformat.
9504
9505         * output.h: Comment fix.
9506
9507         * postscript.c: Comment fix.
9508         (struct ps_driver_ext) Removed prop_size, fixed_size members;
9509         added font_size.  All references changed.
9510         (ps_init_driver) Initializes font_size.  Simplified space checking
9511         code.
9512         (static var option_tab[]) Removed prop-size, fixed-size; added
9513         font-size.
9514         (ps_option) Handles font_size.
9515
9516         * som-high.c: Moved prototypes into somP.h.
9517         (som_init_driver) New function.
9518         (som_submit_table) Moved some code into new function
9519         som_init_driver().
9520         (build_target) Moved some code into new function
9521         som_internal_eject_page().
9522         (som_eject_page) Uses som_internal_eject_page().
9523         (som_internal_eject_page) New function.
9524
9525         * som-low.c: Moved prototypes into somP.h.
9526
9527         * som.h: Formatting fixes.
9528
9529         * somP.h: (struct som_driver_ext) Removed em_width;
9530         added prop_em_width, fixed_width.
9531
9532 Mon Jun  2 14:25:25 1997  Ben Pfaff  <blp@gnu.org>
9533
9534         * Makefile.am: Added `localedir' definition.  Added
9535         -DLOCALEDIR="..." to DEFS.  Added -I. to INCLUDES.
9536
9537         * ascii.c: (macro draw_line) Fixed capitalization.
9538
9539         * ascii.c, autorecode.c, cases.c, cmdline.c, command.c, common.c,
9540         compute.c, count.c, data-in.c, data-list.c, data-out.c,
9541         descript.q, dfm.c, display.c, do-if.c, error.c, expr-evl.c,
9542         expr-opt.c, expr-prs.c, file-handle.q, file-type.c, filename.c,
9543         formats.c, frequencies.q, get.c, getline.c, glob.c, groff-font.c,
9544         hash.c, heap.c, include.c, inpt-pgm.c, lexer.c, list.q, loop.c,
9545         main.c, mis-val.c, misc.c, modify-vars.c, numeric.c, output.c,
9546         postscript.c, print.c, q2c.c, recode.c, rename-vars.c, repeat.c,
9547         sample.c, sel-if.c, sfm-read.c, sfm-write.c, sfmP.h, som-frnt.c,
9548         som-high.c, som-low.c, sort.c, split-file.c, sysfile-info.c,
9549         temporary.c, title.c, tokens.h, val-labs.c, var-labs.c,
9550         vars-atr.c, vars-prs.c, vector.c, vfm.c, weight.c: Marked strings
9551         for internationlization.
9552
9553         * glob.c: [HAVE_LOCALE_H] Includes locale.h.
9554
9555 Sun Jun  1 23:31:18 1997  Ben Pfaff  <blp@gnu.org>
9556
9557         * do-if.c, sort.c, val-labs.c: Comment fixes.
9558
9559         * glob.c: (init_glob) Uncommented, updated i18n support.
9560         
9561         * arena.c, ascii.c, data-in.c, descript.q, error.c, expr-evl.c,
9562         expr-opt.c, expr-prs.c, filename.c, frequencies.q, groff-font.c,
9563         output.c, postscript.c, sfm-read.c, som-high.c, vars-prs.c: Made
9564         the declarations of macros taking arguments a lot nicer.
9565
9566 Sun Jun  1 17:22:04 1997  Ben Pfaff  <blp@gnu.org>
9567
9568         * error.h: Removed CE, CW aliases for SE, SW.
9569
9570         * q2c.c: Removed explicit streq() definition since it's duplicated
9571         in str.h.
9572         
9573         * approx.h, error.h, font.h, hash.h, misc.h, output.h, somP.h,
9574         stats.h, str.h, tokens.h: Made the declarations of macros taking
9575         arguments a lot nicer-looking of <pinard@iro.umontreal.ca>.
9576         Comment fixes.
9577
9578 Sun Jun  1 12:02:06 1997  Ben Pfaff  <blp@gnu.org>
9579
9580         * cmdline.c: Comment fixes.
9581         (pick_compat) Changed return type to int.  Now, instead of setting
9582         glob var `compat' to the emulation, returns the emulation.  All
9583         references changed.
9584         (parse_command_line) Added terminating null to end of
9585         `long_options' array definition.
9586         (pre_syntax_message) Fixes.
9587         (usage) Shows the default emulation in the syntax message by
9588         calling pick_compat().
9589
9590         * getline.c: (getl_add_include_dir) Separates paths with
9591         PATH_DELIMITER, not DIR_SEPARATOR.
9592
9593         * glob.c: (init_glob) Fixed references to DEFAULT_VER_PCP40,
9594         DEFAULT_VER_WIN61, DEFAULT_VER_X40.
9595
9596         * output.c: (outp_configure_macro) Make earlier definitions for a
9597         particular key override later ones for the same key.
9598         
9599 Fri May 30 19:40:49 1997  Ben Pfaff  <blp@gnu.org>
9600
9601         * ascii.c: Comment fixes.
9602
9603         * output.c: (outp_get_paper_size)
9604         s/STAT_OUTPUT_INIT_FILE/STAT_OUTPUT_PAPERSIZE_FILE/.
9605         
9606 Sun May 25 22:34:07 1997  Ben Pfaff  <blp@gnu.org>
9607
9608         * ascii.c, postscript.c, sfm-read.c, sfm-write.c, sort.c: Include
9609         <errno.h>.  GNU libc 2 enforces this!
9610
9611         * command.c: (parse_cmd) Fixed problem with `else' clause being
9612         paired with wrong `if'.  Comment fix.
9613
9614 Fri May  9 16:53:52 1997  Ben Pfaff  <blp@gnu.org>
9615
9616         * getline.c: [!HAVE_LIBREADLINE] (read_console) Changed
9617         blp_getline() to getline().
9618
9619         * output.c: (outp_eval_dimension) Changed the fix from last time;
9620         there was no variable `a'.
9621
9622         * q2c.c: (get_line) Fixed boundary condition overrun bug.
9623
9624 Mon May  5 21:58:22 1997  Ben Pfaff  <blp@gnu.org>
9625
9626         * output.c: (outp_evaluate_dimension) Fixed handling of negative
9627         numbers having fractional parts.  Added case of a fraction without
9628         a whole-number part.
9629
9630 Fri May  2 22:08:05 1997  Ben Pfaff  <blp@gnu.org>
9631
9632         * ascii.c: (ascii_text_get_font_position) Removed.
9633
9634         * expr.h, exprP.h: Disabled debugging.
9635
9636         * groff-font.c, postscript.c: Changed `groff' to `Groff' in
9637         several places.
9638
9639         * output.h: (struct outp_class_struct) Removed
9640         text_get_font_position method.  All references deleted.
9641
9642         * postscript.c: Big change here.  Fontmaps were completely
9643         eliminated because of a change in philosophy.  Comment fixes.
9644         (struct ps_fontmap, ps2dit_map, font_family, dit2family_map)
9645         Removed.
9646         (struct ps_driver_ext) `position', `fontmap', `prop_name',
9647         `fixed_name' members removed.  New members `prop_family',
9648         `fixed_family'.  `family' member changed to type char *.
9649         (static var ps_fontmaps) Removed.
9650         () Removed.
9651         (ps_init_driver) Removed obsolete references, updated.
9652         Initializes `translate_x', `translate_y', `scale'.  Doesn't read
9653         fontmap, of course.  Refers to font names through internal_name
9654         rather than subversive means.  Frees proper items.
9655         (static var option_tab[]) Removed `fontmap-file' option; renamed
9656         `fixed-font', `prop-font'.
9657         (ps_option) Corresponds to option_tab[].
9658         (read_fontmap, release_fontmap, ps_to_dit, compare_ps2dit,
9659         hash_ps2dit, compare_dit2family, hash_dit2family, compare_family,
9660         hash_family) Removed.
9661         (postopen) Generates font names from family names.  Gets
9662         PostScript font name properly.  New prologue file comment `!!!'
9663         style.
9664         (ps_open_page) Adds translate_x, translate_y to BP prologue
9665         function; gives SF argument floating-point format.
9666         (ps_text_set_font_by_name) Doesn't try to map PostScript->Groff
9667         font name.  Doesn't change font family.
9668         (ps_text_set_font_by_position) Generates Groff font name from font
9669         family name instead of through table lookup.
9670         (ps_text_set_font_by_family) Renamed `ps_text_set_font_family',
9671         all references changed.  Reduced to simple string assignment.
9672         (ps_get_font_name) Removed.
9673         (ps_get_font_family) Reduced to string return.
9674         (text) Doesn't save `position' since it no longer exists.  Ugly
9675         kluge to save font family--fix soon?
9676         (load_font) Removed PostScript name argument.
9677         
9678 Thu May  1 14:58:59 1997  Ben Pfaff  <blp@gnu.org>
9679
9680         * postscript.c: Comment fix.
9681         (ps_open_page) Puts scale factor in PostScript output.
9682         
9683 Sat Apr 26 11:49:32 1997  Ben Pfaff  <blp@gnu.org>
9684
9685         * Makefile.am: Distcleans q2c.
9686
9687 Wed Apr 23 21:33:48 1997  Ben Pfaff  <blp@gnu.org>
9688
9689         * ascii.c: (delineate) Sets text size even if width is zero.
9690
9691         * command.c: Comment fix.
9692         (static var cmd_table[]) Re-enabled EVALUATE command.
9693         (parse_cmd) Lotsa comment fixes.  Fixed infinite loop in parsing
9694         of comments in script files.  Now more liberal on criteria for
9695         performing a state transition--if *anything* happened correctly,
9696         not just if *everything* happened correctly.
9697
9698         * data-out.c: (convert_F) Comment fix.  Why in the fsck does
9699         Checker segfault on formatting large numbers and why in the fsck
9700         hadn't I noticed this before?
9701
9702         * expr.h, exprP.h: No longer turn off GLOBAL_DEBUGGING.
9703
9704         * list.q: (cmd_list) Commented out the actual output routine
9705         because of various problems.  Probably will abandon the idea of
9706         using the general `crushed tables' for the LIST procedure.
9707
9708         * temporary.c: (restore_dictionary) Sets var_by_name to NULL after
9709         clearing it.  Allocates a new var_by_name dictionary before trying
9710         to add members to it.
9711
9712         * vars-atr.c: [DEBUGGING] (dump_one_var_node) Removed argument
9713         `sib'.  Changed type of `node' argument.
9714         [DEBUGGING] (dump_var_tree) Replaced avlwalk() with
9715         avl_walk_inorder().
9716         (clear_variable) Only dumps the var tree if var_by_name non-NULL.
9717         [DEBUGGING] Only deletes the variable from var_by_name if that var
9718         non-NULL.
9719
9720 Fri Apr 18 16:48:41 1997  Ben Pfaff  <blp@gnu.org>
9721
9722         * Makefile.am: Added include files to SOURCES.  Added
9723         frequencies.q to EXTRA_DIST.  Removed include/ from INCLUDES.  Now
9724         includes rules for q2c.  Added `boast' target.
9725
9726 Fri Apr 18 15:42:22 1997  Ben Pfaff  <blp@gnu.org>
9727
9728         * Makefile.am: Maintainer-clean Makefile.in.
9729         
9730         * Makefile.am: Fixed redundant EXTRA_DIST line.
9731
9732         * ascii.c: Comment fixes.
9733         (ascii_line_vert) Fixed overly aggressive range check.
9734
9735         * display.c: Removed dead code.
9736
9737         * list.q: Turn debugging on.
9738         (flush_table) New debug code.
9739
9740         * sfm-read.c: (read_value_labels) malloc's the structure before
9741         trying to assign to its members.
9742
9743         * sfm-write.c: Comment fix.
9744
9745         * som-high.c: (som_submit_table) Sets som.t and som.d on each call
9746         to output_table().
9747         (output_table) No arguments anymore--gets them through `som'
9748         global.  New debug code.  In crushed tables, now sets `htv' as
9749         well as `hv' to avoid bad confusion later.
9750         (dump_crush_page) New debug code.
9751
9752         * som-low.c: (som_dump_crush_page) New debug code.
9753
9754 Thu Mar 27 01:11:29 1997  Ben Pfaff  <blp@gnu.org>
9755
9756         All source files: Broke long lines into multiple lines.
9757         
9758         * ascii.c: (ascii_close_page) Uses host_system var in place of
9759         HOST_SYSTEM constant.
9760
9761         * cmdline.c: (var syntax_message[]) Broke into
9762         pre_syntax_message[] and post_syntax_message[].
9763         (usage) Outputs both parts, separated by driver list.
9764
9765         * error.h: Fixed broken formatting.
9766
9767         * expr-opt.c: (str_search, str_rsearch) New functions.
9768
9769         * misc.c: (blp_getdelim) Removed.  All references changed to
9770         `getdelim'.
9771         (str_search, str_rsearch) Removed.
9772         (memrmem) New function.
9773
9774         * misc.h: (blp_getline) Removed.  All reference changed to
9775         `getline'.
9776
9777         * stat.h: New file.
9778
9779         * filename.c: Includes "stat.h", not <sys/stat.h>.
9780         (blp_getenv) Uses host_system var instead of HOST_SYSTEM constant.
9781
9782         * output.c: (outp_list_classes) Changed output formatting.
9783
9784         * sfm-write.c: (write_header) Uses host_system var instead of
9785         HOST_SYSTEM constant.
9786         (write_rec_7_34) Extracts version numbers from the version string.
9787         Untested.
9788
9789         * sort.c: Includes "stat.h", not <sys/stat.h>.
9790
9791         * str.c: (strcasecmp) Removed.
9792
9793         * title.c: (cmd_document) Uses host_system var instead of
9794         HOST_SYSTEM constant.
9795
9796         * version.c: Generated on-the-fly by the Makefile instead of being
9797         static.
9798
9799         * str.h: Comment fixes.  Doesn't substitute for missing memmove or
9800         memcpy.
9801         [!HAVE_STRNCASECMP] Declares strncasecmp().
9802
9803         * version.h: Removed stray character.  Comment fixes.
9804         (vars host_system, build_system) New vars.
9805
9806 Mon Mar 24 21:47:31 1997  Ben Pfaff  <blp@gnu.org>
9807
9808         * Most source files: Changed formatting of copyright notice; fixed
9809         FSF address; reformatted to better conform to GNU standards;
9810         comment fixes.  Added markups to prevent GNU indent from messing
9811         up my beautiful formatting :-).
9812         
9813         * q2c.c: (get_line) Ignores lines that begin with `/* *INDENT' so
9814         that GNU indent markups can be passed through without problems.
9815
9816 Wed Feb 19 21:30:31 1997  Ben Pfaff  <blp@gnu.org>
9817
9818         * get.c: Turned off debugging.
9819
9820         * glob.c: (init_glob) Turned on save-file compression by default.
9821
9822         * sfm-write.c: (sfm_write_case) Fixed bug which resulted in less
9823         compression than was possible in save files.
9824
9825 Sun Feb 16 20:57:20 1997  Ben Pfaff  <blp@gnu.org>
9826
9827         * data-out.c: (convert_F) Comment fixes.  Debug message fixes.
9828
9829         * frequencies.q: Removed Fiasco extensions.  Updated calculation
9830         algorithms.  Polished output format. 
9831         (struct frq_info_struct) Removed members `max_degree', `min_n',
9832         all references removed.
9833         (macro frq_extensions) Removed.
9834         (static vars min_n, max_degree) Removed, all references removed.
9835         (internal_cmd_frequencies) Doesn't handle extensions.  Doesn't
9836         calculate `min_n', `max_degree'.
9837         (postcalc) Passes new arg to dump_statistics().
9838         (dump_full) Honor NOLABEL option.  Buggy?  Adds variable name
9839         title.
9840         (dump_condensed) Adds variable name title.
9841         (sum_freqs) Removed.
9842         (calc_stats) Updated calculation algorithm.
9843         (dump_statistics) Removed warning for too-few observations.
9844         Changed table formatting.  Adds variable name title if passed new
9845         arg is nonzero.
9846
9847         * output.h: Comment fix.
9848
9849         * recode.c, sample.c, sort.c: Disabled debug code.
9850
9851         * som-frnt.c: (som_set_value, som_set_float, som_set_text)
9852         Improved debug code.
9853
9854         * var.h: (enum series frq_*) Removed Fiasco extensions.
9855
9856 Sat Feb 15 21:26:53 1997  Ben Pfaff  <blp@gnu.org>
9857
9858         * command.c: Added PROCESS IF to command table.
9859
9860         * Lots & lots of places, removed checks for NULLs preceding calls
9861         to free_expression(), which itself checks.
9862
9863         * descript.q: Removed Fiasco extensions.  Removed optimizations
9864         for non-weighted active files.  Implemented some options.
9865         Finished polishing output format.  Comment fixes.  Merged
9866         `descript.g'.
9867         (static vars n_glob_miss_list, n_glob_valid, n_glob_missing,
9868         max_degree, min_n) Removed.
9869         (macro dsc_extensions) Removed.
9870         (struct dsc_info_struct) Removed `min_n' member, all references
9871         fixed.
9872         (internal_cmd_descriptives) Removed calculation of min_n,
9873         max_degree.  Only deals with one `calc' routine instead of two
9874         flavors.
9875         (precalc) Eliminated redundancy.  Updated for changes to
9876         descriptives_proc structure.
9877         (calc) Moved here from `descript.g'.  Rewritten to calculate
9878         statistics via `moments about the mean' rather than by summing,
9879         summing squares, summing cubes, and so on.
9880         (postcalc) Rewritten for new-style statistical calculation.
9881         (display) Removed support for displaying variables across rows.
9882         No longer crushes the descriptives table.  Removed ancient code.
9883         Added display of N, by variable and listwise.
9884
9885         * descript.g: Removed; merged into `descript.q'.
9886
9887         * expr-evl.c: (evaluate_expression) Now returns a double.  For
9888         numeric results, it returns the result as well as storing it in
9889         the passed `value' structure if non-NULL.  For string results it
9890         just returns 0.0 and it must be passed non-NULL.  Many references
9891         to this function were optimized by use of this change, especially
9892         but not exclusively in `compute.c'.
9893
9894         * frequencies.g: Comment fix.
9895
9896         * glob.c: (glob var process_if_expr) New global var.
9897
9898         * postscript.c: (static var option_tab[]) Corrected entry for
9899         `fixed_size'.
9900         (postopen) Sets x->size to x->prop_size.
9901         (ps_text_set_font_by_name) Sets font size as well as typeface for
9902         PROP and FIXED fonts.
9903         
9904         * sel-if.c: (cmd_process_if) New function.
9905
9906         * sfm-write.c: (struct sfm_fhuser_ext) New member `n_cases'.
9907         (sfm_write_dictionary) Sets `n_cases' to 0.
9908         (sfm_write_case) Increments `n_cases'.
9909         (sfm_close) Attempts to seek the system file back to the header
9910         and write the number of cases in its proper slot.
9911
9912         * som-frnt.c: (som_insert_table) Masks off expansion options since
9913         only SOPT_X_NORM seems to work sensibly.
9914
9915         * som-low.c: (get_cell_size) Fixed bug when a table cell was sized
9916         with a `fixed' value of 2.
9917
9918         * sort.c: (cmd_sort_cases) Cancels PROCESS IF.
9919
9920         * sysfile-info.c: (cmd_sysfile_info) Doesn't display more than 10
9921         value labels; uses SOPT_NONE instead of SOPT_X_BOTH.
9922
9923         * var.h: (enum series dsc_*) Removed Fiasco extensions.
9924         (struct descriptives_proc) Removed `miss_noweight'; new members
9925         `X_bar', `M2', `M3', `M4', `min', `max'.
9926
9927         * vars-atr.c: (discard_variables) Cancels PROCESS IF.
9928
9929         * vfm.c: (close_active_file) Cancels PROCESS IF.
9930         (write_case) Doesn't process cases unselected by PROCESS IF.
9931
9932 Fri Feb 14 23:32:58 1997  Ben Pfaff  <blp@gnu.org>
9933
9934         * glob.c: (glob var err) Removed.
9935
9936         * sysfile-info.c: (cmd_sysfile_info) When adjusting table size,
9937         doesn't have to take into account number of value labels since
9938         they're in a subtable anyway.  Also, doesn't display more than 10
9939         value labels since we can't yet break pages in subtables.
9940
9941 Tue Feb  4 15:15:50 1997  Ben Pfaff  <blp@gnu.org>
9942
9943         * som-frnt.c: (som_change_table_size) Simple change for elegance
9944         that shouldn't change behavior.
9945         (som_set_value) Comment fix.
9946
9947         * som-high.c: (som_submit_table) Message fix.
9948
9949 Wed Jan 22 21:54:00 1997  Ben Pfaff  <blp@gnu.org>
9950
9951         * command.c: Added SYSFILE INFO to command table.
9952
9953         * file-handle.q: (fh_handle_filename) New function.
9954
9955         * get.c: (save_trns_proc) Fixed a bug in padding of output data
9956         with spaces.
9957
9958         * main.c: (parse) New return value for command functions, -3.
9959
9960         * misc.h: Comment fix.
9961
9962         * output.h: Comment fixes.
9963         (macro COMPONENTS) Removed.
9964
9965         * postscript.c: (write_text) Modified literal_chars[] so that `('
9966         and ')' are not written to the output in strings as literals.
9967
9968         * sfm-read.c: (sfm_read_dictionary) New argument.
9969         (read_header) New argument.  Sets the information structure's
9970         values from the header information.  
9971         (read_variables) [__CHECKER__] Redefines isalnum()--some sort of
9972         bizarre Checker problem, I guess.
9973         (read_variables) Proper cleanup on lossage.
9974
9975         * sfm.h: (struct sfm_read_info) New struct for use by
9976         sfm_read_dictionary().
9977
9978         * som-frnt.c: (som_create_table) New argument CREATE_FLAGS,
9979         currently used just for tables that can be dynamically resized and
9980         thus have to be allocated with arena_malloc() instead of
9981         arena_alloc().  All references changed.
9982         (som_change_table_size) New function.
9983         (som_insert_table) Bugfix: now inserts `cell', not `c'!
9984
9985         * som-high.c: [GLOBAL_DEBUGGING] (check_table) Moved to som-low.c.
9986         (som_submit_table) [GLOBAL_DEBUGGING] Doesn't call check_table()
9987         any more.
9988
9989         * som-low.c: (draw_cell) Calls draw_table_cell() for SCON_TABLE
9990         cells.
9991         (draw_intersection) Now takes an argument specifying the table in
9992         question.  All references changed.
9993         (draw_table_cell) New function.
9994         (som_get_table_size) [GLOBAL_DEBUGGING] Calls check_table().
9995         (som_get_table_size) Many nice new explanatory comments.
9996         [GLOBAL_DEBUGGING] (check_table) Moved here from som-high.c.
9997
9998         * som.h: New enum series SOM_CREATE_* for use as create flags with
9999         som_create_table().
10000
10001         * str.h: Moved a comment here from TODO.
10002
10003         * sysfile-info.c: New file.  Reference implementation.
10004
10005 Sun Jan 19 14:22:11 1997  Ben Pfaff  <blp@gnu.org>
10006
10007         * command.c: Added RENAME VARIABLES to table of commands.
10008
10009         * data-in.c: (dls_error) Sets `cust_field'.
10010         (parse_N) Message fix.
10011         (parse_day_count) New function.
10012         (to_roman) Never outputs VX as a `short form' of V.
10013         (parse_month) Fixed parsing of Roman numerals.
10014         (parse_trailer) Message fix.
10015         (parse_DATE, parse_ADATE, parse_EDATE, parse_SDATE, parse_JDATE,
10016         parse_QYR, parse_MOYR, parse_WKYR, parse_DTIME) Issue a message if
10017         the date is invalid.
10018         (parse_SDATE) Fixed swapped day, year.
10019         (parse_JDATE) Fixed bug for dates in 1582.
10020         (parse_DTIME) Allows days not between 1 and 31.
10021         (parse_numeric) Makes local copy of f.type for easier usage.
10022         FMT_DOLLAR fixed.
10023
10024         * data-out.c: (convert_F) When outputting as scientific, properly
10025         sets f.type as fp->type.
10026         (insert_commas) Fixed operator precedence problem with setting of
10027         nitems.  Changed strcpy to memcpy (no null terminator). 
10028         (convert_date) Fixed FMT_JDATE: added 1900 to year.
10029         (convert_CCx) Essentially rewritten, but now it works.
10030
10031         * display.c: (cmd_display) Added DISPLAY FILE LABEL (undocumented
10032         feature of Fiasco).
10033         (display_documents) Implemented.
10034
10035         * error.c: (glob var cust_field) New var.
10036         (vmsg) Displays cust_field as part of message classes DE and DW.
10037
10038         * formats.c: (debug_print) Fixed to compile under updated
10039         dictionary format.
10040
10041         * get.c: (cmd_get, cmd_save_internal) Close file handle on
10042         failure.
10043
10044         * misc.c: (parse_format_specifier) Formatting fix.
10045
10046         * modify-vars.c: (struct var_modification) Renamed `n_reorder' as
10047         `n_rename' for clarity.
10048         (cmd_modify_vars) Initializes `forward' and `positional' at
10049         appropriate times.  Frees lists of vars to rename on failure.
10050         Comment fix.  Frees memory on success.  
10051         (rearrange_dict) Simplified `for' loop condition.
10052
10053         * rename-vars.c: New file (reference implementation).
10054         
10055         * set.q: (internal_cmd_set) Fixed `emu' test condition.
10056
10057         * sfm-read.c: (read_header) File label is created only if file
10058         label in file is not blank.
10059         (read_variables) Initializes `dict' local variable.
10060         (read_documents) Proper behavior on lossage.
10061
10062         * sfm-write.c: (write_header) Doesn't blank out the file label
10063         (why was this here to begin with?!)
10064
10065         * temporary.c: (save_dictionary) File label is copied only if
10066         non-NULL.  Doesn't try to xstrdup() dictionary documents.
10067         Adapted so as to not irritate Checker.
10068         (free_dictionary) Only destroys var_by_name if non-NULL.
10069
10070         * title.c: (cmd_file_label) Doesn't skip FILE, LABEL tokens.
10071         (cmd_document) Doesn't skip DOCUMENT token.  Adds some header
10072         lines to the document, indents the document.  Also, it works now.
10073         (add_document_line) New function.
10074
10075         * var.h: (struct dictionary) Reordering.
10076
10077         * vars-prs.c: (parse_variables) On lossage, only local_free()'s
10078         bits if it was allocated to begin with.
10079
10080 Thu Jan 16 13:08:57 1997  Ben Pfaff  <blp@gnu.org>
10081
10082         * command.c: Added MODIFY VARS to list of commands.
10083
10084         * configure.in: Updated custom macros for autoconf 2.12.  Removed
10085         mmap reference; fixed termcap library reference.
10086
10087         * display.c: (display_variables) Fixed a few bugs although it's
10088         still not well written.
10089
10090         * error.c: [!__CHECKER__] (chkr_disp_call_chain) New function.
10091         (induce_segfault) Calls chkr_disp_call_chain() instead of
10092         inducing an actual SIGSEGV.
10093
10094         * expr-opt.c: (evaluate_tree) Swapped order of arguments to
10095         str_search() and str_rsearch().  Fixed tests for matches on
10096         OP_INDEX and OP_RINDEX.
10097
10098         * filename.c: (good_getcwd) Removed as the new libc for Checker
10099         doesn't contain this bug, apparently.
10100
10101         * misc.c: (str_search, str_rsearch) Changed order of arguments for
10102         consistency with GNU memmem.
10103         (blp_getdelim) Changed `len' from `int' to `size_t'.
10104
10105         * modify-vars.c: Reference implementation.
10106
10107         * som-frnt.c: (zero_length) New global var.
10108         (som_create_table) Message fix.
10109
10110         * som.h: Added gcc attributions to som_set_text(),
10111         som_output_text() prototypes.  blank_line() refers to
10112         zero_length[] instead of a literal null string to suppress gcc
10113         warnings.
10114
10115         * sort.c: (do_external_sort) Fixed fencepost error on lossage.
10116         (allocate_cases) Decrements x_max so the last element of x[] can
10117         be used by the algorithm.
10118
10119         * var.h: Changed minor details of `variable' declaration.  
10120         (struct modify_vars_proc) New struct.
10121         (struct variable) Added field p.mfv.
10122
10123         * vars-atr.c: Comment fix.
10124
10125         * vars-prs.c: (fill_all_vars) More optimal implementation.
10126
10127         * vfm.c: (dump_splits) Sets the last byte of temp_buf to a null
10128         character, which it shouldn't have to do but printf() seems to
10129         read the null byte even though I supply a maximum length...
10130
10131 Fri Jan 10 20:22:08 1997  Ben Pfaff  <blp@gnu.org>
10132
10133         * command.c: Removed command alias X for QUIT.
10134         (parse_cmd) Fixed comment parsing.
10135
10136         * dfm.c: (struct dfm_fhuser_ext) Fields `len', `size' are now of
10137         type size_t.
10138         (read_record) Fixed references to len, size.
10139         (dfm_get_record) Restructured.
10140
10141         * file-handle.h: (struct file_handle) Field `lrecl' now of type
10142         size_t.
10143
10144         * file-handle.q: (internal_cmd_file_handle) Checks for nonpositive
10145         record length.
10146
10147         * modify-vars.c: New file.  Not complete.
10148         
10149         * set.q: (set_ccx) Fixed operator precedence problem regarding ^
10150         and ==.
10151
10152         * sfm-read.c: (bswap_flt64, read_header, write_variable) Fixed
10153         problems caused by int/size_t differences.
10154
10155         * sort.c: (output_record, merge_once) Cast `size_t's to `int's in
10156         appropriate spots.
10157
10158         * str.c: (strcasecmp) Fixed bug that cropped up when the strings
10159         being compared were of equal length.
10160
10161 Thu Jan  2 19:08:23 1997  Ben Pfaff  <blp@gnu.org>
10162
10163         * command.c: Added DOCUMENT, DROP DOCUMENTS, FILE LABEL.
10164
10165         * lexer.c: (get_dotted_rest_of_line) New function.
10166
10167         * sel-if.c: (cmd_filter) Cannot choose string or scratch variables
10168         as filters.
10169
10170         * sfm-read.c: (sfm_read_dictionary) Calls read_documents() to read
10171         type 6 records.  Frees the dictionary properly.
10172         (read_header) Initializes the dictionary instead of letting
10173         read_variables() do it.  Sets the dictionary file label from the
10174         system file.
10175         (read_documents) New function.
10176
10177         * sfm-write.c: (sfm_write_dictionary) Calls write_documents() to
10178         write type 6 record if appropriate.
10179         (write_header) Writes file label from dictionary.
10180         (write_documents) New function.
10181
10182         * temporary.c: (save_dictionary, restore_dictionary,
10183         free_dictionary) Properly handle new fields in dictionary struct.
10184
10185         * title.c: (get_title) Returns after failure().
10186         (cmd_file_label, cmd_document, cmd_drop_documents) New functions
10187         for new commands FILE LABEL, DOCUMENT, DROP DOCUMENTS.  Untested.
10188
10189         * var.h: (struct dictionary) New fields `label', `n_documents',
10190         `documents'.
10191
10192 Wed Jan  1 22:08:10 1997  Ben Pfaff  <blp@gnu.org>
10193
10194         * command.c: Added FILTER to list of commands.
10195
10196         * frequencies.g: [WEIGHTING] Removed test for weighting!=-1 since
10197         it's always true.
10198
10199         * get.c: (cmd_save_internal) Removed weighting code since it's now
10200         handled by sfm-write.c.  Properly commented out debug code.
10201
10202         * glob.c: (glob var weighting) Removed.
10203
10204         * sel-if.c: Comment fixes.
10205         (cmd_filter) New function.
10206
10207         * sfm-read.c: (struct sfm_fhuser_ext) New field `weight_index'.
10208         (sfm_read_dictionary) Sets weighting variable direct in the
10209         created dictionary now.  (Apparently we previously didn't support
10210         weighting on GET?)
10211         (read_header) Sets weight_index field in sfm_fhuser_ext from
10212         header read from disk.
10213
10214         * sfm-write.c: (sfm_write_dictionary) Comment fix.
10215         (write_header) Now sets the weighting in the header from the
10216         passed primary dictionary instead of from the sfm_write_info.
10217
10218         * sfm.h: (struct sfm_write_info) Removed field `weight'.
10219
10220         * som-high.c: (dump_crush_table) Fixed a couple of assertions that
10221         broke on boundary conditions.
10222
10223         * var.h: (struct dictionary) New fields `weight_var',
10224         `weight_index', and `filter_var'.
10225         (glob var weighting) Removed.  This is now part of struct
10226         dictionary.  All references changed; the less mechanical changes
10227         are described above.
10228
10229         * vars-atr.c: (find_dict_variable) New function.
10230
10231         * vfm.c: (static var filter_index) New variable.
10232         (open_active_file) Initializes filter_index from default_dict.
10233         (write_case) Calls proc_func() only if the filter variable is
10234         nonzero; this implements FILTER behavior.
10235
10236         * weight.c: (static var weight_varname) Removed.
10237         (cmd_weight) Modified default_dict instead of glob vars.
10238         (update_weighting) Changed the signature to modify a dictionary
10239         instead of glob vars.  Now returns the weighting variable.
10240         (get_weighting_variable) Removed; its function is absorbed by
10241         update_weighting().
10242         (stop_weighting) Operates on a dictionary now.
10243
10244 Wed Jan  1 17:00:59 1997  Ben Pfaff  <blp@gnu.org>
10245
10246         * sort.c: Removed debugging info from messages.
10247         (do_external_sort) Cleans up after itself by deleting the
10248         temporary directory on failure.  (On success it is deleted by the
10249         input program.)
10250         (allocate_cases) Removed debug code.  Added clean up code.
10251         (output_record) Removed debug code.
10252         (merge) Added code to close all the input files that are currently
10253         open.  This is a likely location for bugs, because I'm not sure
10254         about boundary conditions.  Removed an unnecesary heap_delete().
10255         (merge_once) Removed input file "optimization" that in fact
10256         screwed up the rest of the code.  Message and comment fixes.
10257
10258 Sun Dec 29 21:36:48 1996  Ben Pfaff  <blp@gnu.org>
10259
10260         * error.c: [__CHECKER__] (induce_segfault) Flushes output streams.
10261
10262         * heap.c: (heap_delete) New argument.
10263
10264         * sort.c: Finished implementation of external sort.
10265
10266         * vfm.c: (read_from_disk) Returns after a disk error.
10267
10268 Sun Dec 22 23:10:39 1996  Ben Pfaff  <blp@gnu.org>
10269
10270         * sort.c: (static var state) Removed.
10271         (static vars max_handles, tmp_basename, tmp_extname,
10272         huffman_queue) New variables.
10273         (do_external_sort) Moved most code to new functions.
10274         Creates huffman_queue.
10275         (allocate_file_handles, allocate_cases) New functions.
10276         (static vars run_no, run_length, file_index, case_count) New
10277         variables. 
10278         (output_record) Returns success.  Now really writes to the output
10279         file.
10280         (begin_run, end_run) New functions.
10281         (write_initial_runs) Returns success.  Initializes run_no to -1.
10282         Calls begin_run(), end_run() at appropriate times.  Outputs debug
10283         messages.
10284         (write_to_sort_cases) Calls begin_run(), end_run() at appropriate
10285         times.
10286         (merge) New function.
10287
10288         * heap.c, heap.h: New files.  Hopefully in near-final form.
10289
10290 Sat Dec 21 21:51:04 1996  Ben Pfaff  <blp@gnu.org>
10291
10292         * glob.c: Added write_active_file to global vars.
10293
10294         * sort.c: Several new miscellaneous static variables.
10295         (cmd_sort_cases) Big comment fix.
10296         (perform_case_2) Renamed `do_external_sort' and completely
10297         rewritten.
10298         (case_2_proc_func) Removed.
10299         (output_record, write_initial_runs, write_to_sort_cases,
10300         compare_record) New functions.
10301
10302         * vfm.c: [DEBUGGING] (index_to_varname) Excised bit rot.
10303
10304 Tue Dec 17 18:57:59 1996  Ben Pfaff  <blp@gnu.org>
10305
10306         * sort.c: (perform_case_2) Changed the method for allocation of
10307         lots of memory--now allocates one case at a time in hopes that
10308         more cases can be allocated with heavily fragmented memory.
10309
10310         * var.h: (write_active_file) New global var.
10311
10312         * vfm.c: (procedure, close_active_file, write_case,
10313         SPLIT_FILE_procfunc) Now allow beginfunc, procfunc, and endfunc
10314         arguments to procedure() to be NULL.  All references to
10315         procedure() that made use of dummy functions were changed to NULL
10316         functions.
10317         (open_active_file) If write_active_file is non-NULL, the output
10318         device becomes DEV_PGM (a new enum).
10319         (close_active_file) Sets write_active_file to NULL.
10320         (read_from_memory) Comment fix.
10321         (record_case) Calls write_active_file() when the output device is
10322         DEV_PGM.
10323
10324 Sun Dec 15 15:32:16 1996  Ben Pfaff  <blp@gnu.org>
10325
10326         * sort.c: New file.
10327
10328         * autorecode.c: (cmd_autorecode) Fixed parsing of options.
10329         Fixed checking for duplicate varnames.
10330         (recode) xmalloc()'s the transformation instead of arena_alloc()'ing
10331         it.
10332         (autorecode_trns_free) Destroys hash tables for each recoding
10333         specification.
10334         (autorecode_proc_func) Compares NULL to *vpp instead of vpp.
10335
10336         * command.c: Added SORT CASES to cmd_table.
10337         (null_func, null_int_func) Prototyped.
10338
10339         * descript.g: (calc_weight, calc_noweight) Computes own case
10340         number now.
10341         
10342         * frequencies.q: (dump_statistics) Fixed problem with
10343         too-few-cases warning message.
10344
10345         * get.c: (cmd_save_internal) Handles weighting properly.
10346
10347         * hash.c: (hsh_dump) Output format changed.
10348         (force_hsh_insert) Actually works now, prototype changed.
10349
10350         * list.q: (static var case_num) New variable.
10351         (cmd_list) Initializes case_num.
10352         (list_cases) Increments case_num.
10353
10354         * var.h: Added definitions for SORT CASES.  Comment fixes.
10355
10356         * vfm.c: Some definitions moved to new file vfmP.h.  Comment
10357         fixes.  `active' renamed vfm_active, `rep' renamed
10358         vfm_replacement, all references changed.
10359         (procedure) The procfunc no longer receives a case number.  All
10360         references changed.
10361         (write_case) Subtle reordering.
10362         (SPLIT_FILE_procfunc) Counts cases differently.  Slightly less
10363         redundant.
10364
10365         * weight.c: (get_weighting_variable) New function.
10366
10367         * vfmP.h: New file with definitions from vfm.c.
10368
10369 Sat Dec 14 10:35:30 1996  Ben Pfaff  <blp@gnu.org>
10370
10371         * command.c: (FILE_TYPE_okay) Commented out some tests because
10372         they're clumsy and not yet needed.
10373
10374         * var.h: Most *_trns structures moved to their respective source
10375         files.  Some were moved into a new file, do-ifP.h.  Comment fixes.
10376         (union any_trns) Changed to a typedef for trns_header.
10377         (struct input_program_pgm) Removed.
10378
10379         * vars-prs.c: (parse_variables) Only local_free()'s bits if it
10380         was allocated in the first place.
10381
10382 Fri Dec 13 21:30:53 1996  Ben Pfaff  <blp@gnu.org>
10383
10384         * autorecode.c: New file.
10385         
10386         * command.c: Added AUTORECODE to command table; re-enabled SET.
10387
10388         * data-out.c: (convert_F) Handles infinities and NaNs properly.
10389
10390         * error.c: (vmsg) Comment fixes.
10391
10392         * hash.c: Comment fix.
10393         (hashpjw_d) New function.
10394         (hashpjw) Reimplemented as call to more general function
10395         hashpjw_d().
10396         (internal_comparison_fn) Initializes pointers properly.
10397         (hsh_sort) [GLOBAL_DEBUGGING] New debugging code.
10398         (force_hsh_insert, force_hsh_find) New debugging wrapper
10399         functions.
10400
10401         * main.c: (main) Message fix.
10402
10403         * output.c: (outp_read_devices) Message fix.
10404
10405         * set.q: Comment fixes.
10406         (custom_results) Implemented Wnd/X form of subcommand.
10407         (set_routing) New function.
10408         (internal_cmd_set) Implemented ERRORS, MESSAGES.
10409
10410         * settings.h: (SET_ROUTE_*) New enum series.
10411         (set_results) Renamed set_results_file, all references changed.
10412         (set_messages) Removed.
10413         (glob vars set_errors, set_messages, set_results) New vars.
10414
10415         * title.c: (get_title) Remembers to xstrdup() the result of
10416         get_rest_of_line().
10417
10418         * var.h: (arc_item, arc_spec, autorecode_trns) New structures for
10419         use by AUTORECODE.
10420         (union any_trns) New element `arc'.
10421
10422 Fri Dec  6 23:53:47 1996  Ben Pfaff  <blp@gnu.org>
10423
10424         * command.c: (output_line) Removed references to set_screen.
10425
10426         * error.c: (static var terminating) New var.
10427         (hcf) Sets terminating to 1.
10428         (vmsg) If terminating is nonzero, does not attempt to call hcf().
10429         This prevents an infinite loop if an error occurs within hcf().
10430
10431         * expr-evl.c: (evaluate_expression) [__CHECKER__] Replaced case
10432         statement circumlocution with `case 42000' trick.
10433         (evaluate_expression) New support for OP_STR_MIS.
10434
10435         * expr-opt.c: (evaluate_expression) [__CHECKER__] Replaced case
10436         statement circumlocution with `case 42000' trick.
10437         (dump_node) Handles OP_STR_MIS.
10438
10439         * expr-prs.c: (MISSING_func, SYSMIS_func) Rewrote to handle string
10440         variables exceptions.
10441         (parse_function) Message fix.
10442         (ops[]) Added OP_STR_MIS.
10443
10444         * expr.h: Added OP_STR_MIS to OP_* enum.  Comment fixes.
10445
10446         * exprP.h: [__CHECKER__] Removed case statement circumlocution.
10447
10448         * glob.c: Removed set_scrnfile glob var.
10449         (init_glob) set_errorbreak set to 0 by default.
10450
10451         * groff-font.c: Changed included files.
10452         (groff_read_font) Initializes font_arena local var correctly.
10453         (default_font) New function.
10454
10455         * output.c: Comment fixes.
10456         (glob var disabled_devices) New variable.
10457         [GLOBAL_DEBUGGING] (static var iterating_driver_list) New
10458         variable.
10459         [GLOBAL_DEBUGGING] (reentrancy) New function.
10460         [GLOBAL_DEBUGGING] (outp_read_devices, outp_done, find_driver,
10461         outp_iterate_enabled_drivers) Calls to reentrancy().
10462         (destroy_list) New function.
10463         (outp_done) Moved code to destroy_list().
10464         (parse_options) Parses `listing', `screen', `printer' options
10465         internally.
10466         (configure_driver) Sets new `device' member of driver.
10467         (outp_iterate_enabled_drivers, outp_enable_device) New functions.
10468
10469         * output.h: Comment fixes.  New enum series OUTP_DEV_*.
10470         (struct outp_driver_struct) New member `device'.
10471
10472         * postscript.c: (find_encoding_file) Doesn't display its own error
10473         messages.
10474         (default_encoding) New function.
10475         (switch_font) Calls default_encoding() if no encoding can be
10476         found.
10477         (text) Makes up a character metric if none exists for the desired
10478         character.
10479         (load_font) Properly copies a fallback filename.  Calls
10480         default_font() for a font if none at all are known.
10481
10482         * set.q: Comment fixes.  Removed OUTPUT subcommand.
10483         (custom_listing) Calls outp_enable_device() to enable/disable
10484         listing device.
10485         (turn_screen_on) Removed.
10486         (internal_cmd_set) Calls outp_enable_device() to enable/disable
10487         screen, printer devices.
10488
10489         * settings.h: Comment fixes.
10490         (glob vars set_output, set_printer, set_screen, set_scrnfile)
10491         Removed.
10492
10493         * som-high.c: (som_submit_table, som_eject_page) Use
10494         outp_iterate_enabled_drivers() instead of iterating
10495         outp_driver_list directly.
10496
10497 Wed Dec  4 21:34:17 1996  Ben Pfaff  <blp@gnu.org>
10498
10499         * data-in.c: (parse_EDATE, parse_SDATE) New functions.
10500         (parse_string_as_format) Handles new formats.
10501         (parse_numeric) Now handles DOT and PCT formats.
10502
10503         * data-out.c: (convert_E, convert_F, insert_commas) Handle DOT
10504         format now.
10505         (convert_date) Handle EDATE and SDATE formats.
10506         (convert_CCx) Now if there's not room for the currency characters,
10507         converts it as F format if it's positive instead of giving up
10508         quickly.  Also fixed save-and-restore bug with decimal point
10509         characters.  
10510         (convert_format_to_string) Handles new formats.
10511
10512         * misc.c: (formats[]) Added new formats.
10513         (convert_fmt_ItoO) Supports new formats.
10514
10515         * sfm-read.c: (parse_format_spec) Supports new formats.  Better
10516         data checking.  New argument, all references changed.
10517
10518         * sfm-write.c: (write_format_spec) Supports new formats.
10519
10520         * var.h: New formats FMT_DOT, FMT_PCT, FMT_EDATE, FMT_SDATE.
10521         Comment fixes.
10522
10523 Sun Dec  1 17:19:00 1996  Ben Pfaff  <blp@gnu.org>
10524
10525         * cmdline.c: Comment fixes.
10526         (parse_command_line) Changed return type to void.
10527
10528         * data-in.c: (parse_string_as_format) Added FMT_CCA...FMT_CCE to
10529         switch.
10530         (parse_numeric) Handles international numbers (comma as decimal
10531         point).  Some reformatting.
10532
10533         * data-list.c: (parse_free) Default output format is now
10534         set_format instead of hard-coded F8.2.
10535         (read_from_data_list_list) Emits error message on undefined data
10536         only if set_undefined is nonzero.
10537
10538         * data-out.c: (convert_E) Changes decimal point from period to
10539         comma if appropriate.  Restructured.  Better comments.
10540         (convert_F) Changes decimal point from period to comma if
10541         appropriate.
10542         (insert_commas) Major bug with handling of negative values fixed.
10543         Also, inserts periods instead of commas if appropriate.
10544         (convert_CCx) New function.
10545         (convert_format_to_string) Added FMT_CCA...FMT_CCE to switch.
10546         (num_to_string) Changed `.' to set_decimal.
10547
10548         * dfm.c: Comment fixes.
10549         (dfm_close) Frees ext->line even in inline_file.
10550         (open_inline_file) New function.
10551         (open_file_r) When opening the inline file: now properly
10552         recognizes `BEGIN DATA.' line, and calls open_inline_file() to
10553         finish up.
10554         (read_record) Calls fh_close_handle() instead of dfm_close() to
10555         close the inline file.  Makes a copy of the line getl_buf to avoid
10556         interlock problems.
10557         (dfm_get_record) Restructured.  Now checks the return value of
10558         open_file_r().
10559         (cmd_begin_data) Moved open code into open_inline_file().  Relaxed
10560         checking for use of inline file.  No longer tries to close inline
10561         file.
10562
10563         * error.c: (glob var error_already_flagged) New var.
10564         (vmsg) Message change.  Now checks max number of errors/warnings,
10565         acts on it.
10566
10567         * file-handle.q: (fh_handle_name) Now allows closing of
10568         inline_file.
10569         (fh_init_files) Reformatted.
10570
10571         * get.c: (trim_dictionary) Checks SCOMP option instead of COMP.
10572
10573         * getline.c: (getl_include) Fixed bug that popped up when called
10574         when file queue was empty.
10575         (read_console) Resets error_count, warning_count,
10576         error_already_flagged to zero.
10577
10578         * glob.c: Many changes to update list of variables.
10579         (init_compat_dependent) Now this function is called whenever
10580         `compat' changes.  It now sets set_seed only if it hasn't
10581         previously been referenced.  It now calls
10582         lex_init_compat_dependent().
10583
10584         * include.c: (cmd_include_at) Frees temporary buffer instead of
10585         line buffer.  
10586         (cmd_include) Doesn't make copy of include file name.
10587
10588         * lexer.c: Comment fixes.
10589         (init_lex) Moved some code into new function
10590         lex_init_compat_dependent().
10591         (lex_init_compat_dependent) New function.
10592         (hex_val) Simplified.
10593         (preprocess_line) Uses set_endcmd instead of hardcoding `.'.
10594
10595         * main.c: Comment fixes.
10596         (main) Reformatted.
10597
10598         * misc.c: (formats[]) Added FMT_CCA...FMT_CCE.
10599         (check_input_specifier) Disallows FMT_CCA...FMT_CCE.
10600         (convert_fmt_ItoO) Detects FMT_CCA...FMT_CCE.
10601         (setup_randomize) Sets set_seed_used.
10602
10603         * set.q: Comment fixes.
10604         (custom_results) Conditionalizes on `compat'.
10605         (custom_log) Calls custom_journal().
10606         (set_ccx) New function.
10607         (cmd_set) Calls init_compat_dependent() when `compat' changes.
10608         Calls set_ccx() to handle CCA...CCE.  Sets set_grouping
10609         when set_decimal changes.  Range-checks values for MITERATE,
10610         MNEST.  Message fixes.
10611
10612         * settings.h: Comment fixes.
10613         (struct set_cust_currency) New struct.
10614         (set_cc[], set_grouping, set_seed_used) New global vars.
10615
10616         * var.h: (FMT_CCA...FMT_CCE) New output formats.
10617         (FCAT_OUTPUT_ONLY) New FCAT_* constant.
10618
10619 Thu Nov 28 23:14:07 1996  Ben Pfaff  <blp@gnu.org>
10620
10621         * glob.c: Revised variables to correspond to settings.h.
10622         (init_glob) Initializes variables from settings.h properly.
10623
10624         * set.q: Began long-overdue major revision to correspond to new
10625         philosophy.  Most code changed. 
10626
10627         * settings.h: Mostly changed; reorganized, reordered, large new
10628         comment.
10629
10630 Thu Nov 28 19:46:10 1996  Ben Pfaff  <blp@gnu.org>
10631
10632         * get.c: (cmd_save_internal) No longer forces compression off.
10633
10634         * sfm-read.c: (read_compressed_data) If eof is reached when
10635         reading a new instruction octet, only signal error if we're in the
10636         middle of a case.
10637
10638         * sfm-write.c: (COMPRESSION_BIAS) New #define.
10639         (struct sfm_fhuser_ext) New member `end'.
10640         (write_header) Refers to COMPRESSION_BIAS instead of magic 100.0.
10641         (ensure_buf_space) New function.
10642         (sfm_write_case) Reimplemented in order to support compression.
10643         (sfm_close) Writes out the remaining contents of the compression
10644         buffer if any.
10645
10646 Wed Nov 27 23:18:35 1996  Ben Pfaff  <blp@gnu.org>
10647
10648         * command.c: Defined SAVE and XSAVE commands in command table.
10649
10650         * common.h: second_lowest_value is of type flt64, not double.
10651
10652         * file-handle.h: Comment fix.
10653
10654         * get.c: Comment fixes.
10655         (static var `trns') New.
10656         (save_write_case_func, save_trns_proc, save_trns_free, null_func,
10657         cmd_save_internal, cmd_save, cmd_xsave) New functions.
10658         (dict_delete_run) Clears the variables and frees them now.
10659         (trim_dictionary) Sets default for compression.
10660         On KEEP subcommand, frees deleted variables as well as clearing
10661         them.  Finally got the sense of the test for deleting all
10662         variables correct.
10663         [DEBUGGING] (dump_dict_variables) Message fix.
10664
10665         * glob.c: (init_glob) set_compression set to 1 by default.
10666
10667         * list.q: Properly #includes config.h.
10668
10669         * misc.h: New macro REM_RND_UP.
10670
10671         * settings.h: Comment fix.
10672
10673         * sfm-read.c: (structs sysfile_header, sysfile_format,
10674         sysfile_variable; inline function bswap_int32) Moved to new file
10675         sfmP.h.
10676         (corrupt_msg) [__CHECKER__] No longer induces segfault.
10677         (sfm_read_dictionary) Fixed bug caused by failing to initialize
10678         var_by_index.
10679         (read_machine_flt64_info) Fixed some problems caused by confusion
10680         between flt64 and double types.
10681         (read_header) Message fix.
10682         (read_variables) Fixed set of cases in which we byte-swap sv.print
10683         and sv.write.  Fixed confusion of flt64 and double.
10684
10685         * sfm.h: (struct sfm_write_info) New.
10686
10687         * som-high.c: (som_draw_title) Properly frees `s'.
10688
10689         * temporary.c: (save_dictionary) Comment fix.
10690
10691         * var.h: Comment fixes.  New FMT_* enum, FMT_NUMBER_OF_FORMATS.
10692         (struct trns_header) Formatting fix.
10693         (struct save_trns) New.
10694
10695         * vars-atr.c: (discard_variables) Comment fix.
10696
10697         * sfm-write.c: New file, baseline release.
10698
10699         * sfmP.h: New file, baseline release.
10700
10701 Sun Nov 24 14:53:53 1996  Ben Pfaff  <blp@gnu.org>
10702
10703         * cmdline.c: (parse_command_line) `--version' output updated.
10704         (glob var syntax_message[]) Added my e-mail address.
10705
10706         * file-handle.q, lexer.c, vfm.c: Changed many instances of
10707         `illegal' to `invalid'.
10708
10709         * sfm-read.c: (struct sfm_fhuser_ext) New fields used as
10710         uncompression buffer.
10711         (sfm_close) Frees decompression buffer.
10712         (sfm_read_dictionary) Initializes decompression buffer.
10713         (buffer_input, read_compressed_data) New functions.
10714         (sfm_read_case) Restructured; now calls read_compressed_data() to
10715         handle compressed system file data.
10716
10717         * var.h: Comment fix.
10718
10719 Mon Nov 11 15:34:09 1996  Ben Pfaff  <blp@gnu.org>
10720
10721         * dfm.c: (dfm_close) Does not set h->{ext,class} because the
10722         caller handles it.
10723          
10724         * get.c: New comments.  New static var `get_file'.
10725         (cmd_get) Now fully implemented.  Calls discard_variables();
10726         initializes fv and lv for all variables; new debug code; sets
10727         up the dictionary; sets up the input program.
10728         (read_from_get, cancel_get) New functions.
10729
10730         * sfm-read.c: Comment fixes.
10731         (sfm_close) New static function.
10732         (sfm_read_dictionary) Properly sets up the class of the
10733         file_handle.  No longer cares what size the data is in records of
10734         type 7.  Also, on failure, properly cleans up the file_handle and
10735         free()s some stuff.
10736         (read_variables) No longer thinks it knows `nval' of the
10737         dictionary.  Now sets p.get.fv, etc., instead of speculatively
10738         setting fv itself.
10739         (read_value_labels) Fixed off-by-one error in indexing of
10740         var_by_index[].
10741         (sfm_read_case) New function.
10742         (sfm_r_class) New static var.
10743
10744         * var.h: (get_proc) New struct.
10745         (struct variable) New member p.get.
10746
10747 Thu Nov  7 20:52:28 1996  Ben Pfaff  <blp@gnu.org>
10748
10749         * get.c: Removed GTSV_OPT_MAP because of a misinterpretation of
10750         the manual's meaning.
10751         (rename_variables) New function.
10752         (trim_variables) Doesn't try to parse MAP any more.  Removed debug
10753         code.  Now properly reorders the dictionary on the KEEP keyword.
10754
10755         * sfm-read.c: (read_value_labels) Fixed some bugs regarding
10756         garbage collection.
10757
10758         * vars-atr.c: (clear_variable) New argument `dictionary *'.
10759         (rename_variable) New function.
10760         (free_val_lab) Reformatted.
10761
10762 Thu Nov  7 17:29:16 1996  Ben Pfaff  <blp@gnu.org>
10763
10764         * var.h: Reindented entire file.  Comment fixes.
10765         (glob vars var, var_by_name, nvar, N, nval, n_splits, splits)
10766         Removed.
10767         (glob var default_dict) New.
10768         (struct indirect_dictionary) Removed.
10769
10770         * Many other source files were changed to add `default_dict.'
10771         before all references to the dictionary of the active file.
10772         
10773         * vars-atr.c: (make_indirect_dictionary) Removed.
10774
10775         * glob.c: Reindented all variable declarations.  Updated for
10776         changed var.h.  Comment fixes.
10777
10778         * temporary.c: (restore_dictionary, save_dictionary) Simplified
10779         because now we can mainly copy dictionary structs.
10780
10781         * vars-prs.c: (is_dict_varname, parse_dict_variable,
10782         parse_variables) Takes dictionary instead of indirect_dictionary
10783         first argument.
10784         (parse_variables) Instead of calling make_indirect_dictionary,
10785         just sets DICT to &default_dict if DICT is NULL.  Of course, lots
10786         of `*dict.' references had to be changed to `dict->'.  Removed
10787         debug code.
10788
10789 Thu Nov  7 15:48:52 1996  Ben Pfaff  <blp@gnu.org>
10790
10791         * get.c: Added GTSV_OPT_* series of enums.
10792         (trim_dictionary, dict_delete_run) New functions.
10793         [DEBUGGING] (dump_dict_variables) New function.
10794         (cmd_get) Calls trim_dictionary() to get dictionary fully set-up.
10795         [DEBUGGING] Calls dump_dict_variables() to display results.
10796
10797         * glob.c: (cmp_variable) Now a public function declared in var.h.
10798
10799         * sfm-read.c: Turned off debug code.  Comment fixes.
10800         (read_machine_int32_info, read_machine_flt64_info) New functions
10801         to parse type 7 records.
10802         (sfm_read_dictionary) Properly byteswaps several fields now.
10803         Calls read_machine_*_info() to parse type 7 subtypes 3 and 4
10804         records.  [DEBUGGING] Dumps dictionary.
10805         (read_variables) Sets `index' field of variables created properly.
10806         Constructs avl tree of variables in dictionary.  [DEBUGGING] No
10807         longer dumps dictionary.
10808         (read_value_labels) Properly byteswaps fields.  [DEBUGGING] New
10809         debug code.
10810         [DEBUGGING] (dump_dictionary) No longer stubbed out.
10811
10812         * temporary.c: (restore_dictionary) Destroys `var_by_name' glob
10813         var before destroying any variables just to save a little time.
10814
10815         * var.h: (struct variable) Reordered in order to make name[] the
10816         first member; this makes pointers to `variable' pointers to the
10817         variable name, simplifying avl trees, etc.
10818         (struct indirect_dictionary) New struct.
10819
10820         * vars-atr.c: (find_variable) Rewritten for efficiency.
10821         (make_indirect_dictionary, is_dict_varname, parse_dict_variable)
10822         New functions.
10823         (is_varname) Rewritten for efficiency.
10824         (parse_variables) New argument, which is a `dictionary *'.  All
10825         references changed.  This function now reads variable names from
10826         the dictionary passed, or from the default dictionary if NULL.
10827
10828 Tue Nov  5 18:34:59 1996  Ben Pfaff  <blp@gnu.org>
10829
10830         * misc.h: Added new macro DIV_RND_UP to perform integer division,
10831         rounding up.  Changed many references to ROUND_UP to use this
10832         instead.
10833
10834         * sfm-read.c: Includes avl.h.
10835         (corrupt_msg) Induces a segfault under Checker.
10836         (macro assertive_bufread) New.  Many references to bufread() now
10837         use this instead.
10838         (sfm_read_dictionary) Split up into several functions.  Added code
10839         to read dictionary records following the the type 2 records.  Not
10840         quite complete.  New variable `var_by_index'.
10841         (read_header, read_variables) New functions extracted from
10842         sfm_read_dictionary().
10843         (read_value_labels) New function.
10844         (bufread) Checks ferror() if fread() doesn't return the expected
10845         value; if ferror() is zero it's just EOF.
10846         (dump_dictionary) Stubbed out.
10847
10848         * BTW: The source code now exceeds 50000 lines!
10849         
10850 Mon Nov  4 22:03:28 1996  Ben Pfaff  <blp@gnu.org>
10851
10852         * command.c: Added GET to cmd_table[].
10853
10854         * list.q: Removed reference to alloca headers.
10855         (cmd_list) Gave prototype.
10856
10857         * sfm-read.c: Added DEBUGGING comments.
10858         (sfm_read_dictionary) Checks bias correctly.  Sets
10859         dict->var_by_name to NULL.  Calculates long_string_count
10860         correctly.  realloc's dict->var[] array to minimum size.
10861         [DEBUGGING] Calls dump_dictionary.
10862         [DEBUGGING] (dump_dictionary) New function.
10863
10864         * temporary.c: (save_dictionary) Sets var_by_name to NULL.
10865         (restore_dictionary) If the dictionary contains a non-NULL
10866         var_by_name, uses that instead of generating one.
10867         (free_dictionary) Destroys var_by_name.
10868
10869         * var.h: (struct dictionary) Added field `var_by_name'.
10870
10871         * get.c: New file, not complete.
10872
10873 Sun Nov  3 12:24:36 1996  Ben Pfaff  <blp@gnu.org>
10874
10875         * mis-val.c: New enums MV_NOR_*.  New struct num_or_range.
10876         (parse_num_or_range) New function.
10877         (parse_numeric) Reimplemented in order to support LOW THRU <n> and
10878         <n> THRU HIGH missing values.
10879
10880         * output.h: [__GNUC__>1 && __OPTIMIZE__] (width, height) Made
10881         __attribute__((const)).
10882
10883         * q2c.c: (get_token) Merged isdigit || isalpha into isalnum.
10884
10885         * sfm-read.c: Finished reference implementation.
10886
10887         * sfm.h: Includes var.h.
10888
10889         * var.h: Comment fixes.
10890         (struct `variable') Reordered some fields.
10891
10892         * vars-atr.c: (is_num_user_missing) Added support for MISSING_*
10893         constants added previously.
10894
10895 Wed Oct 30 17:13:08 1996  Ben Pfaff  <blp@gnu.org>
10896
10897         * common.h: Comment fixes.  Added declaration of
10898         `second_lowest_value' as variable or macro.  Made `compat_type',
10899         `pgm_state_type' into anonymous enums.
10900
10901         * display.c: Comment fix.
10902
10903         * glob.c: [ENDIAN==UNKNOWN] Added definition for `endian' global
10904         var.
10905         [!defined SECOND_LOWEST_VALUE] Added definition for
10906         `second_lowest_value' global var.
10907         (compat, pgm_state global vars) Changed types to `int'.
10908         (init_glob) Initializes `second_lowest_value'.
10909
10910         * sfm-read.c: Continued work, not complete.
10911
10912         * var.h: Added new MISSING_* constants to handle LOWEST and
10913         HIGHEST.
10914
10915 Sat Oct 26 23:06:06 1996  Ben Pfaff  <blp@gnu.org>
10916
10917         * sfm-read.c: New file, not complete.
10918
10919         * cases.c: (vec_insert) Changed vector expansion algorithm.
10920         (vec_delete) Fixed bug that screwed up deletion sometimes, it was
10921         mucking up the RECODE transformation in particular.
10922         (envector) Harmless change in notation.
10923
10924         dfm is now fairly well tested again.  
10925         * dfm.c: (dfm_get_record) Only returns ext->ptr if ext is
10926         non-NULL--duh.
10927         (cmd_begin_data) if(ext->line) replaced by if(ext && ext->line).
10928
10929         * recode.c: Comment fix.
10930
10931         * sfm.h: Interface should be fairly final now, or at least for a
10932         day or so...
10933
10934         * vfm.c: [DEBUGGING] (index_to_varname) New function.
10935         (open_active_file) [DEBUGGING] Translates ccase indices into
10936         variable names now to make it easier to understand what's really
10937         going on.
10938
10939 Sat Oct 26 20:46:31 1996  Ben Pfaff  <blp@gnu.org>
10940
10941         * data-in.c: Comment fix.
10942
10943         * data-list.c: Includes dfm.h.
10944         (do_reading) Uses new function dfm_push_cust().
10945
10946         * data-out.c: (convert_time, convert_WKDAY, convert_MONTH) Added
10947         `return 1;' at end.
10948
10949         * file-handle.h: Completely changed.  Some parts split off into
10950         new file dfm.h.  Implemented in file-handle.q.
10951         (enum FH_*) Removed.
10952         (struct fh_ext_class) New struct.
10953         (struct file_handle) Retained only these fields: name, norm_fn,
10954         fn, recform, lrecl, mode.  New fields class, ext.
10955         (get_handle_by_name, get_handle_by_filename, parse_file_handle,
10956         close_handle, handle_name) Added `fh_' prefix to name, all
10957         references changed.
10958
10959         * dfm.h: New file, implemented in dfm.c.
10960         (get_record, put_record, fwd_record, bkwd_record, set_record,
10961         get_cur_col) Functions moved from file-handle.h, now prefixed with
10962         `dfm_'.
10963         (dfm_push_cust) New function.
10964
10965         * sfm.h: New file.  Incomplete.
10966
10967         * dfm.c: All functions adjusted/rewritten for new dfm/fhp
10968         interface.  Functions reordered, comments changed.  Not well
10969         tested, probably full of bugs.
10970         (struct dfm_fhuser_ext) New struct.
10971         (dfm_close) New function.
10972         (open_file_r) Pickier about finding `BEGIN DATA.' line.
10973         (open_file_w) User messages changed.
10974         (get_record) Comment fixed.
10975         (read_record) Increments ext->ln even for inline_file.  Calls
10976         dfm_close() for inline_file when `END DATA.' encountered.
10977         (dfm_get_record) Experimental restructuring.
10978         (dfm_push_cust) New function.
10979         (cmd_begin_data) Detects whether the inline file was fully read by
10980         checking whether it is still open; detects whether it was read at
10981         all by checking whether the line number is greater than zero.
10982
10983         * file-handle.q: All functions adjust/rewritten for new dfm/fhp
10984         interface.  Functions reordered, comments changed.  Not well
10985         tested, probably full of bugs.
10986         (init_file_handle) Removed initializers for obsolete fields, added
10987         new fields.
10988         (fh_close_handle) Much simpler, now mainly calls the class
10989         function.
10990         (fh_init_files) Renamed inline file internal filename.
10991
10992         * file-type.c: Includes dfm.h.
10993         (read_from_file_type) Doesn't use dfm internal state anymore.
10994
10995         * inpt-pgm.c, print.c: Include dfm.h.
10996
10997         * recode.c: (internal_cmd_recode) Casts strlen() return value to
10998         int in comparison with other int.
10999
11000         * som-high.c: (build_target) Fixed operator precedence problem in
11001         if statement (& versus ==).
11002
11003 Sat Oct 26 10:39:25 1996  Ben Pfaff  <blp@gnu.org>
11004
11005         * dfm.c: (read_record) Can now read fixed-length records; not
11006         tested.
11007         (put_record) Can now write fixed-length records; not tested.
11008
11009         * file-handle.h: FH_* defines changed to enums.  New enum series
11010         FH_RF_*, FH_MD_*.
11011         (struct file_handle) New members recform, lrecl, mode.
11012
11013         * file-handle.q: Parser changed.
11014         (internal_cmd_file_handle) Added support for new /RECFORM, /MODE,
11015         /LRECL subcommands.  These are compatible with Windows.
11016         (init_file_handle) Initializes recform, mode fields.
11017
11018         * q2c.c: (get_line) When outputting `!' comment lines, now
11019         increments the output file line number so that `#line' directives
11020         are correct.
11021         (make_identifier) New function that converts an arbitrary string
11022         into a valid C identifier.
11023         (dump_vars) Calls make_identifier() in two places in order to
11024         suppress some errors for bad identifiers.
11025         (make_match) Allows TRUE as synonym for YES and FALSE as synonym
11026         for NO.  Allows numbers to be prefixed by underscores to make them
11027         acceptable C identifiers but still to be parsed as numbers by the
11028         Fiasco lexer.
11029
11030 Thu Oct 24 20:13:42 1996  Ben Pfaff  <blp@gnu.org>
11031
11032         * command.c: Re-enabled RECODE, SAMPLE, SELECT IF.
11033         
11034         * dfm.c: Comment fixes. (get_record) Gives error if file handle
11035         was opened for writing.
11036         (open_file_w) New function.
11037         (read_record) Uses strncasecmp if available.  Improved error
11038         messages, comments.
11039         (put_record) New function.
11040
11041         * file-handle.h: Moved function comments into dfm.c and
11042         file-handle.q.  Comment fixes.  Removed declarations of
11043         tilde_expand() and normalize_filename().
11044         (struct file_handle) Changed `open' from boolean to enumerated
11045         field to allow for three states--closed, open for reading, open
11046         for writing--all references changed.
11047
11048         * file-handle.q: Includes filename.h.
11049
11050         * print.c: (CMD_* enums) Renamed PRT_* and moved into var.h; all
11051         references changed.
11052         (alloc_line) Makes allowance for line terminator characters in
11053         calculations.
11054         (print_trns_proc) Now handles OUTFILE, WRITE differences.
11055         (print_space_trns_proc) Handles OUTFILE differences.
11056
11057         * recode.c, sample.c: Comment fixes.
11058
11059         * var.h: (struct print_trns) Changed boolean field `eject' to
11060         bitmapped field `options'; all references changed.  New enums
11061         PRT_* for use with this field.
11062
11063         * exception.h, test-exception.c: Removed.
11064
11065 Thu Oct 24 17:47:14 1996  Ben Pfaff  <blp@gnu.org>
11066
11067         * ascii.c: (delineate) Turned off debug output.
11068
11069         * common.c: [Checker and Linux] (__assert_fail, __eprintf) Moved
11070         to error.c.
11071
11072         * data-in.c: (parse_string_as_format) Sets the entire string value
11073         to spaces, not just the short string part of it.  Is this correct
11074         now? 
11075
11076         * data-out.c: (convert_date) Fixed DATETIME format problems with
11077         decimal places, removed debug code.
11078
11079         * dfm.c: (open_file_r) Fixed bug where an error would occur in the
11080         middle of parsing BEGIN DATA that would cause the lexer to read
11081         from a wild pointer `prog'; now calls new function
11082         preprocess_line() in lexer.c.
11083
11084         * error.c: [__CHECKER__] (hcf) Calls induce_segfault() on improper
11085         termination.
11086         [Checker and Linux] (__assert_fail, _eprintf) Moved from common.c.
11087         Now call induce_segfault() to induce the segfault.
11088         (induce_segfault) New function.
11089
11090         * expr-opt.c: Comment fix.
11091         (parse_sysvar) New function.
11092         (parse_primary) Added system variable support--calls
11093         parse_sysvar().
11094         (global var ops) Added OP_CASENUM operator.
11095
11096         * expr.h: Comment fixes.
11097         (OP_* enum) added OP_CASENUM operator.
11098         (struct casenum_node) New struct.
11099         (union any_union_union) New member `cas' of type `casenum_node'.
11100
11101         * glob.c: (global var last_vfm_invocation) New var.
11102         (init_glob) Initializes last_vfm_invocation.
11103
11104         * lexer.c: (lookahead) Fixed reversed condition on if statement.
11105
11106         * getline.c: (get_line) Split into get_line() and preprocess_line().
11107         (preprocess_line) New function.
11108
11109         * var.h: Declares last_vfm_invocation.
11110
11111         * vfm.c: (procedure) Sets last_vfm_invocation.
11112
11113 Wed Oct 23 21:53:43 1996  Ben Pfaff  <blp@gnu.org>
11114
11115         * command.c: (parse_cmd) Fixed bad assertion related to
11116         lookahead().
11117
11118         * data-in.c: (parse_month) Implemented to parse months according
11119         to full interpretation of standard.
11120         (to_roman) New function.
11121         (parse_wk_delimiter) Bug fix (forgot to skip `WK' in string).
11122         (parse_weekday) Bug fix (forgot to skip all the day name).
11123
11124         * data-list.c: (read_from_data_list_fixed) Fixed bug that screwed
11125         up parsing of multirecord data items.  Also fixed user message.
11126
11127         * data-out.c: Comment fix.
11128         (year2, year4, convert_date, convert_time, convert_WKDAY,
11129         convert_MONTH) New functions to support time & date output.
11130         (convert_format_to_string) Calls new time & date output routines.
11131
11132         * expr-prs.c: (nary_num_func) Found a bug, but didn't fix it yet.
11133
11134         * lexer.c: (lookahead) Noted a previously unnoticed caveat in
11135         comment.
11136
11137         * main.c: [DEBUGGING] (dump_token) Updated to handle getline.h.
11138
11139         * misc.c: (global var formats) Fixed declarations of DATETIME,
11140         TIME, DTIME.
11141
11142         * postscript.c: (text) Fixed a pair of bugs in the reallocation of
11143         the output_char buffer.
11144
11145         * vars-prs.c: (parse_DATA_LIST_vars) Fixed a failure to free
11146         memory bug.  Fixed user messages.
11147
11148 Tue Oct 22 17:27:04 1996  Ben Pfaff  <blp@gnu.org>
11149
11150         * Removed #pragma argsused from lots of places.
11151         
11152         * data-in.c: Implemented zoned decimal and time-date formats.
11153         Untested.  This is a huge chunk of code--maybe 1000 lines and 50
11154         new functions.
11155
11156         * data-out.c: Implemented zoned decimal format.
11157
11158         * expr.h: Moved yrmoda() declaration here from exprP.h.
11159
11160         * misc.c: (global var formats) Minor fixes--added
11161         FCAT_SHIFT_DECIMAL to formats N and Z.
11162         (convert_fmt_ItoO) Added support for format Z.
11163
11164         * som-frnt.c: (som_set_value) Fixed bug regarding string values.
11165
11166 Mon Oct 21 20:39:59 1996  Ben Pfaff  <blp@gnu.org>
11167
11168         * command.c: (parse_cmd) [GLOBAL_DEBUGGING] Inserted call to
11169         som_check_workspace() that is activated between commands.
11170
11171         * data-list.c: (dump_fixed_table, dump_free_table) Finished these
11172         for good, I hope.
11173
11174         * list.q: (begin_row) Changed title expansion style from
11175         SOPT_X_VERT to SOPT_X_SHSP.
11176
11177         * som-frnt.c: Now includes `somP.h'.
11178         (som_push_workspace, som_pop_workspace) New functions that, taken
11179         together, form a solution to the recursive table building problem
11180         mentioned yesterday.  Surrounded every table output routine
11181         throughout the program with calls to these functions.
11182         [GLOBAL_DEBUGGING] (som_check_workspace) New function.
11183         (som_create_table) Checks that there's an active workspace.
11184         (som_destroy_all_tables, som_crush) Removed.
11185
11186         * som-high.c: (global var som_preserve_tables) Removed, all
11187         references deleted.
11188         (som_submit_table) Checks that there's an active workspace.
11189         (dump_columnated_table) Doesn't columnate tables that would have
11190         just one row per column.
11191         (dump_crush_page, som_dump_crush_page) Removed debugging code.
11192         (som_dump_crush_page) Moved row number labels from left side of
11193         tables to right side.
11194         (som_get_table_size) Added support for SOPT_X_SHSP.
11195
11196         * som.h: New cell expansion type SOPT_X_SHSP.
11197
11198         * somP.h: (global vars arena_stack, n_arena_stack, m_arena_stack)
11199         New vars.
11200         (global var curtab_arena) Moved from som-frnt.c.
11201
11202 Sun Oct 20 13:45:28 1996  Ben Pfaff  <blp@gnu.org>
11203
11204         * ascii.c: [GLOBAL_DEBUGGING] (SUPPRESS_WARNINGS) New debug option
11205         that causes bad location warnings to be suppressed.
11206         (delineate) Saves current font when calling draw_text(); fixed
11207         handling of NULLs when backing up.  Also fixed line-wrapping bug.
11208
11209         * command.c: Re-enabled `LEAVE', `NUMERIC', `PRINT', `PRINT EJECT',
11210         `PRINT FORMATS', `PRINT SPACE', `STRING', `TITLE', `WRITE'.
11211
11212         * common.c: Added code to cause assertion failure to dump core
11213         when run under Checker.
11214
11215         * data-list.c: (dump_fixed_table) Fixed some inconsistencies, but
11216         there are still bugs.
11217
11218         * glob.c: (__eprintf) Removed.
11219
11220         * list.q: Inserted som_preserve_tables kluge that prevents tables
11221         from being thrown away due to recursive table building through
11222         som_output_line being called from a transformation during the LIST
11223         procedure invocation.  This is a general problem that must be
11224         solved in a better way since it applies to all procedures in
11225         general.
11226         (begin_row) Changed title options to SOM_X_VERT from SOM_X_BOTH.
11227         (flush_table) Removed SOM_TOPT_PRESERVE from submission options.
11228
11229         * numeric.c: Fixed several errors in the form of msg() calls.
11230
11231         * print.c: Updated for use of som.
11232         (dump_table) Reimplemented.
11233         (print_trns_proc) Calls som_eject_page() instead of eject_page().
11234         Calls som_output_text() instead of outs_line().
11235
11236         * som-frnt.c: (som_destroy_all_tables) Sets som_preserve_tables to
11237         0.
11238         (som_output_text) Function moved from som-low.c.  Interface
11239         changed.
11240
11241         * som-high.c: (som_preserve_tables) New global public variable
11242         declared in som.h.
11243         (som_submit_table) Destroys the tables only if som_preserve_tables
11244         is 0.
11245         (paginate_horizontally) Bugfix: sets som.mpw even if there's only
11246         one subrow per row.  Now labels subrows if there's more than one
11247         subrow per row.
11248         (dump_crush_table) Added wishlist comment.
11249         (som_eject_page) New public function declared in som.h.
11250
11251         * som-low.c: (som_dump_crush_page) Draws row labels if there's
11252         more than one subrow per row.
11253         (som_output_text) Moved to som-frnt.c.
11254
11255         * som.h: (SOM_TOPT_PRESERVE) Removed.
11256
11257         * title.c: (get_title) Changed interface.
11258         (cmd_title) Changed `title' to `outp_title'.
11259         (cmd_subtitle) Changed `subtitle' to `outp_subtitle'.
11260
11261 Sun Oct 20 09:04:15 1996  Ben Pfaff  <blp@gnu.org>
11262
11263         * list.q: (flush_table) Conforms to new partial options in
11264         som_submission_form.
11265
11266         * som-high.c: (paginate_horizontally) Changed form of subrow
11267         number labels.
11268         (build_target) Omits spacing before table if
11269         SOM_TOPT_PARTIAL_OMIT_TOP is selected.
11270         (dump_crush_page) Changed interface.  Only trims bottom rule if
11271         SOM_TOPT_PARTIAL_OMIT_BTM is not selected.
11272         (dump_crush_table) Handles partial tables.
11273         (output_row_label) New function.
11274         (som_dump_crush_page) Emits subrow number labels.  Draws vertical
11275         rule on the right edge of narrow subrows.
11276
11277         * som.h: Changed SOM_SUB_PARTIAL_* series of submission type
11278         constants to a series of SOM_TOPT_PARTIAL_* submission options.
11279         All references updated.
11280
11281 Fri Oct 18 19:46:49 1996  Ben Pfaff  <blp@gnu.org>
11282
11283         * misc.c: Comment fix.
11284
11285         * som-high.c: (examine_table) Treats crushed tables separates for
11286         purpose of determining header size.
11287         (paginate_horizontally) Allots space for line numbers in crushed
11288         tables with lots of subrows per row.  Calculates the `maximum page
11289         width', the width of the widest horizontal page.
11290         (build_target) Removed trim argument; all references changed.
11291         Stricter assertions.  (dump_crush_page) New function.
11292         (dump_crush_table) Reimplemented.
11293
11294         * som-low.c: (som_dump_page) Uses new RULE_ROW &c. constants.
11295         (som_dump_crush_page) Reimplemented, interface changed.
11296
11297         * somP.h: Many many new helper macros for use with crushed tables.
11298         (global var som) Removed `tv', `cum_y' members; all references
11299         removed.  New members `mpw', `digit_space'.
11300
11301 Sun Sep 29 19:37:03 1996  Ben Pfaff  <blp@gnu.org>
11302
11303         * arena.c: (arena_alloc) [!DISCRETE_BLOCKS] Removed `size'
11304         variable, changed to constant 1024.
11305         (arena_ca_strdup) Changed `sizeof(a_string)' to
11306         `sizeof(c_string)'.
11307         (arena_ca_strdup) [!DISCRETE_BLOCKS] Changed bad cast from
11308         `(c_string *)' to `(char *)'; this fixed some offset problems.
11309
11310         * filename.c: (readlink_malloc) Changed initial allocation from
11311         100 bytes to 128.
11312         (good_getcwd) Changed from xmalloc() to local_alloc(); removed
11313         comment.
11314
11315         * postscript.c: (read_fontmap) Fixed leak by changing &owner to
11316         &fm->owner in several places.
11317
11318         * som-high.c: (output_table) Changed interface to rest of world.
11319         (examine_crush_table) Removed.  Crushed tables are re-broken now,
11320         in preparation for rewrite.
11321
11322         * som.h: Comment fix.
11323
11324 Sat Sep 28 21:28:07 1996  Ben Pfaff  <blp@gnu.org>
11325
11326         * ascii.c: (ascii_init_driver) Disposes of x->file.filename and x
11327         itself in the cleanup stage.
11328
11329         * descript.q: (display) At least temporarily, changed the table
11330         format to a crushed table.
11331
11332         * list.q: (begin_row) At least temporarily, added horizontal lines
11333         between cases.
11334
11335         * som-high.c: (examine_crush_table) Sets som.hh to the width of
11336         the horizontal "headers," that is, to the width of the far left
11337         and far right rules.
11338         (justify_pagination) Sets som.th to the width of the widest row
11339         in the crushed table.  Fixed inner loop off-by-one error.
11340
11341         * som-low.c: (som_dump_crush_page) Added code to draw horizontal
11342         rules.
11343
11344         * somP.h: Comment fix.
11345
11346 Fri Sep 27 20:08:39 1996  Ben Pfaff  <blp@gnu.org>
11347
11348         * filename.c: (open_file_ext) Now, doesn't set f->file to NULL
11349         before closing it; also, opens the constructed filename `s'
11350         instead of f->filename.
11351
11352         * postscript.c: Moved initialization of x->loaded, x->prop,
11353         x->fixed, x->current, also the add_encoding() calls, into
11354         postopen().
11355         (preclose) Destroys x->combos; sets x->loaded, x->combos to NULL;
11356         sets x->last_font to NULL; sets x->next_combo to zero.
11357
11358         * som-high.c: (crushed_row_height) Moved definition farther up.
11359         (som_submit_table) Doesn't calculate line width, font size until
11360         after calling open_page(), to accomodate changes to PostScript
11361         driver.
11362         (vert_headers) Removed; equivalent functionality moved to
11363         examine_table(), examine_crush_table().
11364         (justify_pagination) Replaced with different algorithm.
11365         (dump_crush_table) Bugfix that caused tables to fail to be clipped
11366         at the bottom of the page.
11367
11368 Thu Sep 26 22:20:26 1996  Ben Pfaff  <blp@gnu.org>
11369
11370         * command.c: Added cmd_list back into cmd_table.
11371
11372         * freq.c, frequencies.q, repeat.c, list.q, vars-atr.c, vfm.c:
11373         Comment fix: `#define DEBUGGING' --> `#define DEBUGGING 1'.
11374
11375         * list.q: (flush_table) Updated to new som_submission_form format.
11376
11377         * som-frnt.c: Comment fix.
11378
11379         * som-high.c: Changed `#endif' to `#undef EXTERN'.
11380         (output_table) Calls som_get_table_size() directly; handles
11381         crushed tables.
11382         (examine_crush_table) New function; calls vert_headers().
11383         (examine_table) Moved some code into new function, vert_headers().
11384         (justify_pagination) New function.
11385         (dump_plain_table) Removed `static' from `cy'.
11386         (dump_crush_table) New function.
11387
11388         * som-low.c: (som_dump_crush_page) New function.
11389
11390         * som.h: Comment fixes.
11391         (enum SOM_TOPT_CRUSH) New.
11392         (SOM_SUB_PARTIAL_BEG, SOM_SUB_PARTIAL_MID, SOM_SUB_PARTIAL_END)
11393         Temporarily set to zero to make do with LIST procedure.
11394
11395         * somP.h: Re-ordering.
11396
11397 Wed Sep 25 19:36:11 1996  Ben Pfaff  <blp@gnu.org>
11398
11399         * som.c: Split into som-frnt.c, som-high.c, som-low.c.
11400
11401         * somP.h: New file for use by som-high.c, som-low.c.
11402
11403         * q2c.c: Added definition for VME.
11404         (get_line) Now dumps `!' comment lines to the output file
11405         verbatim.
11406
11407         * crosstabs.q, descript.q, file-handle.q, frequencies.q, list.q,
11408         set.q: Changed format of `!' comment lines.
11409
11410 Tue Sep 24 18:39:09 1996  Ben Pfaff  <blp@gnu.org>
11411
11412         * All source files: Added copyright notice.
11413
11414         * common.c: (xmalloc, xrealloc, xstrdup) Cast size_t's to unsigned
11415         longs in msg() calls.
11416
11417         * con32s.c: (xmalloc, xrealloc) Updated from common.c.
11418
11419         * q2c.c: (xmalloc, xrealloc, xstrdup) Updated from common.c.
11420
11421 Sat Sep 21 23:16:31 1996  Ben Pfaff  <blp@gnu.org>
11422
11423         * output.c: (outp_read_devices) Changed criteria for
11424         distinguishing different types of lines.
11425
11426 Fri Sep 20 22:52:28 1996  Ben Pfaff  <blp@gnu.org>
11427
11428         * cmdline.c: Changed syntax message.
11429
11430         * filename.c: (good_getcwd) Bug fix (?).
11431         (normalize_filename) [__BORLANDC__] Uses _fullpath() library
11432         function.
11433         (search_path) Appends DIR_SEPARATOR to directory name only if it
11434         does not already end with one.
11435
11436         * glob.c: Checks STAT_PAGER envvar before PAGER.
11437
11438         * output.c: Checks environment variables instead of just local
11439         macros.
11440
11441 Tue Sep 10 21:39:00 1996  Ben Pfaff  <blp@gnu.org>
11442
11443         * arena.c: (arena_destroy) Swatted a subtle bug that cropped up
11444         when the pointer passed to the function was within the arena
11445         itself, so that it couldn't properly be set to NULL _after the
11446         arena was freed_.
11447
11448         * command.c: Re-enabled DISPLAY.
11449
11450         * display.c: Rewritten to handle tables.  Untested.
11451
11452         * filename.c: (search_path) Fixed memory leak.
11453
11454         * frequencies.q: (cmd_frequencies) Frees v_variables.
11455         (postcalc) Calls cleanup_freq_tab() after displaying statistics.
11456         (cleanup_freq_tab) New function to garbage collect.
11457         (dump_full) Elegantized.
11458
11459         * main.c: New comment.
11460
11461         * output.h: New tag for tagged quotes: TAG_NEWLINE.
11462
11463         * postscript.c: Comment fix.
11464         (release_fontmap, free_font_entry) New functions.
11465         (ps_init_driver) Sets free_font_entry() as the freefunc for
11466         hashtable `loaded'.  Calls release_fontmap() when destroying a
11467         driver; also frees the output filename; also frees the
11468         ps_driver_ext block.
11469         (free_ps_encoding) Frees the filename as well as the encoding
11470         block.
11471         (output_encodings) Frees the line buffer and pops the msg-filename
11472         stack.
11473         (read_fontmap) Frees the fontmap filename and the line buffer.
11474         (postopen, preclose) Misc. garbage collection fixes.
11475         (ps_open_page) Destroys the `combos' hash table; sets `last_font'
11476         to NULL; this fixes some output problems.
11477         (text) Handles TAG_NEWLINE.  Untested.
11478
11479         * som.c: (cell_byte_size) Merged SCON_VALUE and SCON_TEXT cases.
11480         (som_set_string) Removed.  All references changed to
11481         `som_set_text'.
11482         (som_set_text) Rewritten.  New interface.  More general.
11483
11484         * som.h: Minor format changes.
11485         (struct som_value_cell) Removed; all references changed to
11486         `som_text_cell'.
11487         (enums SOT_*) Changed.
11488
11489 Mon Sep  9 21:43:13 1996  Ben Pfaff  <blp@gnu.org>
11490
11491         * command.c: Re-enabled SPLIT FILE.
11492
11493         * postscript.c: Comment fix.
11494
11495         * som.h: Added `SOT_NONE'.
11496
11497         * split-file.h: (cmd_split_file) Removed superfluous parenthesis.
11498
11499         * vfm.c: (dump_splits) Reimplemented.
11500
11501 Sat Sep  7 22:35:12 1996  Ben Pfaff  <blp@gnu.org>
11502
11503         * Compiled the project under gcc 2.7.2, which gave some new
11504         warnings.  This led to many additions of casts from unsigned to
11505         int sprinkled throughout the code.
11506         
11507         * arena.c: Many uses of `unsigned' changed to `size_t'.
11508
11509         * command.c: Added END FILE, END REPEAT to command table.
11510         (var cmd_end_repeat) Renamed cmd_end_repeat_p.
11511         (find_command, FILE_TYPE_okay) Not commented out anymore.
11512         (parse_cmd) Calls FILE_TYPE_okay again.
11513         (output_line) Added calls to som_output_text() to put the line
11514         in the output files.
11515
11516         * common.c: (macro VME) Format changes.
11517         (xstrdup) Asserts that its argument is not NULL.
11518         
11519         * data-list.c: Implemented dump_fixed_table().
11520         
11521         * inpt-pgm.c: Formatting changes.  Comment changes.
11522         (end_case_proc) Renamed end_case_trns_proc.
11523         (cmd_end_file, end_file_trns_proc) New functions.
11524
11525         * misc.c: Many uses of `int' and `unsigned' changed to `size_t'.
11526
11527         * misc.h: (local_strdup) New macro corresponding to strdup() but
11528         allocating its data through local_alloc() if possible--that is, if
11529         GNU C is in use.
11530
11531         * postscript.c: Comment changes.
11532         (quote_ps_name, quote_ps_string, output_encodings) New functions.
11533         (output_line, add_string) New macros supporting
11534         output_encodings().
11535         (postopen) Fixed contents of ${fixed-font} and ${prop-font}
11536         substitution vars.  Calls output_encodings() when a line
11537         consisting of `!encodings' is encountered.
11538         (preclose) Some code moved into quote_ps_string().
11539         (dump_line) Changed into macro supporting dump_fancy_line().
11540         (switch_font) Now outputs DSC "%%IncludeResource: font (...)"
11541         command when appropriate.
11542         (write_text) Fixed `literal_char' array (I think it's fixed, at
11543         least.)
11544         (text) Fixed bug when width was zero.  Now exits immediately on
11545         zero height_left.  Now, when executing `goto restart;', checks
11546         that cp<end, so that we don't read beyond end-of-string.  Also,
11547         outputs the correct code to the output file by outputting the code
11548         from the metric instead of the internal metric index.
11549
11550         * repeat.c: (cmd_end_repeat) New function.
11551
11552         * som.c: (var som) `headers' renamed `options' and semantics
11553         changed.  All references changed.
11554         (draw_title) `if(px!=-1 || px!=-1)' --> `if(px!=-1 || py!=-1)'.
11555         (build_target) Only inserts spacing if SOM_TOPT_SPACING not
11556         selected.
11557         (som_text_table) Removed.
11558         (som_output_text) New function.
11559
11560         * som.h: (struct som_submission_form) Removed `header', `reuse',
11561         replaced with bitmapped field `options'.
11562         (SOM_TOPT_*) New enum set for som_submission_form.options.
11563         (SOT_*) New enum set for som_output_text().
11564
11565         * temporary.c: (copy_variable) When copying the var label, only
11566         calls xstrdup() if it's non-NULL.
11567
11568         * var.h: (enum type `vartype') Removed; all references changed to
11569         `int'.
11570
11571         * vars-atr.c: (init_variable) Changed local var `nbytes' from
11572         `int' to `size_t'.
11573
11574 Thu Sep  5 22:05:56 1996  Ben Pfaff  <blp@gnu.org>
11575
11576         * font.h: Comment changes.
11577
11578         * groff-font.c: (groff_read_font) Initializes `name' field to
11579         NULL.  Handles `encoding' field.
11580
11581         * hash.c: (hsh_dump) [GLOBAL_DEBUGGING] Output formatting changes.
11582
11583         * postscript.c: (struct font_entry) Removed `position' field.
11584         (struct ps_font_combo) New struct.
11585         (struct ps_driver_ext) Removed field `next_position'.  New fields
11586         `combos', `next_combo'.  `last_font' field changed from
11587         `font_entry *' to `ps_font_combo *'.
11588         (ps_init_driver) Reformatted; handles new fields.  When
11589         OPO_AUTO_ENCODE is set, adds the two default fonts' encodings to
11590         the encoding list.
11591         (get_encoding, find_encoding_file) New functions.
11592         (add_encoding) Some code moved out into find_encoding_file().
11593         (postopen) Changed value for ${title}.
11594         (preclose) Sets `loaded' field to NULL after destroying the hash
11595         table.
11596         (ps_open_page) Added comment.  Inits the `combos' and `next_combo'
11597         fields.
11598         (ps_text_set_font_by_position) Figures out the current family if
11599         not known.
11600         (compare_ps_combo, hash_ps_combo, free_ps_combo) New functions.
11601         (switch_font) Implemented.
11602         (write_text) Calls switch_font() more often.  Format changes.
11603         #undefs its macros after they're no longer useful.
11604         (text) Changed `continue' at one point to a jump to the top of the
11605         loop because we don't want `separate' reset to 0 at that point.
11606         (load_font) No longer sets `position' in the font_entry created.
11607
11608 Wed Sep  4 21:45:35 1996  Ben Pfaff  <blp@gnu.org>
11609
11610         * font.h: (struct font_desc) New member `encoding', which is not
11611         properly handled yet.
11612
11613         * glob.c: (init_glob) Some new i18n code, which is probably
11614         screwed up.
11615
11616         * output.c: (outp_read_devices, outp_get_paper_size) Changed
11617         `size' local from `int' to `size_t'.
11618
11619         * postscript.c: New driver configuration parameter `auto-encode'.
11620         New enums OPO_AUTO_ENCODE, ODA_COUNT.
11621         (struct font_entry) New member `position'.
11622         (struct ps_driver_ext) Reordered.  New hash table member
11623         `encodings'; new members `next_position', `next_encoding',
11624         `last_font'.  Members `current', `prop', `fixed' changed from type
11625         `font_desc *' to `font_entry *'; all references changed.
11626         (struct ps_encoding) New struct.
11627         (read_ps_encodings, compare_ps_encoding, hash_ps_encoding,
11628         free_ps_encoding, add_encoding) New functions.
11629         (ps_init_driver) Added OPO_AUTO_ENCODE to default
11630         x->output_options.  Initializes new members of ps_driver_ext.
11631         Changed default value for prologue_fn, encoding_fn.  Calls
11632         read_ps_encodings after loading default fonts.
11633         (option_tab[], ps_option) Handle new configuration parameter.
11634         (switch_font) New function.
11635         (struct output_char) `font' member changed from `font_desc *' to
11636         `font_entry *'.  New member `separate'.
11637         (read_fontmap) Changed `size' from `int' to `size_t'.
11638         (output_line, put_number) New macros for write_text().
11639         (write_text) Optimizes text output by consolidating multiple
11640         calls to PostScript `show' operator.
11641         (text) Keeps track of when text arguments can't be consolidated by
11642         write_text(), and marks those spots in the output stream.
11643         (load_font) Sets `position' of the allocated font_entry to -1, cuz
11644         the font hasn't been switched to by switch_font(), which is where
11645         the position is important--the PostScript is what cares about the
11646         position.
11647
11648 Sat Aug 31 23:52:38 1996  Ben Pfaff  <blp@gnu.org>
11649
11650         * hash.c: (hsh_destroy) Ignores NULL argument.  Doesn't try to
11651         call a NULL free_func.
11652         (hsh_rehash) Elegantized.
11653         (hsh_probe) Fix bug that manifested when the table was expanded
11654         and thus had to change location in memory.  Good thing
11655         too--otherwise could have been much more subtle.
11656         (hsh_find) [GLOBAL_DEBUGGING] Not stubbed out anymore.
11657         (hsh_foreach) New function for hash table iteration.
11658
11659         * hash.h: (struct hsh_iterator) New.
11660
11661         * lexer.c: (parse_tagged_quote) Font and family name strings in
11662         tags are now null-terminated.
11663
11664         * output.c: (outp_evaluate_dimension) Fixed over-aggressive unit
11665         parsing.
11666         (internal_get_paper_size, outp_get_paper_size) Fixed; now work as
11667         documented.  (Never before tested?)
11668
11669         * output.h: Comment changes.
11670
11671         * postscript.c: New driver options `optimize-text-size',
11672         `optimize-line-size', `max-fonts-simult'.  New enum set for
11673         specing cached line types.  Comment fixes.
11674         (struct line_form) New struct.
11675         (struct ps_driver_struct) New members `text_opt', `line_opt',
11676         `max_fonts', `lines'.
11677         (ps_init_driver) Initializes new members of ps_driver_struct.
11678         (user option type enum set) New member `nonneg_int_arg'.
11679         (static var option_tab[]) Supports new options.
11680         (ps_option) Handles new options.
11681         (find_ps_file) Made static.  No longer calls hsh_dump().
11682         (ps_get_var) Made static.
11683         (preclose) Dumps out proper DSC trailer.
11684         (ps_open_page) Elegantized.
11685         (ps_close_page) Calls dump_lines() if appropriate.
11686         (ps_line_horz, ps_line_vert, ps_line_intersection) Reduced to
11687         wrappers around line().
11688         (int_2_compare, compare_line, dump_line, dump_fancy_line,
11689         dump_lines, hash_line, free_line, line) New functions for support
11690         of line caching.
11691         (write_text, text) Made static.
11692         (text) Added to font support, not finished.
11693
11694 Thu Aug 29 21:36:41 1996  Ben Pfaff  <blp@gnu.org>
11695
11696         * font.h: (struct font_desc) New members ascent, descent.
11697
11698         * groff-font.c: (groff_read_font) Calculates font ascent and
11699         descent from the ascent and descent of the `d' and `p' characters,
11700         respectively, as per a suggestion on comp.fonts.
11701
11702         * postscript.c: (ps_open_page, ps_close_page, ps_line_horz,
11703         ps_line_vert, ps_line_intersection) Rewritten to deal with changed
11704         prologue.
11705         (write_text) Handles text right-justification and centering (not
11706         full justification).  Still very inefficient.  (One output line
11707         per character?!)
11708         (struct output_char) Added fields for font and font size.
11709         (text) Many bugfixes.
11710
11711 Sat Aug 24 23:26:00 1996  Ben Pfaff  <blp@gnu.org>
11712
11713         * cmdline.c: (usage) Calls outp_list_classes().
11714
11715         * font.h: Comment fix.
11716
11717         * groff-font.c: New exported global var `space_index'.
11718         (groff_init) New function to initialize `space_index'.
11719         (hash_kern) Casts result to unsigned.
11720         (font_name_to_index) Renamed font_char_name_to_index.  All
11721         references changed.  Also, now returns the value of `space_index'
11722         when passed an ASCII space character as an argument.  Fixed
11723         handling of nulls.
11724         (font_get_kern_adjust) Changed i from `int' to `unsigned'.
11725         Handles passed NULL pointers properly.
11726
11727         * lexer.c: (parse_tagged_quote) Comment fix.  Better range
11728         checking.
11729
11730         * output.c: (outp_list_drivers) Removed.  Removed all references.
11731         
11732         * output.h: Comment fixes.
11733
11734         * postscript.c: (ps_open_global) Calls groff_init().
11735         (output_char) New structure.
11736         (write_text) New function.
11737         (text) No longer stubbed out!  Now the output is correct--with a
11738         few exceptions, one of them being that the page has to be held
11739         upside down into a mirror.
11740
11741 Sun Aug 11 21:31:22 1996  Ben Pfaff  <blp@gnu.org>
11742
11743         * font.h: Comment fix.
11744         
11745         * font.c: (name_to_index) Renamed font_name_to_index, made extern.
11746         All callers changed.
11747         (number_to_index) Renamed font_number_to_index, made extern.  All
11748         callers changed.
11749         (font_get_kern_adjust, font_get_char_metrics) New functions.
11750
11751         * output.h: New constant OUTP_T_INTERNAL_DRAW.
11752
11753         * postscript.c: Changed default line width back to 1/2 point.
11754         (ps_line_horz, ps_line_vert, ps_line_intersection) Now lines are
11755         in the center of the space allotted for them, not just a fixed
11756         offset from the edge of the space; this fixes some bugs.
11757         (ps_line_intersection) Now supports all command line styles.
11758         (ps_text_get_size) Bug fix in computation of em width.
11759         (text) New function, the meat behind ps_text_metrics and
11760         ps_text_draw.  Not complete.
11761         (ps_text_metrics, ps_text_draw) Removed the stub taken from
11762         ascii.c; call text().
11763
11764 Sat Aug 10 23:28:17 1996  Ben Pfaff  <blp@gnu.org>
11765
11766         * arena.c: (arena_free) Assert that the argument is non-NULL.
11767         
11768         * groff-font.c: (add_kern) Calls arena_free() for old_kern if and
11769         only if old_kern is non-NULL.
11770
11771         * postscript.c: (ps_init_driver) Changed default line width to 1
11772         point.
11773         (postopen) New prologue variables.
11774         (ps_line_horz, ps_line_vert, ps_line_intersection) Implements some
11775         more of the common line styles properly, but not all.
11776         (ps_text_metrics) Fixed problem with this stubbed out version that
11777         kept it from taking font sizes into account.
11778
11779 Thu Aug  8 22:31:11 1996  Ben Pfaff  <blp@gnu.org>
11780
11781         * arena.c: (arena_malloc) Bug fix.
11782         (arena_dump) [GLOBAL_DEBUGGING] New function.
11783
11784         * ascii.c: Comment fix.
11785         (count_fancy_chars, delineate) Now static functions.
11786         
11787         * filename.c: (interp_vars) Bug fixes.
11788
11789         * font.h: Comment fixes.
11790
11791         * glob.c: (init_glob) Sets set_viewwidth, set_viewlength at
11792         beginning in case we have an error message to display before
11793         initializing the display.
11794
11795         * groff-font.c: Comment fix.  Changed rehash threshold from 2/3
11796         full to 1/2 full.
11797         (groff_read_font) Bug fixes.
11798         (name_to_index) Increments hash.used.  Sets `name' field of hash
11799         entry properly.
11800         (add_kern) Sets kern_max_used after rehashing.  Other bug fixes.
11801
11802         * hash.c: Return type changed.
11803
11804         * postscript.c: Continued development.  Now marks lines on the
11805         paper, but very buggy.
11806
11807 Sat Aug  3 20:50:35 1996  Ben Pfaff  <blp@gnu.org>
11808
11809         * Changed comments in many source files from `/* xxx /* yyy */' to
11810         `/* xxx */ /* yyy */' for cleanliness.
11811
11812         * arena.c: (arena_sd_strdup) New function.
11813         
11814         * ascii.c: (struct ascii_driver_ext) New member `file'.
11815         (ascii_init_driver) Fills out member `file' for initing; uses
11816         close_file_ext for closing drivers.
11817         (ascii_option) Changed %.*s back to %s because the a_string's are
11818         always null-terminated.
11819         (postopen, preclose) New functions.
11820         (ascii_open_page) Uses new style of open_file_ext.
11821         (ascii_option, commit_line_buf, output_lines) Use ext->file.file
11822         instead of this->output.
11823         (__assert_fail) Removed.
11824
11825         * cmdline.c: Changed syntax_message[].
11826
11827         * error.c: #include's <readline/history.h> only if the history
11828         library is available, not if just the readline library is
11829         available.
11830
11831         * filename.c: (expand_line) Removed alloca() support.
11832         (interp_vars) No longer tilde-expands argument.  Limit on output
11833         length removed.
11834         (tilde_expand) Now treats argument as path rather than filename.
11835         [!unix] Now is a no-op function.
11836         (search_path) Better verbose message formatting.
11837         (open_file, close_file) Comment fixes.
11838         (close_file) [!unix] Doesn't bother with pipes.
11839         (open_file_ext) Completely rewritten, interface revamped.
11840         (close_file_ext) New function.
11841
11842         * font.h: Comment changes.
11843
11844         * frequencies.q: Removed AIX alloca support since it doesn't use
11845         alloca.
11846
11847         * hash.c: Comment changes & additions.
11848         (hsh_create) Initializes entire table instead of first M entries.
11849         (hsh_probe) Stupid bug fixed.  Now it works.
11850         (hsh_dump) [GLOBAL_DEBUGGING] New function.
11851
11852         * main.c: (parse) Detects EOF properly in token-eating loop.
11853         Should the STOP token have its value changed to 0?
11854
11855         * misc.c: (blp_getdelim) [HAVE_GETDELIM] Now it's a macro.
11856         (blp_getline) Now it's a macro.
11857
11858         * output.h: (struct outp_driver) Removed members output, filename.
11859         
11860         * output.c: (outp_init) [!NO_POSTSCRIPT] Installs PostScript
11861         drivers in driver table.
11862         (outp_read_devices) Frees buf.  Warns if there are no active
11863         output drivers.
11864         (outp_configure_clear) Sets outp_configure_vec to NULL after
11865         deleting its elements.
11866         (configure_driver, destroy_driver) Removed references to output,
11867         filename members of outp_driver.
11868         (outp_evaluate_dimension, internal_get_paper_size,
11869         outp_get_paper_size) New functions.
11870
11871         * postscript.c: Continued development.  Now links but doesn't make
11872         any marks on the page.  Lotsa bugs I suppose.
11873
11874         * str.c: (strcasecmp) [!HAVE_STRCASECMP] New function.
11875
11876         * str.h: Comment changes.
11877
11878 Sat Jul 27 22:32:38 1996  Ben Pfaff  <blp@gnu.org>
11879
11880         * Removed dependencies on non-nested comments in several files.
11881         Also removed references to (unix || __unix__) in #if's since
11882         prefh.orig makes those two equivalent.
11883         
11884         * ascii.c: (ascii_open_global) Creates ascii_arena.
11885         (ascii_close_global) Destroys ascii_arena.
11886         (ascii_init_driver) Doesn't create ascii_arena.
11887         (ascii_copy_driver) Removed.
11888         (ascii_option) Possible bugfix regarding %s vs. %.*s with a_string's.
11889         (outp_class ascii_class) Removed ascii_copy_driver reference.
11890
11891         * frequencies.q: Now can display all statistics except median.
11892         Still not finished.
11893
11894         * output.c: Handles outp_class.ref_count so output class
11895         destructors are called properly.
11896         (add_class) Sets ref_count to 0.
11897         (configure_driver) Initializes class if ref_count++ is 0.
11898         (destroy_driver) Destructs class if --ref_count is 0.  Frees the
11899         class output file name.
11900         
11901         * output.h: (struct outp_class) Removed copy_driver, inited.
11902         Added ref_count.
11903
11904         * postscript.c: Completely replaced but not finished.
11905         
11906 Tue Jul 23 21:48:36 1996  Ben Pfaff  <blp@gnu.org>
11907
11908         * approx.h: #includes <float.h>.
11909
11910         * arena.h, arena.c: Many functions changed to take an arena **
11911         instead of an arena *, for consistency.  All callers changed.
11912         (arena_alloc) Now creates a new arena if passed *A that is NULL.
11913         (arena_destroy) Sets *A to NULL.
11914         
11915         * ascii.c: (delineate) Implements OUTP_T_VERT correctly.  Removed
11916         assertion that `width' be positive.
11917
11918         * command.c: Removed #if's from cmd_table.
11919         (walk_cmdtable_func) [0] New function (debug code).
11920         (init_cmd_parser) [0] Dumps out cmd_table (debug code).
11921         (parse_cmd) Doesn't return failure for unimplemented commands.
11922
11923         * common.h: (SYSMIS) Changed from DBL_MAX to -DBL_MAX.
11924         (SYSCODE) New constant macro.
11925
11926         * descript.q: Checks for positive n_variables before performing
11927         analysis.
11928
11929         * file-handle.q: (get_handle_by_filename) Bug fix: passes &f to
11930         avl_find instead of &fp as arg 2.
11931
11932         * frequencies.g, frequencies.q: Continued updating; now compiles &
11933         works again, but not complete.
11934
11935         * main.c: Changes to user messages.
11936
11937         * misc.c: (reverse) [0] New function.
11938
11939         * settings.h: Comment removed.  #includes "common.h".
11940
11941         * som.c: (som_set_null) New function.
11942         (som_set_value, som_set_string, som_set_text) More detailing
11943         assertions.
11944         (som_set_float) Implemented function.
11945         (dump_columnated_table) Bug fix regarding page breaks.
11946         (draw_cell) Bug fix regarding text that spilled out of a cell.
11947         (draw_intersection, draw_horz_rule, draw_vert_rule) No longer draw
11948         null lines.
11949         (get_cell_size) Support SCON_EMPTY cells.
11950         (get_table_size) When calculating rules' widths and heights, mask
11951         out SLIN_SPACING bit.  Added SOPT_X_HLTL support.
11952         
11953         * som.h: (som_any_cell) New option SOPT_X_HTLT.  Removed
11954         SOPT_X_SHADE.
11955         (struct som_submission_form) New member `header'; all users
11956         changed.
11957
11958         * val-labs.c: (get_label) User messages changed.
11959
11960         * var.h: Changed FREQUENCIES structures.
11961
11962         * vars-atr.c: (is_num_user_missing, is_str_user_missing) Made
11963         inline.
11964         
11965 Fri Jul 19 19:11:13 1996  Ben Pfaff  <blp@gnu.org>
11966
11967         * approx.h: Definition of EPSILON now depends on system's
11968         DBL_EPSILON.  Removed GNU C specific code.
11969         (cmpapx) Renamed approx_compare.
11970
11971         * frequencies.g, frequencies.q: Continued updating; still doesn't
11972         compile.
11973
11974         * groff-font.c: (name_to_index) Fix bug that kept it from
11975         compiling.
11976
11977         * hash.c, hash.h: Completed work.
11978
11979         * var.h: Changes to freq_tab, frequencies_proc.
11980         
11981 Wed Jul 17 21:23:36 1996  Ben Pfaff  <blp@gnu.org>
11982
11983         New hashing code.
11984         * hash.c, hash.h: New files.  Not completed.
11985         * Makefile.am: Added hash.c to source file list.
11986         * font.h: (struct font_desc) New member kern_size_p.
11987         * groff-font.c: Uses hash.h.
11988         (hashpjw) Moved to hash.c.
11989         (next_prime_power) Rewrote, renamed hsh_next_prime, moved to
11990         hash.c.
11991         (static var hash) New member size_p.
11992         * var.h: Includes hash.h.
11993         (struct freq_tab) Changed AVL_TREE to hash_tab.
11994
11995         * vars-prs.c: Comment, formatting fixes.
11996
11997         * frequencies.g, frequencies.q: Continued updating.  Not yet
11998         working.
11999
12000         * formats.c: Bug fix.
12001
12002 Tue Jul 16 22:10:04 1996  Ben Pfaff  <blp@gnu.org>
12003
12004         Increasing parallelism between DESCRIPTIVES and FREQUENCIES.
12005         * descript.g: Comment fixes.
12006         * descript.q: Comment fixes.  Moved some declarations into var.h.
12007         Made dsc_info a static table.  Updated FIXMEs.
12008         (internal_cmd_descriptives) Beautified.
12009         
12010         * frequencies.q: Started updating into working order.
12011         * frequencies.g: New file analogous to descript.g.
12012         * var.h: Comment fixes.  Added structures for FREQUENCIES.
12013         
12014         * som.c: Removed vestiges of crushing and partial table support.
12015
12016 Sun Jul 14 15:45:31 1996  Ben Pfaff  <blp@gnu.org>
12017
12018         * Many more changes to som.c especially, but these will not be
12019         documented as I have resolved to remove them.  This patchlevel is
12020         being released solely so that I can fall back to it if I decide
12021         that removing the changes is not a good idea.
12022
12023 Sat Jul 13 09:58:44 1996  Ben Pfaff  <blp@gnu.org>
12024
12025         * som.c: (global var som) New member `cum_y'.
12026         (build_target) Properly handles titles for partial tables.
12027         (dump_partial_beg, dump_partial_mid, dump_partial_end)
12028         Merged into single new function dump_partial().  Fixed problem
12029         with titles on partial tables.
12030         (dump_table) Calls dump_partial() for all parts of partial tables.
12031         (dump_page) Criteria for drawing title changed.
12032         
12033 Fri Jul 12 22:03:36 1996  Ben Pfaff  <blp@gnu.org>
12034
12035         * command.c: (cmd_table) Added LIST, WEIGHT.
12036
12037         * command.c: (cmd_remark) No longer frees `s' since it's not
12038         dynamically allocated.
12039         
12040         * data-out.c: (convert_f) Now correctly handles the case where
12041         abs(v->f)<1 but v->f rounds to a value of 1.00 given the specified
12042         number of decimals.
12043         (som_destroy_all_tables) Removed argument.  All callers changed.
12044         (som_vline, som_hline) Argument validity checking corrected.
12045         (som_set_value) Implemented half-heartedly.
12046         (replicate_table) Copies tables piece-by-piece when using Checker.
12047
12048         * som.h: New line style SLIN_1THIN, currently equivalent to
12049         SLIN_0.  New enum set SOM_SUB_*.
12050         (struct som_submission_form) Removed `seq_no'.  Added `type'.
12051         
12052         * list.q: Newly working file; uses partial tables.
12053         
12054         * som.c: (som_reduce_table) Renamed som_set_table_height().
12055         (som_crush) Removed argument `group'.
12056         (global var som) Removed `nt', `seq_no'.  Added `type'.
12057         (som_submit_table) Arguments changed.
12058         (output_table) Removed partial table code.
12059         (build_target) New arg; partial table support added.  All callers
12060         changed.
12061         (dump_plain_table) Removed partial table code.
12062         (dump_partial_beg, dump_partial_mid, dump_partial_end) New functions.
12063         (dump_table) Supports partial tables.
12064         (dump_page) New argument to allow not drawing top and/or bottom
12065         headers.  All callers changed.  Supports partial tables.
12066
12067 Sat Jul  6 22:22:25 1996  Ben Pfaff  <blp@gnu.org>
12068
12069         * data-out.c: Changed `#include <approx.h>' to `#include
12070         "approx.h".
12071         (convert_F) Comment fix.  Now won't print `-.000', etc.
12072
12073         * descript.q: Now Z-scores work, although there appears to
12074         be a bug (which might actually be in data-out.c:convert_F()).
12075         (descriptives_trns_proc, descriptives_trns_free) New functions.
12076         (run_z_pass) Implemented.
12077         
12078         * var.h: Comment fixes.
12079         (dsc_z_score, descriptives_trns) New structs.
12080         (descriptives_trns) Added to any_trns as `dsc'.
12081
12082         * error.c, error.h: New error class, IS (Installation Script
12083         error), used in those instances where the error is in the
12084         installation, but there is a script file or installation file that
12085         can be usefully referred to.
12086         
12087         * output.c: Change many IE classes to IS classes.
12088
12089         * cases.c, command.c, common.c, crosstabs.q, expr-evl.c,
12090         frequencies.q, list.q, vars-prs.c, vfm.c: Removed reference to
12091         HAVE_MALLOC_H because Borland C++ alloca() is broken, so why
12092         include the corresponding header?
12093         
12094         * glob.c: (init_glob) Don't malloc term_buffer under Checker.
12095         Don't bail out if termcap can't be read.
12096
12097         * som.c: (som_destroy_table) Removed.
12098         (som_reduce_table, som_destroy_all_tables) New functions.
12099         (som_crush) New function, not implemented.
12100         
12101         * som.h: New table option STAB_CRUSH.  Comment fix.  New struct
12102         som_submission_form.  Function prototypes revised.
12103
12104         Outputting huge tables (1000s of rows) a few rows at a time
12105         is supported, though untested.  May even break everything.
12106         Actually, the code doesn't even compile right now.
12107         * som.c: (struct som) New fields htv, nt, seq_no.
12108         (som_submit_table) Multiple arguments changed to a single
12109         pointer to struct submission_form.  Only increments subtable_num
12110         if seq_no is zero.  Only destroys table if it's not going to
12111         be reused.
12112         (replicate_table) New function.
12113         (output_table) Comment fix.
12114         (examine_table) Changed inline code to code calling
12115         replicate_table().  Calculates htv.  Supports partial tables.
12116         (draw_title) Removed comment.
12117         (build_target) Only allows for title on first part of partial
12118         tables.
12119         (dump_plain_table) Only resets table chunk number on first part
12120         of partial tables; FIXME: doesn't work quite right.  Supports
12121         partial tables.
12122         (dump_page) Titles only on first part of partial tables.
12123
12124 Fri Jul  5 20:16:19 1996  Ben Pfaff  <blp@gnu.org>
12125
12126         * Thanks to an unreliable IDE hard drive, I have spent the last
12127         day reconstructing my Debian GNU/Linux installation and redoing
12128         the previous day's changes--somehow I managed to save every file
12129         except for output.c and output.h.  So the following changes could
12130         really be considered independent of the output.c, output.h changes
12131         from Jul 4.
12132
12133         * output.h, output.c: Moved the outp_configure_vec global var,
12134         outp_names struct, and enum set OUTP_S_* from output.h to output.c.
12135         outp_configure_vec is now static.
12136         
12137 Thu Jul  4 20:20:24 1996  Ben Pfaff  <blp@gnu.org>
12138
12139         * The entire philosophy behind configuration of the output drivers
12140         changed.  Now there is a termcap-type configuration where drivers
12141         to be read are determined beforehand, rather than parsing the
12142         entire output init file and storing it in memory & deciding what
12143         to actually use later.  Faster & more memory-efficient at the same
12144         time, cool.
12145         
12146         * output.c: Comment fix.  Removed outp_init_drivers global var.
12147         Removed all references to synonyms.  New structure outp_defn.  New
12148         global vars outp_macros, outp_configure_vec.
12149         (search_name, delete_name, add_name, check_configure_vec,
12150         expand_name, find_defn_value) New static functions.
12151         (outp_configure_clear, outp_configure_add, outp_configure_macro,
12152         outp_read_devices) New extern functions.
12153         (outp_init) Much functionality moved into outp_read_devices.
12154         (outp_read_devices) Format of output init file changed; name of
12155         file is `devices' rather than `output' to avoid Makefile
12156         conflicts.
12157         (outp_clear) Renamed outp_done.
12158         (outp_list_classes) Bug fix, cleaned up.
12159         (outp_list_drivers) Not implemented anymore.
12160         (outp_configure_driver) Now a static function; simplified; now
12161         interpolates macros; supports new structure.
12162         (outp_enable_driver, match_synonym) Removed; all references
12163         removed.
12164         (find_driver) First argument removed.
12165         
12166         * output.h: Global var outp_init_drivers removed; new structure
12167         outp_names; new enum set OUTP_S_*; new global var
12168         outp_configure_vec; function prototypes for output.c exports
12169         updated.
12170         
12171         * main.c: (main) Calls outp_read_devices() after parsing the
12172         command line.
12173         
12174         * cmdline.c: (parse_command_line) New option -v --verbose;
12175         --version changed to -V.  --device option changed syntax to just
12176         take a single device name.  Accepts key=value declaration of
12177         output init file macros.  Syntax message updated.
12178
12179         * filename.c: (expand_line) New function.
12180         (interp_environ_vars) Renamed interp_vars; no longer uses
12181         fixed-size buffer.
12182         (blp_getenv) Allows $ARCH and $VER pseudo-environment-vars to be
12183         overridden by real environment vars.
12184         (search_path) Uses verbose_msg() instead of #ifdef'd printf().
12185         * filename.h: interp_environ_vars() renamed interp_vars().
12186         
12187         * error.c, error.h: Added extern variable `verbosity', message
12188         class MM.
12189         
12190         * error.c: (vmsg) Support message class MM.
12191         (verbose_msg) New function.
12192
12193         * descript.q: (generate_z_varname) Bug fix in generation of
12194         Z-score varnames.
12195         (dump_z_table) Bug fix in column headers.
12196         
12197         * ascii.c: (ascii_init_driver) Changed minimum number of lines per
12198         page from 29 to 15.  Don't set a default for ops[OPS_INIT,
12199         OPS_DONE].  Writes the uninit string when the driver is closed.
12200         (ascii_open_page) Write the init string before the first page.
12201         (output_shorts) Form of main loop changed from `while' to `for'.
12202         Bug fix with overstrikes: the character is printed *after* the
12203         backspace.  Eliminated a lot of `& 0xff' modifiers.
12204         (advance_to_left_margin) New function.
12205         (return_carriage, output_lines) Handle left margin.
12206
12207 Thu Jul  4 00:35:59 1996  Ben Pfaff  <blp@gnu.org>
12208
12209         * ascii.c: New option `carriage-return-style'.
12210
12211         * ascii.c: (count_fancy_chars) New function.
12212         (delineate, text_metrics) Use new function; bug fixes regarding
12213         rich text strings.
12214         (text_draw) Bug fix with rich text.
12215         (output_string, output_shorts) Reordered.
12216         (output_shorts) Now handles boxchars and some overstrike font
12217         changes.
12218         (output_char, return_carriage) New functions.
12219         (output_lines) Now handles overstriking and font changes properly;
12220         some code moved to output_shorts.
12221
12222 Tue Jul  2 22:13:23 1996  Ben Pfaff  <blp@gnu.org>
12223
12224         [GLOBAL_DEBUGGING]
12225         * ascii.c: New member `debug' in ascii_driver_ext.
12226         (ascii_init_driver, delineate) Uses new member.
12227
12228         Now you can set a vertical height on writing text.
12229         * ascii.c: (delineate) Keeps track of vertical position.
12230         (text_draw) No longer considers fully justified text an internal
12231         error.
12232         
12233         * output.h: New flag OUTP_T_VERT; other OUTP_T_ values changed.
12234
12235         Tables' titles are drawn; they can have variable height.
12236         * som.c: `som' struct has new member, title_height.
12237         (draw_title) New argument.  Moved within file.  All caller
12238         changed.
12239         (build_target) New argument, amount of space needed for first row.
12240         Calculates height of title, takes that into account.  All callers
12241         changed.
12242         (dump_plain_table, dump_columnated_table) Took calculation of y1,
12243         y2 out of loop.
12244         (dump_columnated_table) [GLOBAL_DEBUGGING] Debugging code
12245         improved.
12246         (dump_columnated_table) Organized for readability.
12247         (dump_page) Makes use of som.title_height.
12248
12249         * som.c: Many comment bug fixes.
12250
12251         * descript.q: (try_name, generate_z_name) Bug fix regarding
12252         generation of Z-score variable names.
12253         * var.h: Removed num from descriptives_proc; all referents removed.
12254
12255 Mon Jul  1 22:13:39 1996  Ben Pfaff  <blp@gnu.org>
12256
12257         * ascii.c: (ascii_line_horz, ascii_line_vert,
12258         ascii_line_intersection) Added debugging code.
12259
12260         Added a descriptive line above each table to describe it.
12261         * command.c: (parse_cmd) Calls som_new_series.
12262         
12263         * som.c: New static vars table_num, subtable_num.  New `som'
12264         member `title'.
12265         (dump_page) New arguments.
12266         (som_submit_table) Handle new variables.
12267         
12268         * som.c, som.h: (som_submit_table) New arguments.  All callers
12269         changed.
12270         (som_new_series) New function.
12271         (build_target) Makes room for extra line.
12272         (draw_title) New function.
12273         (dump_page) Calls draw_title.  Bug fix: doesn't always set
12274         som.ext->cp to 0.
12275         
12276         Columnation of tables support.
12277         * som.h: Deleted fr, lr, ri from som_table.  Reorganized.
12278         
12279         * som.c: Deleted references to fr, lr, ri.
12280         (som_columnate) Bux fix: sets group member of table.
12281         (som_add_options) Function removed.
12282         (dump_table) Split into three functions; extensively reworked.
12283         
12284         * descript.q: (dump_z_table) Better output table formatting; added
12285         title support to correspond to som.h changes.
12286         (display) Title support.
12287
12288         * output.h: Added OUTP_T_NONE.
12289         
12290 Mon Jul  1 13:00:00 1996  Ben Pfaff  <blp@gnu.org>
12291
12292         * descript.q: Improved handling of Z scores; still not perfect.
12293         
12294         * output.h, ascii.c: Added hook for getting em width of current
12295         font.
12296         
12297         * som.c: Uses new em-width hook.  Added debugging code to
12298         several functions.
12299         (som_columnate) New argument.
12300         (som_add_options) Removed.
12301
12302 Jun 29 17:40:47 1996  Ben Pfaff  <blp@gnu.org>
12303
12304         * som.h, som.c, output.c, output.h, ascii.c: Updated to work with
12305         rules as a property of the table instead of as a property of the
12306         cells.
12307         
12308         * ascii.c: Added `header' to table of options.
12309         
12310         * descript.q: Added even shorter statistic names; modified to work
12311         with new som interface.
12312         
12313         * misc.c (blp_getdelim): Bug fix.
12314         
12315         * version.c: includes 'conf.h'.
12316         
12317 ----------------------------------------------------------------------
12318 Local Variables:
12319 mode: change-log
12320 version-control: never
12321 End: